接前一篇文章:《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置(17)
PCI桥使用的配置空间的寄存器如图2-10所示。
在PCI桥中,与Secondary Bus相关的寄存器包括两类:一类寄存器管理Secondary Bus之下PCI子树的总线号,如Secondary Bus Number和Subordinate Bus Number寄存器;另一类管理寄存器管理下游PCI总线的I/O和存储器地址空间,如I/O Limit和Memory Limit、I/O Base和Memory Base寄存器。在PCI桥中还使用Primary Bus寄存器保存上游的PCI总线号。
其中,存储器(Memory)地址空间还分为可预读空间和不可预读空间。Perfetchable Memory Limit和Perfetchable Memory Base寄存器管理可预读空间,而Memory Limit、Memory Base寄存器管理不可预读空间。在PCI体系结构中,除了ROM地址空间之外,PCI设备使用的地址空间大多都是不可预读的。
(1)Subordinate Bus Number、Secondary Bus Number和Primary Bus Number寄存器
PCI桥可以管理其下的PCI总线子树。其中,Subordinate Bus Number寄存器存放当前PCI子树中编号最大的PCI总线号;而Secondary Bus Number寄存器存放当前PCI桥Secondary Bus使用的总线号,这个PCI总线号也是该PCI桥管理的PCI子树中编号最小的PCI总线号。因此一个PCI桥能够管理的PCI总线号在Secondary Bus Number ~ Subordinate Bus Number之间。这两个寄存器的值由系统软件遍历PCI总线树时设置。
Primary Bus Number寄存器存放该PCI桥上游的PCI总线号,该寄存器可读写。Primary Bus Number、Subordinate Bus Number和Secondary Bus Number寄存器在初始化时必须是0,系统软件将根据这几个寄存器是否为0,判断PCI桥是否被配置过。
不同的操作系统使用不同的Bootloader引导,有的Bootloader可能会对PCI总线树进行遍历,此时操作系统不必重新遍历PCI总线树。在x86处理器系统中,BIOS会遍历处理器系统中的所有PCI总线树,操作系统可以直接使用BIOS遍历得到的结果,也可以重新遍历PCI总线树;而PowerPC处理器系统中的Bootloader如U-Boot,并没有完全遍历PCI总线树,此时操作系统必须重新遍历PCI总线树。
(2)Secondary Status寄存器
该寄存器的含义与PCI Agent配置空间的Status寄存器的含义相近,PCI桥的Secondary Status寄存器记录Secondary Bus的状态,而不是PCI桥作为PCI设备时使用的状态。在PCI桥配置空间中还存在一个Status寄存器,该寄存器(才是)保存PCI桥作为PCI设备时的状态。
(3)Secondary Latency Timer寄存器
该寄存器的含义与PCI Agent配置空间的Latency Timer寄存器的含义相近,PCI桥的Secondary Latency Timer寄存器管理Secondary Bus的超时机制,即PCI桥发向下游的总线事务;在PCI桥配置空间中还存在一个Latency Timer寄存器,该寄存器管理PCI桥发向上游的总线事务。
(4)I/O Limit和I/O Base寄存器
在PCI桥管理的PCI子树中包含许多PCI设备,而这些PCI设备可能会使用I/O地址空间。PCI桥使用这两个寄存器存放PCI子树中所有设备使用的I/O地址空间集合的基地址和大小。
(5)Memory Limit和Memory Base寄存器
在PCI桥管理的PCI子树中有许多PCI设备,这些PCI设备可能会使用存储器地址空间。这两个寄存器存放所有这些PCI设备使用的存储器地址空间集合的基地址和大小,PCI桥规定这个空间的大小至少为1MB。
(6)Prefetchable Memory Limit和Prefetchable Memory Base寄存器
在PCI桥管理的PCI子树中有许多PCI设备,如果这些PCI设备支持预读,则需要从PCI桥的可预读空间中获取地址空间。PCI桥的这两个寄存器存放这些PCI设备使用的可预取存储器空间的基地址和大小。
如果PCI桥不支持预读,则其下支持预读的PCI设备需要从Memory Base寄存器为基地址的存储器空间获取地址空间;如果PCI桥支持预读,其下的PCI设备需要根据情况,决定使用可预读空间还是不可预读空间。PCI总线建议PCI设备支持预读,但是支持预读的PCI设备并不多见。
(7)I/O Base Upper 16 Bits and I/O Limit Upper 16寄存器
如果PCI桥仅支持16位的I/O端口,这组寄存器只读,且其值为0;如果PCI桥支持32位I/O端口,这组寄存器可以提供I/O端口的高16位地址。
(8)Bridge Control Register
该寄存器用来管理PCI桥的Secondary Bus,其主要位的描述如下:
第6位,可读写。当该位为1时,将使用下游总线提供的RST#信号复位与PCI桥的下游总线连接的PCI设备。通常情况下,与PCI桥下游总线连接的PCI设备,其复位信号需要与PCI桥提供的RST#信号连接,而不能与HOST主桥提供的RST#信号连接。
第8位,可读写。PCI桥支持Delayed传送方式,当PCI桥的Primary总线上的主设备使用Delayed方式进行数据传递时,PCI桥使用Retry周期结束Primary总线的Non-Posted数据请求,并将这个Non-Posted数据请求转换为Delayed数据请求,之后主设备需要择时重试相同的Non-Posted数据请求。当该位为1时,表示在Primary Bus上的主设备需要在2^10个时钟周期内重试这个数据请求;为0时,表示主设备需要在2^15个时钟周期之内重试此数据请求,否则PCI桥将丢弃Delayed数据请求。
第9位,可读写。当该位为1时,表示在Secondary Bus上的主设备需要在2^10个时钟周期内重试这个数据请求;为0时,表示主设备需要在2^15个时钟周期之内重试此数据请求。如果主设备在规定的时间内没有进行重试,则PCI桥将丢弃Delayed数据请求。
至此,“2.3 PCI桥与PCI设备的配置空间”就讲解完了。