Felix Held has submitted this change. ( https://review.coreboot.org/c/coreboot/+/84322?usp=email )
Change subject: arch/x86: Shadow ROM tables into EBDA ......................................................................
arch/x86: Shadow ROM tables into EBDA
For platforms without writable PAM-F segment support (e.g. some simics virtual platforms), put ROM table pointers (e.g. ACPI/SMBIOS low pointers) into EBDA.
Signed-off-by: Shuo Liu shuo.liu@intel.com Signed-off-by: Gang Chen gang.c.chen@intel.com Signed-off-by: Jincheng Li jincheng.li@intel.com Change-Id: I2aac74708279813f9a848044d470fdc980ea4305 Reviewed-on: https://review.coreboot.org/c/coreboot/+/84322 Tested-by: build bot (Jenkins) no-reply@coreboot.org Reviewed-by: Stefan Reinauer stefan.reinauer@coreboot.org --- M src/arch/x86/Kconfig M src/arch/x86/tables.c 2 files changed, 17 insertions(+), 1 deletion(-)
Approvals: build bot (Jenkins): Verified Stefan Reinauer: Looks good to me, approved
diff --git a/src/arch/x86/Kconfig b/src/arch/x86/Kconfig index 4737e3c..2db526e 100644 --- a/src/arch/x86/Kconfig +++ b/src/arch/x86/Kconfig @@ -439,4 +439,11 @@ default 0x400 help The default value of EBDA size is 0x400. + +config SHADOW_ROM_TABLE_TO_EBDA + bool + default n + help + For platforms without writable PAM-F segment support. Put ROM table + pointers (e.g. ACPI/SMBIOS low pointers) into EBDA. endif diff --git a/src/arch/x86/tables.c b/src/arch/x86/tables.c index 2732638..e47f1bc 100644 --- a/src/arch/x86/tables.c +++ b/src/arch/x86/tables.c @@ -192,7 +192,12 @@ void arch_write_tables(uintptr_t coreboot_table) { size_t sz; - unsigned long rom_table_end = 0xf0000; + unsigned long rom_table_end; + + if (CONFIG(SHADOW_ROM_TABLE_TO_EBDA)) + rom_table_end = CONFIG_DEFAULT_EBDA_SEGMENT << 4; + else + rom_table_end = 0xf0000;
/* This table must be between 0x0f0000 and 0x100000 */ if (CONFIG(GENERATE_PIRQ_TABLE)) @@ -224,4 +229,8 @@ const uintptr_t base = 0;
bootmem_add_range(base, forwarding_table - base, BM_MEM_TABLE); + + /* Reserve Extend BIOS Data Area (EBDA) region explicitly */ + bootmem_add_range((uintptr_t)CONFIG_DEFAULT_EBDA_SEGMENT << 4, + CONFIG_DEFAULT_EBDA_SIZE, BM_MEM_TABLE); }