xref: /rk3399_ARM-atf/plat/hisilicon/hikey/hikey_bl2_mem_params_desc.c (revision 3a0b28cb355148bcd0702b31e23003e5d1c5ea41)
12de0c5ccSVictor Chong /*
2a628b1abSHaojian Zhuang  * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
32de0c5ccSVictor Chong  *
42de0c5ccSVictor Chong  * SPDX-License-Identifier: BSD-3-Clause
52de0c5ccSVictor Chong  */
62de0c5ccSVictor Chong 
74368ae07SMichael Brandl #include <platform_def.h>	/* also includes hikey_def.h and hikey_layout.h*/
82de0c5ccSVictor Chong 
909d40e0eSAntonio Nino Diaz #include <common/bl_common.h>
1009d40e0eSAntonio Nino Diaz #include <common/desc_image_load.h>
1109d40e0eSAntonio Nino Diaz #include <plat/common/platform.h>
122de0c5ccSVictor Chong 
132de0c5ccSVictor Chong /*******************************************************************************
142de0c5ccSVictor Chong  * Following descriptor provides BL image/ep information that gets used
152de0c5ccSVictor Chong  * by BL2 to load the images and also subset of this information is
162de0c5ccSVictor Chong  * passed to next BL image. The image loading sequence is managed by
172de0c5ccSVictor Chong  * populating the images in required loading order. The image execution
182de0c5ccSVictor Chong  * sequence is managed by populating the `next_handoff_image_id` with
192de0c5ccSVictor Chong  * the next executable image id.
202de0c5ccSVictor Chong  ******************************************************************************/
212de0c5ccSVictor Chong static bl_mem_params_node_t bl2_mem_params_descs[] = {
222de0c5ccSVictor Chong #ifdef SCP_BL2_BASE
232de0c5ccSVictor Chong 	/* Fill SCP_BL2 related information if it exists */
242de0c5ccSVictor Chong 	{
252de0c5ccSVictor Chong 		.image_id = SCP_BL2_IMAGE_ID,
262de0c5ccSVictor Chong 
272de0c5ccSVictor Chong 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY,
282de0c5ccSVictor Chong 			VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE),
292de0c5ccSVictor Chong 
302de0c5ccSVictor Chong 		SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY,
31a628b1abSHaojian Zhuang 			VERSION_2, image_info_t, IMAGE_ATTRIB_PLAT_SETUP),
322de0c5ccSVictor Chong 		.image_info.image_base = SCP_BL2_BASE,
332de0c5ccSVictor Chong 		.image_info.image_max_size = SCP_BL2_SIZE,
342de0c5ccSVictor Chong 
352de0c5ccSVictor Chong 		.next_handoff_image_id = INVALID_IMAGE_ID,
362de0c5ccSVictor Chong 	},
372de0c5ccSVictor Chong #endif /* SCP_BL2_BASE */
382de0c5ccSVictor Chong 
392de0c5ccSVictor Chong #ifdef EL3_PAYLOAD_BASE
402de0c5ccSVictor Chong 	/* Fill EL3 payload related information (BL31 is EL3 payload)*/
412de0c5ccSVictor Chong 	{
422de0c5ccSVictor Chong 		.image_id = BL31_IMAGE_ID,
432de0c5ccSVictor Chong 
442de0c5ccSVictor Chong 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
452de0c5ccSVictor Chong 			VERSION_2, entry_point_info_t,
462de0c5ccSVictor Chong 			SECURE | EXECUTABLE | EP_FIRST_EXE),
472de0c5ccSVictor Chong 		.ep_info.pc = EL3_PAYLOAD_BASE,
482de0c5ccSVictor Chong 		.ep_info.spsr = SPSR_64(MODE_EL3, MODE_SP_ELX,
492de0c5ccSVictor Chong 			DISABLE_ALL_EXCEPTIONS),
502de0c5ccSVictor Chong 
512de0c5ccSVictor Chong 		SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
522de0c5ccSVictor Chong 			VERSION_2, image_info_t,
532de0c5ccSVictor Chong 			IMAGE_ATTRIB_PLAT_SETUP | IMAGE_ATTRIB_SKIP_LOADING),
542de0c5ccSVictor Chong 
552de0c5ccSVictor Chong 		.next_handoff_image_id = INVALID_IMAGE_ID,
562de0c5ccSVictor Chong 	},
572de0c5ccSVictor Chong 
582de0c5ccSVictor Chong #else /* EL3_PAYLOAD_BASE */
592de0c5ccSVictor Chong 
602de0c5ccSVictor Chong 	/* Fill BL31 related information */
612de0c5ccSVictor Chong 	{
622de0c5ccSVictor Chong 		.image_id = BL31_IMAGE_ID,
632de0c5ccSVictor Chong 
642de0c5ccSVictor Chong 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
652de0c5ccSVictor Chong 			VERSION_2, entry_point_info_t,
662de0c5ccSVictor Chong 			SECURE | EXECUTABLE | EP_FIRST_EXE),
672de0c5ccSVictor Chong 		.ep_info.pc = BL31_BASE,
682de0c5ccSVictor Chong 		.ep_info.spsr = SPSR_64(MODE_EL3, MODE_SP_ELX,
692de0c5ccSVictor Chong 			DISABLE_ALL_EXCEPTIONS),
702de0c5ccSVictor Chong #if DEBUG
712de0c5ccSVictor Chong 		.ep_info.args.arg1 = HIKEY_BL31_PLAT_PARAM_VAL,
722de0c5ccSVictor Chong #endif
732de0c5ccSVictor Chong 
742de0c5ccSVictor Chong 		SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
752de0c5ccSVictor Chong 			VERSION_2, image_info_t, IMAGE_ATTRIB_PLAT_SETUP),
762de0c5ccSVictor Chong 		.image_info.image_base = BL31_BASE,
772de0c5ccSVictor Chong 		.image_info.image_max_size = BL31_LIMIT - BL31_BASE,
782de0c5ccSVictor Chong 
792de0c5ccSVictor Chong # ifdef BL32_BASE
802de0c5ccSVictor Chong 		.next_handoff_image_id = BL32_IMAGE_ID,
812de0c5ccSVictor Chong # else
822de0c5ccSVictor Chong 		.next_handoff_image_id = BL33_IMAGE_ID,
832de0c5ccSVictor Chong # endif
842de0c5ccSVictor Chong 	},
852de0c5ccSVictor Chong 
862de0c5ccSVictor Chong # ifdef BL32_BASE
872de0c5ccSVictor Chong 	/* Fill BL32 related information */
882de0c5ccSVictor Chong 	{
892de0c5ccSVictor Chong 		.image_id = BL32_IMAGE_ID,
902de0c5ccSVictor Chong 
912de0c5ccSVictor Chong 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
922de0c5ccSVictor Chong 			VERSION_2, entry_point_info_t, SECURE | EXECUTABLE),
932de0c5ccSVictor Chong 		.ep_info.pc = BL32_BASE,
942de0c5ccSVictor Chong 
952de0c5ccSVictor Chong 		SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
962de0c5ccSVictor Chong 			VERSION_2, image_info_t, 0),
972de0c5ccSVictor Chong 		.image_info.image_base = BL32_BASE,
982de0c5ccSVictor Chong 		.image_info.image_max_size = BL32_LIMIT - BL32_BASE,
992de0c5ccSVictor Chong 
1002de0c5ccSVictor Chong 		.next_handoff_image_id = BL33_IMAGE_ID,
1012de0c5ccSVictor Chong 	},
102b16bb16eSVictor Chong 
103b16bb16eSVictor Chong 	/*
104b16bb16eSVictor Chong 	 * Fill BL32 external 1 related information.
105*e2fe267dSJorge Troncoso 	 * A typical use for extra1 image is with OP-TEE where it is the pager
106*e2fe267dSJorge Troncoso 	 * image.
107b16bb16eSVictor Chong 	 */
108b16bb16eSVictor Chong 	{
109b16bb16eSVictor Chong 		.image_id = BL32_EXTRA1_IMAGE_ID,
110b16bb16eSVictor Chong 
111b16bb16eSVictor Chong 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
112b16bb16eSVictor Chong 			VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE),
113b16bb16eSVictor Chong 
114b16bb16eSVictor Chong 		SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
115b16bb16eSVictor Chong 			VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
116b16bb16eSVictor Chong 		.image_info.image_base = BL32_BASE,
117b16bb16eSVictor Chong 		.image_info.image_max_size = BL32_LIMIT - BL32_BASE,
118b16bb16eSVictor Chong 
119b16bb16eSVictor Chong 		.next_handoff_image_id = INVALID_IMAGE_ID,
120b16bb16eSVictor Chong 	},
121b16bb16eSVictor Chong 
122b16bb16eSVictor Chong 	/*
123b16bb16eSVictor Chong 	 * Fill BL32 external 2 related information.
124*e2fe267dSJorge Troncoso 	 * A typical use for extra2 image is with OP-TEE where it is the paged
125*e2fe267dSJorge Troncoso 	 * image.
126b16bb16eSVictor Chong 	 */
127b16bb16eSVictor Chong 	{
128b16bb16eSVictor Chong 		.image_id = BL32_EXTRA2_IMAGE_ID,
129b16bb16eSVictor Chong 
130b16bb16eSVictor Chong 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
131b16bb16eSVictor Chong 			VERSION_2, entry_point_info_t, SECURE | NON_EXECUTABLE),
132b16bb16eSVictor Chong 
133b16bb16eSVictor Chong 		SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
134b16bb16eSVictor Chong 			VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
135b16bb16eSVictor Chong #ifdef SPD_opteed
136b16bb16eSVictor Chong 		.image_info.image_base = HIKEY_OPTEE_PAGEABLE_LOAD_BASE,
137b16bb16eSVictor Chong 		.image_info.image_max_size = HIKEY_OPTEE_PAGEABLE_LOAD_SIZE,
138b16bb16eSVictor Chong #endif
139b16bb16eSVictor Chong 		.next_handoff_image_id = INVALID_IMAGE_ID,
140b16bb16eSVictor Chong 	},
1412de0c5ccSVictor Chong # endif /* BL32_BASE */
1422de0c5ccSVictor Chong 
1432de0c5ccSVictor Chong 	/* Fill BL33 related information */
1442de0c5ccSVictor Chong 	{
1452de0c5ccSVictor Chong 		.image_id = BL33_IMAGE_ID,
1462de0c5ccSVictor Chong 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
1472de0c5ccSVictor Chong 			VERSION_2, entry_point_info_t, NON_SECURE | EXECUTABLE),
1482de0c5ccSVictor Chong # ifdef PRELOADED_BL33_BASE
1492de0c5ccSVictor Chong 		.ep_info.pc = PRELOADED_BL33_BASE,
1502de0c5ccSVictor Chong 
1512de0c5ccSVictor Chong 		SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
1522de0c5ccSVictor Chong 			VERSION_2, image_info_t, IMAGE_ATTRIB_SKIP_LOADING),
1532de0c5ccSVictor Chong # else
1542de0c5ccSVictor Chong 		.ep_info.pc = HIKEY_NS_IMAGE_OFFSET,
1552de0c5ccSVictor Chong 
1562de0c5ccSVictor Chong 		SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
1572de0c5ccSVictor Chong 			VERSION_2, image_info_t, 0),
1582de0c5ccSVictor Chong 		.image_info.image_base = HIKEY_NS_IMAGE_OFFSET,
1592de0c5ccSVictor Chong 		.image_info.image_max_size = 0x200000 /* 2MB */,
1602de0c5ccSVictor Chong # endif /* PRELOADED_BL33_BASE */
1612de0c5ccSVictor Chong 
1622de0c5ccSVictor Chong 		.next_handoff_image_id = INVALID_IMAGE_ID,
1632de0c5ccSVictor Chong 	}
1642de0c5ccSVictor Chong #endif /* EL3_PAYLOAD_BASE */
1652de0c5ccSVictor Chong };
1662de0c5ccSVictor Chong 
1672de0c5ccSVictor Chong REGISTER_BL_IMAGE_DESCS(bl2_mem_params_descs)
168