From 0a9f747379d81aef77e2ee8523dbb7eca22487c6 Mon Sep 17 00:00:00 2001 From: Achin Gupta Date: Sun, 9 Feb 2014 17:48:12 +0000 Subject: [PATCH] Move PSCI to runtime services directory This patch creates a 'services' directory and moves the PSCI under it. Other runtime services e.g. the Secure Payload Dispatcher service will be placed under the same directory in the future. Also fixes issue ARM-software/tf-issues#12 Change-Id: I187f83dcb660b728f82155d91882e961d2255068 --- Makefile | 2 +- bl31/bl31.mk | 4 ++-- {common => services}/psci/psci_afflvl_off.c | 1 + {common => services}/psci/psci_afflvl_on.c | 2 ++ {common => services}/psci/psci_afflvl_suspend.c | 9 +++++++++ {common => services}/psci/psci_common.c | 0 {common => services}/psci/psci_entry.S | 0 {common => services}/psci/psci_main.c | 0 {common => services}/psci/psci_private.h | 0 {common => services}/psci/psci_setup.c | 0 10 files changed, 15 insertions(+), 3 deletions(-) rename {common => services}/psci/psci_afflvl_off.c (99%) rename {common => services}/psci/psci_afflvl_on.c (99%) rename {common => services}/psci/psci_afflvl_suspend.c (98%) rename {common => services}/psci/psci_common.c (100%) rename {common => services}/psci/psci_entry.S (100%) rename {common => services}/psci/psci_main.c (100%) rename {common => services}/psci/psci_private.h (100%) rename {common => services}/psci/psci_setup.c (100%) diff --git a/Makefile b/Makefile index 4d925b3d7..a5a3a78e9 100644 --- a/Makefile +++ b/Makefile @@ -131,7 +131,7 @@ INCLUDES += -Ilib/include/ \ -Iinclude/${ARCH}/ \ -Iinclude/ \ -Iarch/system/gic \ - -Icommon/psci \ + -Iservices/psci \ -Iinclude/stdlib \ -Iinclude/stdlib/sys \ -Iplat/${PLAT} \ diff --git a/bl31/bl31.mk b/bl31/bl31.mk index fec8ebe24..1522b8399 100644 --- a/bl31/bl31.mk +++ b/bl31/bl31.mk @@ -33,13 +33,13 @@ vpath %.c common \ arch/system/gic \ plat/${PLAT} \ arch/${ARCH} \ - common/psci \ + services/psci \ lib/sync/locks/bakery \ plat/${PLAT}/${ARCH} \ ${PLAT_BL31_C_VPATH} vpath %.S lib/arch/${ARCH} \ - common/psci \ + services/psci \ include \ plat/${PLAT}/${ARCH} \ lib/sync/locks/exclusive \ diff --git a/common/psci/psci_afflvl_off.c b/services/psci/psci_afflvl_off.c similarity index 99% rename from common/psci/psci_afflvl_off.c rename to services/psci/psci_afflvl_off.c index 1d8f2912d..72557aa31 100644 --- a/common/psci/psci_afflvl_off.c +++ b/services/psci/psci_afflvl_off.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include diff --git a/common/psci/psci_afflvl_on.c b/services/psci/psci_afflvl_on.c similarity index 99% rename from common/psci/psci_afflvl_on.c rename to services/psci/psci_afflvl_on.c index 14f524c8f..d22904cd9 100644 --- a/common/psci/psci_afflvl_on.c +++ b/services/psci/psci_afflvl_on.c @@ -31,11 +31,13 @@ #include #include #include +#include #include #include #include #include #include +#include typedef int (*afflvl_on_handler)(unsigned long, aff_map_node *, diff --git a/common/psci/psci_afflvl_suspend.c b/services/psci/psci_afflvl_suspend.c similarity index 98% rename from common/psci/psci_afflvl_suspend.c rename to services/psci/psci_afflvl_suspend.c index c12ad437c..4391580be 100644 --- a/common/psci/psci_afflvl_suspend.c +++ b/services/psci/psci_afflvl_suspend.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -87,6 +88,7 @@ static int psci_afflvl0_suspend(unsigned long mpidr, { unsigned int index, plat_state; unsigned long psci_entrypoint, sctlr = read_sctlr(); + el3_state *saved_el3_state; int rc = PSCI_E_SUCCESS; /* Sanity check to safeguard against data corruption */ @@ -112,6 +114,13 @@ static int psci_afflvl0_suspend(unsigned long mpidr, cm_el3_sysregs_context_save(NON_SECURE); rc = PSCI_E_SUCCESS; + /* + * The EL3 state to PoC since it will be accessed after a + * reset with the caches turned off + */ + saved_el3_state = get_el3state_ctx(cm_get_context(mpidr, NON_SECURE)); + flush_dcache_range((uint64_t) saved_el3_state, sizeof(*saved_el3_state)); + /* Set the secure world (EL3) re-entry point after BL1 */ psci_entrypoint = (unsigned long) psci_aff_suspend_finish_entry; diff --git a/common/psci/psci_common.c b/services/psci/psci_common.c similarity index 100% rename from common/psci/psci_common.c rename to services/psci/psci_common.c diff --git a/common/psci/psci_entry.S b/services/psci/psci_entry.S similarity index 100% rename from common/psci/psci_entry.S rename to services/psci/psci_entry.S diff --git a/common/psci/psci_main.c b/services/psci/psci_main.c similarity index 100% rename from common/psci/psci_main.c rename to services/psci/psci_main.c diff --git a/common/psci/psci_private.h b/services/psci/psci_private.h similarity index 100% rename from common/psci/psci_private.h rename to services/psci/psci_private.h diff --git a/common/psci/psci_setup.c b/services/psci/psci_setup.c similarity index 100% rename from common/psci/psci_setup.c rename to services/psci/psci_setup.c