14d9f825aSVenkatesh Yadav Abbarapu /* 2619bc13eSMichal Simek * Copyright (c) 2014-2020, Arm Limited and Contributors. All rights reserved. 3c8be2240SPrasad Kummari * Copyright (c) 2023, Advanced Micro Devices, Inc. All rights reserved. 44d9f825aSVenkatesh Yadav Abbarapu * 54d9f825aSVenkatesh Yadav Abbarapu * SPDX-License-Identifier: BSD-3-Clause 64d9f825aSVenkatesh Yadav Abbarapu */ 74d9f825aSVenkatesh Yadav Abbarapu 84d9f825aSVenkatesh Yadav Abbarapu #include <assert.h> 94ce3e99aSScott Branden #include <inttypes.h> 104ce3e99aSScott Branden #include <stdint.h> 114d9f825aSVenkatesh Yadav Abbarapu 124d9f825aSVenkatesh Yadav Abbarapu #include <arch_helpers.h> 134d9f825aSVenkatesh Yadav Abbarapu #include <common/debug.h> 144d9f825aSVenkatesh Yadav Abbarapu #include <plat_startup.h> 154d9f825aSVenkatesh Yadav Abbarapu 164d9f825aSVenkatesh Yadav Abbarapu 174d9f825aSVenkatesh Yadav Abbarapu /* 18b9d26cd3SPrasad Kummari * HandoffParams 194d9f825aSVenkatesh Yadav Abbarapu * Parameter bitfield encoding 204d9f825aSVenkatesh Yadav Abbarapu * ----------------------------------------------------------------------------- 214d9f825aSVenkatesh Yadav Abbarapu * Exec State 0 0 -> Aarch64, 1-> Aarch32 224d9f825aSVenkatesh Yadav Abbarapu * endianness 1 0 -> LE, 1 -> BE 234d9f825aSVenkatesh Yadav Abbarapu * secure (TZ) 2 0 -> Non secure, 1 -> secure 244d9f825aSVenkatesh Yadav Abbarapu * EL 3:4 00 -> EL0, 01 -> EL1, 10 -> EL2, 11 -> EL3 254d9f825aSVenkatesh Yadav Abbarapu * CPU# 5:6 00 -> A53_0, 01 -> A53_1, 10 -> A53_2, 11 -> A53_3 2601c8c6a5SAkshay Belsare * Reserved 7:10 Reserved 2701c8c6a5SAkshay Belsare * Cluster# 11:12 00 -> Cluster 0, 01 -> Cluster 1, 10 -> Cluster 2, 2801c8c6a5SAkshay Belsare * 11 -> Cluster (Applicable for Versal NET only). 2901c8c6a5SAkshay Belsare * Reserved 13:16 Reserved 304d9f825aSVenkatesh Yadav Abbarapu */ 314d9f825aSVenkatesh Yadav Abbarapu 32b9d26cd3SPrasad Kummari #define XBL_FLAGS_ESTATE_SHIFT 0U 33b9d26cd3SPrasad Kummari #define XBL_FLAGS_ESTATE_MASK (1U << XBL_FLAGS_ESTATE_SHIFT) 34b9d26cd3SPrasad Kummari #define XBL_FLAGS_ESTATE_A64 0U 35b9d26cd3SPrasad Kummari #define XBL_FLAGS_ESTATE_A32 1U 364d9f825aSVenkatesh Yadav Abbarapu 37b9d26cd3SPrasad Kummari #define XBL_FLAGS_ENDIAN_SHIFT 1U 38b9d26cd3SPrasad Kummari #define XBL_FLAGS_ENDIAN_MASK (1U << XBL_FLAGS_ENDIAN_SHIFT) 39b9d26cd3SPrasad Kummari #define XBL_FLAGS_ENDIAN_LE 0U 40b9d26cd3SPrasad Kummari #define XBL_FLAGS_ENDIAN_BE 1U 414d9f825aSVenkatesh Yadav Abbarapu 42b9d26cd3SPrasad Kummari #define XBL_FLAGS_TZ_SHIFT 2U 43b9d26cd3SPrasad Kummari #define XBL_FLAGS_TZ_MASK (1U << XBL_FLAGS_TZ_SHIFT) 44b9d26cd3SPrasad Kummari #define XBL_FLAGS_NON_SECURE 0U 45b9d26cd3SPrasad Kummari #define XBL_FLAGS_SECURE 1U 464d9f825aSVenkatesh Yadav Abbarapu 47b9d26cd3SPrasad Kummari #define XBL_FLAGS_EL_SHIFT 3U 48b9d26cd3SPrasad Kummari #define XBL_FLAGS_EL_MASK (3U << XBL_FLAGS_EL_SHIFT) 49b9d26cd3SPrasad Kummari #define XBL_FLAGS_EL0 0U 50b9d26cd3SPrasad Kummari #define XBL_FLAGS_EL1 1U 51b9d26cd3SPrasad Kummari #define XBL_FLAGS_EL2 2U 52b9d26cd3SPrasad Kummari #define XBL_FLAGS_EL3 3U 534d9f825aSVenkatesh Yadav Abbarapu 54b9d26cd3SPrasad Kummari #define XBL_FLAGS_CPU_SHIFT 5U 55b9d26cd3SPrasad Kummari #define XBL_FLAGS_CPU_MASK (3U << XBL_FLAGS_CPU_SHIFT) 56b9d26cd3SPrasad Kummari #define XBL_FLAGS_A53_0 0U 57b9d26cd3SPrasad Kummari #define XBL_FLAGS_A53_1 1U 58b9d26cd3SPrasad Kummari #define XBL_FLAGS_A53_2 2U 59b9d26cd3SPrasad Kummari #define XBL_FLAGS_A53_3 3U 604d9f825aSVenkatesh Yadav Abbarapu 6101c8c6a5SAkshay Belsare #if defined(PLAT_versal_net) 6201c8c6a5SAkshay Belsare #define XBL_FLAGS_CLUSTER_SHIFT 11U 6301c8c6a5SAkshay Belsare #define XBL_FLAGS_CLUSTER_MASK GENMASK(11, 12) 6401c8c6a5SAkshay Belsare 6501c8c6a5SAkshay Belsare #define XBL_FLAGS_CLUSTER_0 0U 6601c8c6a5SAkshay Belsare #endif /* PLAT_versal_net */ 6701c8c6a5SAkshay Belsare 684d9f825aSVenkatesh Yadav Abbarapu /** 69b9d26cd3SPrasad Kummari * get_xbl_cpu() - Get the target CPU for partition. 70de7ed953SPrasad Kummari * @partition: Pointer to partition struct. 714d9f825aSVenkatesh Yadav Abbarapu * 72b9d26cd3SPrasad Kummari * Return: XBL_FLAGS_A53_0, XBL_FLAGS_A53_1, XBL_FLAGS_A53_2 or XBL_FLAGS_A53_3. 734d9f825aSVenkatesh Yadav Abbarapu * 744d9f825aSVenkatesh Yadav Abbarapu */ 75b9d26cd3SPrasad Kummari static int32_t get_xbl_cpu(const struct xbl_partition *partition) 764d9f825aSVenkatesh Yadav Abbarapu { 77b9d26cd3SPrasad Kummari uint64_t flags = partition->flags & XBL_FLAGS_CPU_MASK; 784d9f825aSVenkatesh Yadav Abbarapu 79b9d26cd3SPrasad Kummari return flags >> XBL_FLAGS_CPU_SHIFT; 804d9f825aSVenkatesh Yadav Abbarapu } 814d9f825aSVenkatesh Yadav Abbarapu 824d9f825aSVenkatesh Yadav Abbarapu /** 83b9d26cd3SPrasad Kummari * get_xbl_el() - Get the target exception level for partition. 84de7ed953SPrasad Kummari * @partition: Pointer to partition struct. 854d9f825aSVenkatesh Yadav Abbarapu * 86b9d26cd3SPrasad Kummari * Return: XBL_FLAGS_EL0, XBL_FLAGS_EL1, XBL_FLAGS_EL2 or XBL_FLAGS_EL3. 874d9f825aSVenkatesh Yadav Abbarapu * 884d9f825aSVenkatesh Yadav Abbarapu */ 89b9d26cd3SPrasad Kummari static int32_t get_xbl_el(const struct xbl_partition *partition) 904d9f825aSVenkatesh Yadav Abbarapu { 91b9d26cd3SPrasad Kummari uint64_t flags = partition->flags & XBL_FLAGS_EL_MASK; 924d9f825aSVenkatesh Yadav Abbarapu 93b9d26cd3SPrasad Kummari return flags >> XBL_FLAGS_EL_SHIFT; 944d9f825aSVenkatesh Yadav Abbarapu } 954d9f825aSVenkatesh Yadav Abbarapu 964d9f825aSVenkatesh Yadav Abbarapu /** 97b9d26cd3SPrasad Kummari * get_xbl_ss() - Get the target security state for partition. 98de7ed953SPrasad Kummari * @partition: Pointer to partition struct. 994d9f825aSVenkatesh Yadav Abbarapu * 100b9d26cd3SPrasad Kummari * Return: XBL_FLAGS_NON_SECURE or XBL_FLAGS_SECURE. 1014d9f825aSVenkatesh Yadav Abbarapu * 1024d9f825aSVenkatesh Yadav Abbarapu */ 103b9d26cd3SPrasad Kummari static int32_t get_xbl_ss(const struct xbl_partition *partition) 1044d9f825aSVenkatesh Yadav Abbarapu { 105b9d26cd3SPrasad Kummari uint64_t flags = partition->flags & XBL_FLAGS_TZ_MASK; 1064d9f825aSVenkatesh Yadav Abbarapu 107b9d26cd3SPrasad Kummari return flags >> XBL_FLAGS_TZ_SHIFT; 1084d9f825aSVenkatesh Yadav Abbarapu } 1094d9f825aSVenkatesh Yadav Abbarapu 1104d9f825aSVenkatesh Yadav Abbarapu /** 111b9d26cd3SPrasad Kummari * get_xbl_endian() - Get the target endianness for partition. 112de7ed953SPrasad Kummari * @partition: Pointer to partition struct. 1134d9f825aSVenkatesh Yadav Abbarapu * 114de7ed953SPrasad Kummari * Return: SPSR_E_LITTLE or SPSR_E_BIG. 1154d9f825aSVenkatesh Yadav Abbarapu * 1164d9f825aSVenkatesh Yadav Abbarapu */ 117b9d26cd3SPrasad Kummari static int32_t get_xbl_endian(const struct xbl_partition *partition) 1184d9f825aSVenkatesh Yadav Abbarapu { 119b9d26cd3SPrasad Kummari uint64_t flags = partition->flags & XBL_FLAGS_ENDIAN_MASK; 1204d9f825aSVenkatesh Yadav Abbarapu 121b9d26cd3SPrasad Kummari flags >>= XBL_FLAGS_ENDIAN_SHIFT; 1224d9f825aSVenkatesh Yadav Abbarapu 123b9d26cd3SPrasad Kummari if (flags == XBL_FLAGS_ENDIAN_BE) { 1244d9f825aSVenkatesh Yadav Abbarapu return SPSR_E_BIG; 125eb0d2b17SVenkatesh Yadav Abbarapu } else { 1264d9f825aSVenkatesh Yadav Abbarapu return SPSR_E_LITTLE; 1274d9f825aSVenkatesh Yadav Abbarapu } 128eb0d2b17SVenkatesh Yadav Abbarapu } 1294d9f825aSVenkatesh Yadav Abbarapu 1304d9f825aSVenkatesh Yadav Abbarapu /** 131b9d26cd3SPrasad Kummari * get_xbl_estate() - Get the target execution state for partition. 132de7ed953SPrasad Kummari * @partition: Pointer to partition struct. 1334d9f825aSVenkatesh Yadav Abbarapu * 134b9d26cd3SPrasad Kummari * Return: XBL_FLAGS_ESTATE_A32 or XBL_FLAGS_ESTATE_A64. 1354d9f825aSVenkatesh Yadav Abbarapu * 1364d9f825aSVenkatesh Yadav Abbarapu */ 137b9d26cd3SPrasad Kummari static int32_t get_xbl_estate(const struct xbl_partition *partition) 1384d9f825aSVenkatesh Yadav Abbarapu { 139b9d26cd3SPrasad Kummari uint64_t flags = partition->flags & XBL_FLAGS_ESTATE_MASK; 1404d9f825aSVenkatesh Yadav Abbarapu 141b9d26cd3SPrasad Kummari return flags >> XBL_FLAGS_ESTATE_SHIFT; 1424d9f825aSVenkatesh Yadav Abbarapu } 1434d9f825aSVenkatesh Yadav Abbarapu 14401c8c6a5SAkshay Belsare #if defined(PLAT_versal_net) 14501c8c6a5SAkshay Belsare /** 14601c8c6a5SAkshay Belsare * get_xbl_cluster - Get the cluster number 14701c8c6a5SAkshay Belsare * @partition: pointer to the partition structure. 14801c8c6a5SAkshay Belsare * 14901c8c6a5SAkshay Belsare * Return: cluster number for the partition. 15001c8c6a5SAkshay Belsare */ 15101c8c6a5SAkshay Belsare static int32_t get_xbl_cluster(const struct xbl_partition *partition) 15201c8c6a5SAkshay Belsare { 15301c8c6a5SAkshay Belsare uint64_t flags = partition->flags & XBL_FLAGS_CLUSTER_MASK; 15401c8c6a5SAkshay Belsare 15501c8c6a5SAkshay Belsare return (int32_t)(flags >> XBL_FLAGS_CLUSTER_SHIFT); 15601c8c6a5SAkshay Belsare } 15701c8c6a5SAkshay Belsare #endif /* PLAT_versal_net */ 15801c8c6a5SAkshay Belsare 1594d9f825aSVenkatesh Yadav Abbarapu /** 160421893a0SPrasad Kummari * xbl_handover() - Populates the bl32 and bl33 image info structures. 161de7ed953SPrasad Kummari * @bl32: BL32 image info structure. 162de7ed953SPrasad Kummari * @bl33: BL33 image info structure. 163421893a0SPrasad Kummari * @handoff_addr: TF-A handoff address. 1644d9f825aSVenkatesh Yadav Abbarapu * 165b9d26cd3SPrasad Kummari * Process the handoff parameters from the XBL and populate the BL32 and BL33 1664d9f825aSVenkatesh Yadav Abbarapu * image info structures accordingly. 1674d9f825aSVenkatesh Yadav Abbarapu * 1684d9f825aSVenkatesh Yadav Abbarapu * Return: Return the status of the handoff. The value will be from the 169b9d26cd3SPrasad Kummari * xbl_handoff enum. 170de7ed953SPrasad Kummari * 1714d9f825aSVenkatesh Yadav Abbarapu */ 172b9d26cd3SPrasad Kummari enum xbl_handoff xbl_handover(entry_point_info_t *bl32, 1734d9f825aSVenkatesh Yadav Abbarapu entry_point_info_t *bl33, 174b9d26cd3SPrasad Kummari uint64_t handoff_addr) 1754d9f825aSVenkatesh Yadav Abbarapu { 176b9d26cd3SPrasad Kummari const struct xbl_handoff_params *HandoffParams; 177b9d26cd3SPrasad Kummari 178b9d26cd3SPrasad Kummari if (!handoff_addr) { 179b9d26cd3SPrasad Kummari WARN("BL31: No handoff structure passed\n"); 180b9d26cd3SPrasad Kummari return XBL_HANDOFF_NO_STRUCT; 1814d9f825aSVenkatesh Yadav Abbarapu } 1824d9f825aSVenkatesh Yadav Abbarapu 183b9d26cd3SPrasad Kummari HandoffParams = (struct xbl_handoff_params *)handoff_addr; 184b9d26cd3SPrasad Kummari if ((HandoffParams->magic[0] != 'X') || 185b9d26cd3SPrasad Kummari (HandoffParams->magic[1] != 'L') || 186b9d26cd3SPrasad Kummari (HandoffParams->magic[2] != 'N') || 187b9d26cd3SPrasad Kummari (HandoffParams->magic[3] != 'X')) { 188b9d26cd3SPrasad Kummari ERROR("BL31: invalid handoff structure at %" PRIx64 "\n", handoff_addr); 189b9d26cd3SPrasad Kummari return XBL_HANDOFF_INVAL_STRUCT; 1904d9f825aSVenkatesh Yadav Abbarapu } 1914d9f825aSVenkatesh Yadav Abbarapu 192c8be2240SPrasad Kummari VERBOSE("BL31: TF-A handoff params at:0x%" PRIx64 ", entries:%u\n", 193b9d26cd3SPrasad Kummari handoff_addr, HandoffParams->num_entries); 194b9d26cd3SPrasad Kummari if (HandoffParams->num_entries > XBL_MAX_PARTITIONS) { 195c8be2240SPrasad Kummari ERROR("BL31: TF-A handoff params: too many partitions (%u/%u)\n", 196b9d26cd3SPrasad Kummari HandoffParams->num_entries, XBL_MAX_PARTITIONS); 197b9d26cd3SPrasad Kummari return XBL_HANDOFF_TOO_MANY_PARTS; 1984d9f825aSVenkatesh Yadav Abbarapu } 1994d9f825aSVenkatesh Yadav Abbarapu 2004d9f825aSVenkatesh Yadav Abbarapu /* 2014d9f825aSVenkatesh Yadav Abbarapu * we loop over all passed entries but only populate two image structs 2024d9f825aSVenkatesh Yadav Abbarapu * (bl32, bl33). I.e. the last applicable images in the handoff 2034d9f825aSVenkatesh Yadav Abbarapu * structure will be used for the hand off 2044d9f825aSVenkatesh Yadav Abbarapu */ 205b9d26cd3SPrasad Kummari for (size_t i = 0; i < HandoffParams->num_entries; i++) { 2064d9f825aSVenkatesh Yadav Abbarapu entry_point_info_t *image; 207bfd7c881SVenkatesh Yadav Abbarapu int32_t target_estate, target_secure, target_cpu; 208bfd7c881SVenkatesh Yadav Abbarapu uint32_t target_endianness, target_el; 2094d9f825aSVenkatesh Yadav Abbarapu 2104ce3e99aSScott Branden VERBOSE("BL31: %zd: entry:0x%" PRIx64 ", flags:0x%" PRIx64 "\n", i, 211b9d26cd3SPrasad Kummari HandoffParams->partition[i].entry_point, 212b9d26cd3SPrasad Kummari HandoffParams->partition[i].flags); 2134d9f825aSVenkatesh Yadav Abbarapu 21401c8c6a5SAkshay Belsare #if defined(PLAT_versal_net) 21501c8c6a5SAkshay Belsare uint32_t target_cluster; 21601c8c6a5SAkshay Belsare 21701c8c6a5SAkshay Belsare target_cluster = get_xbl_cluster(&HandoffParams->partition[i]); 21801c8c6a5SAkshay Belsare if (target_cluster != XBL_FLAGS_CLUSTER_0) { 21901c8c6a5SAkshay Belsare WARN("BL31: invalid target Cluster (%i)\n", 22001c8c6a5SAkshay Belsare target_cluster); 22101c8c6a5SAkshay Belsare continue; 22201c8c6a5SAkshay Belsare } 22301c8c6a5SAkshay Belsare #endif /* PLAT_versal_net */ 22401c8c6a5SAkshay Belsare 225b9d26cd3SPrasad Kummari target_cpu = get_xbl_cpu(&HandoffParams->partition[i]); 226b9d26cd3SPrasad Kummari if (target_cpu != XBL_FLAGS_A53_0) { 2274d9f825aSVenkatesh Yadav Abbarapu WARN("BL31: invalid target CPU (%i)\n", target_cpu); 2284d9f825aSVenkatesh Yadav Abbarapu continue; 2294d9f825aSVenkatesh Yadav Abbarapu } 2304d9f825aSVenkatesh Yadav Abbarapu 231b9d26cd3SPrasad Kummari target_el = get_xbl_el(&HandoffParams->partition[i]); 232b9d26cd3SPrasad Kummari if ((target_el == XBL_FLAGS_EL3) || 233b9d26cd3SPrasad Kummari (target_el == XBL_FLAGS_EL0)) { 234a0a4d86cSAkshay Belsare WARN("BL31: invalid target exception level(%i)\n", 235a0a4d86cSAkshay Belsare target_el); 2364d9f825aSVenkatesh Yadav Abbarapu continue; 2374d9f825aSVenkatesh Yadav Abbarapu } 2384d9f825aSVenkatesh Yadav Abbarapu 239b9d26cd3SPrasad Kummari target_secure = get_xbl_ss(&HandoffParams->partition[i]); 240*8e9a5a51SNithin G if ((target_secure == XBL_FLAGS_SECURE) && 241*8e9a5a51SNithin G (target_el == XBL_FLAGS_EL2)) { 2424d9f825aSVenkatesh Yadav Abbarapu WARN("BL31: invalid security state (%i) for exception level (%i)\n", 2434d9f825aSVenkatesh Yadav Abbarapu target_secure, target_el); 2444d9f825aSVenkatesh Yadav Abbarapu continue; 2454d9f825aSVenkatesh Yadav Abbarapu } 2464d9f825aSVenkatesh Yadav Abbarapu 247b9d26cd3SPrasad Kummari target_estate = get_xbl_estate(&HandoffParams->partition[i]); 248b9d26cd3SPrasad Kummari target_endianness = get_xbl_endian(&HandoffParams->partition[i]); 2494d9f825aSVenkatesh Yadav Abbarapu 250b9d26cd3SPrasad Kummari if (target_secure == XBL_FLAGS_SECURE) { 2514d9f825aSVenkatesh Yadav Abbarapu image = bl32; 2524d9f825aSVenkatesh Yadav Abbarapu 253b9d26cd3SPrasad Kummari if (target_estate == XBL_FLAGS_ESTATE_A32) { 2544d9f825aSVenkatesh Yadav Abbarapu bl32->spsr = SPSR_MODE32(MODE32_svc, SPSR_T_ARM, 2554d9f825aSVenkatesh Yadav Abbarapu target_endianness, 2564d9f825aSVenkatesh Yadav Abbarapu DISABLE_ALL_EXCEPTIONS); 257eb0d2b17SVenkatesh Yadav Abbarapu } else { 2584d9f825aSVenkatesh Yadav Abbarapu bl32->spsr = SPSR_64(MODE_EL1, MODE_SP_ELX, 2594d9f825aSVenkatesh Yadav Abbarapu DISABLE_ALL_EXCEPTIONS); 260eb0d2b17SVenkatesh Yadav Abbarapu } 2614d9f825aSVenkatesh Yadav Abbarapu } else { 2624d9f825aSVenkatesh Yadav Abbarapu image = bl33; 2634d9f825aSVenkatesh Yadav Abbarapu 264b9d26cd3SPrasad Kummari if (target_estate == XBL_FLAGS_ESTATE_A32) { 265b9d26cd3SPrasad Kummari if (target_el == XBL_FLAGS_EL2) { 2664d9f825aSVenkatesh Yadav Abbarapu target_el = MODE32_hyp; 267eb0d2b17SVenkatesh Yadav Abbarapu } else { 2684d9f825aSVenkatesh Yadav Abbarapu target_el = MODE32_sys; 269eb0d2b17SVenkatesh Yadav Abbarapu } 2704d9f825aSVenkatesh Yadav Abbarapu 2714d9f825aSVenkatesh Yadav Abbarapu bl33->spsr = SPSR_MODE32(target_el, SPSR_T_ARM, 2724d9f825aSVenkatesh Yadav Abbarapu target_endianness, 2734d9f825aSVenkatesh Yadav Abbarapu DISABLE_ALL_EXCEPTIONS); 2744d9f825aSVenkatesh Yadav Abbarapu } else { 275b9d26cd3SPrasad Kummari if (target_el == XBL_FLAGS_EL2) { 2764d9f825aSVenkatesh Yadav Abbarapu target_el = MODE_EL2; 277eb0d2b17SVenkatesh Yadav Abbarapu } else { 2784d9f825aSVenkatesh Yadav Abbarapu target_el = MODE_EL1; 279eb0d2b17SVenkatesh Yadav Abbarapu } 2804d9f825aSVenkatesh Yadav Abbarapu 2814d9f825aSVenkatesh Yadav Abbarapu bl33->spsr = SPSR_64(target_el, MODE_SP_ELX, 2824d9f825aSVenkatesh Yadav Abbarapu DISABLE_ALL_EXCEPTIONS); 2834d9f825aSVenkatesh Yadav Abbarapu } 2844d9f825aSVenkatesh Yadav Abbarapu } 2854d9f825aSVenkatesh Yadav Abbarapu 2864ce3e99aSScott Branden VERBOSE("Setting up %s entry point to:%" PRIx64 ", el:%x\n", 287*8e9a5a51SNithin G (target_secure == XBL_FLAGS_SECURE) ? "BL32" : "BL33", 288b9d26cd3SPrasad Kummari HandoffParams->partition[i].entry_point, 2894d9f825aSVenkatesh Yadav Abbarapu target_el); 290b9d26cd3SPrasad Kummari image->pc = HandoffParams->partition[i].entry_point; 2914d9f825aSVenkatesh Yadav Abbarapu 292eb0d2b17SVenkatesh Yadav Abbarapu if (target_endianness == SPSR_E_BIG) { 2934d9f825aSVenkatesh Yadav Abbarapu EP_SET_EE(image->h.attr, EP_EE_BIG); 294eb0d2b17SVenkatesh Yadav Abbarapu } else { 2954d9f825aSVenkatesh Yadav Abbarapu EP_SET_EE(image->h.attr, EP_EE_LITTLE); 2964d9f825aSVenkatesh Yadav Abbarapu } 297eb0d2b17SVenkatesh Yadav Abbarapu } 2984d9f825aSVenkatesh Yadav Abbarapu 299b9d26cd3SPrasad Kummari return XBL_HANDOFF_SUCCESS; 3004d9f825aSVenkatesh Yadav Abbarapu } 301