@ -1,5 +1,5 @@
/*
* Copyright ( c ) 2018 - 2019 , ARM Limited and Contributors . All rights reserved .
* Copyright ( c ) 2018 - 2020 , ARM Limited and Contributors . All rights reserved .
*
* SPDX - License - Identifier : BSD - 3 - Clause
*/
@ -13,8 +13,12 @@
# include <common/debug.h>
# include <drivers/arm/pl011.h>
# include <drivers/console.h>
# include <lib/mmio.h>
# include <lib/xlat_tables/xlat_tables.h>
# include <plat/common/platform.h>
# include <versal_def.h>
# include <plat_private.h>
# include <plat_startup.h>
static entry_point_info_t bl32_image_ep_info ;
static entry_point_info_t bl33_image_ep_info ;
@ -36,6 +40,18 @@ entry_point_info_t *bl31_plat_get_next_image_ep_info(uint32_t type)
return & bl32_image_ep_info ;
}
/*
* Set the build time defaults , if we can ' t find any config data .
*/
static inline void bl31_set_default_config ( void )
{
bl32_image_ep_info . pc = BL32_BASE ;
bl32_image_ep_info . spsr = arm_get_spsr_for_bl32_entry ( ) ;
bl33_image_ep_info . pc = plat_get_ns_image_entrypoint ( ) ;
bl33_image_ep_info . spsr = SPSR_64 ( MODE_EL2 , MODE_SP_ELX ,
DISABLE_ALL_EXCEPTIONS ) ;
}
/*
* Perform any BL31 specific platform actions . Here is an opportunity to copy
* parameters passed by the calling EL ( S - EL1 in BL2 & S - EL3 in BL1 ) before they
@ -45,6 +61,7 @@ entry_point_info_t *bl31_plat_get_next_image_ep_info(uint32_t type)
void bl31_early_platform_setup2 ( u_register_t arg0 , u_register_t arg1 ,
u_register_t arg2 , u_register_t arg3 )
{
uint64_t atf_handoff_addr ;
/* Initialize the console to provide early debug support */
int rc = console_pl011_register ( VERSAL_UART_BASE ,
@ -76,12 +93,15 @@ void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1,
SET_PARAM_HEAD ( & bl33_image_ep_info , PARAM_EP , VERSION_1 , 0 ) ;
SET_SECURITY_STATE ( bl33_image_ep_info . h . attr , NON_SECURE ) ;
/* use build time defaults in JTAG boot mode */
bl32_image_ep_info . pc = BL32_BASE ;
bl32_image_ep_info . spsr = 0 ;
bl33_image_ep_info . pc = plat_get_ns_image_entrypoint ( ) ;
bl33_image_ep_info . spsr = SPSR_64 ( MODE_EL2 , MODE_SP_ELX ,
DISABLE_ALL_EXCEPTIONS ) ;
atf_handoff_addr = mmio_read_32 ( PMC_GLOBAL_GLOB_GEN_STORAGE4 ) ;
enum fsbl_handoff ret = fsbl_atf_handover ( & bl32_image_ep_info ,
& bl33_image_ep_info ,
atf_handoff_addr ) ;
if ( ret = = FSBL_HANDOFF_NO_STRUCT ) {
bl31_set_default_config ( ) ;
} else if ( ret ! = FSBL_HANDOFF_SUCCESS ) {
panic ( ) ;
}
NOTICE ( " BL31: Secure code at 0x%lx \n " , bl32_image_ep_info . pc ) ;
NOTICE ( " BL31: Non secure code at 0x%lx \n " , bl33_image_ep_info . pc ) ;