Index: kernel/arch/sparc64/src/mm/frame.c
===================================================================
--- kernel/arch/sparc64/src/mm/frame.c	(revision 79f119b9e03afca087e6fef2c56a7fabb01c8cc1)
+++ kernel/arch/sparc64/src/mm/frame.c	(revision aa802679067c94e7e628f87857e6f9d9c5a55aaf)
@@ -65,12 +65,18 @@
 	
 			confdata = ADDR2PFN(start);
-			if (confdata == 0)
-				confdata = 2;
+			if (confdata == ADDR2PFN(KA2PA(PFN2ADDR(0))))
+				confdata = ADDR2PFN(KA2PA(PFN2ADDR(2)));
 			zone_create(ADDR2PFN(start), SIZE2FRAMES(ALIGN_DOWN(size, FRAME_SIZE)),	confdata, 0);
-		
 			last_frame = max(last_frame, start + ALIGN_UP(size, FRAME_SIZE));
 		}
 	}
-
+	
+	/*
+	 * On sparc64, physical memory can start on a non-zero address.
+	 * The generic frame_init() only marks PFN 0 as not free, so we
+	 * must mark the physically first frame not free explicitly here,
+	 * no matter what is its address.
+	 */
+	frame_mark_unavailable(ADDR2PFN(KA2PA(PFN2ADDR(0))), 1);
 }
 
