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);