powerpc/121407: [panic] Won't boot up; strange error message.

Peter Grehan grehan at FreeBSD.org
Mon Mar 17 15:30:04 UTC 2008


The following reply was made to PR powerpc/121407; it has been noted by GNATS.

From: Peter Grehan <grehan at freebsd.org>
To: bug-followup at FreeBSD.org, phillip-murphy at hotmail.com
Cc:  
Subject: Re: powerpc/121407: [panic] Won't boot up; strange error message.
Date: Mon, 17 Mar 2008 08:12:32 -0700

 I have some more info on this. The PC that it fails at is in
 moea_bootstrap(),
 
    4d3f98:       60 00 00 00     nop
    4d3f9c:       60 00 00 00     nop
    4d3fa0:       7d 30 83 a6     mtibatu 0,r9
    4d3fa4:       7c 11 83 a6     mtibatl 0,r0
  >>4d3fa8:       4c 00 01 2c     isync
    4d3fac:       7d 38 83 a6     mtdbatu 0,r9
    4d3fb0:       7c 19 83 a6     mtdbatl 0,r0
    4d3fb4:       4c 00 01 2c     isync
    4d3fb8:       3d 20 80 00     lis     r9,-32768
    4d3fbc:       61 29 1f fe     ori     r9,r9,8190
    4d3fc0:       3c 00 80 00     lis     r0,-32768
 
 .. and this corresponds to RELENG_7 
 powerpc/powerpc/mmu_oea.c:moea_bootstrap()
 
 	/*
 	 * Use an IBAT and a DBAT to map the bottom segment of memory
 	 * where we are.
 	 */
 	batu = BATU(0x00000000, BAT_BL_256M, BAT_Vs);
 	batl = BATL(0x00000000, BAT_M, BAT_PP_RW);
 	__asm (".balign 32; \n"
 	       "mtibatu 0,%0; mtibatl 0,%1; isync; \n"
 	       "mtdbatu 0,%0; mtdbatl 0,%1; isync"
 	    :: "r"(batu), "r"(batl));
 
 The problem is that the instruction BAT register 0 is being updated 
 underneath code that will then be mapped by it, resulting in races 
 between the G3's instruction decoder, instruction pipe, and the 
 registers being used for i-translation. I saw this problem on all G3's 
 on 6.0, and fixed it after a lot of experiments by cache-aligning the 
 instruction (the .balign directive, and the source of the nop's in the 
 disassembly).
 
 7.0 boots fine on my B&W G3, and 450MHz G3 iMac. However, it appears 
 that there is at least one system out there that still has an issue with 
 this code :(
 
 I'll try and fix this once and for all by disabling instruction 
 translation around the IBAT update, and then re-enabling it.


More information about the freebsd-ppc mailing list