rockchip: Support OP-TEE for ARM in FIT images created by binman

CONFIG_SPL_OPTEE_IMAGE option is used during DRAM size detection for
Rockchip ARM platform to indicate that an OP-TEE binary was already loaded
and a Trusted Execution Environment (TEE) is available in order to
block/reserve a memory-region for it.

This adds a bunch of new `#if's` to u-boot-rockchip.dtsi to include the
OP-TEE binary in the FIT image for ARM SOCs if CONFIG_SPL_OPTEE_IMAGE is
selected.
That makes it a little harder to read, but I opted for that, because all
the duplicates in an extra ARM-OP-TEE-specfic .dtsi would be the greater
evil, IMHO. Besides it's more likley being "forgotten" to sync when changes
in u-boot-rockchip.dtsi are made.

The no longer required rockchip-optee.dtsi and it's inclusions are dropped.

The hardcoded load address is common across all OP-TEE implemenations for
Rockchip (vendor and upstream).

The OP-TEE-binary is non-optional if CONFIG_SPL_OPTEE_IMAGE is selected and
there will be an error if the file does not exist and/or `TEE=` build
option is missing.

Signed-off-by: Alex Bee <knaerzche@gmail.com>
Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
This commit is contained in:
Alex Bee
2023-07-18 16:57:11 +02:00
committed by Kever Yang
parent 5b269ed404
commit fff7f5e978
3 changed files with 35 additions and 68 deletions

View File

@@ -4,7 +4,6 @@
*/
#include "rockchip-u-boot.dtsi"
#include "rockchip-optee.dtsi"
/ {
aliases {

View File

@@ -1,64 +0,0 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright 2020 Google LLC
*/
#include <config.h>
#if defined(CONFIG_HAS_ROM) && defined(CONFIG_FIT)
&binman {
itb {
filename = "u-boot.itb";
fit {
fit,external-offset = <CONFIG_FIT_EXTERNAL_OFFSET>;
description = "FIT image with OP-TEE support";
#address-cells = <1>;
images {
uboot {
description = "U-Boot";
type = "standalone";
os = "U-Boot";
arch = "arm";
compression = "none";
load = <CONFIG_TEXT_BASE>;
u-boot-nodtb {
};
};
optee {
description = "OP-TEE";
type = "firmware";
arch = "arm";
os = "tee";
compression = "none";
load = <(CFG_SYS_SDRAM_BASE + 0x8400000)>;
entry = <(CFG_SYS_SDRAM_BASE + 0x8400000)>;
blob-ext {
filename = "tee.bin";
};
};
fdt {
description = CONFIG_SYS_BOARD;
type = "flat_dt";
compression = "none";
u-boot-dtb {
};
};
};
configurations {
default = "conf";
conf {
description = CONFIG_SYS_BOARD;
firmware = "optee";
loadables = "uboot";
fdt = "fdt";
};
};
};
};
};
#endif

View File

@@ -33,9 +33,13 @@
};
};
#if defined(CONFIG_SPL_FIT) && defined(CONFIG_ARM64)
#if defined(CONFIG_SPL_FIT) && (defined(CONFIG_ARM64) || defined(CONFIG_SPL_OPTEE_IMAGE))
fit: fit {
#ifdef CONFIG_ARM64
description = "FIT image for U-Boot with bl31 (TF-A)";
#else
description = "FIT image with OP-TEE";
#endif
#address-cells = <1>;
fit,fdt-list = "of-list";
filename = "u-boot.itb";
@@ -44,10 +48,14 @@
offset = <CONFIG_SPL_PAD_TO>;
images {
u-boot {
description = "U-Boot (64-bit)";
description = "U-Boot";
type = "standalone";
os = "U-Boot";
#ifdef CONFIG_ARM64
arch = "arm64";
#else
arch = "arm";
#endif
compression = "none";
load = <CONFIG_TEXT_BASE>;
entry = <CONFIG_TEXT_BASE>;
@@ -60,6 +68,7 @@
#endif
};
#ifdef CONFIG_ARM64
@atf-SEQ {
fit,operation = "split-elf";
description = "ARM Trusted Firmware";
@@ -99,6 +108,25 @@
};
#endif
};
#else
op-tee {
description = "OP-TEE";
type = "tee";
arch = "arm";
os = "tee";
compression = "none";
load = <(CFG_SYS_SDRAM_BASE + 0x8400000)>;
entry = <(CFG_SYS_SDRAM_BASE + 0x8400000)>;
tee-os {
};
#ifdef CONFIG_SPL_FIT_SIGNATURE
hash {
algo = "sha256";
};
#endif
};
#endif
@fdt-SEQ {
description = "fdt-NAME";
@@ -117,7 +145,11 @@
@config-SEQ {
description = "NAME.dtb";
fdt = "fdt-SEQ";
#ifdef CONFIG_ARM64
fit,firmware = "atf-1", "u-boot";
#else
fit,firmware = "op-tee", "u-boot";
#endif
fit,loadables;
};
};
@@ -150,7 +182,7 @@
};
};
#ifdef CONFIG_ARM64
#if defined(CONFIG_ARM64) || defined(CONFIG_SPL_OPTEE_IMAGE)
fit {
type = "blob";
filename = "u-boot.itb";