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: Ia0f744c93766efc694b522ab0af9aedf7329ac43
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/227547
Reviewed-by: Furquan Shaikh <furquan@chromium.org>
This commit is contained in:
Aaron Durbin 2014-11-05 10:23:33 -06:00 committed by chrome-internal-fetch
commit 030535b7c9

View file

@ -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();