文章目录

写在前面一 、驱动框架二、驱动调用流程

写在前面

移植瑞芯微px30 网卡RTL8363的时候,不能识别到网卡 日志打印No found PHY, 只能调试一下代码,调试完成后,梳理网卡框架如下

一 、驱动框架

此框架是很老的linux kernel 4.4内核思路,我看最新内核的GMAC结构体略有不同

匹配过程如下

1 在phy_device.c中,通过get_phy_device 函数拿到设备的id号

2 phy_device_register 将设备节点挂到phy_map中

3 通过mii_bus 注册的函数操作设备读写

二、驱动调用流程

kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c

rk_gmac_probe() //探测px30 gmac

kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

stmmac_dvr_probe()

kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c

stmmac_mdio_register()

kernel/drivers/of/of_mdio.c

of_mdiobus_register()

mdiobus_register()

kernel/drivers/net/phy/mdio_bus.c //

__mdiobus_register()

mdiobus_scan()

kernel/drivers/net/phy/phy_device.c

get_phy_device()

rtl8367rb_init()

rtk_switch_init()

get_phy_device()

a、通过bus->id区别rtl8363 phy设备与fixed phy设备

b、rtl8363NB 扫描端口1 3 16

// 测试函数,读取到的默认数据为 0x0432 mdio读取没问题

rtk_switch_reg1b03()

drivers/net/ethernet/stmicro/stmmac/rtl8367c/rtk_switch.c

smi_readreg1b03()

drivers/net/ethernet/stmicro/stmmac/rtl8367c/smi.c

MDC_MDIO_READ

drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c

stmmac_mdio_write_switch()// 真正调用mdio的地方

stmmac_mdio_read_switch()//所有的通信都是通过这两个函数去通信的 这是rk平台自定的,正常通过mii_bus->stmmac_read_switch/mii_bus->stmmac_write_switch

推荐链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。