aboutsummaryrefslogtreecommitdiff
path: root/src/mainboard/amd/dinar/acpi_tables.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mainboard/amd/dinar/acpi_tables.c')
-rw-r--r--src/mainboard/amd/dinar/acpi_tables.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/src/mainboard/amd/dinar/acpi_tables.c b/src/mainboard/amd/dinar/acpi_tables.c
index ee00e81442..1b80b18624 100644
--- a/src/mainboard/amd/dinar/acpi_tables.c
+++ b/src/mainboard/amd/dinar/acpi_tables.c
@@ -122,6 +122,24 @@ unsigned long acpi_fill_madt(unsigned long current)
return current;
}
+unsigned long acpi_fill_hest(acpi_hest_t *hest)
+{
+ void *addr, *current;
+
+ /* Skip the HEST header. */
+ current = (void *)(hest + 1);
+
+ addr = agesawrapper_getlateinitptr(PICK_WHEA_MCE);
+ if (addr != NULL)
+ current += acpi_create_hest_error_source(hest, current, 0, (void *)((u32)addr + 2), *(UINT16 *)addr - 2);
+
+ addr = agesawrapper_getlateinitptr(PICK_WHEA_CMC);
+ if (addr != NULL)
+ current += acpi_create_hest_error_source(hest, current, 1, (void *)((u32)addr + 2), *(UINT16 *)addr - 2);
+
+ return (unsigned long)current;
+}
+
unsigned long acpi_fill_slit(unsigned long current)
{
// Not implemented
@@ -172,6 +190,7 @@ unsigned long write_acpi_tables(unsigned long start)
acpi_header_t *ssdt;
acpi_header_t *ssdt2;
acpi_header_t *alib;
+ acpi_hest_t *hest;
get_bus_conf(); /* it will get sblk, pci1234, hcdn, and sbdn */
@@ -234,6 +253,13 @@ unsigned long write_acpi_tables(unsigned long start)
current += madt->header.length;
acpi_add_table(rsdp, madt);
+ /* HEST */
+ current = (current + 0x07) & -0x08;
+ hest = (acpi_hest_t *)current;
+ acpi_write_hest((void *)current);
+ acpi_add_table(rsdp, (void *)current);
+ current += ((acpi_header_t *)current)->length;
+
/* SRAT */
current = ( current + 0x07) & -0x08;
printk(BIOS_DEBUG, "ACPI: * SRAT at %lx\n", current);
@@ -272,7 +298,7 @@ unsigned long write_acpi_tables(unsigned long start)
}
#if 0 // The DSDT needs additional work for the AGESA SSDT Pstate table
- current = ( current + 0x0f) & -0x10;
+ current = (current + 0x0f) & -0x10;
printk(BIOS_DEBUG, "ACPI: * AGESA SSDT Pstate at %lx\n", current);
ssdt = (acpi_header_t *)agesawrapper_getlateinitptr (PICK_PSTATE);
if (ssdt != NULL) {
@@ -285,7 +311,7 @@ unsigned long write_acpi_tables(unsigned long start)
acpi_add_table(rsdp,ssdt);
#endif
- current = ( current + 0x0f) & -0x10;
+ current = (current + 0x0f) & -0x10;
printk(BIOS_DEBUG, "ACPI: * coreboot TOM SSDT2 at %lx\n", current);
ssdt2 = (acpi_header_t *) current;
acpi_create_ssdt_generator(ssdt2, ACPI_TABLE_CREATOR);
@@ -313,6 +339,9 @@ unsigned long write_acpi_tables(unsigned long start)
printk(BIOS_DEBUG, "fadt\n");
dump_mem(fadt, ((void *)fadt) + fadt->header.length);
+
+ printk(BIOS_DEBUG, "hest\n");
+ dump_mem(hest, ((void *)hest) + hest->header.length);
#endif
printk(BIOS_INFO, "ACPI: done.\n");