blob: 56f05eb185a9dee5f553c5cf8583103b9de67e93 [file] [log] [blame]
Yatharth Kocharede39cb2016-11-14 12:01:04 +00001/*
Dimitris Papastamos47bc2ba2017-06-14 14:47:36 +01002 * Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved.
Yatharth Kocharede39cb2016-11-14 12:01:04 +00003 *
dp-armfa3cf0b2017-05-03 09:38:09 +01004 * SPDX-License-Identifier: BSD-3-Clause
Yatharth Kocharede39cb2016-11-14 12:01:04 +00005 */
6
7#include <assert.h>
Antonio Nino Diaze0f90632018-12-14 00:18:21 +00008
9#include <common/bl_common.h>
10#include <common/desc_image_load.h>
11
Yatharth Kocharede39cb2016-11-14 12:01:04 +000012#include <plat_arm.h>
13
14#if JUNO_AARCH32_EL3_RUNTIME
15/*******************************************************************************
16 * This function changes the spsr for BL32 image to bypass
17 * the check in BL1 AArch64 exception handler. This is needed in the aarch32
18 * boot flow as the core comes up in aarch64 and to enter the BL32 image a warm
19 * reset in aarch32 state is required.
20 ******************************************************************************/
Daniel Boulby07d26872018-06-27 16:45:48 +010021int arm_bl2_plat_handle_post_image_load(unsigned int image_id)
Yatharth Kocharede39cb2016-11-14 12:01:04 +000022{
23 int err = arm_bl2_handle_post_image_load(image_id);
24
25 if (!err && (image_id == BL32_IMAGE_ID)) {
26 bl_mem_params_node_t *bl_mem_params = get_bl_mem_params_node(image_id);
27 assert(bl_mem_params);
28 bl_mem_params->ep_info.spsr = SPSR_64(MODE_EL3, MODE_SP_ELX,
29 DISABLE_ALL_EXCEPTIONS);
30 }
31
32 return err;
33}
Yatharth Kocharede39cb2016-11-14 12:01:04 +000034#endif /* JUNO_AARCH32_EL3_RUNTIME */