Index: arch/mips32/src/drivers/arc.c
===================================================================
--- arch/mips32/src/drivers/arc.c	(revision dd14cced76b628787db9a8988a5bc366c95c9f92)
+++ arch/mips32/src/drivers/arc.c	(revision c0b7f005e1ee1f0871599246c44fc2bac692b8b9)
@@ -35,4 +35,5 @@
 #include <mm/frame.h>
 #include <interrupt.h>
+#include <align.h>
 
 /* This is a good joke, SGI HAS different types than NT bioses... */
@@ -264,4 +265,7 @@
 	arc_memdescriptor_t *desc;
 	int total = 0;
+	__address base;
+	size_t basesize;
+	unsigned int i,j;
 
 	desc = arc_entry->getmemorydescriptor(NULL);
@@ -269,7 +273,15 @@
 		if (desc->type == FreeMemory ||
 		    desc->type == FreeContiguous) {
-			total += desc->basecount*ARC_FRAME;
-			zone_create_in_region(desc->basepage*ARC_FRAME,
-					      desc->basecount*ARC_FRAME);
+			base = desc->basepage*ARC_FRAME;
+			basesize = desc->basecount*ARC_FRAME;
+
+			if (base % FRAME_SIZE ) {
+				basesize -= FRAME_SIZE - (base % FRAME_SIZE);
+				base = ALIGN_UP(base, FRAME_SIZE);
+			}
+			basesize = ALIGN_DOWN(basesize, FRAME_SIZE);
+
+			total += basesize;
+			zone_create_in_region(base, basesize);
 		}
 		desc = arc_entry->getmemorydescriptor(desc);
