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/66AK2E02:PDK 4.1.0.6中未检测到 PCIe 端点

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/657451/linux-66ak2e02-pcie-end-point-not-detecting-in-the-pdk-4-1-0-6

器件型号:66AK2E02

工具/软件:Linux

您好!

我们拥有基于 K2E 的定制板、其中包含通过 PCIe 接口连接到 K2E 的 Xilinx Spartan-6 FPGA。 我们将 K2E ARM 内核配置为根复合体、并将 FPGA 配置为端点。

之前、我们使用的是具有 MCSDK 版本3.1和 Linux 3.10的 K2E。  在此过程中、K2E 检测 FPGA 端点(在引导日志中以及通过 lspci 命令进行验证)。

现在、我们需要将现有工作移植到较新版本的 PDK 4.1.0.6。 在此 PDK 版本中、K2E 无法检测 FPGA 端点。 通过分析引导日志、我们看到 PHY 链路从未出现错误。 下面是相同的引导日志。 我们不知道 PDK 发生了什么问题。 感谢您的任何帮助。

[3.776986]   、共一个:PCI:主机桥/soc/pcie@21800000范围:
[3.777017]   、共页:PCI:  MEM 0x50000000..0x5ffffffff -> 0x50000000
[4.775261]   KeyStone-PCIe 21801000.PCIe:PHY 链路从未出现
[5.775260]   KeyStone-PCIe 21801000.PCIe:PHY 链路从未出现
[6.775260]   KeyStone-PCIe 21801000.PCIe:PHY 链路从未出现
[7.775260]   KeyStone-PCIe 21801000.PCIe:PHY 链路从未出现
[8.775260]   KeyStone-PCIe 21801000.PCIe:PHY 链路从未出现
[8.775273]   KeyStone-PCIe 21801000.PCIe:PHY 链路从未出现
[8.775670]   KeyStone-PCIe 21801000.PCIe:PCI 主机桥至总线0000:00
[8.775687]   PCI_BUS 0000:00:根总线资源[bus 00-ff]
[8.775701]   PCI_BUS 0000:00:根总线资源[mem 0x50000000-0x5fffffff]
[8.775750]   PCI 0000:00:00.0:[104C:b009]类型01类0x060400
[8.776336]   PCI:总线0:禁用快速背对背传输
[8.776605]   PCI:总线1:启用快速背对背传输
[8.776765]   PCI 0000:00:00.0:PCI 桥接器至[bus 01]
[8.777212]   pcieport 0000:00:00.0:通过 PCIe PME 中断向 PME 发送信号
[8.777231]   PCIe_PME 0000:00:00.0:pcie001:已加载服务驱动程序 PCIe_PME
[8.777533]   aer 0000:00:00.0:pcie002:服务驱动程序 aer loaded
[8.779163]   、共:PCI:主机桥/soc/pcie@21020000范围:
[8.779191]   、共页:PCI:  MEM 0x60000000..0x6ffffff -> 0x60000000
[9.775261]   KeyStone-PCIe 21021000.PCIe:PHY 链路从未出现
[10.775260]  KeyStone-PCIe 21021000.PCIe:PHY 链路从未出现
[11.775260]  KeyStone-PCIe 21021000.PCIe:PHY 链路从未出现
[12.775260]  KeyStone-PCIe 21021000.PCIe:PHY 链路从未出现
[13.775260]  KeyStone-PCIe 21021000.PCIe:PHY 链路从未出现
[13.775273]  KeyStone-PCIe 21021000.PCIe:PHY 链路从未出现
[13.7756770]  KeyStone-PCIe 21021021000.PCIe:PCI 主机桥至总线0001:00
[13.775686]  PCI_BUS 0001:00:根总线资源[bus 00-ff]
[13.775700]  PCI_BUS 0001:00:根总线资源[mem 0x60000000-0x6fffffff]
[13.775748]  PCI 0001:00:00.0:[104C:b009]类型01类0x060400
[13.776320]  PCI:总线0:禁用快速背对背传输
[13.776592]  PCI:总线1:启用快速背对背传输
[13.776768]  PCI 0001:00:00.0:PCI 桥至[bus 01]
[13.777210]  pcieport 0001:00:00.0:通过 PCIe PME 中断向 PME 发送信号
[13.777229]  PCIe_PME 0001:00:00.0:pcie001:已加载服务驱动程序 PCIe_PME
[13.777522]  aer 0001:00:00.0:pcie002:服务驱动程序 aer loaded

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

    在 MCSDK 内核中设置了 RC 模式、但出于上游原因移至 ProcSDK 中的 U-boot。 请参阅此主题 e2e.ti.com/.../567282 ,并检查您的情况是否如此?

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

    感谢您的回应 Rex 和 Sry 的延迟回复。 我已经检查了该线程。 在这种情况下、最新的 Linux 是使用2013 uboot 版本启动的。 但在我的案例中、uboot 和 Linux 都来自同一个 PDK 版本。 如果我错了、最好在不进行任何修改的情况下、uboot 应立即初始化 PCIe RC 节点、或者我是否启用了一些配置。 如何确保 uboot 正在将 PCIe 初始化为 RC 模式?

    此致、

    Sathish V

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

    关于进一步的调试,提出了以下意见:
    1 PCIe lsm 状态在6 (检测等待)和2 (轮询活动)之间变化。
    2在 debugfs 中、PCIe 的时钟启用计数为0、这是通过执行以下命令来获得的
    CAT /sys/kernel/debug/clk/pcie/clk_enable_count
    输出:0
    因此,为了交叉验证枚举期间是否启用了时钟,在 ks_PCIe_probe ()中的 PCI 扫描前后使用了__clk_is_enabled()。
    [drivers/PCI/DWC/PCI-keyston.c]。这显示了在枚举过程中启用时钟的情况。

    基于上述观察结果、我们不知道枚举为何停留在"轮询活动"状态。 请帮助我们进一步调试。

    内核日志:

    3.777071] PCI_hotplug:PCI 热插拔 PCI 内核版本:0.5
    [3.777201] pciehp:PCI Express 热插拔控制器驱动程序版本:0.4
    [3.78136]、共:PCI:主机桥/soc/pcie@21020000范围:
    [3.781397]、共页:PCI:MEM 0x60000000..0x6ffffff -> 0x60000000
    [ 3.783326] ks_dw_pcie _link_up lsm =|00000000|
    [ 3.783341] ks_dw_pcie _link_up lsm =|00000006|
    [3.875284] ks_dw_PCIe_link_up lsm =|00000002|
    [3.975284] ks_dw_PCIe_link_up lsm =|00000006|
    [4.075284] ks_dw_pcie _link_up lsm =|00000002|
    [4.175283] ks_dw_PCIe_link_up lsm =|00000002|
    [4.275284] ks_dw_PCIe_link_up lsm =|00000006|
    [4.375283] ks_dw_PCIe_link_up lsm =|00000002|
    [4.475283] ks_dw_PCIe_link_up lsm =|00000006|
    [4.575283] ks_dw_PCIe_link_up lsm =|00000002|
    [4.675283] ks_dw_PCIe_link_up lsm =|00000002|
    [4.775286] KeyStone-PCIe 2102100.PCIe:PHY 链路从未出现
    [4.775302] ks_dw_PCIe_link_up lsm =|00000006|
    [4.875284] ks_dw_PCIe_link_up lsm =|00000002|
    [4.975284] ks_dw_PCIe_link_up lsm =|00000002|
    [5.075283] ks_dw_pcie_link_up lsm =|00000006|
    [5.175284] ks_dw_PCIe_link_up lsm =|00000002|
    [5.275285] ks_dw_PCIe_link_up lsm =|00000002|
    [5.375285] ks_dw_PCIe_link_up lsm =|00000006|
    [5.475285] ks_dw_PCIe_link_up lsm =|00000002|
    [5.575283] ks_dw_PCIe_link_up lsm =|00000002|
    [5.675283] ks_dw_PCIe_link_up lsm =|00000006|
    [5.775285] KeyStone-PCIe 21021000.PCIe:PHY 链路从未出现
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Sathish、

    是否可以转储以下 SerDes 寄存器:

    0x02321FE0 0x02327FE0
    0x02321FE4 0x02327FE4
    0x02321FF4 0x02327FF4

    雷克斯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Rex:
    这些是您要求的 SerDes 寄存器转储。

    串行器/解串器寄存器0x02321FE0 |00000001|
    SerDes 寄存器0x02321FE4 |00000001|
    串行器/解串器寄存器0x02321FF4 |00000000|
    串行器/解串器寄存器0x02327FE0 |00000000|
    串行器/解串器寄存器0x02327FE4 |00000000|
    串行器/解串器寄存器0x02327FF4 |10000003|

    现在,我们尝试在3.10内核(PCIe 正在其中工作)中转储相同的 SerDes 寄存器。
    当我获得结果时,我将发布结果。

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

    串行器/解串器寄存器0x02321FE0 |00000001|
    串行器/解串器寄存器0x02321FE4 |00000000|
    串行器/解串器寄存器0x02321FF4 |10000002|
    串行器/解串器寄存器0x02327FE0 |00000000|
    串行器/解串器寄存器0x02327FE4 |00000000|
    串行器/解串器寄存器0x02327FF4 |10000003|

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

    您使用 PCIe0和 PCIe1接口、对吧? SerDes 寄存器转储部分回答了我对 PCIe LTSSM 的怀疑、但没有解决。 但是、我无法用相同的硬件解释 SerDes PLL 不锁定的原因。 我需要进一步研究。

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

    Rex、

    感谢您的帮助。 是的、我们使用两个接口。 那么、LTSSM 出现故障的原因是什么? 在哪里可以找到 SERDES 寄存器信息。 我 找不到。

    Sathish

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

    所有文档均位于66ak2e 器件页面 www.ti.com/.../66AK2E05下。 在 Technical Documents (技术文档)选项卡下的 User's Guide (用户指南)部分中、Keystone-II 用户指南的 Serdes 就是其中之一。

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

    您好、Sathish、

    只需检查您是否取得了任何进展。 我比较了 MCSDK 和 ProcSDK 之间的 SerDes 配置、并注意到它是在 MCSDK 中 DTS 文件的 PCIe 节点中完成的、但在 ProcSDK 中是单独的节点。 在 ProcSDk 中、仅定义了 pcie1_phy。 如果您没有定义其他 phy、则不会为另一个 PCIe 端口配置 SerDes。

    雷克斯

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

    您好 Rex

    我们已在 keyston.dtsi 文件中添加了 pcie0_phy 节点条目。 请找到相同的附件。

    最初禁用了 PCIe 0、我们通过修改 keyston.dtsi 文件中的 status ="oke"来启用它、因此 PCIe 0和 PCIe 1都已启用、但枚举仍然失败。 然后、我们禁用了 PCIe 1 (在 keystone-k2e-evm.dts 文件中、pcie1_phy、pcie1状态更改为禁用)、并仅尝试使用 PCIe 0。 枚举仍然失败。

    这些是内核4.9的更新的 sardes 寄存器、启用了 PCIe 0、禁用了 PCIe 1。

    串行器/解串器寄存器0x02321FE0 |00000000|  
    串行器/解串器寄存器0x02321FE4 |00000000|  
    串行器/解串器寄存器0x02321FF4 |10000003|  
    串行器/解串器寄存器0x02327FE0 |00000001|  
    SerDes 寄存器0x02327FE4 |00000001|  
    串行器/解串器寄存器0x02327FF4 |00000000|

    之后、我们尝试通过在 0x02320200和0x02320400串行器/解串器寄存器中写入0x40000000来启用 phy 回送。 在这种情况下、枚举未发生任何故障。 但是,我们不知道如何 在回路模式下测试数据传输。  

    此致、
    Sathish

    e2e.ti.com/.../keystone_5F00_dtsi.zip

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

    SerDes 现已启动、LTSSM_EN 现在处于什么状态? 您能看到它是否在空闲和培训之间保持了请求?

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

    LTSSM_EN 状态仍在(0x02 POLL_ACTIVE)和(0x06 DETENT_WAIT)之间转换。
    有什么建议吗?


    [3.793634] ks_dw_pcie _link_up val =|00000006|
    [3.885288] ks_dw_PCIe_link_up val =|00000002|
    [3.985288] ks_dw_PCIe_link_up val =|00000006|
    [4.085288] ks_dw_PCIe_link_up val =|00000002|
    [4.185288] ks_dw_PCIe_link_up val =|00000002|
    [4.285287] ks_dw_PCIe_link_up val =|00000006|
    [4.385287] ks_dw_pcie _link_up val =|00000002|
    [4.485288] ks_dw_PCIe_link_up val =|00000006|
    [4.585287] ks_dw_pcie _link_up val =|00000002|
    [4.685288] ks_dw_pcie _link_up val =|00000002|
    [4.785290] KeyStone-PCIe 21801000.PCIe:PHY 链路从未出现
    [4.785317] ks_dw_PCIe_link_up val =|00000006|
    [4.885288] ks_dw_PCIe_link_up val =|00000002|
    [4.985287] ks_dw_pcie _link_up val =|00000002|
    [5.085287] ks_dw_PCIe_link_up val =|00000006|
    [5.185288] ks_dw_PCIe_link_up val =|00000002|
    [5.285289] ks_dw_PCIe_link_up val =|00000002|
    [5.385288] ks_dw_pcie _link_up val =|00000006|
    [5.485289] ks_dw_PCIe_link_up val =|00000002|
    [5.585288] ks_dw_PCIe_link_up val =|00000002|
    [5.685287] ks_dw_pcie _link_up val =|00000006|

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

    我刚才意识到您正在转储 DEBUG0寄存器中的 ltssm_state 位。 实际上、我们希望监控 CMD_STATUS 寄存器中的 LTSSM_EN 位。 它应该在0和1之间切换。 我想确保培训开始。

    雷克斯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    哦... 对 Rex 的误解很抱歉。 我将检查该字段、并在我回到办公室后发布相同的字段。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Rex:

    CMD_STATUS 寄存器值为|00100107|、LTSSM_EN 位始终为1。
    我正在读取 ks_dw_pcie_link_up 函数中的 CMD_STATUS。

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

    所有配置对我来说都很好。 我的理解是、当 LTSSM_EN 位设置为1时、培训与软件无关、但我无法解释为什么不同内核版本之间的培训显示不同。 我正在内部检查以获得解释。 您的设置是否允许连接其他 EP 器件以查看其是否正常工作? 对于 TI EVM、使用任一内核版本都没有区别。 我连接了一个 SATA 驱动器、lspci 可以看到 SATA 驱动器。

    雷克斯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Rex:
    感谢你的帮助。 问题是 PCIe 线路是硬接线。 没有用于连接其他 EP 的设备。 我想问的是 EP (FPGA)运行的是 PCIe 第1.1代内核。 这会对这有什么影响吗?

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

    尊敬的 Rex:

    我们还观察到以下情况。

    在内核4.9中  ,根复合体的供应商 ID 显示为 bbb009,但在内核3.10中为0x8888

    内核4.9日志。   

     # lspci
    00:00.0 PCI 桥接器:德州仪器(TI)器件 b009 (修订版01)

    内核3.10日志

    # lspci
    00:00.0 PCI 桥接器:德州仪器(TI)器件8888 (修订版01)
    01:00.0 RAM 存储器:Xilinx Corporation 默认 PCIe 端点 ID

    Sathish。

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

    我在内部进行了讨论、其中一个怀疑是 SerDes 在两个版本之间发生了变化。 我们将 SerDes 配置从 c 文件中移出、是 K2-FW-initrd.cpio.gz 中的二进制文件之一。 PCIe 的该二进制文件应与3.10内核的 c 文件中的二进制文件进行比较。 您可以比较写入 PCIe IP 的值。

    PCIe IP 应在第1代模式下工作、但您可以尝试强制其处于第1代模式、以排除问题所在。

    在讨论过程中提出了一个问题、即为什么 TI 在我们的设置上没有发现任何问题。 建议检查它是否需要校准。 我不确定这是否适用、但这是一个要检查的建议。

    我还将进行串行器/解串器二进制比较。 如果您看到不同的东西、您可能希望尝试查看它是否有用。

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

    我将内核3.10的 c 文件中存在的 sardes 配置与 kernl 4.9的 ks2_gbe_serdes.bin 文件进行了比较。
    在 ks2_gbe_serdes.bin 中、某些配置是额外的、某些配置是修改的。

    在内核4.9中添加了 Extar 配置
    02080000 00170000 00100000 00010000
    04080000 00170000 00100000 00010000
    06080000 00170000 00100000 00010000
    08080000 00170000 00100000 00010000
    0aa40000 00070000 00000000 00350000
    0aa40000 000f0000 00080000 00a80000

    在内核4.9中修改了配置
    {0x022c、23、16、0x20}、 内核3.10
    022c0000 00170000 00100000 00300000 -kernel 4.9

    {0x042C、23、16、0x20}、 内核3.10
    042c0000 00170000 00100000 00300000 -kernel 4.9

    {0x082c、23、16、0x20}、 内核3.10
    082c0000 00170000 00100000 00300000 -kernerl 4.9

    我已将 SerDes_config 结构从内核3.10复制到 drivers/phy/phy-keystone-SerDes.c 文件(内核4.9)、并从结构而不是 kss2_Gbe_SerDes.bin 加载配置、但枚举仍然失败。

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

    是否是您指 kss2_PCIe_SerDes.bin 而不是 kss2_Gbe_SerDes.bin 的拼写错误?

    当您提到 Kernel 3.10时、您使用的是哪个版本? 我相信在版本3.1.3.6和3.1.4.7之间有 Serdes 的变化。 它们分别是内核3.10.61和3.10.72。 PSDK 4.1应该更接近内核3.10.72、但我想确保。

    我将在办公室外工作一周、但在我回到办公室后、我将继续与您合作。

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

    抱歉、拼写错误、我是指 ks2_pcie_serdes.bin。
    我们使用的是内核版本3.10.61。
    再次感谢您的帮助。

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

    我们不确定涉及的还有什么。 我们没有进一步调查的设置。

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

    目前、我们已迁移到内核3.10的旧版本。

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

    谢谢。 因为我无法重现此问题、也没有用于进一步调查的设置。 我将关闭该线程。

    雷克斯