Linux - 在连接到 Marvell 交换机时配置 TI AM335X MDIO



我有一块带有Sitara AM3352的板-网络不是通过以太网PHY,而是通过一个开关(Marvell 88E6341(连接到带有MII的CPU。交换机具有连接到PHY和RJ45连接器的端口。

我的Linux版本是4.14

我为拥有网络正确配置了dts文件,但我也希望MDIO驱动程序处于活动状态,以便能够管理交换机。

看起来我可以将Sitara MDIO控制器与";devmem";命令,但我更喜欢用";正常的";使用内核devinci-mdio驱动程序。

我的dts是这样的:

&cpsw_emac0 {
phy_id = <&davinci_mdio>, <0>;
fixed-link = <1 1 100 0 0>;
phy-mode = "mii";
};
&mac {
slaves = <1>;
pinctrl-names = "default", "sleep";
pinctrl-0 = <&cpsw_default>;
pinctrl-1 = <&cpsw_sleep>;
status = "okay";
};
&davinci_mdio {
compatible = "ti,cpsw-mdio";
pinctrl-names = "default", "sleep";
pinctrl-0 = <&davinci_mdio_default>;
pinctrl-1 = <&davinci_mdio_sleep>;
status = "okay";
};

这就是我在dmesg:中得到的

[ 0.975182] mdio_bus fixed-0: GPIO lookup for consumer reset
[ 0.975195] mdio_bus fixed-0: using lookup tables for GPIO lookup
[ 0.975202] mdio_bus fixed-0: lookup for GPIO reset failed
[ 0.975223] libphy: Fixed MDIO Bus: probed
[ 0.994386] mdio_bus 4a101000.mdio: GPIO lookup for consumer reset
[ 0.994398] mdio_bus 4a101000.mdio: using lookup tables for GPIO lookup
[ 0.994405] mdio_bus 4a101000.mdio: lookup for GPIO reset failed
[ 1.047323] davinci_mdio 4a101000.mdio: davinci mdio revision 1.6, bus freq 1000000
[ 1.055025] davinci_mdio 4a101000.mdio: no live phy, scanning all
[ 1.061484] davinci_mdio 4a101000.mdio: mdiobus_register ret=-5

我认为这种设计很常见,所以如果有人能处理好这个问题,如果他能分享这些知识,我将不胜感激。感谢

激活网络交换机的devinc_mdio内核驱动程序并非易事,但它必须使用Marvell软件包来管理交换机。因此,不使用内核驱动程序,而是可以从Linux用户空间访问MDIO控制器的物理地址;CCD_ 1";命令:

  • 在am3352中,MDIO控制器地址为0x4a1101000-映射此地址,长度应为0x90字节
  • 使用数据0x410000ff启用地址0x4a1101004中的控制器(ff表示时钟速度,因此可以使用另一个值(
  • 读取和写入将使用地址0x4a1101080

现在您可以实现Marvell软件包(或其他软件包(所需的MDIO读写功能

最新更新