[coreboot-gerrit] New patch to review for coreboot: 4aa7426 arm64: secmon: wait for all CPUs to enter secmon

Patrick Georgi (pgeorgi@google.com) gerrit at coreboot.org
Wed Apr 8 12:48:28 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/9394

-gerrit

commit 4aa74268c94b4c1daec8c5b591b791a5ae3c76c3
Author: Aaron Durbin <adurbin at chromium.org>
Date:   Wed Nov 5 10:23:33 2014 -0600

    arm64: secmon: wait for all CPUs to enter secmon
    
    There is state within the system that relies on having
    all CPUs present in order to proceed with initialization.
    The current expectation is that all CPUs are online and
    entering the secure monitor. Therefore, wait until all
    CONFIG_MAX_CPUs show up.
    
    BUG=chrome-os-partner:32112
    BRANCH=None
    TEST=Can get all CPUs up in kernel using PSCI.
    
    Change-Id: I741a09128e99e0cb0c9f4046b1c0d27582fda963
    Signed-off-by: Patrick Georgi <pgeorgi at chromium.org>
    Original-Commit-Id: 030535b7c9821b40bf4a51f88e289eab8af9aa13
    Original-Change-Id: Ia0f744c93766efc694b522ab0af9aedf7329ac43
    Original-Signed-off-by: Aaron Durbin <adurbin at chromium.org>
    Original-Reviewed-on: https://chromium-review.googlesource.com/227547
    Original-Reviewed-by: Furquan Shaikh <furquan at chromium.org>
---
 src/arch/arm64/armv8/secmon/secmon_init.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/src/arch/arm64/armv8/secmon/secmon_init.c b/src/arch/arm64/armv8/secmon/secmon_init.c
index 2ec2f13..fb3422f 100644
--- a/src/arch/arm64/armv8/secmon/secmon_init.c
+++ b/src/arch/arm64/armv8/secmon/secmon_init.c
@@ -53,6 +53,24 @@ static void cpu_init(int bsp)
 		cpu_set_bsp();
 }
 
+static void wait_for_all_cpus(void)
+{
+	int all_online;
+
+	while (1) {
+		int i;
+
+		all_online = 1;
+		for (i = 0; i < CONFIG_MAX_CPUS; i++) {
+			if (!cpu_online(cpu_info_for_cpu(i)))
+				all_online = 0;
+		}
+
+		if (all_online)
+			break;
+	}
+}
+
 static void secmon_init(struct secmon_params *params, int bsp)
 {
 	struct cpu_action action = {
@@ -67,6 +85,9 @@ static void secmon_init(struct secmon_params *params, int bsp)
 	if (!cpu_is_bsp())
 		secmon_wait_for_action();
 
+	/* Wait for all CPUs to enter secmon. */
+	wait_for_all_cpus();
+
 	smc_init();
 	psci_init();
 



More information about the coreboot-gerrit mailing list