aboutsummaryrefslogtreecommitdiff
path: root/src/arch/arm64/armv8/secmon/secmon_init.c
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@chromium.org>2014-09-19 15:52:31 -0500
committerPatrick Georgi <pgeorgi@google.com>2015-03-28 08:44:50 +0100
commitbda3577d0c9f9e3ceb896f25cf06be69d614eed9 (patch)
tree2496793a344b86ee6df753c30059c33f39c115f6 /src/arch/arm64/armv8/secmon/secmon_init.c
parent93eea8822d6c5932bb77d91fac35101ab2274490 (diff)
arm64: add psci support to secmon
The PSCI functionality initially includes CPU_ON and CPU_OFF functions. Upon entering secmon if the parameters are non-NULL then a PSCI CPU_ON action is done for the current CPU. BUG=chrome-os-partner:32112 BRANCH=None TEST=Booted kernel with PSCI support. Brought up all CPUs in kernel using PSCI. Turned CPUs on and off. Change-Id: I256fa45a1c9889ff9d7990eb1898df1ec241c117 Signed-off-by: Patrick Georgi <pgeorgi@chromium.org> Original-Commit-Id: 689ba03e313e7e52e9b74aa774897b55cbd52748 Original-Change-Id: I943826b7dbcc8e3f6c8c4b66344af8fac12ba94e Original-Signed-off-by: Aaron Durbin <adurbin@chromium.org> Original-Reviewed-on: https://chromium-review.googlesource.com/218923 Original-Reviewed-by: Furquan Shaikh <furquan@chromium.org> Reviewed-on: http://review.coreboot.org/9097 Reviewed-by: Patrick Georgi <pgeorgi@google.com> Tested-by: build bot (Jenkins)
Diffstat (limited to 'src/arch/arm64/armv8/secmon/secmon_init.c')
-rw-r--r--src/arch/arm64/armv8/secmon/secmon_init.c20
1 files changed, 5 insertions, 15 deletions
diff --git a/src/arch/arm64/armv8/secmon/secmon_init.c b/src/arch/arm64/armv8/secmon/secmon_init.c
index 6172505523..56ed4f14bc 100644
--- a/src/arch/arm64/armv8/secmon/secmon_init.c
+++ b/src/arch/arm64/armv8/secmon/secmon_init.c
@@ -23,11 +23,10 @@
#include <arch/io.h>
#include <arch/exception.h>
#include <arch/lib_helpers.h>
+#include <arch/psci.h>
#include <arch/secmon.h>
#include <arch/smc.h>
-#include <arch/transition.h>
#include <console/console.h>
-#include <rmodule.h>
#include <stddef.h>
#include "secmon.h"
@@ -44,25 +43,16 @@ static void cpu_init(int bsp)
static void secmon_init(struct secmon_params *params, int bsp)
{
- struct exc_state exc_state;
-
exception_hwinit();
cpu_init(bsp);
smc_init();
+ psci_init();
- /*
- * Check if the arg is non-NULL
- * 1) If yes, we make an EL2 transition to that entry point
- * 2) If no, we just wait
- */
- if (params != NULL) {
- memset(&exc_state, 0, sizeof(exc_state));
- exc_state.elx.spsr =
- get_eret_el(params->elx_el, params->elx_mode);
+ /* Turn on CPU if params are not NULL. */
+ if (params != NULL)
+ psci_turn_on_self(params->entry, params->arg);
- transition_with_entry(params->entry, params->arg, &exc_state);
- }
secmon_wait_for_action();
}