feat(gxl): add support for booting from U-Boot SPL/with standard params

The arguments struct needs to be changed to remove a non-standard entry
(`scp_image_info[]`) and also makes use of a built-in arguments parser.
Since the `scp_image_info[]` entry is removed in U-Boot SPL-compatible builds,
SCP_BL2 image info is hardcoded.

Change-Id: Id3cc887c61c3b940c8a21d9da7f2b6845da51af8
Signed-off-by: Ferass El Hafidi <funderscore@postmarketos.org>
This commit is contained in:
Ferass El Hafidi 2025-01-08 13:57:35 +00:00
parent 14cbe32c19
commit 8dca65d96f
2 changed files with 28 additions and 2 deletions

View file

@ -1,11 +1,13 @@
/* /*
* Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2018-2025, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
#include <assert.h> #include <assert.h>
#include <common/bl_common.h> #include <common/bl_common.h>
#ifdef AML_STDPARAMS
#include <common/desc_image_load.h>
#endif
#include <common/interrupt_props.h> #include <common/interrupt_props.h>
#include <drivers/arm/gicv2.h> #include <drivers/arm/gicv2.h>
#include <lib/mmio.h> #include <lib/mmio.h>
@ -60,17 +62,26 @@ struct gxl_bl31_param {
image_info_t *bl32_image_info; image_info_t *bl32_image_info;
entry_point_info_t *bl33_ep_info; entry_point_info_t *bl33_ep_info;
image_info_t *bl33_image_info; image_info_t *bl33_image_info;
#ifndef AML_STDPARAMS
image_info_t *scp_image_info[]; image_info_t *scp_image_info[];
#endif
}; };
void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1, void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1,
u_register_t arg2, u_register_t arg3) u_register_t arg2, u_register_t arg3)
{ {
#ifndef AML_STDPARAMS
struct gxl_bl31_param *from_bl2; struct gxl_bl31_param *from_bl2;
#endif
/* Initialize the console to provide early debug support */ /* Initialize the console to provide early debug support */
aml_console_init(); aml_console_init();
#ifdef AML_STDPARAMS
/* Parse arguments passed to BL31 from U-Boot SPL */
bl31_params_parse_helper(arg0, &bl33_image_ep_info,
&bl33_image_ep_info);
#else
/* Check that params passed from BL2 are not NULL. */ /* Check that params passed from BL2 are not NULL. */
from_bl2 = (struct gxl_bl31_param *) arg0; from_bl2 = (struct gxl_bl31_param *) arg0;
@ -84,14 +95,23 @@ void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1,
* BL2's address space. * BL2's address space.
*/ */
bl33_image_ep_info = *from_bl2->bl33_ep_info; bl33_image_ep_info = *from_bl2->bl33_ep_info;
#endif
if (bl33_image_ep_info.pc == 0U) { if (bl33_image_ep_info.pc == 0U) {
ERROR("BL31: BL33 entrypoint not obtained from BL2\n"); ERROR("BL31: BL33 entrypoint not obtained from BL2\n");
panic(); panic();
} }
#ifdef AML_STDPARAMS
/* Hardcode SCP_BL2 image info */
bl30_image_info.image_base = 0x13c0000;
bl30_image_info.image_size = 0xa000;
bl301_image_info.image_base = 0x13ca000;
bl301_image_info.image_size = 0x3400;
#else
bl30_image_info = *from_bl2->scp_image_info[0]; bl30_image_info = *from_bl2->scp_image_info[0];
bl301_image_info = *from_bl2->scp_image_info[1]; bl301_image_info = *from_bl2->scp_image_info[1];
#endif
} }
void bl31_plat_arch_setup(void) void bl31_plat_arch_setup(void)

View file

@ -40,6 +40,12 @@ BL31_SOURCES += lib/cpus/aarch64/cortex_a53.S \
${XLAT_TABLES_LIB_SRCS} \ ${XLAT_TABLES_LIB_SRCS} \
${GIC_SOURCES} ${GIC_SOURCES}
ifeq (${AML_STDPARAMS}, 1)
BL31_SOURCES += common/desc_image_load.c
$(eval $(call add_define_val,AML_STDPARAMS,'$(AML_STDPARAMS)'))
$(info "Building with standard params")
endif
# Tune compiler for Cortex-A53 # Tune compiler for Cortex-A53
ifeq ($($(ARCH)-cc-id),arm-clang) ifeq ($($(ARCH)-cc-id),arm-clang)
TF_CFLAGS_aarch64 += -mcpu=cortex-a53 TF_CFLAGS_aarch64 += -mcpu=cortex-a53