svn commit: r190038 - in stable/7/sys: . contrib/pf dev/ath/ath_hal dev/cxgb sparc64/include sparc64/sparc64

Marius Strobl marius at FreeBSD.org
Thu Mar 19 06:08:25 PDT 2009


Author: marius
Date: Thu Mar 19 13:08:24 2009
New Revision: 190038
URL: http://svn.freebsd.org/changeset/base/190038

Log:
  MFC: r182767
  
  The physical address space of cheetah-class CPUs has been extended
  to 43 bits so update TD_PA_BITS accordingly. For the most part this
  increase is transparent to the existing code except for when reading
  the physical address from ASI_{D,I}TLB_DATA_ACCESS_REG, which we
  only do in the loader and which was already adjusted in r190002, or
  from the OFW translations node.
  While at it, ensure we are only taking valid OFW mapping entries
  into account.

Modified:
  stable/7/sys/   (props changed)
  stable/7/sys/contrib/pf/   (props changed)
  stable/7/sys/dev/ath/ath_hal/   (props changed)
  stable/7/sys/dev/cxgb/   (props changed)
  stable/7/sys/sparc64/include/tte.h
  stable/7/sys/sparc64/sparc64/pmap.c

Modified: stable/7/sys/sparc64/include/tte.h
==============================================================================
--- stable/7/sys/sparc64/include/tte.h	Thu Mar 19 13:03:17 2009	(r190037)
+++ stable/7/sys/sparc64/include/tte.h	Thu Mar 19 13:08:24 2009	(r190038)
@@ -36,21 +36,24 @@
 
 #define	TD_SIZE_SHIFT	(61)
 #define	TD_SOFT2_SHIFT	(50)
-#define	TD_DIAG_SHIFT	(41)
+#define	TD_DIAG_SF_SHIFT	(41)
+#define	TD_RSVD_CH_SHIFT	(43)
 #define	TD_PA_SHIFT	(13)
 #define	TD_SOFT_SHIFT	(7)
 
 #define	TD_SIZE_BITS	(2)
 #define	TD_SOFT2_BITS	(9)
-#define	TD_DIAG_BITS	(9)
+#define	TD_DIAG_SF_BITS	(9)
+#define	TD_RSVD_CH_BITS	(7)
 #define	TD_PA_CH_BITS	(30)
 #define	TD_PA_SF_BITS	(28)
-#define	TD_PA_BITS	TD_PA_SF_BITS
+#define	TD_PA_BITS	TD_PA_CH_BITS
 #define	TD_SOFT_BITS	(6)
 
 #define	TD_SIZE_MASK	((1UL << TD_SIZE_BITS) - 1)
 #define	TD_SOFT2_MASK	((1UL << TD_SOFT2_BITS) - 1)
-#define	TD_DIAG_MASK	((1UL << TD_DIAG_BITS) - 1)
+#define	TD_DIAG_SF_MASK	((1UL << TD_DIAG_SF_BITS) - 1)
+#define	TD_RSVD_CH_MASK	((1UL << TD_RSVD_CH_BITS) - 1)
 #define	TD_PA_CH_MASK	((1UL << TD_PA_CH_BITS) - 1)
 #define	TD_PA_SF_MASK	((1UL << TD_PA_SF_BITS) - 1)
 #define	TD_PA_MASK	((1UL << TD_PA_BITS) - 1)

Modified: stable/7/sys/sparc64/sparc64/pmap.c
==============================================================================
--- stable/7/sys/sparc64/sparc64/pmap.c	Thu Mar 19 13:03:17 2009	(r190037)
+++ stable/7/sys/sparc64/sparc64/pmap.c	Thu Mar 19 13:08:24 2009	(r190038)
@@ -103,6 +103,7 @@ __FBSDID("$FreeBSD$");
 #include <machine/tlb.h>
 #include <machine/tte.h>
 #include <machine/tsb.h>
+#include <machine/ver.h>
 
 #define	PMAP_DEBUG
 
@@ -473,6 +474,8 @@ pmap_bootstrap(vm_offset_t ekva)
 		    "translation: start=%#lx size=%#lx tte=%#lx",
 		    translations[i].om_start, translations[i].om_size,
 		    translations[i].om_tte);
+		if ((translations[i].om_tte & TD_V) == 0)
+			continue;
 		if (translations[i].om_start < VM_MIN_PROM_ADDRESS ||
 		    translations[i].om_start > VM_MAX_PROM_ADDRESS)
 			continue;
@@ -483,7 +486,11 @@ pmap_bootstrap(vm_offset_t ekva)
 			tp->tte_vpn = TV_VPN(va, TS_8K);
 			tp->tte_data =
 			    ((translations[i].om_tte &
-			      ~(TD_SOFT_MASK << TD_SOFT_SHIFT)) | TD_EXEC) +
+			    ~((TD_SOFT2_MASK << TD_SOFT2_SHIFT) |
+			    (cpu_impl < CPU_IMPL_ULTRASPARCIII ?
+			    (TD_DIAG_SF_MASK << TD_DIAG_SF_SHIFT) :
+			    (TD_RSVD_CH_MASK << TD_RSVD_CH_SHIFT)) |
+			    (TD_SOFT_MASK << TD_SOFT_SHIFT))) | TD_EXEC) +
 			    off;
 		}
 	}
@@ -603,6 +610,8 @@ pmap_init(void)
 	for (i = 0; i < translations_size; i++) {
 		addr = translations[i].om_start;
 		size = translations[i].om_size;
+		if ((translations[i].om_tte & TD_V) == 0)
+			continue;
 		if (addr < VM_MIN_PROM_ADDRESS || addr > VM_MAX_PROM_ADDRESS)
 			continue;
 		result = vm_map_find(kernel_map, NULL, 0, &addr, size, FALSE,


More information about the svn-src-stable-7 mailing list