Hi 各位管理好
咨询下,我使用STK 6657 中的 PCIE_test 例程进行PCIE通信测试, 6657作为RC端口, pcie外接设备
在代码中有如下部分:
CSL_Pciess_appRegs *gpPCIE_app_regs = (CSL_Pciess_appRegs*)CSL_PCIE_CONFIG_REGS;
CSL_Pcie_cfg_space_rootcomplexRegs *gpPCIE_RC_regs = (CSL_Pcie_cfg_space_rootcomplexRegs*)(CSL_PCIE_CONFIG_REGS + 0x1000);
CSL_Pcie_cfg_space_endpointRegs *gpPCIE_EP_regs = (CSL_Pcie_cfg_space_endpointRegs*)(CSL_PCIE_CONFIG_REGS + 0x1000);
//remote PCIE EP registers
CSL_Pcie_cfg_space_endpointRegs *gpPCIE_remote_EP_regs = (CSL_Pcie_cfg_space_endpointRegs*)(CSL_PCIE_CONFIG_REGS+0x3000);
这里的 gpPCIE_remote_EP_regs 我理解是在 train link 完成后, 在本地PCIE config空间映射的 EP端的config空间,
后续初始化EP端Bar base地址的时候,就是操作 gpPCIE_remote_EP_regs 里面的bar内存。
现在有个疑问:
问题1 :
在 PCI Express (PCIe) for KeyStone Devices User's Guide.pdf 文档中有这么一副图
在图中看
偏移 0x0 是application 部分
偏移0x1000 是local config 本地pcie配置空间
偏移0x2000 是remote config EP 端的pcie配置空间映射
偏移0x3000 是remote io 操作的映射
那我按照上图的理解, 配置EP端的pcie config 空间,应该操作的是0x2000偏移的这段内存, 但是测试用例中为什么使用 0x3000的偏移地址呢
通过在ccs中查看memory 发现 0x2180_2000 地址是 EP端的配置空间内容, 而 0x2180_3000 地址的内容是全0 (0x2180_0000 是memory 中pcie config 的起始地址)
请教下, 这样看是不是例程中的 gpPCIE_remote_EP_regs 地址赋值有误?
问题2 :
6657做pcie主设备的时候, 下挂的pcie 不是一个EP设备, 而是一个 pcie-bridge, 在 bridge 下面有一个pci设备, 所以现在需要在代码中枚举pcie设备,请教下有没有 DSP做RC端时, 枚举PCIE设备的参考用例
非常感谢您的回复
