Malformed TLP
(1)收到的cpl,actual payload 不等于length;
(2)收到的cpl,违背了RCB准则;
(3)Local tlp prefix不在end-end tlp prefix前;
(4)不支持local tlp prefix的设备,同时extended fmt field为1的设备收到了local tlp prefix(注意如果extended fmt field为0,收到了tlp prefix的话,由设备决定这个tlp的处理方式);
(5)收到的end-end tlp prefix超过四个(协议最大允许4个)。对于RP来说,如果收到了大于Max End-End TLP Prefixes field的prefix的话,对于请求来说,建议将其认为是UR,对于cpl来说建议是UC(对于请求和建议来说,如果不遵循的话那么必须认为是Malformed TLP );对于其他function来说也是类似;
(6)收到了不支持的end-end tlp prefix类型;
(7)有tlp prefix但是没有tlp header;
(8)Extended fmt field为1 但是 fmt和type的组合是reserved的;fmt[2]为0的情况下type为reserved;
(9)收到的TLP的length超过Rx_MPS_Limit;
(10)收到的TLP所对应的TD域(表示是否有tlp digest)和实际的长度尺寸不符合;
(11)收到的TLP违背了byte enable准则;
(12)对于原子操作来说,接收者收到的TLP长度和规定的长度不同;另外原子操作的请求必须以规定的方式字节对齐,如果没有按照规定的方式字节对齐,接收者将认为这个tlp是Malformed;
(13)接收者接收到的TLP包的address和lengthe结合超过了4Kb边界;
(14)对于IO操作,要求tc,th,attr,at,last be均为0,length为1,违背这个的IO操作被认为是Malformed;
(15)只有up port能够发送Assert_INTx/Deassert_INTx Messages,如果收到了down port的Assert_INTx/Deassert_INTx Messages,那么认为是Malformed的tlp包,另外中断msg、power management msg、error msg要求使用default Traffic Class,违背的话也是被认为Malformed。
置为1的情况下,malformed tlp报告fatal error。
UR(对应completion的status域为ur)
(1)completion status域为reserved,那么认为completion是ur属性的;
(2)由于design或者配置setting而导致的设备不支持的request;
(3)msg中各个域的组合是undefied的,或者说这个msg是这个设备不支持的msg(除了vender define的msg);
(4)msg的dstid所对应的function没有实现;
(5)ecrc检查失败,可以回cpl,也可以不回,但是如果回的回的status必须为ur;
(6)FLR开始和结束直接收到了request,可以回ur也可以不做处理;
Unexpected Completion
(1)larger-Tag的请求者发给了一个请求给缺少” larger-Tag”功能的completer,那么回应的completion的tag是无效的tag,这个completion是Unexpected Completion(注意实际上对于请求者来说,由于回应的tag是无效的,所以大概率是针对这个请求的处理是把他作为timeout来处理);
(2)对于RP来说,如果收到了大于Max End-End TLP Prefixes field的prefix的话,对于请求来说,建议将其认为是UR,对于cpl来说建议是UC(对于请求和建议来说,如果不遵循的话那么必须认为是Malformed TLP )
(3)如果一共function的upstream port的End-End TLP Prefix功能支持的话,如果收到了一个不支持的end-end tlp prefix type的completion的话,所有和这个upstream port相关的function都要把这个completion认为是UC
(4)设备收到了一个和之前发的请求的Transaction ID都不一样的cpl,那么设备会把这个cpl认为是UC(如果这个cpl的Transaction ID能对应上,但是其他域对不上,也是把他认为是UC)
(5)假如再FLR开启结束之间收到了cpl,这个cpl可以认为是UC,也可以不做任何处理,但是如果是FLR结束之后收到了FLR之前发起的请求对应的cpl,那么必须认为是UC