這一篇文章講一講,高級(jí)錯(cuò)誤報(bào)告(Advanced Error Reporting,AER)關(guān)于可校正和不可校正錯(cuò)誤的相關(guān)寄存器,以及Root如何處理來自其他PCIe設(shè)備的錯(cuò)誤消息等內(nèi)容。
? 高級(jí)可校正錯(cuò)誤處理(Advanced Correctable Error Handling)
o 高級(jí)可校正錯(cuò)誤狀態(tài)
高級(jí)可校正錯(cuò)誤狀態(tài)寄存器如下圖所示,當(dāng)相關(guān)錯(cuò)誤發(fā)生后,硬件會(huì)自動(dòng)地將對(duì)應(yīng)bit置1。軟件可以通過向?qū)?yīng)bit寫1,來清零。
o 高級(jí)可校正錯(cuò)誤屏蔽
高級(jí)可校正錯(cuò)誤屏蔽寄存器如下圖所示,默認(rèn)情況下,這些bit的值都是0。也就是說,只要發(fā)生相關(guān)錯(cuò)誤,且該錯(cuò)誤報(bào)告功能被使能,則相關(guān)錯(cuò)誤便會(huì)被報(bào)告(不被屏蔽)。當(dāng)然,軟件可以通過將相關(guān)bit置1,來屏蔽相關(guān)的錯(cuò)誤報(bào)告信息。
? 高級(jí)不可校正錯(cuò)誤處理(Advanced Uncorrectable Error Handling)
o 高級(jí)不可校正錯(cuò)誤狀態(tài)
高級(jí)不可校正錯(cuò)誤狀態(tài)寄存器如下圖所示,當(dāng)相關(guān)錯(cuò)誤發(fā)生時(shí),不管這些錯(cuò)誤會(huì)不會(huì)被報(bào)告到Root,相關(guān)的bit都會(huì)被置1。
回顧一下,前一篇文章中的當(dāng)前錯(cuò)誤指針(First Error Pointer)。假設(shè)該指針的值為18d,則表明不可校正錯(cuò)誤狀態(tài)寄存器中的第18位對(duì)應(yīng)的錯(cuò)誤——異常的TLP(Malformed TLP)將會(huì)被最先處理。一旦該錯(cuò)誤被處理后,軟件將會(huì)向不可校正錯(cuò)誤狀態(tài)寄存器的第18位寫1,來清除該bit。然后,當(dāng)前錯(cuò)誤指針將會(huì)被更新到下一個(gè)值。
軟件可以通過高級(jí)不可校正錯(cuò)誤嚴(yán)重度寄存器(Advanced Uncorrectable Error Severity Register)來修改不可校正錯(cuò)誤是否被作為致命的(Fatal)錯(cuò)誤處理,進(jìn)而使得這些錯(cuò)誤得到區(qū)分處理。如下圖所示,其中,0表示非致命的(Non-Fatal),1表示致命的(Fatal)。
o 高級(jí)不可校正錯(cuò)誤屏蔽
高級(jí)不可校正錯(cuò)誤評(píng)級(jí)寄存器如下圖所示,當(dāng)相關(guān)bit被置1時(shí),對(duì)應(yīng)的錯(cuò)誤類型將不會(huì)被報(bào)告。
配置空間中的高級(jí)錯(cuò)誤報(bào)告結(jié)構(gòu)中包含有一個(gè)4DW的子空間,用于緩存接收到的,發(fā)生不可校正錯(cuò)誤的(未被屏蔽的)的TLP的包頭。PCIe Spec規(guī)定,當(dāng)設(shè)備支持AER功能時(shí),必須有能力至少緩存一個(gè)TLP包頭(4DW)。當(dāng)然,有些設(shè)備可能支持緩存更多的TLP包頭。該子空間被稱為包頭緩存寄存器(Header Log Register),其支持的錯(cuò)誤類型如下圖所示。
在PCIe總線拓?fù)浣Y(jié)構(gòu)中,Root是所有其他PCIe設(shè)備錯(cuò)誤報(bào)告的目標(biāo)(Target)。當(dāng)Root接收到來自其他PCIe設(shè)備的錯(cuò)誤消息(Error Message)后,Root會(huì)根據(jù)系統(tǒng)的參數(shù)設(shè)置選擇是否向系統(tǒng)報(bào)告錯(cuò)誤,并以何種方式(中斷等)報(bào)告。
注:關(guān)于PCIe的中斷機(jī)制會(huì)在后續(xù)的文章中詳細(xì)介紹。
當(dāng)Root接收到錯(cuò)誤消息后,便會(huì)將Root錯(cuò)誤狀態(tài)寄存器中的對(duì)應(yīng)位置位。需要注意的時(shí),由于Root自身也是PCIe設(shè)備,當(dāng)其自身發(fā)生錯(cuò)誤時(shí),也會(huì)導(dǎo)致Root錯(cuò)誤狀態(tài)寄存器中的對(duì)應(yīng)位置位,就像是其收到了錯(cuò)誤消息了一樣。該寄存器如下圖所示:
前面的文章介紹過,錯(cuò)誤消息也是消息(Message)的一種。錯(cuò)誤消息中包含了錯(cuò)誤源設(shè)備的ID信息(BDF,Bus,Device and Function),根據(jù)ID信息,便可以確定錯(cuò)誤源的位置等信息,同時(shí)將該信息緩存在高級(jí)源ID寄存器中,如下圖所示。
可以通過Root錯(cuò)誤命令寄存器(Root Error Command Register)的相關(guān)bit來使能或者禁止相關(guān)類型的錯(cuò)誤是否被報(bào)告至系統(tǒng)。如下圖所示:
-
寄存器
+關(guān)注
關(guān)注
31文章
5433瀏覽量
124364 -
PCIe
+關(guān)注
關(guān)注
16文章
1340瀏覽量
85109 -
root
+關(guān)注
關(guān)注
1文章
86瀏覽量
21718
原文標(biāo)題:【博文連載】PCIe掃盲——高級(jí)錯(cuò)誤報(bào)告AER(二)
文章出處:【微信號(hào):ChinaAET,微信公眾號(hào):電子技術(shù)應(yīng)用ChinaAET】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
如何處理變頻電路中電磁輻射引起的干擾

英特爾至強(qiáng)處理器可擴(kuò)展系列是否支持PCIe AtomicOps主機(jī)到設(shè)備交易?
如何處理“map.ncd缺失”的錯(cuò)誤
MCU功耗來自何處
PCIe設(shè)備發(fā)出MSI-X中斷請(qǐng)求的方法
PCIe的Spec中明確規(guī)定只有Root有權(quán)限發(fā)起配置請(qǐng)求

PCIe總線的錯(cuò)誤報(bào)告機(jī)制中四個(gè)比較重要的概念
PCIe掃盲—PCIe錯(cuò)誤檢測機(jī)制的詳細(xì)資料概述
PCIe總線的三種錯(cuò)誤報(bào)告方式

PCIe錯(cuò)誤報(bào)告機(jī)制上高級(jí)錯(cuò)誤報(bào)告AER

PCIe設(shè)備在一個(gè)系統(tǒng)中是如何發(fā)現(xiàn)與訪問的

PCIe錯(cuò)誤報(bào)告的兩種機(jī)制詳解

x86處理器如何處理MSI-X中斷請(qǐng)求

如何處理RTOS錯(cuò)誤和超時(shí)

評(píng)論