board_f: Add support for CONFIG_OF_BOARD_FIXUP for XIP images
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_INITIAL_DTB_READONLY 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 <pali@kernel.org> Signed-off-by: Marek Mojík <marek.mojik@nic.cz> Reviewed-by: Marek Behún <kabel@kernel.org>
This commit is contained in:
@@ -949,7 +949,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_INITIAL_DTB_READONLY)
|
||||
fix_fdt,
|
||||
#endif
|
||||
#ifdef CFG_PRAM
|
||||
@@ -965,6 +965,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_INITIAL_DTB_READONLY)
|
||||
reloc_fdt,
|
||||
fix_fdt,
|
||||
#endif
|
||||
reserve_bootstage,
|
||||
reserve_bloblist,
|
||||
reserve_arch,
|
||||
@@ -975,7 +979,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_INITIAL_DTB_READONLY)
|
||||
reloc_fdt,
|
||||
#endif
|
||||
reloc_bootstage,
|
||||
reloc_bloblist,
|
||||
setup_reloc,
|
||||
|
@@ -145,6 +145,12 @@ config OF_EMBED
|
||||
|
||||
endchoice
|
||||
|
||||
config OF_INITIAL_DTB_READONLY
|
||||
bool "Initial DTB for DT control is read-only"
|
||||
help
|
||||
If initial DTB for DT control is read-only (e.g. points to
|
||||
memory-mapped flash memory), then 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
|
||||
|
Reference in New Issue
Block a user