diff --git a/plat/juno/scpi.c b/plat/juno/scpi.c
index 44498e5d35b8cf23398e7e320af69fd840607a94..6b7d9a7da980ac923893aee7f12ca5ee52b99d25 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 63c6c4a991623ee1ef69bbf2cc22fc3f1e7960b7..9d77a92697b7e79eb7b519b8eed727e720824b73 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__ */