ACPICA: iASL: Add support for the AEST table (data compiler)

Includes support in the table compiler and the disassembler.

ACPICA commit e75074d84d1207339a048486c2d06ecb935d0092

Link: https://github.com/acpica/acpica/commit/e75074d8
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
Bob Moore 2021-08-03 20:07:53 +02:00 committed by Rafael J. Wysocki
parent 7c60610d47
commit e692fa1353
2 changed files with 171 additions and 0 deletions

View File

@ -24,6 +24,7 @@
* file. Useful because they make it more difficult to inadvertently type in
* the wrong signature.
*/
#define ACPI_SIG_AEST "AEST" /* Arm Error Source Table */
#define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */
#define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */
#define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */

View File

@ -67,6 +67,176 @@
* See http://stackoverflow.com/a/1053662/41661
*/
/*******************************************************************************
*
* AEST - Arm Error Source Table
*
* Conforms to: ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document
* September 2020.
*
******************************************************************************/
struct acpi_table_aest {
struct acpi_table_header header;
void *node_array[];
};
/* Common Subtable header - one per Node Structure (Subtable) */
struct acpi_aest_hdr {
u8 type;
u16 length;
u8 reserved;
u32 node_specific_offset;
u32 node_interface_offset;
u32 node_interrupt_offset;
u32 node_interrupt_count;
u64 timestamp_rate;
u64 reserved1;
u64 error_injection_rate;
};
/* Values for Type above */
#define ACPI_AEST_PROCESSOR_ERROR_NODE 0
#define ACPI_AEST_MEMORY_ERROR_NODE 1
#define ACPI_AEST_SMMU_ERROR_NODE 2
#define ACPI_AEST_VENDOR_ERROR_NODE 3
#define ACPI_AEST_GIC_ERROR_NODE 4
#define ACPI_AEST_NODE_TYPE_RESERVED 5 /* 5 and above are reserved */
/*
* AEST subtables (Error nodes)
*/
/* 0: Processor Error */
typedef struct acpi_aest_processor {
u32 processor_id;
u8 resource_type;
u8 reserved;
u8 flags;
u8 revision;
u64 processor_affinity;
} acpi_aest_processor;
/* Values for resource_type above, related structs below */
#define ACPI_AEST_CACHE_RESOURCE 0
#define ACPI_AEST_TLB_RESOURCE 1
#define ACPI_AEST_GENERIC_RESOURCE 2
#define ACPI_AEST_RESOURCE_RESERVED 3 /* 3 and above are reserved */
/* 0R: Processor Cache Resource Substructure */
typedef struct acpi_aest_processor_cache {
u32 cache_reference;
u32 reserved;
} acpi_aest_processor_cache;
/* Values for cache_type above */
#define ACPI_AEST_CACHE_DATA 0
#define ACPI_AEST_CACHE_INSTRUCTION 1
#define ACPI_AEST_CACHE_UNIFIED 2
#define ACPI_AEST_CACHE_RESERVED 3 /* 3 and above are reserved */
/* 1R: Processor TLB Resource Substructure */
typedef struct acpi_aest_processor_tlb {
u32 tlb_level;
u32 reserved;
} acpi_aest_processor_tlb;
/* 2R: Processor Generic Resource Substructure */
typedef struct acpi_aest_processor_generic {
u8 *resource;
} acpi_aest_processor_generic;
/* 1: Memory Error */
typedef struct acpi_aest_memory {
u32 srat_proximity_domain;
} acpi_aest_memory;
/* 2: Smmu Error */
typedef struct acpi_aest_smmu {
u32 iort_node_reference;
u32 subcomponent_reference;
} acpi_aest_smmu;
/* 3: Vendor Defined */
typedef struct acpi_aest_vendor {
u32 acpi_hid;
u32 acpi_uid;
u8 vendor_specific_data[16];
} acpi_aest_vendor;
/* 4: Gic Error */
typedef struct acpi_aest_gic {
u32 interface_type;
u32 instance_id;
} acpi_aest_gic;
/* Values for interface_type above */
#define ACPI_AEST_GIC_CPU 0
#define ACPI_AEST_GIC_DISTRIBUTOR 1
#define ACPI_AEST_GIC_REDISTRIBUTOR 2
#define ACPI_AEST_GIC_ITS 3
#define ACPI_AEST_GIC_RESERVED 4 /* 4 and above are reserved */
/* Node Interface Structure */
typedef struct acpi_aest_node_interface {
u8 type;
u8 reserved[3];
u32 flags;
u64 address;
u32 error_record_index;
u32 error_record_count;
u64 error_record_implemented;
u64 error_status_reporting;
u64 addressing_mode;
} acpi_aest_node_interface;
/* Values for Type field above */
#define ACPI_AEST_NODE_SYSTEM_REGISTER 0
#define ACPI_AEST_NODE_MEMORY_MAPPED 1
#define ACPI_AEST_XFACE_RESERVED 2 /* 2 and above are reserved */
/* Node Interrupt Structure */
typedef struct acpi_aest_node_interrupt {
u8 type;
u8 reserved[2];
u8 flags;
u32 gsiv;
u8 iort_id;
u8 reserved1[3];
} acpi_aest_node_interrupt;
/* Values for Type field above */
#define ACPI_AEST_NODE_FAULT_HANDLING 0
#define ACPI_AEST_NODE_ERROR_RECOVERY 1
#define ACPI_AEST_XRUPT_RESERVED 2 /* 2 and above are reserved */
/*******************************************************************************
*
* BDAT - BIOS Data ACPI Table