【问答】Zynq UltraScale+ MPSoC — 带有 PCS/PMA 内核与外部 PHY 的 SGMII

描述
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);

最新文章

最新文章