[U-Boot] [RFC][PATCH v2 17/19] arm cp15: setup mmu and enable dcache

Ben Gardiner bengardiner at nanometrics.ca
Fri Aug 6 17:41:00 CEST 2010


On Fri, Aug 6, 2010 at 1:29 AM, Heiko Schocher <hs at denx.de> wrote:
> Hello Ben,
>
> Ben Gardiner wrote:
>> I'm sorry I don't have more details than that, it is serial-console
>> connected only and there is no jtag debugger setup here (yet).
>
> I think you must debug this ...
>
>> I'm not sure if the board was dead because of my failure to merge the
>> patch that did not apply cleanly or if it is because of the
>> CONFIG_SYS_INIT_SP_ADDR 'Fix this' in the da850evm.h -- I haven't
>> changed the value from 'CONFIG_SYS_SDRAM_BASE + 0x1000 -+
>> CONFIG_SYS_GBL_DATA_SIZE' introduced in 15/19.
>
> Ah, so your board is the da850evm, right? This should be no problem,
> as dram is setup at this point, but we should find another (not dram)
> area, which we can use for an initial stack.

Yes. I'm sorry I forgot to mention that up-front.

Thanks for the idea. I think that there are two possible regions for
the initial stack. I have tried putting the initial stack in the
'shared ram' region and the 'ARM local RAM' region. In both cases I
did this by redefining CONFIG_SYS_INIT_SP_ADDR in the
include/configs/da850evm.h file.

First, for the 'shared ram' region which is 128k at 0x80000000 I tried:
#define CONFIG_SYS_INIT_SP_ADDR (0x80000000 + 128*1024 -1)

The board did not come up, and I think it is because the ldr argument
is limited; it appears that the value loaded into sp is wrong:

c1080078 <call_board_init_f>:
c1080078:       e59fd328        ldr     sp, [pc, #808]  ; c10803a8 <fiq+0x48>
c108007c:       e3a00000        mov     r0, #0  ; 0x0
c1080080:       eb00017f        bl      c1080684 <board_init_f>

Then for the 'ARM local RAM' which is 8k at 0xffff0000 I tried:
#define CONFIG_SYS_INIT_SP_ADDR (0xffff0000 + 8*1024 -1)

The board still did not come up event though the proper value _is_
being loaded into sp:

c1080078 <call_board_init_f>:
c1080078:       e3e0da0e        mvn     sp, #57344      ; 0xe000
c108007c:       e3a00000        mov     r0, #0  ; 0x0
c1080080:       eb00017f        bl      c1080684 <board_init_f>

But maybe this region is not available so early, I don't really know.

I then tried modifying the call_board_init_f routine so that it loaded
the start of the region into sp and added to it the CONFIG_STACK_SIZE
macro:

c1080078 <call_board_init_f>:
c1080078:       e3a0d102        mov     sp, #-2147483648        ; 0x80000000
c108007c:       e28dd701        add     sp, sp, #262144 ; 0x40000
c1080080:       e3a00000        mov     r0, #0  ; 0x0
c1080084:       eb00017e        bl      c1080684 <board_init_f>

which gets a reasonable address into sp for this early setup, but the
board still doesn't come up.

I'm currently at a loss. I'll get an emulator on this board setup soon.

I'd appreciate anyone's insights into my problems here even if it is
to say I'm totally missing the point. :)

>> I would be happy to test the next version of the series but it would
>> be much easier to do so if there was a branch in u-boot-testing as
>> suggested by Detlev.
>
> Ok.

Thank you for making this series available in u-boot-testing.


Best Regards,
Ben Gardiner

---
Nanometrics Inc.
http://www.nanometrics.ca


More information about the U-Boot mailing list