ZHCAEL2 October 2024 AM3351 , AM3352 , AM3354 , AM3356 , AM3357 , AM3358 , AM3359 , AM4372 , AM4376 , AM4377 , AM4378 , AM4379 , AM620-Q1 , AM623 , AM625 , AM625-Q1 , AM62A1-Q1 , AM62A3 , AM62A3-Q1 , AM62A7 , AM62A7-Q1 , AM62P , AM6411 , AM6412 , AM6421 , AM6422 , AM6441 , AM6442
在 TI 基于 Arm? 的處理器上,有兩個(gè)在 Linux 引導(dǎo)期間初始化的驅(qū)動(dòng)程序:MDIO 驅(qū)動(dòng)程序以及 CPSW 和/或 PRU_ICSSG 驅(qū)動(dòng)程序。MDIO 驅(qū)動(dòng)程序用于與以太網(wǎng) PHY 通信。CPSW 和/或 PRU_ICSSG 驅(qū)動(dòng)程序可以設(shè)置以太網(wǎng) MAC。為了檢查這些驅(qū)動(dòng)程序是否已正確初始化,需要檢查 DUT 的引導(dǎo)日志。此時(shí)將出現(xiàn)以下初始化階段:
以下日志顯示了初始化過(guò)程中應(yīng)該執(zhí)行的操作的示例。為每行打印的時(shí)間戳在不同的引導(dǎo)序列之間可能不同。
[ 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 驅(qū)動(dòng)程序是 davinci_mdio
,CPSW 驅(qū)動(dòng)程序是 am65-cpsw-nuss
。DUT 上有兩個(gè) TI DP83867 PHY,預(yù)期的 PHY 地址將自舉至地址 0 和 1。MDIO 驅(qū)動(dòng)程序在電路板 DTS 中指定的這些地址處檢測(cè)到這些 PHY,并將 PHY 連接到 DP83867 PHY 驅(qū)動(dòng)程序。在啟動(dòng)序列之前未連接以太網(wǎng)電纜,因此不會(huì)顯示鏈路 up 狀態(tài)消息。
以下日志顯示了 MDIO 驅(qū)動(dòng)程序掃描總線以查找在 DUT 的 DTS 文件中定義的以太網(wǎng) PHY。這是符合預(yù)期的正常初始化序列。此過(guò)程將確定 PHY 供應(yīng)商,也將確定相應(yīng)的 PHY 驅(qū)動(dòng)程序。
[ 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 然后由相應(yīng) DTS 定義中的 CPSW 端口引用。以下代碼是從 TI EVM 提取的一段編輯過(guò)的代碼,其中展示了 MDIO 和用于以太網(wǎng)端口的 PHY,以及在 Linux 引導(dǎo)期間如何在 Linux 控制臺(tái)中識(shí)別 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 驅(qū)動(dòng)程序無(wú)法與以太網(wǎng) PHY 通信,則可能會(huì)發(fā)生多個(gè)錯(cuò)誤,這些錯(cuò)誤要么與 DTS 有關(guān),要么由于硬件實(shí)施問(wèn)題導(dǎo)致 PHY 狀態(tài)出現(xiàn)問(wèn)題。
現(xiàn)在,以太網(wǎng) PHY 已經(jīng)被識(shí)別,接下來(lái)可以查詢這些 PHY 以查看是否與鏈路伙伴建立了鏈路。如果連接了以太網(wǎng)電纜并建立了鏈路,DUT 控制臺(tái)上會(huì)顯示以下日志。數(shù)據(jù)比特率和雙工模式在建立鏈路時(shí)商定。請(qǐng)注意,在此示例中,速度為 1Gbps、鏈路為全雙工、以太網(wǎng)接口隨時(shí)可用。
[ 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 上的以太網(wǎng)速度和雙工模式在鏈路伙伴之間通過(guò)自動(dòng)協(xié)商確定。上面的消息顯示了一個(gè)成功的初始化序列。
如果驅(qū)動(dòng)程序初始化有問(wèn)題,建議參考與電路板設(shè)計(jì)相關(guān)的 TI EVM,檢查電路板 DTS。以下代碼是用于定義 TI SK-AM62B-P1 EVM 的 CPSW 接口(以太網(wǎng) MAC)的 DTS 文件示例,可用作參考。
以下 DTS 示例展示了在使用定制電路板 DTS 時(shí)需要驗(yàn)證的一些檢查點(diǎn)。
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;
};
};
章節(jié)摘要:
以下是表明初始化過(guò)程成功的條件: