今天调试openBMC的时候遇到了一个小问题,在解决的过程中对BMC和phy之间的交互有了进一步的理解。
1、问题:进入openBMC系统,输入ifconfig,没有找到AST2500芯片所对应的网络适配器的端口。
2、解决过程:
(2)怀疑是phy芯片的配置信息的问题,AST2500芯片上有2个MAC,mac0没有使用,mac1下面挂了2个phy芯片。在BMC启动的时候按esc进入U-boot界面,输入mii device,查看目前控制MDIO总线的mac端口,将mac端口切换至正在使用的mac口,使用mii info address指令来查看对应address下的phy的配置信息,发现两个phy芯片的速率设置都没问题,并且也都开了自协商;
(2)查看BMC的启动log,发现其中有一条如下的提示:
ftgmac100 le680000.ethernet (unamed net_device) (uninitialized): eth%d: no PHY found
因此怀疑是因为BMC的mac下面没有找到phy芯片,从而导致BMC中的网络适配器初始化失败。但是刚才的一个步骤已经验证了phy已经正常工作了,且和BMC之间的MDIO链路是正常的。检查另一台ok的机器发现其phy芯片的地址是0x08和0x09,而出问题的机器的地址是0x00和0x09。查看原理图发现在原理图中是将phy的地址设计成了0x00,应该是之前同事调试的过程中发现了这个问题然后改成了0x08。
3、问题解决:通过rework,将phy的地址从0x00修改为0x08之后,BMC的开机log正常,不再提示no PHY found,并且ifconfig之后可以正常识别到网络适配器。
4、总结:这个小问题让我进一步理解了从BMC的mac端到RJ45整个链路的工作过程。
BMC ==> PHY ==> switch ==> PHY ==> RJ45
如上面一个简图所示,BMC的mac端口首先通过RGMII连接到PHY卡上,然后phy芯片上可以出MDI信号也可以出SGMII,在我们的架构中连接BMC的PHY芯片出一路SGMII信号到switch上面,然后通过switch接出到输出端的PHY芯片上,此PHY芯片通过RJ45对外输出MDI。
在这个链路中两个PHY的管理口都是通过MDIO挂在BMC的mac1下面的,因此在u-boot当中使用mii device的时候会扫出来两个设备。并且该设备的地址正确与否也会影响到BMC的网络适配器的初始化,如果无法识别到phy芯片的话就无法初始化成功。