summaryrefslogtreecommitdiff
path: root/src/cpu
diff options
context:
space:
mode:
authorJeremy Compostella <jeremy.compostella@intel.com>2022-11-30 19:26:01 -0700
committerMartin L Roth <gaumless@gmail.com>2022-12-17 20:48:06 +0000
commitfa83887e48f196cfa303ce6de32acf1dfec7cad9 (patch)
tree1eb1a776d3e3e02c182db936dc9e6ad38529bf9b /src/cpu
parente6b96dceabb9cc4e79653c7992b8c16ac3d234ce (diff)
Add option to use Ada code in romstage
If selected, libgnat is linked into romstage. In addition, a call to romstage_adainit() is added to support Ada program data initialization. BUG=b:252792591 BRANCH=firmware-brya-14505.B TEST=Ada code compiles for romstage and loads successfully Change-Id: I74f0460f6b14fde2b4bd6391e1782b2e5b217707 Signed-off-by: Jeremy Compostella <jeremy.compostella@intel.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/70274 Reviewed-by: Tarun Tuli <taruntuli@google.com> Reviewed-by: Nick Vaccaro <nvaccaro@google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/cpu')
-rw-r--r--src/cpu/intel/car/romstage.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/cpu/intel/car/romstage.c b/src/cpu/intel/car/romstage.c
index c7c218b8ed..7df512dce0 100644
--- a/src/cpu/intel/car/romstage.c
+++ b/src/cpu/intel/car/romstage.c
@@ -1,5 +1,6 @@
/* SPDX-License-Identifier: GPL-2.0-only */
+#include <adainit.h>
#include <arch/romstage.h>
#include <arch/symbols.h>
#include <commonlib/helpers.h>
@@ -40,6 +41,18 @@ void __noreturn romstage_main(void)
if (CONFIG(VBOOT_EARLY_EC_SYNC))
vboot_sync_ec();
+ /*
+ * We can generally jump between C and Ada code back and forth
+ * without trouble. But since we don't have an Ada main() we
+ * have to do some Ada package initializations that GNAT would
+ * do there. This has to be done before calling any Ada code.
+ *
+ * The package initializations should not have any dependen-
+ * cies on C code. So we can call them here early, and don't
+ * have to worry at which point we can start to use Ada.
+ */
+ romstage_adainit();
+
mainboard_romstage_entry();
/* Check the stack. */