+Marek Hi Thomas,
On 3 September 2015 at 21:15, Thomas Chou <tho...@wytron.com.tw> wrote: > The relocation of nios2 is different. We will need to move > dtb at the end of u-boot-dtb.bin image away from BSS sections. > Otherwise it will be zeroed during startup. > > Signed-off-by: Thomas Chou <tho...@wytron.com.tw> > --- > arch/nios2/cpu/fdt.c | 20 +++++++++++++++++++- > arch/nios2/cpu/start.S | 10 ++++++++++ > 2 files changed, 29 insertions(+), 1 deletion(-) Can you help me understand the relocation a bit? There is already code in board_init_f() to relocate the device tree, and until board_init_r(), BSS should not be used. What is different about NIOS? > > diff --git a/arch/nios2/cpu/fdt.c b/arch/nios2/cpu/fdt.c > index 79f72aa..83d95ba 100644 > --- a/arch/nios2/cpu/fdt.c > +++ b/arch/nios2/cpu/fdt.c > @@ -11,9 +11,11 @@ > */ > > #include <common.h> > +#include <libfdt.h> > +#include <asm/sections.h> > +#include <linux/ctype.h> > > #if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP) > -#include <libfdt.h> > #include <fdt_support.h> > > DECLARE_GLOBAL_DATA_PTR; > @@ -36,3 +38,19 @@ void ft_cpu_setup(void *blob, bd_t *bd) > fdt_fixup_ethernet(blob); > } > #endif /* CONFIG_OF_LIBFDT && CONFIG_OF_BOARD_SETUP */ > + > +#ifdef CONFIG_OF_SEPARATE > +void relocate_dtb(ulong cur_start) > +{ > + /* This will be called from start.S . > + * As dtb is located at the end of u-boot-dtb.bin image, > + * we will need to relocate it before zeroing the bss. > + * The dtb is moved from _edata to _end, which is markuped > + * to __bss_end. Here _end will be used by fdtdec_setup(). > + */ > + void *blob = (void *)(cur_start + (ulong)_edata - (ulong)_start); > + > + if (fdt_magic(blob) == FDT_MAGIC) > + memmove(_end, blob, fdt_totalsize(blob)); > +} > +#endif /* CONFIG_OF_SEPARATE */ > diff --git a/arch/nios2/cpu/start.S b/arch/nios2/cpu/start.S > index dde80f7..58e6826 100644 > --- a/arch/nios2/cpu/start.S > +++ b/arch/nios2/cpu/start.S > @@ -96,6 +96,16 @@ _reloc: > stw r0, 4(sp) > mov fp, sp > > +#ifdef CONFIG_OF_SEPARATE > + /* RELOCATE DTB -- relocate dtb in u-boot-dtb.bin image > + * to be used by fdtdec_setup(). > + */ > + mov r4, r8 /* r8 <- cur _start */ > + movhi r2, %hi(relocate_dtb@h) > + ori r2, r2, %lo(relocate_dtb@h) > + callr r2 > +#endif > + > /* ZERO BSS/SBSS -- bss and sbss are assumed to be adjacent > * and between __bss_start and __bss_end. > */ > -- > 2.1.4 > Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot