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 <[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
> 
> 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    |

Reply via email to