• 正文
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

以太網(wǎng)使用SGMII(SerDes)的PHY驅(qū)動修改

4小時前
112
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

以太網(wǎng)的PHY和MAC的接口可以使用RGMII,SGMII等類似下圖:由于大部分驅(qū)動都是RGMII,使用SGMII的時候需要對驅(qū)動做對應(yīng)的修改。芯片可以使用外部引腳進行配置。但是有的時候外部配置的不對,需要通過驅(qū)動修正。以YT8521為例看下驅(qū)動的修改。通過修改擴展寄存器(0xA001)可以修改相關(guān)配置。以下是不帶操作系統(tǒng)的驅(qū)動相關(guān)部分:

/* utp=>rgmii */? ? reg=XXXphy_read_ext(pGmac,PAGE0,?0xa001); ? ?/*?NOTE:?this function should not be called more than one for each chip. */? ? reg &=(~7);;? ??XXXphy_write_ext(pGmac,PAGE0,?0xa001, reg);

一般的可以直接用的驅(qū)動都是將其2:0位配置為0,配置為SGMII需要修改這部分。以下是Linux操作系統(tǒng)下的驅(qū)動相關(guān)部分:

of_property_read_string(of_node,?"phy-connection-type", &ctype);? ??if(ctype && (strcmp(ctype,?"rgmii-id") ==?0))? ? {? ? ? ? val = ytphy_read_ext(phydev,?0xa001);? ? ? ? netdev_info(phydev->attached_dev,?"%s , phy addr: %d, read reg 0xa001 = 0x%xn",? ? ? ? ? ? __func__, phydev->mdio.addr,val);? ? ? ? val &= (~7);? ? ? ? ytphy_write_ext(phydev,?0xa001, val);? ? }? ??else? ? {#if (KERNEL_VERSION(4, 5, 0) > LINUX_VERSION_CODE)? ? ? ? netdev_info(phydev->attached_dev,?"%s , phy addr: %d, phy-connection-type is invalidn",? ? ? ? ? ? __func__, phydev->addr);#else? ? ? ? netdev_info(phydev->attached_dev,?"%s , phy addr: %d, phy-connection-type is invalidn",? ? ? ? ? ? __func__, phydev->mdio.addr);#endif? ? }

它是找名字匹配rgmii-id的,不匹配則不修改。如果要自己修改,需要修改這部分。不使用其他特殊功能的話,修改上述部分,PHY就可以正常運行了。

相關(guān)推薦