Hi,
I messed up and added some "harmless" code right before pushing this change. Just that it wasn't harmless. I'm sorry.
Anyway, with this patch, ACPI works again for setups with both HAVE_HIGH_TABLES and HAVE_LOW_TABLES, as the RSDP contains valid data now (without it the RSDT is bogus: it is read out before it is written)
Signed-off-by: Patrick Georgi patrick.georgi@coresystems.de
Patrick
It doesn't fix the HIGH_TABLES issue on dbm690t.
Zheng
-----Original Message----- From: coreboot-bounces@coreboot.org [mailto:coreboot-bounces@coreboot.org] On Behalf Of Patrick Georgi Sent: Wednesday, May 13, 2009 2:46 PM To: coreboot@coreboot.org Subject: [coreboot] [PATCH]Fix ACPI in HIGH-and-LOW tables configuration
Hi,
I messed up and added some "harmless" code right before pushing this change. Just that it wasn't harmless. I'm sorry.
Anyway, with this patch, ACPI works again for setups with both HAVE_HIGH_TABLES and HAVE_LOW_TABLES, as the RSDP contains valid data now (without it the RSDT is bogus: it is read out before it is written)
Signed-off-by: Patrick Georgi patrick.georgi@coresystems.de
Patrick
-----Original Message----- From: coreboot-bounces@coreboot.org [mailto:coreboot-bounces@coreboot.org] On Behalf Of Patrick Georgi Sent: Wednesday, May 13, 2009 12:46 AM To: coreboot@coreboot.org Subject: [coreboot] [PATCH]Fix ACPI in HIGH-and-LOW tables configuration
Hi,
I messed up and added some "harmless" code right before pushing this change. Just that it wasn't harmless. I'm sorry.
Anyway, with this patch, ACPI works again for setups with both HAVE_HIGH_TABLES and HAVE_LOW_TABLES, as the RSDP contains valid data now (without it the RSDT is bogus: it is read out before it is written)
Index: src/arch/i386/boot/tables.c =================================================================== --- src/arch/i386/boot/tables.c (Revision 4279) +++ src/arch/i386/boot/tables.c (Arbeitskopie) @@ -116,14 +116,16 @@ #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);
Signed-off-by: Patrick Georgi patrick.georgi@coresystems.de
Can you move the declaration of high_rsdp too? One less #if.
I don't see how this changes the functionality. Which variable are you worried about? Sorry if I'm being blind.
Thanks, Myles
Am 13.05.2009 14:20, schrieb Myles Watson:
Can you move the declaration of high_rsdp too? One less #if.
high_table_end changes in the meantime. I could store it somewhere else, but I'm not sure if that's a cleaner solution
I don't see how this changes the functionality. Which variable are you worried about? Sorry if I'm being blind.
- unsigned long rsdt_location=(unsigned long*)(((acpi_rsdp_t*)high_rsdp)->rsdt_address);
high_rsdp->rsdt_address is filled in by write_acpi_table().
Patrick
On Wed, May 13, 2009 at 6:28 AM, Patrick Georgi patrick@georgi-clan.de wrote:
Am 13.05.2009 14:20, schrieb Myles Watson:
Can you move the declaration of high_rsdp too? One less #if.
high_table_end changes in the meantime. I could store it somewhere else, but I'm not sure if that's a cleaner solution
Yep.
I don't see how this changes the functionality. Which variable are you worried about? Sorry if I'm being blind.
- unsigned long rsdt_location=(unsigned
long*)(((acpi_rsdp_t*)high_rsdp)->rsdt_address);
high_rsdp->rsdt_address is filled in by write_acpi_table().
Acked-by: Myles Watson mylesgw@gmail.com
Thanks, Myles