一. 简介
前几篇文章学习了 在 NXP官方uboot上做网络驱动的一部分更改。地址如下:
ALPHA开发板网络方案说明-CSDN博客
NXP官方uboot针对ALPHA开发板网络驱动更改说明一-CSDN博客
NXP官方uboot针对ALPHA开发板网络驱动更改说明二-CSDN博客
本文继续来学习在 NXP官方uboot上做网络驱动方面的更改,适用正点原子ALPHA开发板的uboot。
二. NXP官方uboot针对ALPHA开发板网络驱动更改
前面几篇文章学习了 在 NXP官方uboot上做网络驱动方面的更改,适用正点原子ALPHA开发板的uboot。
本文继续学习:更改 网络 PHY芯片 LAN8720A驱动的更改。
4. 修改 drivers/net/phy/phy.c 文件中的函数 genphy_update_link
uboot
中的
LAN8720A
驱动有点问题,打开文件 drivers/net/phy/phy.c,找到 genphy_update_link函数 ,这是个通用
PHY
驱动函数,此函数用于更
新
PHY
的连接状态和速度。
使用
LAN8720A
的时需要在此函数中添加一些代码。
更改后
genphy_update_link 函数如下所示:
int genphy_update_link(struct phy_device *phydev)
{
unsigned int mii_reg;
#ifdef CONFIG_PHY_SMSC
static int lan8720_flag = 0;
int bmcr_reg = 0;
if (lan8720_flag == 0)
{
bmcr_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR);
phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, BMCR_RESET);
while(phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR) & 0X8000){
udelay(100);
}
phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, bmcr_reg);
lan8720_flag = 1;
}
#endif
/*
* Wait if the link is up, and autonegotiation is in progress
* (ie - we're capable and it's not done)
*/
mii_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR);
...................
return 0;
}
注意:这里需要参考 网络PHY芯片 LAN8720A 的数据手册:LAN_8720A-CP_datasheet.pdf文档。
LAN8720A 数据手册所在目录:
【正点原子】阿尔法Linux开发板(A盘)-基础资料-2022 /【正点原子】阿尔法Linux开发板(A盘)-基础资料 / 硬件资料 / 芯片资料
代码分析: