diff options
author | Soby Mathew <soby.mathew@arm.com> | 2017-05-03 12:58:41 +0100 |
---|---|---|
committer | Soby Mathew <soby.mathew@arm.com> | 2017-07-06 10:09:56 +0100 |
commit | cdd3acf35ee958d64fd577be37dff5eb8afad492 (patch) | |
tree | 3443ecb519f3e51fbe3056950f2a5b9789f5dbef | |
parent | 7cefb56d4a1ade30bc50e4534b92f6335495f56d (diff) |
CSS: Reorganize the SCP Image transfer functionality
The SCP Boot Image is transferred to SCP during BL2 image load and authenticate
sequence. The Boot-Over-MHU (BOM) protocol is used as transport for this. After
the SCP boots using the transferred image, the AP CPU waits till the `READY`
message is received from SCP. This patch seperates the API for transport of
image from the wait for `READY` message and also moves the related files to
the `css/drivers` folder. The previous API `scp_bootloader_transfer` is
renamed to `css_scp_boot_image_xfer` to reflect the css naming convention.
This reorganisation also allows easier switch to a different transport
(eg: SCMI data transfer protocol) in future
Change-Id: I8a96f9c4616ffde6dbfdf7c18f6f6f8bfa40bbf0
Signed-off-by: Soby Mathew <soby.mathew@arm.com>
-rw-r--r-- | plat/arm/css/common/css_bl2_setup.c | 7 | ||||
-rw-r--r-- | plat/arm/css/common/css_bl2u_setup.c | 9 | ||||
-rw-r--r-- | plat/arm/css/common/css_common.mk | 4 | ||||
-rw-r--r-- | plat/arm/css/common/css_scp_bootloader.h | 12 | ||||
-rw-r--r-- | plat/arm/css/drivers/scp/css_bom_bootloader.c (renamed from plat/arm/css/common/css_scp_bootloader.c) | 13 | ||||
-rw-r--r-- | plat/arm/css/drivers/scp/css_scp.h | 24 | ||||
-rw-r--r-- | plat/arm/css/drivers/scpi/css_scpi.h | 10 |
7 files changed, 43 insertions, 36 deletions
diff --git a/plat/arm/css/common/css_bl2_setup.c b/plat/arm/css/common/css_bl2_setup.c index 73549aa0b..d9342e2ca 100644 --- a/plat/arm/css/common/css_bl2_setup.c +++ b/plat/arm/css/common/css_bl2_setup.c @@ -11,7 +11,7 @@ #include <plat_arm.h> #include <string.h> #include <utils.h> -#include "css_scp_bootloader.h" +#include "../drivers/scp/css_scp.h" /* Weak definition may be overridden in specific CSS based platform */ #if LOAD_IMAGE_V2 @@ -34,9 +34,12 @@ int bl2_plat_handle_scp_bl2(image_info_t *scp_bl2_image_info) INFO("BL2: Initiating SCP_BL2 transfer to SCP\n"); - ret = scp_bootloader_transfer((void *)scp_bl2_image_info->image_base, + ret = css_scp_boot_image_xfer((void *)scp_bl2_image_info->image_base, scp_bl2_image_info->image_size); + if (!ret) + ret = css_scp_boot_ready(); + if (ret == 0) INFO("BL2: SCP_BL2 transferred to SCP\n"); else diff --git a/plat/arm/css/common/css_bl2u_setup.c b/plat/arm/css/common/css_bl2u_setup.c index cc1875821..3b5d4233b 100644 --- a/plat/arm/css/common/css_bl2u_setup.c +++ b/plat/arm/css/common/css_bl2u_setup.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -7,7 +7,7 @@ #include <bl_common.h> #include <debug.h> #include <plat_arm.h> -#include "css_scp_bootloader.h" +#include "../drivers/scp/css_scp.h" /* Weak definition may be overridden in specific CSS based platform */ #pragma weak bl2u_plat_handle_scp_bl2u @@ -40,9 +40,12 @@ int bl2u_plat_handle_scp_bl2u(void) INFO("BL2U: Initiating SCP_BL2U transfer to SCP\n"); - ret = scp_bootloader_transfer((void *)scp_bl2u_image_info.image_base, + ret = css_scp_boot_image_xfer((void *)scp_bl2u_image_info.image_base, scp_bl2u_image_info.image_size); + if (!ret) + ret = css_scp_boot_ready(); + if (ret == 0) INFO("BL2U: SCP_BL2U transferred to SCP\n"); else diff --git a/plat/arm/css/common/css_common.mk b/plat/arm/css/common/css_common.mk index c2ae92150..9381e4cd2 100644 --- a/plat/arm/css/common/css_common.mk +++ b/plat/arm/css/common/css_common.mk @@ -56,8 +56,8 @@ ifeq (${CSS_LOAD_SCP_IMAGES},1) $(eval $(call FWU_FIP_ADD_IMG,SCP_BL2U,--scp-fwu-cfg)) endif - BL2U_SOURCES += plat/arm/css/common/css_scp_bootloader.c - BL2_SOURCES += plat/arm/css/common/css_scp_bootloader.c + BL2U_SOURCES += plat/arm/css/drivers/scp/css_bom_bootloader.c + BL2_SOURCES += plat/arm/css/drivers/scp/css_bom_bootloader.c endif # Enable option to detect whether the SCP ROM firmware in use predates version diff --git a/plat/arm/css/common/css_scp_bootloader.h b/plat/arm/css/common/css_scp_bootloader.h deleted file mode 100644 index 0d6a6a2a5..000000000 --- a/plat/arm/css/common/css_scp_bootloader.h +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright (c) 2014, ARM Limited and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -#ifndef __CSS_SCP_BOOTLOADER_H__ -#define __CSS_SCP_BOOTLOADER_H__ - -int scp_bootloader_transfer(void *image, unsigned int image_size); - -#endif /* __CSS_SCP_BOOTLOADER_H__ */ diff --git a/plat/arm/css/common/css_scp_bootloader.c b/plat/arm/css/drivers/scp/css_bom_bootloader.c index 3db5cf585..e4a44fe64 100644 --- a/plat/arm/css/common/css_scp_bootloader.c +++ b/plat/arm/css/drivers/scp/css_bom_bootloader.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2016, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2014-2017, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -10,9 +10,7 @@ #include <debug.h> #include <platform.h> #include <stdint.h> -#include "../drivers/scpi/css_mhu.h" -#include "../drivers/scpi/css_scpi.h" -#include "css_scp_bootloader.h" +#include "../scpi/css_mhu.h" /* ID of the MHU slot used for the BOM protocol */ #define BOM_MHU_SLOT_ID 0 @@ -88,7 +86,7 @@ static void scp_boot_message_end(void) mhu_secure_message_end(BOM_MHU_SLOT_ID); } -int scp_bootloader_transfer(void *image, unsigned int image_size) +int css_scp_boot_image_xfer(void *image, unsigned int image_size) { uint32_t response; uint32_t checksum; @@ -170,8 +168,5 @@ int scp_bootloader_transfer(void *image, unsigned int image_size) return -1; } - 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(); + return 0; } diff --git a/plat/arm/css/drivers/scp/css_scp.h b/plat/arm/css/drivers/scp/css_scp.h index 165226d28..183022cd6 100644 --- a/plat/arm/css/drivers/scp/css_scp.h +++ b/plat/arm/css/drivers/scp/css_scp.h @@ -7,13 +7,31 @@ #ifndef __CSS_SCP_H__ #define __CSS_SCP_H__ -#include <psci.h> +#include <types.h> +#include "../scpi/css_scpi.h" -void css_scp_suspend(const psci_power_state_t *target_state); -void css_scp_off(const psci_power_state_t *target_state); +/* Forward declarations */ +struct psci_power_state; + +/* API for power management by SCP */ +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); +/* API for SCP Boot Image transfer */ +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. + */ +static inline int css_scp_boot_ready(void) +{ + VERBOSE("Waiting for SCP to signal it is ready to go on\n"); + return scpi_wait_ready(); +} + #endif /* __CSS_SCP_H__ */ diff --git a/plat/arm/css/drivers/scpi/css_scpi.h b/plat/arm/css/drivers/scpi/css_scpi.h index 0e26c3df2..cdd02d4ba 100644 --- a/plat/arm/css/drivers/scpi/css_scpi.h +++ b/plat/arm/css/drivers/scpi/css_scpi.h @@ -97,11 +97,11 @@ typedef enum { scpi_system_reset = 2 } scpi_system_state_t; -extern int scpi_wait_ready(void); -extern void scpi_set_css_power_state(unsigned int mpidr, - scpi_power_state_t cpu_state, - scpi_power_state_t cluster_state, - scpi_power_state_t css_state); +int scpi_wait_ready(void); +void scpi_set_css_power_state(unsigned int mpidr, + scpi_power_state_t cpu_state, + scpi_power_state_t cluster_state, + scpi_power_state_t css_state); int scpi_get_css_power_state(unsigned int mpidr, unsigned int *cpu_state_p, unsigned int *cluster_state_p); uint32_t scpi_sys_power_state(scpi_system_state_t system_state); |