I have a adder875 board and I am trying to run linux 2..6.30 on it.
However, the kernel can't bootup and fails at head_8xx.S. I've traced
the code down and found it fails at the following point:
=====================================================
mtspr SPRN_M_TWB, r6
lis r4,2f@h
ori r4,r4,2f@l
tophys(r4,r4)
li r3,MSR_KERNEL & ~(MSR_IR|MSR_DR)
mtspr SPRN_SRR0,r4
mtspr SPRN_SRR1,r3
rfi
/* Load up the kernel context */
2:
SYNC /* Force all PTE updates to finish */
tlbia /* Clear all TLB entries */
sync /* wait for tlbia/tlbie to finish */
TLBSYNC /* ... on all CPUs */
====================================================
The kernel hangs after rfi instruction. It's supposed to return to
where "2:" is, but it doesn't.
Can anyone help? Thanks a lot
Jingyu
On Nov 15, 2:42 pm, Jingyu Liu <jyli...@gmail.com> wrote:
> =====================================================
> mtspr SPRN_M_TWB, r6
> lis r4,2f@h
> ori r4,r4,2f@l
> tophys(r4,r4)
> li r3,MSR_KERNEL & ~(MSR_IR|MSR_DR)
> mtspr SPRN_SRR0,r4
> mtspr SPRN_SRR1,r3
> rfi
>
> /* Load up the kernel context */
> 2:
> SYNC /* Force all PTE updates to finish */
> tlbia /* Clear all TLB entries */
> sync /* wait for tlbia/tlbie to finish */
> TLBSYNC /* ... on all CPUs */
>
> ====================================================
>
> The kernel hangs after rfi instruction. It's supposed to return to
> where "2:" is, but it doesn't.
The rfi instruction will have it run at whatever was in r4
(what got loaded into SRR0). Since you know it failed
at that point (have a BDI debugger?), can you look at
r4 and see if that looks like the correct physical
address for where this code is?
In particular, this code uses tophys() which uses
KERNELBASE. For that to be correct, you need to
make sure that KERNELLOAD in arch/ppc/Makefile
and PAGE_OFFSET in include/linux/page.h are
set to the same value (I've just used the default
0xc0000000).
Regards,
Steve
Jingyu