[PATCH v2 06/15] ARM: i.MX: scratch: add FDT support
Marco Felsch
m.felsch at pengutronix.de
Wed Feb 4 12:01:22 PST 2026
Add support to store a FDT within the scratch area. The user needs to
query the location and size via imx_scratch_get_fdt() which can be used
afterwards to write the actual FDT into it.
Signed-off-by: Marco Felsch <m.felsch at pengutronix.de>
---
arch/arm/mach-imx/scratch.c | 24 ++++++++++++++++++++++++
common/Kconfig | 14 ++++++++++++++
include/mach/imx/scratch.h | 2 ++
3 files changed, 40 insertions(+)
diff --git a/arch/arm/mach-imx/scratch.c b/arch/arm/mach-imx/scratch.c
index e4e2d25969f061c9fcdfd7c3d87701b715eb2805..da138445dfb352f2f3497be77004aefc7d46f188 100644
--- a/arch/arm/mach-imx/scratch.c
+++ b/arch/arm/mach-imx/scratch.c
@@ -16,7 +16,10 @@ struct imx_scratch_space {
u32 bootrom_log[128];
u32 reserved[128]; /* reserve for bootrom log */
struct optee_header optee_hdr;
+ /* FDT needs an 8 byte alignment */
+ u8 fdt[CONFIG_SCRATCH_FDT_SIZE] __aligned(8);
};
+static_assert(sizeof(struct imx_scratch_space) <= CONFIG_SCRATCH_SIZE);
static struct imx_scratch_space *scratch;
@@ -92,3 +95,24 @@ const struct optee_header *imx_scratch_get_optee_hdr(void)
return &scratch->optee_hdr;
}
+
+u8 *imx_scratch_get_fdt(unsigned int *fdt_sz)
+{
+ unsigned int sz;
+
+ if (!scratch) {
+ if (IN_PBL)
+ return ERR_PTR(-EINVAL);
+ else
+ scratch = (void *)arm_mem_scratch_get();
+ }
+
+ sz = sizeof(scratch->fdt);
+ if (sz == 0)
+ return NULL;
+
+ if (fdt_sz)
+ *fdt_sz = sz;
+
+ return scratch->fdt;
+}
diff --git a/common/Kconfig b/common/Kconfig
index 50c26695b2b56a943edfd00a7e0cb1067ad269a9..265652900a5632177d36efa84d590be6db2e7015 100644
--- a/common/Kconfig
+++ b/common/Kconfig
@@ -304,6 +304,20 @@ config SCRATCH_SIZE
default 0x8000
prompt "Scratch size"
+config SCRATCH_FDT_SIZE
+ hex
+ default 0x0
+ prompt "Scratch FDT size"
+ help
+ The size of the scratch area used as destination to load and optional
+ decompress the barebox builtin DTB into it. Can be 0x0 if early FDT
+ support is not requied.
+
+ If specified, SCRATCH_FDT_SIZE <= SCRATCH_SIZE must be ensured.
+
+ This option should match the OP-TEE's CFG_DTB_MAX_SIZE configuration
+ if used by OP-TEE.
+
config MALLOC_ALIGNMENT
hex
default 8
diff --git a/include/mach/imx/scratch.h b/include/mach/imx/scratch.h
index 6c2cecabcd80f71aa754736322151d63f2711745..b74d19a560f33da0a11621af7e11abdce6d1c295 100644
--- a/include/mach/imx/scratch.h
+++ b/include/mach/imx/scratch.h
@@ -14,6 +14,8 @@ struct optee_header;
const struct optee_header *imx_scratch_get_optee_hdr(void);
void imx_scratch_save_optee_hdr(const struct optee_header *hdr);
+u8 *imx_scratch_get_fdt(unsigned int *fdt_sz);
+
#define imx8mq_init_scratch_space() imx8m_init_scratch_space(32, true)
#define imx8mm_init_scratch_space() imx8m_init_scratch_space(32, true)
#define imx8mn_init_scratch_space() imx8m_init_scratch_space(16, true)
--
2.47.3
More information about the barebox
mailing list