diff options
author | Aaron Durbin <adurbin@chromium.org> | 2014-09-19 15:52:31 -0500 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2015-03-28 08:44:50 +0100 |
commit | bda3577d0c9f9e3ceb896f25cf06be69d614eed9 (patch) | |
tree | 2496793a344b86ee6df753c30059c33f39c115f6 /src/arch/arm64/armv8/secmon/secmon_init.c | |
parent | 93eea8822d6c5932bb77d91fac35101ab2274490 (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.c | 20 |
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(); } |