T536 PCIe 网卡调试
PCIe 主桥控制器
开启 PCIe 主桥控制器
先在 SoC 设备树文件中找出 PCIe 主桥控制器的相关节点,发现有两种模式的 PCIe :
pcie: pcie@4800000 {
compatible = "allwinner,sunxi-pcie-v210-v2-rc";
#address-cells = <3>;
#size-cells = <2>;
bus-range = <0x0 0xff>;
reg = <0 0x04800000 0 0x480000>;
reg-names = "dbi";
...
clocks = <&dcxo24M>, <&ccu CLK_PCIE_REF_AUX>,<&ccu CLK_PCIE_SLV>;
clock-names = "hosc", "pclk_aux","pclk_slv";
resets = <&ccu RST_BUS_PCIE>, <&ccu RST_BUS_PCIE_PWRUP>;
reset-names = "pclk_rst", "pwrup_rst";
status = "disabled";
};
pcie_ep: pcie_ep@4800000 {
compatible = "allwinner,sunxi-pcie-v210-ep";
#address-cells = <3>;
#size-cells = <2>;
reg = <0 0x04800000 0 0x480000>,
<0 0x20000000 0 0x8000000>;
reg-names = "dbi", "addr_space";
...
clocks = <&dcxo24M>, <&ccu CLK_PCIE_REF_AUX>,<&ccu CLK_PCIE_SLV>;
clock-names = "hosc", "pclk_aux","pclk_slv";
resets = <&ccu RST_BUS_PCIE>, <&ccu RST_BUS_PCIE_PWRUP>;
reset-names = "pclk_rst", "pwrup_rst";
status = "disabled";
};
这次仅调试 PCIe 的 RC 模式,RC 模式是 PCI 传统的类树状连接模式,而 EP 模式是 PCIe 独有的点对点连接模式。
在 board 设备树文件中,如果未发现这两个节点的开启状态,需要自己添加。我这里仅添加了 pcie@4800000 的开启状态。需要注意的是 pcie 和 pcie_ep 不能一起开启。
开启 PCIe 配置项
在内核配置单添加以下配置项:
CONFIG_AW_PCIE_RC=y
CONFIG_PCIEPORTBUS=y
CONFIG_PCIEAER=y
CONFIG_PCIE_ECRC=y
CONFIG_PCI_MESON=y
在 Buildroot 添加以下配置项,添加 PCIe 测试工具:
BR2_PACKAGE_PCIUTILS=y
初步运行
初步运行时发现以下错误:
[ 5.274643] sunxi:pcie-4800000.pcie:[WARN]: Failed to get "reset-gpios"
[ 5.282086] sunxi:pcie-4800000.pcie:[WARN]: Failed to get "wake-gpios"
检查底板硬件原理图,发现有这两个引脚:
以下是它们两的引出部分:
在 SOC GPIO 芯片中,发现:
查看 PI10~11 是否被其它设备复用,在终端使用以下命令查看:
cat /sys/kernel/debug/pinctrl/3604000.pinctrl/pinmux-pins
发现 TWI3 复用了 PI11~12 ,只能暂时把它的状态改为 "disabled" 。
另外,需要在 pcie 设备树节点中添加以下属性:
&pcie {
reset-gpios = <&pio PI 10 GPIO_ACTIVE_HIGH>;
wake-gpios = <&pio PI 11 GPIO_ACTIVE_LOW>;
status = "okay";
};
一般来说,reset 引脚是高电平,使能时被置低;wake 引脚是低电平,使能时被置高。
再次运行
进入终端,输入命令 lspci ,发现有主桥控制器了。
PCIe 网卡
初次调试
插入 PCIe 网卡在启动开发板,进入终端输入 lspci 未发现该从设备节点。和硬件工程师沟通,得知 PCIe 插槽的 I2C 引脚并未与底板连接。连接上之后,重新上电,进入终端输入 lspci 发现 PCIe 网卡。
PCIe 网卡 R8169 调试
开启相关配置
在内核配置单中,添加以下配置,开启 R8169 的驱动:
CONFIG_R8169=y
添加固件
在下列网址中下载最新固定包:
kernel/git/firmware/linux-firmware.git - Repository of firmware blobs for use with the Linux kernel
在固件包内,找到 rtl_nic 目录,把这个目录包括目录内的文件复制到开发板的文件系统的 /lib/firmware 内。
测试
插上 PCIe 网卡,上电开发板,进入终端输入 lspci :
root@T536:~# lspci
00:00.0 PCI bridge: Device 1f6d:abcd (rev 01)
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
然后输入 ifconfig -a 发现 PCIe 网卡:
root@T536:~# ifconfig -a
...
enp1s0 Link encap:Ethernet HWaddr D0:E4:4C:99:06:38
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
...
接上网线,按顺序输入以下命令去动态获取 IPv4 :
ifconfig enp1s0 up
udhcpc -i enp1s0
ping 外网:
root@T536:~# ping qq.com
PING qq.com (113.108.81.189): 56 data bytes
64 bytes from 113.108.81.189: seq=0 ttl=54 time=6.007 ms
64 bytes from 113.108.81.189: seq=1 ttl=54 time=7.312 ms
64 bytes from 113.108.81.189: seq=2 ttl=54 time=6.963 ms
64 bytes from 113.108.81.189: seq=3 ttl=54 time=6.947 ms
^C
--- qq.com ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 6.007/6.807/7.312 ms
PCIe 网卡 Intel(R) 82575/82576 调试
开启相关配置
在内核配置单中,添加以下配置,开启 Intel(R) 82575/82576 的驱动:
CONFIG_IGB=y
测试
- 插上 PCIe 网卡,上电开发板。由于该网卡有双网口,输入 lspci 时,会发现有两个从设备。
- 输入 ifconfig -a ,也有两个网口,分别是 enp1s0f0 和 enp1s0f1 。
- 接上网线,开启对应网口,获取动态 IPv4 ,ping 外网。
以上操作和 R8169 的测试方法一致。