您好,欢迎访问一九零五行业门户网

.2 HOST主桥(2)

3 使用outbound寄存器访问pci总线地址空间 mpc8548处理器使用outbound寄存器组访问pci总线地址空间的步骤如下。 (1) 首先mpc8548处理器需要将程序使用的32位有效地址ea (effective address)转换为41位的虚拟地址va (virtual address)。e500 v2内核不能关闭mm
3 使用outbound寄存器访问pci总线地址空间mpc8548处理器使用outbound寄存器组访问pci总线地址空间的步骤如下。
(1) 首先mpc8548处理器需要将程序使用的32位有效地址ea (effective address)转换为41位的虚拟地址va (virtual address)。e500 v2内核不能关闭mmu(memory management unit),因此不能直接访问物理地址。
(2) mpc8548处理器通过mmu将41位的虚拟地址转换为36位的物理地址。在e500 v2内核中,物理地址是36位(缺省是32位,需要使能)。
(3) 检查lawbar和lawar寄存器,判断当前36位的物理地址是否属于pci总线空间。在mpc8548中定义了一组lawbar和lawar寄存器对,每一对寄存器描述当前物理空间是与pci总线、pcie总线、ddr还是rapidio空间对应。该组寄存器的详细说明见mpc8548 powerquicc iii? integrated host processor family reference manual。如果cpu访问的空间为pci总线空间,则执行第(4)步,否则处理器将不会访问pci地址空间。
(4) 判断当前36位物理地址是否在powbarn寄存器1~4描述的窗口中,如果在则将36位的处理器物理地址通过寄存器potarn和potearn转换为64位的pci总线地址,然后host主桥将来自处理器的读写请求发送到pci总线上;如果不在powbarn寄存器1~4描述的窗口中,powbar0寄存器作为缺省窗口,接管这个存储器访问,并使用寄存器potar0和potear0,将处理器物理地址转换为pci总线地址,当然在正常设计中很少出现这种情况。
许多系统软件,将outbound窗口两边的寄存器使用“直接相等”的方法进行映射,将存储器域的地址与pci总线地址设为相同的值。但是系统软件程序员务必注意这个存储器地址与pci总线地址是分属于存储器域与pci总线域的,这两个值虽然相等,但是所代表的地址并不相同,一个属于存储器域,而另一个属于pci总线域。
2.2.3 pci总线域地址空间到存储器域地址空间的转换mpc8548处理器使用inbound寄存器组将pci总线域地址转换为存储器域的地址。pci设备进行dma读写时,只有访问的地址在inbound窗口中时,host主桥才能接收这些读写请求,并将其转发到存储器控制器。mpc8548处理器提供了3组inbound寄存器,即提供3个inbound寄存器窗口,实现pci总线地址到存储器地址的反向映射。
从pci设备的角度上看,pci设备访问存储器域的地址空间时,首先需要通过inbound窗口将pci总线地址转换为存储器域的地址;而从处理器的角度上看,处理器必须要将存储器地址通过inbound寄存器组反向映射为pci总线地址空间,才能被pci设备访问。
pci设备只能使用pci总线地址访问pci总线域的地址空间。host主桥将这段地址空间通过inbound窗口转换为存储器域的地址之后,pci设备才能访问存储器域地址空间。这个地址转换过程如图2?5所示。
在介绍mpc8548处理器如何使用inbound寄存器组进行pci总线域地址空间到存储器域地址空间的转换之前,我们首先简要介绍inbound寄存器组中的相应寄存器。该组寄存器的地址偏移、属性和复位值如表2?3所示。表2?3 pci/x atmu inbound寄存器组
offset
寄存器名
属性
复位值
0x0_8da0/c0/e0
pitarn
可读写
0x0000-0000
0x0_8da8/c8/e8
piwbarn
可读写
0x0000-0000
0x0_8dac/cc
piwbearn
可读写
0x0000-0000
0x0_8db0/d0/f0
piwarn
可读写
0x0000-0000
值得注意的是,inbound寄存器组除了可以进行pci总线地址空间到存储器域地址空间的转换之外,还可以转换分属不同pci总线域的地址空间,以支持pci总线的peer-to-peer数据传送方式。
1 pitarn寄存器pitarn寄存器保存当前inbound窗口在存储器域中的36位地址空间的基地址,其地址窗口的大小至少为4kb,因此在该寄存器中仅存放存储器域地址的第0~23位,该寄存器的其主要字段如下所示。
tea字段存放存储器地址空间的第0~3位。 ta字段存放存储器地址空间的第4~23位。 2 piwbarn和piwbearn寄存器piwbarn和piwbearn寄存器保存当前inbound窗口在pci总线域中的64位地址空间的基地址的第63~12位,inbound窗口使用的最小地址空间为4kb,因此在这两个寄存器中不含有pci总线地址空间的第11~0位。这两个寄存器的主要字段如下所示。piwbarn寄存器的bea字段存放pci总线地址空间的第43~32位。 piwbarn寄存器的ba字段存放pci总线地址空间的第31~12位。 piwbearn寄存器的bea字段存放pci总线地址空间的第63~44位。 3 piwarn寄存器piwarn寄存器描述当前inbound窗口的属性,该寄存器由以下位和字段组成。
en位,第0位。该位是inbound窗口的使能位,为1表示当前inbound寄存器组描述的存储器地址空间到pci总线地址空间的映射关系有效;为0表示无效。pf位,第2位。该位为1表示当前inbound窗口描述的存储区域支持预读;为0表示不支持预读。 tgi字段,第8~11位。该字段为0b0010表示当前inbound窗口描述的存储区域属于pcie总线域地址空间;为0b1100表示当前inbound窗口描述的存储区域属于rapidio总线域地址空间。该字段对于ocean实现不同域间的报文转发非常重要,如果当前inbound窗口的tgi字段为0b0010,此时pci总线上的设备可以使用该inbound窗口,通过ocean直接读取pcie总线的地址空间,而不需要经过soc平台总线。如果tgi字段为0b1111表示inbound窗口描述的存储器区域属于主存储器地址空间,这也是最常用的方式。使用该字段可以实现host主桥的peer-to-peer数据传送方式。rtt字段和wtt字段,分别为该寄存器的第12~15位和第16~19位。inbound窗口的rtt/wtt字段的含义与outbound窗口的rtt/wtt字段基本类似。只是在inbound窗口中可以规定pci设备访问主存储器时,是否需要进行cache一致性操作(cache lock and allocate),在进行dma写操作时,数据是否可以直接进入到cache中。该字段是powerpc处理器对pci总线规范的有效补充,由于该字段的存在,powerpc处理器的pci设备可以将数据直接写入cache,也可以视情况决定dma操作是否需要进行cache共享一致性操作。iws字段,第26~31位。该字段描述当前窗口的大小,inbound窗口的大小在4kb~16gb之间,其值为2iws+1。 4 使用inbound寄存器组进行dma操作pci设备使用dma操作访问主存储器空间,或者访问其他pci总线域地址空间时,需要通过inbound窗口,其步骤如下。
(1) pci设备在访问主存储器空间时,将首先检查当前pci总线地址是否在piwbarn和piwbearn寄存器描述的窗口中。如果在这个窗口中,则将这个pci总线地址通过pitarn寄存器转换为存储器域的地址或者其他pci总线域的地址;如果不在将禁止本次访问。
(2) 如果pci设备访问的是存储器地址空间,host主桥将来自pci总线的读写请求发送到存储器空间,进行存储器读写操作,并根据inbound寄存器组的rtt/wtt位决定是否需要进行cache一致性操作,或者将数据直接写入到cache中。
结合outbound寄存器组,可以发现pci总线地址空间与存储器地址空间是有一定联系的。如果存储器域地址空间被inbound寄存器组反向映射到pci空间,这个存储器地址具有两个地址,一个是在存储器域的地址,一个是在pci总线域的地址;同理pci总线空间的地址如果使用outbound寄存器映射到寄存器地址空间,这个pci总线地址也具有两个地址,一个是在pci总线域的地址,一个是在存储器域的地址。
能够被处理器和pci总线同时访问的地址空间,一定在pci总线域和存储器域中都存在地址映射。再次强调,绝大多数操作系统将同一个空间的pci总线域地址和存储器地址设为相同的值,但是这两个相同的值所代表的含义不同。
由此可以看出,如果mpc8548处理器的某段存储器区域没有在inbound窗口中定义时,pci设备将不能使用dma机制访问这段存储器空间;同理如果pci设备的空间不在outbound窗口,host处理器也不能访问这段pci地址空间。
在绝大多数powerpc处理器系统中,pci设备地址空间都在host主桥的outbound窗口中建立了映射;而mpc8548处理器可以选择将哪些主存储器空间共享给pci设备,从而对主存储器空间进行保护。
2.2.4 x86处理器的host主桥x86处理器使用南北桥结构连接cpu和pci设备。其中北桥(north bridge)连接快速设备,如显卡、和内存条,并推出pci总线,host主桥包含在北桥中。而南桥(south bridge)连接慢速设备。x86处理器使用的南北桥结构如图2?6所示。
intel使用南北桥概念统一pc架构。但是从体系结构的角度上看,南北桥架构并不重要,北桥中存放的主要部件不过是存储器控制器、显卡控制器和host主桥而已,而南桥存放的是一些慢速设备,如isa总线和中断控制器等。
不同的处理器系统集成这些组成部件的方式并不相同,如powerpc、mips和arm处理器系统通常将cpu和主要外部设备都集成到一颗芯片中,组成一颗基于soc架构的处理器系统。这些集成方式并不重要,每一个处理器系统都有其针对的应用领域,不同应用领域的需求对处理器系统的集成方式有较大的影响。intel采用的南北桥架构针对x86处理器的应用领域而设计,并不能说采用这种结构一定比mpc8548处理器中即含有host-to-pci主桥也含有host-to-pcie主桥更为合理。
在许多嵌入式处理器系统中,即含有pci设备也含有pcie设备,为此mpc8548处理器同时提供了pci总线和pcie总线接口,在这个处理器系统中,pci设备可以与pci总线直接相连,而pcie设备可以与pcie总线直接相连,因此并不需要使用pcie桥扩展pci总线,从而在一定程度上简化了嵌入式系统的设计。
嵌入式系统所面对的应用千姿百态,进行芯片设计时所要考虑的因素相对较多,因而在某种程度上为设计带来了一些难度。而x86处理器系统所面对的应用领域针对个人pc**务器,向前兼容和通用性显得更加重要。在多数情况下,一个通用处理器系统的设计难过专用处理器系统的设计,intel为此付出了极大的代价。
在一些相对较老的北桥中,如intel 440系列芯片组中包含了host主桥,从系统软件的角度上看host-to-pci主桥实现的功能与host-to-pcie主桥实现的功能相近。本节仅简单介绍intel的host-to-pci主桥如何产生pci的配置周期,有关intel host-to-pcie主桥[9]的详细信息参见第5章。
x86处理器定义了两个i/o端口寄存器,分别为config_address和config_data寄存器,其地址为0xcf8和0xcfc。x86处理器使用这两个i/o端口访问pci设备的配置空间。pci总线规范也以这个两个寄存器为例,说明处理器如何访问pci设备的配置空间。其中config_address寄存器存放pci设备的id号,而config_data寄存器存放进行配置读写的数据。
config_address寄存器与powerpc处理器中的cfg_addr寄存器的使用方法类似,而config_data寄存器与powerpc处理器中的cfg_data寄存器的使用方法类似。config_address寄存器的结构如图2?7所示。
config_address寄存器的各个字段和位的说明如下所示,
enable位,第31位。该位为1时,对config_data寄存器进行读写时将引发pci总线的配置周期。 bus number字段,第23~16位,记录pci设备的总线号。 device number字段,第15~11位,记录pci设备的设备号。 function number字段,第10~8位,记录pci设备的功能号。 register number字段,第7~2位,记录pci设备的寄存器号。 当x86处理器对config_data寄存器进行i/o读写访问,且config_addr寄存器的enable位为1时,host主桥将这个i/o读写访问转换为pci配置读写总线事务,然后发送到pci总线上,pci总线根据保存在config_addr寄存器中的id号,将pci配置读写请求发送到指定pci设备的指定配置寄存器中。
x86处理器使用小端地址模式,因此从config_data寄存器中读出的数据不需要进行模式转换,这点和powerpc处理器不同,此外x86处理器的host主桥也实现了存储器域到pci总线域的地址转换,但是这个概念在x86处理器中并不明晰。
本书将在第5章以host-to-pcie主桥为例,详细介绍intel处理器的存储器地址与pci总线地址的转换关系,而在本节不对x86处理器的host主桥做进一步说明。x86处理器系统的升级速度较快,目前在x86的处理器体系结构中,已很难发现host主桥的身影。
目前intel对南北桥架构进行了升级,其中北桥被升级为mch(memory controller hub),而南桥被升级为ich(i/o controller hub)。x86处理器系统在mch中集成了存储器控制器、显卡芯片和host-to-pcie主桥,并通过hub link与ich相连;而在ich中集成了一些相对低速总线接口,如ac’97、lpc(low pin count)、ide和usb总线,当然也包括一些低带宽的pcie总线接口。
在intel最新的nehelem[10]处理器系统中,mch被一份为二,存储器控制器和图形控制器已经与cpu内核集成在一个die中,而mch剩余的部分与ich合并成为pch(peripheral controller hub)。但是从体系结构的角度上看,这些升级与整合并不重要。
目前intel在menlow[11]平台基础上,计划推出基于soc架构的x86处理器,以进军手持设备市场。在基于soc构架的x86处理器中将逐渐淡化chipset的概念,其拓扑结构与典型的soc处理器,如arm和powerpc处理器,较为类似。
[8]wba字段并没有保存存储器域的第24~35位地址,因为outbound窗口大小至少为4kb。
[9]这个host-to-pcie主桥也是rc(root complex)的一部分。
[10] nehelem处理器也被称为core i7处理器。
[11] menlow平台于2008年3月发布,其目标应用为mid(mobile internet device)设备。menlow平台基于低功耗处理器内核atom。
其它类似信息

推荐信息