Index: arch/mips32/include/mm/tlb.h
===================================================================
--- arch/mips32/include/mm/tlb.h	(revision ede493eb5d01ca9729939a58af2ac8b3c4bae002)
+++ arch/mips32/include/mm/tlb.h	(revision 052da81d6e492cc87ae6e70a7e8929262d1ceabc)
@@ -75,15 +75,4 @@
 /** Page Table Entry. */
 struct pte {
-#ifdef BIG_ENDIAN
-	unsigned a : 1;			/**< Accessed bit. */
-	unsigned w : 1;			/**< Page writable bit. */
-	unsigned pfn : 24;		/**< Physical frame number. */
-	unsigned soft_valid : 1;	/**< Valid content even if not present. */
-	unsigned : 1;			/**< Unused. */
-	unsigned cacheable : 1;		/**< Cacheable bit. */
-	unsigned d : 1;			/**< Dirty bit. */
-	unsigned p : 1;			/**< Present bit. */
-	unsigned g : 1;			/**< Global bit. */
-#else
 	unsigned g : 1;			/**< Global bit. */
 	unsigned p : 1;			/**< Present bit. */
@@ -95,5 +84,4 @@
 	unsigned w : 1;			/**< Page writable bit. */
 	unsigned a : 1;			/**< Accessed bit. */
-#endif
 };
 
Index: arch/mips32/src/console.c
===================================================================
--- arch/mips32/src/console.c	(revision ede493eb5d01ca9729939a58af2ac8b3c4bae002)
+++ arch/mips32/src/console.c	(revision 052da81d6e492cc87ae6e70a7e8929262d1ceabc)
@@ -40,8 +40,9 @@
 	} else if (serial_init()) {
 		serial_console();
-	} else
+	} else {
 		msim_console();
 #ifdef CONFIG_FB
-	fb_init(0xb2000000, 640, 480, 3); // gxemul framebuffer
+		fb_init(0xb2000000, 640, 480, 3); // gxemul framebuffer
 #endif
+	}
 }
Index: arch/mips32/src/drivers/arc.c
===================================================================
--- arch/mips32/src/drivers/arc.c	(revision ede493eb5d01ca9729939a58af2ac8b3c4bae002)
+++ arch/mips32/src/drivers/arc.c	(revision 052da81d6e492cc87ae6e70a7e8929262d1ceabc)
@@ -37,4 +37,6 @@
 #include <align.h>
 #include <console/console.h>
+#include <console/kconsole.h>
+#include <console/cmd.h>
 
 /* This is a good joke, SGI HAS different types than NT bioses... */
@@ -153,5 +155,6 @@
 	desc = arc_entry->getmemorydescriptor(NULL);
 	while (desc) {
-		printf("%s: %d (size: %dKB)\n",basetypes[desc->type],
+		printf("%s: %d(%P) (size: %dKB)\n",basetypes[desc->type],
+		       desc->basepage * ARC_FRAME,
 		       desc->basepage * ARC_FRAME,
 		       desc->basecount*ARC_FRAME/1024);
@@ -173,4 +176,16 @@
 }
 
+static int cmd_reboot(cmd_arg_t *argv)
+{
+	arc_entry->reboot();
+	return 0;
+}
+static cmd_info_t reboot_info = {
+	.name = "reboot",
+	.description = "Reboot computer",
+	.func = cmd_reboot,
+	.argc = 0
+};
+
 /** Initialize ARC structure
  *
@@ -189,4 +204,8 @@
 	arc_putchar('C');
 	arc_putchar('\n');
+
+	/* Add command for resetting the computer */
+	cmd_initialize(&reboot_info);
+	cmd_register(&reboot_info);
 
 	return 0;
@@ -305,7 +324,6 @@
 			total += basesize;
 			
-			zone_create(ADDR2PFN(base),
-				    SIZE2FRAMES(ALIGN_DOWN(basesize,FRAME_SIZE)),
-				    ADDR2PFN(base),0);
+			zone_create(ADDR2PFN(base), SIZE2FRAMES(basesize),
+				    ADDR2PFN(base), 0);
 		}
 		desc = arc_entry->getmemorydescriptor(desc);
Index: arch/mips32/src/exception.c
===================================================================
--- arch/mips32/src/exception.c	(revision ede493eb5d01ca9729939a58af2ac8b3c4bae002)
+++ arch/mips32/src/exception.c	(revision 052da81d6e492cc87ae6e70a7e8929262d1ceabc)
@@ -75,6 +75,6 @@
 		rasymbol = s;
 	
-	printf("PC: %X(%s) RA: %X(%s)\n",pstate->epc,pcsymbol,
-	       pstate->ra,rasymbol);
+	printf("PC: %X(%s) RA: %X(%s), SP(%P)\n",pstate->epc,pcsymbol,
+	       pstate->ra,rasymbol, pstate->sp);
 }
 
Index: contrib/conf/bootindy
===================================================================
--- contrib/conf/bootindy	(revision 052da81d6e492cc87ae6e70a7e8929262d1ceabc)
+++ contrib/conf/bootindy	(revision 052da81d6e492cc87ae6e70a7e8929262d1ceabc)
@@ -0,0 +1,2 @@
+Without this the indy will not boot
+echo 1 > /proc/sys/net/ipv4/ip_no_pmtu_disc
Index: generic/src/mm/frame.c
===================================================================
--- generic/src/mm/frame.c	(revision ede493eb5d01ca9729939a58af2ac8b3c4bae002)
+++ generic/src/mm/frame.c	(revision 052da81d6e492cc87ae6e70a7e8929262d1ceabc)
@@ -137,8 +137,7 @@
 	if (zones.count+1 == ZONES_MAX)
 		panic("Maximum zone(%d) count exceeded.", ZONES_MAX);
-
 	for (i=0; i < zones.count; i++) {
 		/* Check for overflow */
-		z = zones.info[zones.count];
+		z = zones.info[i];
 		if (overlaps(newzone->base,newzone->count,
 			     z->base, z->count)) {
@@ -146,5 +145,5 @@
 			return -1;
 		}
-		if (z->base < newzone->base)
+		if (newzone->base < z->base)
 			break;
 	}
@@ -152,8 +151,6 @@
 	for (j=i;j < zones.count;j++)
 		zones.info[j+1] = zones.info[j];
-
 	zones.info[i] = newzone;
 	zones.count++;
-
 	spinlock_unlock(&zones.lock);
 	interrupts_restore(ipl);
@@ -768,5 +765,5 @@
 		frame_initialize(&z->frames[i]);
 	}
-
+	
 	/* Stuffing frames */
 	for (i = 0; i < count; i++) {
@@ -844,5 +841,4 @@
 			zone_mark_unavailable(z, i - z->base);
 		}
-
 	return znum;
 }
@@ -972,5 +968,5 @@
 	zone_t *zone;
 	int prefzone = 0;
-
+	
 	for (i=0; i < count; i++) {
 		zone = find_zone_and_lock(start+i,&prefzone);
@@ -996,6 +992,7 @@
 	frame_arch_init();
 	if (config.cpu_active == 1) {
-		frame_mark_unavailable(ADDR2PFN(KA2PA(config.base)),
-				       SIZE2FRAMES(config.kernel_size));
+		pfn_t firstframe = ADDR2PFN(KA2PA(config.base));
+		pfn_t lastframe = ADDR2PFN(KA2PA(config.base+config.kernel_size));
+		frame_mark_unavailable(firstframe,lastframe-firstframe+1);
 		if (config.init_size > 0)
 			frame_mark_unavailable(ADDR2PFN(KA2PA(config.init_addr)),
