diff options
Diffstat (limited to 'src/arch/x86')
-rw-r--r-- | src/arch/x86/Kconfig | 7 | ||||
-rw-r--r-- | src/arch/x86/tables.c | 11 |
2 files changed, 17 insertions, 1 deletions
diff --git a/src/arch/x86/Kconfig b/src/arch/x86/Kconfig index 4737e3cca1..2db526e34c 100644 --- a/src/arch/x86/Kconfig +++ b/src/arch/x86/Kconfig @@ -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 diff --git a/src/arch/x86/tables.c b/src/arch/x86/tables.c index 273263820b..e47f1bce97 100644 --- a/src/arch/x86/tables.c +++ b/src/arch/x86/tables.c @@ -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); } |