2 Arm Error Source Table as described in the
3 'ACPI for the Armv8 RAS Extensions 1.1' Specification.
5 Copyright (c) 2020 Arm Limited.
6 SPDX-License-Identifier: BSD-2-Clause-Patent
9 - ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document,
10 dated 28 September 2020.
11 (https://developer.arm.com/documentation/den0085/0101/)
18 #ifndef ARM_ERROR_SOURCE_TABLE_H_
19 #define ARM_ERROR_SOURCE_TABLE_H_
22 /// "AEST" Arm Error Source Table
24 #define EFI_ACPI_6_3_ARM_ERROR_SOURCE_TABLE_SIGNATURE SIGNATURE_32('A', 'E', 'S', 'T')
26 #define EFI_ACPI_ARM_ERROR_SOURCE_TABLE_REVISION 1
31 /// Arm Error Source Table definition.
34 EFI_ACPI_DESCRIPTION_HEADER Header
;
35 } EFI_ACPI_ARM_ERROR_SOURCE_TABLE
;
38 /// AEST Node structure.
42 /// 0x00 - Processor error node
43 /// 0x01 - Memory error node
44 /// 0x02 - SMMU error node
45 /// 0x03 - Vendor-defined error node
46 /// 0x04 - GIC error node
49 /// Length of structure in bytes.
52 /// Reserved - Must be zero.
55 /// Offset from the start of the node to node-specific data.
58 /// Offset from the start of the node to the node interface structure.
59 UINT32 InterfaceOffset
;
61 /// Offset from the start of the node to node interrupt array.
62 UINT32 InterruptArrayOffset
;
64 /// Number of entries in the interrupt array.
65 UINT32 InterruptArrayCount
;
69 /// The timestamp frequency of the counter in Hz.
72 /// Reserved - Must be zero.
75 /// The rate in Hz at which the Error Generation Counter decrements.
76 UINT64 ErrorInjectionCountdownRate
;
77 } EFI_ACPI_AEST_NODE_STRUCT
;
79 // AEST Node type definitions
80 #define EFI_ACPI_AEST_NODE_TYPE_PROCESSOR 0x0
81 #define EFI_ACPI_AEST_NODE_TYPE_MEMORY 0x1
82 #define EFI_ACPI_AEST_NODE_TYPE_SMMU 0x2
83 #define EFI_ACPI_AEST_NODE_TYPE_VENDOR_DEFINED 0x3
84 #define EFI_ACPI_AEST_NODE_TYPE_GIC 0x4
87 /// AEST Node Interface structure.
91 /// 0x0 - System register (SR)
92 /// 0x1 - Memory mapped (MMIO)
95 /// Reserved - Must be zero.
98 /// AEST node interface flags.
101 /// Base address of error group that contains the error node.
104 /// Zero-based index of the first standard error record that
105 /// belongs to this node.
106 UINT32 StartErrorRecordIndex
;
108 /// Number of error records in this node including both
109 /// implemented and unimplemented records.
110 UINT32 NumberErrorRecords
;
112 /// A bitmap indicating the error records within this
113 /// node that are implemented in the current system.
114 UINT64 ErrorRecordImplemented
;
116 /// A bitmap indicating the error records within this node that
117 /// support error status reporting through the ERRGSR register.
118 UINT64 ErrorRecordStatusReportingSupported
;
120 /// A bitmap indicating the addressing mode used by each error
121 /// record within this node to populate the ERR<n>_ADDR register.
122 UINT64 AddressingMode
;
123 } EFI_ACPI_AEST_INTERFACE_STRUCT
;
125 // AEST Interface node type definitions.
126 #define EFI_ACPI_AEST_INTERFACE_TYPE_SR 0x0
127 #define EFI_ACPI_AEST_INTERFACE_TYPE_MMIO 0x1
129 // AEST node interface flag definitions.
130 #define EFI_ACPI_AEST_INTERFACE_FLAG_PRIVATE 0
131 #define EFI_ACPI_AEST_INTERFACE_FLAG_SHARED BIT0
132 #define EFI_ACPI_AEST_INTERFACE_FLAG_CLEAR_MISCX BIT1
135 /// AEST Node Interrupt structure.
139 /// 0x0 - Fault Handling Interrupt
140 /// 0x1 - Error Recovery Interrupt
143 /// Reserved - Must be zero.
147 /// Bits [31:1]: Must be zero.
149 /// 0b - Interrupt is edge-triggered
150 /// 1b - Interrupt is level-triggered
151 UINT8 InterruptFlags
;
153 /// GSIV of interrupt, if interrupt is an SPI or a PPI.
154 UINT32 InterruptGsiv
;
156 /// If MSI is supported, then this field must be set to the
157 /// Identifier field of the IORT ITS Group node.
160 /// Reserved - must be zero.
162 } EFI_ACPI_AEST_INTERRUPT_STRUCT
;
164 // AEST Interrupt node - interrupt type defintions.
165 #define EFI_ACPI_AEST_INTERRUPT_TYPE_FAULT_HANDLING 0x0
166 #define EFI_ACPI_AEST_INTERRUPT_TYPE_ERROR_RECOVERY 0x1
168 // AEST Interrupt node - interrupt flag defintions.
169 #define EFI_ACPI_AEST_INTERRUPT_FLAG_TRIGGER_TYPE_EDGE 0
170 #define EFI_ACPI_AEST_INTERRUPT_FLAG_TRIGGER_TYPE_LEVEL BIT0
173 /// Cache Processor Resource structure.
176 /// Reference to the cache structure in the PPTT table.
181 } EFI_ACPI_AEST_PROCESSOR_CACHE_RESOURCE_STRUCT
;
184 /// TLB Processor Resource structure.
187 /// TLB level from perspective of current processor.
192 } EFI_ACPI_AEST_PROCESSOR_TLB_RESOURCE_STRUCT
;
195 /// Processor Generic Resource structure.
198 /// Vendor-defined supplementary data.
200 } EFI_ACPI_AEST_PROCESSOR_GENERIC_RESOURCE_STRUCT
;
203 /// AEST Processor Resource union.
206 /// Processor Cache resource.
207 EFI_ACPI_AEST_PROCESSOR_CACHE_RESOURCE_STRUCT Cache
;
209 /// Processor TLB resource.
210 EFI_ACPI_AEST_PROCESSOR_TLB_RESOURCE_STRUCT Tlb
;
212 /// Processor Generic resource.
213 EFI_ACPI_AEST_PROCESSOR_GENERIC_RESOURCE_STRUCT Generic
;
214 } EFI_ACPI_AEST_PROCESSOR_RESOURCE
;
217 /// AEST Processor structure.
221 EFI_ACPI_AEST_NODE_STRUCT NodeHeader
;
223 /// Processor ID of node.
224 UINT32 AcpiProcessorId
;
226 /// Resource type of the processor node.
232 /// Reserved - must be zero.
235 /// Processor structure flags.
238 /// Processor structure revision.
241 /// Processor affinity descriptor for the resource that this
242 /// error node pertains to.
243 UINT64 ProcessorAffinityLevelIndicator
;
245 /// Processor resource
246 EFI_ACPI_AEST_PROCESSOR_RESOURCE Resource
;
249 // EFI_ACPI_AEST_INTERFACE_STRUCT NodeInterface;
251 // Node Interrupt Array
252 // EFI_ACPI_AEST_INTERRUPT_STRUCT NodeInterruptArray[n];
253 } EFI_ACPI_AEST_PROCESSOR_STRUCT
;
255 // AEST Processor resource type definitions.
256 #define EFI_ACPI_AEST_PROCESSOR_RESOURCE_TYPE_CACHE 0x0
257 #define EFI_ACPI_AEST_PROCESSOR_RESOURCE_TYPE_TLB 0x1
258 #define EFI_ACPI_AEST_PROCESSOR_RESOURCE_TYPE_GENERIC 0x2
260 // AEST Processor flag definitions.
261 #define EFI_ACPI_AEST_PROCESSOR_FLAG_GLOBAL BIT0
262 #define EFI_ACPI_AEST_PROCESSOR_FLAG_SHARED BIT1
265 /// Memory Controller structure.
269 EFI_ACPI_AEST_NODE_STRUCT NodeHeader
;
271 /// SRAT proximity domain.
272 UINT32 ProximityDomain
;
275 // EFI_ACPI_AEST_INTERFACE_STRUCT NodeInterface;
277 // Node Interrupt Array
278 // EFI_ACPI_AEST_INTERRUPT_STRUCT NodeInterruptArray[n];
279 } EFI_ACPI_AEST_MEMORY_CONTROLLER_STRUCT
;
286 EFI_ACPI_AEST_NODE_STRUCT NodeHeader
;
288 /// Reference to the IORT table node that describes this SMMU.
291 /// Reference to the IORT table node that is associated with the
292 /// sub-component within this SMMU.
293 UINT32 SubComponentRefId
;
296 // EFI_ACPI_AEST_INTERFACE_STRUCT NodeInterface;
298 // Node Interrupt Array
299 // EFI_ACPI_AEST_INTERRUPT_STRUCT NodeInterruptArray[n];
300 } EFI_ACPI_AEST_SMMU_STRUCT
;
303 /// Vendor-Defined structure.
307 EFI_ACPI_AEST_NODE_STRUCT NodeHeader
;
309 /// ACPI HID of the component.
312 /// The ACPI Unique identifier of the component.
315 /// Vendor-specific data, for example to identify this error source.
316 UINT8 VendorData
[16];
319 // EFI_ACPI_AEST_INTERFACE_STRUCT NodeInterface;
321 // Node Interrupt Array
322 // EFI_ACPI_AEST_INTERRUPT_STRUCT NodeInterruptArray[n];
323 } EFI_ACPI_AEST_VENDOR_DEFINED_STRUCT
;
330 EFI_ACPI_AEST_NODE_STRUCT NodeHeader
;
332 /// Type of GIC interface that is associated with this error node.
333 /// 0x0 - GIC CPU (GICC)
334 /// 0x1 - GIC Distributor (GICD)
335 /// 0x2 - GIC Resistributor (GICR)
336 /// 0x3 - GIC ITS (GITS)
337 UINT32 InterfaceType
;
339 /// Identifier for the interface instance.
340 UINT32 GicInterfaceRefId
;
343 // EFI_ACPI_AEST_INTERFACE_STRUCT NodeInterface;
345 // Node Interrupt Array
346 // EFI_ACPI_AEST_INTERRUPT_STRUCT NodeInterruptArray[n];
347 } EFI_ACPI_AEST_GIC_STRUCT
;
349 // AEST GIC interface type definitions.
350 #define EFI_ACPI_AEST_GIC_INTERFACE_TYPE_GICC 0x0
351 #define EFI_ACPI_AEST_GIC_INTERFACE_TYPE_GICD 0x1
352 #define EFI_ACPI_AEST_GIC_INTERFACE_TYPE_GICR 0x2
353 #define EFI_ACPI_AEST_GIC_INTERFACE_TYPE_GITS 0x3
357 #endif // ARM_ERROR_SOURCE_TABLE_H_