Simon, could you review this patch? If not, who can do it?
On Sunday 28 August 2022 17:19:29 Marek Behún wrote: > From: Pali Rohár <[email protected]> > > When U-Boot is running from flash memory (execute in place) then > gd->fdt_blob before relocation points to read-only flash memory. > > So U-Boot calls board_fix_fdt() with read-only gd->fdt_blob pointer which > cause immediate CPU crash when callback is trying to modify gd->fdt_blob. > > Fix this issue by introducing a new config option > OF_DTB_READONLY_BEFORE_RELOC which moves fix_fdt callback after the > reloc_fdt callback. This makes CONFIG_OF_BOARD_FIXUP working also if > U-Boot before relocation is not running from read/write (S)RAM memory. > > This is required for mpc85xx boards when booting from flash NOR. > > Signed-off-by: Pali Rohár <[email protected]> > Signed-off-by: Marek Behún <[email protected]> > --- > Changes since v1: > - just changed the new Kconfig option name and associated help string > --- > common/board_f.c | 8 +++++++- > dts/Kconfig | 6 ++++++ > 2 files changed, 13 insertions(+), 1 deletion(-) > > diff --git a/common/board_f.c b/common/board_f.c > index 18e2246733..35fb4a0753 100644 > --- a/common/board_f.c > +++ b/common/board_f.c > @@ -911,7 +911,7 @@ static const init_fnc_t init_sequence_f[] = { > * - board info struct > */ > setup_dest_addr, > -#ifdef CONFIG_OF_BOARD_FIXUP > +#if defined(CONFIG_OF_BOARD_FIXUP) && > !defined(CONFIG_OF_DTB_READONLY_BEFORE_RELOC) > fix_fdt, > #endif > #ifdef CONFIG_PRAM > @@ -926,6 +926,10 @@ static const init_fnc_t init_sequence_f[] = { > reserve_board, > reserve_global_data, > reserve_fdt, > +#if defined(CONFIG_OF_BOARD_FIXUP) && > defined(CONFIG_OF_DTB_READONLY_BEFORE_RELOC) > + reloc_fdt, > + fix_fdt, > +#endif > reserve_bootstage, > reserve_bloblist, > reserve_arch, > @@ -936,7 +940,9 @@ static const init_fnc_t init_sequence_f[] = { > setup_bdinfo, > display_new_sp, > INIT_FUNC_WATCHDOG_RESET > +#if !defined(CONFIG_OF_BOARD_FIXUP) || > !defined(CONFIG_OF_DTB_READONLY_BEFORE_RELOC) > reloc_fdt, > +#endif > reloc_bootstage, > reloc_bloblist, > setup_reloc, > diff --git a/dts/Kconfig b/dts/Kconfig > index bc5f22029f..29e5248b15 100644 > --- a/dts/Kconfig > +++ b/dts/Kconfig > @@ -105,6 +105,12 @@ config OF_EMBED > > endchoice > > +config OF_DTB_READONLY_BEFORE_RELOC > + bool "Initial DTB (before relocation) for DT control is read-only" > + help > + If initial (before relocation) DTB for DT control is read-only, > + (e.g. points to memory-mapped flash memory), set this option. > + > config OF_BOARD > bool "Provided by the board (e.g a previous loader) at runtime" > default y if SANDBOX || OF_HAS_PRIOR_STAGE > -- > 2.35.1 >

