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>
This commit is contained in:
Shuo Liu 2022-07-05 02:37:16 +08:00 committed by Felix Held
commit b90fac1cfe
2 changed files with 17 additions and 1 deletions

View file

@ -439,4 +439,11 @@ config DEFAULT_EBDA_SIZE
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

View file

@ -192,7 +192,12 @@ static uintptr_t forwarding_table = FORWARDING_TABLE_ADDR;
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 @@ void bootmem_arch_add_ranges(void)
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);
}