blob: 836a67255d428025a077f6ef63a77c48038d3f61 [file] [log] [blame]
Yatharth Kochar736a3bf2015-10-11 14:14:55 +01001/*
Yatharth Kocharede39cb2016-11-14 12:01:04 +00002 * Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved.
Yatharth Kochar736a3bf2015-10-11 14:14:55 +01003 *
dp-armfa3cf0b2017-05-03 09:38:09 +01004 * SPDX-License-Identifier: BSD-3-Clause
Yatharth Kochar736a3bf2015-10-11 14:14:55 +01005 */
6
7#include <bl_common.h>
8#include <errno.h>
Yatharth Kochar736a3bf2015-10-11 14:14:55 +01009#include <plat_arm.h>
Isla Mitchelld2548792017-07-14 10:48:25 +010010#include <platform.h>
Yatharth Kocharede39cb2016-11-14 12:01:04 +000011#include <sp805.h>
Yatharth Kochar736a3bf2015-10-11 14:14:55 +010012#include <tbbr_img_def.h>
13#include <v2m_def.h>
14
Yatharth Kocharede39cb2016-11-14 12:01:04 +000015void juno_reset_to_aarch32_state(void);
16
Yatharth Kochar736a3bf2015-10-11 14:14:55 +010017/*******************************************************************************
18 * On JUNO update the arg2 with address of SCP_BL2U image info.
19 ******************************************************************************/
20void 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 ******************************************************************************/
Dan Handley89f8f332015-12-15 14:28:24 +000032__dead2 void bl1_plat_fwu_done(void *client_cookie, void *reserved)
Yatharth Kochar736a3bf2015-10-11 14:14:55 +010033{
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}
Yatharth Kocharede39cb2016-11-14 12:01:04 +000045
46#if JUNO_AARCH32_EL3_RUNTIME
47void 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 */