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.

[参考译文] AM5749:AM57 在 PCIe 关断期间挂起 (v2)

Guru**** 2558250 points
Other Parts Discussed in Thread: AM5749

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1570122/am5749-am57-hang-during-pcie-shutdown-v2

器件型号:AM5749


工具/软件:

您好:

我注意到了与之前的文章“am5728-am57-hang-dur-dece-shutdown“相同的问题。

实际上、在启用了两个 PCIe 接口且基于 AM5749 的定制电路板上、内核  在重新启动期间大部分时间会挂起。
最后一个内核日志是正常的、但之后不会发生任何情况:
   

      [   57.943328] systemd-shutdown[1]: Rebooting.
      [   58.075653] reboot: Restarting system

每次 从器件树中禁用两个 PCIe 接口后、内核都会正确地重新启动。
仅启用一个 PCIe 接口时、内核会挂起一次(似乎很奇怪)。

为了减少错误的发生、我  通过在中添加 1ms 应用了建议的权变措施
调用 regmap_update_bits () 之前的 TI_pipe3_power_off ()。

注意:
第二个 PCIe 接口限制为第 1 代、因为此处报告了先前的问题 、有 am5749-PCIe-scan-max-fail-on-PCIE_SS2-whate-pcie_SS1-and-pcie_ss2 处于单线模式

BSP 使用 uboot 2022.01-ti、ti-RT-linux-6.1.y

此致、
罗曼语

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

    尊敬的 Romain:

    您能否在 之前的 E2E 帖子中列出的每个函数中放置 dev_dbg 语句并共享日志?   AM5728:AM57 在 PCIe 关断期间挂起 

    我想知道两个 PCIe 接口调用函数的序列(也称为,在串行器 /解串器关断之前是否为两个 PCIe 接口调用了 PCI_WRITE_CONFIG_WORD,或者在转到下一个接口之前是否为一个接口发生完整的关断序列)。

    此致、

    Takuma

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

    您好、 Takuma

    这似乎是一个计时问题、添加 dev_dbg 语句可能会产生一些副作用(我先看一下)。
    IIuC、在 dra7xx_pcie_shutdown () 中、dra7xx_pcie_stop_link(上次我们写入 PCIe 配置时)和 dra7xx_pcie_disable_phy () 之间存在竞争。
    我只有一次内核挂起、只启用了一个 PCIe 接口... 重现它真的很难。

    dra7xx_pcie_shutdown()
    {
    	dra7xx_pcie_stop_link(dra7xx->pci);
    	ret = pm_runtime_put_sync(dev);
    	pm_runtime_disable(dev);
    
    	+ mdelay(1);
    
    	dra7xx_pcie_disable_phy(dra7xx);

    但在其他基于 DWC 的 PCIe 驱动程序 (imx6...) 中看不到此类延迟。

    此致、
    罗曼语

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

    您好、Takuma、

    如预期的那样、添加调试打印件也可以“解决“问题。 我无法使用调试日志重现内核挂起问题。

    一个接口发生完整关断序列、然后再进入下一个接口:

    [42.219573]  systemd-shutdown [1]:正在重新引导。

    [42.292327]  pci_device_shutdown:
    [  42.295562] pcie_portdrv_remove:
    [  42.298828] pcie_port_device_remove:
    [42.302734]  PCI_disable_device:
    [42.305908]  DO_PCI_DISABLE_DEVICE:
    [42.309356]  DO_PCI_DISABLE_DEVICE:清除 PCI_COMMAND_MASTER
    [42.7315002] dra7xx_pcie_shutdown  :
    [42.318359]  dra7xx_pcie_stop_link:
    [42.321899]  dra7xx_pcie_disable_phy:


    [42.326660]  PCI_DEVICE_SHUTDOWN:
    [  42.329895] pcie_portdrv_remove:
    [42.333160]  pcie_port_device_remove:
    [42.337005]  PCI_DISABLE_DEVICE:
    [42.340179]  DO_PCI_DISABLE_DEVICE:
    [42.343627]  DO_PCI_DISABLE_DEVICE:清除 PCI_COMMAND_MASTER
    [42.349273]  dra7xx_pcie_shutdown:
    [42.352630]  dra7xx_pcie_stop_link:
    [42.356170]  dra7xx_pcie_disable_phy:

    [42.421417]  重新启动:重新启动系统

    此致、
    罗曼语

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

    尊敬的 Romain:

    感谢您提供的信息和实验。

    您是否可以尝试在  DO_PCI_DISABLE_DEVICE 后添加延迟、这与 JIM 在 过去的 E2E 主题中提出的建议类似? 如果这样可以解决问题、请告诉我们。

    此致、

    Takuma

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

    您好、Takuma、

    在调用 dra7xx_pcie_disable_phy () 之前添加了 dra7xx_pcie_shutdown ()(在 do_pci_disable_device () 之后)的 1ms 延迟(见我之前的回复)。
    挂起就消失了。

    目前、此变通办法已经足够、但最好将其修复到上游。
    但我们必须说服上游维护人员添加这个实验延迟:-/

    此致、
    罗曼语

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

    尊敬的 Romain:

    啊、抱歉。 我错过了你之前的答复。  

    我将看看我们的 SDK 团队是否可以集成到 SDK 和上游、但这需要 一些时间。 AM57x 相当古老、因此大多数新开发是在下一代 AM6x 器件上完成的。 尽管如此、我们在论坛上有这个问题、但得到了确认的修正、以便其他可能有这个问题的人可以查询这个问题、这是很好的。

    此致、

    Takuma