御花园网站建设公司,备份管理wordpress,百度快速排名优化技术,网站建设计划方案总结
还是从设备树#xff0c;mac驱动#xff0c;mac驱动对mdio总线的注册#xff0c;phy驱动 #xff0c;phy的datasheet#xff0c;cpu的datasheet 几个方面来看来看
0.确认供电#xff0c;以及phy的地址(一般会有多个地址#xff0c;根据相关引脚电平可配置)
1.确…总结
还是从设备树mac驱动mac驱动对mdio总线的注册phy驱动 phy的datasheetcpu的datasheet 几个方面来看来看
0.确认供电以及phy的地址(一般会有多个地址根据相关引脚电平可配置)
1.确认reset的有效电平
2.确认IO的有效电平
3.确认phy-mode以及它的pinctrl的复用情况 (cat /sys/kernel/debug/pinctrl/pinctrl-handles 看current state)
4.确认rx_tx_delay的使能和对应平台的时序
5.确认中断属性带来的影响
设备树
主要是选择pinctrl配置reset脚设置IO电平设置phy的寄存器phy-mode中断属性等
eth0: eth0xd4281800 {compatible eth;pinctrl-names default, rgmii-pins;pinctrl-0 emac_pmx_func0 emac_pmx_func2 emac_pmx_func3 emac_pmx_func4;pinctrl-1 emac_pmx_func0 emac_pmx_func1 emac_pmx_func2 emac_pmx_func3 emac_pmx_func4;reg 0xd4281800 0x200;interrupts 10 11;lpm-qos PM_QOS_CPUIDLE_BLOCK_AXI;status okay;reset-gpio gpio 34 0;reset-active-low;/* 根据phy的电气属性选择这个使能电平,一般都是拉低复位拉高正常工作 */reset-delays-us 0 100000 100000;clk-tuning-enable;tx-clk-config 0x1;rx-clk-config 0x1;3v3-enable 0; /* IO voltage, 1 - 3.3v, 0 - 1.8v 跟据phy的电气属性选择不同电平 */ phy-handle phy0;mdio: mdio-bus {#address-cells 0x1;#size-cells 0x0;/* YT8531 10M/100M/1000M 3.3V RGMII PHY */phy0: phy0 {compatible ethernet-phy-id4f51.e91b,ethernet-phy-ieee802.3-c22;device_type ethernet-phy;reg 0x0; /* set phy address*/phy-mode rgmii;//interrupts 11; /* 有中断属性的话当phy的状态变为running就不会去调用phy_read_status */};};
};
状态机
3.10.33内核版本如下 不同版本内核状态机跟设备树都是不一样的操作具体以各版本源码为准如果设备了配了中断属性RUNNING状态就不会自适应百兆千兆了
void phy_state_machine(struct work_struct *work)
{
...... case PHY_RUNNING:/* Only register a CHANGE if we are polling or ignoring* interrupts and link changed since latest checking.*/if (!phy_interrupt_is_valid(phydev)) {old_link phydev-link;err phy_read_status(phydev);if (err)break;if (old_link ! phydev-link)phydev-state PHY_CHANGELINK;}break;
......
}
mac驱动
up eth0时会调用emac驱动中注册的net_device的netdev_ops成员的ndo_open
net_device_opsndo_openof_phy_connectphy_prepare_linkphydev-adjust_link handler这个handler是mac驱动根据link状态来调整speed和duplex
rx_tx_delay
RX和TX的delay是决定数据流是否能通的关键因为不同平台的数据传输时序各有差异phy驱动需要对这个delay进行调整 寄存器
PHY是 IEEE802.3 中定义的一个标准模块。PHY 寄存器的地址空间为 5 位因此寄存器范围是0 到31 最多有 32 个寄存器。IEEE802.3 定义了地址为0-15 这16个寄存器的功能地址16-31的寄存器留给芯片制造商自由定义。当然不同PHY,还是以他们的datasheet为准 访问方式
不同的phy的大体上都有这三种方式来访问phy的寄存器扩展寄存器不同平台的差异就比较明显因为是有phy厂家自己定义的