aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSubrata Banik <subrata.banik@intel.com>2017-09-04 18:44:38 +0530
committerAaron Durbin <adurbin@chromium.org>2017-09-22 15:29:30 +0000
commitc7590cd9f3ca6242dd05e2a35b16c256a8759087 (patch)
tree5700243196e5938b62cbb82d32dca0ed4ba4cd75
parent5d2928cdab0afe7624d4d49a180f90c6ceeb0674 (diff)
arch/x86: Enable ebda library for romstage and postcar
This patch provides a kconfig option as EARLY_EBDA_INIT to ensures user can make use of EBDA library even during early boot stages like romstage, postcar. Change-Id: I603800a531f56b6ebd460d5951c35a645fbfe492 Signed-off-by: Subrata Banik <subrata.banik@intel.com> Reviewed-on: https://review.coreboot.org/21388 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Sumeet R Pawnikar <sumeet.r.pawnikar@intel.com> Reviewed-by: Aaron Durbin <adurbin@chromium.org>
-rw-r--r--src/arch/x86/Kconfig9
-rw-r--r--src/arch/x86/Makefile.inc2
-rw-r--r--src/arch/x86/include/arch/ebda.h3
-rw-r--r--src/device/device.c9
4 files changed, 21 insertions, 2 deletions
diff --git a/src/arch/x86/Kconfig b/src/arch/x86/Kconfig
index 726fa31f71..c1390de145 100644
--- a/src/arch/x86/Kconfig
+++ b/src/arch/x86/Kconfig
@@ -135,6 +135,15 @@ config PRERAM_CBMEM_CONSOLE_SIZE
help
Increase this value if preram cbmem console is getting truncated
+config EARLY_EBDA_INIT
+ bool
+ default n
+ help
+ Initialize BIOS EBDA area early in romstage to allow bootloader to
+ use this region for storing data which can be available across
+ various stages. If user is selecting this option then its users
+ responsibility to perform EBDA initialization call during romstage.
+
config PC80_SYSTEM
bool
default y if ARCH_X86
diff --git a/src/arch/x86/Makefile.inc b/src/arch/x86/Makefile.inc
index 813e01b181..cc227b3bf0 100644
--- a/src/arch/x86/Makefile.inc
+++ b/src/arch/x86/Makefile.inc
@@ -209,6 +209,7 @@ romstage-y += boot.c
romstage-y += cbmem.c
romstage-y += cbfs_and_run.c
romstage-$(CONFIG_ARCH_RAMSTAGE_X86_32) += cpu_common.c
+romstage-$(CONFIG_EARLY_EBDA_INIT) += ebda.c
romstage-y += memcpy.c
romstage-y += memmove.c
romstage-y += memset.c
@@ -283,6 +284,7 @@ postcar-y += boot.c
postcar-y += cbfs_and_run.c
postcar-y += cbmem.c
postcar-y += cpu_common.c
+postcar-$(CONFIG_EARLY_EBDA_INIT) += ebda.c
postcar-y += exit_car.S
postcar-y += memcpy.c
postcar-y += memmove.c
diff --git a/src/arch/x86/include/arch/ebda.h b/src/arch/x86/include/arch/ebda.h
index cd25ccaba1..428bc92c27 100644
--- a/src/arch/x86/include/arch/ebda.h
+++ b/src/arch/x86/include/arch/ebda.h
@@ -17,6 +17,9 @@
#ifndef __ARCH_EBDA_H
#define __ARCH_EBDA_H
+#include <stdint.h>
+#include <stddef.h>
+
#define X86_BDA_SIZE 0x200
#define X86_BDA_BASE ((void *)0x400)
#define X86_EBDA_SEGMENT ((void *)0x40e)
diff --git a/src/device/device.c b/src/device/device.c
index 35f5909c6f..4c6b6f94a9 100644
--- a/src/device/device.c
+++ b/src/device/device.c
@@ -1179,8 +1179,13 @@ void dev_initialize(void)
printk(BIOS_INFO, "Initializing devices...\n");
#if IS_ENABLED(CONFIG_ARCH_X86)
- /* Ensure EBDA is prepared before Option ROMs. */
- setup_default_ebda();
+ /*
+ * Initialize EBDA area in ramstage if early
+ * initialization is not done.
+ */
+ if (!IS_ENABLED(CONFIG_EARLY_EBDA_INIT))
+ /* Ensure EBDA is prepared before Option ROMs. */
+ setup_default_ebda();
#endif
/* First call the mainboard init. */