Quantcast
Channel: 数字信号处理器 (DSP) & ARM® 微处理器
Viewing all articles
Browse latest Browse all 21822

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

$
0
0

对,你说的对,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); \
}

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

谢谢~~


Viewing all articles
Browse latest Browse all 21822

Trending Articles