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.

[参考译文] 66AK2H06:在读取 MDIO 控制寄存器时挂起 U-boot 以太网。

Guru**** 2553450 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/615808/66ak2h06-u-boot-ethernet-hang-on-mdio-control-register-read

器件型号:66AK2H06

我们有一个定制的 Keystone 2 (66ak2ho6)电路板设计、其中很大一部分电路板(12个中的3个)以完全相同的方式挂起。 该电路板是对设计的极小的重新旋转、该设计在超过25块电路板上从未出现过此问题。

挂起是指 u-boot 尝试访问网络(例如 DHCP)。 使用仿真器、我们已经隔离了导致挂起的特定指令。 它是对 MDIO 控制寄存器的读取:

CTL = readl (&adap_mdio->control);

在 drivers/net/keyston_net.c:keystone2_eth_mdio_enable 中

当单步执行该指令(实际执行读取的汇编器指令)时、仿真器会报告它无法停止 CPU、因为流水线处于停滞状态。 需要进行系统复位才能重新获得控制。

我在有问题的指令前后还有一个调试打印、当我直接运行它(没有仿真器)时、我会看到指令前消息、而不是后消息(当电路板挂起时)。

我还使用仿真器读取该寄存器(而不是指令步进)、并从仿真器中获得读取错误。 我读取同一区域(以太网交换机子系统)中的其他寄存器、它们会导致相同的问题。

请注意、每次读取该寄存器时、电路板都不会挂起、每次电路板挂起时、电路板都会读取该寄存器。 此外、我对该寄存器进行了两次读取(包含中间的消息)、虽然它有时能够成功运行、但在第一次读取之后、它从未失败。 还请注意、该例程在读取该寄存器之前首先写入该寄存器、并且写入永远不会挂起。

有没有这种情况听起来很熟悉?

我有一个具体的问题:在读取这样一个寄存器时、网络协处理器系统中的问题是否会导致 ARM 内核以这种方式挂起?

谢谢、
兰斯

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

    [引述]该电路板是对设计的一次极小的重新开发、该设计在超过25个电路板上从未出现过此问题。
    是否可以解释此电路板与其他设计(从未见过此问题)有何不同?
    您使用的是哪种 Linux SDK?

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

    Yordan、

    令人困惑的是,几乎没有任何一个侵入与 K2有关--它主要与其他电路板功能有关,并将缝线变化融入 PCB。 可能影响 K2的因素包括电源变化(由于 EOL 部件)、额外的电源/接地平面(针对敏感模拟电路中的噪声)和顶级时钟生成(尽管 K2的时钟驱动器保持不变)。

    我们使用的是 MCSDK 3.01.01.04、此处的重新制造无需更改。

    自原始开机自检以来、我们还尝试降低系统时钟(1200MHz 至800MHz)、PA 时钟(983MHz 至800MHz)和 DDR 时钟(800MHz 至500MHz)的速度、但没有发生任何变化。

    我意识到很难用很少的信息来诊断这些问题。 我正在尝试了解哪些因素会导致我们看到的特定症状(在 MDIO 控制器寄存器访问上挂起)。

    这是否是由网络协处理器中的问题引起的?

    除了系统外设时钟之外、是否有其他时钟会导致这种情况?

    此症状是否会指示特定的电源轨?

    外部 PHY 是否有任何可能出现故障的方法(MDIO 控制器是 K2内部的控制器)?

    谢谢、

    兰斯

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

    我只是想结束这方面的循环,并报告我们发现的情况--也许这将帮助其他人诊断未来的问题。

    事实证明、问题是制造错误、导致故障电路板上的0.85V 电源电压为0.6V。 我们正与合同制造商合作、以确定为什么如此多的电路板具有完全相同的错误。

    我们需要注意的是、我们不使用 USB、这似乎是芯片上此电源的主要用途。 但是、我们确实使用 SGMII、这意味着使用 SERDES。 0.85V 电源是否运行 SGMII SERDES?

    此外、所有电路板都在高温(+70C 环境温度)下工作、但在室温或寒冷条件下运行时挂起。

    感谢那些考虑了这个问题的人。

    兰斯