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:FPGA PCIe 枚举错误

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

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/637914/linux-am5728-fpga-pcie-enumeration-error

器件型号:AM5728

工具/软件:Linux

您好!

我们使用的 AM5728 IDK 板具有与 FPGA 的 PCIe 电缆连接。 我们有 适用于该 FPGA 的 PCIe 驱动程序、当加载该驱动程序并尝试在 FPGA 上的3个条中的第三个条中进行映射时 、我们会收到以下错误消息:

 

[79.406359]  OMAP_L3_NOC 44000000.OCP:L3应用程序错误:目标5 mod:1 (不可清除)

 

稍后我会得到

 

[79.492537]  OMAP-L3_NOC 44000000.OCP:L3调试错误:目标5 mod:1 (不可清除)

 

第3条非常大- 128 MB,而第1条为16K,第2条为4 MB

 

在 TI Sitara 处理器论坛上出现了一个非常类似的问题(即 https://e2e.ti.com/support/arm/sitara_arm/f/791/t/529810)、但 我们看不到任何解决方案。


 

内核来自最新的 Processor SDK、版本为4.9.41。 设备树未从原始设备修改。

 

您能告诉我们问题是什么吗?

 

谢谢、

-Gunter

 

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

    通过解码 OMAP-L3_NOC 错误行、我认为似乎存在保护违规。 我在内部进行检查、以查看这是不是由 MMU 保护区的存储器访问引起的。

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

    尊敬的 Rex:

    另请注意、u-boot 配置为4GB DDR、但内核配置和内核器件树不变。 定制 AM5728 IDK 采用4GB DDR。  由于4GB 的内存,是否会产生副作用?

    谢谢、

    -Gunter

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

    我认为 DDR 变化与之没有任何关系。 您提到了器件树未更改。 我在前面检查了 dra7.dtsi 中的 PCIe 配置、存储器区域的大小配置为255MB。 这应该足够适合。 bar3中的地址是什么? 在 DTS 文件中、它将 PCIe 0x20013000映射到0x13000。 我没有听到开发人员的反馈来确认错误是否来自访问 MMU 保护下的区域、但我想映射可能会关闭到 MMU 保护下的某个区域。

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

    尊敬的 Rex:

    客户可以分享此/proc/iomem。 您能否尽快提供反馈? 它们当前被阻止。 谢谢!

    如果有用、请提供更多信息。 这是来自/proc/iomem

     

    20013000-2ffffffff:MEM

     20020000 - 2002FFFF:0000:00:00.0

     20100000-201ffff:0000:00:00.0

     24000000-2ffffffff:PCI 总线0000:01

       24000000-243fff: 0000:01:00.0

       24400000-24403fff:0000:01:00.0

       2800000-2fffffff: 0000:01:00.0

     

    因此、在内核空间中、这些条形图映射到24000000、24400000和28000000。 我目前正在将前2个映射到 b2e8b000 (16KB)和 b1f00000 (4MB)的用户空间中。

     

    也可从/proc/iomem 获取

     

    8000000000-9ffffffff:系统 RAM

     80008000-80dfff:内核代码

     81000000-8109c0ef:内核数据

    a0000000-abffff:CMEM

    ac000000-ffffff:系统 RAM

    200000000-27fcfff:系统 RAM

     

    这是否意味着4GB 的 RAM 在8000000000和 ac000000被分成2个块? 有问题吗?

    您还想从/proc/iomem?上查看其他内容

    谢谢、

    -Gunter

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

    在 DTS 文件中、它为内核定义了前2GB。
    存储器@0{
    DEVICE_TYPE ="存储器";
    REG =<0x0 0x8000000000 0x0 0x8000000000>;
    在2GB 范围内、有一个从0xa0000000开始的 CMEM 预留192MB (0x0c000000)区域。
    cmem_block_mem_0:cmem_block_mem@a0000000{
    reg =<0x0 0xa0000000 0x0 0x0c000000>;
    无地图;
    状态="正常";
    };
    所以、这没有什么问题。

    当您说将前两个条形图映射到用户空间时、您是说在用户空间应用程序中、它会进行 mmap 调用、它适用于 bar0和 bar1、但不适用于 bar2?

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

    为完整起见、此处为整个/proc/iomem

    20013000-2ffffffff:MEM
    20020000 - 2002FFFF:0000:00:00.0
    20100000-201ffff:0000:00:00.0
    24000000-2ffffffff:PCI 总线0000:01
    24000000-243fff: 0000:01:00.0
    24400000-24403fff:0000:01:00.0
    2800000-2fffffff: 0000:01:00.0
    40300000-4037FFFF:40300000.ocmcram
    40500000-405ffff:CMEM
    40800000-40847fff:l2ram
    40d01000-40d010ff:/ocp/mmu@40d01000
    40d02000-40d020ff:/ocp/mmu@40d02000
    41000000-41047fff:l2ram
    41501000-415010ff:/ocp/mmu@41501000
    41502000-415020ff:/ocp/mmu@41502000
    43300000-433ffff:EDMA3_cc
    44000000-44ffff:/OCP
    45000000-45000fff:/OCP
    48020000 - 4802001f:串行
    48032000-4803207f:/ocp/timer@48032000
    48034000-4803407f:/ocp/timer@48034000
    48036000-4803607f:/ocp/timer@48036000
    4803e000-4803e07f:/ocp/timer@4803e000
    480511000-480511ff:/ocp/gpio@48051000
    480530-480531ff:/ocp/gpio@48053000
    48055000-480551ff:/ocp/gpio@48055000
    48057000-480571ff:/ocp/gpio@48057000
    480590-480591ff:/ocp/gpio@48059000
    4805b000-4805b1ff:/ocp/gpio@4805b000
    4805d000-4805d1ff:/ocp/gpio@4805d000
    48070000-480700ff:/ocp/i2c@48070000
    48086000-4808607f:/ocp/timer@48086000
    48088000-4808807f:/ocp/timer@48088000
    48090000-48091fff:/ocp/rng@48090000
    4809c000-4809c3ff:/ocp/mmc@4809c000
    480a5000-480a509f:/ocp/des@480a5000
    480b4000-480b43ff:/ocp/mmc@480b4000
    480b8100-480b82ff:/ocp/spi@480b8000
    4843e100-4843e17f:/ocp/epwmss@4843e000/ECAP@4843e100
    4844a000-4844ad1b:/ocp/padconf@4844a000
    48484000-48484fff:/ocp/ethernet@48484000
    48485000-484850ff:/ocp/ethernet@48484000/MDIO@48485000
    48485200-48487fff:/ocp/ethernet@48484000
    4882000-4882007f:/ocp/timer@48820000
    48822000-4882207f:/ocp/timer@48822000
    48824000-4882407f:/ocp/timer@48824000
    48826000-4882607f:/ocp/timer@48826000
    48828000-4882807f:/ocp/timer@48828000
    4882a000-4882a07f:/ocp/timer@4882a000
    4882c000-4882c07f:/ocp/timer@4882c000
    4882e000-4882e07f:/ocp/timer@4882e000
    48838000-488380ff:/ocp/rtc@48838000
    4883c000-4883c1ff:/ocp/mailbox@4883c000
    4883e000-4883e1ff:/ocp/mailbox@4883e000
    48840000-488401ff:/ocp/mailbox@48840000
    48842000-488421ff:/ocp/mailbox@48842000
    48880000-4888FFFF:/ocp/omap_dwc3_1@48880000
    48890000-488997fff:/ocp/omap_dwc3_1@48880000/USB@48890000
    48890000-488997fff:/ocp/omap_dwc3_1@48880000/USB@48890000
    4889c100-488a6fff:/ocp/omap_dwc3_1@48880000/USB@48890000
    488c0000-488cFFFF:/ocp/omap_dwc3_2@488c0000
    488dc100-488e6fff:/ocp/omap_dwc3_2@488c0000/USB@488d0000
    48990000-48990113:VIP
    48995500-489955d7:parser0
    48995700-48995717:csc0
    48995800-4899587f:sc0
    48995a00-48995ad7:parser1.
    48995c00-48995c17:csc1
    48995d00-48995d7f:SC1.
    489d0700-489d077f:SC
    489d5700-489d5717:CSC
    4a0021e0-4a0021eb:/ocp/bandgap@4a0021e0
    4a00232c-4a002337:/ocp/bandgap@4a0021e0
    4a002380-4a0023ab:/ocp/bandgap@4a0021e0
    4a0023c0-4a0023fb:/ocp/bandgap@4a0021e0
    4a00246c-4a00246f:LDO 地址
    4a002470-4a002473:LDO-address
    4a002554-4a002557:gmii-SEL
    4a002564-4a00256b:/ocp/bandgap@4a0021e0
    4a002574-4a0025c3:/ocp/bandgap@4a0021e0
    4a002b78-4a002c73:/ocp/l4@4a000000/SCM@2000/dma-router@b78
    4a002c78-4a002cf3:/ocp/l4@4a000000/SCM@2000/dma-router@C78
    4a003400-4a003867:pinctrl-single
    4a056000-4a056fff:OMAP_DMA_SYSTEM.0
    4a056000-4a056fff:/ocp/dma-controller@4a056000
    4a080000-4a08001f:/ocp/ocp2scp@4a080000
    4a084000-4a0843ff:/ocp/ocp2scp@4a080000/phy@4a084000
    4a084c00-4a084c3f:pll_ctrl
    4a085000-4a0853ff:/ocp/ocp2scp@4a080000/phy@4a085000
    4a090000-4a09001f:/ocp/ocp2scp@4a090000
    4a094000-4a09407f:phy_rx
    4a094400-4a094463:phy_tx
    4a096800-4a09683f:pll_ctrl
    4a140000-4a1410ff:/ocp/sata@4a141100
    4ae07ddc-4ae07ddf:setup-address
    4ae07de0-4ae07de3:control-address
    4ae07de4-4ae07de7:设置地址
    4ae07de8-4ae07deb:control-address
    4ae07e20-4ae07e23:控制地址
    4ae07e24-4ae07e27:控制地址
    4ae07e30-4ae07e33:设置地址
    4ae07e34-4ae07e37:设置地址
    4ae0c154-4ae0c157:ldo-address
    4ae0c158-4ae0c15b:ldo-address
    4ae10000-4ae101 ff:/ocp/gpio@4ae10000
    4ae14000-4ae1407f:/ocp/wdt@4ae14000
    4ae20000-4ae2007f:/ocp/timer@4ae20000
    4ae3c000-4ae3dfff:/ocp/can@481cc000
    4b101000-4b1012ff:/ocp/sham@53100000
    4b200000-4b201fff:dram0
    4b202000-4b203fff:dram1.
    4b210000-4b217fff:shrdram2.
    4b220000-4b221fff:intc
    4b222000-4b2223ff:控制
    4b222400-4b2224ff:调试
    4b224000-4b2243ff:控制
    4b224400-4b2244ff:调试
    4b226000-4b227fff:cfg
    4b22e000-4b22e31b:IEP
    4b232000-4b232057:MII_RT
    4b234000-4b236fff:IRAM
    4b238000-4b23afff:IRAM
    4b280000-4b281fff:dram0
    4b282000-4b283fff:dram1.
    4b290000-4b297fff:shrdram2.
    4b2a0000-4b2a1fff:intc
    4b2a2000-4b2a23ff:控制
    4b2a2400-4b2a24ff:调试
    4b2a4000-4b2a43ff:控制
    4b2a4400-4b2a44ff:调试
    4b2a6000-4b2a7fff:cfg
    4b2ae000-4b2ae31b:IEP
    4b2b2000-4b2b2057:MII_RT
    4b2b2400-4b2b248f:/ocp/pruss_soc_bus@4b2a6000/pruss@4b280000/MDIO@4b2b2400
    4b2b4000-4b2b6fff:IRAM
    4b2b8000-4b2障 板:IRAM
    4b300000-4b3000ff:QSPI_base
    4b500000-4b50009f:/ocp/aes@4b50000
    4b700000-4b70009f:/ocp/aes@4b700000
    5502000-5502FFFF:l2ram
    55082000-550820ff:/ocp/mmu@55082000
    58000000-5800007f:DSS
    58001000-58001fff:/ocp/dss@58000000/dispc@58001000
    58004054-58004057:pll1_clkctrl
    58004300-5800431f:pll1.
    58009054-58009057:pll2_clkctrl
    58009300-5800931f:pll2.
    58040000-580401ff:wp
    58040200-5804027f:PLL
    58040300-5804037f:phy
    58060000-58078fff:内核
    5882000-5882FFFF:l2ram
    58882000-588820ff:/ocp/mmu@58882000
    8000000000-9ffffffff:系统 RAM
    80008000-80dfff:内核代码
    81000000-8109c0ef:内核数据
    a0000000-abffff:CMEM
    ac000000-ffffff:系统 RAM
    200000000-27fcfff:系统 RAM


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

    Rex、

    我是 Gunter 的用户。 我们目前只是 mmap'ing bar 0和 bar 1、两者似乎都起作用。 当我们尝试从用户空间访问条1处的存储器时、会发生错误。

    Carolyn

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

    大家好、Carolyn、

    Gunter 最初输入的第三个条形图是问题所在,但您写入了 bar0,bar1似乎可以正常工作,但在条形1 (?)访问时出现错误。 这是一个拼写错误、应该是2?

    雷克斯

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

    很抱歉我不清楚。 我们目前只是 mmap'ing bar 0和1、因为我们担心 bar 2的大小是问题所在。 从内核空间通过 bar 0和1访问内存似乎可以正常工作。 我尚未尝试通过用户空间的条0访问内存、但通过条1从用户空间访问内存会导致 OMAP-L3_NOC 错误。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在 iomem 中、4MB 区域在地址0x24000000处定义、16KB 在地址0x24400000处定义。 当您提到 bar0和 bar1时,它们是16K/4MB 区域还是4MB/16KB? 我不确定如何访问它们、但您是否能够使用 devmem2访问这些区域?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Rex 和 Gunter、您好!

    我们找到了问题。 我们用于将条形图映射到用户空间的驱动程序未将空间声明为非缓存。 我添加了这一行

    vma->vm_page_prot = pgprot_noncached (vma->vm_page_prot);

    在调用 remap_pfn_range 之前、我现在可以访问条后面的硬件。

    感谢您的帮助、
    Carolyn
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很棒!! 感谢您提供信息。 我将关闭该线程。

    雷克斯