天天看點

PCIe掃盲——PCIe錯誤源詳解(二)

轉: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

PCIe掃盲——PCIe錯誤源詳解(二)
PCIe掃盲——PCIe錯誤源詳解(二)

不支援的請求(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)用于檢視和控制逾時時間的值。如下圖所示:

PCIe掃盲——PCIe錯誤源詳解(二)

如果,某個請求對應多個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等橋裝置内部産生的錯誤

這篇文章主要介紹事務(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

PCIe掃盲——PCIe錯誤源詳解(二)
PCIe掃盲——PCIe錯誤源詳解(二)

不支援的請求(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)用于檢視和控制逾時時間的值。如下圖所示:

PCIe掃盲——PCIe錯誤源詳解(二)

如果,某個請求對應多個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等橋裝置内部産生的錯誤

繼續閱讀