mirror of
https://xff.cz/git/u-boot/
synced 2025-10-01 23:41:18 +02:00
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
|
* - board info struct
|
||||||
*/
|
*/
|
||||||
setup_dest_addr,
|
setup_dest_addr,
|
||||||
#ifdef CONFIG_OF_BOARD_FIXUP
|
#if defined(CONFIG_OF_BOARD_FIXUP) && !defined(CONFIG_OF_INITIAL_DTB_READONLY)
|
||||||
fix_fdt,
|
fix_fdt,
|
||||||
#endif
|
#endif
|
||||||
#ifdef CFG_PRAM
|
#ifdef CFG_PRAM
|
||||||
@@ -965,6 +965,10 @@ static const init_fnc_t init_sequence_f[] = {
|
|||||||
reserve_board,
|
reserve_board,
|
||||||
reserve_global_data,
|
reserve_global_data,
|
||||||
reserve_fdt,
|
reserve_fdt,
|
||||||
|
#if defined(CONFIG_OF_BOARD_FIXUP) && defined(CONFIG_OF_INITIAL_DTB_READONLY)
|
||||||
|
reloc_fdt,
|
||||||
|
fix_fdt,
|
||||||
|
#endif
|
||||||
reserve_bootstage,
|
reserve_bootstage,
|
||||||
reserve_bloblist,
|
reserve_bloblist,
|
||||||
reserve_arch,
|
reserve_arch,
|
||||||
@@ -975,7 +979,9 @@ static const init_fnc_t init_sequence_f[] = {
|
|||||||
setup_bdinfo,
|
setup_bdinfo,
|
||||||
display_new_sp,
|
display_new_sp,
|
||||||
INIT_FUNC_WATCHDOG_RESET
|
INIT_FUNC_WATCHDOG_RESET
|
||||||
|
#if !defined(CONFIG_OF_BOARD_FIXUP) || !defined(CONFIG_OF_INITIAL_DTB_READONLY)
|
||||||
reloc_fdt,
|
reloc_fdt,
|
||||||
|
#endif
|
||||||
reloc_bootstage,
|
reloc_bootstage,
|
||||||
reloc_bloblist,
|
reloc_bloblist,
|
||||||
setup_reloc,
|
setup_reloc,
|
||||||
|
@@ -145,6 +145,12 @@ config OF_EMBED
|
|||||||
|
|
||||||
endchoice
|
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
|
config OF_BOARD
|
||||||
bool "Provided by the board (e.g a previous loader) at runtime"
|
bool "Provided by the board (e.g a previous loader) at runtime"
|
||||||
default y if SANDBOX || OF_HAS_PRIOR_STAGE
|
default y if SANDBOX || OF_HAS_PRIOR_STAGE
|
||||||
|
Reference in New Issue
Block a user