arch/x86: Configure EBDA through Kconfig

EBDA (Extended BIOS Data Area) is a memory area below 0xA0000 and
one of the default areas where OS will scan ACPI RSDP pointer from.

coreboot's default EBDA's starting address is 0xF6000, which is in
PAM (Programmable Attribute Map) F-segment's scope. For some platforms
without writeable PAM-F segment (e.g. some simics virtual platforms),
corboot's default EBDA is not writable.

Make DEFAULT_EBDA_LOWMEM, DEFAULT_EBDA_SEGMENT, DEFAULT_EBDA_SIZE
as Kconfig items so that coreboot's EBDA could be relocated to a
writable low memory place.

Change-Id: Icd7ba0c902560f7d498934392685dc2af9c5ce09
Signed-off-by: Gang Chen <gang.c.chen@intel.com>
Co-authored-by: Shuo Liu <shuo.liu@intel.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/84321
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Reviewed-by: Jérémy Compostella <jeremy.compostella@intel.com>
This commit is contained in:
Gang Chen 2024-05-22 19:58:23 +08:00 committed by Felix Held
commit b161d90f06
2 changed files with 21 additions and 9 deletions

View file

@ -422,4 +422,21 @@ config X86_BOOTBLOCK_EXTRA_PROGRAM_SZ
The default value is 1024 bytes (1 KiB) for ChromeOS and 0 for other platforms.
config DEFAULT_EBDA_LOWMEM
hex
default 0x100000
help
The default value of EBDA low memory is (1024 << 10).
config DEFAULT_EBDA_SEGMENT
hex
default 0xF600
help
The default value of EBDA segment is 0xF600.
config DEFAULT_EBDA_SIZE
hex
default 0x400
help
The default value of EBDA size is 0x400.
endif

View file

@ -10,14 +10,9 @@
#define X86_EBDA_SEGMENT ((void *)0x40e)
#define X86_EBDA_LOWMEM ((void *)0x413)
#define DEFAULT_EBDA_LOWMEM (1024 << 10)
#define DEFAULT_EBDA_SEGMENT 0xF600
#define DEFAULT_EBDA_SIZE 0x400
static void *get_ebda_start(void)
{
return (void *)((uintptr_t)DEFAULT_EBDA_SEGMENT << 4);
return (void *)((uintptr_t)CONFIG_DEFAULT_EBDA_SEGMENT << 4);
}
/*
@ -55,9 +50,9 @@ static void setup_default_ebda(void *unused)
if (acpi_is_wakeup_s3())
return;
setup_ebda(DEFAULT_EBDA_LOWMEM,
DEFAULT_EBDA_SEGMENT,
DEFAULT_EBDA_SIZE);
setup_ebda(CONFIG_DEFAULT_EBDA_LOWMEM,
CONFIG_DEFAULT_EBDA_SEGMENT,
CONFIG_DEFAULT_EBDA_SIZE);
}
/* Ensure EBDA is prepared before Option ROMs. */