1.PCIe錯(cuò)誤報(bào)告的兩種機(jī)制
1. Baseline Error Reporting:該機(jī)制是PCIe設(shè)備必需支持的一種錯(cuò)誤報(bào)告機(jī)制,同時(shí)設(shè)備會(huì)定義最小的錯(cuò)誤報(bào)告請(qǐng)求。應(yīng)該是通過(guò)配置Device Control和Command寄存器做到通知其他設(shè)備產(chǎn)生了錯(cuò)誤的一種機(jī)制。
2. Advanced Error Reporting(AER):該機(jī)制是PCIe設(shè)備用來(lái)獲取更健壯的錯(cuò)誤報(bào)告信息的一種特殊機(jī)制。該機(jī)制的相關(guān)寄存器會(huì)在PCIe擴(kuò)展配置空間中上報(bào)。
2.PCIe錯(cuò)誤的分類(lèi)
由上圖可以看出PCIe將各個(gè)層產(chǎn)生的錯(cuò)誤大致分為兩類(lèi):Correctable和Uncorrectable。
其中又將Uncorrectable分為Fatal和Nonfatal兩種。通過(guò)分類(lèi)平臺(tái)可以對(duì)Correctable甚至Uncorrectable-Nonfatal的錯(cuò)誤分配低優(yōu)先級(jí)的處理,或者檢測(cè)錯(cuò)誤頻率等處理;對(duì)于Uncorrectable-Fatal的錯(cuò)誤可能直接對(duì)系統(tǒng)復(fù)位處理。
CorrectableErrors:是指可糾正的錯(cuò)誤,在硬件不經(jīng)過(guò)軟件的干預(yù)可以通過(guò)自身的邏輯糾正的錯(cuò)誤。對(duì)于一些可糾正的錯(cuò)誤如果處理校正的設(shè)備不處理的話需要將錯(cuò)誤報(bào)告成Uncorrectable Errors。
UncorrectableErrors:不可糾正的錯(cuò)誤,這類(lèi)錯(cuò)誤會(huì)影響接口的功能,這類(lèi)錯(cuò)誤在協(xié)議中沒(méi)有明確的機(jī)制可以糾正。對(duì)于PCIe具備更健壯的錯(cuò)誤處理機(jī)制的設(shè)備來(lái)說(shuō),會(huì)進(jìn)一步區(qū)分該錯(cuò)誤為:Fatal和Non-Fatal。
FatalError:這類(lèi)錯(cuò)誤導(dǎo)致鏈路和硬件異常只有通過(guò)復(fù)位操作實(shí)現(xiàn)恢復(fù)。
Non-Fatal:這類(lèi)錯(cuò)誤可能會(huì)導(dǎo)致特定的傳輸變得不可靠,但是鏈路和硬件的其他功能不受影響。設(shè)備驅(qū)動(dòng)軟件提供恢復(fù)機(jī)制,并不會(huì)影響到鏈路和其他設(shè)備的運(yùn)行。
3.錯(cuò)誤信號(hào)轉(zhuǎn)發(fā)和通知
PCIe提供了三種方式轉(zhuǎn)發(fā)通知錯(cuò)誤:
1.通過(guò)回復(fù)完成狀態(tài)CompletionStatus
2. 通過(guò)錯(cuò)誤消息 errorMessages
3.通過(guò)錯(cuò)誤轉(zhuǎn)發(fā)機(jī)制ErrorForwarding
3.1 Completion Status:
針對(duì)Non-Posted請(qǐng)求,一些錯(cuò)誤可以通過(guò)completion status的方式通知系統(tǒng)或其他設(shè)備,這種方式的通知,使上層協(xié)議或者軟件有機(jī)會(huì)可以判斷狀態(tài)做相應(yīng)的補(bǔ)救處理。
3.2 Error Message:
根據(jù)錯(cuò)誤的嚴(yán)重程度,不同類(lèi)型的Error Message會(huì)被發(fā)送給RC。
對(duì)于PCIe1.0和1.0a之前的協(xié)議一般規(guī)定:correctable error發(fā)送ERR_COR,non-fatal errors發(fā)送ERR_NONFATAL,fatal error發(fā)送ERR_FATAL。
隨后版本的協(xié)議支持Role-Based Error Reporting,可以進(jìn)一步通過(guò)檢測(cè)設(shè)備的身份和AER相關(guān)配置將non-fatal error以ERR_NONFATAL或ERR_COR的方式發(fā)出去,甚至不發(fā)通知。因?yàn)樵谝恍┢脚_(tái)下發(fā)送ERR_NONFATAL可能會(huì)阻止其他設(shè)備的恢復(fù)操作或者決定錯(cuò)誤的最終處理,由于不是最合適決定錯(cuò)誤最終處理的設(shè)備,該設(shè)備可以通過(guò)配置AER來(lái)將錯(cuò)誤已ERR_COR的形式通知其他設(shè)備,如果是最合適的設(shè)備則會(huì)以ERR_NONFATAL消息的方式通知其他設(shè)備。
對(duì)于ERR_NONFATAL,如果軟件想避免后續(xù)接受設(shè)備的錯(cuò)誤檢測(cè),可以直接配置AER將該錯(cuò)誤升級(jí)為ERR_FATAL,后續(xù)的設(shè)備總是會(huì)以ERR_FATAL的方式轉(zhuǎn)發(fā)下去,無(wú)論后續(xù)設(shè)備是哪種身份。
3.2.1錯(cuò)誤消息嚴(yán)重性可編程
對(duì)于不同的設(shè)備對(duì)致命和非致命的界定不同,AER提供了錯(cuò)誤消息可編程的機(jī)制。AER以協(xié)議Error list中判定的消息結(jié)果作為默認(rèn)發(fā)送的方式,但是也可通過(guò)編程AER的一些寄存器發(fā)送更高級(jí)的錯(cuò)誤消息。
3.2.2錯(cuò)誤消息屏蔽
只有當(dāng)Device Control 寄存器的Reporting Enable fields或PCI Command寄存器的SERR# Enable位置1的情況下設(shè)備才能轉(zhuǎn)發(fā)消息,此外如果配置了AER的設(shè)備可以通過(guò)Uncorrectable Error Mask寄存器和Correctable Error Mask寄存器對(duì)不同的error進(jìn)行屏蔽操作。
3.2.3 錯(cuò)誤消息污染
如果錯(cuò)誤沒(méi)有得到隔離導(dǎo)致后續(xù)的錯(cuò)誤覆蓋最根本的錯(cuò)誤這種情況就是錯(cuò)誤污染,比如一個(gè)TLP在數(shù)據(jù)鏈路層出錯(cuò)的話就不再上傳到事務(wù)層,而是丟棄這個(gè)TLP,上報(bào)錯(cuò)誤消息。如果產(chǎn)生錯(cuò)誤污染就很難定位到根本的錯(cuò)誤消息是從哪里產(chǎn)生的。對(duì)于產(chǎn)生自同一源的錯(cuò)誤協(xié)議規(guī)定了錯(cuò)誤的優(yōu)先級(jí),越底層的錯(cuò)誤其優(yōu)先級(jí)越高。
· 不可更正的內(nèi)部錯(cuò)誤(Uncorrectable Internal Error)
· 接收端Buffer溢出
· 流量控制協(xié)議錯(cuò)誤
· ECRC校檢失敗
· 異常的TLP(Malformed TLP)
· AtomicOp Egress Blocked
· TLP包頭異常(TLP Prefix Blocked)
· 訪問(wèn)控制服務(wù)(Access Control Services,ACS)異常
· MC(Multi-cast) Blocked TLP
· 不支持的請(qǐng)求(Unsupported Request,UR),Completer Abort(CA)或者不對(duì)應(yīng)的返回包(Unexpected Completion)
· 接收到損壞的數(shù)據(jù)包(Poisoned Packet)
3.2.4 AdvisoryNon-FatalError(警告性的非致命錯(cuò)誤)
在一些情況下如果檢測(cè)到ERR_NONFATAL錯(cuò)誤的設(shè)備并不是最終決定錯(cuò)誤處理的設(shè)備,設(shè)備如果配有AER則發(fā)送ERR_COR提醒軟件,若果沒(méi)有配置AER則不發(fā)送消息通知軟件。PCIe規(guī)定以下幾種情況為警告性的非致命錯(cuò)誤:
1.CompleterSending a CompletionwithUR/CA Status
2.IntermediateReceive
3.UltimatePCIExpressReceiverofaPoisonedTLP
4.Requesterwith completion timeout
5.Receiver of an unexpected completion
3.3錯(cuò)誤轉(zhuǎn)發(fā)(Datapoisoning)
一旦出現(xiàn)這種情況TLP的EP位被置1,TLP整個(gè)路由流程中的接收者都將報(bào)告接收到這個(gè)poison的TLP,從而能追蹤出現(xiàn)問(wèn)題的位置。
4.錯(cuò)誤日志記錄
如果設(shè)備不支持AER,只有通過(guò)查看Device Status寄存器中是否檢測(cè)到錯(cuò)誤,如果支持AER則對(duì)應(yīng)的Uncorrectable Error Status寄存器和Correctable Error Status寄存器會(huì)記錄相應(yīng)狀態(tài)。對(duì)于明確的事務(wù)層的錯(cuò)誤AER的Header Log寄存器會(huì)記錄第一個(gè)uncorrectable error TLP的頭。
4.1錯(cuò)誤源溯源
錯(cuò)誤消息中包含Requester ID如下圖:
系統(tǒng)軟件可以根據(jù)RootPort或者RootComplexEventCollector的AER寄存器的內(nèi)容獲取有效的信息
4.2多條錯(cuò)誤的處理(支持AER設(shè)備)
對(duì)于一個(gè)設(shè)備如果同時(shí)收到多條錯(cuò)誤,其AER狀態(tài)寄存器的位會(huì)置上,直到軟件清理或者復(fù)位清除。即使AER的多個(gè)狀態(tài)位被置起,但是First Error Pointer寄存器和Header Log寄存器中記錄的信息還是第一個(gè)錯(cuò)誤的信息。即使這樣還是應(yīng)該及時(shí)的處理First Error Pointer寄存器和Header Log寄存器的信息,防止后續(xù)錯(cuò)誤增加系統(tǒng)的風(fēng)險(xiǎn)。
5. 流程中涉及到的寄存器介紹
5.1 PCIe標(biāo)準(zhǔn)配置空間的Command Register和Status Register
5.2PCIE Capabilities寄存器的Device Control和Status寄存器
5.3AER寄存器介紹
5.3.1Uncorrectable/correctableErrorStatus/mask/severityRegister
Uncorrectable和correctable的status mask severity寄存器類(lèi)似,值得注意的是correctable系列的寄存器有個(gè)Advisory Non-Fatal Error Status(mask/severity),處理上文中提及的警告性的非致命錯(cuò)誤。對(duì)于Uncorrectable的錯(cuò)誤有Severity寄存器來(lái)配置對(duì)應(yīng)錯(cuò)誤的嚴(yán)重性,而Correctable的錯(cuò)誤并沒(méi)有對(duì)應(yīng)的Severity寄存器。
Status:當(dāng)產(chǎn)生相應(yīng)的錯(cuò)誤時(shí),Status寄存器的相應(yīng)位會(huì)被置1;
Mask:當(dāng)對(duì)應(yīng)錯(cuò)誤的mask位置1時(shí),將不再上報(bào)錯(cuò)誤消息,雖然mask被置1,但是如果有錯(cuò)誤產(chǎn)生status相應(yīng)位仍會(huì)置1;
Severity:根據(jù)設(shè)備的不同要求,可以將uncorrectable error的嚴(yán)重程度配置,1則表示fatal error;
5.3.2AdvancedErrorCapabilitiesandControlRegister
First Error Pointer:表示status中報(bào)告的第一個(gè)錯(cuò)誤(對(duì)應(yīng)的status的bit位)
5.3.3HeaderLogRegister
Header Log Register:記錄了第一個(gè)錯(cuò)誤TLP的Header內(nèi)容。
6.錯(cuò)誤消息上報(bào)和記錄流程
7.Errormessage路由過(guò)程中的寄存器控制流程
8.總結(jié)
Advanced Error Reporting(AER)機(jī)制提供了更健壯和豐富的錯(cuò)誤消息機(jī)制,比傳統(tǒng)的PCIe Baseline Error Reporting機(jī)制提供了更多的錯(cuò)誤處理。AER機(jī)制讓錯(cuò)誤信號(hào)更加豐富,讓Fw開(kāi)發(fā)人員可以根據(jù)不同的場(chǎng)景對(duì)錯(cuò)誤做出不同的響應(yīng)。
責(zé)任編輯人:CC
-
PCIe
+關(guān)注
關(guān)注
16文章
1342瀏覽量
85169
原文標(biāo)題:談?wù)凱CIe錯(cuò)誤報(bào)告機(jī)制
文章出處:【微信號(hào):dputech,微信公眾號(hào):DapuStor】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
PCB設(shè)計(jì)中如何進(jìn)行統(tǒng)一批量檢測(cè)并生成錯(cuò)誤報(bào)告

Win8系統(tǒng)操作不當(dāng)彈出錯(cuò)誤報(bào)告
仿真停止后怎樣關(guān)掉錯(cuò)誤報(bào)告?
關(guān)于Quartus II 錯(cuò)誤報(bào)告Error (171173): Node from partition Top cannot preserve previous placement at PIN_P8 and honor the location assigment to PIN_F8
MPLAB X IDE v3.20編譯器使用錯(cuò)誤的行號(hào)引用報(bào)告錯(cuò)誤
為什么我設(shè)計(jì)的TMS320VC5402板子在調(diào)試軟件時(shí)總會(huì)出現(xiàn)存儲(chǔ)器錯(cuò)誤報(bào)告?
當(dāng)PCIe配置為端點(diǎn)時(shí),如何啟用AER(高級(jí)錯(cuò)誤報(bào)告)驅(qū)動(dòng)程序?
ICC錯(cuò)誤集錦、ICCAVR的報(bào)錯(cuò)
基于軟件錯(cuò)誤報(bào)告數(shù)據(jù)集成的改進(jìn)貝葉斯算法
PCIe總線的錯(cuò)誤報(bào)告機(jī)制中四個(gè)比較重要的概念
PCIe掃盲—PCIe錯(cuò)誤檢測(cè)機(jī)制的詳細(xì)資料概述
PCIe總線的三種錯(cuò)誤報(bào)告方式

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

Root如何處理來(lái)自其他PCIe設(shè)備的錯(cuò)誤消息

評(píng)論