TI中文支持网
TI专业的中文技术问题搜集分享网站

请问下,6670/6678中pcie对端的远端地址是如何配置的,详细见内

你好,环境简单描述下:6670的pcie模块配置成RC,直连对端EP。

现在想访问对端配置空间,这个地址应当如何定。

按照道理来说,应该是pcie在6670内分配的io基地址加一个偏移,同时如果需要使用emunation来遍历对端的拓扑结构,也是需要这个偏移的算法的。

io基地址为0x21800000,偏移应该如何算,因为在不同的处理器会有不同的算法,但基本都是bus偏移+dev偏移+func偏移。但这个偏移量在6670/6678的相关手册都没有找到,请管理员帮忙看下,谢谢~

另外,在stk1里的pcie例程,remote地址是local+0x3000,而pdk里的例程,remote地址变成了0x2000,没有任何的说明,让人看了一头包。。。

Allen35065:

PCIE的地址配置是先配置到PCIE线上地址空间,对端地址是不可见的,对端会把PCIE线上地址通过BAR来进行匹配;

这些不是TI的特殊设置,而是PCIE的协议要求,你可以先看看PCIE协议了解这些地址的转换。

Jian Li18:

回复 Allen35065:

对,你说的对,RC端是先将开放给所有ep或者桥的线上地址空间进行配置,对端会把PCIE线上地址通过BAR来进行匹配。

我的疑惑是这之后的事情,现在以最简单的方式举例,RC端与EP直连。

RC需要知道EP把哪些前述中开放出来的线上地址与自己的BAR空间进行了匹配,在EP是黑盒的情况下,下一步需要做的就是访问EP端的配置空间,从配置空间读取各个BAR匹配的线上地址,对吧。

我现在的问题是如何访问EP的配置空间。如果外挂拓扑比较复杂,RC会扫描所有设备,如何去扫描呢,其实就是通过远端访问所有可能的ep配置空间,读取vender id,device id ,去判断这个配置空间是不是有真实的外挂设备。

我的问题就是,扫描所需要访问的远端配置空间的地址在6670里是如何分配的,这种分配方式每个处理器实现都不一样,但基本都是通过bus,dev,func这几个的值进行一定的偏移再加上rc端pcie在处理器中分配的io地址 来进行计算。

这一点在stk1代码和pdk代码中都有体现的:

stk1:

CSL_Pcie_cfg_space_endpointRegs *gpPCIE_remote_EP_regs = (CSL_Pcie_cfg_space_endpointRegs*)(CSL_PCIE_CONFIG_REGS+0x3000);

pdk

/* Get base address for Remote Configuration Space */#define pcie_get_rem_cfg_base(handle, ep_rem_base, rc_rem_base) \ { \ ep_rem_base = (CSL_Pcie_cfg_space_endpointRegs *) ((unsigned int)handle + 0x2000); \ rc_rem_base = (CSL_Pcie_cfg_space_rootcomplexRegs *) ((unsigned int)handle + 0x2000); \ }

这两处都是直接写偏移,没有进行计算。

谢谢~~

Allen35065:

回复 Jian Li18:

底层CSL和STK只提供接口,并不提供扫描的策略;

你提到的bus,dev这些都是需要在驱动层面实现的。

赞(0)
未经允许不得转载:TI中文支持网 » 请问下,6670/6678中pcie对端的远端地址是如何配置的,详细见内
分享到: 更多 (0)