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
mailing list