PCI学习笔记
1.PCI设备编号 每一个PCI device都有其unique PFA(PCI Fcntion Address)
PFA由 bus number、device number、function number组成。
一条PCI总线支持256个PFA,即支持256个PCI device。
每个PCI芯片都有自己的device number(取决于IDSEL管脚),每个PCI芯片占用8个PFA。
每个PCI芯片的第一个PCI device的PFA必为8的倍数。
若PCI device的配置空间中PCI_HEADER_TYPE寄存器的最高bit为1,说明此芯片还有其他PFA,即还有其他device,即当前芯片是 multi-function device.
Each function on a multi-function device has its own configuration space。
在系统中,每个PCI芯片上的所独有的信号线是:INTA、INTB、INTC、INTD、IDSEL
每个芯片上的IDSEL需要连到PCI总线中AD[31:11]中的一根,这对应于PCI device PFA的device number IDSEL is equivalent to chip select on the CPU side during address phase of CFG RD\\WR command.
DEVSEL is used in every transaction when the target claims the cycle address to it. It is like saying this cycle in mine, and nobody touches it!2.PCI配置空间 每个PCI逻辑设备都有自己的配置空间,里面存储了一些基本信息,生产商,IRQ中断号,还有就是定义了mem空间和io空间的起始地址和大小。CPU通过两个寄存器访问PCI设备的配置空间:CFG_ADDR 和 CFG_DATA。 对CFG_DATA的操作就是对配置空间相应寄存器的操作,没有专门的bit来制定操作类型r/w。 PCI配置空间中的BAR(Base Address Register)用来映射PCI设备的寄存器,里面的值是bus地址首地址,至于空间的大小,先向bar中写0xFFFFFFFFF,然后读取,选最低的一位非0的,比如为0x1000,那个空间的大小就为0x1000。
这里需要注意,当PCI配置成64bit或32bit时,BAR有区别
3.PCI地址转换 当CPU访问PCI设备的mem空间和io
空间的寄存器时,需要进行地址转换。
MPC8560有5个outbound窗口0~5用来将CPU内部地址转换为PCI总线地址。上电时只有窗口0使能的,其他都是disable状态。每个outbound窗口有如下三类寄存器: 1.外部PCI总线地址的基址
2.CPU内部32bit地址的基址(EA)
3.窗口属性寄存器,大小、转换类型等等 outbound窗口转换后(外部PCI总线地址的基址,当使用64bit PCI时会用到第二个扩展寄存器)
outbound窗口转换前地址(CPU内部32bit地址的基址)outbound窗口属性寄存器EN:设置此窗口是否使能 RTT/WTT:分别设置此窗口的存取方式(memory或io) OWS:设置此窗口大小 同理,当PCI设备访问MPC8560时,有3个inbound窗口1~3用来将PCI总线地址转换为CPU内部地址。和outbound窗口一样,inbound窗口有如下三类寄存器:
CPU内部32bit地址的基址(EA) 外部PCI总线地址的基址
窗口属性寄存器,大小、转换类型等等EN:设置此窗口是否使能
PF:设置此窗口是否开启prefetchable特性 TGI:Target Interface,见datasheet P883