根据TI官方debug信息https://processors.wiki.ti.com/index.php/Ethernet_Triage_Checklist_for_AM3x/4x/5x_CPSW可以看出出现以下信息说明phy的硬件是没有问题的,之后出现的问题TI才会去提供帮助。
[ 3.053916] cpsw 48484000.ethernet: Detected MACID = 34:03:de:ef:5e:54
[ 3.060541] cpsw 48484000.ethernet: initialized cpsw ale version 1.4
[ 3.066944] cpsw 48484000.ethernet: ALE Table size 1024
[ 3.072256] cpsw 48484000.ethernet: cpts: overflow check period 500 (jiffies)
[ 3.080252] cpsw 48484000.ethernet: cpsw: Detected MACID = 34:03:de:ef:5e:55
接下来加载Linux时,始终重复的打印如下log:
[ 396.877450] cpsw 48484000.ethernet eth0: Link is Down
[ 396.888206] IP-Config: Retrying forever (NFS root)...
[ 396.893339] net eth0: initializing cpsw version 1.15 (0)
[ 397.022390] Micrel KSZ9031 Gigabit PHY 48485000.mdio:01: attached PHY driver [Micrel KSZ9031 Gigabit PHY] (mii_bus:phy_addr=48485000.mdio:01, irq=POLL)
[ 397.038974] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 397.044914] net eth1: initializing cpsw version 1.15 (0)
[ 397.053345] net eth1: phy "/ocp/ethernet@48484000/mdio@48485000/ethernet-phy@2" not found on slave 1
[ 397.063574] IPv6: ADDRCONF(NETDEV_UP): eth1: link is not ready
[ 399.129306] cpsw 48484000.ethernet eth0: Link is Up - 100Mbps/Full - flow control off
[ 399.137237] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 399.161631] Sending DHCP and RARP requests ...... timed out!
通过反复打印的log大概率判断还是phy驱动有问题,具体什么问题到这里还是有点懵。
接着看了下dts关于phy的配置,发现是两个phy。对应这eth0和eth1,查找log上下文发现eth0没有任何报错,推测是phy1出了问题。在结合硬件原理图发现,PCB上没有焊接phy1芯片。到这里基本可以确定是硬件缺少一个phy1的原因了,因为本身am5728支持双网口,最后配置DTS为一个网口就成功跑起来了。
主要屏蔽的是: dual_emac关键字