This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/DM385:Marvell 88E1510中的 phy ID 错误

Guru**** 2551110 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/603522/linux-dm385-wrong-phy-id-from-marvell-88e1510

器件型号:DM385

工具/软件:Linux

大家好、

我正在尝试使我们的以太网 PHY 正常工作并运行到一个问题中。 我们使用的是带有 Marvell 88E1510 phy 芯片的 DM385。 到目前为止、我已经采取了以下步骤来使该芯片正常工作:

1.在内核配置中启用 Marvell phy

2.修补内核的 Marvell phy 驱动程序以添加对88E1510的支持( )

3.在 uboot 中将 phy 从复位中取出

此时、启动时、DaVinci_mdio.c 可以探测 phy 并打印:

DaVinci_MDIO DaVinci_MDIO.0:DaVinci MDIO 修订版本1.6
DaVinci_MDIO DaVinci_MDIO.0:检测到的 phy 掩码 fff7FFFF
DaVinci_MDIO.0:探测
DaVinci_MDIO DaVinci_MDIO.0:PHY[19]:器件0:13、驱动程序未知 

此时、我能够修改内核的 device.c (arch/arm/mach-omap2/devices.c)、将 cpsw_slave[]的 phy_id 从0:00更改为0:13。 进行此更改后、CPSW 可能会找到 phy、但它给出的 ID 不正确:

找到 CPSW phy:id 为0x4820482
未找到 PHY 0:01

从我对 Marvell 驱动程序所做的修改中、ID 应为 0x01410dd0、而不是 0x4820482。 如果我修改驱动程序以将 id 更改为 0x4820482、Davinci_mdio.c 将正确查找 phy 的驱动程序。 尽管它找到了驱动程序、但它实际上不起作用。

有人知道我的 phy ID 为什么返回 为0x4820482而不是 0x01410dd0吗?

谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Mikael、

    您是否已检查 MDIO 线路上的上拉电阻是否按指定方式提供? 请务必检查 MDIO/MDC 的漫威要求

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Dwarakesh、

    MDIO/MDC 两条线路上都有2k 电阻器上拉电阻器。

    您是否还建议查看其他内容?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您可以探测 MDIO/MDC 线路并检查信号是否正常?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗨、Dwarakesh、

    是的、MDIO/MDC 信号看起来不错。 我们看到总线以大约833KHz 的频率运行。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Mikael、

    请验证 PHY 的自举配置是否正常。 此外、交叉验证上述补丁是否在初始化时正确配置 PHY。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Dwarakesh、

    这可能是问题所在。 我不太熟悉如何启动 phy、因此我不确定如何验证自举配置。 您能否为我提供一些指导、以便我了解如何做到这一点?

    另外,您是否在我的第一篇帖子中提到了 Marvell 驱动程序的补丁? 如果是这样、我们甚至还没有达到加载驱动程序的目标、但我可以告诉您。 在正确返回 phy ID 之前、它不会加载驱动程序。

    谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Dwarakesh、

    我已经深入研究过这个问题、我注意到一个错误(不确定它是否实际重要)是 MDIO 时钟计算不正确。

    在 Davinci_MDIO.c 的_Davinci_MDIO_reset 中、我们获得 MDIO_IN 时钟的时钟速率。 在我的系统上、这被报告为150MHz。

    在 data->pdata.bus_freq 中配置的 bus_freq 为1MHz。

    除数计算结果为0x95。

    我在总线上看到的实际输出实际上是833KHz。

    将数字反向工作、我看到实际 MDIO_IN 时钟为125MHz。

    根据我可以收集的数据、MDIO_IN 时钟值来自 cpsw_ick 时钟。 您知道150MHz 的设置位置吗?

    我在 TRM 中看到的另一个有趣的东西是第2.3.2节。 它说:

    SATA SERDES 还为 EMAC 交换机 IP 提供参考(对于 GMII 为125MHz、对于50MHz RMII、对于5MHz RGMII)。

    125MHz 的来源是什么? 由于我的 phy 应该使用 RGMII、我实际上应该接收5MHz 时钟吗?

    请告诉我您的想法。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您可以在 GMII_SEL 寄存器中选择 RGMII。 请将0x48140650地址与 devmem2工具一起使用以设置值并进行检查。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Mikael、

    我刚才正确地注意到了您的问题。 第一个串行器/解串器时钟与外设时钟(即 cpsw_iclk 或 emac_iclk)不同。 cpsw_iclk 从 sysclk5派生、而 sysclk4又从 L3_PLL 设置派生。 请检查 L3_PLL 寄存器以交叉确认正在配置的内容。 正如您正确地指出的、MDC 源自该时钟。 您可以调整除数并检查 MDC 值。 您可以使其达到预期的1MHz、并检查它是否有任何差异。 对于 AFAR 读取、MDC 时钟的最大限制只有 DM38x 端2.5MHz 和漫威速25MHz。 无论 RGMII/MII/MGII 配置如何、如果 MDIO/MDC 正确、则您将获得正确的 PHY ID  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    看起来我们正常、我读取的值为0x33A (0b1100111010)。 这会将我们设置为 RGMII 模式、而不存在内部延迟且 RGMII 已启用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    听得好、问题是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗨、Dwarakesh、

    很抱歉,我上次的答覆是误导人的。 我刚才提到的寄存器内容是为 RGMII 正确配置的。 我仍然无法正确检测 phy ID。

    我还尝试通过更改 div 值将输出时钟调整为1MHz、但这也不会影响正确的 phy id 检测。

    还有其他想法吗?