Uncompress Ok, but cannot run linux kernel...

Paul White pwhite at networkrobots.com
Thu May 10 14:16:34 EST 2001


Michael,

Please see comments below..

On Thu, 10 May 2001, machael thailer wrote:

>
> > turn_on_mmu:
> >     .....
> >     SYNC
> >     RFI
>
>
> >I am dealing with same problem.  After the rfi (on
> >turn_on_mmu) instruction an signal is generated and
> >the progam counter is lost.  When performing an rfi
> >most of the bits of the SRR1 registers become the MSR
> >bits and the SRR0 register become the next instruction
> >pointer (NIA).  I read the manual and if the new MSR
> >value enables some pending exceptions then this
> >exceptions are processed by exception priority.  The
> >bits modified after the rfi are MSR_IR & MSR_DR so I
> >think (I am not sure yet) this bits enables a waiting
> >exception of some kind and when the rfi is processed
> >the exception is executed.  gdb only said it recevies
> >a SIGSTOP signal.  I will be working with that today.
> >If I found anything I will let you know.
>
> Now I can "turn_on_mmu" and run "start_here" . I make a mistake when I try
> to debug by outputing a character vi SERIAL Port after "turn_on_mmu".
> The serial port IO is 0xfe0003f8, and the "initial_bats" only do the
> physical address 0~256M to virtual address 0xc0000000~0xc0000000+256M
> memory-mapping. To make the serial port output work, we have to do
> additional memory-mapping from physical address 0xf000000-0xffffffff to
> virtual address 0xf0000000~0xffffffff as following:
>
> initial_bats:
>         ......
>         ......
>        mtspr DBAT0L,r8
>         mtspr DBAT0U,r11
>         mtspr IBAT0L,r8
>         mtspr IBAT0U,r11
>
> /*the start added  lines  */
>         lis r9,0xf000
>         ori    r9,r9,0x1ffe
>         lis r8,0xf000
>         ori r8,r8,0x2a
>         mtspr DBAT1L,r8
>         mtspr DBAT1U,r9
> /*the end added lines*/
>
>         isync
>         blr
>
> Now I meet a new problem. I can run through here:
> start_here:
> ...
> bl identify_machine
> bl MMU_init
> lis r4,2f at h
>  ori r4,r4,2f at l
>  tophys(r4,r4)
>  li r3,MSR_KERNEL & ~(MSR_IR|MSR_DR)
>  FIX_SRR1(r3,r5)
>  mtspr SRR0,r4
>  mtspr SRR1,r3
>  SYNC
>  RFI
>
>   /*Here I add my serial output codes, but it outputs nothing. System seems
> to halt here?*/
>
> 2:
>   sync
>   tlbia
>   sync
>
> Do you have any ideas?
> thank you very much.

Note that it is loading the "physical" address of the "2:" label into r4.  What its doing, is its
telling the CPU to turn off MMU (BAT mapping) and then jumping to the "2:" label.  If you add your
serial output after the "2:" label, it should work again.

The next stage would be to make sure MMU_init() in arch/ppc/mm/init.c will set up the right BATs
you need as well (f0000000-0xffffffff), As after all hash tables are modified and such, it will
then write out the new BATs saved in the "BATS" variable from MMU_init(), and then will jump
to start_kernel() after turning MMU on for the last time.

Hope this helps...

Paul W.


>
>
> machael thailer
>
>
>


** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/






More information about the Linuxppc-embedded mailing list