--- tools/bfapei/bfapei.c | 13 ++++++++----- tools/common/include/acpi.h | 20 ++++++++++++++++++++ 2 files changed, 28 insertions(+), 5 deletions(-)
diff --git a/tools/bfapei/bfapei.c b/tools/bfapei/bfapei.c index ff99953..9226d55 100644 --- a/tools/bfapei/bfapei.c +++ b/tools/bfapei/bfapei.c @@ -198,7 +198,8 @@ static int bfapei_einj(char **buf, int *size, uint64_t paddr) return BFAPEI_FAIL;
/* Available error type: Memory Correctable */ - WRITE_EINJ_REG(*buf, ACPI_EINJ_GET_ERROR_TYPE, 0x00000008); + WRITE_EINJ_REG(*buf, ACPI_EINJ_GET_ERROR_TYPE, + 1 << ACPI_ERR_TYPE_MEM_CORRECTABLE);
WRITE_EINJ_REG(*buf, ACPI_EINJ_GET_COMMAND_STATUS, ACPI_EINJ_SUCCESS); WRITE_EINJ_REG(*buf, ACPI_EINJ_CHECK_BUSY_STATUS, 1); @@ -207,8 +208,10 @@ static int bfapei_einj(char **buf, int *size, uint64_t paddr) * Nothing to do more than just set status flag for previous prepared * ESB (error status block) */ - WRITE_EINJ_REG(*buf, ACPI_EINJ_GET_TRIGGER_TABLE, paddr + 0x280); - trigger_tab = (struct acpi_einj_trigger *) (*buf + 0x280); + WRITE_EINJ_REG(*buf, ACPI_EINJ_GET_TRIGGER_TABLE, + paddr + ACPI_EINJ_TRIGGER_TABLE_OFFSET); + trigger_tab = (struct acpi_einj_trigger *) + (*buf + ACPI_EINJ_TRIGGER_TABLE_OFFSET); trigger_tab->header_size = sizeof(struct acpi_einj_trigger); trigger_tab->table_size = sizeof(struct acpi_einj_trigger) + sizeof(struct acpi_whea_header); @@ -229,8 +232,8 @@ static int bfapei_einj(char **buf, int *size, uint64_t paddr) trigger_entry->register_region.address = paddr + ((char *)&(block_ptr->block_status) - *buf);
- trigger_entry->value = 1; - trigger_entry->mask = 0xFFFFFFFFFFFFFFFFUL; + trigger_entry->value = 1 << GHES_ERR_TYPE_CORRECTABLE; + trigger_entry->mask = ~0x0UL;
return BFAPEI_OK; } diff --git a/tools/common/include/acpi.h b/tools/common/include/acpi.h index 9ba29fb..fed7035 100644 --- a/tools/common/include/acpi.h +++ b/tools/common/include/acpi.h @@ -109,6 +109,11 @@ enum {
/* Generic Error Status block */
+#define GHES_ERR_TYPE_UNCORRECTABLE 0 +#define GHES_ERR_TYPE_CORRECTABLE 1 +#define GHES_ERR_TYPE_MULTIPLE_UNCORRECTABLE 2 +#define GHES_ERR_TYPE_MULTIPLE_CORRECTABLE 3 + struct acpi_hest_generic_status { uint32_t block_status; uint32_t raw_data_offset; @@ -201,6 +206,21 @@ enum acpi_erst_actions { ACPI_ERST_ACTION_RESERVED = 16 /* 16 and greater are reserved */ };
+#define ACPI_ERR_TYPE_PROCSR_CORRECTABLE 0 +#define ACPI_ERR_TYPE_PROCSR_UNCORRECTABLE 1 +#define ACPI_ERR_TYPE_PROCSR_UNCORRECTABLE_FATAL 2 +#define ACPI_ERR_TYPE_MEM_CORRECTABLE 3 +#define ACPI_ERR_TYPE_MEM_UNCORRECTABLE 4 +#define ACPI_ERR_TYPE_MEM_UNCORRECTABLE_FATAL 5 +#define ACPI_ERR_TYPE_PCIE_CORRECTABLE 6 +#define ACPI_ERR_TYPE_PCIE_UNCORRECTABLE 7 +#define ACPI_ERR_TYPE_PCIE_UNCORRECTABLE_FATAL 8 +#define ACPI_ERR_TYPE_PLATFOTM_CORRECTABLE 9 +#define ACPI_ERR_TYPE_PLATFOTM_UNCORRECTABLE 10 +#define ACPI_ERR_TYPE_PLATFOTM_UNCORRECTABLE_FATAL 11 +#define ACPI_ERR_TYPE_VENDOR_DEFINED 31 + +#define ACPI_EINJ_TRIGGER_TABLE_OFFSET 0x280 #define ACPI_ADR_SPACE_SYSTEM_MEMORY 0
enum acpi_einj_actions {