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/AM5718:PCIe EP 分配的内存仅为2MB

Guru**** 2964790 points

Other Parts Discussed in Thread: AM5718

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/650436/linux-am5718-pcie-ep-allocated-memory-is-only-2mb

器件型号:AM5718

工具/软件:Linux

您好!

我们 在      设计 板中使用 AM5718处理器 、并使用最新的 SDK:TI-processor-sdk-linux-am57xx-evm-04.01.00.06。

AM5718 PCIe       通过 二极管(Pericom)连接到 PCIe 开关 PI7C9X2G608GP 、   并观察到枚举情况。  我们  观察     到每个端点的内存空间  仅 为2MB。  但  我们的端点 器件 需要 更多的存储器空间。 在设备树中、默认情况下会提到264MB 内存空间。  我们保留了相同的存储器空间。

使用 Linux lspci 命令、 我们  会观察  到 PCIe 交换机 下 行端口 为  "Memory Behind bridge: 20200000-203fff" ( 即 仅  2 MB 大小)。以下 是  lspci 输出:

请 告诉 我们   为      每个端点设备增加条形存储器空间的过程。

00:00.0 PCI 桥: 德州 仪器 (TI)多核 DSP+ARM KeyStone II SOC (修订 版01) (prog-if 00 [正常 解码])
    标志: 总线 主控、 快速 选择器、 延迟 0、 IRQ 439
      20100000处的存储 器(32位、 不可预取) [size=1M]
      20020000的存储 器(32位、 不可预取) [size=64K]
    总线: primary=00、 secondary =01、 subordinate=01、 sec-latiter=0
      桥后的 I/O: 00001000-00004fff
      桥后内存: 20200000-209fff
       桥后可预取存储器: 20a00000-211ffff
    功能: [40] 电源 管理 版本 3
    功能: [50] MSI: ENABLE+ Count=1/1 可屏蔽- 64位以上
    功能: [70] 快速 根 端口 (插槽-)、 MSI 00
    功能: [100] 高级 错误 报告
       正在使用的内核驱动程序: pcieport

01:00.0 PCI 桥: Pericom 半导体 器件 2608 (prog-if 00 [正常 解码])
    标志: 总线 主控、 快速 选择、 延迟 0
    总线: primary=01、 secondary =02、 subordinate=06、 sec-latiter=0
      桥后的 I/O: 00001000-00004fff
      桥后内存: 20200000-209fff
       桥后的可预取存储器: 000020a00000-00000000211fff
    功能: [40] 电源 管理 版本 3
    能力: [5C] 重要 产品 数据
    能力: [64] 供应商 特定 信息: len=34  
    功能: [B0] 子系统: 器件 0000:0000
    功能: [C0] Express 上行 端口、 MSI 00
    功能: [100] 高级 错误 报告
    功能: [140] 虚拟 通道
    能力: [20C]  功耗预算  
    功能: [230] 延迟 容差 报告
    功能: [240] L1 PM 子状态
       正在使用的内核驱动程序: pcieport

02:01.0 PCI 桥接器: Pericom 半导体 器件 2608 (prog-if 00 [正常 解码])
    标志: 总线 主控、 快速 选择器、 延迟 0、 IRQ 440
    总线: primary=02、 secondary =03、 subordinate=03、 sec-latiter=0
      桥后的 I/O: 00001000-00001fff
      桥后内存: 20200000-203fff
       桥后可预取存储器: 000020a00000-0000000020bfff
    功能: [40] 电源 管理 版本 3
    功能: [4C] MSI: ENABLE+ Count=1/1 可屏蔽- 64位以上
    能力: [64] 供应商 特定 信息: len=34  
    功能: [B0] 子系统: 器件 0000:0000
    功能: [C0] Express 下行 端口 (插槽+)、 MSI 00
    功能: [100] 高级 错误 报告
    功能: [140] 虚拟 通道
    能力: [20C]  功耗预算  
    功能: [220] 访问 控制 服务
    功能: [240] L1 PM 子状态
       正在使用的内核驱动程序: pcieport

02:02.0 PCI 桥接器: Pericom 半导体 器件 2608 (prog-if 00 [正常 解码])
    标志: 总线 主控、 快速 选择器、 延迟 0、 IRQ 441
    总线: primary=02、 secondary =04、 subordinate=04、 sec-latiter=0
      桥后的 I/O: 00002000-00002fff
      桥后存储器: 20400000-205fff
       桥后可预取存储器: 000020c00000-0000000020dfff
    功能: [40] 电源 管理 版本 3
    功能: [4C] MSI: ENABLE+ Count=1/1 可屏蔽- 64位以上
    能力: [64] 供应商 特定 信息: len=34  
    功能: [B0] 子系统: 器件 0000:0000
    功能: [C0] Express 下行 端口 (插槽+)、 MSI 00
    功能: [100] 高级 错误 报告
    功能: [140] 虚拟 通道
    能力: [20C]  功耗预算  
    功能: [220] 访问 控制 服务
    功能: [240] L1 PM 子状态
       正在使用的内核驱动程序: pcieport

02:03.0 PCI 桥接器: Pericom 半导体 器件 2608 (prog-if 00 [正常 解码])
    标志: 总线 主控、 快速 选择器、 延迟 0、 IRQ 442
    总线: primary=02、 secondary =05、 subordinate=05、 sec-latiter=0
      桥后的 I/O: 00003000-00003fff
      桥后存储器: 20600000-207fff
       桥后的可预取存储器: 000020e00000-0000000020ffff
    功能: [40] 电源 管理 版本 3
    功能: [4C] MSI: ENABLE+ Count=1/1 可屏蔽- 64位以上
    能力: [64] 供应商 特定 信息: len=34  
    功能: [B0] 子系统: 器件 0000:0000
    功能: [C0] Express 下行 端口 (插槽+)、 MSI 00
    功能: [100] 高级 错误 报告
    功能: [140] 虚拟 通道
    能力: [20C]  功耗预算  
    功能: [220] 访问 控制 服务
    功能: [240] L1 PM 子状态
       正在使用的内核驱动程序: pcieport

02:04.0 PCI 桥接器: Pericom 半导体 器件 2608 (prog-if 00 [正常 解码])
    标志: 总线 主控、 快速 选择器、 延迟 0、 IRQ 443
    总线: primary=02、 secondary =06、 subordinate=06、 sec-latiter=0
      桥后的 I/O: 00004000-00004fff
      桥后内存: 20800000-209fff
       桥后可预取存储器: 000021000000-0000211fff
    功能: [40] 电源 管理 版本 3
    功能: [4C] MSI: ENABLE+ Count=1/1 可屏蔽- 64位以上
    能力: [64] 供应商 特定 信息: len=34  
    功能: [B0] 子系统: 器件 0000:0000
    功能: [C0] Express 下行 端口 (插槽+)、 MSI 00
    功能: [100] 高级 错误 报告
    功能: [140] 虚拟 通道
    能力: [20C]  功耗预算  
    功能: [220] 访问 控制 服务
    功能: [240] L1 PM 子状态
       正在使用的内核驱动程序: pcieport

谢谢、

Suryaprakash Rao。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Biser、

    我将等待软件团队的响应。

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

    我从 Tom 那里得到的印象是、如果器件在没有桥接器的情况下直接连接、它可以分配32MB、但只有桥接器2MB、对吧?

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

    @font-face{font-family:"时代新罗马";}@font-face{font-family:宋体 â";}@font-face{font-family:"SimSun";}@font-face{font-family:"suffix";}@list l0:level1{mso-level-start-at:2;mso-level-text:mso-stop-level-level-tage-1;mso:mso-stop-text-level-level-level-level-level1;ms-level-level-level-level-level-level-level-not" mso-leve-number-position:left;margin-left:0.0000pt;text-indent:0.0000pt;font-family:'Times New Roman';}p.MsoNormal{mso-style-name:Normal;mso-style-parent:";margin:0pt;margin-bottom:.0001pt;mso-pagination:none; text-align: align;text-align:ideo-ideograph; font-family:宋体; mso-fareast-font-family: SimSun; mso-bidi-font-family:'Times New Roman'; font-size:10.5000pt;mso-font-kerning:1.0000pt;}span.msoins{mso-style-type:export-only;mso-style-name:"";text-decoration:underline; 文本下划线:单;颜色:蓝色;}span.msoDel{mso-style-type:export-only;mso-style-name:"";文本装饰:线条; 颜色:红色;}@页{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@页码0{margon-top:72.0000pt;margon-bottom:72.0000pt;margon-left:90.0000pt; 右边距:90.0000pt;大小:595.3000pt 841.9000pt;布局网格:15.6000pt;}div.Section0{page:Section0;}

     

    尊敬的 Rex:

     

    是的。  如果    我们连接  端点、则不使用网桥、 可以  为其分配 32MB  。  但   对于该桥 、我们  只能  获得2MB 的容量。

     

     在驱动 程序代码 浏览期间 、 在      /drivers/pci/pci.c.中标识了相应的宏

     

    #define DEFAULT_CardBus_IO_SIZE (256)
    #define DEFAULT_CardBus_MEM_SIZE (64*1024*1024)
    /* PCI=cbmemsize=NNM、cbiosize=nn 可以 覆盖 此 */
    unsigned long PCI_cardbus_io_size = default_CardBus_io_size;
    unsigned long PCI_cardbus_mem_size = default_dCardBus_MEM_size;

     

    #define DEFAULT_HOTPLUG_IO_SIZE (256)
    #define DEFAULT_HOTPLUG_MEM_SIZE (2*1024*1024)
    /* PCI=hpmemsize=NNM、hpiosize=nn 可以 覆盖 此 */
    unsigned long PCI_hotplug_io_size = default_hotplug_io_size;
    unsigned long PCI_hotplug_mem_size = default_hotplug_MEM_size;

     

    我们  修改  了以下 宏  

    在    drivers/pci/ci.c 中#define default_hotplug_MEM_size (8*1024*1024)

    之后  、我们 可以 看到    桥接器后面的存储器: 8MB  

        我们请求 8MB 的端点   未 被枚举。  然后 我们 将  大小增加 到 16MB。  稍后 、它 开始  枚举

    在    drivers/pci/ci.c 中#define default_hotplug_MEM_size (16*1024*1024)

     

      对于另一 个端点 、我们 需要 64MB 、 并相应 地将  宏 大小增加 到  

    #define DEFAULT_HOTPLUG_MEM_SIZE (64*1024*1024)

           在这种情况下,PCIe 交换机 下 行端口的“桥接器后面的内存”  未 为       任何桥 接端口分配内存空间。  我们 怀疑 出现   这种情况的两个原因:  

     

    对于  每个 桥 接端口 、我们  观察 到两  个存储器空间 、 如下所示 。          您还可以在末尾观察到相同的情况、 我们  将 提供 lspci 输出。

      桥后存储器: 20200000-211fff

            桥后的可预取存储器: 000024200000-00000000251ffff

     

    在器件 树中 、我们  请求 256 MB、    这在   SDK 中是默认值 、 也  是  根据 AM5718 TRM 中的信息:  

    表 2-1.  L3_MAIN 存储 器映射。

     

    /* 默认 设备 树 */

     pcie1_RC: PCIe@51000000 {

    兼容 = "ti、dra7-pcie";

    REG = <0x51000000 0x2000>、 <0x51002000 0x14c>、 <0x1000 0x2000>;

    reg-names = "RC_dbics"、 "ti_conf"、 "config";

    中断 = <0 232 0x4>、 <0 233 0x4>;

    #address-cells = <3>;  

    大小单元 格= <2>;  

    DEVICE_TYPE = "PCI";

    范围 = <0x81000000 0           0x03000 0 0x00010000

    0x82000000 0 0x20013000 0x13000 0 0x0xffffff000>;  

     

    使用  Linux lspci 命令、 我们  将观察  PCIe 交换机 的 端口 内存 空间、  如下所示  

    (例如  、当我们 将  宏 值设置 为 16MB 时  

    在    drivers/pci/ci.c 中#define default_hotplug_MEM_size (16*1024*1024)。

       桥后存储器: 20200000-211fff

            桥后的可预取存储器: 000024200000-00000000251ffff

     

    00:00.0 PCI 桥: 德州 仪器 (TI)多核 DSP+ARM KeyStone II SOC (修订 版01) (prog-if 00 [正常 解码])

            标志: 总线 主控、 快速 选择器、 延迟 0、 IRQ 439

              20100000处的存储 器(32位、 不可预取) [size=1M]

              20020000的存储 器(32位、 不可预取) [size=64K]

            总线: primary=00、 secondary =01、 subordinate=01、 sec-latiter=0

              桥后的 I/O: 00001000-00004fff

              桥后存储器: 20200000-241fff

               桥后的可预取存储器: 24200000-281fff

            功能: [40] 电源 管理 版本 3

            功能: [50] MSI: ENABLE+ Count=1/1 可屏蔽- 64位以上

            功能: [70] 快速 根 端口 (插槽-)、 MSI 00

            功能: [100] 高级 错误 报告

               正在使用的内核驱动程序: pcieport

     

    01:00.0 PCI 桥: Pericom 半导体 器件 2608 (prog-if 00 [正常 解码])

            标志: 总线 主控、 快速 选择、 延迟 0

            总线: primary=01、 secondary =02、 subordinate=06、 sec-latiter=0

              桥后的 I/O: 00001000-00004fff

              桥后存储器: 20200000-241fff

               桥后的可预取存储器: 000024200000-00000000281ffff

            功能: [40] 电源 管理 版本 3

            能力: [5C] 重要 产品 数据

            能力: [64] 供应商 特定 信息: len=34  

            功能: [B0] 子系统: 器件 0000:0000

            功能: [C0] Express 上行 端口、 MSI 00

            功能: [100] 高级 错误 报告

            功能: [140] 虚拟 通道

            能力: [20C]  功耗预算  

            功能: [230] 延迟 容差 报告

            功能: [240] L1 PM 子状态

               正在使用的内核驱动程序: pcieport

     

    02:01.0 PCI 桥接器: Pericom 半导体 器件 2608 (prog-if 00 [正常 解码])

            标志: 总线 主控、 快速 选择器、 延迟 0、 IRQ 440

            总线: primary=02、 secondary =03、 subordinate=03、 sec-latiter=0

              桥后的 I/O: 00001000-00001fff

              桥后存储器: 20200000-211fff

               桥后的可预取存储器: 000024200000-00000000251ffff

            功能: [40] 电源 管理 版本 3

            功能: [4C] MSI: ENABLE+ Count=1/1 可屏蔽- 64位以上

            能力: [64] 供应商 特定 信息: len=34  

            功能: [B0] 子系统: 器件 0000:0000

            功能: [C0] Express 下行 端口 (插槽+)、 MSI 00

            功能: [100] 高级 错误 报告

            功能: [140] 虚拟 通道

            能力: [20C]  功耗预算  

            功能: [220] 访问 控制 服务

            功能: [240] L1 PM 子状态

               正在使用的内核驱动程序: pcieport

     

    02:02.0 PCI 桥接器: Pericom 半导体 器件 2608 (prog-if 00 [正常 解码])

            标志: 总线 主控、 快速 选择器、 延迟 0、 IRQ 441

            总线: primary=02、 secondary =04、 subordinate=04、 sec-latiter=0

              桥后的 I/O: 00002000-00002fff

              桥后存储器: 21200000-221fff

               桥后可预取存储器: 000025200000-00000000261fff

            功能: [40] 电源 管理 版本 3

            功能: [4C] MSI: ENABLE+ Count=1/1 可屏蔽- 64位以上

            能力: [64] 供应商 特定 信息: len=34  

            功能: [B0] 子系统: 器件 0000:0000

            功能: [C0] Express 下行 端口 (插槽+)、 MSI 00

            功能: [100] 高级 错误 报告

            功能: [140] 虚拟 通道

            能力: [20C]  功耗预算  

            功能: [220] 访问 控制 服务

            功能: [240] L1 PM 子状态

               正在使用的内核驱动程序: pcieport

     

    02:03.0 PCI 桥接器: Pericom 半导体 器件 2608 (prog-if 00 [正常 解码])

            标志: 总线 主控、 快速 选择器、 延迟 0、 IRQ 442

            总线: primary=02、 secondary =05、 subordinate=05、 sec-latiter=0

              桥后的 I/O: 00003000-00003fff

              桥后内存: 22200000-231fff

               桥后的可预取存储器: 000026200000-00000000271ffff

            功能: [40] 电源 管理 版本 3

            功能: [4C] MSI: ENABLE+ Count=1/1 可屏蔽- 64位以上

            能力: [64] 供应商 特定 信息: len=34  

            功能: [B0] 子系统: 器件 0000:0000

            功能: [C0] Express 下行 端口 (插槽+)、 MSI 00

            功能: [100] 高级 错误 报告

            功能: [140] 虚拟 通道

            能力: [20C]  功耗预算  

            功能: [220] 访问 控制 服务

            功能: [240] L1 PM 子状态

               正在使用的内核驱动程序: pcieport

     

    02:04.0 PCI 桥接器: Pericom 半导体 器件 2608 (prog-if 00 [正常 解码])

            标志: 总线 主控、 快速 选择器、 延迟 0、 IRQ 443

            总线: primary=02、 secondary =06、 subordinate=06、 sec-latiter=0

              桥后的 I/O: 00004000-00004fff

              桥后存储器: 2320000-241fff

               桥后的可预取存储器: 000027200000-00000000281ffff

            功能: [40] 电源 管理 版本 3

            功能: [4C] MSI: ENABLE+ Count=1/1 可屏蔽- 64位以上

            能力: [64] 供应商 特定 信息: len=34  

            功能: [B0] 子系统: 器件 0000:0000

            功能: [C0] Express 下行 端口 (插槽+)、 MSI 00

            功能: [100] 高级 错误 报告

            功能: [140] 虚拟 通道

            能力: [20C]  功耗预算  

            功能: [220] 访问 控制 服务

            功能: [240] L1 PM 子状态

               正在使用的内核驱动程序: pcieport

    谢谢、

    Suryaprakash Rao。

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

    Rex、

    有更新吗?

    Tom

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

    您的帖子在多个地方被截断、因此我不确定16MB 配置的结果。 是否枚举了端点? 我在内部检查、但怀疑 hotplug_MEM_size 是4个交换机端口的总内存。 对于您更改为的8MB 配置、每个交换机端口仅2MB 可用于端点。 我对您的帖子的理解是、虽然 lspci 在桥后显示8MB 内存、但并未枚举请求8MB 的 EP、对吗? 您可以尝试 EP 请求2MB 替代吗?

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

    Suryaprakesh、

    请发布此主题的更新。

    Tom

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

    Rex、

    该团队能够获得高达16MB 的可访问内存。  系统显示为每个端点分配16MB 的可访问内存和16MB 的预取内存、总容量为32MB。  即使需要预取块、他们也认为内存应该加倍至32MB。  但是,系统拒绝提供超过16MB 的内存。

    开发团队似乎存在访问问题。  我将努力解决这个问题。

    Tom

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

    请保持此打开状态、直到客户发布改进操作的更新。

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

    仍在等待客户发布解决方案。

    Tom

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

    您好!

    我们在内核/drivers/pci/pci.c 中修改了宏、将 PCIe 端点内存大小增加到16MB (可访问内存)和16MB (可预取内存)(即桥后内存:16MB、桥后可预取内存:16MB)。

    /*原始宏*/

    #define DEFAULT_HOTPLUG_MEM_SIZE       (2*1024*1024)

    /*已更改宏 */
     #define DEFAULT_HOTPLUG_MEM_SIZE       (32*1024*1024)

    谢谢、

    Suryaprakash Rao。 G

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

    该系统具有4个作为 PCIe 端点通过 PCIe 交换机连接的 FPGA。  最初的目标是每个 FPGA 端点64MB、总共256MB。  分配给每个端点的存储器必须一分为二、以实现"可访问存储器"和"预取存储器"。  但是、当为每个端点分配32MB 时、Linux 系统仍会崩溃。  16MB 是为每个端点实现的最大分配块。  假设这是由于 PCIe 为每个端口的 I/O 存储器分配了4KB 块。

    Tom