[PATCH 10/23] ARM: i.MX: scratch: add FDT support

Marco Felsch m.felsch at pengutronix.de
Tue Nov 11 07:06:41 PST 2025


On 25-11-11, Ahmad Fatoum wrote:
> Hi,
> 
> On 11/11/25 3:14 PM, Sascha Hauer wrote:
> > On Mon, Nov 10, 2025 at 09:34:50PM +0100, Marco Felsch wrote:
> >> 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 | 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
> 
> Easy to misconfigure. How about an additional:
> 
> range 0x48000 <some big size> if PBL_EARLY_FDT_LOAD

I wasn't aware of the 'range' property. I just simply followed the
Rockchip implementation, with the exception that I wanted to provide a
sane default for the SCRATCH_SIZE too.

> >>  	prompt "Scratch size"
> > 
> > Do I get this right that the scratch space now includes the space for
> > the early FDT? If yes then this can lead to inconsistencies when the
> > scratch space is to small. Why not add an extra space?

There is a static size check for the i.MX and Rockchip case to ensure
that the overall SCRATCH_SIZE fits all members.

> I would prefer we do not complicate the "endmem" layout more than we
> have currently.
> 
> What I think we want in future is an API to allocate from the scratch
> mem a handoff block and there would be no hardcoded offsets and struct
> imx_scratch_space could go away. To save handoff when switching from PBL
> to proper, we would then also allocate to the scratch space.
> 
> This will probably happen separately, so I am in favor of not creating a
> new section that's removed afterwards.

I'm with Ahmad, the scratch/handoff handling could be generalized for
all platforms. IMHO the current implementation requires to much user
input (Kconfig setup), but this should be part of another patchset.

My idea is basically the same as Ahmad explained:
 - Scratch pool size configured via Kconfig
 - Handoff-data allocates bytes from the scratch-pool (eliminates the
   moving the handoff-data)

This way barebox could check the actual FDT size (incl. adding some
space like 4K for additions).

Regards,
  Marco


> 
> Cheers,
> Ahmad
> 
> > 
> > Sascha
> > 
> 
> -- 
> Pengutronix e.K.                  |                             |
> Steuerwalder Str. 21              | http://www.pengutronix.de/  |
> 31137 Hildesheim, Germany         | Phone: +49-5121-206917-0    |
> Amtsgericht Hildesheim, HRA 2686  | Fax:   +49-5121-206917-5555 |
> 
> 

-- 
#gernperDu 
#CallMeByMyFirstName

Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | https://www.pengutronix.de/ |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-9    |



More information about the barebox mailing list