PCIe设备进行Cold Reset时,所有使用Vcc进行供电的寄存器和PCIe端口逻辑将无条件进入初始状态。而PCIe总线将通过TS1和TS2序列对下游设备进行Hot Reset。系统软件填写某些寄存器时,PCIe设备将使用FLR方式进行复位。此时受到影响的PCIe设备需要使用FLR方式复位内部逻辑,以免造成对新分区的资源污染,并保护之前任务的运行结果。但是采用这种方式,与FLR方式相比,PCIe设备的初始化恢复时间较长。......
2023-10-20
如果PCIe设备支持MSI机制,系统软件首先设置该设备MSI Capability结构的Message Address和Message Data字段。如果该PCIe设备支持64位地址空间,即MSI Capability寄存器的64 bit Address Capable位有效时,系统软件还需要设置Message Upper Address字段。系统软件完成这些设置后,将置MSI Capability结构的MSI Enable位有效,使能该PCIe设备的MSI机制。
其中Message Address字段所填写的值是MSIIR寄存器在PCI总线域中的物理地址。在PowerPC处理器中,PCI总线域与存储器域地址空间独立,当PCIe设备访问存储器域的地址空间时,需要通过Inbound寄存器组将PCI总线域地址空间转换为存储器域地址空间。
在PowerPC处理器中,PCIe设备使用MSI机制访问MSIIR寄存器时,可以不使用In-bound寄存器组进行PCI总线地址到处理器地址的转换。在MPC8572处理器中,专门设置了一个PEXCSRBAR窗口[69],进行PCI总线域到存储器域的地址转换,使用这种方法可以节省Inbound寄存器窗口,Linux PowerPC使用了这种实现方式。
在MPC8572处理器中,MSIIR寄存器的基地址为CCSRBAR[70](Configuration,Control,and Status Base Address Register),其偏移为0x1740。为支持MSI中断机制,系统软件需要使用PEXCSRBAR窗口将MSIIR寄存器映射到PCI总线域地址空间,即将CCSRBAR寄存器空间映射到PCI总线域地址空间。之后PCIe设备就可以通过MSIIR寄存器在PCI总线域的地址访问MSIIR寄存器。
Linux PowerPC使用setup_pci_pcsrbar函数[71]设置PEXCSRBAR窗口,该函数的源代码在./arch/powerpc/sysdev/fsl_pci.c文件中,如源代码10-1所示,这段代码来自Linux 2.6.30.5。
源代码10-1 setup_pci_pcsrbar函数
系统软件除了需要设置PCIe设备的Message Address字段和PEXCSRBAR窗口之外,还需要设置PCIe设备的Message Data字段。PCIe设备向MSIIR寄存器进行存储器写操作的数据存放在Message Data字段中。(www.chuimin.cn)
系统软件在初始化Message Data字段之前,首先根据Multiple Message Capable字段预先存放的数据初始化Multiple Message Enable字段。一个PCIe设备最多可以申请32个中断请求,但是系统软件根据当前处理器系统的中断资源的使用情况,决定给这个PCIe设备提供多少个中断向量,并将这个结果存放到Multiple Message Enable字段。
MPC8572处理器最多可以为PCIe设备提供256个MSI中断请求。但是在某些极端的情况下,可能会出现PCIe设备需要的中断请求超过系统所能提供的中断请求。此时某些PCIe设备的Multiple Message Enable字段可能会小于Multiple Message Capable字段。
如果在PCIe设备中,使用了多个中断请求,那么Message Data字段存放的是一组中断向量号,而Message Data字段存放这组中断向量号的基地址。MSI机制要求“这组数据”连续,其范围在Message Data~Message Data+Multiple Message Enable-1之间。在多数情况下,MPC8572处理器系统仅为一个PCIe设备分配1个中断向量号。
由上所述,在MPC8572处理器系统中,PCIe设备使用存储器写TLP传送MSI中断报文,这个存储器写TLP使用的地址为PCIe设备Capability结构的Message Address字段,而数据为Message Data~Message Data+Multiple Message Enable-1之间。其中Message Data字段与MSIIR寄存器要求的格式相同。
这个特殊的存储器写TLP报文通过若干Switch,并穿越RC后,最终将数据写入MSIIR寄存器中,并设置MSIIR寄存器的SRS和IBS字段,同时将使能MSIR0~MSIR7寄存器的相应位,从而向中断控制器提交中断请求(如果MSIVPR寄存器的MSK位为1)。MPIC中断控制器获得该中断请求后,向处理器系统转发这个中断请求,并由处理器系统执行相应的中断服务例程进行中断处理。MPC8572处理器也可以处理PCIe设备的MSI-X中断机制,本节对此不做进一步介绍。
有关PCI Express体系结构导读的文章
PCIe设备进行Cold Reset时,所有使用Vcc进行供电的寄存器和PCIe端口逻辑将无条件进入初始状态。而PCIe总线将通过TS1和TS2序列对下游设备进行Hot Reset。系统软件填写某些寄存器时,PCIe设备将使用FLR方式进行复位。此时受到影响的PCIe设备需要使用FLR方式复位内部逻辑,以免造成对新分区的资源污染,并保护之前任务的运行结果。但是采用这种方式,与FLR方式相比,PCIe设备的初始化恢复时间较长。......
2023-10-20
当PCIe设备处于D0active状态时,PCIe设备处于正常工作模式,并没有任何节电措施。对于PCIe设备,从D3hot状态返回D0uninitializated状态的过程相当于热复位。当PCIe设备的Vcc电源被移除时,PCIe设备无论处于何种状态,都将进入D3cold状态。......
2023-10-20
图12-11 Capric卡的DMA写过程首先处理器填写Capric卡的WR_DMA_ADR、WR_DMA_SIZE和DCSR2寄存器,经过延时D0之后,这些命令陆续到达Capric卡。Capric卡收到处理器的DMA写请求后,将向RC连续发送存储器写TLP,并由RC将数据写入到主存储器。处理器收到MSI报文后,将执行中断处理程序,Capric卡的中断处理例程通过RC读取中断控制状态寄存器INT_REG,并结束整个DMA写操作。首先处理器填写Capric卡的寄存器启动DMA读。......
2023-10-20
PCIe设备使用两种电源信号供电,分别是Vcc与Vaux,其额定电压为3.3V。在PCIe总线中,使用Vaux的主要原因是为了降低功耗和缩短系统恢复时间。PCIe设备使用该信号复位内部逻辑。PCIe总线定义了多种复位方式,其中Cold Reset和Warm Reset这两种复位方式的实现与该信号有关,详见第4.1.5节。当PCIe设备准备退出L2状态时,可以使用Beacon信号,提交唤醒请求。......
2023-10-20
PCIe设备必须支持L0s状态。L0s状态是一个低功耗状态,PCIe设备进入或者退出该状态不需要系统软件的干预,其状态转换由硬件控制完成。图8-13 L0s的接收状态机接收逻辑RX处于L0状态时,如果收到1个EIOS序列后,将进入Rx_L0s.Entry状态。接收逻辑RX在Rx_L0s.Idle状态中将持续监测接收链路,如果发现对端设备的发送逻辑TX退出“Electrical Idle”状态时,接收逻辑RX将进入Rx_L0s.FTS状态。......
2023-10-20
此外PCI/PCI-X和PCIe设备还扩展了0x40~0xFF这段配置空间,在这段空间主要存放一些与MSI或者MSI-X中断机制和电源管理相关的Capability结构。PCIe设备使用的扩展配置空间最大为4KB,在PCIe总线的扩展配置空间中,存放PCIe设备所独有的一些Capability结构,而PCI设备不能使用这段空间。PCI-X和PCIe总线规范要求其设备必须支持Capabilities结构。......
2023-10-20
在PCIe设备初始化时该参数为0,之后PCIe设备每发送一个FC Unit,该值将加1。此后每收到UpdateFC报文时,Current节点将此参数与UpdateFC报文中的Credit比较,如果结果不等,则使用UpdateFC报文中的Credit对此参数重新赋值。如果Upstream节点没有足够的Credit时,则不能向对端设备发送这个TLP。Current节点使用UpdateFC DLLP将CA传递给Upstream节点,之后Upstream节点使用该值更新CL参数。Current节点可以设置一个逻辑检查部件,检查来自Upstream节点的TLP报文是否会造成CA的溢出。......
2023-10-20
相关推荐