1. PCI总线0的Device 0设备

0 概述

PCI总线0存储器控制器(Device 0)是一个比较特殊的PCI设备, 这个设备除了需要管理DDR SDRAM之外, 还管理整个存储器域的地址空间(!!!), 包括PCI总线域地址空间(!!!). 在x86处理器系统中, 该设备是管理存储器域空间的重要设备, 其中含有许多与存储器空间相关的寄存器.

这些寄存器对于系统程序员理解x86处理器的存储器拓扑结构非常重要, 底层编程需要掌握这些寄存器. 但是在x86处理器系统中, 由于BIOS的存在, 多数程序员没有机会使用这些寄存器.

从底层开发角度, x86处理器系统不如PowerPC, MIPS和ARM处理器透明. x86处理器首先使用BIOS屏蔽处理器的硬件实现细节,其次在处理器内核中使用了microcode进一步屏蔽了CPU的实现细节. 使得底层程序员在没有得到充分的资源时, 几乎无法开发x86处理器的底层代码.

但不可否认的是x86处理器底层开发的复杂程度超过PowerPC, MIPS和ARM处理器, 因为x86处理器系统作为通用CPU需要与各类操作系统兼容, 而向前兼容对于任何一种处理器都是一个巨大的包袱. x86处理器系统使用BIOS和Microcode屏蔽硬件细节基于技术和商业考虑.

从传统外部设备的角度看, PCI总线0的Device 0并不是一个设备, 仅存放与处理器系统密切相关的一组参数. 而除了x86处理器外, 几乎所有处理器都使用存储器映射寻址的寄存器保存这些参数.

在Montevina平台, 系统软件使用Type 00h配置请求访问存储器控制器, 该存储器控制器除了具有一个标准的PCI Agent设备64B的配置空间之外, 还使用了PCI设备的扩展配置空间, 其包含的主要寄存器如表.

1. PCI总线0的Device 0设备

注: 上图是基本配置空间!!!

Device 0使用的基本配置空间(所有PCI设备都有!!!)与其他PCI设备兼容.

注意, Device 0PCIe体系结构中, 被认为是HOST主桥(!!!). 而Device 0使用的PCI扩展配置空间也被称为RCRB(!!!), RCRB主要作用是描述当前处理器存储器地址拓扑结构(!!!), 包括主存储器地址(!!!)和PCI总线地址(!!!). 其简写和复位值如图.

1. PCI总线0的Device 0设备

注: 上图是扩展PCI配置空间!!!

系统软件首先检查Capability Identifier寄存器, 该寄存器地址偏移为0xE0, 即CAPPTR寄存器(第一个Capability寄存器地址!!!)指向的地址为0xE0. 该Capability结构使用的PCI Express Extended Capability ID字段(该字段在CAPID0寄存器中)为0x0A(!!!ID是这个的说明是RCRB!!!), 因此表5-2中寄存器组为RCRB Capability结构, 关于Capability结构见4.3.

在x86处理器系统中, RCRB存放一些与处理器系统相关的寄存器. 而在许多处理器中, 如PowerPC中并不含有RCRB.

x86处理器中, 使用PCI总线管理所有外部设备(!!!), 这些"与处理器系统相关的寄存器"被保存在RCRB(!!!)中, 处理器使用PCI总线配置周期访问这些寄存器(!!!). 实际上在RCRB中包含的寄存器与PCIe体系结构并没有直接关系, 这些寄存器应该属于存储器域的地址区域(!!!). x86处理器的这种做法并非完全合理, 在某种程度上容易使人混淆存储器域PCI总线域的区别.

RCRB主要寄存器的含义如下.

1 EPBAR寄存器

大小为8B, 指向一个4KB大小存储器区域. 处理器使用存储器映像寻址访问这段存储器区域, 并通过这段存储器区域访问RCRB的扩展配置空间, 在表5-2中存放的仅是RCRB的部分扩展配置空间.

这段存储器区域描述RC的Egress端口属性, 包括RC使用的VC0和VC1两个虚通路的具体信息. 当EPBAR寄存器的"EPBAR Enable"位为1时, 这段空间有效. 这段寄存器区域被称为"Egress Port RCRB"空间, 系统软件可以使用这段空间定义的寄存器, 完成对VC1和VC0通路的设置, 包括端口仲裁, VC仲裁等一些列内容.

2 MCHBAR寄存器

大小8B, 指向一个16KB大小的存储器区域. 处理器使用存储器映像寻址访问这段存储器区域. 这段存储器区域描述GMCH内部使用的一些寄存器. 当MCHBAR寄存器的"MCHBAR Enable"位为1时, 这段存储区域有效.

这段区域包含多组寄存器.

3 其他寄存器

在Device 0中还包含以下寄存器.

  • GGC寄存器.
  • DEVEN寄存器.
  • PCIEXBAR寄存器. 大小8B, 指向一个256MB大小的存储器区域. PCIe总线可以使用ECAM方式访问PCI设备的扩展配置空间, PCIEXBAR寄存器存放PCI配置空间的基地址, 有关ECAM机制详细信息见5.3.2节.
  • DMIBAR寄存器. 大小8B, 指向一个4KB大小的存储器区域, 处理器使用存储器映像寻址访问这段存储器区域. 该寄存器描述RC中的DMI接口.
  • PAM0~PAM6寄存器. 描述Shadow BIOS的属性.

.............