ZHCAEL2 October 2024 AM3351 , AM3352 , AM3354 , AM3356 , AM3357 , AM3358 , AM3359 , AM4372 , AM4376 , AM4377 , AM4378 , AM4379 , AM620-Q1 , AM623 , AM625 , AM625-Q1 , AM62A3 , AM62A3-Q1 , AM62A7 , AM62A7-Q1 , AM62P , AM6411 , AM6412 , AM6421 , AM6422 , AM6441 , AM6442
在 TI 基于 Arm® 的处理器上,有两个在 Linux 引导期间初始化的驱动程序:MDIO 驱动程序以及 CPSW 和/或 PRU_ICSSG 驱动程序。MDIO 驱动程序用于与以太网 PHY 通信。CPSW 和/或 PRU_ICSSG 驱动程序可以设置以太网 MAC。为了检查这些驱动程序是否已正确初始化,需要检查 DUT 的引导日志。此时将出现以下初始化阶段:
以下日志显示了初始化过程中应该执行的操作的示例。为每行打印的时间戳在不同的引导序列之间可能不同。
[ 1.060850] davinci_mdio 8000f00.mdio: Configuring MDIO in manual mode
[ 1.095345] davinci_mdio 8000f00.mdio: davinci mdio revision 9.7, bus freq 1000000
[ 1.098179] davinci_mdio 8000f00.mdio: phy[0]: device 8000f00.mdio:00, driver TI DP83867
[ 1.098198] davinci_mdio 8000f00.mdio: phy[1]: device 8000f00.mdio:01, driver TI DP83867
[ 1.098246] am65-cpsw-nuss 8000000.ethernet: initializing am65 cpsw nuss version 0x6BA01103, cpsw version 0x6BA81103 Ports: 3 quirks:00000006
[ 1.098500] am65-cpsw-nuss 8000000.ethernet: initialized cpsw ale version 1.5
[ 1.098505] am65-cpsw-nuss 8000000.ethernet: ALE Table size 512
[ 1.099141] pps pps0: new PPS source ptp0
[ 1.099456] am65-cpsw-nuss 8000000.ethernet: CPTS ver 0x4e8a010c, freq:500000000, add_val:1 pps:1
[ 1.120288] am65-cpsw-nuss 8000000.ethernet: set new flow-id-base 19
在此示例中,MDIO 驱动程序是 davinci_mdio
,CPSW 驱动程序是 am65-cpsw-nuss
。DUT 上有两个 TI DP83867 PHY,预期的 PHY 地址将自举至地址 0 和 1。MDIO 驱动程序在电路板 DTS 中指定的这些地址处检测到这些 PHY,并将 PHY 连接到 DP83867 PHY 驱动程序。在启动序列之前未连接以太网电缆,因此不会显示链路 up 状态消息。
以下日志显示了 MDIO 驱动程序扫描总线以查找在 DUT 的 DTS 文件中定义的以太网 PHY。这是符合预期的正常初始化序列。此过程将确定 PHY 供应商,也将确定相应的 PHY 驱动程序。
[ 6.902614] am65-cpsw-nuss 8000000.ethernet eth1: PHY [8000f00.mdio:01] driver [TI DP83867] (irq=POLL)
[ 6.902648] am65-cpsw-nuss 8000000.ethernet eth1: configuring for phy/rgmii-rxid link mode
[ 6.938874] am65-cpsw-nuss 8000000.ethernet eth0: PHY [8000f00.mdio:00] driver [TI DP83867] (irq=POLL)
[ 6.938911] am65-cpsw-nuss 8000000.ethernet eth0: configuring for phy/rgmii-rxid link mode
电路板 DTS 文件中定义的 PHY 然后由相应 DTS 定义中的 CPSW 端口引用。以下代码是从 TI EVM 提取的一段编辑过的代码,其中展示了 MDIO 和用于以太网端口的 PHY,以及在 Linux 引导期间如何在 Linux 控制台中识别 MDIO 和 PHY。
A DTS PHY node example, shortened for discussion purposes
&cpsw3g_mdio {
cpsw3g_phy0: ethernet-phy@0 {
reg = <0>; <-- check PHY address, verify this is correct
......
};
};
This line shows the PHY defined in the DTS being identified
[ 6.938874] am65-cpsw-nuss 8000000.ethernet eth0: PHY [8000f00.mdio:00] driver [TI DP83867] (irq=POLL)
如果 MDIO 驱动程序无法与以太网 PHY 通信,则可能会发生多个错误,这些错误要么与 DTS 有关,要么由于硬件实施问题导致 PHY 状态出现问题。
现在,以太网 PHY 已经被识别,接下来可以查询这些 PHY 以查看是否与链路伙伴建立了链路。如果连接了以太网电缆并建立了链路,DUT 控制台上会显示以下日志。数据比特率和双工模式在建立链路时商定。请注意,在此示例中,速度为 1Gbps、链路为全双工、以太网接口随时可用。
[ 11.042192] am65-cpsw-nuss 8000000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx
[ 11.042255] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
TI EVM 上的以太网速度和双工模式在链路伙伴之间通过自动协商确定。上面的消息显示了一个成功的初始化序列。
如果驱动程序初始化有问题,建议参考与电路板设计相关的 TI EVM,检查电路板 DTS。以下代码是用于定义 TI SK-AM62B-P1 EVM 的 CPSW 接口(以太网 MAC)的 DTS 文件示例,可用作参考。
以下 DTS 示例展示了在使用定制电路板 DTS 时需要验证的一些检查点。
Linux Source tree directory: arch/arm64/boot/dts/ti/k3-am62x-sk-common.dtsi
...
&cpsw3g {
bootph-all;
pinctrl-names = "default";
pinctrl-0 = <&main_rgmii1_pins_default>; <-- verify pin mux is correct
};
&cpsw_port1 {
bootph-all;
phy-mode = "rgmii-rxid"; <-- verify interface mode is correct
phy-handle = <&cpsw3g_phy0>; <-- verify phy name is referenced correctly
};
...
&cpsw3g_mdio {
bootph-all;
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&main_mdio1_pins_default>; <-- verify pin mux is correct
cpsw3g_phy0: ethernet-phy@0 {
bootph-all;
reg = <0>;
ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>; <-- rx clock delay
ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
ti,min-output-impedance;
};
};
章节摘要:
以下是表明初始化过程成功的条件: