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 <[email protected]> --- arch/arm/mach-imx/scratch.c | 16 ++++++++++++++++ common/Kconfig | 14 ++++++++++++++ include/mach/imx/scratch.h | 2 ++ 3 files changed, 32 insertions(+) diff --git a/arch/arm/mach-imx/scratch.c b/arch/arm/mach-imx/scratch.c index e4e2d25969f061c9fcdfd7c3d87701b715eb2805..9c0f1c09c4e0b863d8c95888db7cf0518f698d53 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,16 @@ const struct optee_header *imx_scratch_get_optee_hdr(void) return &scratch->optee_hdr; } + +void imx_scratch_get_fdt(void **fdt, unsigned int *fdt_sz) +{ + if (!scratch) { + if (IN_PBL) + return; + else + scratch = (void *)arm_mem_scratch_get(); + } + + *fdt = scratch->fdt; + *fdt_sz = sizeof(scratch->fdt); +} diff --git a/common/Kconfig b/common/Kconfig index eb2fb1da1e0919b6e7d5e868c48ad2e195cd8aa8..3f394416c3c376d1cf842472803a47462bb012ed 100644 --- a/common/Kconfig +++ b/common/Kconfig @@ -302,8 +302,22 @@ config MALLOC_SIZE config SCRATCH_SIZE hex default 0x8000 + default 0x48000 if PBL_EARLY_FDT_LOAD prompt "Scratch size" +config SCRATCH_FDT_SIZE + hex + default 0x0 + default 0x40000 if PBL_EARLY_FDT_LOAD + 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 e.g. during BL31 and BL32 stage else + 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..43bf55de48099f1662cd4331620a93303d4dd710 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); +void imx_scratch_get_fdt(void **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
