On 06/30/2016 02:29 AM, Andre Przywara wrote: > Probably due to some (ill-founded) fear of a large BSS all sunxi boards > forced their SPL BSS section into DRAM. > This only works if there is no usage of a .BSS variable before the DRAM > is initialised. > The recent inclusion of tiny-printf breaks this assumption (it has two > variables in .BSS), so any early printf (printing a number) hangs a board.
I believe you should fix tiny-printf instead, try this patch: diff --git a/lib/tiny-printf.c b/lib/tiny-printf.c index 451f4f7..5b9b0dc 100644 --- a/lib/tiny-printf.c +++ b/lib/tiny-printf.c @@ -17,7 +17,7 @@ static char *bf; static char zs; /* Current position in sprintf() output string */ -static char *outstr; +static char *outstr __section(".data"); static void out(char c) { > This in particular breaks the (WIP) Pine64 SPL, which at the moment links > Allwinner's libdram library, trying to print debug information: > DRAM:DRAM driver version: V1.0 > DRAM Type = <hangs> > > As it turns out the normal BSS size for sunxi is about 256 Bytes, so we > can happily remove the symbols and the linker script part that was > forcing the section into DRAM and let the linker naturally put it into > SRAM. Except SRAM is limited, which is why bss was in DRAM. > Tested on BananaPi M1 and Pine64(-SPL), also buildman sunxi was happy. > > Thanks to Siarhei for providing helpful hints! > > Signed-off-by: Andre Przywara <andre.przyw...@arm.com> > --- > > (and now with the list in CC: as well) ... > > arch/arm/cpu/armv7/sunxi/u-boot-spl.lds | 4 +--- > include/configs/sunxi-common.h | 4 ---- > 2 files changed, 1 insertion(+), 7 deletions(-) > > diff --git a/arch/arm/cpu/armv7/sunxi/u-boot-spl.lds > b/arch/arm/cpu/armv7/sunxi/u-boot-spl.lds > index 53f0cbd..a90404f 100644 > --- a/arch/arm/cpu/armv7/sunxi/u-boot-spl.lds > +++ b/arch/arm/cpu/armv7/sunxi/u-boot-spl.lds > @@ -16,8 +16,6 @@ > */ > MEMORY { .sram : ORIGIN = CONFIG_SPL_TEXT_BASE,\ > LENGTH = CONFIG_SPL_MAX_SIZE } > -MEMORY { .sdram : ORIGIN = CONFIG_SPL_BSS_START_ADDR, \ > - LENGTH = CONFIG_SPL_BSS_MAX_SIZE } > > OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") > OUTPUT_ARCH(arm) > @@ -54,5 +52,5 @@ SECTIONS > *(.bss*) > . = ALIGN(4); > __bss_end = .; > - } > .sdram > + } > .sram > } > diff --git a/include/configs/sunxi-common.h b/include/configs/sunxi-common.h > index 94275a7..e3fe965 100644 > --- a/include/configs/sunxi-common.h > +++ b/include/configs/sunxi-common.h > @@ -75,7 +75,6 @@ > * since it needs to fit in with the other values. By also #defining it > * we get warnings if the Kconfig value mismatches. */ > #define CONFIG_SPL_STACK_R_ADDR 0x2fe00000 > -#define CONFIG_SPL_BSS_START_ADDR 0x2ff80000 > #else > #define SDRAM_OFFSET(x) 0x4##x > #define CONFIG_SYS_SDRAM_BASE 0x40000000 > @@ -86,11 +85,8 @@ > * since it needs to fit in with the other values. By also #defining it > * we get warnings if the Kconfig value mismatches. */ > #define CONFIG_SPL_STACK_R_ADDR 0x4fe00000 > -#define CONFIG_SPL_BSS_START_ADDR 0x4ff80000 > #endif > > -#define CONFIG_SPL_BSS_MAX_SIZE 0x00080000 /* 512 KiB */ > - > #if defined(CONFIG_MACH_SUN9I) || defined(CONFIG_MACH_SUN50I) > /* > * The A80's A1 sram starts at 0x00010000 rather then at 0x00000000 and is > -- Best regards, Marek Vasut _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot