Fatal kernel trap on 7400 G4 processors
Nathan Whitehorn
nwhitehorn at freebsd.org
Sun Sep 28 15:14:46 UTC 2008
Marco Trillo wrote:
> Hi all,
>
> Recent 8.0-current kernels cause a "fatal kernel trap" on 7400 G4 processors:
>
> fatal kernel trap
>
> exception = 0x7 (program)
> srr0 = 0x5336bc
> srr1 = 0x83032
> lr = 0x5334b4
>
> Stopped at 0x5336bc mfspr 0, dccr
>
> The address 0x5336bc corresponds to function cpu_setup() in powerpc/cpu.c:
>
> 5336b4: 7f 9e 00 00 cmpw cr7,r30,r0
> 5336b8: 40 be 02 94 bne+ cr7,53394c <cpu_setup+0x5f4>
> 5336bc: 7c 1a fa a6 mfdccr r0 <<<<< here
> 5336c0: 3d 20 00 5f lis r9,95
>
> I tracked the line to the following code in cpu.c:
>
> l3cr_config = mfspr(SPR_L3CR); <<<< here
>
> /* Fallthrough */
>
> In include/spr.h I see the following:
>
> #define SPR_L3CR 0x3fa /* .6. L3 Control Register */
> #define SPR_DCCR 0x3fa /* 4.. Data Cache Cachability Register */
>
> So it seems that the 7400 processor doesn't have these registers so it
> causes a fault.
Apparently only the MPC745x CPUs have an L3 cache, and I just updated
cpu.c to reflect that.
For G5 support, I wrote a piece of code that you can put in EXEC_PGM
that writes a value to SPRG2 if a trap was taken, then tries to execute
a 64-bit instruction to see if the CPU is 64-bit. I think we should do
something similar to detect cache presence, Altivec support and such
things. Since we can do this when the system is further into booting, we
should be able to use the regular trap handlers. Is there a way to catch
traps instead of panicing?
-Nathan
More information about the freebsd-ppc
mailing list