plat/arm: scp: Move to drivers/ folder

Change-Id: Ida5dae39478654405d0ee31a6cbddb4579e76a7f
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
diff --git a/plat/arm/css/common/css_bl2_setup.c b/plat/arm/css/common/css_bl2_setup.c
index 1538e29..002c6eb 100644
--- a/plat/arm/css/common/css_bl2_setup.c
+++ b/plat/arm/css/common/css_bl2_setup.c
@@ -8,13 +8,12 @@
 
 #include <common/bl_common.h>
 #include <common/debug.h>
+#include <drivers/arm/css/css_scp.h>
 #include <lib/mmio.h>
 #include <lib/utils.h>
 #include <plat/arm/common/plat_arm.h>
 #include <platform_def.h>
 
-#include "../drivers/scp/css_scp.h"
-
 /* Weak definition may be overridden in specific CSS based platform */
 #pragma weak plat_arm_bl2_handle_scp_bl2
 
diff --git a/plat/arm/css/common/css_bl2u_setup.c b/plat/arm/css/common/css_bl2u_setup.c
index c3b4f2b..15cf4f6 100644
--- a/plat/arm/css/common/css_bl2u_setup.c
+++ b/plat/arm/css/common/css_bl2u_setup.c
@@ -6,11 +6,10 @@
 
 #include <common/bl_common.h>
 #include <common/debug.h>
+#include <drivers/arm/css/css_scp.h>
 #include <plat/arm/common/plat_arm.h>
 #include <plat/common/platform.h>
 
-#include "../drivers/scp/css_scp.h"
-
 /* Weak definition may be overridden in specific CSS based platform */
 #pragma weak bl2u_plat_handle_scp_bl2u
 
diff --git a/plat/arm/css/common/css_common.mk b/plat/arm/css/common/css_common.mk
index 36da732..fba9cdc 100644
--- a/plat/arm/css/common/css_common.mk
+++ b/plat/arm/css/common/css_common.mk
@@ -27,15 +27,15 @@
 
 ifeq (${CSS_USE_SCMI_SDS_DRIVER},0)
 BL31_SOURCES		+=	drivers/arm/css/mhu/css_mhu.c			\
-				drivers/arm/css/scpi/css_scpi.c			\
-				plat/arm/css/drivers/scp/css_pm_scpi.c
+				drivers/arm/css/scp/css_pm_scpi.c		\
+				drivers/arm/css/scpi/css_scpi.c
 else
 BL31_SOURCES		+=	drivers/arm/css/mhu/css_mhu_doorbell.c		\
 				drivers/arm/css/scmi/scmi_ap_core_proto.c	\
 				drivers/arm/css/scmi/scmi_common.c		\
 				drivers/arm/css/scmi/scmi_pwr_dmn_proto.c	\
 				drivers/arm/css/scmi/scmi_sys_pwr_proto.c	\
-				plat/arm/css/drivers/scp/css_pm_scmi.c
+				drivers/arm/css/scp/css_pm_scmi.c
 endif
 
 # Process CSS_LOAD_SCP_IMAGES flag
@@ -49,19 +49,19 @@
   endif
 
   ifeq (${CSS_USE_SCMI_SDS_DRIVER},1)
-    BL2U_SOURCES	+=	plat/arm/css/drivers/scp/css_sds.c	\
+    BL2U_SOURCES	+=	drivers/arm/css/scp/css_sds.c			\
 				plat/arm/css/drivers/sds/sds.c
 
-    BL2_SOURCES		+=	plat/arm/css/drivers/scp/css_sds.c	\
+    BL2_SOURCES		+=	drivers/arm/css/scp/css_sds.c			\
 				plat/arm/css/drivers/sds/sds.c
   else
-    BL2U_SOURCES	+=	drivers/arm/css/mhu/css_mhu.c		\
-				drivers/arm/css/scpi/css_scpi.c		\
-				plat/arm/css/drivers/scp/css_bom_bootloader.c
+    BL2U_SOURCES	+=	drivers/arm/css/mhu/css_mhu.c			\
+				drivers/arm/css/scp/css_bom_bootloader.c	\
+				drivers/arm/css/scpi/css_scpi.c
 
-    BL2_SOURCES		+=	drivers/arm/css/mhu/css_mhu.c		\
-				drivers/arm/css/scpi/css_scpi.c		\
-				plat/arm/css/drivers/scp/css_bom_bootloader.c
+    BL2_SOURCES		+=	drivers/arm/css/mhu/css_mhu.c			\
+				drivers/arm/css/scp/css_bom_bootloader.c	\
+				drivers/arm/css/scpi/css_scpi.c
     # Enable option to detect whether the SCP ROM firmware in use predates version
     # 1.7.0 and therefore, is incompatible.
     CSS_DETECT_PRE_1_7_0_SCP	:=	1
diff --git a/plat/arm/css/common/css_pm.c b/plat/arm/css/common/css_pm.c
index 47412df..f6fc6aa 100644
--- a/plat/arm/css/common/css_pm.c
+++ b/plat/arm/css/common/css_pm.c
@@ -11,13 +11,12 @@
 
 #include <arch_helpers.h>
 #include <common/debug.h>
+#include <drivers/arm/css/css_scp.h>
 #include <lib/cassert.h>
 #include <plat/arm/common/plat_arm.h>
 #include <plat/arm/css/common/css_pm.h>
 #include <plat/common/platform.h>
 
-#include "../drivers/scp/css_scp.h"
-
 /* Allow CSS platforms to override `plat_arm_psci_pm_ops` */
 #pragma weak plat_arm_psci_pm_ops
 
diff --git a/plat/arm/css/common/sp_min/css_sp_min.mk b/plat/arm/css/common/sp_min/css_sp_min.mk
index a7c61be..6523a16 100644
--- a/plat/arm/css/common/sp_min/css_sp_min.mk
+++ b/plat/arm/css/common/sp_min/css_sp_min.mk
@@ -10,12 +10,12 @@
 
 ifeq (${CSS_USE_SCMI_SDS_DRIVER},0)
 BL32_SOURCES		+=	drivers/arm/css/mhu/css_mhu.c			\
-				drivers/arm/css/scpi/css_scpi.c			\
-				plat/arm/css/drivers/scp/css_pm_scpi.c
+				drivers/arm/css/scp/css_pm_scpi.c		\
+				drivers/arm/css/scpi/css_scpi.c
 else
 BL32_SOURCES		+=	drivers/arm/css/mhu/css_mhu_doorbell.c		\
+				drivers/arm/css/scp/css_pm_scmi.c		\
 				drivers/arm/css/scmi/scmi_common.c		\
 				drivers/arm/css/scmi/scmi_pwr_dmn_proto.c	\
-				drivers/arm/css/scmi/scmi_sys_pwr_proto.c	\
-				plat/arm/css/drivers/scp/css_pm_scmi.c
+				drivers/arm/css/scmi/scmi_sys_pwr_proto.c
 endif
diff --git a/plat/arm/css/drivers/scp/css_bom_bootloader.c b/plat/arm/css/drivers/scp/css_bom_bootloader.c
deleted file mode 100644
index 40880da..0000000
--- a/plat/arm/css/drivers/scp/css_bom_bootloader.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include <assert.h>
-#include <stdint.h>
-
-#include <arch_helpers.h>
-#include <common/debug.h>
-#include <drivers/arm/css/css_mhu.h>
-#include <drivers/arm/css/css_scpi.h>
-#include <plat/common/platform.h>
-#include <platform_def.h>
-
-#include "css_scp.h"
-
-/* ID of the MHU slot used for the BOM protocol */
-#define BOM_MHU_SLOT_ID		0
-
-/* Boot commands sent from AP -> SCP */
-#define BOOT_CMD_INFO	0x00
-#define BOOT_CMD_DATA	0x01
-
-/* BOM command header */
-typedef struct {
-	uint32_t id : 8;
-	uint32_t reserved : 24;
-} bom_cmd_t;
-
-typedef struct {
-	uint32_t image_size;
-	uint32_t checksum;
-} cmd_info_payload_t;
-
-/*
- * Unlike the SCPI protocol, the boot protocol uses the same memory region
- * for both AP -> SCP and SCP -> AP transfers; define the address of this...
- */
-#define BOM_SHARED_MEM		PLAT_CSS_SCP_COM_SHARED_MEM_BASE
-#define BOM_CMD_HEADER		((bom_cmd_t *) BOM_SHARED_MEM)
-#define BOM_CMD_PAYLOAD		((void *) (BOM_SHARED_MEM + sizeof(bom_cmd_t)))
-
-typedef struct {
-	/* Offset from the base address of the Trusted RAM */
-	uint32_t offset;
-	uint32_t block_size;
-} cmd_data_payload_t;
-
-/*
- * All CSS platforms load SCP_BL2/SCP_BL2U just below BL2 (this is where BL31
- * usually resides except when ARM_BL31_IN_DRAM is
- * set). Ensure that SCP_BL2/SCP_BL2U do not overflow into shared RAM and
- * the tb_fw_config.
- */
-CASSERT(SCP_BL2_LIMIT <= BL2_BASE, assert_scp_bl2_overwrite_bl2);
-CASSERT(SCP_BL2U_LIMIT <= BL2_BASE, assert_scp_bl2u_overwrite_bl2);
-
-CASSERT(SCP_BL2_BASE >= ARM_TB_FW_CONFIG_LIMIT, assert_scp_bl2_overflow);
-CASSERT(SCP_BL2U_BASE >= ARM_TB_FW_CONFIG_LIMIT, assert_scp_bl2u_overflow);
-
-static void scp_boot_message_start(void)
-{
-	mhu_secure_message_start(BOM_MHU_SLOT_ID);
-}
-
-static void scp_boot_message_send(size_t payload_size)
-{
-	/* Ensure that any write to the BOM payload area is seen by SCP before
-	 * we write to the MHU register. If these 2 writes were reordered by
-	 * the CPU then SCP would read stale payload data */
-	dmbst();
-
-	/* Send command to SCP */
-	mhu_secure_message_send(BOM_MHU_SLOT_ID);
-}
-
-static uint32_t scp_boot_message_wait(size_t size)
-{
-	uint32_t mhu_status;
-
-	mhu_status = mhu_secure_message_wait();
-
-	/* Expect an SCP Boot Protocol message, reject any other protocol */
-	if (mhu_status != (1 << BOM_MHU_SLOT_ID)) {
-		ERROR("MHU: Unexpected protocol (MHU status: 0x%x)\n",
-			mhu_status);
-		panic();
-	}
-
-	/* Ensure that any read to the BOM payload area is done after reading
-	 * the MHU register. If these 2 reads were reordered then the CPU would
-	 * read invalid payload data */
-	dmbld();
-
-	return *(uint32_t *) BOM_SHARED_MEM;
-}
-
-static void scp_boot_message_end(void)
-{
-	mhu_secure_message_end(BOM_MHU_SLOT_ID);
-}
-
-int css_scp_boot_image_xfer(void *image, unsigned int image_size)
-{
-	uint32_t response;
-	uint32_t checksum;
-	cmd_info_payload_t *cmd_info_payload;
-	cmd_data_payload_t *cmd_data_payload;
-
-	assert((uintptr_t) image == SCP_BL2_BASE);
-
-	if ((image_size == 0) || (image_size % 4 != 0)) {
-		ERROR("Invalid size for the SCP_BL2 image. Must be a multiple of "
-			"4 bytes and not zero (current size = 0x%x)\n",
-			image_size);
-		return -1;
-	}
-
-	/* Extract the checksum from the image */
-	checksum = *(uint32_t *) image;
-	image = (char *) image + sizeof(checksum);
-	image_size -= sizeof(checksum);
-
-	mhu_secure_init();
-
-	VERBOSE("Send info about the SCP_BL2 image to be transferred to SCP\n");
-
-	/*
-	 * Send information about the SCP firmware image about to be transferred
-	 * to SCP
-	 */
-	scp_boot_message_start();
-
-	BOM_CMD_HEADER->id = BOOT_CMD_INFO;
-	cmd_info_payload = BOM_CMD_PAYLOAD;
-	cmd_info_payload->image_size = image_size;
-	cmd_info_payload->checksum = checksum;
-
-	scp_boot_message_send(sizeof(*cmd_info_payload));
-#if CSS_DETECT_PRE_1_7_0_SCP
-	{
-		const uint32_t deprecated_scp_nack_cmd = 0x404;
-		uint32_t mhu_status;
-
-		VERBOSE("Detecting SCP version incompatibility\n");
-
-		mhu_status = mhu_secure_message_wait();
-		if (mhu_status == deprecated_scp_nack_cmd) {
-			ERROR("Detected an incompatible version of the SCP firmware.\n");
-			ERROR("Only versions from v1.7.0 onwards are supported.\n");
-			ERROR("Please update the SCP firmware.\n");
-			return -1;
-		}
-
-		VERBOSE("SCP version looks OK\n");
-	}
-#endif /* CSS_DETECT_PRE_1_7_0_SCP */
-	response = scp_boot_message_wait(sizeof(response));
-	scp_boot_message_end();
-
-	if (response != 0) {
-		ERROR("SCP BOOT_CMD_INFO returned error %u\n", response);
-		return -1;
-	}
-
-	VERBOSE("Transferring SCP_BL2 image to SCP\n");
-
-	/* Transfer SCP_BL2 image to SCP */
-	scp_boot_message_start();
-
-	BOM_CMD_HEADER->id = BOOT_CMD_DATA;
-	cmd_data_payload = BOM_CMD_PAYLOAD;
-	cmd_data_payload->offset = (uintptr_t) image - ARM_TRUSTED_SRAM_BASE;
-	cmd_data_payload->block_size = image_size;
-
-	scp_boot_message_send(sizeof(*cmd_data_payload));
-	response = scp_boot_message_wait(sizeof(response));
-	scp_boot_message_end();
-
-	if (response != 0) {
-		ERROR("SCP BOOT_CMD_DATA returned error %u\n", response);
-		return -1;
-	}
-
-	return 0;
-}
-
-int css_scp_boot_ready(void)
-{
-	VERBOSE("Waiting for SCP to signal it is ready to go on\n");
-
-	/* Wait for SCP to signal it's ready */
-	return scpi_wait_ready();
-}
diff --git a/plat/arm/css/drivers/scp/css_pm_scmi.c b/plat/arm/css/drivers/scp/css_pm_scmi.c
deleted file mode 100644
index 2980d9a..0000000
--- a/plat/arm/css/drivers/scp/css_pm_scmi.c
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- * Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include <assert.h>
-#include <string.h>
-
-#include <arch_helpers.h>
-#include <common/debug.h>
-#include <drivers/arm/css/scmi.h>
-#include <plat/arm/common/plat_arm.h>
-#include <plat/arm/css/common/css_pm.h>
-#include <plat/common/platform.h>
-#include <platform_def.h>
-
-#include "css_scp.h"
-
-/*
- * This file implements the SCP helper functions using SCMI protocol.
- */
-
-/*
- * SCMI power state parameter bit field encoding for ARM CSS platforms.
- *
- * 31  20 19       16 15      12 11       8 7        4 3         0
- * +-------------------------------------------------------------+
- * | SBZ | Max level |  Level 3 |  Level 2 |  Level 1 |  Level 0 |
- * |     |           |   state  |   state  |   state  |   state  |
- * +-------------------------------------------------------------+
- *
- * `Max level` encodes the highest level that has a valid power state
- * encoded in the power state.
- */
-#define SCMI_PWR_STATE_MAX_PWR_LVL_SHIFT	16
-#define SCMI_PWR_STATE_MAX_PWR_LVL_WIDTH	4
-#define SCMI_PWR_STATE_MAX_PWR_LVL_MASK		\
-				((1 << SCMI_PWR_STATE_MAX_PWR_LVL_WIDTH) - 1)
-#define SCMI_SET_PWR_STATE_MAX_PWR_LVL(_power_state, _max_level)		\
-		(_power_state) |= ((_max_level) & SCMI_PWR_STATE_MAX_PWR_LVL_MASK)\
-				<< SCMI_PWR_STATE_MAX_PWR_LVL_SHIFT
-#define SCMI_GET_PWR_STATE_MAX_PWR_LVL(_power_state)		\
-		(((_power_state) >> SCMI_PWR_STATE_MAX_PWR_LVL_SHIFT)	\
-				& SCMI_PWR_STATE_MAX_PWR_LVL_MASK)
-
-#define SCMI_PWR_STATE_LVL_WIDTH		4
-#define SCMI_PWR_STATE_LVL_MASK			\
-				((1 << SCMI_PWR_STATE_LVL_WIDTH) - 1)
-#define SCMI_SET_PWR_STATE_LVL(_power_state, _level, _level_state)		\
-		(_power_state) |= ((_level_state) & SCMI_PWR_STATE_LVL_MASK)	\
-				<< (SCMI_PWR_STATE_LVL_WIDTH * (_level))
-#define SCMI_GET_PWR_STATE_LVL(_power_state, _level)		\
-		(((_power_state) >> (SCMI_PWR_STATE_LVL_WIDTH * (_level))) &	\
-				SCMI_PWR_STATE_LVL_MASK)
-
-/*
- * The SCMI power state enumeration for a power domain level
- */
-typedef enum {
-	scmi_power_state_off = 0,
-	scmi_power_state_on = 1,
-	scmi_power_state_sleep = 2,
-} scmi_power_state_t;
-
-/*
- * The global handle for invoking the SCMI driver APIs after the driver
- * has been initialized.
- */
-static void *scmi_handle;
-
-/* The SCMI channel global object */
-static scmi_channel_t channel;
-
-ARM_SCMI_INSTANTIATE_LOCK;
-
-/*
- * Helper function to suspend a CPU power domain and its parent power domains
- * if applicable.
- */
-void css_scp_suspend(const struct psci_power_state *target_state)
-{
-	int ret;
-
-	/* At least power domain level 0 should be specified to be suspended */
-	assert(target_state->pwr_domain_state[ARM_PWR_LVL0] ==
-						ARM_LOCAL_STATE_OFF);
-
-	/* Check if power down at system power domain level is requested */
-	if (css_system_pwr_state(target_state) == ARM_LOCAL_STATE_OFF) {
-		/* Issue SCMI command for SYSTEM_SUSPEND */
-		ret = scmi_sys_pwr_state_set(scmi_handle,
-				SCMI_SYS_PWR_FORCEFUL_REQ,
-				SCMI_SYS_PWR_SUSPEND);
-		if (ret != SCMI_E_SUCCESS) {
-			ERROR("SCMI system power domain suspend return 0x%x unexpected\n",
-					ret);
-			panic();
-		}
-		return;
-	}
-#if !HW_ASSISTED_COHERENCY
-	int lvl;
-	uint32_t scmi_pwr_state = 0;
-	/*
-	 * If we reach here, then assert that power down at system power domain
-	 * level is running.
-	 */
-	assert(css_system_pwr_state(target_state) == ARM_LOCAL_STATE_RUN);
-
-	/* For level 0, specify `scmi_power_state_sleep` as the power state */
-	SCMI_SET_PWR_STATE_LVL(scmi_pwr_state, ARM_PWR_LVL0,
-						scmi_power_state_sleep);
-
-	for (lvl = ARM_PWR_LVL1; lvl <= PLAT_MAX_PWR_LVL; lvl++) {
-		if (target_state->pwr_domain_state[lvl] == ARM_LOCAL_STATE_RUN)
-			break;
-
-		assert(target_state->pwr_domain_state[lvl] ==
-							ARM_LOCAL_STATE_OFF);
-		/*
-		 * Specify `scmi_power_state_off` as power state for higher
-		 * levels.
-		 */
-		SCMI_SET_PWR_STATE_LVL(scmi_pwr_state, lvl,
-						scmi_power_state_off);
-	}
-
-	SCMI_SET_PWR_STATE_MAX_PWR_LVL(scmi_pwr_state, lvl - 1);
-
-	ret = scmi_pwr_state_set(scmi_handle,
-		plat_css_core_pos_to_scmi_dmn_id_map[plat_my_core_pos()],
-		scmi_pwr_state);
-
-	if (ret != SCMI_E_SUCCESS) {
-		ERROR("SCMI set power state command return 0x%x unexpected\n",
-				ret);
-		panic();
-	}
-#endif
-}
-
-/*
- * Helper function to turn off a CPU power domain and its parent power domains
- * if applicable.
- */
-void css_scp_off(const struct psci_power_state *target_state)
-{
-	int lvl = 0, ret;
-	uint32_t scmi_pwr_state = 0;
-
-	/* At-least the CPU level should be specified to be OFF */
-	assert(target_state->pwr_domain_state[ARM_PWR_LVL0] ==
-							ARM_LOCAL_STATE_OFF);
-
-	/* PSCI CPU OFF cannot be used to turn OFF system power domain */
-	assert(css_system_pwr_state(target_state) == ARM_LOCAL_STATE_RUN);
-
-	for (; lvl <= PLAT_MAX_PWR_LVL; lvl++) {
-		if (target_state->pwr_domain_state[lvl] == ARM_LOCAL_STATE_RUN)
-			break;
-
-		assert(target_state->pwr_domain_state[lvl] ==
-							ARM_LOCAL_STATE_OFF);
-		SCMI_SET_PWR_STATE_LVL(scmi_pwr_state, lvl,
-				scmi_power_state_off);
-	}
-
-	SCMI_SET_PWR_STATE_MAX_PWR_LVL(scmi_pwr_state, lvl - 1);
-
-	ret = scmi_pwr_state_set(scmi_handle,
-		plat_css_core_pos_to_scmi_dmn_id_map[plat_my_core_pos()],
-		scmi_pwr_state);
-
-	if (ret != SCMI_E_QUEUED && ret != SCMI_E_SUCCESS) {
-		ERROR("SCMI set power state command return 0x%x unexpected\n",
-				ret);
-		panic();
-	}
-}
-
-/*
- * Helper function to turn ON a CPU power domain and its parent power domains
- * if applicable.
- */
-void css_scp_on(u_register_t mpidr)
-{
-	int lvl = 0, ret, core_pos;
-	uint32_t scmi_pwr_state = 0;
-
-	for (; lvl <= PLAT_MAX_PWR_LVL; lvl++)
-		SCMI_SET_PWR_STATE_LVL(scmi_pwr_state, lvl,
-				scmi_power_state_on);
-
-	SCMI_SET_PWR_STATE_MAX_PWR_LVL(scmi_pwr_state, lvl - 1);
-
-	core_pos = plat_core_pos_by_mpidr(mpidr);
-	assert(core_pos >= 0 && core_pos < PLATFORM_CORE_COUNT);
-
-	ret = scmi_pwr_state_set(scmi_handle,
-		plat_css_core_pos_to_scmi_dmn_id_map[core_pos],
-		scmi_pwr_state);
-
-	if (ret != SCMI_E_QUEUED && ret != SCMI_E_SUCCESS) {
-		ERROR("SCMI set power state command return 0x%x unexpected\n",
-				ret);
-		panic();
-	}
-}
-
-/*
- * Helper function to get the power state of a power domain node as reported
- * by the SCP.
- */
-int css_scp_get_power_state(u_register_t mpidr, unsigned int power_level)
-{
-	int ret, cpu_idx;
-	uint32_t scmi_pwr_state = 0, lvl_state;
-
-	/* We don't support get power state at the system power domain level */
-	if ((power_level > PLAT_MAX_PWR_LVL) ||
-			(power_level == CSS_SYSTEM_PWR_DMN_LVL)) {
-		WARN("Invalid power level %u specified for SCMI get power state\n",
-				power_level);
-		return PSCI_E_INVALID_PARAMS;
-	}
-
-	cpu_idx = plat_core_pos_by_mpidr(mpidr);
-	assert(cpu_idx > -1);
-
-	ret = scmi_pwr_state_get(scmi_handle,
-		plat_css_core_pos_to_scmi_dmn_id_map[cpu_idx],
-		&scmi_pwr_state);
-
-	if (ret != SCMI_E_SUCCESS) {
-		WARN("SCMI get power state command return 0x%x unexpected\n",
-				ret);
-		return PSCI_E_INVALID_PARAMS;
-	}
-
-	/*
-	 * Find the maximum power level described in the get power state
-	 * command. If it is less than the requested power level, then assume
-	 * the requested power level is ON.
-	 */
-	if (SCMI_GET_PWR_STATE_MAX_PWR_LVL(scmi_pwr_state) < power_level)
-		return HW_ON;
-
-	lvl_state = SCMI_GET_PWR_STATE_LVL(scmi_pwr_state, power_level);
-	if (lvl_state == scmi_power_state_on)
-		return HW_ON;
-
-	assert((lvl_state == scmi_power_state_off) ||
-				(lvl_state == scmi_power_state_sleep));
-	return HW_OFF;
-}
-
-void __dead2 css_scp_system_off(int state)
-{
-	int ret;
-
-	/*
-	 * Disable GIC CPU interface to prevent pending interrupt from waking
-	 * up the AP from WFI.
-	 */
-	plat_arm_gic_cpuif_disable();
-
-	/*
-	 * Issue SCMI command. First issue a graceful
-	 * request and if that fails force the request.
-	 */
-	ret = scmi_sys_pwr_state_set(scmi_handle,
-			SCMI_SYS_PWR_FORCEFUL_REQ,
-			state);
-
-	if (ret != SCMI_E_SUCCESS) {
-		ERROR("SCMI system power state set 0x%x returns unexpected 0x%x\n",
-			state, ret);
-		panic();
-	}
-	wfi();
-	ERROR("CSS set power state: operation not handled.\n");
-	panic();
-}
-
-/*
- * Helper function to shutdown the system via SCMI.
- */
-void __dead2 css_scp_sys_shutdown(void)
-{
-	css_scp_system_off(SCMI_SYS_PWR_SHUTDOWN);
-}
-
-/*
- * Helper function to reset the system via SCMI.
- */
-void __dead2 css_scp_sys_reboot(void)
-{
-	css_scp_system_off(SCMI_SYS_PWR_COLD_RESET);
-}
-
-static int scmi_ap_core_init(scmi_channel_t *ch)
-{
-#if PROGRAMMABLE_RESET_ADDRESS
-	uint32_t version;
-	int ret;
-
-	ret = scmi_proto_version(ch, SCMI_AP_CORE_PROTO_ID, &version);
-	if (ret != SCMI_E_SUCCESS) {
-		WARN("SCMI AP core protocol version message failed\n");
-		return -1;
-	}
-
-	if (!is_scmi_version_compatible(SCMI_AP_CORE_PROTO_VER, version)) {
-		WARN("SCMI AP core protocol version 0x%x incompatible with driver version 0x%x\n",
-			version, SCMI_AP_CORE_PROTO_VER);
-		return -1;
-	}
-	INFO("SCMI AP core protocol version 0x%x detected\n", version);
-#endif
-	return 0;
-}
-
-void __init plat_arm_pwrc_setup(void)
-{
-	channel.info = plat_css_get_scmi_info();
-	channel.lock = ARM_SCMI_LOCK_GET_INSTANCE;
-	scmi_handle = scmi_init(&channel);
-	if (scmi_handle == NULL) {
-		ERROR("SCMI Initialization failed\n");
-		panic();
-	}
-	if (scmi_ap_core_init(&channel) < 0) {
-		ERROR("SCMI AP core protocol initialization failed\n");
-		panic();
-	}
-}
-
-/******************************************************************************
- * This function overrides the default definition for ARM platforms. Initialize
- * the SCMI driver, query capability via SCMI and modify the PSCI capability
- * based on that.
- *****************************************************************************/
-const plat_psci_ops_t *css_scmi_override_pm_ops(plat_psci_ops_t *ops)
-{
-	uint32_t msg_attr;
-	int ret;
-
-	assert(scmi_handle);
-
-	/* Check that power domain POWER_STATE_SET message is supported */
-	ret = scmi_proto_msg_attr(scmi_handle, SCMI_PWR_DMN_PROTO_ID,
-				SCMI_PWR_STATE_SET_MSG, &msg_attr);
-	if (ret != SCMI_E_SUCCESS) {
-		ERROR("Set power state command is not supported by SCMI\n");
-		panic();
-	}
-
-	/*
-	 * Don't support PSCI NODE_HW_STATE call if SCMI doesn't support
-	 * POWER_STATE_GET message.
-	 */
-	ret = scmi_proto_msg_attr(scmi_handle, SCMI_PWR_DMN_PROTO_ID,
-				SCMI_PWR_STATE_GET_MSG, &msg_attr);
-	if (ret != SCMI_E_SUCCESS)
-		ops->get_node_hw_state = NULL;
-
-	/* Check if the SCMI SYSTEM_POWER_STATE_SET message is supported */
-	ret = scmi_proto_msg_attr(scmi_handle, SCMI_SYS_PWR_PROTO_ID,
-				SCMI_SYS_PWR_STATE_SET_MSG, &msg_attr);
-	if (ret != SCMI_E_SUCCESS) {
-		/* System power management operations are not supported */
-		ops->system_off = NULL;
-		ops->system_reset = NULL;
-		ops->get_sys_suspend_power_state = NULL;
-	} else {
-		if (!(msg_attr & SCMI_SYS_PWR_SUSPEND_SUPPORTED)) {
-			/*
-			 * System power management protocol is available, but
-			 * it does not support SYSTEM SUSPEND.
-			 */
-			ops->get_sys_suspend_power_state = NULL;
-		}
-		if (!(msg_attr & SCMI_SYS_PWR_WARM_RESET_SUPPORTED)) {
-			/*
-			 * WARM reset is not available.
-			 */
-			ops->system_reset2 = NULL;
-		}
-	}
-
-	return ops;
-}
-
-int css_system_reset2(int is_vendor, int reset_type, u_register_t cookie)
-{
-	if (is_vendor || (reset_type != PSCI_RESET2_SYSTEM_WARM_RESET))
-		return PSCI_E_INVALID_PARAMS;
-
-	css_scp_system_off(SCMI_SYS_PWR_WARM_RESET);
-	/*
-	 * css_scp_system_off cannot return (it is a __dead function),
-	 * but css_system_reset2 has to return some value, even in
-	 * this case.
-	 */
-	return 0;
-}
-
-#if PROGRAMMABLE_RESET_ADDRESS
-void plat_arm_program_trusted_mailbox(uintptr_t address)
-{
-	int ret;
-
-	assert(scmi_handle);
-	ret = scmi_ap_core_set_reset_addr(scmi_handle, address,
-		SCMI_AP_CORE_LOCK_ATTR);
-	if (ret != SCMI_E_SUCCESS) {
-		ERROR("CSS: Failed to program reset address: %d\n", ret);
-		panic();
-	}
-}
-#endif
diff --git a/plat/arm/css/drivers/scp/css_pm_scpi.c b/plat/arm/css/drivers/scp/css_pm_scpi.c
deleted file mode 100644
index 7e22816..0000000
--- a/plat/arm/css/drivers/scp/css_pm_scpi.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include <assert.h>
-
-#include <arch_helpers.h>
-#include <common/debug.h>
-#include <drivers/arm/css/css_scpi.h>
-#include <plat/arm/common/plat_arm.h>
-#include <plat/arm/css/common/css_pm.h>
-
-#include "css_scp.h"
-
-/*
- * This file implements the SCP power management functions using SCPI protocol.
- */
-
-/*
- * Helper function to inform power down state to SCP.
- */
-void css_scp_suspend(const struct psci_power_state *target_state)
-{
-	uint32_t cluster_state = scpi_power_on;
-	uint32_t system_state = scpi_power_on;
-
-	/* Check if power down at system power domain level is requested */
-	if (css_system_pwr_state(target_state) == ARM_LOCAL_STATE_OFF)
-		system_state = scpi_power_retention;
-
-	/* Cluster is to be turned off, so disable coherency */
-	if (CSS_CLUSTER_PWR_STATE(target_state) == ARM_LOCAL_STATE_OFF)
-		cluster_state = scpi_power_off;
-
-	/*
-	 * Ask the SCP to power down the appropriate components depending upon
-	 * their state.
-	 */
-	scpi_set_css_power_state(read_mpidr_el1(),
-				 scpi_power_off,
-				 cluster_state,
-				 system_state);
-}
-
-/*
- * Helper function to turn off a CPU power domain and its parent power domains
- * if applicable. Since SCPI doesn't differentiate between OFF and suspend, we
- * call the suspend helper here.
- */
-void css_scp_off(const struct psci_power_state *target_state)
-{
-	css_scp_suspend(target_state);
-}
-
-/*
- * Helper function to turn ON a CPU power domain and its parent power domains
- * if applicable.
- */
-void css_scp_on(u_register_t mpidr)
-{
-	/*
-	 * SCP takes care of powering up parent power domains so we
-	 * only need to care about level 0
-	 */
-	scpi_set_css_power_state(mpidr, scpi_power_on, scpi_power_on,
-				 scpi_power_on);
-}
-
-/*
- * Helper function to get the power state of a power domain node as reported
- * by the SCP.
- */
-int css_scp_get_power_state(u_register_t mpidr, unsigned int power_level)
-{
-	int rc, element;
-	unsigned int cpu_state, cluster_state;
-
-	/*
-	 * The format of 'power_level' is implementation-defined, but 0 must
-	 * mean a CPU. We also allow 1 to denote the cluster
-	 */
-	if (power_level != ARM_PWR_LVL0 && power_level != ARM_PWR_LVL1)
-		return PSCI_E_INVALID_PARAMS;
-
-	/* Query SCP */
-	rc = scpi_get_css_power_state(mpidr, &cpu_state, &cluster_state);
-	if (rc != 0)
-		return PSCI_E_INVALID_PARAMS;
-
-	/* Map power states of CPU and cluster to expected PSCI return codes */
-	if (power_level == ARM_PWR_LVL0) {
-		/*
-		 * The CPU state returned by SCP is an 8-bit bit mask
-		 * corresponding to each CPU in the cluster
-		 */
-#if ARM_PLAT_MT
-		/*
-		 * The current SCPI driver only caters for single-threaded
-		 * platforms. Hence we ignore the thread ID (which is always 0)
-		 * for such platforms.
-		 */
-		element = (mpidr >> MPIDR_AFF1_SHIFT) & MPIDR_AFFLVL_MASK;
-#else
-		element = mpidr & MPIDR_AFFLVL_MASK;
-#endif  /* ARM_PLAT_MT */
-		return CSS_CPU_PWR_STATE(cpu_state, element) ==
-			CSS_CPU_PWR_STATE_ON ? HW_ON : HW_OFF;
-	} else {
-		assert(cluster_state == CSS_CLUSTER_PWR_STATE_ON ||
-				cluster_state == CSS_CLUSTER_PWR_STATE_OFF);
-		return cluster_state == CSS_CLUSTER_PWR_STATE_ON ? HW_ON :
-			HW_OFF;
-	}
-}
-
-/*
- * Helper function to shutdown the system via SCPI.
- */
-void __dead2 css_scp_sys_shutdown(void)
-{
-	uint32_t response;
-
-	/*
-	 * Disable GIC CPU interface to prevent pending interrupt
-	 * from waking up the AP from WFI.
-	 */
-	plat_arm_gic_cpuif_disable();
-
-	/* Send the power down request to the SCP */
-	response = scpi_sys_power_state(scpi_system_shutdown);
-
-	if (response != SCP_OK) {
-		ERROR("CSS System Off: SCP error %u.\n", response);
-		panic();
-	}
-	wfi();
-	ERROR("CSS System Off: operation not handled.\n");
-	panic();
-}
-
-/*
- * Helper function to reset the system via SCPI.
- */
-void __dead2 css_scp_sys_reboot(void)
-{
-	uint32_t response;
-
-	/*
-	 * Disable GIC CPU interface to prevent pending interrupt
-	 * from waking up the AP from WFI.
-	 */
-	plat_arm_gic_cpuif_disable();
-
-	/* Send the system reset request to the SCP */
-	response = scpi_sys_power_state(scpi_system_reboot);
-
-	if (response != SCP_OK) {
-		ERROR("CSS System Reset: SCP error %u.\n", response);
-		panic();
-	}
-	wfi();
-	ERROR("CSS System Reset: operation not handled.\n");
-	panic();
-}
diff --git a/plat/arm/css/drivers/scp/css_scp.h b/plat/arm/css/drivers/scp/css_scp.h
deleted file mode 100644
index f3c08c5..0000000
--- a/plat/arm/css/drivers/scp/css_scp.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#ifndef CSS_SCP_H
-#define CSS_SCP_H
-
-#include <stdint.h>
-
-#include <platform_def.h>
-
-#include <lib/cassert.h>
-
-/* Forward declarations */
-struct psci_power_state;
-
-/* API for power management by SCP */
-int css_system_reset2(int is_vendor, int reset_type, u_register_t cookie);
-void css_scp_suspend(const struct psci_power_state *target_state);
-void css_scp_off(const struct psci_power_state *target_state);
-void css_scp_on(u_register_t mpidr);
-int css_scp_get_power_state(u_register_t mpidr, unsigned int power_level);
-void __dead2 css_scp_sys_shutdown(void);
-void __dead2 css_scp_sys_reboot(void);
-void __dead2 css_scp_system_off(int state);
-
-/* API for SCP Boot Image transfer. Return 0 on success, -1 on error */
-int css_scp_boot_image_xfer(void *image, unsigned int image_size);
-
-/*
- * API to wait for SCP to signal till it's ready after booting the transferred
- * image.
- */
-int css_scp_boot_ready(void);
-
-#if CSS_LOAD_SCP_IMAGES
-
-/*
- * All CSS platforms load SCP_BL2/SCP_BL2U just below BL2 (this is where BL31
- * usually resides except when ARM_BL31_IN_DRAM is
- * set). Ensure that SCP_BL2/SCP_BL2U do not overflow into tb_fw_config.
- */
-CASSERT(SCP_BL2_LIMIT <= BL2_BASE, assert_scp_bl2_overwrite_bl2);
-CASSERT(SCP_BL2U_LIMIT <= BL2_BASE, assert_scp_bl2u_overwrite_bl2);
-
-CASSERT(SCP_BL2_BASE >= ARM_TB_FW_CONFIG_LIMIT, assert_scp_bl2_overflow);
-CASSERT(SCP_BL2U_BASE >= ARM_TB_FW_CONFIG_LIMIT, assert_scp_bl2u_overflow);
-#endif
-
-#endif /* CSS_SCP_H */
diff --git a/plat/arm/css/drivers/scp/css_sds.c b/plat/arm/css/drivers/scp/css_sds.c
deleted file mode 100644
index e3f6102..0000000
--- a/plat/arm/css/drivers/scp/css_sds.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (c) 2014-2017, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include <assert.h>
-#include <stdint.h>
-
-#include <arch_helpers.h>
-#include <common/debug.h>
-#include <drivers/delay_timer.h>
-#include <plat/common/platform.h>
-#include <platform_def.h>
-
-#include "css_scp.h"
-#include "../sds/sds.h"
-
-int css_scp_boot_image_xfer(void *image, unsigned int image_size)
-{
-	int ret;
-	unsigned int image_offset, image_flags;
-
-	ret = sds_init();
-	if (ret != SDS_OK) {
-		ERROR("SCP SDS initialization failed\n");
-		panic();
-	}
-
-	VERBOSE("Writing SCP image metadata\n");
-	image_offset = (uintptr_t) image - ARM_TRUSTED_SRAM_BASE;
-	ret = sds_struct_write(SDS_SCP_IMG_STRUCT_ID, SDS_SCP_IMG_ADDR_OFFSET,
-			&image_offset, SDS_SCP_IMG_ADDR_SIZE,
-			SDS_ACCESS_MODE_NON_CACHED);
-	if (ret != SDS_OK)
-		goto sds_fail;
-
-	ret = sds_struct_write(SDS_SCP_IMG_STRUCT_ID, SDS_SCP_IMG_SIZE_OFFSET,
-			&image_size, SDS_SCP_IMG_SIZE_SIZE,
-			SDS_ACCESS_MODE_NON_CACHED);
-	if (ret != SDS_OK)
-		goto sds_fail;
-
-	VERBOSE("Marking SCP image metadata as valid\n");
-	image_flags = SDS_SCP_IMG_VALID_FLAG_BIT;
-	ret = sds_struct_write(SDS_SCP_IMG_STRUCT_ID, SDS_SCP_IMG_FLAG_OFFSET,
-			&image_flags, SDS_SCP_IMG_FLAG_SIZE,
-			SDS_ACCESS_MODE_NON_CACHED);
-	if (ret != SDS_OK)
-		goto sds_fail;
-
-	return 0;
-sds_fail:
-	ERROR("SCP SDS write to SCP IMG struct failed\n");
-	panic();
-}
-
-/*
- * API to wait for SCP to signal till it's ready after booting the transferred
- * image.
- */
-int css_scp_boot_ready(void)
-{
-	uint32_t scp_feature_availability_flags;
-	int ret, retry = CSS_SCP_READY_10US_RETRIES;
-
-
-	VERBOSE("Waiting for SCP RAM to complete its initialization process\n");
-
-	/* Wait for the SCP RAM Firmware to complete its initialization process */
-	while (retry > 0) {
-		ret = sds_struct_read(SDS_FEATURE_AVAIL_STRUCT_ID, 0,
-				&scp_feature_availability_flags,
-				SDS_FEATURE_AVAIL_SIZE,
-				SDS_ACCESS_MODE_NON_CACHED);
-		if (ret == SDS_ERR_STRUCT_NOT_FINALIZED)
-			continue;
-
-		if (ret != SDS_OK) {
-			ERROR(" sds_struct_read failed\n");
-			panic();
-		}
-
-		if (scp_feature_availability_flags &
-				SDS_FEATURE_AVAIL_SCP_RAM_READY_BIT)
-			return 0;
-
-		udelay(10);
-		retry--;
-	}
-
-	ERROR("Timeout of %d ms expired waiting for SCP RAM Ready flag\n",
-			CSS_SCP_READY_10US_RETRIES/100);
-
-	plat_panic_handler();
-}