libfdt: Introduce new ARCH_FIXUP_FDT option

Add new Kconfig option to disable arch_fixup_fdt() calls for cases where
U-Boot shouldn't update memory setup in DTB file.
One example of usage of this option is to boot OS with different memory
setup than U-Boot use.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Acked-by: Simon Glass <sjg@chromium.org>
master
Michal Simek 8 years ago committed by Simon Glass
parent 26fb8db0f4
commit e2f88dfd2d
  1. 9
      Kconfig
  2. 2
      arch/arm/lib/bootm-fdt.c
  3. 2
      arch/arm/lib/bootm.c
  4. 2
      arch/mips/lib/bootm.c
  5. 7
      common/image-fdt.c

@ -342,6 +342,15 @@ config SYS_CLK_FREQ
help
TODO: Move CONFIG_SYS_CLK_FREQ for all the architecture
config ARCH_FIXUP_FDT
bool "Enable arch_fixup_fdt() call"
depends on ARM || MIPS
default y
help
Enable FDT memory map syncup before OS boot. This feature can be
used for booting OS with different memory setup where the part of
the memory location should be used for different purpose.
endmenu # Boot images
source "common/Kconfig"

@ -25,6 +25,7 @@
DECLARE_GLOBAL_DATA_PTR;
#ifdef CONFIG_ARCH_FIXUP_FDT
int arch_fixup_fdt(void *blob)
{
bd_t *bd = gd->bd;
@ -60,3 +61,4 @@ int arch_fixup_fdt(void *blob)
return 0;
}
#endif

@ -367,8 +367,10 @@ void boot_prep_vxworks(bootm_headers_t *images)
if (images->ft_addr) {
off = fdt_path_offset(images->ft_addr, "/memory");
if (off < 0) {
#ifdef CONFIG_ARCH_FIXUP_FDT
if (arch_fixup_fdt(images->ft_addr))
puts("## WARNING: fixup memory failed!\n");
#endif
}
}
#endif

@ -253,6 +253,7 @@ static int boot_reloc_fdt(bootm_headers_t *images)
#endif
}
#ifdef CONFIG_ARCH_FIXUP_FDT
int arch_fixup_fdt(void *blob)
{
#if CONFIG_IS_ENABLED(MIPS_BOOT_FDT) && CONFIG_IS_ENABLED(OF_LIBFDT)
@ -264,6 +265,7 @@ int arch_fixup_fdt(void *blob)
return 0;
#endif
}
#endif
static int boot_setup_fdt(bootm_headers_t *images)
{

@ -458,11 +458,6 @@ __weak int ft_verify_fdt(void *fdt)
return 1;
}
__weak int arch_fixup_fdt(void *blob)
{
return 0;
}
int image_setup_libfdt(bootm_headers_t *images, void *blob,
int of_size, struct lmb *lmb)
{
@ -479,10 +474,12 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,
printf("ERROR: /chosen node create failed\n");
goto err;
}
#ifdef CONFIG_ARCH_FIXUP_FDT
if (arch_fixup_fdt(blob) < 0) {
printf("ERROR: arch-specific fdt fixup failed\n");
goto err;
}
#endif
if (IMAGE_OF_BOARD_SETUP) {
fdt_ret = ft_board_setup(blob, gd->bd);
if (fdt_ret) {

Loading…
Cancel
Save