Attention is currently required from: Chen, Gang C, Jincheng Li, Jérémy Compostella.
Hello Chen, Gang C, Jincheng Li,
I'd like you to do a code review. Please visit
https://review.coreboot.org/c/coreboot/+/84322?usp=email
to review the following change.
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 --- M src/arch/x86/Kconfig M src/arch/x86/tables.c 2 files changed, 17 insertions(+), 1 deletion(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/22/84322/1
diff --git a/src/arch/x86/Kconfig b/src/arch/x86/Kconfig index cc68f5c..d6434ae 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 "Shadow ROM tables to EBDA" + 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); }