Ethernet PHY芯片AR8035驱动


这几天都在看phy芯片AR8035驱动的整体架构。发现还是有点复杂,涉及不少的代码。

由于在 RK 系列的 SoC 中内置了以太网 MAC 控制器,所以只需要搭配一颗以太网 PHY芯片,即可实现以太网卡功能。按照规范,即使是不同厂家的 PHY,仍然有一部分寄存器的定义是通用的,只要配置了这些通用的寄存器,基本上 PHY 就可以正常工作。因此,在 Linux 驱动中有通用的 PHY 驱动,3288 之前的芯片所配套的 SDK 中使用的都是通用驱动,当然 SoC 中的 MAC 驱动是需要实现的。所以理论上,如果不需要使 PHY 厂家提供的自定义的寄存器配置实现一些个性化的功能,那么 PHY 的驱动就不需要修改。从 3288 之后的 SDK 开始,打开了各个 PHY 厂家在 Linux 上提供驱动的配置,但是基本上,各家的驱动差异很小,基本上也是调用通用驱动的接口。

  几个重要的源代码介绍如下:
 
1. phy_device.c 
查询和配置phy架构,包含了phy通用的驱动。
里面有个函数:
int genphy_config_aneg(struct phy_device *phydev)
 
作用:restart auto-negotiation or write BMCR
 
2. phy.c 
读写和配置PHY设备。
 
有两个重要函数
int phy_read(struct phy_device *phydev, u16 regnum)
读取phy reg。
 
int phy_write(struct phy_device *phydev, u16 regnum, u16 val)
写phy reg。
 
3. driver.c 
设备驱动管理中心。
 
4. bus.c 
总线驱动管理
 
5. mdio_bus.c
mdio总线驱动。有个重要的结构体
 
struct bus_type mdio_bus_type = {
 .name  = "mdio_bus",
 .match  = mdio_bus_match,
 .suspend = mdio_bus_suspend,
 .resume  = mdio_bus_resume,
};
 
6. MII.h 和 MII.c

这是MII协议。里面有MII协议的PHY寄存器地址,及MII通信接口库。




你可能感兴趣的:(Linux内核)