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.

[参考译文] AM69:NVMe PCIe 和内核严重错误

Guru**** 1869600 points
Other Parts Discussed in Thread: TDA4VM, AM69, SK-AM69
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1406797/am69-nvme-pcie-and-kernel-panic

器件型号:AM69
主题中讨论的其他器件:TDA4VM、、

工具与软件:

您好!
我们将使用 SDK 10.00.08内核 ti-linux-6.6.6.y、并且对于此版本、在启动期间、如果连接到 NVMe PCIe 设备、我们会出现内核严重错误。
使用旧版 SDK 09.02.00.010内核 ti-linux-6.1.y 可以正常运行。

如果我们插入不同的电路板(PCIe 转 USB 3.0适配器)、则同一个 PCIe 插槽可以正常工作。

我检查了内核配置和设备树、它们看起来是正确的。

内核紧急情况由 NVME_PCI_ENABLE 函数在以下指令中触发:

Fullscreen
1
if (readl(dev->bar + NVME_REG_CSTS) == -1) {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

下面是内核恐慌的节选:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[ 5.998134] j721e-pcie 2900000.pcie: PCI host bridge to bus 0000:00
[ 6.004436] pci_bus 0000:00: root bus resource [bus 00-ff]
[ 6.009942] pci_bus 0000:00: root bus resource [io 0x0000-0xffff] (bus address [0x10001000-0x10010fff])
[ 6.019437] pci_bus 0000:00: root bus resource [mem 0x10011000-0x17ffffff]
[ 6.026359] pci 0000:00:00.0: [104c:b012] type 01 class 0x060400
[ 6.032370] pci_bus 0000:00: 2-byte config write to 0000:00:00.0 offset 0x4 may corrupt adjacent RW1C bits
[ 6.042151] pci 0000:00:00.0: supports D1
[ 6.046156] pci 0000:00:00.0: PME# supported from D0 D1 D3hot
[ 6.051930] pci 0000:00:00.0: reg 0x224: [mem 0x00000000-0x003fffff 64bit]
[ 6.058802] pci 0000:00:00.0: VF(n) BAR0 space: [mem 0x00000000-0x00ffffff 64bit] (contains BAR0 for 4 VFs)
[ 6.070865] pci 0000:00:00.0: bridge configuration invalid ([bus 00-00]), reconfiguring
[ 6.079034] pci 0000:01:00.0: [144d:a808] type 00 class 0x010802
[ 6.085091] pci 0000:01:00.0: reg 0x10: [mem 0x00000000-0x00003fff 64bit]
[ 6.092385] pci 0000:01:00.0: 15.752 Gb/s available PCIe bandwidth, limited by 8.0 GT/s PCIe x2 link at 0000:00:00.0 (capable of 31.504 Gb/s with 8.0 GT/s PCIe x4 link)
[ 6.123674] pci_bus 0000:01: busn_res: [bus 01-ff] end is updated to 01
[ 6.130306] pci 0000:00:00.0: BAR 7: assigned [mem 0x10400000-0x113fffff 64bit]
[ 6.137635] pci 0000:00:00.0: BAR 14: assigned [mem 0x10100000-0x101fffff]
[ 6.144514] pci 0000:01:00.0: BAR 0: assigned [mem 0x10100000-0x10103fff 64bit]
[ 6.151851] pci 0000:00:00.0: PCI bridge to [bus 01]
[ 6.162334] pci 0000:00:00.0: bridge window [mem 0x10100000-0x101fffff]
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

我尝试使用此补丁而不做任何更改: lore.kernel.org/.../

"你说什么? 您是否遇到同样的行为?

Emanuele

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

    尊敬的 Emanuele:

    NVMe PCIe 卡的型号是什么?  

    它不应适用于 AM69、但名为 TDA4VM 的姊妹处理器对于某些多功能器件 PCIe 设备存在问题。 因此、我想确保此 NVMe 卡没有什么特别之处、例如 SR IOV 功能。

    同时、让我看看我是否可以从同事那里获取 AM69 SK 板来测试 SDK 10.0。

    此致、

    Takuma

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

    你好、Takuma、
    型号是三星970EVOPlus (MZ-V7S250)。

    谢谢。此致、
    Emanuele

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

    尊敬的 Emanuele:

    我刚才试用了针对 SK-AM69板的 SDK 10.0、无法重现该问题。 我在这里使用了预编译的 edgeai 映像10.0: https://www.ti.com/tool/download/PROCESSOR-SDK-LINUX - AM69A。  

    至于差异、我使用的是不同的 SSD 卡、即"Kingston TC2200"和"SanDisk Corp WD Black SN770"。 我需要搜索 Samsung SSD 卡来复制确切的设置。

    在下面附加我看到的日志:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    root@am69-sk:/opt/edgeai-gst-apps# uname -a
    Linux am69-sk 6.6.32-ti-gdb8871293143-dirty #1 SMP PREEMPT Thu Aug 1 19:10:56 UTC 2024 aarch64 GNU/Linux
    root@am69-sk:/opt/edgeai-gst-apps# lspci
    0000:00:00.0 PCI bridge: Texas Instruments Device b012
    0000:01:00.0 Non-Volatile memory controller: Kingston Technology Company, Inc. NV2 NVMe SSD TC2200 (DRAM-less)
    0001:00:00.0 PCI bridge: Texas Instruments Device b012
    0001:01:00.0 Non-Volatile memory controller: Sandisk Corp WD Black SN770 / PC SN740 256GB / PC SN560 (DRAM-less) NVMe SSD (rev 01)
    0002:00:00.0 PCI bridge: Texas Instruments Device b012
    root@am69-sk:/opt/edgeai-gst-apps#
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    在您的终端、您是否可以尝试另一个 SSD 卡以查看是否出现相同问题? 最好是,如果您可以尝试从不同的供应商的 SSD 卡,以验证所有 SSD 卡在您的系统上出现故障,如果您可以另外尝试三星970 SSD 卡的不同实例,以验证它是否是您测试过的单个 SSD 的问题。

    此致、

    Takuma

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

    你好、Takuma、
    非常感谢您的验证。
    我将尝试找到另一个 NVMe M.2设备、并仔细检查内核配置和设备树。
    请务必注意、同一器件使用 ti-linux-6.1.y。

    我能请您提供完整的 dmesg 输出吗?

    此致、
    Emanuele

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

    尊敬的 Emanuele:  

    我目前不在办公室,但我可以在星期三用 dmesg 输出与你联系。

    此致、

    Takuma

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

    尊敬的 Emanuele:

    下面随附了我的 引导日志。 由于我对 MCAN 进行了不同的调试、Linux 的提交 ID 可能已经发生变化、但关于 PCIe 接口应该没有变化。

    e2e.ti.com/.../10_5F00_0_5F00_am69_5F00_dmesg.txt

    请随意使用它与您的 dmesg 日志进行比较。

    此致、

    Takuma

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

    尊敬的 Emanuele:

    我能够获得三星 NVMe PCIe 卡。 我能得到的最接近的是三星970 PRO 卡,到目前为止我不能重现问题:

    e2e.ti.com/.../10_5F00_0_5F00_0_5F00_8_5F00_samsung970PRO_5F00_dmesg.txt

    您拥有的 Samsung 970 EVO 和 PCIe 卡的特定实例可能存在一些问题。 作为一种解决方法、您可以在不同的 NVMe PCIe 卡上继续开发吗?

    此致、

    Takuma

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

    尊敬的 

    感谢您的支持。

    请允许我在此提供有关该问题的背景。 我们有来自 AM69 SERDES1的三个接口 PCIE0 (2通道)、PCIe2 (1通道)和 QSGMII_LANe2。 由于默认 SW 配置不允许来自单个 SERDES1的三个接口、因此我们在下游分支中提供了以下补丁、以确保按照 TI 的建议、在不使用 SSC 的情况下 PCIe 多链路工作。

    此补丁以及我们的 DT 似乎在 ti-linux-6.1.y 上与 Samsung 970 EVO + PCIe (连接在 AM69 PCIE0、2个通道上)一起正常运行、并在我们更新到 ti-linux-6.6.6.6.y 时引起内核严重错误(如此处报告的)。

    您能否从终端处检查是否需要修改给定的补丁和/或任何其他配置以便在 ti-linux-6.6.6.y 上支持 PCIe 多链接?

    感谢您的支持。

    此致、

    Parth P

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

    尊敬的 PARTH:

    感谢您的讲解。 如果出现这种情况、我认为我们应该查看设备树以及修补的驱动程序。

    您是否可以共享 四个文件:

    • k3-j784s4-evm.dts 或用于电路板的等效 DTS 文件
    • k3-j784s4-main.dtsi
    • 已修补 phy-cadency-torrent.c
    • 完全引导日志直到崩溃

    此致、

    Takuma

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

    尊敬的 PARTH:

    需要说明的是、插入 SSD 卡时、具有2个 PCIe 和1个 USB 的 SERDES0没有问题? 只有连接到2个 PCIe 和1个 SGMII 的 SERDES1出现问题、并且只有三星 NVMe SSD 卡出现问题、而没有任何其他 PCIe 卡出现问题?

    到目前为止、我在设备树中没有看到任何不正确的内容。 修补的种子驱动程序我需要一些时间来审查。  

    但是、我确实看到有一件事与我的工作设置与您的引导日志不同。 PCIe 控制器启动后、看起来很快就会探测到 NVMe 设备。

    您能否在此处尝试一下该补丁、该补丁会增加将 PCIe 复位置为无效的延迟: https://lore.kernel.org/lkml/20230707095119.447952-1-a-verma1@ti.com/

    此致、

    Takuma

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

    尊敬的

    感谢您在此问题上提供帮助。 目前、通过内核配置中的以下更改、我们已解决上述 PCIe NVMe SSD 崩溃问题。

    Fullscreen
    1
    2
    3
    4
    5
    -CONFIG_PHY_CADENCE_TORRENT=m
    +CONFIG_PHY_CADENCE_TORRENT=y
    -CONFIG_PHY_J721E_WIZ=m
    +CONFIG_PHY_J721E_WIZ=y
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    您能否告诉我、您是否知道为什么将这些节奏 Torrent PHY 和 J721e wiz 驱动程序设置为模块不能按给定用例的预期工作? 这是某些限制还是已知问题?

    此致、

    Parth P

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

    尊敬的 PARTH:

    指定的工程师当天不在办公室。 请预计响应会有延迟。

    谢谢!

    Fabiana

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

    尊敬的 PARTH:

    问题很可能出在初始化 SERDES 驱动程序的时间安排(Torrent 是 SERDES IP 的名称、而 wiz 是此 SERDES IP 的包装程序)。 通过将"m"设置为"y"、它会将 SERDES 驱动程序构建到内核中、而不是构建可加载的内核模块、从而使这些驱动程序能够快速进行探测。 我认为这是解决这个时序问题的有效方法。

    如我之前的回复中所述、与来自默认 TI EVM 板上默认 TI SDK 的启动日志相比、我在您的共享启动日志中很早就发现了 NVMe 驱动程序。 就相关性而言、相关性就像 NVMe 依赖于-> PCIe 依赖于-> SERDES 一样。 因此、默认的 TI SDK 很可能具有一些额外的驱动程序和模块、这会延迟 NVMe 驱动程序的实际探测、从而使问题未出现。

    此致、

    Takuma

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

    尊敬的

    感谢您对此问题的支持。 我想报告的是、我们没有完全解决提到的 PCIe NVMe 崩溃问题。 我在之前的回复中提到的解决方案与内核配置相关、即具有静态驱动程序而不是模块驱动程序、这有助于一点上的改善、并且未能以永久方式完全解决问题。

    我们仍然可以看到、当显示器连接到设备时、PCIe NVMe 与 AM69上最新的 TI 10.x SDK 组件以系统方式崩溃。 我知道、DisplayPort 在这里对 PCIe 没有任何作用、除了它可能影响探测序列并导致某种竞 态条件、从而导致内核恐慌这一事实。

    完整日志: /cfs-file/__key/communityserver-discussions-components-files/791/dmesg_2D00_nvme_2B00_dp_2D00_panic.txt

    我亦尝试了以下建议、但该建议对改善情况并无帮助。

    您能否在此处试用此补丁来增加将 PCIe 复位置为无效的延迟: https://lore.kernel.org/lkml/20230707095119.447952-1-a-verma1@ti.com/

    您能否看看这个问题并告诉我可以做些什么来永久修复提到的 PCIe NVMe 内核恐慌?

    谢谢你。

    此致、

    Parth P

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

    尊敬的 PARTH:

    我一直无法在 我们的 最后重现这一问题 到目前为止、使用 TI EVM 和 TI 默认10.0 SDK 映像时、评估板成功启动且 PCIe 在没有任何崩溃的情况下进行枚举的时间为100%、有无显示、这对于我可以获取的所有 NVMe SSD 卡都是如此。

    我只能说、该问题可能与硬件相关、如果连接显示器导致问题、则与信号完整性或电源有关、或者您的特定 PCIe NVMe 卡示例有问题、或者如您所说、与如何探测驱动程序的计时有关。 但是、我确实看到、在最新日志中、PCIe 端口初始化后、NVMe 会在较晚的时间出现。  

    如果您有 TI EVM、请在 TI EVM 上尝试使用它、以重新确认我在我们的电路板上看到的内容。 我的理解是正确的、如果没有显示器、不会发生内核严重情况、PCIe 会正确进行枚举吗?

    此致、

    Takuma

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



    对我来说,这似乎只是一个但触发了一些时间情况(例如一个竞争条件)。 仅仅尝试查看一个事实、即您无法使用 EVM 再现它是不够的 IMO。 不同的电路板可能会以不同的顺序探测不同的驱动器、并具有不同的执行时间。

    将驱动器从`m`Ω 移动到`Ω y`Ω(从模块移动到内置)产生了很大的影响、以至于我们认为问题已得到解决、对我来说、这仅仅是一个计时问题的提示。

    我还想再次重申、使用基于 TI 内核6.1的先前 SDK、这个问题不可重现、并且这与您关于这个问题是硬件问题的假设不一致。

    如果您查看日志、在尝试访问 PCIe 配置空间时会发生崩溃、对于我而言、如果此空间尚未堆叠到 CPU、则可能会发生这种情况。

    您能看一下我的注意事项吗?

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

    Hi-FD、

    如果您有 TI EVM 板、请尝试重现该板上的问题并与我们分享重现该问题的方法。 到目前为止、我们 最后还不能重现此问题、我相信您理解这会使 我们很难 进行调试。

    如果我们两个人都无法在 TI EVM 板上重现该 问题、则必须进行此调试、因为该问题是特定于您的系统的(又名、我们无法收集日志、也无法在未显示该问题的系统上测试修复)。 我们所能做的最好的事情就是为实验和推测提供建议、以便分析您在系统上运行的实验的结果。

    因此、我想问以下两件事之一:

    1. 您能否在 TI EVM 板上重现此问题并分享使用的方法?
    2. 如果您无法在 TI EVM 板上重现问题、则可以进行 以下实验:
      1. 在 PCIe 未连接到 SSD 的情况下引导系统。 保持显示器连接、因为在最新的响应中、显示似乎是导致问题的原因。
      2. 引导系统后、通过 PCIe 连接 SSD 卡
      3. 运行"echo 1 >/sys/bus/pci/rescan 以手动重新扫描 PCIe 总线
      4. 共享生成的日志。 如果时序是问题、这应该正确枚举 PCIe。

    此致、

    Takuma

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

    尊敬的 

    请按照建议找到以下实验的日志。 我在尝试热插拔 PCIe NVMe SSD 卡时在 PCI 重新扫描时看到相同的崩溃。

    如果您无法在 TI EVM 板上重现问题、那么您可以进行 以下实验:
    1. 在 PCIe 未连接到 SSD 的情况下引导系统。 保持显示器连接、因为在最新的响应中、显示似乎是导致问题的原因。
    2. 引导系统后、通过 PCIe 连接 SSD 卡
    3. 运行"echo 1 >/sys/bus/pci/rescan 以手动重新扫描 PCIe 总线
    4. 共享生成的日志。 如果时序是问题、这应该正确枚举 PCIe。
    [报价]

    日志: /cfs-file/__key/communityserver-discussions-components-files/791/PCIE_5F00_Rescan_5F00_Crash_5F00_AM69.txt

    谢谢。

    此致、

    Parth P

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

    尊敬的 PARTH:

    取得了有趣的结果。 这似乎不是时序问题(至少、不是 PCIe 控制器和探测 NVMe 时的时序问题)。  

    我假设这在定制电路板上、但这是使用内部参考时钟、还是外部时钟发生器为 SoC 和器件提供100MHz 参考时钟?

    我提问、因为如果使用内部时钟、有一个勘误表会影响极少的一组器件。  

    此致、

    Takuma

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

    尊敬的

    感谢您的答复。 如前所述、我们的定制硬件使用外部时钟发生器。

    。 由于默认软件配置不允许单个 SERDES1的三个接口、因此我们在下游分支中提供了以下补丁、以使 PCIe 多链路可以按照 TI 的建议在没有 SSC 的情况下工作。

    另一个有趣的发现是、TI AM69 SK 板上还存在用于热插拔和 PCIe 重新扫描建议实验的 PCIe NVMe 崩溃(带有 SDK 10.x 预编译二进制文件)。
    日志: /cfs-file/__key/communityserver-discussions-components-files/791/AM69A_5F00_SK_5F00_SDK_5F00_10.x_5F00_PCIE_5F00_Rescan_5F00_Crash.txt

    考虑到上述发现并假设此用例可以正常工作、您是否同意也可以从 TI/PCIe 驱动程序端检查一些事项?

    此致、
    Parth P

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

    尊敬的 PARTH:  

    谢谢您的建议。 我还能够在 SK-AM69上重现此问题。 到目前为止、这似乎仅在热插拔和使用 Samsung SSD 手动重新扫描 PCIe 插槽时才会触发(问题不会显示是否正常启动、仅在手动重新扫描时才显示、问题仅显示特定 SSD)。 我在金士顿 SSD 上尝试了相同的实验,但无法看到问题。 因此、它看起来是临界情况。

    我正在研究这个问题、但到目前为止、这似乎不是一个时间问题。 我已将问题范围缩小到 NVMe 驱动程序中的第2490行: https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/drivers/nvme/host/pci.c?h=ti-linux-6.6.y#n2490。我尝试的一个实验是、在该 NVME_PCI_ENABLE 功能内的每一行之前、添加3秒的睡眠时间、但错误仍然存在、这意味着这不是时序问题。

    对比9.2 SDK 中使用的6.1内核和10.0 SDK 中使用的6.6内核之间的 NVMe 驱动程序、已经有几个重大更改、例如 NVMe 分配的最大大小更改。 这些更改都来自上游 Linux、而不是来自 TI、因此我想提醒您、由于是特殊情况和上游 Linux 中的变化、调试将需要相当长的时间。 但是、我们需要对此进行检查。

    此致、

    Takuma

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

    尊敬的 PARTH:

    您是否能找到一个具有 PME 状态 D0和 D3COLD/HOT 的 PCIe 卡、并在6.6内核上测试引导以及重新扫描? 运行 lspci -vv 时应显示 PCIe 卡的功能。

    到目前为止、我发现启用了电源管理(+)的卡不会出错、而禁用了电源管理(-)的卡将导致旧的6.1内核和6.6内核上出现内核恐慌、同时进行重新扫描。 由于我在两个内核上都看到内核恐慌,我不确定我是否在追逐您的板上表现出的问题。

    此致、

    Takuma

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

    尊敬的 PARTH:

    结束并继续本主题、因为我假设这两个线程是相同的: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1424539/am69-pcie-kernel-panic-cdns_ti_pcie_config_read-0x18-0x34-pci_generic_config_read-0xd4-0x124/5474573?tisearch=e2e-sitesearch&keymatch=%252520user%25253A584660#5474573

    此致、

    Takuma

x 出现错误。请重试或与管理员联系。