x86/acpi: Add BERT table
Create a structure for the Boot Error Record Table, and a generic table generator function. BUG=b:65446699 TEST=inspect BERT region, and dmesg, on full patch stack. Use test data plus a failing Grunt system. Change-Id: Ibeef4347678598f9f967797202a4ae6b25ee5538 Signed-off-by: Marshall Dawson <marshalldawson3rd@gmail.com> Reviewed-on: https://review.coreboot.org/28472 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Martin Roth <martinroth@google.com>
This commit is contained in:
parent
44705c6e5e
commit
1d8d369dad
|
@ -958,6 +958,27 @@ void acpi_write_hest(acpi_hest_t *hest,
|
||||||
header->checksum = acpi_checksum((void *)hest, header->length);
|
header->checksum = acpi_checksum((void *)hest, header->length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ACPI 3.0b */
|
||||||
|
void acpi_write_bert(acpi_bert_t *bert, uintptr_t region, size_t length)
|
||||||
|
{
|
||||||
|
acpi_header_t *header = &(bert->header);
|
||||||
|
|
||||||
|
memset(bert, 0, sizeof(acpi_bert_t));
|
||||||
|
|
||||||
|
memcpy(header->signature, "BERT", 4);
|
||||||
|
memcpy(header->oem_id, OEM_ID, 6);
|
||||||
|
memcpy(header->oem_table_id, ACPI_TABLE_CREATOR, 8);
|
||||||
|
memcpy(header->asl_compiler_id, ASLC, 4);
|
||||||
|
header->length += sizeof(acpi_bert_t);
|
||||||
|
header->revision = get_acpi_table_revision(BERT);
|
||||||
|
|
||||||
|
bert->error_region = region;
|
||||||
|
bert->region_length = length;
|
||||||
|
|
||||||
|
/* Calculate checksums. */
|
||||||
|
header->checksum = acpi_checksum((void *)bert, header->length);
|
||||||
|
}
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_COMMON_FADT)
|
#if IS_ENABLED(CONFIG_COMMON_FADT)
|
||||||
void acpi_create_fadt(acpi_fadt_t *fadt, acpi_facs_t *facs, void *dsdt)
|
void acpi_create_fadt(acpi_fadt_t *fadt, acpi_facs_t *facs, void *dsdt)
|
||||||
{
|
{
|
||||||
|
|
|
@ -644,6 +644,13 @@ typedef struct acpi_hest_hen {
|
||||||
u32 error_threshold_win;
|
u32 error_threshold_win;
|
||||||
} __packed acpi_hest_hen_t;
|
} __packed acpi_hest_hen_t;
|
||||||
|
|
||||||
|
/* BERT (Boot Error Record Table) */
|
||||||
|
typedef struct acpi_bert {
|
||||||
|
struct acpi_table_header header;
|
||||||
|
u32 region_length;
|
||||||
|
u64 error_region;
|
||||||
|
} __packed acpi_bert_t;
|
||||||
|
|
||||||
/* Generic Error Data Entry (ACPI spec v6.2-A, table 382) */
|
/* Generic Error Data Entry (ACPI spec v6.2-A, table 382) */
|
||||||
typedef struct acpi_hest_generic_data {
|
typedef struct acpi_hest_generic_data {
|
||||||
guid_t section_type;
|
guid_t section_type;
|
||||||
|
@ -751,6 +758,7 @@ unsigned long acpi_fill_madt(unsigned long current);
|
||||||
unsigned long acpi_fill_mcfg(unsigned long current);
|
unsigned long acpi_fill_mcfg(unsigned long current);
|
||||||
unsigned long acpi_fill_ivrs_ioapic(acpi_ivrs_t *ivrs, unsigned long current);
|
unsigned long acpi_fill_ivrs_ioapic(acpi_ivrs_t *ivrs, unsigned long current);
|
||||||
void acpi_create_ssdt_generator(acpi_header_t *ssdt, const char *oem_table_id);
|
void acpi_create_ssdt_generator(acpi_header_t *ssdt, const char *oem_table_id);
|
||||||
|
void acpi_write_bert(acpi_bert_t *bert, uintptr_t region, size_t length);
|
||||||
void acpi_create_fadt(acpi_fadt_t *fadt, acpi_facs_t *facs, void *dsdt);
|
void acpi_create_fadt(acpi_fadt_t *fadt, acpi_facs_t *facs, void *dsdt);
|
||||||
#if IS_ENABLED(CONFIG_COMMON_FADT)
|
#if IS_ENABLED(CONFIG_COMMON_FADT)
|
||||||
void acpi_fill_fadt(acpi_fadt_t *fadt);
|
void acpi_fill_fadt(acpi_fadt_t *fadt);
|
||||||
|
|
Loading…
Reference in New Issue