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 RC 以实现连接的 PCIe 交换机

Guru**** 2548020 points
Other Parts Discussed in Thread: AM5728

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/597740/linux-am5728-need-to-configure-pcie-rc-to-expect-an-attached-pcie-switch

器件型号:AM5728

工具/软件:Linux

我们有一款基于 TI EVM 的 AM5728产品。  我们将两个 PEX 8606 PCIe 开关连接到 PCI RC。  

我们已将控制器拆分为两个独立的电桥、如 https://e2e.ti.com/support/embedded/linux/f/354/t/595948中所述。  

[1.847038] PCI 主机桥/ocp/axi@0/PCIE_RC@51000000范围:
[1.847050]使用[bus、未找到/ocp/axi@0/PCIE_RC@51000000的总线范围
00-关]
[1.847084] IO 0x20003000.0x20012fff -> 0x00000000
[1.847104] MEM 0x20013000..0x2ffffffff -> 0x20013000
[1.849650] dra7-PCIe 51000000.PCIe_RC:PCI 主机桥至总线0000:00
[1.849665] PCI_BUS 0000:00:根总线资源[bus 00-ff]
[1.849676] PCI_BUS 0000:00:根总线资源[IO 0x0000-0xFFF]
[1.849687] PCI_BUS 0000:00:根总线资源[mem 0x20013000-0x2fffffff]
[1.849721] PCI 0000:00:00.0:[104C:888]类型01类0x060400
[1.849764] PCI 0000:00:00.0:寄存器0x10:[MEM 0x0000-0x000fff]
[1.849786] PCI 0000:00:00.0:寄存器0x14:[MEM 0x0000-0x0000FFF]
[1.849853] PCI 0000:00:00.0:支持 D1
[1.849863] PCI 0000:00:00.0:D0 D1 D3hot 支持 PME#
[1.850116] PCI:总线0:禁用快速背对背传输
[1.850281] PCI 0000:01:00.0:[10b5:8606]类型00类0x060400
[1.850311] PCI 0000:01:00.0:忽略类0x060400 (与标头 t 不匹配
类型00)
[1.850560] PCI:总线1:禁用快速背对背传输
[1.850640] PCI 0000:00:00.0:条0:已分配[mem 0x20100000-0x201fff]
[1.850655] PCI 0000:00:00.0:条1:已分配[mem 0x2000000-0x2002FFF]
[1.850668] PCI 0000:00:00.0:PCI 桥至[bus 01]
[1.850914] pcieport 0000:00:00.0:通过 PCIe PME 中断向 PME 发送信号
[1.850924] PCI 0000:01:00.0:通过 PCIe PME 中断向 PME 发出信号
[1.850936] PCIe_PME 0000:00:00.0:pcie01:已加载服务驱动程序 PCIe_PME
[1.851073] aer 0000:00:00.0:pcie02:service driver aer loaded

Debian@arm:/boot$ sudo lspci
debian 的[sudo]密码:
0000:00:00.0 PCI 桥:德州仪器(TI)器件8888 (修订版01)
0000:01:00.0非 VGA 未分类设备:PLX Technology、Inc. PEX 8606 6通道、6端口 PCI Express Gen 2 (5.0 GT/s)开关(修订版 BA)
0001:00:00.0 PCI 桥:德州仪器(TI)器件8888 (修订版01)
0001:01:00.0非 VGA 未分类器件:PLX Technology、Inc. PEX 8606 6通道、6端口 PCI Express Gen 2 (5.0 GT/s)开关(修订版 BA)

以及一些进一步的错误:

Debian@arm:/boot$ sudo lspci -s 01:00.0 -v
0000:01:00.0非 VGA 未分类设备:PLX Technology、Inc. PEX 8606 6通道、6端口 PCI Express Gen 2 (5.0 GT/s)开关(修订版 BA)
!!! 标头类型01的类0000无效
标志:FAST devsel
总线:primary=00、secondary =00、subordinate=00、sec-latiter=0
功能:[40]电源管理版本3
功能:[48] MSI:启用-计数=1/4可屏蔽+ 64位+
功能:[68] Express Upstream Port、MSI 00
功能:[A4]子系统:PLX Technology、Inc. PEX 8606 6通道6端口 PCI Express Gen 2 (5.0 GT/s)交换机

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的某些邮件已在 URL 的粘贴下方删除。 应该在 dmesg 转储之前给出的注释是、RC 似乎只期望看到与其相连的端点、而不喜欢看到开关。

    我正在寻找有关如何让 RC 正确检测开关的建议。

    在英特尔解决方案上使用 PEX 8606的一位同事表示,交换机端口将枚举,并可在正确检测到交换机时通过 lspci 看到。

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

    它看起来像是驱动程序中的错误。  它未从交换机读取正确的 PCIe 接头类型。  在 dmesg 中、它将交换机的报头类型报告为类型0、这是一个终点:

    [1.850353]   PCI:总线0:禁用快速背对背传输

    [1.850518]   PCI 0000:01:00.0:[10b5:8606] 00类0x060400

    [1.850547]   PCI 0000:01:00.0:忽略类0x060400 (与标头类型00不匹配)

    [1.850794]   PCI:总线1:禁用快速背对背传输

    它看起来像索引或对齐问题、因为交换机的标头类型为1 (蓝色标头类型为黄色):

    Debian@arm:~$ lspci -s 0000:01:00.0 -xx

    0000:01:00.0非 VGA 未分类设备:PLX Technology、Inc. PEX 8606 6通道、6端口 PCI Express Gen 2 (5.0 GT/s)开关(修订版 BA)

    00:B5 10 06 86 40 01 10 00 BA 00 04 06 10 00 01 00

    10:00 00 00 00 00 00 00 00 00 00 00 00 F1 01 00 00

    20:F0 ff 00 00 F1 ff 01 00 00 00 00 00 00 00 00 00 00 00

    30:00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 01 00 00

    我怀疑此代码从未与副开关一起使用。 查看驱动程序代码。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    驱动程序代码看起来正常。 它是 PCI 配置标头的简单索引、用于拾取标头类型。

    开关配置接头具有正确的驱动器类型、因此不确定为什么驱动器无法正确拾取它。 尝试将速度减慢至第1代、但结果完全相同。 一直在浏览开关配置寄存器、到目前为止一切都很好。

    请提出任何建议。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    问题是 PEX 8606器件不允许在未对齐的32位边界上进行访问。 在此处的讨论中可以找到类似的问题:

    www.spinics.net/.../msg45095.html

    PEX 8606头文件类型通过0xe 处的字节访问从 PCI 驱动程序 probe.c 中读取、并始终返回0x00。 将其更改为0xc 处的32位访问、得到了正确的标头类型值0x01。

    我在命令行上使用 setpci 确认了这一点、因为只能对32位对齐地址进行字节和32位对齐访问和字节访问。 其他所有返回0。

    我在内核(4.4.49)中修改了 probe.c 以处理此问题、但我怀疑由于未对齐访问而可能存在其他问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这似乎与勘误表 i870有关、但我们的内核应用了 PCI-dra7xx.c 的补丁。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Chris:

    感谢您分享解决方案。

    此致、
    帕维尔