首页 > 解决方案 > PCIe 配置空间与 ECAM

问题描述

PCIe ECAM 是否与仅映射到内存而不是 I/O 的“PCI-Compatible Configuration Registers”完全相同?

在我看来,PCIe 使用与传统 PCI 相同的配置机制:[1]

| 31 | 30 - 24 | 23 - 16 | 15 - 11 | 10 - 8 | 7 - 2 | 1 - 0 | | Enable | Reserved | Bus Nr | Device Nr | Function Nr | Register Nr | 00 |

但在 PCIe 中,您可以使用保留字节来寻址函数的更多寄存器。它是否正确?

在第 7.2.1 [2] 节中,ECAM 被定义为:

| 27 - 20 | 19 - 15 | 14 - 12 | 11 - 8 | 7 - 2 | 1 - 0 | | Bus Nr | Dev Nr | Function Nr | Ext. Register Nr | Register Nr | Byte Enable |

它看起来与常规配置非常相似。只有保留位被转移到它们在 PCIe 中扩展的寄存器号。但我可以像旧的一样使用它们吗?只在内存空间而不是 IO 空间中寻址它们?

[1] https://wiki.osdev.o/PCI#Configuration_Space_Access_Mechanism_.231 [2] PCI Express Base Specification, Rev. 4.0 Version 1.0

标签: pcipci-ememory-mapping

解决方案


在比较中,您将苹果和橙子混合在一起。第一个地址解码由 PC-AT 架构系统 (*) 上的主机桥组件提供。这是一种使用 Intel 处理器的 I/O 地址空间与 PCI 总线配置空间机制接口的方式。它可以在 PCIe 系统上使用,因为PCIe 主机桥组件为 PCIe 设备提供相同的接口。但是,在 PCI 和 PCIe 之间,主机桥下的所有内容实现方式完全不同。

同时,您展示的第二种解码方案只能在内存映射块内使用,PCIe 通过它提供对其扩展配置空间的访问。并且只有在该块以系统相关的方式映射到物理地址空间之后。

因此,尽管它们具有相似的功能,但不,您不能以相同的方式使用它们。你可以:

  1. 使用第一种机制访问任何 PCI 或 PCIe 设备配置空间的前 256 个字节,但您必须使用第一种寻址方案,或者
  2. 使用第二种机制(包括前 256 个字节)访问任何 PCIe 设备的整个扩展配置空间,但是您必须使用第二种寻址方案。

(*) “通过 0xCF8 / 0xCFC 配置 PCI 总线的 I/O 空间接口”确实是 Intel / PC-AT 架构的一部分。其他系统架构(例如 MIPS)没有单独的 I/O 地址空间,为它们设计的主机桥具有不同的机制来生成 PCIe 配置空间访问(或者它们只是直接使用内存映射机制)。


推荐阅读