From owner-svn-src-all@FreeBSD.ORG Thu Mar 19 13:08:25 2009 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F3C35106566B; Thu, 19 Mar 2009 13:08:24 +0000 (UTC) (envelope-from marius@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E01F48FC19; Thu, 19 Mar 2009 13:08:24 +0000 (UTC) (envelope-from marius@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n2JD8OWh062108; Thu, 19 Mar 2009 13:08:24 GMT (envelope-from marius@svn.freebsd.org) Received: (from marius@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n2JD8OnB062106; Thu, 19 Mar 2009 13:08:24 GMT (envelope-from marius@svn.freebsd.org) Message-Id: <200903191308.n2JD8OnB062106@svn.freebsd.org> From: Marius Strobl Date: Thu, 19 Mar 2009 13:08:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r190038 - in stable/7/sys: . contrib/pf dev/ath/ath_hal dev/cxgb sparc64/include sparc64/sparc64 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 19 Mar 2009 13:08:25 -0000 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 #include #include +#include #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,