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/AM5728:PCIe USB 集线器故障

Guru**** 2553260 points
Other Parts Discussed in Thread: TUSB7340, AM5728, TUSB8041

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/621069/linux-am5728-pcie-usb-hub-failures

器件型号:AM5728
主题中讨论的其他器件:TUSB7340TUSB8041

工具/软件:Linux

我们正在开发基于 TI AM5728 EVM 的产品。  该产品利用 TUSB7340 PCIe USB 来提供额外的 USB 端口。  TUSB7340被检测到并正确设置、并且与低数据速率器件一起工作正常。  但是、如果热插拔 Realtek USB 网络适配器并使用 iperf3进行以太网传输带宽测试、则主机 将被锁定。  TUSB7340主机似乎不再通信、日志记录显示 xhci_hcd 0000:01:00.0:HC 已死亡;正在清理。

我们尝试使用 TI TUSB7340 EVM 和 PCIe 适配器电缆在 TI AM5728 EVM 上设置测试、但即使在第1代速度下也无法获得稳定的 PCIe 总线、因此无法复制测试。

我们了解了如何使用另一台主机、找到了一个利用 μ µPD720201的迷你 PCIe 卡 、该卡可以直接安装到 EVM 上的 LCD 上。  正确检测到卡、然后重新执行传输测试。  uPD720201会由于相同的问题而锁定。

AM5728测试是使用 SD 卡内核 am57xx-EVM-Linux-04.00.00.04.img 上的库存 am57xx-EVM 4.9.28-geed43d1050执行的、它报告正在使用 TI AM572x EVM 修订版 A3器件树。

它在失败时显示以下日志记录。

[630.400899] xhci_hcd 0000:01:00.0:xHCI 主机未响应停止端点命令。

[630.408769] xhci_hcd 0000:01:00.0:假设主机正在运行、正在停止主机。

[630.420849] r8152 2-4:1.0 enp1s0u4:TX 状态-108

[630.425667] r8152 2-4:1.0 enp1s0u4:TX 状态-108

[630.430483] r8152 2-4:1.0 enp1s0u4:TX 状态-108

[630.435297] r8152 2-4:1.0 enp1s0u4:TX 状态-108

[630.440122] xhci_hcd 0000:01:00.0:HC 已死亡;正在清理

[630.453961] USB 2-4:USB 断开连接、器件编号2

 考虑到 TUSB7340和 μ µPD720201都存在相同的问题、该问题似乎是一般的驱动程序问题。

有没有关于我们如何解决这个问题的建议?

谢谢!

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

    Chris、

    夜间跑步也失败了、但它提供了更多信息。 在我看来、问题出在 r8152上、这会导致看门狗升高。 我在互联网上进行了搜索、这似乎是 Realtek 的已知问题、不是专门针对 AM57x PCIe 的问题。

    bbs.archlinux.org/viewtopic.php
    ubuntuforums.org/showthread.php
    ubuntuforums.org/showthread.php


    [4] 2055.00-2056.00秒27.4 MB 230 MB 每秒1 1.41 KB
    [4] 2056.00-2057.00秒0.00字节0.00位/秒0 1.41 KB
    [4] 2057.00-2058.00秒0.00字节0.00位/秒0 1.41 KB
    [4] 2058.00-2059.00秒0.00字节0.00位/秒0 1.41 KB
    [4] 2059.00-2060.00秒0.00字节0.00位/秒0 1.41 KB
    [4] 206000-2061.00秒0.00字节0.00位/秒0 1.41 KB
    [4] 2061.00-2062.00秒0.00字节0.00位/秒0 1.41 KB
    [4] 2062.00-2063.00秒0.00字节0.00位/秒0 1.41 KB
    [2211.039936]------ [在此处剪切]-----
    [2211.044608]警告:CPU:0 PID:0 at net/sched/sch_generic.c:316 DEV_watchdog+0x258/0x25c
    [2211.052924] NETDEV 看门狗:enp1s0u2 (r8152):发送队列0超时
    [2211.059745]模块链接于: crc_etheret r8152 sha512_generic sha512_arm sha256_generic sha1_generic sha1_arm_neone sha1_arm md5 CBC bc_example (O) xfrm_user xfrm4_tunnel ippsxfrm_ipsp ipcp 4 ahp_key xts_algo pru_voc_clus_clus_ip_pric_dc usbcore OMAP-DES USB_common dwc3_OMAP 像素 ir_i2c_ts RTC_OMAP extcon_Palmas t9t11x extcon_core DES_generic crypto_engine RTC_PALMAS RTC_ds1307 OMAP-remote_rpmsg_bus rpmsg_core memtesch_Fq_cdel uio (dromio)模块(drc.o)
    [2211.134077] CPU:0 PID:0 Comm:swapper/0被污染:G O 4.9.28-geed43d1050 #2
    [2211.142290]硬件名称:通用 DRA74X (平展器件树)
    [2211.148406]回溯:
    [2211.150883][ ](dump_backtrace)从[ ](show_stack+0x18/0x1c)
    [2211.158487] r7:00000009 r6:60000113 r5:00000000 r4:c1022410
    [2211.164174][ ](show_stack)从[ ](dump_stack+0x8c/0xa0)
    [

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

    1) 1)整个 USB 主机正在关闭。 外设如何管理整个主机的故障?

    2) 2)它在本机非 PCIe USB 主机上工作正常。 如果 Realtek 出现问题、则所有 USB 主机都将显示相同的问题。

    3) 3)我已经尝试将其用作网络外设的一切都使其失败。 我们的 USB 产品基于 CDC Ether、Asus 适配器以及 Realtek 适配器、我使其无法正常工作。

    由于 USB 主机无法阻止看门狗与 Realtek 适配器通信、因此看门狗计时超时、因此会触发。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将离开、并将于10月10日回到这里。 感谢您迄今提供的所有帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我查看了您发布的文章。 它们都没有反映这一问题。

    1) 1)在任何情况下都不会出现 xhci 主机故障。
    2) 2)在这两种情况下、适配器都出现故障、端口复位。 我从未见过这种情况。 它始终是主机故障、而不是外设故障。

    查看您自己的日志。 我是肯定的、您不会解决端口或外设故障、它始终是主机故障。

    正如我提到过的、看门狗会触发、因为一旦主机发生故障、它将无法再与外设通信、因此您将获得:

    [2211.052924] NETDEV 看门狗:enp1s0u2 (r8152):发送队列0超时

    这完全是由于 USB 主机故障造成的。

    这些文章与我们看到的问题无关。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您仍然认为 Realtek 是另一个适配器、我会向您提出建议。 到目前为止、我已经遇到了三种不同类型的故障。

    无论您希望什么都没关系。 我还没有找到一个没有表现出问题的解决方案。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Chris、

    这是完整的日志。 XHCI 主机未响应消息显示在日志末尾。 xhci 是否不会受到看门狗中止系统的影响? 这些链路是某些以太网通过 PCIe 总线的 PC 上的故障。


    [4] 2061.00-2062.00秒0.00字节0.00位/秒0 1.41 KB
    [4] 2062.00-2063.00秒0.00字节0.00位/秒0 1.41 KB
    [2211.039936]------ [在此处剪切]-----
    [2211.044608]警告:CPU:0 PID:0 at net/sched/sch_generic.c:316 DEV_watchdog+0x258/0x25c
    [2211.052924] NETDEV 看门狗:enp1s0u2 (r8152):发送队列0超时
    [2211.059745]模块链接于: crc_etheret r8152 sha512_generic sha512_arm sha256_generic sha1_generic sha1_arm_neone sha1_arm md5 CBC bc_example (O) xfrm_user xfrm4_tunnel ippsxfrm_ipsp ipcp 4 ahp_key xts_algo pru_voc_clus_clus_ip_pric_dc usbcore OMAP-DES USB_common dwc3_OMAP 像素 ir_i2c_ts RTC_OMAP extcon_Palmas t9t11x extcon_core DES_generic crypto_engine RTC_PALMAS RTC_ds1307 OMAP-remote_rpmsg_bus rpmsg_core memtesch_Fq_cdel uio (dromio)模块(drc.o)
    [2211.134077] CPU:0 PID:0 Comm:swapper/0被污染:g o 4.9.28-geed43d1050 #2
    [2211.142290]硬件名称:通用 DRA74X (平展器件树)
    [2211.148406]回溯:
    [2211.150883][ ](dump_backtrace)从[ ](show_stack+0x18/0x1c)
    [2211.158487] r7:00000009 r6:60000113 r5:00000000 r4:c1022410
    [2211.164174][ ](show_stack)从[ ](dump_stack+0x8c/0xa0)
    [2211.171430][ ](dump_stack)从[ ](_warn+0xec/0x104)
    [2211.178421] r7:00000009 r6:c0b2a8 r5:00000000 r4:c1001d40
    [2211.184106][ ](__warn)从[ ](WARN_RASPH_FMt+0x40/0x48)
    [2211.191622] r9:ffff r8:c1002d00 r7:ed97c294 r6:ed349a00 r5:ed97c000 r4:c0b26c
    [2211.199400][ ](warn_slowpath_fmt)、来自[ ](DEV_WATCHDOT+0x258/0x25c)
    [2211.207610] r3:ed97c000 r2:c0b26c
    [2211.211198] R4:00000000
    [2211.213749][ ](DEV_Watchdog)从[ ](call_timer_fn.constprop.3+0x30/0xa0)
    [2211.222486] R10:40000001 R9:ed97c000 R8:c07ce5e4 r7:00000000 R6:c07ce5e4 R5:00000101
    [2211.230347] R4:ffe000
    [2211.232895][ ](call_timer_fn.constprop.3)、来自[ ](EXPIRE_TIMER+0xa0/0xac)
    [2211.24178] R6:00000200 R5:c1001df0 R4:eed36440
    [2211.246359][ ](EXPIRE_TIMERS)从[ ](run_timer_softirq+0x98/0x184)
    [2211.254573] R9:00000001 R8:c1002080 r7:eed36840 R6:c1002d00 R5:c1001dec R4:00000001
    [2211.262354][ ](run_timer_softirq)、来自[ ](__do_softirq+0xf8/0x234)
    [2211.270479] r7:00000101 r6:c1000000 r5:c1002084 r4:00000020
    [2211.276166][ ](__do_softirq)、从[ ](IRQ_EXIT+0xe0/0x148)
    [2211.283508] R10:c10030ac R9:c1000000 R8:ee808000 r7:00000000 R6:00000000 R5:00000013
    [2211.291368] R4:c0e5bd88
    [2211.293914][ ](IRQ_EXIT)从[ ](_handle_domain_IRQ+0x68/bb)
    [2211.301779][ ](_handle_domain_IRQ)、来自[ ](GIC_Handle_IRQ+0x40/0x7c)
    [2211.310167] R9:c1000000 R8:fa213000 r7:fa212000 r6:c1001ef0 r5:fa21200c r4:c1003424
    [2211.317945][ ](GIC_Handle_IRQ)、来自[ ](_IRQ_Svc+0x58/0x8c)
    [2211.325458]异常堆栈(0xc1001ef0至0xc1001f38)
    [2211.330531] 1e0: 00000001 00000000 fe600000 00000000
    [2211.338745] 1f00:c1000000 c100303c 00000001 c10030a4 00000000 00000000 c10030ac c1001f4c
    [2211.346957] 1f20:c1001f2c c1001f40 c0220814 c02086f4 60000013 ffffff
    [2211.353601] R9:c1000000 R8:00000000 r7:c1001f24 R6:ffff R5:60000013 R4:c02086f4
    [2211.361385][ ](arch_cpu_idle)从[ ](DEFAULT_IDLE_CALL + 0x28/0x34)
    [2211.369514][ ](DEFAULT_IDLE_CALL)从[ ](CPU_STARTUP_END+0x1b4/0x230)
    [2211.378165][ ](CPU_STARTUP_INPUK)、来自[ ](REST_INIT+0x8c/0x90)
    [2211.385938] r7:ffffff
    [2211.388487][ ](REST_INIT)从[ ](start_kernel+0x3e0/0x3ec)
    [2211.396001] R5:00000000 R4:c105004c
    [2211.399593][ ](start_kernel)从[<80008090>](0x80008090)
    [2211.406185]--[结束线迹7b35e15081296556 ]--
    [2211.410838] r8152 2-2:1.0 enp1s0u2:TX 超时
    [4] 2063.00-2064.06秒0.00字节0.00位/秒0 1.41[2211.415342] xhci_hcd 0000:01:00.0:XHCI 主机未响应停止端点命令。
    [2211.428748] xhci_hcd 0000:01:00.0:假设主机正在运行、正在停止主机。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不是、这是另一种方法。 腰带路径为:

    看门狗
    ^μ A
    |

    PCIe
    ^μ A
    |

    USB 主机
    ^μ A
    |

    网络适配器

    如果任何 PCIe、USB 主机或网络适配器出现故障、看门狗将会触发。 这三个都是看门狗成功监控网络适配器所必需的。

    我们的日志显示 USB 主机出现故障。 USB 主机出现故障、看门狗尝试与网络适配器通信、但由于 USB 主机故障而无法与网络适配器通信、因此看门狗会触发。

    然后、xhci_hcd 子系统在发生同样的故障时超时、无法与 USB 主机通信。

    根本原因是 USB 主机故障。 在其他地方根本没有任何迹象表明发生了故障。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已经在可以运行一段时间的测试中看到了这个看门狗故障、很明显、这是由 USB 主机故障造成的。

    我向您提出一个问题、如果您确实认为看门狗不触发时、您如何解释相同的故障?

    如果您不想相信其他适配器、请尝试其他适配器、它们都将失败。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    另一个想法是关闭看门狗。 您将会遇到相同的故障。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Chris、

    我们正在调查此问题、如果我们的根本原因、我们将进行更新。

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

    好的、谢谢、我是假期回来的、所以请告诉我您是否需要任何其他信息或测试。

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

    在过去的一周中、我用不同的设置进行了更多的跑步、并就这个问题进行了内部讨论。 我们将在 PCIe 上进一步调试。 我们有内部的 Jira 记录来跟踪此问题。 我将发布回、以更新您的状态或任何发现。 我认为我们目前已经掌握了足够的信息。 如果我需要您的帮助。 我会告诉你。

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

    您提到、在没有以太网适配器的情况下、它也会在您的 USB 产品中崩溃。 我对您在此 USB 设置上运行的设置和测试感兴趣。 问题是否像使用以太网适配器那样快速发生? 我正在尝试收集更多有关此问题的数据。

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

    我们的产品是插入主产品机箱背板的"暗盒"。

    盒式磁带是连接到 TUSB7340 PCIe USB 主机端口的 USB v2.0 CDC_ether 类型设备。

    数据传输速率比 USB 以太网适配器慢得多、我认为我正在运行的测试显示的传输速率低于500 KBS.   故障通常在20-30分钟内发生。

    测试的数据传输是基于大约100K 字节大小的数据块。

    但是、在热插拔操作过程中也会发生故障。  磁带盒拉取经常导致主机锁定,事实上,这就是我们第一次遇到导致此调查的问题的原因。

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

    明白了。 我们将坚持使用 Realtek 适配器。

    您提到过热插拔。 这些暗盒已插入 PCIe 接口的背板、不是吗? 如果是应用、我们不支持 PCIe 热插拔。

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

    不可以、背板连接是 TUSB7340 USB 端口、而不是 PCIe。  盒式磁带插入 TUSB7340端口、就像您使用 Realtek 进行的测试一样。  这就是我们在将盒式磁带热插拔测试到背板上的 TUSB7340端口期间首次遇到故障的原因。

    TUSB7340主机在取出片盒时通常会遇到相同的锁定故障。

    PCIe

      |

      五

    TUSB7340

    |     |   |   ||

    V   V  V   V

    使用 TUSB7340端口进行背板连接

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Chris 提供的信息。 我只想确保我理解并能够回答开发团队提出的任何可能问题。 我将在收到有关我们进度的信息后向您进行更新。

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

    是否有此 Rex 的更新?

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

    通过查看映射到 PCIe 存储器空间的 XHCI IRQ 寄存器、我们发现缺少 IRQ。 目前、我们正在尝试阐明硬件应如何与硬件设计人员配合使用。

    雷克斯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢您的更新
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Chris、

    我们正在进行为期一周的修复测试、到目前为止、2天内没有问题。 补丁一旦可用、我可能需要您在您的平台上进行测试。

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

    是的、我从 Vignesh 收到了一个更新、其中包含有关代码/补丁更改的信息。  我无法立即尝试、但应该能够在接下来的几天内查看。

    很高兴听到它目前运行良好。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    修补程序运行良好、几天内我们没有失败。

    由于我解决了使我们的产品正常工作所需的问题、因此还应包含以下附加更改。

    第一个更改修复了一个中断线路错误缺失的问题。

    第二个更改扩展了为勘误表 i870开发的补丁、但我们发现它适用于 RC 操作和 EPS。 非常感谢您的帮助!

    diff --git a/drivers/pci/dwc/pci-dra7xx.c b/drivers/pci/dwc/pci-dra7xx.c 旧模式100644新模式100755索引 dfa272.6245d89
    -- a/drivers/pci/Dwc/pci-dra7xx.c
    ++ b/drivers/pci/dwc/pci-dra7xx.c
    @@-238、8 +238、8 @@静态 int dra7xx_PCIe_init_IRQ_domain (struct PCIe_port * pp)
    DEV_ERR (dev、"未找到 PCIe INTC 节点\n");
    return -ENODEV;

    -
    - dra7xx->IRQ_domain = IRQ_DOMAIN_ADD_LINEAR (PCIe_INTC_node、4、
    + // PCI 中断线从1开始,而不是零开始,所以需要添加1
    + dra7xx->IRQ_domain = IRQ_DOMAIN_ADD_LINEAR (PCIe_INTC_node、4 +
    + 1、
    &INTx_domain_ops、pp);
    if (!dra7xx->IRQ_domain){
    DEV_ERR (dev、"无法获取 INTx IRQ 域\n");@@-706,10 +706,16 @@静态 int __init dra7xx_PCIe_probe (struct platform_device *pdev)
    dra7xx_PCIe_writel (dra7xx、PCIECTRL_TI_CONF_DEVICE_TYPE、
    DEVICE_TYPE_RC);

    + //勘误表 i870适用于 RC 和 EP
    + RET = dra7xx_PCIe_EP_legacy_mode (dev);
    + IF (RET)
    + 转至 ERR_GPIO;
    +
    RET = dra7xx_add_PCIe_port (dra7xx、pdev);
    如果(RET < 0)
    转至 ERR_GPIO;
    中断;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Chris、

    感谢您的反馈。 我现在将关闭该线程。 如果出现任何问题、请提交新主题。

    雷克斯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对于其他任何需要修复的人员:

    >>>那么,您能否尝试恢复提交8c934095fa2f3并同时应用
    >>下面的补丁、并告诉我这是否解决了问题?
    >>>
    >>>----------
    >>>
    >> diff --git a/drivers/pci/Dwc/pci-dra7xx.c
    >>> b/drivers/pci/dwc/pci-dra7xx.c 索引 e77a4ceed74c.8280abc56f30
    >>100644
    >>>-- a/drivers/PCI/DWC/PCI-dra7xx.c
    >>>++ b/drivers/PCI/DWC/PCI-dra7xx.c
    >>@@-259,10 +259,17 @@静态 irqreturn_t dra7xx_PCIe_msi_IRQ_handler (int IRQ、void *arg)
    >>> u32 reg;
    >>>
    >>> reg = dra7xx_PCIe_readl (dra7xx、
    >>> PCIECTRL_DRA7XX_CONF_IRQSTATUS_MSI);
    >>>+ dra7xx_PCIe_writel (dra7xx、
    >>>+ PCIECTRL_DRA7XX_CONF_IRQSTATUS_MSI、reg);
    >>>
    >>> 开关(reg){
    >>> 案例 MSI:
    >>>- DW_Handle_msi_IRQ (pp);
    >>>+ /*
    >>>+ *需要确保以前没有待处理的 MSI IRQ
    >>>+ *退出处理程序,否则包装程序将不会捕获新的内容
    >>>+ * IRQ。 因此循环直到 dw_handle_msi_irq()返回
    >>>+ * IRQ_NONE
    >>>+ *
    >>>+ while (dw_handle_msi_IRQ (pp)!= IRQ_none);
    >>
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chris:

    这些更改测试了哪些内核版本? 提交 8c934095fa2f3不在 TI 的04.00.04或04.01.00版本中、当我将此处描述的所有更改应用于04.01内核时、PCIe 无法初始化。

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

    其中大部分是在4.9.45时完成的、取自 TI Git 存储库。  我已经修补了 SDK 04.01.00.06、没有任何问题。  我认为 TI 已将这些修复程序发布到存储库中、因为它们要求我对它们进行测试。

    这是我在4.9.45中的当前变化、您可能需要稍微调整行号、但我认为04.01.00.06中的4.9.41是相同的:

    wel52996@ubunduvm:~/map300/ti-linux-kernel-dev/kernel$ git diff drivers/pci/dwc/pci-dra7xx.c drivers/pci/dwc/pcie-designware-host.c
    diff --git a/drivers/pci/dwc/pci-dra7xx.c b/drivers/pci/dwc/pci-dra7xx.c
    索引6245d89..0a0a43f
    -- a/drivers/pci/Dwc/pci-dra7xx.c
    ++ b/drivers/pci/dwc/pci-dra7xx.c
    @@-257、10 +257、19 @@静态 irqreturn_t dra7xx_PCIe_msi_IRQ_handler (int IRQ、void * arg)
        u32 reg;
     
        reg = dra7xx_PCIe_readl (dra7xx、PCIECTRL_DRA7XX_CONF_IRQSTATUS_MSI);
    +    //可针对 PCIe USB 主机故障进行 CGW 修复
    +  dra7xx_PCIe_writel (dra7xx、PCIECTRL_DRA7XX_CONF_IRQSTATUS_MSI、reg);
     
        开关(reg){
        案例 MSI:
    -         DW_Handle_msi_IRQ (pp);
    +/-        DW_Handle_msi_IRQ (pp);
    +/*     
    +     *需要确保以前没有待处理的 MSI IRQ
    +     *退出处理程序,否则包装程序将不会捕获新的内容
    +     * IRQ。 因此循环直到 dw_handle_msi_irq()返回
    +     * IRQ_NONE
    +     *
    +     while (dw_handle_msi_IRQ (pp)!= IRQ_none);
            中断;
        案例 INTA:
        情况 INTB:
    @@-271、8 + 280、8 @@静态 irqreturn_t dra7xx_PCIe_msi_IRQ_handler (int IRQ、void * arg)
            中断;
        }
     
    -    dra7xx_PCIe_writel (dra7xx、PCIECTRL_DRA7XX_CONF_IRQSTATUS_MSI、reg);
    -
    //   dra7xx_PCIe_writel (dra7xx、PCIECTRL_DRA7XX_CONF_IRQSTATUS_MSI、reg);
    +/-
        返回 IRQ_Handled;
     }
     
    diff --git a/drivers/pci/dwc/pci-designware-host.c b/drivers/pci/dwc/pci-designware-host.c
    索引 abc137c.41dab6a 100644
    -- a/drivers/pci/dwc/pcie-designware-host.c
    ++ b/drivers/pci/dwc/pcie-designware-host.c
    @@-69、8 +69、11 @@ irqreturn_t dw_handle_msi_IRQ (struct pcie_port * pp)
                while ((pos = find_next _bit (&V、32、pos))!= 32){
                    IRQ = IRQ_FIND_MAPPING (pp->IRQ_domain、
                                I * 32 + pos);
    // CGW 尝试修复 PCIe USB 主机问题
    +/-                generic_handle_IRQ (IRQ);
                    DW_PCIe_wr_own _conf (pp、PCIe_MSI_INTR0_STATUS +
                              I * 12、4、1 << pos);
    // CGW 要尝试修复 PCIe USB 主机问题,请恢复 git SHA 8c934095fa2f3
                    generic_handle_IRQ (IRQ);
                    POS++;
                }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    可在 git.ti.com/ti-linux-kernel 上找到 TI Linux git 主机
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我发现该补丁在4.9.41内核中不起作用。 我正在研究这个问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Chris。 我将 ti-linux-kernel 分支"ti-linux-4.9.y"中的以下承诺添加到了基于 TIISDK 4.9.41的内核中、并且 PCIe 仍然存在问题。 我们使用的是 NVMe 设备、因此它也可能与 NVMe 驱动程序相关。

    404d6b8 NVME-PCI:在 CMB 中使用 PCI 总线地址处理数据/队列
    94e2881 PCI:designware-EP:fix ->get_msi()以检查 MSI_EN 位
    e43479f PCI:DWC:PCI-dra7xx:改进 MSI IRQ 处理
    2d40690 PCI:dra7xx:读取 IRQSTATUS_MSI 后立即清除它
    D089e27 PCI:DWC:PCI-dra7xx:启用 x2模式支持
    892037c PCI:DWC:dra7xx:添加了对特定于 SoC 的兼容字符串的支持

    TI 已将您列出的补丁添加到 ti-linux-4.9.y (v4.9.67 347081a98a8f935c2a5f3de574fcf939abaaa5)以及与 PCIe 相关的其他几项更改、我想知道您是否已经使用此分支和您的器件进行了测试? 您是否最终需要额外的 i870勘误表和中断线路修复?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我无法获得 TI 的修复程序、因为我们的 USB 主机锁在4.9.41中正常工作。 不过4.9.45仍可正常工作。 现在我在4.9.41中解决了问题。 应用补丁时 PCI 探针出现故障。

    我还没有测试4.9.67、我们必须为假期准备测试负载、目前目标是4.9.41。

    我们需要 i870和中断线路修复。 要解决 PCI 主机下 PEX 8606 PCI 交换机的正确枚举问题、需要 i870修复程序。 我们需要修复中断线路、因为我们使用 AM5728上的两个 PCI 主机以及它们下面的 PCI 开关、并使用现有逻辑遇到索引错误。

    如果需要修复中断行、您将看到以下错误:

    [1.855950]错误:hwirq 0x4对于虚拟来说太大

    您将看到匹配 i870错误的 PCI 设备的类标识符不正确:

    [0.919376] PCI 0001:01:00.0:[10b5:8606] 00类
    [0.919393] PCI 0001:00.0:忽略类0x060400 (与标头类型00不匹配)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Anna、

    我将在内部查看您和 Chris 遇到的4.9.41问题。

    您好、Chris、

    很好奇。 4.9.41上的早期测试与现在在同一版本上遇到的故障有何区别?

    雷克斯

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

    很奇怪、我可以发现4.9.45和4.9.41之间的 PCI 代码没有区别、但当我使用补丁来纠正4.9.41中的 USB 集线器锁定时、PCI 无法初始化:

    root@arm:~# dmesg | grep -i pci

    [0.711726]   PCI:CLS 0字节、默认64

    [0.733321]   dra7-PCIe 51000000.PCIe:作为消费类产品链接到 phy-4a094000.pciephy.3.

    [0.733470]   dra7-PCIe 51000000.PCIe:消费类 GPIO 查找(空)

    [0.733477]   dra7-PCIe 51000000.PCIe:使用器件树进行 GPIO 查找

    [0.733505]   of_get_named_gpio_FLAGS:解析了节点'/ocp/axi@0/PCIe@51000000[0]'的'GPIO'属性-状态(0)

    [0.733656]   dra7-PCIe 51000000.PCIe:将链路丢弃到 phy-4a094000.pciephy.3.

    [0.733725]   dra7-PCIe:51000000.PCIe 探头失败、错误-22

    未检测到 PCI 主机。  我目前正在尝试隔离导致初始化问题的修补程序中的特定代码。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已将问题与未对齐的访问补丁隔离。 它对.dtsi 文件中的位设置使用了不正确的值、导致 PCI 层初始化失败。

    完成测试后、我将为4.9.41内核发布更正后的补丁。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../4.9.41_2D00_pci_5F00_fixes.diff

    随附了4.9.41 (SDK 04.01.00.06中使用的内核)所需的更改以解决以下 PCI 问题:

    1) 1)关断、使用传统中断

    2) 2)未对齐的访问失败

    3) 3)挂起的 PCI/e USB 主机和可能的其他设备

    #2和3按照 TI 发布的更改进行操作、以纠正问题。  #1是一个快速修复、因为建议的 TI 补丁需要更高级别的4.9内核。

    我没有机会对更改进行均热测试、到目前为止、初始测试一直都很好。