描述
XAPP1305 提供一个带 PCS/PMA 内核的 SGMII 示例,称之为“PS EMIO SGMII”。
它不使用 FPGA 外部的 PHY 设备。
对于我的使用案例,我想使用具有 SGMII 接口的外部 PHY 来连接。
Linux 只能通过在设备树中设置 phy-handle 的 MDIO 管理一个 PHY。
这个系统中有两个 PHY。怎么管理这两个 PHY?
解决方案
在 XAPP1305 的 ps_emio_eth_sgmii 示例中,PCS/PMA 内核节点分配给 PHY-handle,而“xlnx,phy-type = <0x4>”则在 PHY 节点中设置,这就意味着它在 SGMII 配置中。
在这种情况下,xilinx PHY 驱动程序只能删除 PCS/PMA PHY 寄存器 0 中的隔离。
如需了解更多信息,敬请访问 https://github.com/Xilinx/linux-xlnx/blob/xilinx-v2018.2/drivers/net/phy...
在有两个 PHY 的系统中,我们可以将外部 PHY 节点分配给 phy-handle,让 Linux 来管理外部 PHY 设备。
我们可以用 configuration_vector 和 configuration_valid 端口手动删除 PCS/PMA 隔离。如欲了解更多详情,敬请参阅 (PG047)。
在外部 PHY 设备的驱动程序中(例如 Marvell),应该针对 SGMII 模式配置 SGMII 接口。
我们需要在 PHY 节点中设置“PHY -mode = "sgmii"”。
请参见: https://github.com/Xilinx/linux-xlnx/blob/xilinx-v2018.2/drivers/net/phy...
不要在 GEM 节点上设置“ phy-mode =” sgmii“”。 原因是 GEM 驱动程序启用了 PS 中的 PCS 和 SGMII 配置,并阻止了 GMII 接口连接到 EMIO。
请参见: https://github.com/Xilinx/linux-xlnx/blob/xilinx-v2018.2/drivers/net/eth...
if (bp->phy_interface == PHY_INTERFACE_MODE_SGMII) config |= GEM_BIT(SGMIIEN) | GEM_BIT(PCSSEL);