1*4882a593Smuzhiyun.. SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun================== 4*4882a593SmuzhiyunAPEI output format 5*4882a593Smuzhiyun================== 6*4882a593Smuzhiyun 7*4882a593SmuzhiyunAPEI uses printk as hardware error reporting interface, the output 8*4882a593Smuzhiyunformat is as follow:: 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun <error record> := 11*4882a593Smuzhiyun APEI generic hardware error status 12*4882a593Smuzhiyun severity: <integer>, <severity string> 13*4882a593Smuzhiyun section: <integer>, severity: <integer>, <severity string> 14*4882a593Smuzhiyun flags: <integer> 15*4882a593Smuzhiyun <section flags strings> 16*4882a593Smuzhiyun fru_id: <uuid string> 17*4882a593Smuzhiyun fru_text: <string> 18*4882a593Smuzhiyun section_type: <section type string> 19*4882a593Smuzhiyun <section data> 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun <severity string>* := recoverable | fatal | corrected | info 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun <section flags strings># := 24*4882a593Smuzhiyun [primary][, containment warning][, reset][, threshold exceeded]\ 25*4882a593Smuzhiyun [, resource not accessible][, latent error] 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun <section type string> := generic processor error | memory error | \ 28*4882a593Smuzhiyun PCIe error | unknown, <uuid string> 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun <section data> := 31*4882a593Smuzhiyun <generic processor section data> | <memory section data> | \ 32*4882a593Smuzhiyun <pcie section data> | <null> 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun <generic processor section data> := 35*4882a593Smuzhiyun [processor_type: <integer>, <proc type string>] 36*4882a593Smuzhiyun [processor_isa: <integer>, <proc isa string>] 37*4882a593Smuzhiyun [error_type: <integer> 38*4882a593Smuzhiyun <proc error type strings>] 39*4882a593Smuzhiyun [operation: <integer>, <proc operation string>] 40*4882a593Smuzhiyun [flags: <integer> 41*4882a593Smuzhiyun <proc flags strings>] 42*4882a593Smuzhiyun [level: <integer>] 43*4882a593Smuzhiyun [version_info: <integer>] 44*4882a593Smuzhiyun [processor_id: <integer>] 45*4882a593Smuzhiyun [target_address: <integer>] 46*4882a593Smuzhiyun [requestor_id: <integer>] 47*4882a593Smuzhiyun [responder_id: <integer>] 48*4882a593Smuzhiyun [IP: <integer>] 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun <proc type string>* := IA32/X64 | IA64 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun <proc isa string>* := IA32 | IA64 | X64 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun <processor error type strings># := 55*4882a593Smuzhiyun [cache error][, TLB error][, bus error][, micro-architectural error] 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun <proc operation string>* := unknown or generic | data read | data write | \ 58*4882a593Smuzhiyun instruction execution 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun <proc flags strings># := 61*4882a593Smuzhiyun [restartable][, precise IP][, overflow][, corrected] 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun <memory section data> := 64*4882a593Smuzhiyun [error_status: <integer>] 65*4882a593Smuzhiyun [physical_address: <integer>] 66*4882a593Smuzhiyun [physical_address_mask: <integer>] 67*4882a593Smuzhiyun [node: <integer>] 68*4882a593Smuzhiyun [card: <integer>] 69*4882a593Smuzhiyun [module: <integer>] 70*4882a593Smuzhiyun [bank: <integer>] 71*4882a593Smuzhiyun [device: <integer>] 72*4882a593Smuzhiyun [row: <integer>] 73*4882a593Smuzhiyun [column: <integer>] 74*4882a593Smuzhiyun [bit_position: <integer>] 75*4882a593Smuzhiyun [requestor_id: <integer>] 76*4882a593Smuzhiyun [responder_id: <integer>] 77*4882a593Smuzhiyun [target_id: <integer>] 78*4882a593Smuzhiyun [error_type: <integer>, <mem error type string>] 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun <mem error type string>* := 81*4882a593Smuzhiyun unknown | no error | single-bit ECC | multi-bit ECC | \ 82*4882a593Smuzhiyun single-symbol chipkill ECC | multi-symbol chipkill ECC | master abort | \ 83*4882a593Smuzhiyun target abort | parity error | watchdog timeout | invalid address | \ 84*4882a593Smuzhiyun mirror Broken | memory sparing | scrub corrected error | \ 85*4882a593Smuzhiyun scrub uncorrected error 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun <pcie section data> := 88*4882a593Smuzhiyun [port_type: <integer>, <pcie port type string>] 89*4882a593Smuzhiyun [version: <integer>.<integer>] 90*4882a593Smuzhiyun [command: <integer>, status: <integer>] 91*4882a593Smuzhiyun [device_id: <integer>:<integer>:<integer>.<integer> 92*4882a593Smuzhiyun slot: <integer> 93*4882a593Smuzhiyun secondary_bus: <integer> 94*4882a593Smuzhiyun vendor_id: <integer>, device_id: <integer> 95*4882a593Smuzhiyun class_code: <integer>] 96*4882a593Smuzhiyun [serial number: <integer>, <integer>] 97*4882a593Smuzhiyun [bridge: secondary_status: <integer>, control: <integer>] 98*4882a593Smuzhiyun [aer_status: <integer>, aer_mask: <integer> 99*4882a593Smuzhiyun <aer status string> 100*4882a593Smuzhiyun [aer_uncor_severity: <integer>] 101*4882a593Smuzhiyun aer_layer=<aer layer string>, aer_agent=<aer agent string> 102*4882a593Smuzhiyun aer_tlp_header: <integer> <integer> <integer> <integer>] 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun <pcie port type string>* := PCIe end point | legacy PCI end point | \ 105*4882a593Smuzhiyun unknown | unknown | root port | upstream switch port | \ 106*4882a593Smuzhiyun downstream switch port | PCIe to PCI/PCI-X bridge | \ 107*4882a593Smuzhiyun PCI/PCI-X to PCIe bridge | root complex integrated endpoint device | \ 108*4882a593Smuzhiyun root complex event collector 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun if section severity is fatal or recoverable 111*4882a593Smuzhiyun <aer status string># := 112*4882a593Smuzhiyun unknown | unknown | unknown | unknown | Data Link Protocol | \ 113*4882a593Smuzhiyun unknown | unknown | unknown | unknown | unknown | unknown | unknown | \ 114*4882a593Smuzhiyun Poisoned TLP | Flow Control Protocol | Completion Timeout | \ 115*4882a593Smuzhiyun Completer Abort | Unexpected Completion | Receiver Overflow | \ 116*4882a593Smuzhiyun Malformed TLP | ECRC | Unsupported Request 117*4882a593Smuzhiyun else 118*4882a593Smuzhiyun <aer status string># := 119*4882a593Smuzhiyun Receiver Error | unknown | unknown | unknown | unknown | unknown | \ 120*4882a593Smuzhiyun Bad TLP | Bad DLLP | RELAY_NUM Rollover | unknown | unknown | unknown | \ 121*4882a593Smuzhiyun Replay Timer Timeout | Advisory Non-Fatal 122*4882a593Smuzhiyun fi 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun <aer layer string> := 125*4882a593Smuzhiyun Physical Layer | Data Link Layer | Transaction Layer 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun <aer agent string> := 128*4882a593Smuzhiyun Receiver ID | Requester ID | Completer ID | Transmitter ID 129*4882a593Smuzhiyun 130*4882a593SmuzhiyunWhere, [] designate corresponding content is optional 131*4882a593Smuzhiyun 132*4882a593SmuzhiyunAll <field string> description with * has the following format:: 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun field: <integer>, <field string> 135*4882a593Smuzhiyun 136*4882a593SmuzhiyunWhere value of <integer> should be the position of "string" in <field 137*4882a593Smuzhiyunstring> description. Otherwise, <field string> will be "unknown". 138*4882a593Smuzhiyun 139*4882a593SmuzhiyunAll <field strings> description with # has the following format:: 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun field: <integer> 142*4882a593Smuzhiyun <field strings> 143*4882a593Smuzhiyun 144*4882a593SmuzhiyunWhere each string in <fields strings> corresponding to one set bit of 145*4882a593Smuzhiyun<integer>. The bit position is the position of "string" in <field 146*4882a593Smuzhiyunstrings> description. 147*4882a593Smuzhiyun 148*4882a593SmuzhiyunFor more detailed explanation of every field, please refer to UEFI 149*4882a593Smuzhiyunspecification version 2.3 or later, section Appendix N: Common 150*4882a593SmuzhiyunPlatform Error Record. 151