From 0c306cc062611d71cd79a2cf2b7aac022c741165 Mon Sep 17 00:00:00 2001 From: Soby Mathew Date: Wed, 10 Jan 2018 15:59:31 +0000 Subject: [PATCH] ARM Platforms: Migrate to new BL handover interface This patch migrates the ARM Standard platforms to the new BL handover interface. The arm_blx_early_platform_setup() functions are also modified to take in 4 arguments. The `ARM_BL31_PLAT_PARAM_VAL` value passed to BL31 from BL2 is now in arg3 in preparation of dynamic configuration arguments. Change-Id: I33e8e61325a19e7a7127b1ff203c3b86921bf153 Signed-off-by: Soby Mathew --- include/plat/arm/common/plat_arm.h | 14 +++++----- plat/arm/board/fvp/fvp_bl2_setup.c | 7 +++-- plat/arm/board/fvp/fvp_bl31_setup.c | 13 +++------ plat/arm/board/fvp/sp_min/fvp_sp_min_setup.c | 8 +++--- .../common/aarch64/arm_bl2_mem_params_desc.c | 2 +- plat/arm/common/arm_bl2_setup.c | 10 +++---- plat/arm/common/arm_bl31_setup.c | 27 +++++++++---------- plat/arm/common/sp_min/arm_sp_min_setup.c | 14 +++++----- plat/arm/css/common/css_bl2_setup.c | 7 ++--- 9 files changed, 48 insertions(+), 54 deletions(-) diff --git a/include/plat/arm/common/plat_arm.h b/include/plat/arm/common/plat_arm.h index dfd7a204..44c8db93 100644 --- a/include/plat/arm/common/plat_arm.h +++ b/include/plat/arm/common/plat_arm.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -157,11 +157,11 @@ void arm_bl2u_plat_arch_setup(void); /* BL31 utility functions */ #if LOAD_IMAGE_V2 -void arm_bl31_early_platform_setup(void *from_bl2, - void *plat_params_from_bl2); +void arm_bl31_early_platform_setup(void *from_bl2, uintptr_t soc_fw_config, + uintptr_t hw_config, void *plat_params_from_bl2); #else -void arm_bl31_early_platform_setup(struct bl31_params *from_bl2, - void *plat_params_from_bl2); +void arm_bl31_early_platform_setup(struct bl31_params *from_bl2, uintptr_t soc_fw_config, + uintptr_t hw_config, void *plat_params_from_bl2); #endif /* LOAD_IMAGE_V2 */ void arm_bl31_platform_setup(void); void arm_bl31_plat_runtime_setup(void); @@ -171,8 +171,8 @@ void arm_bl31_plat_arch_setup(void); void arm_tsp_early_platform_setup(void); /* SP_MIN utility functions */ -void arm_sp_min_early_platform_setup(void *from_bl2, - void *plat_params_from_bl2); +void arm_sp_min_early_platform_setup(void *from_bl2, uintptr_t tos_fw_config, + uintptr_t hw_config, void *plat_params_from_bl2); void arm_sp_min_plat_runtime_setup(void); /* FIP TOC validity check */ diff --git a/plat/arm/board/fvp/fvp_bl2_setup.c b/plat/arm/board/fvp/fvp_bl2_setup.c index e9c4ab5c..4315c1f3 100644 --- a/plat/arm/board/fvp/fvp_bl2_setup.c +++ b/plat/arm/board/fvp/fvp_bl2_setup.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013-2015, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -12,10 +12,9 @@ #include "fvp_def.h" #include "fvp_private.h" - -void bl2_early_platform_setup(meminfo_t *mem_layout) +void bl2_early_platform_setup2(u_register_t arg0, u_register_t arg1, u_register_t arg2, u_register_t arg3) { - arm_bl2_early_platform_setup(mem_layout); + arm_bl2_early_platform_setup((meminfo_t *)arg1); /* Initialize the platform config for future decision making */ fvp_config_setup(); diff --git a/plat/arm/board/fvp/fvp_bl31_setup.c b/plat/arm/board/fvp/fvp_bl31_setup.c index 181c9231..640dea1b 100644 --- a/plat/arm/board/fvp/fvp_bl31_setup.c +++ b/plat/arm/board/fvp/fvp_bl31_setup.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -9,15 +9,10 @@ #include #include "fvp_private.h" -#if LOAD_IMAGE_V2 -void bl31_early_platform_setup(void *from_bl2, - void *plat_params_from_bl2) -#else -void bl31_early_platform_setup(bl31_params_t *from_bl2, - void *plat_params_from_bl2) -#endif +void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1, + u_register_t arg2, u_register_t arg3) { - arm_bl31_early_platform_setup(from_bl2, plat_params_from_bl2); + arm_bl31_early_platform_setup((void *)arg0, arg1, arg2, (void *)arg3); /* Initialize the platform config for future decision making */ fvp_config_setup(); diff --git a/plat/arm/board/fvp/sp_min/fvp_sp_min_setup.c b/plat/arm/board/fvp/sp_min/fvp_sp_min_setup.c index b9246367..6cced4dd 100644 --- a/plat/arm/board/fvp/sp_min/fvp_sp_min_setup.c +++ b/plat/arm/board/fvp/sp_min/fvp_sp_min_setup.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -7,10 +7,10 @@ #include #include "../fvp_private.h" -void sp_min_early_platform_setup(void *from_bl2, - void *plat_params_from_bl2) +void sp_min_early_platform_setup2(u_register_t arg0, u_register_t arg1, + u_register_t arg2, u_register_t arg3) { - arm_sp_min_early_platform_setup(from_bl2, plat_params_from_bl2); + arm_sp_min_early_platform_setup((void *)arg0, arg1, arg2, (void *)arg3); /* Initialize the platform config for future decision making */ fvp_config_setup(); diff --git a/plat/arm/common/aarch64/arm_bl2_mem_params_desc.c b/plat/arm/common/aarch64/arm_bl2_mem_params_desc.c index 4376119a..d3490eb5 100644 --- a/plat/arm/common/aarch64/arm_bl2_mem_params_desc.c +++ b/plat/arm/common/aarch64/arm_bl2_mem_params_desc.c @@ -68,7 +68,7 @@ static bl_mem_params_node_t bl2_mem_params_descs[] = { .ep_info.spsr = SPSR_64(MODE_EL3, MODE_SP_ELX, DISABLE_ALL_EXCEPTIONS), #if DEBUG - .ep_info.args.arg1 = ARM_BL31_PLAT_PARAM_VAL, + .ep_info.args.arg3 = ARM_BL31_PLAT_PARAM_VAL, #endif SET_STATIC_PARAM_HEAD(image_info, PARAM_EP, diff --git a/plat/arm/common/arm_bl2_setup.c b/plat/arm/common/arm_bl2_setup.c index 906ed197..14da1fd6 100644 --- a/plat/arm/common/arm_bl2_setup.c +++ b/plat/arm/common/arm_bl2_setup.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -39,7 +39,7 @@ static meminfo_t bl2_tzram_layout __aligned(CACHE_WRITEBACK_GRANULE); CASSERT(BL2_BASE >= (ARM_BL_RAM_BASE + BL1_MEMINFO_OFFSET), assert_bl2_base_overflows); /* Weak definitions may be overridden in specific ARM standard platform */ -#pragma weak bl2_early_platform_setup +#pragma weak bl2_early_platform_setup2 #pragma weak bl2_platform_setup #pragma weak bl2_plat_arch_setup #pragma weak bl2_plat_sec_mem_layout @@ -169,7 +169,7 @@ void bl2_plat_flush_bl31_params(void) struct entry_point_info *bl2_plat_get_bl31_ep_info(void) { #if DEBUG - bl31_params_mem.bl31_ep_info.args.arg1 = ARM_BL31_PLAT_PARAM_VAL; + bl31_params_mem.bl31_ep_info.args.arg3 = ARM_BL31_PLAT_PARAM_VAL; #endif return &bl31_params_mem.bl31_ep_info; @@ -194,9 +194,9 @@ void arm_bl2_early_platform_setup(meminfo_t *mem_layout) plat_arm_io_setup(); } -void bl2_early_platform_setup(meminfo_t *mem_layout) +void bl2_early_platform_setup2(u_register_t arg0, u_register_t arg1, u_register_t arg2, u_register_t arg3) { - arm_bl2_early_platform_setup(mem_layout); + arm_bl2_early_platform_setup((meminfo_t *)arg1); generic_delay_timer_init(); } diff --git a/plat/arm/common/arm_bl31_setup.c b/plat/arm/common/arm_bl31_setup.c index 8fba80b1..963c4d2b 100644 --- a/plat/arm/common/arm_bl31_setup.c +++ b/plat/arm/common/arm_bl31_setup.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -26,7 +26,7 @@ static entry_point_info_t bl33_image_ep_info; /* Weak definitions may be overridden in specific ARM standard platform */ -#pragma weak bl31_early_platform_setup +#pragma weak bl31_early_platform_setup2 #pragma weak bl31_platform_setup #pragma weak bl31_plat_arch_setup #pragma weak bl31_plat_get_next_image_ep_info @@ -64,11 +64,11 @@ entry_point_info_t *bl31_plat_get_next_image_ep_info(uint32_t type) * we are guaranteed to pick up good data. ******************************************************************************/ #if LOAD_IMAGE_V2 -void arm_bl31_early_platform_setup(void *from_bl2, - void *plat_params_from_bl2) +void arm_bl31_early_platform_setup(void *from_bl2, uintptr_t soc_fw_config, + uintptr_t hw_config, void *plat_params_from_bl2) #else -void arm_bl31_early_platform_setup(bl31_params_t *from_bl2, - void *plat_params_from_bl2) +void arm_bl31_early_platform_setup(bl31_params_t *from_bl2, uintptr_t soc_fw_config, + uintptr_t hw_config, void *plat_params_from_bl2) #endif { /* Initialize the console to provide early debug support */ @@ -152,6 +152,10 @@ void arm_bl31_early_platform_setup(bl31_params_t *from_bl2, assert(from_bl2->h.type == PARAM_BL31); assert(from_bl2->h.version >= VERSION_1); + /* Dynamic Config is not supported for LOAD_IMAGE_V1 */ + assert(soc_fw_config == 0); + assert(hw_config == 0); + /* * Copy BL32 (if populated by BL2) and BL33 entry point information. * They are stored in Secure RAM, in BL2's address space. @@ -164,15 +168,10 @@ void arm_bl31_early_platform_setup(bl31_params_t *from_bl2, #endif /* RESET_TO_BL31 */ } -#if LOAD_IMAGE_V2 -void bl31_early_platform_setup(void *from_bl2, - void *plat_params_from_bl2) -#else -void bl31_early_platform_setup(bl31_params_t *from_bl2, - void *plat_params_from_bl2) -#endif +void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1, + u_register_t arg2, u_register_t arg3) { - arm_bl31_early_platform_setup(from_bl2, plat_params_from_bl2); + arm_bl31_early_platform_setup((void *)arg0, arg1, arg2, (void *)arg3); /* * Initialize Interconnect for this cluster during cold boot. diff --git a/plat/arm/common/sp_min/arm_sp_min_setup.c b/plat/arm/common/sp_min/arm_sp_min_setup.c index c5408c8f..1776d46a 100644 --- a/plat/arm/common/sp_min/arm_sp_min_setup.c +++ b/plat/arm/common/sp_min/arm_sp_min_setup.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -18,7 +18,7 @@ static entry_point_info_t bl33_image_ep_info; /* Weak definitions may be overridden in specific ARM standard platform */ -#pragma weak sp_min_early_platform_setup +#pragma weak sp_min_early_platform_setup2 #pragma weak sp_min_platform_setup #pragma weak sp_min_plat_arch_setup @@ -48,8 +48,8 @@ entry_point_info_t *sp_min_plat_get_bl33_ep_info(void) /******************************************************************************* * Perform early platform setup. ******************************************************************************/ -void arm_sp_min_early_platform_setup(void *from_bl2, - void *plat_params_from_bl2) +void arm_sp_min_early_platform_setup(void *from_bl2, uintptr_t tos_fw_config, + uintptr_t hw_config, void *plat_params_from_bl2) { /* Initialize the console to provide early debug support */ console_init(PLAT_ARM_BOOT_UART_BASE, PLAT_ARM_BOOT_UART_CLK_IN_HZ, @@ -105,10 +105,10 @@ void arm_sp_min_early_platform_setup(void *from_bl2, } -void sp_min_early_platform_setup(void *from_bl2, - void *plat_params_from_bl2) +void sp_min_early_platform_setup2(u_register_t arg0, u_register_t arg1, + u_register_t arg2, u_register_t arg3) { - arm_sp_min_early_platform_setup(from_bl2, plat_params_from_bl2); + arm_sp_min_early_platform_setup((void *)arg0, arg1, arg2, (void *)arg3); /* * Initialize Interconnect for this cluster during cold boot. diff --git a/plat/arm/css/common/css_bl2_setup.c b/plat/arm/css/common/css_bl2_setup.c index b4aafd46..33e7b2ef 100644 --- a/plat/arm/css/common/css_bl2_setup.c +++ b/plat/arm/css/common/css_bl2_setup.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -60,9 +60,10 @@ int bl2_plat_handle_scp_bl2(image_info_t *scp_bl2_image_info) static unsigned int scp_boot_config; -void bl2_early_platform_setup(meminfo_t *mem_layout) +void bl2_early_platform_setup2(u_register_t arg0, u_register_t arg1, + u_register_t arg2, u_register_t arg3) { - arm_bl2_early_platform_setup(mem_layout); + arm_bl2_early_platform_setup((uintptr_t)arg0, (meminfo_t *)arg1); /* Save SCP Boot config before it gets overwritten by SCP_BL2 loading */ scp_boot_config = mmio_read_32(SCP_BOOT_CFG_ADDR); -- 2.30.2