summaryrefslogtreecommitdiff
path: root/usr/src/uts/sun4u
diff options
context:
space:
mode:
authordp78419 <none@none>2007-03-05 13:11:00 -0800
committerdp78419 <none@none>2007-03-05 13:11:00 -0800
commitbb121940c2fe627557326e0143391ace6e6b7372 (patch)
tree121c7d2e0883c513df7bdf5823d0d6124b53dffa /usr/src/uts/sun4u
parent7d64d5d26a5c77ec77ec4af21ecfd1fdb5b908d3 (diff)
downloadillumos-gate-bb121940c2fe627557326e0143391ace6e6b7372.tar.gz
6510878 Kernel Boot time data structures can be mapped with Large pages to improve performance
Diffstat (limited to 'usr/src/uts/sun4u')
-rw-r--r--usr/src/uts/sun4u/cpu/us3_cheetah.c56
-rw-r--r--usr/src/uts/sun4u/lw8/Makefile.lw83
-rw-r--r--usr/src/uts/sun4u/serengeti/Makefile.serengeti.shared3
-rw-r--r--usr/src/uts/sun4u/vm/mach_vm_dep.c7
4 files changed, 30 insertions, 39 deletions
diff --git a/usr/src/uts/sun4u/cpu/us3_cheetah.c b/usr/src/uts/sun4u/cpu/us3_cheetah.c
index 217f285ccc..60817d847e 100644
--- a/usr/src/uts/sun4u/cpu/us3_cheetah.c
+++ b/usr/src/uts/sun4u/cpu/us3_cheetah.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -151,6 +151,7 @@ cpu_fiximp(pnode_t dnode)
max_privmap_lpsize = MMU_PAGESIZE;
max_utext_lpsize = MMU_PAGESIZE;
max_shm_lpsize = MMU_PAGESIZE;
+ max_bootlp_tteszc = TTE8K;
}
void
@@ -663,53 +664,36 @@ uint64_t ecache_tl1_flushaddr = (uint64_t)-1; /* physaddr for E$ flushing */
/*
* Allocate and initialize the exclusive displacement flush area.
- * Must be called before startup_bop_gone().
+ * Called twice. The first time allocates virtual address. The second
+ * call looks up the physical address.
*/
caddr_t
ecache_init_scrub_flush_area(caddr_t alloc_base)
{
- unsigned size = 2 * CH_ECACHE_8M_SIZE;
- caddr_t tmp_alloc_base = alloc_base;
- caddr_t flush_alloc_base =
- (caddr_t)roundup((uintptr_t)alloc_base, size);
- caddr_t ecache_tl1_virtaddr;
+ static caddr_t ecache_tl1_virtaddr;
- /*
- * Allocate the physical memory for the exclusive flush area
- *
- * Need to allocate an exclusive flush area that is twice the
- * largest supported E$ size, physically contiguous, and
- * aligned on twice the largest E$ size boundary.
- *
- * Memory allocated via BOP_ALLOC is included in the "cage"
- * from the DR perspective and due to this, its physical
- * address will never change and the memory will not be
- * removed.
- *
- * BOP_ALLOC takes 4 arguments: bootops, virtual address hint,
- * size of the area to allocate, and alignment of the area to
- * allocate. It returns zero if the allocation fails, or the
- * virtual address for a successful allocation. Memory BOP_ALLOC'd
- * is physically contiguous.
- */
- if ((ecache_tl1_virtaddr = (caddr_t)BOP_ALLOC(bootops,
- flush_alloc_base, size, size)) != NULL) {
+ if (alloc_base != NULL) {
+ /*
+ * Need to allocate an exclusive flush area that is twice the
+ * largest supported E$ size, physically contiguous, and
+ * aligned on twice the largest E$ size boundary.
+ */
+ unsigned size = 2 * CH_ECACHE_8M_SIZE;
+ caddr_t va = (caddr_t)roundup((uintptr_t)alloc_base, size);
- tmp_alloc_base =
- (caddr_t)roundup((uintptr_t)(ecache_tl1_virtaddr + size),
- ecache_alignsize);
+ ecache_tl1_virtaddr = va;
+ alloc_base = va + size;
+ } else {
/*
- * get the physical address of the exclusive flush area
+ * Get the physical address of the exclusive flush area.
*/
+ ASSERT(ecache_tl1_virtaddr != NULL);
ecache_tl1_flushaddr = va_to_pa(ecache_tl1_virtaddr);
-
- } else {
- ecache_tl1_virtaddr = (caddr_t)-1;
- cmn_err(CE_NOTE, "!ecache_init_scrub_flush_area failed\n");
+ ASSERT(ecache_tl1_flushaddr != ((uint64_t)-1));
}
- return (tmp_alloc_base);
+ return (alloc_base);
}
/*
diff --git a/usr/src/uts/sun4u/lw8/Makefile.lw8 b/usr/src/uts/sun4u/lw8/Makefile.lw8
index 0f718064a0..1f310679ca 100644
--- a/usr/src/uts/sun4u/lw8/Makefile.lw8
+++ b/usr/src/uts/sun4u/lw8/Makefile.lw8
@@ -20,7 +20,7 @@
#
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#ident "%Z%%M% %I% %E% SMI"
@@ -112,6 +112,7 @@ MACHINE_DEFS += -DMAX_MEM_NODES=8
MACHINE_DEFS += -DLOCKED_DTLB_ENTRIES=6
# Max IOSRAM TOC major version number supported
MACHINE_DEFS += -DMAX_IOSRAM_TOC_VER=0x1
+MACHINE_DEFS += -DC_OBP
# Define for inline pre-processing since
# cpp not smart about v9 yet.
diff --git a/usr/src/uts/sun4u/serengeti/Makefile.serengeti.shared b/usr/src/uts/sun4u/serengeti/Makefile.serengeti.shared
index 0934384f96..d7a3d50d3c 100644
--- a/usr/src/uts/sun4u/serengeti/Makefile.serengeti.shared
+++ b/usr/src/uts/sun4u/serengeti/Makefile.serengeti.shared
@@ -19,7 +19,7 @@
# CDDL HEADER END
#
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#ident "%Z%%M% %I% %E% SMI"
@@ -128,6 +128,7 @@ MACHINE_DEFS += -DMAX_MEM_NODES=8
MACHINE_DEFS += -DLOCKED_DTLB_ENTRIES=6
# Max IOSRAM TOC major version number supported
MACHINE_DEFS += -DMAX_IOSRAM_TOC_VER=0x1
+MACHINE_DEFS += -DC_OBP
# Define for inline pre-processing since
# cpp is not smart about v9 yet.
diff --git a/usr/src/uts/sun4u/vm/mach_vm_dep.c b/usr/src/uts/sun4u/vm/mach_vm_dep.c
index 449c2a684a..9550242d0e 100644
--- a/usr/src/uts/sun4u/vm/mach_vm_dep.c
+++ b/usr/src/uts/sun4u/vm/mach_vm_dep.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -95,6 +95,11 @@ hw_pagesize_t hw_page_array[] = {
};
/*
+ * Maximum page size used to map 64-bit memory segment kmem64_base..kmem64_end
+ */
+int max_bootlp_tteszc = TTE4M;
+
+/*
* use_text_pgsz64k and use_text_pgsz512k allow the user to turn on these
* additional text page sizes for USIII-IV+ and OPL by changing the default
* values via /etc/system.