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