Index: kernel/arch/sparc64/include/mm/sun4u/km.h
===================================================================
--- kernel/arch/sparc64/include/mm/sun4u/km.h	(revision 55896b6837c19f8fe505af9cbe31069aa02c168b)
+++ kernel/arch/sparc64/include/mm/sun4u/km.h	(revision ec1c8e6e352b3d48ddb5e318e01afc0a65d3b57a)
@@ -36,4 +36,19 @@
 #define KERN_sparc64_sun4u_KM_H_
 
+/*
+ * Be conservative and assume the 44-bit virtual address width as found
+ * on the UltraSPARC CPU, even when running on a newer CPU, such as
+ * UltraSPARC III, which has the full 64-bit virtual address width.
+ *
+ * Do not use the 4 GiB area on either side of the VA hole to meet the
+ * limitations of the UltraSPARC CPU.
+ */
+
+#define KM_SPARC64_US_IDENTITY_START		UINT64_C(0x0000000000000000)
+#define KM_SPARC64_US_IDENTITY_SIZE		UINT64_C(0x000007ff00000000)
+
+#define KM_SPARC64_US_NON_IDENTITY_START	UINT64_C(0xfffff80100000000)
+#define KM_SPARC64_US_NON_IDENTITY_SIZE		UINT64_C(0x000007ff00000000)
+
 extern void km_identity_arch_init(void);
 extern void km_non_identity_arch_init(void);
Index: kernel/arch/sparc64/include/mm/sun4v/km.h
===================================================================
--- kernel/arch/sparc64/include/mm/sun4v/km.h	(revision 55896b6837c19f8fe505af9cbe31069aa02c168b)
+++ kernel/arch/sparc64/include/mm/sun4v/km.h	(revision ec1c8e6e352b3d48ddb5e318e01afc0a65d3b57a)
@@ -36,4 +36,15 @@
 #define KERN_sparc64_sun4v_KM_H_
 
+/*
+ * Do not use the 4 GiB area on either side of the VA hole to meet the
+ * limitations of the UltraSPARC T1 CPU.
+ */
+
+#define KM_SPARC64_T1_IDENTITY_START		UINT64_C(0x0000000000000000)
+#define KM_SPARC64_T1_IDENTITY_SIZE		UINT64_C(0x00007fff00000000)
+
+#define KM_SPARC64_T1_NON_IDENTITY_START	UINT64_C(0xffff800100000000)
+#define KM_SPARC64_T1_NON_IDENTITY_SIZE		UINT64_C(0x00007fff00000000)
+
 extern void km_identity_arch_init(void);
 extern void km_non_identity_arch_init(void);
Index: kernel/arch/sparc64/src/mm/sun4u/km.c
===================================================================
--- kernel/arch/sparc64/src/mm/sun4u/km.c	(revision 55896b6837c19f8fe505af9cbe31069aa02c168b)
+++ kernel/arch/sparc64/src/mm/sun4u/km.c	(revision ec1c8e6e352b3d48ddb5e318e01afc0a65d3b57a)
@@ -32,11 +32,17 @@
 
 #include <arch/mm/km.h>
+#include <mm/km.h>
+#include <config.h>
 
 void km_identity_arch_init(void)
 {
+	config.identity_base = KM_SPARC64_US_IDENTITY_START;
+	config.identity_size = KM_SPARC64_US_IDENTITY_SIZE;
 }
 
 void km_non_identity_arch_init(void)
 {
+	km_non_identity_span_add(KM_SPARC64_US_NON_IDENTITY_START,
+	    KM_SPARC64_US_NON_IDENTITY_SIZE);
 }
 
Index: kernel/arch/sparc64/src/mm/sun4v/km.c
===================================================================
--- kernel/arch/sparc64/src/mm/sun4v/km.c	(revision 55896b6837c19f8fe505af9cbe31069aa02c168b)
+++ kernel/arch/sparc64/src/mm/sun4v/km.c	(revision ec1c8e6e352b3d48ddb5e318e01afc0a65d3b57a)
@@ -32,11 +32,17 @@
 
 #include <arch/mm/km.h>
+#include <mm/km.h>
+#include <config.h>
 
 void km_identity_arch_init(void)
 {
+	config.identity_base = KM_SPARC64_T1_IDENTITY_START;
+	config.identity_size = KM_SPARC64_T1_IDENTITY_SIZE;
 }
 
 void km_non_identity_arch_init(void)
 {
+	km_non_identity_span_add(KM_SPARC64_T1_NON_IDENTITY_START,
+	    KM_SPARC64_T1_NON_IDENTITY_SIZE);
 }
 
