xref: /rk3399_ARM-atf/plat/socionext/uniphier/uniphier_image_desc.c (revision d8e919c7b81a2739300912d6edbd3f929a136dbf)
1*d8e919c7SMasahiro Yamada /*
2*d8e919c7SMasahiro Yamada  * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
3*d8e919c7SMasahiro Yamada  *
4*d8e919c7SMasahiro Yamada  * SPDX-License-Identifier: BSD-3-Clause
5*d8e919c7SMasahiro Yamada  */
6*d8e919c7SMasahiro Yamada 
7*d8e919c7SMasahiro Yamada #include <arch.h>
8*d8e919c7SMasahiro Yamada #include <assert.h>
9*d8e919c7SMasahiro Yamada #include <desc_image_load.h>
10*d8e919c7SMasahiro Yamada #include <platform_def.h>
11*d8e919c7SMasahiro Yamada 
12*d8e919c7SMasahiro Yamada #include "uniphier.h"
13*d8e919c7SMasahiro Yamada 
14*d8e919c7SMasahiro Yamada static struct bl_mem_params_node uniphier_image_descs[] = {
15*d8e919c7SMasahiro Yamada 	{
16*d8e919c7SMasahiro Yamada 		.image_id = SCP_BL2_IMAGE_ID,
17*d8e919c7SMasahiro Yamada 
18*d8e919c7SMasahiro Yamada 		SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
19*d8e919c7SMasahiro Yamada 				      VERSION_2, image_info_t, 0),
20*d8e919c7SMasahiro Yamada 		.image_info.image_base = UNIPHIER_SCP_BASE,
21*d8e919c7SMasahiro Yamada 		.image_info.image_max_size = UNIPHIER_SCP_MAX_SIZE,
22*d8e919c7SMasahiro Yamada 
23*d8e919c7SMasahiro Yamada 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
24*d8e919c7SMasahiro Yamada 				      VERSION_2, entry_point_info_t,
25*d8e919c7SMasahiro Yamada 				      NON_SECURE | NON_EXECUTABLE),
26*d8e919c7SMasahiro Yamada 
27*d8e919c7SMasahiro Yamada 		.next_handoff_image_id = INVALID_IMAGE_ID,
28*d8e919c7SMasahiro Yamada 	},
29*d8e919c7SMasahiro Yamada 	{
30*d8e919c7SMasahiro Yamada 		.image_id = BL31_IMAGE_ID,
31*d8e919c7SMasahiro Yamada 
32*d8e919c7SMasahiro Yamada 		SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
33*d8e919c7SMasahiro Yamada 				      VERSION_2, image_info_t, 0),
34*d8e919c7SMasahiro Yamada 		.image_info.image_base = BL31_BASE,
35*d8e919c7SMasahiro Yamada 		.image_info.image_max_size = BL31_LIMIT - BL31_BASE,
36*d8e919c7SMasahiro Yamada 
37*d8e919c7SMasahiro Yamada 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
38*d8e919c7SMasahiro Yamada 				      VERSION_2, entry_point_info_t,
39*d8e919c7SMasahiro Yamada 				      SECURE | EXECUTABLE | EP_FIRST_EXE),
40*d8e919c7SMasahiro Yamada 		.ep_info.pc = BL31_BASE,
41*d8e919c7SMasahiro Yamada 		.ep_info.spsr = SPSR_64(MODE_EL3, MODE_SP_ELX,
42*d8e919c7SMasahiro Yamada 					DISABLE_ALL_EXCEPTIONS),
43*d8e919c7SMasahiro Yamada 
44*d8e919c7SMasahiro Yamada #ifdef UNIPHIER_LOAD_BL32
45*d8e919c7SMasahiro Yamada 		.next_handoff_image_id = BL32_IMAGE_ID,
46*d8e919c7SMasahiro Yamada #else
47*d8e919c7SMasahiro Yamada 		.next_handoff_image_id = BL33_IMAGE_ID,
48*d8e919c7SMasahiro Yamada #endif
49*d8e919c7SMasahiro Yamada 	},
50*d8e919c7SMasahiro Yamada #ifdef UNIPHIER_LOAD_BL32
51*d8e919c7SMasahiro Yamada 	{
52*d8e919c7SMasahiro Yamada 		.image_id = BL32_IMAGE_ID,
53*d8e919c7SMasahiro Yamada 
54*d8e919c7SMasahiro Yamada 		SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
55*d8e919c7SMasahiro Yamada 				      VERSION_2, image_info_t, 0),
56*d8e919c7SMasahiro Yamada 		.image_info.image_base = BL32_BASE,
57*d8e919c7SMasahiro Yamada 		.image_info.image_max_size = BL32_LIMIT - BL32_BASE,
58*d8e919c7SMasahiro Yamada 
59*d8e919c7SMasahiro Yamada 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
60*d8e919c7SMasahiro Yamada 				      VERSION_2, entry_point_info_t,
61*d8e919c7SMasahiro Yamada 				      SECURE | EXECUTABLE),
62*d8e919c7SMasahiro Yamada 		.ep_info.pc = BL32_BASE,
63*d8e919c7SMasahiro Yamada 		.ep_info.spsr = SPSR_64(MODE_EL3, MODE_SP_ELX,
64*d8e919c7SMasahiro Yamada 					DISABLE_ALL_EXCEPTIONS),
65*d8e919c7SMasahiro Yamada 
66*d8e919c7SMasahiro Yamada 		.next_handoff_image_id = BL33_IMAGE_ID,
67*d8e919c7SMasahiro Yamada 	},
68*d8e919c7SMasahiro Yamada #endif
69*d8e919c7SMasahiro Yamada 	{
70*d8e919c7SMasahiro Yamada 		.image_id = BL33_IMAGE_ID,
71*d8e919c7SMasahiro Yamada 
72*d8e919c7SMasahiro Yamada 		SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
73*d8e919c7SMasahiro Yamada 				      VERSION_2, image_info_t, 0),
74*d8e919c7SMasahiro Yamada 		.image_info.image_base = UNIPHIER_BL33_BASE,
75*d8e919c7SMasahiro Yamada 		.image_info.image_max_size = UNIPHIER_BL33_MAX_SIZE,
76*d8e919c7SMasahiro Yamada 
77*d8e919c7SMasahiro Yamada 		SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
78*d8e919c7SMasahiro Yamada 				      VERSION_2, entry_point_info_t,
79*d8e919c7SMasahiro Yamada 				      NON_SECURE | EXECUTABLE),
80*d8e919c7SMasahiro Yamada 		.ep_info.pc = UNIPHIER_BL33_BASE,
81*d8e919c7SMasahiro Yamada 		.ep_info.spsr = SPSR_64(MODE_EL1, MODE_SP_ELX,
82*d8e919c7SMasahiro Yamada 					DISABLE_ALL_EXCEPTIONS),
83*d8e919c7SMasahiro Yamada 
84*d8e919c7SMasahiro Yamada 		.next_handoff_image_id = INVALID_IMAGE_ID,
85*d8e919c7SMasahiro Yamada 	},
86*d8e919c7SMasahiro Yamada };
87*d8e919c7SMasahiro Yamada REGISTER_BL_IMAGE_DESCS(uniphier_image_descs)
88*d8e919c7SMasahiro Yamada 
89*d8e919c7SMasahiro Yamada /* SCP is optional.  Allow run-time fixup of the descriptor array. */
90*d8e919c7SMasahiro Yamada void uniphier_image_descs_fixup(void)
91*d8e919c7SMasahiro Yamada {
92*d8e919c7SMasahiro Yamada 	struct bl_mem_params_node *desc;
93*d8e919c7SMasahiro Yamada 
94*d8e919c7SMasahiro Yamada 	desc = get_bl_mem_params_node(SCP_BL2_IMAGE_ID);
95*d8e919c7SMasahiro Yamada 	assert(desc != NULL);
96*d8e919c7SMasahiro Yamada 	desc->image_info.h.attr |= IMAGE_ATTRIB_SKIP_LOADING;
97*d8e919c7SMasahiro Yamada }
98