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.

[参考译文] AM5706:在 PCIe 端点上配置 MSI

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1241007/am5706-configuring-msi-on-pcie-end-point

器件型号:AM5706

您好!

我当前正在尝试使 MSI 在基于 AM571x IDK 的定制电路板上正常工作。

根复合体是 QNX 系统。

 PCIe 链路启动、数据传输正在工作。

我们现在正尝试使 MSI 中断正常工作。

根据 TRM spruhz7j 第 24.9.4.6.2.2.2节 PCIe 控制器 MSI 传输方法(EP 模式) 、MSI 传输有两种方法。

我们使用的是 HW 方法、因为它似乎是在所有示例代码中使用的方法。

我知道 MSI 是来自 EP 的出站存储器写入操作、需要出站地址转换。

为 MSI 设置出站转换的示例代码 为

  /*为 EP 上的 MSI 生成设置 OB 区域*/
  /*为 MSI 生成访问空间配置 OB 区域*/
  regionParams.regionDir = PCIE_ATU_REGION_DIR_OUTPUT;
  regionParams.tlpType = PCIe_TLP_TYPE_MEM;
  regionParams.enableRegion = 1;

  regionParams.lowerBaseAddr = PCIe_Window_MSI_ADDR + resSize;
  regionParams.upperBaseAddr = 0;/*给定数据区大小只需要32位*/
  regionparams.regionWindowSize = PCIE_WINDOW_MSI_MASK;

  regionParams.lowerTargetAddr = PCIe_PCIe_MSI_BASE;
  regionParams.upperTargetAddr = 0u;

  RetVal = PCIe_atuRegionConfig (句柄、 PCIe_location_local、 (uint32_t) 0U、&regionParams );

我知道较低和较高的基地址是 MSI 将被写入的本地内存区域。 上下目标地址应位于 PCIe RC 存储器空间中。 所有示例代码似乎都是编写的、预期 RC 将是另一个 TI 处理器、并具有硬编码的目标地址。

是否应该读取 PCIECTRL_EP_DBICS_MSI_ADD_L32和 PCIECTRL_EP_DBICS_MSI_ADD_U32寄存器并将其用于 MSI 出站转换的目标地址?