summaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/i386/boot/tables.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/arch/i386/boot/tables.c b/src/arch/i386/boot/tables.c
index 470afe82c1..6959ae3036 100644
--- a/src/arch/i386/boot/tables.c
+++ b/src/arch/i386/boot/tables.c
@@ -112,15 +112,22 @@ struct lb_memory *write_tables(void)
/* write them in the rom area because DSDT can be large (8K on epia-m) which
* pushes coreboot table out of first 4K if set up in low table area
*/
-#if HAVE_LOW_TABLES == 1
- rom_table_end = write_acpi_tables(rom_table_end);
- rom_table_end = (rom_table_end+1023) & ~1023;
-#endif
#if HAVE_HIGH_TABLES == 1
+ unsigned long high_rsdp=ALIGN(high_table_end, 16);
if (high_tables_base) {
high_table_end = write_acpi_tables(high_table_end);
high_table_end = (high_table_end+1023) & ~1023;
}
+#if HAVE_LOW_TABLES == 1
+ unsigned long rsdt_location=(unsigned long*)(((acpi_rsdp_t*)high_rsdp)->rsdt_address);
+ acpi_write_rsdp(rom_table_end, rsdt_location);
+ rom_table_end = ALIGN(ALIGN(rom_table_end, 16) + sizeof(acpi_rsdp_t), 16);
+#endif
+#else
+#if HAVE_LOW_TABLES == 1
+ rom_table_end = write_acpi_tables(rom_table_end);
+ rom_table_end = (rom_table_end+1023) & ~1023;
+#endif
#endif
/* copy the smp block to address 0 */
post_code(0x96);