diff -r 2b989b925c9c -r 30baa5584797 configs/common/FSConfig.py
--- a/configs/common/FSConfig.py	Thu Feb 26 19:29:17 2009 -0500
+++ b/configs/common/FSConfig.py	Thu Feb 26 23:37:05 2009 -0500
@@ -113,8 +113,8 @@
     self.hypervisor_bin = binary('q_new.bin')
     self.openboot_bin = binary('openboot_new.bin')
     self.nvram_bin = binary('nvram1')
-    self.hypervisor_desc_bin = binary('1up-hv.bin')
-    self.partition_desc_bin = binary('1up-md.bin')
+    self.hypervisor_desc_bin = binary('1g2p-hv.bin')
+    self.partition_desc_bin = binary('1g2p-md.bin')
 
     return self
 
diff -r 2b989b925c9c -r 30baa5584797 src/arch/sparc/miscregfile.cc
--- a/src/arch/sparc/miscregfile.cc	Thu Feb 26 19:29:17 2009 -0500
+++ b/src/arch/sparc/miscregfile.cc	Thu Feb 26 23:37:05 2009 -0500
@@ -143,7 +143,8 @@
       case MISCREG_PCR:
         panic("PCR not implemented\n");
       case MISCREG_PIC:
-        panic("PIC not implemented\n");
+       warn_once("PIC not implemented\n");
+       return 0;
       case MISCREG_GSR:
         return gsr;
       case MISCREG_SOFTINT:
diff -r 2b989b925c9c -r 30baa5584797 src/arch/sparc/ua2005.cc
--- a/src/arch/sparc/ua2005.cc	Thu Feb 26 19:29:17 2009 -0500
+++ b/src/arch/sparc/ua2005.cc	Thu Feb 26 23:37:05 2009 -0500
@@ -280,7 +280,18 @@
         // (by calling getNumCPus())
         assert(sys->numContexts() > tc->contextId());
 
-        temp |= tc->contextId()  << STS::shft_id;
+        int cpu_id;
+        cpu_id = tc->contextId();
+        // BEGIN HACK
+        hack_once("Processor 2 is virtual processor 4. Swizzle the numbers" 
+             "(this will only work for <= 2 processors)\n");
+        if (cpu_id == 4)
+            cpu_id = 1;
+        else if (cpu_id == 1)
+            cpu_id = 4;
+        // END HACK
+
+        temp |= cpu_id  << STS::shft_id;
 
         for (x = tc->contextId() & ~3; x < sys->threadContexts.size(); x++) {
             switch (sys->threadContexts[x]->status()) {
@@ -289,7 +300,8 @@
                         ((x & 0x3) * (STS::shft_fsm0-STS::shft_fsm1)));
                 break;
               case ThreadContext::Suspended:
-                // should this be idle?
+              case ThreadContext::Unallocated:
+                   // should this be idle?
                 temp |= STS::st_idle << (STS::shft_fsm0 -
                         ((x & 0x3) * (STS::shft_fsm0-STS::shft_fsm1)));
                 break;
diff -r 2b989b925c9c -r 30baa5584797 src/arch/sparc/utility.hh
--- a/src/arch/sparc/utility.hh	Thu Feb 26 19:29:17 2009 -0500
+++ b/src/arch/sparc/utility.hh	Thu Feb 26 23:37:05 2009 -0500
@@ -99,14 +99,14 @@
     inline void initCPU(ThreadContext *tc, int cpuId)
     {
         static Fault por = new PowerOnReset();
-        if (cpuId == 0)
-            por->invoke(tc);
+        //if (cpuId == 0)
+        por->invoke(tc);
 
     }
 
     inline void startupCPU(ThreadContext *tc, int cpuId)
     {
-#if FULL_SYSTEM
+#if 0 && FULL_SYSTEM
         // Other CPUs will get activated by IPIs
         if (cpuId == 0)
             tc->activate(0);
diff -r 2b989b925c9c -r 30baa5584797 src/cpu/simple/atomic.cc
--- a/src/cpu/simple/atomic.cc	Thu Feb 26 19:29:17 2009 -0500
+++ b/src/cpu/simple/atomic.cc	Thu Feb 26 23:37:05 2009 -0500
@@ -333,6 +333,8 @@
             }
             dcache_access = true;
 
+            if (pkt.isError())
+                pkt.print(cerr,9, name());
             assert(!pkt.isError());
 
             if (req->isLocked()) {
diff -r 2b989b925c9c -r 30baa5584797 src/dev/sparc/iob.cc
--- a/src/dev/sparc/iob.cc	Thu Feb 26 19:29:17 2009 -0500
+++ b/src/dev/sparc/iob.cc	Thu Feb 26 23:37:05 2009 -0500
@@ -221,6 +221,7 @@
             int vector;
             index = (accessAddr - IntManAddr) >> 3;
             data = pkt->get<uint64_t>();
+            //DPRINTF(Iob, "Generating IPI with data: %#x\n", data);
             type = (Type)bits(data,17,16);
             cpu_id = bits(data, 12,8);
             vector = bits(data,5,0);
@@ -276,6 +277,15 @@
 Iob::generateIpi(Type type, int cpu_id, int vector)
 {
     SparcISA::SparcFault<SparcISA::PowerOnReset> *por = new SparcISA::PowerOnReset();
+
+    hack_once("Processor 2 is virtual processor 4. Swizzle the numbers" 
+         "(this will only work for <= 2 processors)\n");
+    if (cpu_id == 4)
+        cpu_id = 1;
+    else if (cpu_id == 1)
+        cpu_id = 4;
+
+
     if (cpu_id >= sys->numContexts())
         return;
 
@@ -293,8 +303,11 @@
         sys->threadContexts[cpu_id]->activate();
         break;
       case 2: // idle -- this means stop executing and don't wake on interrupts
-        DPRINTF(Iob, "Idling CPU because of I/O write cpu: %d\n", cpu_id);
-        sys->threadContexts[cpu_id]->halt();
+        if (sys->threadContexts[cpu_id]->status() == ThreadContext::Active) {
+            DPRINTF(Iob, "Idling CPU because of I/O write cpu: %d\n", cpu_id);
+            sys->threadContexts[cpu_id]->halt();
+        } else 
+            DPRINTF(Iob, "CPU already idle before I/O write cpu: %d\n", cpu_id);
         break;
       case 3: // resume
         DPRINTF(Iob, "Resuming CPU because of I/O write cpu: %d\n", cpu_id);
