HI , 各位管理好
我的DSP 6657 作为 RC端, EP连接的是FPGA, 现在想通过 EP访问DSP 6657的DDR3区域, 我的配置过程如下, 请帮忙看下是否正确。
6657 的 DDR3 memory 地址从0x8000_0000 开始, 我准备将 DDR3开始的64M空间让 EP端访问
1, 设置 6657的 bar[0] mask 为 0x00000000000FFFFF , bar[0] 地址为 0x100_0000 (定义的地方如下)
#define PCIE_RC_BAR0_ADDRESS 0x01000000 //should >=0x400000???
RC端的Bar[0] 为 RC pcie application寄存器区域的映射
2, 设置6657的 bar[1] 长度为64M, bar[1] 的地址为 0x8000_0000 (pcie 总线地址)
3, 设置 6657的 inboundTranslationRegs[0] 寄存器,
IB_BAR 为 1
IB_START_LO 为 _loll(0x8000_0000)
IB_START_HIGH 为 0
IB_OFFSET = 0x8000_0000
4, EP端访问 PCIE地址 0x8000_0000 则可以访问到 RC端的 0x8000_0000 memory 地址 ( EP端的 outbound 地址翻译 EP自己做, 我这里假设使用已经翻译过的 PCIE 地址)
IB_OFFSET 应该为此bar对应的memory 地址的起始值, IB_START_LO 为PCIE地址, 如果EP端发起对 IB_START_LO 范围内的地址访问, 则通过IB翻译为 0x8000_0000 + 偏移 的memory 地址访问。
不知道我的这个理解是否正确。
另外关于为 rc端它自己 bar[1] 分配 pcie地址的问题, 是否有规定这个地址要从什么地方开始,
例如
RC端为 EP端分配的 non-prefetch 地址从 0x1000_0000 开始
RC端为 EP 端分配的 prefetch 地址从0x8000_0000 开始
在此情况下 RC端再为自己的 bar[1] 分配PCIE地址 0x8000_0000 会不会与之前给 EP分配的 prefetch地址有冲突, 这里有疑问。
在 KeyStone_1_PCIE_STK_User%26%2339%3bs_Guide.doc 这个文档中有介绍 EP访问 RC端的memory, 图示如下:
这里 EP端通过0x9000_0000 的地址访问 RC端的 DDR3, 为啥在左图中 有 By pass inbound address translation
这里不用设置RC端的 inbound 寄存器吗, 为啥可以直接by pass 访问, 有疑问
