From dbf5789ea66058be431569cc16d88448baafe644 Mon Sep 17 00:00:00 2001 From: Jon Medhurst Date: Tue, 11 Feb 2014 09:46:14 +0000 Subject: [PATCH] juno: Implement SCPI Set CSS Power State command Signed-off-by: Jon Medhurst --- plat/juno/scpi.c | 11 +++++++++++ plat/juno/scpi.h | 9 +++++++++ 2 files changed, 20 insertions(+) diff --git a/plat/juno/scpi.c b/plat/juno/scpi.c index 44498e5d3..6b7d9a7da 100644 --- a/plat/juno/scpi.c +++ b/plat/juno/scpi.c @@ -112,3 +112,14 @@ int scpi_wait_ready(void) return response == SCP_OK ? 0 : -1; } + +void scpi_set_css_power_state(unsigned mpidr, scpi_power_state cpu_state, + scpi_power_state cluster_state, scpi_power_state css_state) +{ + uint32_t state = mpidr & 0x0f; /* CPU ID */ + state |= (mpidr & 0xf00) >> 4; /* Cluster ID */ + state |= cpu_state << 8; + state |= cluster_state << 12; + state |= css_state << 16; + scpi_secure_send32(SCPI_CMD_SET_CSS_POWER_STATE, state); +} diff --git a/plat/juno/scpi.h b/plat/juno/scpi.h index 63c6c4a99..9d77a9269 100644 --- a/plat/juno/scpi.h +++ b/plat/juno/scpi.h @@ -58,8 +58,17 @@ typedef uint32_t spci_status; typedef enum { SCPI_CMD_SCP_READY = 0x01, + SCPI_CMD_SET_CSS_POWER_STATE = 0x04, } spci_command; +typedef enum { + scpi_power_on = 0, + scpi_power_retention = 1, + scpi_power_off = 3, +} scpi_power_state; + extern int scpi_wait_ready(void); +extern void scpi_set_css_power_state(unsigned mpidr, scpi_power_state cpu_state, + scpi_power_state cluster_state, scpi_power_state css_state); #endif /* __SCPI_H__ */