[PATCH 2/2] ARM: i.MX: Webasto ccbv2: fix barebox chainloading with OP-TEE enabled
Sascha Hauer
s.hauer at pengutronix.de
Thu Jun 26 07:03:29 PDT 2025
Chainloading barebox when OP-TEE is enabled has multiple bugs, fix them.
When barebox starts we have to guess if we have to start OP-TEE or not.
As we can't detect the exception level on ARMv7 we do this by checking
if a first stage loader has passed us a device tree.
First of all the device tree is passed in r2, not in r0, so fix the
register we use.
Then we have to check if r2 is within the SDRAM. We check against
MX6_MMDC_P0_BASE_ADDR which is the base of the SDRAM controller. Use the
base address of the SDRAM instead.
Finally we manipulate the TZASC which we are obviously not allowed in
EL1, so move the manipulation to the code which is only executed in EL2.
Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
arch/arm/boards/webasto-ccbv2/lowlevel.c | 18 ++++++++----------
1 file changed, 8 insertions(+), 10 deletions(-)
diff --git a/arch/arm/boards/webasto-ccbv2/lowlevel.c b/arch/arm/boards/webasto-ccbv2/lowlevel.c
index 7a198bd801..17264479c2 100644
--- a/arch/arm/boards/webasto-ccbv2/lowlevel.c
+++ b/arch/arm/boards/webasto-ccbv2/lowlevel.c
@@ -31,23 +31,21 @@ static void configure_uart(void)
}
-static void noinline start_ccbv2(u32 r0, unsigned long mem_size, char *fdt)
+static void noinline start_ccbv2(u32 r2, unsigned long mem_size, char *fdt)
{
int tee_size;
void *tee;
- /* Enable normal/secure r/w for TZC380 region0 */
- writel(0xf0000000, 0x021D0108);
-
configure_uart();
/*
* Chainloading barebox will pass a device tree within the RAM in r0,
* skip OP-TEE early loading in this case
*/
- if(IS_ENABLED(CONFIG_FIRMWARE_CCBV2_OPTEE)
- && !(r0 > MX6_MMDC_P0_BASE_ADDR
- && r0 < MX6_MMDC_P0_BASE_ADDR + mem_size)) {
+ if(IS_ENABLED(CONFIG_FIRMWARE_CCBV2_OPTEE) &&
+ !(r2 > MX6_MMDC_PORT0_BASE_ADDR && r2 < MX6_MMDC_PORT0_BASE_ADDR + mem_size)) {
+ /* Enable normal/secure r/w for TZC380 region0 */
+ writel(0xf0000000, 0x021D0108);
get_builtin_firmware(ccbv2_optee_bin, &tee, &tee_size);
memset((void *)OPTEE_OVERLAY_LOCATION, 0, 0x1000);
@@ -70,7 +68,7 @@ ENTRY_FUNCTION(start_imx6ul_ccbv2_256m, r0, r1, r2)
setup_c();
barrier();
- start_ccbv2(r0, SZ_256M, __dtb_z_imx6ul_webasto_ccbv2_start);
+ start_ccbv2(r2, SZ_256M, __dtb_z_imx6ul_webasto_ccbv2_start);
}
ENTRY_FUNCTION(start_imx6ul_ccbv2_512m, r0, r1, r2)
@@ -83,7 +81,7 @@ ENTRY_FUNCTION(start_imx6ul_ccbv2_512m, r0, r1, r2)
setup_c();
barrier();
- start_ccbv2(r0, SZ_512M, __dtb_z_imx6ul_webasto_ccbv2_start);
+ start_ccbv2(r2, SZ_512M, __dtb_z_imx6ul_webasto_ccbv2_start);
}
extern char __dtb_z_imx6ul_webasto_marvel_start[];
@@ -97,5 +95,5 @@ ENTRY_FUNCTION(start_imx6ul_marvel, r0, r1, r2)
setup_c();
barrier();
- start_ccbv2(r0, SZ_512M, __dtb_z_imx6ul_webasto_marvel_start);
+ start_ccbv2(r2, SZ_512M, __dtb_z_imx6ul_webasto_marvel_start);
}
--
2.39.5
More information about the barebox
mailing list