Hi Albert, On Saturday 02 July 2011 01:21 AM, Albert ARIBAUD wrote: > Hi Aneesh, > > Le 01/07/2011 13:48, Aneesh V a écrit : >> Dear Andreas, >> >> On Friday 01 July 2011 03:25 PM, Andreas Bießmann wrote: >>> Dear Aneesh, >> [snip ..] >>> But the second part is not clear to me. I saw in your linker, that bss >>> is placed in SDRAM. In start.S the boundaries for clear_bss are >>> calculated at compile time to >>> >>> ---8<--- >>> _bss_start_ofs: >>> .word __bss_start - _start >>> --->8--- >>> >>> Will that also work with e.g. SDRAM adress space is before SRAM, SDRAM >>> addressing is far away (> 4GiB) ... So in you special case it may work, >>> but if this is a blueprint for SPL on arm(v7) we should consider this. >>> >> >> Nice catch. Actually, in my original OMAP4 series I tried to add >> support for disjoint bss to support my case. But now I realize that it >> works only for non-relocation case and that too only when the bss is at >> higher address compared to .text >> >> Basically disjoint bss is not relocation friendly. So here is what I >> propose: >> >> 1. Modify existing clear_bss sub-routine in start.S to take absolute >> addresses. >> 2. In regular u-boot, calculate the relocated bss address and pass to >> this function. >> 3. In SPL don't try to calculate the relocated address and directly >> pass the absolute address. >> >> If this is fine I will make the necessary changes in start.S in the >> next revision. > > So you would compute the BSS location in board_init_f() and pass that to > relocate_code()?
I was thinking of doing that in start.S itself. I haven't looked at all the details though. BTW, please note that I am not trying to support disjoint BSS in regular u-boot. I think it becomes complex with relocation + it doesn't seem to be worth when all SDRAM is at our disposal. So: 1. #ifdef CONFIG_PRELOADER part in start.s will just pass __bss_start and __bss_end to the clear_bss function(assumes no relocation). 2. #else part of above will assume that bss follows text and data(or at least that __bss_start > _start), so add relocation offset to __bss_start and __bss_end, and pass them to the clear_bss() Does that sound ok? br, Aneesh _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot