驱动大全中PCIE MSI_MSI-X中断的ITS区域映射问题

对于pcie驱动里面的“MSI_MSI-X中断之源码分析”一节的第一小节里面写到:

GITS_TRANSLATER寄存器的CPU地址是:0xfee20000 + 0x010000 + 0x0040 = 0xfee30040。
对应的PCI地址也是0xfee30040(驱动程序里为例方便,故意使得CPU地址跟PCI地址相同,这2个地址属于不同地址空间),
所以下图中PCI地址都是0xfee30040。
我理解意思是这里的0xfee30040是在pcie Host控制器里做了映射的,但是在“RK3399_PCIe_Host驱动分析_地址映射”一节里看到映射范围是从0xFA000000到0xFBFFFFFF,没有涵盖0xfee30040。这种情况下,PCIE设备是如何通过PCI地址0xfee30040访问到cpu地址0xfee30040的?还是我理解有误?
我查看了RK3399的TRM,看到地址转换分为outbound和inbound。当CPU访问PCI地址,使用outbound转换,转换的区域就是Region0到Region32,内核中使用rockchip_pcie_prog_ob_atu函数创建映射。对于从PCI访问CPU地址时,使用inbound转换,使用PCIE Host中的Bar寄存器进行设置转换,内核使用rockchip_pcie_prog_ib_atu创建映射。是不是这个样子的?
1 个赞

对于从PCI访问CPU地址时,使用inbound转换:这个是对的。

使用PCIE Host中的Bar寄存器进行设置转换:正确

内核使用rockchip_pcie_prog_ib_atu创建映射:这个也对

1 个赞