ecam 机制
物理地址 = [总线号 | 设备号 | 功能号 | 寄存器偏移]
CPU 发起访问到生成 TLP 的完整路径
以下是访问流程的完整步骤:
CPU 发起虚拟地址访问:
驱动程序通过虚拟地址(ioremap 映射得到)访问 PCIe 配置空间。
示例代码:
c
复制代码
writel(0x1234, virt_addr + offset);
MMU 将虚拟地址转换为物理地址:
根据页表,MMU 确定虚拟地址对应的物理地址(属于 PCIe 配置空间)。
内存控制器解码地址:
内存控制器检测到物理地址在 PCIe 配置空间范围内。
请求被转发到 PCIe 控制器,而非 DRAM。
PCIe 控制器生成 TLP 报文:
PCIe 控制器根据物理地址生成配置 TLP。
地址中的高位字段(总线号、设备号、功能号)用于目标设备的定位。
PCIe 总线传输:
TLP 报文通过 PCIe 交换机传输到目标设备。
设备处理请求:
PCIe 设备根据 TLP 的内容,访问其配置寄存器。
设备响应:
设备将结果封装为完成报文(Completion TLP),返回给 PCIe 控制器。
最终,数据通过内存控制器返回到 CPU。