Forgot to mention that this patch depends on my previous series for MMC spl: http://article.gmane.org/gmane.comp.boot-loaders.u-boot/96352
This one was anyway intended to initiate the discussion. If approved, I shall create a cleaner patch. On Friday 25 March 2011 06:42 PM, Aneesh V wrote: > Relocation may not be needed and desirable in many cases: > * For many boards the amount of SDRAM is fixed. > So relocation is not needed. > * Relocation adds un-necessary additional overhead when > it's not needed. This delay is singificant on slower > platforms such as FPGA > * Many boards have ample memory. So reserving enough memory > for Linux in the first half is not a challenge even without > relocation > > Add a CONFIG option to disable relocation on platforms that > do not need it. When this flag is enabled allocate memory > for stack heap etc at the end of memory as usual, but U-Boot > itself is not moved from TEXT_BASE. > > Additionally, -pie is removed from the final link step because > it was causing the absolute value of all symbols coming from > the linker script to be 0. This affects find_cmd() > > Tested on OMAP4430 SDP > > Cc: Albert Aribaud<albert.arib...@free.fr> > Cc: Wolfgang Denk<w...@denx.de> > > Signed-off-by: Aneesh V<ane...@ti.com> > --- > arch/arm/config.mk | 2 ++ > arch/arm/lib/board.c | 5 +++++ > board/ti/sdp4430/config.mk | 9 +++++++-- > include/configs/omap4_sdp4430.h | 2 ++ > 4 files changed, 16 insertions(+), 2 deletions(-) > > diff --git a/arch/arm/config.mk b/arch/arm/config.mk > index 1785e73..2315bcb 100644 > --- a/arch/arm/config.mk > +++ b/arch/arm/config.mk > @@ -71,5 +71,7 @@ LDSCRIPT := $(SRCTREE)/$(CPUDIR)/u-boot.lds > > # needed for relocation > ifndef CONFIG_NAND_SPL > +ifndef CONFIG_SYS_SKIP_ARM_RELOCATION > LDFLAGS_u-boot += -pie > endif > +endif > diff --git a/arch/arm/lib/board.c b/arch/arm/lib/board.c > index 72ee108..ed3898f 100644 > --- a/arch/arm/lib/board.c > +++ b/arch/arm/lib/board.c > @@ -361,6 +361,7 @@ void board_init_f (ulong bootflag) > gd->fb_base = addr; > #endif /* CONFIG_LCD */ > > +#ifndef CONFIG_SYS_SKIP_ARM_RELOCATION > /* > * reserve memory for U-Boot code, data& bss > * round down to next 4 kB limit > @@ -369,6 +370,7 @@ void board_init_f (ulong bootflag) > addr&= ~(4096 - 1); > > debug ("Reserving %ldk for U-Boot at: %08lx\n", gd->mon_len>> 10, > addr); > +#endif > > #ifndef CONFIG_PRELOADER > /* > @@ -420,6 +422,9 @@ void board_init_f (ulong bootflag) > dram_init_banksize(); > display_dram_config(); /* and display it */ > > +#ifdef CONFIG_SYS_SKIP_ARM_RELOCATION > + addr = _TEXT_BASE; > +#endif > gd->relocaddr = addr; > gd->start_addr_sp = addr_sp; > gd->reloc_off = addr - _TEXT_BASE; > diff --git a/board/ti/sdp4430/config.mk b/board/ti/sdp4430/config.mk > index c62965d..8846732 100644 > --- a/board/ti/sdp4430/config.mk > +++ b/board/ti/sdp4430/config.mk > @@ -28,5 +28,10 @@ > # Linux-Kernel is expected to be at 8000'8000, entry 8000'8000 > # (mem base + reserved) > > -# 1MB into the SDRAM to allow for SPL's bss at the beginning of SDRAM > -CONFIG_SYS_TEXT_BASE = 0x80100000 > +# 64MB into the SDRAM > +# Assuming a minimum of 128 MB on the board: > +# - 64MB before U-Boot is more than enough for Linux when relocation is > +# disabled > +# - ~63MB after the U-Boot is more than enough for U-Boot to relocate > +# itself without stepping on itself > +CONFIG_SYS_TEXT_BASE = 0x84000000 > diff --git a/include/configs/omap4_sdp4430.h b/include/configs/omap4_sdp4430.h > index fff67d8..e9f76d3 100644 > --- a/include/configs/omap4_sdp4430.h > +++ b/include/configs/omap4_sdp4430.h > @@ -278,4 +278,6 @@ > #define CONFIG_SYS_SPL_BSS_MAX_SIZE 0x80000 /* 512 KB */ > > #define CONFIG_SYS_THUMB_BUILD > + > +#define CONFIG_SYS_SKIP_ARM_RELOCATION > #endif /* __CONFIG_H */ _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot