RK3568点亮PCIe3.0接口的WIFI模块(QCN9074)

RK3568镜像:内核Linux 6.1.118,根文件系统buildroot 2021

WIFI模块:WLE3000HX,其芯片为高通QCN9074,PCIe3.0接口

RK3568大多开发者是使用SDK中的Linux5.10进行开发,但是该内核的ath11k驱动版本较低,不适配WiFi模块,所以要么将高等级Linux中的驱动移植到5.10里,要么针对高等级Linux重新做BSP开发。笔者选了后者,遂下文所提及内核皆为Linux 6.1.118。

1. 设备树修改

  • PCIe供电节点:

基于自己板卡的控制IO修改。

	vcc_eth_power:vcc-eth-power {
		compatible = "regulator-fixed";
		regulator-name = "vcc_eth_power";
		enable-active-low;            // 低电平有效(关键修正)
		regulator-always-on;          // 保持电源始终使能(根据需求可选)
		pinctrl-names = "default";
		pinctrl-0 = <&gpio_eth_power>; // 引用 pinctrl 配置
		gpio = <&gpio0 RK_PC1 GPIO_ACTIVE_LOW>; // 低电平有效
		status = "okay";
	};

没有供电的话会报错phy init failed。下面这种报错,首先要排查供电情况,再看时钟

[    4.706113] phy phy-fe8c0000.phy.9: rockchip_p3phy_rk3568_init: lock failed 0x6890000, check input refclk and power supply
[    4.706144] phy phy-fe8c0000.phy.9: phy init failed --> -110
  • PCIe复位IO:

基于原理图配置复位IO,由于PCIe是专用IO,所以只需要复用复位IO一个即可,其他会自动复用。

!!!注意复位IO是高/低电平有效,瑞芯微evb提供的dtsi默认是高电平

&pcie3x2 {
	reset-gpios = <&gpio2 RK_PD6 GPIO_ACTIVE_LOW>;
	vpcie3v3-supply = <&vcc3v3_pcie>;
	status = "okay";
};

至此,DTS已经全部修改完成,在内核config中使能PCI相关选项后,lspci就能识别出设备:

root@rk3566rk3568:/root# lspci
0002:20:00.0 PCI bridge: Fuzhou Rockchip Electronics Co., Ltd Device 3566 (rev 01)
0002:21:00.0 Network controller: Qualcomm Device 1104 (rev 01)

2. WIFI驱动

Linux6.1中make ARCH=arm64 menuconfig就能直接出现ath11k相关选项。

如果是Linux5.10,需要先开启下图框中的三个依赖才可以出现ath11k选项,但是Linux5.10的ath11k驱动版本较低,不适配该WiFi模块.......

至此,驱动和设备树的移植工作都完成了,驱动可以正常匹配上设备了,但是...还需要固件,否则报错如下:

root@rk3566rk3568:/lib/firmware/ath11k/QCN9074/hw1.0# dmesg | grep ath11k
[    5.259550] ath11k_pci 0002:21:00.0: BAR 0: assigned [mem 0xf0200000-0xf03fffff 64bit]
[    5.259680] ath11k_pci 0002:21:00.0: enabling device (0000 -> 0002)
[    5.260625] ath11k_pci 0002:21:00.0: MSI vectors: 16
[    5.260692] ath11k_pci 0002:21:00.0: qcn9074 hw1.0
[    5.423325] mhi mhi0: Direct firmware load for ath11k/QCN9074/hw1.0/amss.bin failed with error -2
[    5.423436] ath11k_pci 0002:21:00.0: failed to power up mhi: -110
[    5.423459] ath11k_pci 0002:21:00.0: failed to start mhi: -110
[    5.423473] ath11k_pci 0002:21:00.0: failed to power up :-110
[    5.423642] ath11k_pci 0002:21:00.0: failed to create soc core: -110
[    5.423662] ath11k_pci 0002:21:00.0: failed to init core: -110
[    5.425807] ath11k_pci: probe of 0002:21:00.0 failed with error -110

3. WIFI模块固件

WIFI 固件:下载amss.bin,m3.bin,board-2.bin

但是直接copy进系统里或者编译进rootfs镜像都不行,因为先驱动被加载 寻找固件,再挂载根文件系统,所以,又有两个选择:1.驱动取消内联进镜像里,编译成ko模块,后续手动加载ath11k驱动;2.将固件编译进内核镜像。笔者选择了后者。

修改Linux的目录下.config,编译镜像时读取地址下的bin文件,将其编译进了boot.img里,且为驱动提供了一个虚拟逻辑地址

CONFIG_EXTRA_FIRMWARE="ath11k/QCN9074/hw1.0/amss.bin ath11k/QCN9074/hw1.0/m3.bin ath11k/QCN9074/hw1.0/board-2.bin"
CONFIG_EXTRA_FIRMWARE_DIR="/mnt/d"

内核编译log如下:

4. 效果

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脆莓不想当 Linux 小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值