首页 理论教育消息请求报文改为PCIExpress消息请求报文详解

消息请求报文改为PCIExpress消息请求报文详解

【摘要】:图6-13 Message请求TLP头格式PCIe总线规定了以下几类消息报文。本节将重点讲述INTx中断和错误信息相关的消息报文,请读者阅读PCIe总线规范了解其他消息报文。在PCIe总线中,PCIe设备可以使用Legacy中断方式提交中断请求,此时需要使用INTx中断消息报文向RC通知中断事件。设备收到该消息报文后,将结束收到的INTx中断消息报文,然后产生一个新的INTx中断消息报文。

在PCIe总线中,多数消息报文使用隐式路由方式,其格式如图6-13所示。其中Byte 0字段为通用TLP头,而Byte 4的第3字节中存放Message Code字段。

978-7-111-29822-9-Part02-65.jpg

图6-13 Message请求TLP头格式

PCIe总线规定了以下几类消息报文。

●INTx中断消息报文(INTx Interrupt Signaling)。

电源管理消息报文(Power Management)。

●错误消息报文(Error Signaling)。

●锁定事务消息报文(Locked Transaction Support)。

●插槽电源限制消息报文(Slot Power Limit Support)。

●Vendor-Defined Messages。

本节将重点讲述INTx中断和错误信息相关的消息报文,请读者阅读PCIe总线规范了解其他消息报文。

1.INTx中断消息报文

PCIe总线推荐设备使用MSI或者MSI-X机制提交中断请求,但是MSI中断机制并不是由PCIe总线首先提出的,在PCI总线中就已经存在这种中断请求机制。

在PCI总线中,虽然提出了MSI中断机制,但是几乎没有PCI设备使用这种机制进行中断请求。MSI中断机制是一种基于存储器写的中断请求机制,而PCI设备提交MSI中断请求,将占用PCI总线的带宽,因此多数PCI设备使用INTx信号进行中断请求。(www.chuimin.cn)

在PCIe总线中,PCIe设备可以使用Legacy中断方式提交中断请求,此时需要使用INTx中断消息报文向RC通知中断事件。除此之外在PCIe体系结构中仍然存在PCI设备,这些设备可能使用INTx信号提交中断请求。

例如在PCIe桥片上挂接的PCI设备可能并不支持MSI中断机制,因此需要使用INTx中断信号提交中断请求,此时PCIe桥需要将INTx信号转换为INTx中断消息报文,并向RC提交中断请求。在PCIe总线中,共有8种INTx中断消息报文,见表6-7。

表6-7 INTx中断消息报文

978-7-111-29822-9-Part02-66.jpg

当PCIe设备不使用MSI报文向RC提交中断请求时,可以首先使用Assert_INTx报文向处理器系统提交中断请求,当中断处理完毕,再使用Deassert_INTx报文。这些INTx中断消息报文的r[2∶0]字段为0b100,即为Local消息报文。设备收到该消息报文后,将结束收到的INTx中断消息报文,然后产生一个新的INTx中断消息报文。

在一个处理器系统中,PCI设备首先需要通过PCIe桥,之后可能通过多级Switch,最终到达RC。假设PCI设备使用INTA#信号进行中断请求,但是由于中断路由表的存在,PCIe桥可能将INTA#信号转换为INTB中断消息,而这个INTB中断消息通过Switch时,可能又被Switch的中断路由表转换为INTC中断消息。因此PCIe设备收到INTx中断消息后,首先需要结束当前中断消息,之后根据中断路由表产生一个新的INTx中断消息,直到这个中断消息传递到RC。

2.错误消息报文

在第4.3.3节中简要介绍了AER Capability结构。如果PCIe设备支持AER Capability结构,当PCIe设备出现某种错误时,将向RC或者RC Event Collector发送错误消息报文,之后RC或者RC Event Collector将根据错误类型分别进行处理。

PCIe总线规范定义了两大类错误类型,分别是可恢复错误(Correctable Errors)和不可恢复错误(Uncorre ctable Errors),不可恢复错误又细分为致命错误(Fatal)和非致命错误(Nonfatal)。当PCIe设备出现这些错误时,将使用ERR_COR、ERR_NONFATAL和ERR_FA-TAL错误消息报文向RC或者RC Event Collector发送错误消息报文。

PCIe总线规范并没有详细描述“可恢复错误”和“不可恢复错误”的具体处理方法,也没有详细描述PCIe设备的错误恢复机制。对于PCIe设备,这些处理方法并不重要。PCIe总线定义AER机制的主要考虑是,由PCIe设备将错误信息“统一报告”给RC或者RC E-vent Collector,并由RC或者RC Event Collector“统一处理”这些错误。其中“统一报告”和“统一处理”才是AER机制的设计要点。

当PCIe设备出现某种错误后,首先将这些错误信息保留在设备的AER Capability结构中,之后RC或者RC Event Collector从“来自PCIe设备的错误信息报文”中获得相应的错误信息。为此在RC中设置了一个“Error Source Identification”寄存器保存究竟是哪个PCIe设备发出的错误信息报文,之后RC或者RC Event Collector向处理器系统提交中断请求,由相应的中断服务例程统一处理所有PCIe设备的错误信息。

由RC统一处理所有PCIe设备错误信息的这种做法,势必加大RC和系统软件的设计复杂度。而外部设备的多样性与复杂程度决定了使用这种方法不一定能够取得较好的效果。目前Intel的Chipset已经支持AER机制,但是绝大多数PCIe设备并不支持AER机制。AER机制是Intel统一外部设备错误处理的一种方法,这为PCIe设备的设计提出了更高的要求,而这种方法是否能够取得理想的效果,仍需观察。