由于公司国产化的需求,打仗了国产化phy芯片KD3002,目标是uboot和内核启动后网口可以ping通电脑。硬件平台是复旦微处理器与KD3002 phy芯片。大略记录上在uboot和内核移植phy芯片时的问题。kd3002芯片有两路网口,根据产品需求,一起对外的引脚是RGMII接口,一起是SGMII接口。
在uboot和内核代码中差异其他phy芯片的很大一点则是要先配置kd3002的时钟,否则芯片上电后无法通过mdio总线访问phy节点 ,连接网线电脑也不会link。
其余一个很大的差异,则是kd3002寄存器访问的办法是间接访问,通过ap和cp总线访问寄存器。

针对RGMII接口,由于KD3002的驱动直接默认是RGMII,将厂家的驱动移植进去,网口一样平常可以直接ping通,对付千兆网口,须要访问时延寄存器,调节发送或者吸收时延。
对付SGMII接口,这里参考复旦微例程,Gmac 通过GMII 接口挂pcs/pma ip,通过PL emio 出SGMII,接以太网PHY芯片。
这块SGMII口调试花费了靠近一周韶光,由于按照复旦微的例程网口怎么也没有ping通。末了后来和其他同事谈论,改成逼迫百兆试试,把稳这里逼迫百兆,指的是PL SGMII IP核搭建的phy和KD3002 phy都要配置成逼迫百兆模式,没想到网口ping通了。
这里花了好永劫光,也问了技能支持,咨询了同事,末了也没有想明白为什么逼迫百兆可以通,自协商模式弗成。由于RGMII模式自协商是没有问题的。希望广大的网友也帮忙解答下。
末了,关于uboot和kernel的移植,我是查看了网上phy芯片的函数调用过程,将驱动代码添加的,这里不再细讲了,
关于uboot和phy的调试,我采取了最笨拙的方法,通过printf或者printk打印,本来想通过BUG_ON和WARN_ON函数的,但很奇怪,无论uboot或者内核都没有打印堆栈信息,只能通过打印和自己生啃代码理解phy驱动的函数调用过程了
————————————————
版权声明:本文为博主原创文章,遵照 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_42385874/article/details/140068172