diff --git a/bl2/aarch32/bl2_entrypoint.S b/bl2/aarch32/bl2_entrypoint.S index e6fa5b988..d215f484b 100644 --- a/bl2/aarch32/bl2_entrypoint.S +++ b/bl2/aarch32/bl2_entrypoint.S @@ -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 */ @@ -26,12 +26,14 @@ vector_base bl2_vector_table func bl2_entrypoint /*--------------------------------------------- - * Save from r1 the extents of the trusted ram - * available to BL2 for future use. - * r0 is not currently used. + * Save arguments x0 - x3 from BL1 for future + * use. * --------------------------------------------- */ - mov r11, r1 + mov r9, r0 + mov r10, r1 + mov r11, r2 + mov r12, r3 /* --------------------------------------------- * Set the exception vector to something sane. @@ -111,8 +113,11 @@ func bl2_entrypoint * specific early arch. setup e.g. mmu setup * --------------------------------------------- */ - mov r0, r11 - bl bl2_early_platform_setup + mov r0, r9 + mov r1, r10 + mov r2, r11 + mov r3, r12 + bl bl2_early_platform_setup2 bl bl2_plat_arch_setup /* --------------------------------------------- diff --git a/bl2/aarch64/bl2_entrypoint.S b/bl2/aarch64/bl2_entrypoint.S index 3ab8b5abc..bc8cbfd65 100644 --- a/bl2/aarch64/bl2_entrypoint.S +++ b/bl2/aarch64/bl2_entrypoint.S @@ -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 */ @@ -15,12 +15,14 @@ func bl2_entrypoint /*--------------------------------------------- - * Save from x1 the extents of the tzram - * available to BL2 for future use. - * x0 is not currently used. + * Save arguments x0 - x3 from BL1 for future + * use. * --------------------------------------------- */ - mov x20, x1 + mov x20, x0 + mov x21, x1 + mov x22, x2 + mov x23, x3 /* --------------------------------------------- * Set the exception vector to something sane. @@ -103,7 +105,11 @@ func bl2_entrypoint * --------------------------------------------- */ mov x0, x20 - bl bl2_early_platform_setup + mov x1, x21 + mov x2, x22 + mov x3, x23 + bl bl2_early_platform_setup2 + bl bl2_plat_arch_setup /* --------------------------------------------- diff --git a/bl31/aarch64/bl31_entrypoint.S b/bl31/aarch64/bl31_entrypoint.S index 419927d8e..924f295af 100644 --- a/bl31/aarch64/bl31_entrypoint.S +++ b/bl31/aarch64/bl31_entrypoint.S @@ -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 */ @@ -23,13 +23,13 @@ func bl31_entrypoint #if !RESET_TO_BL31 /* --------------------------------------------------------------- - * Preceding bootloader has populated x0 with a pointer to a - * 'bl31_params' structure & x1 with a pointer to platform - * specific structure + * Stash the previous bootloader arguments x0 - x3 for later use. * --------------------------------------------------------------- */ mov x20, x0 mov x21, x1 + mov x22, x2 + mov x23, x3 /* --------------------------------------------------------------------- * For !RESET_TO_BL31 systems, only the primary CPU ever reaches @@ -47,13 +47,6 @@ func bl31_entrypoint _init_memory=0 \ _init_c_runtime=1 \ _exception_vectors=runtime_exceptions - - /* --------------------------------------------------------------------- - * Relay the previous bootloader's arguments to the platform layer - * --------------------------------------------------------------------- - */ - mov x0, x20 - mov x1, x21 #else /* --------------------------------------------------------------------- * For RESET_TO_BL31 systems which have a programmable reset address, @@ -75,15 +68,20 @@ func bl31_entrypoint * arguments passed to the platform layer to reflect that. * --------------------------------------------------------------------- */ - mov x0, 0 - mov x1, 0 + mov x20, 0 + mov x21, 0 + mov x22, 0 + mov x23, 0 #endif /* RESET_TO_BL31 */ - /* --------------------------------------------- * Perform platform specific early arch. setup * --------------------------------------------- */ - bl bl31_early_platform_setup + mov x0, x20 + mov x1, x21 + mov x2, x22 + mov x3, x23 + bl bl31_early_platform_setup2 bl bl31_plat_arch_setup /* --------------------------------------------- diff --git a/bl32/sp_min/aarch32/entrypoint.S b/bl32/sp_min/aarch32/entrypoint.S index e7528d38e..3dd236962 100644 --- a/bl32/sp_min/aarch32/entrypoint.S +++ b/bl32/sp_min/aarch32/entrypoint.S @@ -64,8 +64,10 @@ func sp_min_entrypoint * specific structure * --------------------------------------------------------------- */ - mov r11, r0 - mov r12, r1 + mov r9, r0 + mov r10, r1 + mov r11, r2 + mov r12, r3 /* --------------------------------------------------------------------- * For !RESET_TO_SP_MIN systems, only the primary CPU ever reaches @@ -88,8 +90,6 @@ func sp_min_entrypoint * Relay the previous bootloader's arguments to the platform layer * --------------------------------------------------------------------- */ - mov r0, r11 - mov r1, r12 #else /* --------------------------------------------------------------------- * For RESET_TO_SP_MIN systems which have a programmable reset address, @@ -111,15 +111,22 @@ func sp_min_entrypoint * Zero the arguments passed to the platform layer to reflect that. * --------------------------------------------------------------------- */ - mov r0, #0 - mov r1, #0 + mov r9, #0 + mov r10, #0 + mov r11, #0 + mov r12, #0 + #endif /* RESET_TO_SP_MIN */ #if SP_MIN_WITH_SECURE_FIQ route_fiq_to_sp_min r4 #endif - bl sp_min_early_platform_setup + mov r0, r9 + mov r1, r10 + mov r2, r11 + mov r3, r12 + bl sp_min_early_platform_setup2 bl sp_min_plat_arch_setup /* Jump to the main function */ diff --git a/include/bl32/sp_min/platform_sp_min.h b/include/bl32/sp_min/platform_sp_min.h index 6c7e0cc0c..8f6a82d90 100644 --- a/include/bl32/sp_min/platform_sp_min.h +++ b/include/bl32/sp_min/platform_sp_min.h @@ -10,8 +10,12 @@ /******************************************************************************* * Mandatory SP_MIN functions ******************************************************************************/ +#if !ERROR_DEPRECATED void sp_min_early_platform_setup(void *from_bl2, void *plat_params_from_bl2); +#endif +void sp_min_early_platform_setup2(u_register_t arg0, u_register_t arg1, + u_register_t arg2, u_register_t arg3); void sp_min_platform_setup(void); void sp_min_plat_runtime_setup(void); void sp_min_plat_arch_setup(void); diff --git a/include/plat/common/platform.h b/include/plat/common/platform.h index 5c0672554..088c3c825 100644 --- a/include/plat/common/platform.h +++ b/include/plat/common/platform.h @@ -165,7 +165,10 @@ int bl1_plat_handle_post_image_load(unsigned int image_id); /******************************************************************************* * Mandatory BL2 functions ******************************************************************************/ +void bl2_early_platform_setup2(u_register_t arg0, u_register_t arg1, u_register_t arg2, u_register_t arg3); +#if !ERROR_DEPRECATED void bl2_early_platform_setup(struct meminfo *mem_layout); +#endif void bl2_plat_arch_setup(void); void bl2_platform_setup(void); struct meminfo *bl2_plat_sec_mem_layout(void); @@ -277,6 +280,7 @@ int bl2u_plat_handle_scp_bl2u(void); /******************************************************************************* * Mandatory BL31 functions ******************************************************************************/ +#if !ERROR_DEPRECATED #if LOAD_IMAGE_V2 void bl31_early_platform_setup(void *from_bl2, void *plat_params_from_bl2); @@ -284,6 +288,9 @@ void bl31_early_platform_setup(void *from_bl2, void bl31_early_platform_setup(struct bl31_params *from_bl2, void *plat_params_from_bl2); #endif +#endif /* ERROR_DEPRECATED */ +void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1, + u_register_t arg2, u_register_t arg3); void bl31_plat_arch_setup(void); void bl31_platform_setup(void); void bl31_plat_runtime_setup(void); diff --git a/plat/common/aarch32/plat_common.c b/plat/common/aarch32/plat_common.c index d3799d28b..c02386983 100644 --- a/plat/common/aarch32/plat_common.c +++ b/plat/common/aarch32/plat_common.c @@ -1,11 +1,12 @@ /* - * 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 */ #include #include +#include #include /* @@ -29,3 +30,14 @@ void sp_min_plat_runtime_setup(void) */ console_uninit(); } + +#if !ERROR_DEPRECATED + +#pragma weak sp_min_early_platform_setup2 + +void sp_min_early_platform_setup2(u_register_t arg0, u_register_t arg1, + u_register_t arg2, u_register_t arg3) +{ + sp_min_early_platform_setup((void *) arg0, (void *)arg1); +} +#endif diff --git a/plat/common/aarch64/plat_common.c b/plat/common/aarch64/plat_common.c index cfc0c4f41..080d35698 100644 --- a/plat/common/aarch64/plat_common.c +++ b/plat/common/aarch64/plat_common.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2017, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -20,6 +20,7 @@ #pragma weak bl31_plat_runtime_setup #if !ERROR_DEPRECATED #pragma weak plat_get_syscnt_freq2 +#pragma weak bl31_early_platform_setup2 #endif /* ERROR_DEPRECATED */ #if SDEI_SUPPORT @@ -70,6 +71,12 @@ unsigned int plat_get_syscnt_freq2(void) return (unsigned int)freq; } + +void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1, + u_register_t arg2, u_register_t arg3) +{ + bl31_early_platform_setup((void *) arg0, (void *)arg1); +} #endif /* ERROR_DEPRECATED */ #if SDEI_SUPPORT diff --git a/plat/common/plat_bl_common.c b/plat/common/plat_bl_common.c index 4123df38c..502bb5405 100644 --- a/plat/common/plat_bl_common.c +++ b/plat/common/plat_bl_common.c @@ -9,6 +9,7 @@ #include #include #include +#include /* * The following platform functions are weakly defined. The Platforms @@ -49,3 +50,17 @@ int plat_try_next_boot_source(void) { return 0; } + +#if !ERROR_DEPRECATED +#pragma weak bl2_early_platform_setup2 + +/* + * The following platform API implementation that allow compatibility for + * the older platform APIs. + */ +void bl2_early_platform_setup2(u_register_t arg0, u_register_t arg1, + u_register_t arg2, u_register_t arg3) +{ + bl2_early_platform_setup((void *)arg1); +} +#endif