Make ACPI with low and high tables work again. The RSDP contained a
authorPatrick Georgi <patrick.georgi@coresystems.de>
Wed, 13 May 2009 14:39:59 +0000 (14:39 +0000)
committerPatrick Georgi <patrick.georgi@coresystems.de>
Wed, 13 May 2009 14:39:59 +0000 (14:39 +0000)
bogus RSDT pointer due to a wrong order of commands.

Signed-off-by: Patrick Georgi <patrick.georgi@coresystems.de>
Acked-by: Myles Watson <mylesgw@gmail.com>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@4280 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

src/arch/i386/boot/tables.c

index 6c13a3de159136fcfe44bd71b463262de31a5b74..f6f7625f75b2008d2c2ef709d2079525f08a6501 100644 (file)
@@ -116,14 +116,16 @@ struct lb_memory *write_tables(void)
 #if HAVE_HIGH_TABLES == 1
 #if HAVE_LOW_TABLES == 1
        unsigned long high_rsdp=ALIGN(high_table_end, 16);
-       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
        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);