目前有两个网口,分别从t4240的EC1, EC2出来连接的88e1111 phy芯片。其中一个phy接rj45从板子直出,另一个是过背板的(后面再说)。
marvell的phy驱动在uboot下driver/net/phy/marvell.c
1. 查看该驱动,没有看到88e1111的驱动,修改一个最相似的88e1111s驱动,将其修改为88e1111驱动。下面这个是phy_driver结构体源码描述:
static struct phy_driver M88E1111S_driver = {
.name = "Marvell 88E1111S",
.uid = 0x1410cc0,
.mask = 0xffffff0,
.features = PHY_GBIT_FEATURES,
.config = &m88e1111s_config,
.startup = &m88e1011s_startup,
.shutdown = &genphy_shutdown,
};
uboot下读取设备id,根据读出的设备id:014100cc2 修改下上面源码uid,将其改为014100cc2 ,这样驱动就可以适配上了。
2. uboot源码,在driver/net/phy/phy.c下修改下phy_init() 只保留phy_marvell_init(),别的也用不上,给注释掉先。
3. 修改mdio总线:
查看board/freescale/t4rdb/eth.c下 board_eth_init()函数。
根据T4240RM手册 rcw部分,ec1对应fm2.mac5, ec2我在rcw下选的是fm2.mac6。根据这些信息我们去修改board_eth_init(),去掉无关的10G网络相关代码,serdes相关的也可以去掉,没有用到serdes上的网络,我们用的是ec上的网口,注意接口类型改成rgmii。
phy地址也需要设置下,比如我的fm2的网口phy地址是0,可以这样设置:
fm_info_set_phy_address(FM2_DTSEC5, 0);
修改完成后进行uboot的编译。
烧写验证下,FM2.MAC5是EC1,就是我直出的网口,可以ping通了。