xref: /rk3399_ARM-atf/plat/imx/common/imx_common.c (revision 7eae1db027149e361c84395a14115324d430aa52)
1*7eae1db0SSascha Hauer /*
2*7eae1db0SSascha Hauer  * Copyright (c) 2024, Pengutronix, Inc. All rights reserved.
3*7eae1db0SSascha Hauer  *
4*7eae1db0SSascha Hauer  * SPDX-License-Identifier: BSD-3-Clause
5*7eae1db0SSascha Hauer  */
6*7eae1db0SSascha Hauer #include <errno.h>
7*7eae1db0SSascha Hauer #include <stdint.h>
8*7eae1db0SSascha Hauer 
9*7eae1db0SSascha Hauer #include <common/bl_common.h>
10*7eae1db0SSascha Hauer #include <common/desc_image_load.h>
11*7eae1db0SSascha Hauer 
12*7eae1db0SSascha Hauer #include <plat_common.h>
13*7eae1db0SSascha Hauer 
14*7eae1db0SSascha Hauer /*
15*7eae1db0SSascha Hauer  * This function checks if @arg0 can safely be accessed as a pointer
16*7eae1db0SSascha Hauer  * and if it does, it fills in @bl32_info and @bl33_info with data
17*7eae1db0SSascha Hauer  * found in @arg0.
18*7eae1db0SSascha Hauer  *
19*7eae1db0SSascha Hauer  * Returns 0 when @arg0 can be used as entry point info and a negative
20*7eae1db0SSascha Hauer  * error code otherwise.
21*7eae1db0SSascha Hauer  */
22*7eae1db0SSascha Hauer int imx_bl31_params_parse(uintptr_t arg0, uintptr_t ocram_base,
23*7eae1db0SSascha Hauer 			  uintptr_t ocram_size,
24*7eae1db0SSascha Hauer 			  entry_point_info_t *bl32_info,
25*7eae1db0SSascha Hauer 			  entry_point_info_t *bl33_info)
26*7eae1db0SSascha Hauer {
27*7eae1db0SSascha Hauer 	bl_params_t *v2 = (void *)(uintptr_t)arg0;
28*7eae1db0SSascha Hauer 
29*7eae1db0SSascha Hauer 	if (arg0 & 0x3) {
30*7eae1db0SSascha Hauer 		return -EINVAL;
31*7eae1db0SSascha Hauer 	}
32*7eae1db0SSascha Hauer 
33*7eae1db0SSascha Hauer 	if (arg0 < ocram_base || arg0 >= ocram_base + ocram_size) {
34*7eae1db0SSascha Hauer 		return -EINVAL;
35*7eae1db0SSascha Hauer 	}
36*7eae1db0SSascha Hauer 
37*7eae1db0SSascha Hauer 	if (v2->h.version != PARAM_VERSION_2) {
38*7eae1db0SSascha Hauer 		return -EINVAL;
39*7eae1db0SSascha Hauer 	}
40*7eae1db0SSascha Hauer 
41*7eae1db0SSascha Hauer 	if (v2->h.type != PARAM_BL_PARAMS) {
42*7eae1db0SSascha Hauer 		return -EINVAL;
43*7eae1db0SSascha Hauer 	}
44*7eae1db0SSascha Hauer 
45*7eae1db0SSascha Hauer 	bl31_params_parse_helper(arg0, bl32_info, bl33_info);
46*7eae1db0SSascha Hauer 
47*7eae1db0SSascha Hauer 	return 0;
48*7eae1db0SSascha Hauer }
49