mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-16 09:34:18 +00:00
feat(imx): add helper to take params from BL2
So far the i.MX BL31 doesn't take any parameters. This means the BL32 image base address and whether or not a BL32 image is used at all has to be hardcoded in BL31. This adds a helper function that allows to take params from BL2 safely. On i.MX BL2 is usually U-Boot SPL which passes random values in arg0, so make sure arg0 is within the internal SRAM range before accessing it as a pointer. Also make sure arg0 is sufficiently aligned and the header type and version is correct. Change-Id: Idab8013a1d6dabf50a83c75f3e6f831de4a537e9 Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
9a31b68bc8
commit
7eae1db027
6 changed files with 69 additions and 0 deletions
48
plat/imx/common/imx_common.c
Normal file
48
plat/imx/common/imx_common.c
Normal file
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* Copyright (c) 2024, Pengutronix, Inc. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
#include <errno.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include <common/bl_common.h>
|
||||
#include <common/desc_image_load.h>
|
||||
|
||||
#include <plat_common.h>
|
||||
|
||||
/*
|
||||
* This function checks if @arg0 can safely be accessed as a pointer
|
||||
* and if it does, it fills in @bl32_info and @bl33_info with data
|
||||
* found in @arg0.
|
||||
*
|
||||
* Returns 0 when @arg0 can be used as entry point info and a negative
|
||||
* error code otherwise.
|
||||
*/
|
||||
int imx_bl31_params_parse(uintptr_t arg0, uintptr_t ocram_base,
|
||||
uintptr_t ocram_size,
|
||||
entry_point_info_t *bl32_info,
|
||||
entry_point_info_t *bl33_info)
|
||||
{
|
||||
bl_params_t *v2 = (void *)(uintptr_t)arg0;
|
||||
|
||||
if (arg0 & 0x3) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (arg0 < ocram_base || arg0 >= ocram_base + ocram_size) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (v2->h.version != PARAM_VERSION_2) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (v2->h.type != PARAM_BL_PARAMS) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
bl31_params_parse_helper(arg0, bl32_info, bl33_info);
|
||||
|
||||
return 0;
|
||||
}
|
17
plat/imx/common/include/plat_common.h
Normal file
17
plat/imx/common/include/plat_common.h
Normal file
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
* Copyright (c) 2024, Pengutronix, Inc. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
#ifndef PLAT_COMMON_H
|
||||
#define PLAT_COMMON_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <common/bl_common.h>
|
||||
|
||||
int imx_bl31_params_parse(uintptr_t arg0, uintptr_t ocram_base,
|
||||
uintptr_t ocram_size,
|
||||
entry_point_info_t *bl32_info,
|
||||
entry_point_info_t *bl33_info);
|
||||
|
||||
#endif /* PLAT_COMMON_H */
|
|
@ -46,6 +46,7 @@ BL31_SOURCES += plat/imx/common/imx8_helpers.S \
|
|||
plat/imx/common/imx8_topology.c \
|
||||
plat/imx/common/imx_sip_handler.c \
|
||||
plat/imx/common/imx_sip_svc.c \
|
||||
plat/imx/common/imx_common.c \
|
||||
plat/imx/common/imx_uart_console.S \
|
||||
lib/cpus/aarch64/cortex_a53.S \
|
||||
drivers/arm/tzc/tzc380.c \
|
||||
|
|
|
@ -41,6 +41,7 @@ BL31_SOURCES += plat/imx/common/imx8_helpers.S \
|
|||
plat/imx/common/imx8_topology.c \
|
||||
plat/imx/common/imx_sip_handler.c \
|
||||
plat/imx/common/imx_sip_svc.c \
|
||||
plat/imx/common/imx_common.c \
|
||||
plat/imx/common/imx_uart_console.S \
|
||||
lib/cpus/aarch64/cortex_a53.S \
|
||||
drivers/arm/tzc/tzc380.c \
|
||||
|
|
|
@ -42,6 +42,7 @@ BL31_SOURCES += plat/imx/common/imx8_helpers.S \
|
|||
plat/imx/common/imx8_topology.c \
|
||||
plat/imx/common/imx_sip_handler.c \
|
||||
plat/imx/common/imx_sip_svc.c \
|
||||
plat/imx/common/imx_common.c \
|
||||
plat/imx/common/imx_uart_console.S \
|
||||
lib/cpus/aarch64/cortex_a53.S \
|
||||
drivers/arm/tzc/tzc380.c \
|
||||
|
|
|
@ -22,6 +22,7 @@ IMX_GIC_SOURCES := ${GICV3_SOURCES} \
|
|||
BL31_SOURCES += plat/common/aarch64/crash_console_helpers.S \
|
||||
plat/imx/imx93/aarch64/plat_helpers.S \
|
||||
plat/imx/imx93/plat_topology.c \
|
||||
plat/imx/common/imx_common.c \
|
||||
plat/imx/common/lpuart_console.S \
|
||||
plat/imx/imx93/trdc.c \
|
||||
plat/imx/imx93/pwr_ctrl.c \
|
||||
|
|
Loading…
Add table
Reference in a new issue