[coreboot-gerrit] New patch to review for coreboot: 669fcc5 arm64: Reorganize payload entry code and related Kconfigs

Patrick Georgi (pgeorgi@google.com) gerrit at coreboot.org
Tue May 19 13:43:44 CEST 2015


Patrick Georgi (pgeorgi at google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/10243

-gerrit

commit 669fcc5e311d96b69fd4a6368c21f1a245a85d97
Author: Julius Werner <jwerner at chromium.org>
Date:   Thu May 7 16:59:31 2015 -0700

    arm64: Reorganize payload entry code and related Kconfigs
    
    This patch slightly reorganizes arm64/boot.c with the aim of being more
    readable: the secure monitor entry is now guarded by an explicit if
    statement for its Kconfig rather than hiding than in the corresponding
    header file. This makes it clear that there are two (soon three)
    separate code paths here.
    
    Change-Id: I44993da7a982b08f485b93ffc522d193bb3fa118
    Signed-off-by: Patrick Georgi <pgeorgi at chromium.org>
    Original-Commit-Id: 5067e47bc03f04ad2dba044f022716e0fc62bb9e
    Original-Change-Id: I1b2038acc0d054716a3c580ce97ea8e9a45abfa2
    Original-Signed-off-by: Julius Werner <jwerner at chromium.org>
    Original-Reviewed-on: https://chromium-review.googlesource.com/270783
    Original-Reviewed-by: Aaron Durbin <adurbin at chromium.org>
---
 src/arch/arm64/boot.c | 34 ++++++++++++++++++----------------
 1 file changed, 18 insertions(+), 16 deletions(-)

diff --git a/src/arch/arm64/boot.c b/src/arch/arm64/boot.c
index f62ceb6..1fdc234 100644
--- a/src/arch/arm64/boot.c
+++ b/src/arch/arm64/boot.c
@@ -40,27 +40,29 @@ static void run_payload(struct prog *prog)
 
 	printk(BIOS_SPEW, "entry    = %p\n", doit);
 
-	secmon_run(doit, arg);
+	if (IS_ENABLED(CONFIG_ARM64_USE_SECURE_MONITOR))
+		secmon_run(doit, arg);
+	else {
+		/* Start the other CPUs spinning. */
+		spintable_start();
 
-	/* Start the other CPUs spinning. */
-	spintable_start();
+		/* If current EL is not EL3, jump to payload at same EL. */
+		if (current_el != EL3) {
+			cache_sync_instructions();
+			/* Point of no-return */
+			doit(arg);
+		}
 
-	/* If current EL is not EL3, jump to payload at same EL. */
-	if (current_el != EL3) {
-		cache_sync_instructions();
-		/* Point of no-return */
-		doit(arg);
-	}
-
-	/* If current EL is EL3, we transition to payload in EL2. */
-	struct exc_state exc_state;
+		/* If current EL is EL3, we transition to payload in EL2. */
+		struct exc_state exc_state;
 
-	memset(&exc_state, 0, sizeof(exc_state));
+		memset(&exc_state, 0, sizeof(exc_state));
 
-	exc_state.elx.spsr = get_eret_el(EL2, SPSR_USE_L);
+		exc_state.elx.spsr = get_eret_el(EL2, SPSR_USE_L);
 
-	cache_sync_instructions();
-	transition_with_entry(doit, arg, &exc_state);
+		cache_sync_instructions();
+		transition_with_entry(doit, arg, &exc_state);
+	}
 }
 
 void arch_prog_run(struct prog *prog)



More information about the coreboot-gerrit mailing list