轉載地址:http://blog.chinaaet.com/justlxy/p/5100057799
這篇文章主要介紹事務(Transaction)錯誤、鏈路流量控制(Link Flow Control)相關的錯誤、異常的TLP(Malformed TLP)以及內部錯誤(Internal Errors)等。
事務(Transaction )錯誤
事務錯誤主要包括不支持的請求(Unsupported Request)、Completer Abort、非預期的Completion和Completion超時。該錯誤類型主要通過返回的Completion TLP包頭中的Compl. Status告知Requester,如下圖所示。另外,之前介紹TLP Header的文章中也簡單地提到過相關內容,可以回顧一下:http://blog.chinaaet.com/justlxy/p/5100053354
不支持的請求(Unsupported Request)主要包括:
1. 請求類型不被當前PCIe設備支持
2. 消息中使用了不支持或者未定義的消息編碼
3. 請求的地址空間超出(或者不在)設備的地址空間中
4. 針對Completer的IO或者存儲映射控制空間(Memory-mapped Control Space)進行的Poisoned寫操作(EP=1)
5. Root或者Switch的Downstream端口接收到針對其二級總線(Secondary Bus)上的不存在的設備的配置請求(Configuration Request)
6. Endpoint接收到Type1型的配置請求
7. Completion中使用了保留的Completion狀態編碼(參考上面的表格)
8. 設備(的某個功能,Function)處於D1、D2或者D3hot電源管理狀態時,卻接收到了除了配置請求和消息之外的內容
Completer Abort(CA)主要包括:
1. Completer接收的特殊請求,只有在違背其規則的情況下才能對該請求進行響應(返回Completion)
2. 因為某些恆定的錯誤狀態(Permanent Error Condition),導致Completer無法響應接收到的請求
3. Completer接收到存在訪問控制服務錯誤(Access Control Services Error,ACS Error)的請求
4. PCIe-to-PCI橋接收到針對其連接的PCI設備的請求,但是該PCI設備無法處理該請求
非預期的Completion主要包括:
1. Requester接收到的Completion和其發出的Request不一致
Completion超時:
所有的PCIe設備都必須支持Completion超時定時器,除非該設備只是用於初始化配置事務的。需要注意的是,PCIe設備必須能夠針對多個事務(Transaction)分別計時。PCIe 1.x和2.0的Spec建議超時時間最好設置為10ms至50ms之間,對於一些特殊情況,超時時間最低可設置為30us。PCIe 2.1 Spec開始,增加了第二設備控制寄存器(Device Control Register 2)用於查看和控制超時時間的值。如下圖所示:
如果,某個請求對應多個Completion,那么除了最后一個Completion,其他的Completion不會造成該請求的定時器停止計時。
鏈路流量控制(Link Flow Control)相關的錯誤
鏈路流量控制相關的錯誤主要有:
1. 在FC初始化時,鏈路相鄰設備無法完成針對任何一個VC的,最小的FC Credits的交換更新(Advertises)
2. 鏈路相鄰設備交換更新(Advertises)的FC Credits超過了最大值(Data Payload最大為2047,Header最大為127)
3. 鏈路相鄰設備交換更新時,FC Credits為非零值,且該鏈路的FC Credits之前已經被初始化為無限值了
4. 接收端Buffer溢出,導致數據丟失(可選的,但是如果使能,則認為是Fatal Error)
關於Flow Control可以參考之前的文章:http://blog.chinaaet.com/justlxy/p/5100053464
和http://blog.chinaaet.com/justlxy/p/5100053465
異常的TLP(Malformed TLP)
異常的TLP(Malformed TLP)錯誤主要有:
1. Data Payload超過了最大值(Max Payload Size)
2. 數據長度(Data Length)與包頭中的長度值不一致
3. 存儲地址起始位置跨越了4KB邊界(Naturally-aligned 4KB Boundary)
4. TD(TLP Digest)的值與ECRC是否使用不一致
5. 字節使能沖突(Byte Enable Violation)
6. 未定義的類型值(Type Field Values)
7. Completion違反了RCB(Read Completion Boundary)值
8. 針對非配置請求返回的Completion中的狀態為配置請求重試狀態(Configuration Request Retry Status)
9. TC域包含了一個未被分配到當前使能的VC的值(也被稱為TC Filtering)
10. IO或者配置請求沖突(可選的)
11. 中斷Emulation消息向下發送(可選的)
12. TLP前綴錯誤(具體請參考PCIe Spec V2.0的2.2~2.6相關章節)
內部錯誤(Internal Errors)
一般指的是Switch等橋設備內部產生的錯誤