Index: arch/sparc64/Makefile.inc
===================================================================
--- arch/sparc64/Makefile.inc	(revision 5ca586a12b3700df6bee38c12a8d522873270874)
+++ arch/sparc64/Makefile.inc	(revision c1982e45cfd67b998329f3d32f3b52cbbc6caa5b)
@@ -66,5 +66,4 @@
 
 CONFIG_FB = y
-CONFIG_FB_MAP_ARCH = y
 
 ## Compile with support for i8042 controller.
Index: arch/sparc64/src/console.c
===================================================================
--- arch/sparc64/src/console.c	(revision 5ca586a12b3700df6bee38c12a8d522873270874)
+++ arch/sparc64/src/console.c	(revision c1982e45cfd67b998329f3d32f3b52cbbc6caa5b)
@@ -70,10 +70,4 @@
 	mutex_initialize(&canwork);
 	ofw_console_active = 1;
-}
-
-void fb_map_arch(__address virtaddr, __address physaddr, size_t size)
-{
-	dtlb_insert_mapping(virtaddr, physaddr, PAGESIZE_512K, true, false);
-	dtlb_insert_mapping(virtaddr + 512*1024, physaddr + 512*1024, PAGESIZE_512K, true, false);
 }
 
Index: arch/sparc64/src/mm/page.c
===================================================================
--- arch/sparc64/src/mm/page.c	(revision 5ca586a12b3700df6bee38c12a8d522873270874)
+++ arch/sparc64/src/mm/page.c	(revision c1982e45cfd67b998329f3d32f3b52cbbc6caa5b)
@@ -28,5 +28,8 @@
 
 #include <arch/mm/page.h>
+#include <arch/mm/tlb.h>
 #include <genarch/mm/page_ht.h>
+#include <mm/frame.h>
+#include <bitops.h>
 
 void page_arch_init(void)
@@ -34,2 +37,19 @@
 	page_mapping_operations = &ht_mapping_operations;
 }
+
+__address hw_map(__address physaddr, size_t size)
+{
+	unsigned int order;
+	
+	if (size <= FRAME_SIZE)
+		order = 0;
+	else
+		order = (fnzb32(size - 1) + 1) - FRAME_WIDTH;
+	
+	__address virtaddr = PA2KA(PFN2ADDR(frame_alloc(order, FRAME_KA)));
+	
+	dtlb_insert_mapping(virtaddr, physaddr, PAGESIZE_512K, true, false);
+	dtlb_insert_mapping(virtaddr + 512 * 1024, physaddr + 512 * 1024, PAGESIZE_512K, true, false);
+	
+	return virtaddr;
+}
