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 EP 器件

Guru**** 2930800 points

Other Parts Discussed in Thread: AM5728, TMS320DM8168

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/660080/linux-am5728-pcie-ep-device-not-recognized

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

工具/软件:Linux

大家好、我们基于 AM5728的定制板 idk 参考。下图是 PCIe 的拓扑

我们在 系统启动 am5728之前加载 EP 程序、在控制台中输入 commond lspci、返回信息仅包含器件 am5728和 PXEX8624、没有有关 FPGA 的信息。结果显示为下图、

如果我们用 TMS320DM8168板替换 am5728板、则可以正确获取器件信息。SDK 版本为 ti-processor-sdk-linux-rt-am57xx-evm-03.03.00.04 、am572x-idk.dts 文件中的关于 PCIe 的 DTS:

pcie1_rc{(&P)
状态="正常";
};

pcie1_ep{(&P)
};

只需删除"GPIO =<&GPIO3 23 GPIO_ACTIVE_HIGH_;"、因为我们未使用。  

我们是否需要一些操作来配置内核? 或者是否有解决此问题的方法? 我们在论坛上搜索了该问题、但没有发布类似的链接。 感谢有人帮助我们。

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

    您能否布置"lspci -v"的输出? 是否可以尝试在没有开关的情况下直接将 EP 连接到电路板?

    雷克斯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Rex、由于设计中必须通过开关将 EP 连接到 RC、lspci -v 显示为:
    root@am57xx-EVM:~# lspci -v
    00:00.0 PCI 桥接器:德州仪器(TI)设备8888 (修订版01)(prog-if 00 [正常])
    标志:总线主控、快速选择器、延迟0、IRQ 435
    20100000处的存储器(32位、不可预取)[size=1M]
    20020000的存储器(32位、不可预取)[size=64K]
    总线:primary=00、secondary =01、subordinate=01、sec-latiter=0
    功能:[40]电源管理版本3
    功能:[50] MSI:ENABLE+ Count=1/1可屏蔽- 64位以上
    功能:[70]快速根端口(插槽-)、MSI 00
    功能:[100]高级错误报告
    正在使用的内核驱动程序:pcieport

    01:00.0非 VGA 未分类设备:PLX Technology、Inc. PEX 8624 24通道、6-P)
    !!! 标头类型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 8624 24通道、6-]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Yongjun、

    将 EP 直接连接到 AM5728的原因是验证 AM5728配置并排除交换机可能引入的任何问题。 我进行了搜索、发现 e2e 论坛中有一个 smiilar 案例、就像您一样。 您能否检查它是否适用于您?

    e2e.ti.com/.../597740

    雷克斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Rex、我们将尝试您明天提供的链接。结果将在此处提供。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Rex、我们直接连接 EP、可以通过 lspci -v 找到 EP 信息、我们参考了您发送给我们的链接、我们对该链接有一些疑问、
    (1)"PEX 8606头文件类型通过在0xe 处进行字节访问从 PCI 驱动程序 probe.c 读取、并始终返回0x00。 将其更改为0xc 处的32位访问、得到了正确的标头类型值0x01。" 它是否意味着将0xe 修改为0xc。
    (2)"我在内核(4.4.49)中修改了 probe.c 以处理此问题、但我怀疑由于未对齐访问而可能存在其他问题。" 我们找不到 prob.c 中要修改的位置(1)。我们在 PROb.c 行1187中找到 红色框

    第1236行、用于处理不同的 HDR_TYPE。、

     我们在 pci.h 中的 board-support/u-boot-2016.05+gitAUTOINC+4db46a6bbbd-g4db46a6bbd/include 目录下定义了宏 pci_header_type。

    我们将0x0E 更改为0x0c、但 RC 无法识别 EP、我们是否理解链接错误?

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

    我理解的方式不仅是读取地址需要从0x0E 更改为0x0c、还包括长度。 它需要读取一个字(32位)、而不是执行字节读取。

    雷克斯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢您 Rex、我们计划阅读驱动程序 bout PCI、并尝试了解如何纠正此问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Yongjun、

    我没有听到您的反馈、因此我现在要关闭这个线程。 如果它不能解决您的问题、您始终可以重新打开它。 如果您有其他问题、请提交新问题。

    雷克斯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Rex:很抱歉忘记了这一点。 现在、我们只使用不带开关的 PCIe、谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Rex,是的,您是对的,“我理解的方式不仅是需要将读取地址从0x0E 更改为0x0c,而且还需要将长度。 它需要读取一个字(32位)、而不是执行字节读取。" 我们在/home/ti-processor-sdk-linux-rt-am57xx-evm-03.03.00.04/board-support/linux-rt-4.4.41 +gitAUTOINC+968d071ce9-g968d071ce9/drivers/PCI 中修改了 prob.c、现在可以对 EP 进行仿真。

    int pci_setup_device (struct pci_dev *dev)

    u32级;
    U16命令;
    //u8 HDR_TYPE;
    u32 HDR_TYPE;
    int pos = 0;
    结构 PCI_BUS_REGION 区域;
    struct resource *res;

    //if (pci_read_config_Byte (dev、pci_header_type、&hdr_type))
    IF (PCI_READ_CONFIG_DWORD (dev、0xc、&HDR_TYPE))
    返回-EIO;
    HDR_TYPE = HDR_TYPE>>16;