[U-Boot-Users] Need help understanding cpu/mpc85xx/start.S

Andy Fleming afleming at gmail.com
Wed Sep 26 23:20:21 CEST 2007


On 9/26/07, robert lazarski <robertlazarski at gmail.com> wrote:
> Hi all,
>
>
> Starting with the basics: R1 has a 4K stack from 0xfffff000-0xffffffff
> and the stack grows down?

It better not.  r1 will eventually have a stack somewhere.  Initially,
we put it in unmapped memory space which allows us to use the cache as
memory.  0xfffff000-0xffffffff is the last page in memory, and that is
a) in Flash, and b) the boot page.  Until you execute the code you're
having a problem with below, that last page will be the only page
mapped.

>
> Here's the part of the code I'm crashing in and which I trying to
> understand, shown here from vim with lines enabled:
>
>  158         bl      tlb1_entry
>  159         mr      r5,r0
>  160         lwzu    r4,0(r5)        /* how many TLB1 entries we actually use */
>  161         mtctr   r4
>  162
>  163 0:      lwzu    r6,4(r5)
>  164         lwzu    r7,4(r5)
>  165         lwzu    r8,4(r5)
>  166         lwzu    r9,4(r5)
>  167         mtspr   MAS0,r6
>  168         mtspr   MAS1,r7
>  169         mtspr   MAS2,r8
>  170         mtspr   MAS3,r9
>  171         isync
>  172         msync
>  173         tlbwe
>  174         isync
>  175         bdnz    0b
>  176
>  177 1:
>
> Are lines 158-171 setting up the TLB's as defined by 'bl      tlb1_entry'  ?


It sets up the TLBs as you should have set up in your board's init.S
file.  When tlb1_entry returns, r0 will point to a word with the
number of TLB entries.  After that, it's an array which is fairly
straightforward:

MAS0
MAS1
MAS2
MAS3

>
> Here's the part where my code or the bdi is crashing, line 163 which
> is mapped as fffff0c0 :
>
> 163 0:      lwzu    r6,4(r5)
>

> 'lwzu    r6,4(r5)' as I read it says: load a word from R5 + 4 bytes,
> ie, address fffff214:
>
> ATUM>mdh 0xfffff214 2
> 0_fffff214 : 0x0000       0  ..
> 0_fffff216 : 0x0000       0  ..


Ok, but that's what you would expect, if you look in init.S.  The
first entry is:

TLB1_MAS0(0,0,0)

The TLB1 part is misleading (one day, I will change all of those
macros), but it sets up MAS0 to point at TLB0, entry 0.


> Is my problem is that I am assigning zero here? I'm confused since the
> CDS code seems to work the same way. The result of single stepping
> consistently results in:


I can assure that's not the problem.


>
> ATUM>info
>     Target CPU        : MPC85xx (e500v2 rev.2)
>     Target state      : halted
>     Debug entry cause : instruction breakpoint
>     Current PC        : 0xfffff0c0
>     Current CR        : 0x00000000
>     Current MSR       : 0x00000200
>     Current LR        : 0xfffff0b4
>     Current CCSRBAR   : 0x0_e0000000
> ATUM>ti
> - Core status is 0x0041
> *** Core is stopped, no debugging possible
> # PPC: timeout while waiting for halt
> ATUM>    Target CPU        : MPC85xx (e500v2 rev.2)
>     Target state      : running
> # Step timeout detected
>
> I sent a question to Abatron technical support about this in the case
> its a bdi issue - still waiting to see what they say.
>
> Any clues please?
> Robert


Well, there's nothing wrong with the code you've shown us so far.
Does the CDS show the same problem when single-stepping?  Are you sure
you're single-stepping?  My first guess would be that you've set up
TLB1, entry 0 with something that's not Flash, and that what you are
seeing is the result of unmapping your Flash while executing out of
it.

What does your init.S look like?

Andy




More information about the U-Boot mailing list