1 /* 2 * Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #include <bl_common.h> 8 #include <errno.h> 9 #include <plat_arm.h> 10 #include <platform.h> 11 #include <sp805.h> 12 #include <tbbr_img_def.h> 13 #include <v2m_def.h> 14 15 void juno_reset_to_aarch32_state(void); 16 17 /******************************************************************************* 18 * On JUNO update the arg2 with address of SCP_BL2U image info. 19 ******************************************************************************/ 20 void bl1_plat_set_ep_info(unsigned int image_id, 21 entry_point_info_t *ep_info) 22 { 23 if (image_id == BL2U_IMAGE_ID) { 24 image_desc_t *image_desc = bl1_plat_get_image_desc(SCP_BL2U_IMAGE_ID); 25 ep_info->args.arg2 = (unsigned long)&image_desc->image_info; 26 } 27 } 28 29 /******************************************************************************* 30 * On Juno clear SYS_NVFLAGS and wait for watchdog reset. 31 ******************************************************************************/ 32 __dead2 void bl1_plat_fwu_done(void *client_cookie, void *reserved) 33 { 34 unsigned int *nv_flags_clr = (unsigned int *) 35 (V2M_SYSREGS_BASE + V2M_SYS_NVFLAGSCLR); 36 unsigned int *nv_flags_ptr = (unsigned int *) 37 (V2M_SYSREGS_BASE + V2M_SYS_NVFLAGS); 38 39 /* Clear the NV flags register. */ 40 *nv_flags_clr = *nv_flags_ptr; 41 42 while (1) 43 wfi(); 44 } 45 46 #if JUNO_AARCH32_EL3_RUNTIME 47 void bl1_plat_prepare_exit(entry_point_info_t *ep_info) 48 { 49 #if !ARM_DISABLE_TRUSTED_WDOG 50 /* Disable watchdog before leaving BL1 */ 51 sp805_stop(ARM_SP805_TWDG_BASE); 52 #endif 53 54 juno_reset_to_aarch32_state(); 55 } 56 #endif /* JUNO_AARCH32_EL3_RUNTIME */ 57