svn commit: r295761 - in head/sys/riscv: include riscv

Ruslan Bukin br at FreeBSD.org
Thu Feb 18 15:28:58 UTC 2016


Author: br
Date: Thu Feb 18 15:28:57 2016
New Revision: 295761
URL: https://svnweb.freebsd.org/changeset/base/295761

Log:
  Increase kernel and user VA space.
  This allows us to boot with more than 128MB of physical memory.
  
  Sponsored by:	DARPA, AFRL
  Sponsored by:	HEIF5

Modified:
  head/sys/riscv/include/vmparam.h
  head/sys/riscv/riscv/locore.S
  head/sys/riscv/riscv/pmap.c

Modified: head/sys/riscv/include/vmparam.h
==============================================================================
--- head/sys/riscv/include/vmparam.h	Thu Feb 18 15:23:25 2016	(r295760)
+++ head/sys/riscv/include/vmparam.h	Thu Feb 18 15:28:57 2016	(r295761)
@@ -43,19 +43,19 @@
  * Virtual memory related constants, all in bytes
  */
 #ifndef MAXTSIZ
-#define	MAXTSIZ		(32*1024*1024)	/* max text size */
+#define	MAXTSIZ		(1*1024*1024*1024)	/* max text size */
 #endif
 #ifndef DFLDSIZ
 #define	DFLDSIZ		(128*1024*1024)		/* initial data size limit */
 #endif
 #ifndef MAXDSIZ
-#define	MAXDSIZ		(128*1024*1024)	/* max data size */
+#define	MAXDSIZ		(1*1024*1024*1024)	/* max data size */
 #endif
 #ifndef DFLSSIZ
-#define	DFLSSIZ		(2*1024*1024)		/* initial stack size limit */
+#define	DFLSSIZ		(128*1024*1024)		/* initial stack size limit */
 #endif
 #ifndef MAXSSIZ
-#define	MAXSSIZ		(8*1024*1024)	/* max stack size */
+#define	MAXSSIZ		(1*1024*1024*1024)	/* max stack size */
 #endif
 #ifndef SGROWSIZ
 #define	SGROWSIZ	(128*1024)		/* amount to grow stack */
@@ -128,12 +128,12 @@
  * We limit the size of the two spaces to 39 bits each.
  *
  * Upper region:	0xffffffffffffffff
- *			0xffffffffc0000000
+ *			0xffffff8000000000
  *
- * Hole:		0xffffffffbfffffff
- *			0x0000000080000000
+ * Hole:		0xffffff7fffffffff
+ *			0x0000008000000000
  *
- * Lower region:	0x000000007fffffff
+ * Lower region:	0x0000007fffffffff
  *			0x0000000000000000
  *
  * We use the upper region for the kernel, and the lower region for userland.
@@ -152,19 +152,20 @@
 #define	VM_MIN_ADDRESS		(0x0000000000000000UL)
 #define	VM_MAX_ADDRESS		(0xffffffffffffffffUL)
 
-/* 256 MiB of kernel addresses */
-#define	VM_MIN_KERNEL_ADDRESS	(0xffffffffc0000000UL)
-#define	VM_MAX_KERNEL_ADDRESS	(0xffffffffcfffffffUL)
-
-/* Direct Map for 512 MiB of PA: 0x0 - 0x1fffffff */
-#define	DMAP_MIN_ADDRESS	(0xffffffffd0000000UL)
-#define	DMAP_MAX_ADDRESS	(0xffffffffefffffffUL)
+/* 32 GiB of kernel addresses */
+#define	VM_MIN_KERNEL_ADDRESS	(0xffffff8000000000UL)
+#define	VM_MAX_KERNEL_ADDRESS	(0xffffff8800000000UL)
+
+/* Direct Map for 128 GiB of PA: 0x0 - 0x1fffffffff */
+#define	DMAP_MIN_ADDRESS	(0xffffffc000000000UL)
+#define	DMAP_MAX_ADDRESS	(0xffffffdfffffffffUL)
 
 #define	DMAP_MIN_PHYSADDR	(0x0000000000000000UL)
 #define	DMAP_MAX_PHYSADDR	(DMAP_MAX_ADDRESS - DMAP_MIN_ADDRESS)
 
 /* True if pa is in the dmap range */
-#define	PHYS_IN_DMAP(pa)	((pa) <= DMAP_MAX_PHYSADDR)
+#define	PHYS_IN_DMAP(pa)	((pa) >= DMAP_MIN_PHYSADDR && \
+    (pa) <= DMAP_MAX_PHYSADDR)
 /* True if va is in the dmap range */
 #define	VIRT_IN_DMAP(va)	((va) >= DMAP_MIN_ADDRESS && \
     (va) <= DMAP_MAX_ADDRESS)
@@ -186,13 +187,15 @@
 })
 
 #define	VM_MIN_USER_ADDRESS	(0x0000000000000000UL)
-#define	VM_MAX_USER_ADDRESS	(0x0000000080000000UL)
+#define	VM_MAX_USER_ADDRESS	(0x0000008000000000UL)
 
 #define	VM_MINUSER_ADDRESS	(VM_MIN_USER_ADDRESS)
 #define	VM_MAXUSER_ADDRESS	(VM_MAX_USER_ADDRESS)
 
 #define	KERNBASE		(VM_MIN_KERNEL_ADDRESS)
-#define	USRSTACK		(VM_MAX_USER_ADDRESS)
+#define	SHAREDPAGE		(VM_MAXUSER_ADDRESS - PAGE_SIZE)
+#define	USRSTACK		SHAREDPAGE
+
 #define	KERNENTRY		(0x200)
 
 /*

Modified: head/sys/riscv/riscv/locore.S
==============================================================================
--- head/sys/riscv/riscv/locore.S	Thu Feb 18 15:23:25 2016	(r295760)
+++ head/sys/riscv/riscv/locore.S	Thu Feb 18 15:28:57 2016	(r295761)
@@ -102,7 +102,6 @@ _start:
 	/* finish building ring */
 
 	la	t0, hardstack_end
-	sub	t0, t0, s11
 	csrw	mscratch, t0
 
 	la	t0, mentry

Modified: head/sys/riscv/riscv/pmap.c
==============================================================================
--- head/sys/riscv/riscv/pmap.c	Thu Feb 18 15:23:25 2016	(r295760)
+++ head/sys/riscv/riscv/pmap.c	Thu Feb 18 15:28:57 2016	(r295761)
@@ -445,31 +445,33 @@ pmap_early_vtophys(vm_offset_t l1pt, vm_
 }
 
 static void
-pmap_bootstrap_dmap(vm_offset_t l2pt)
+pmap_bootstrap_dmap(vm_offset_t l1pt, vm_paddr_t kernstart)
 {
 	vm_offset_t va;
 	vm_paddr_t pa;
-	pd_entry_t *l2;
-	u_int l2_slot;
+	pd_entry_t *l1;
+	u_int l1_slot;
 	pt_entry_t entry;
 	u_int pn;
 
+	pa = kernstart & ~L1_OFFSET;
 	va = DMAP_MIN_ADDRESS;
-	l2 = (pd_entry_t *)l2pt;
-	l2_slot = pmap_l2_index(DMAP_MIN_ADDRESS);
+	l1 = (pd_entry_t *)l1pt;
+	l1_slot = pmap_l1_index(DMAP_MIN_ADDRESS);
 
-	for (pa = 0; va < DMAP_MAX_ADDRESS; pa += L2_SIZE, va += L2_SIZE, l2_slot++) {
-		KASSERT(l2_slot < Ln_ENTRIES, ("Invalid L2 index"));
+	for (; va < DMAP_MAX_ADDRESS;
+	    pa += L1_SIZE, va += L1_SIZE, l1_slot++) {
+		KASSERT(l1_slot < Ln_ENTRIES, ("Invalid L1 index"));
 
 		/* superpages */
-		pn = ((pa >> L2_SHIFT) & Ln_ADDR_MASK);
+		pn = ((pa >> L1_SHIFT) & Ln_ADDR_MASK);
 		entry = (PTE_VALID | (PTE_TYPE_SRWX << PTE_TYPE_S));
-		entry |= (pn << PTE_PPN1_S);
+		entry |= (pn << PTE_PPN2_S);
 
-		pmap_load_store(&l2[l2_slot], entry);
+		pmap_load_store(&l1[l1_slot], entry);
 	}
 
-	cpu_dcache_wb_range((vm_offset_t)l2, PAGE_SIZE);
+	cpu_dcache_wb_range((vm_offset_t)l1, PAGE_SIZE);
 	cpu_tlb_flushID();
 }
 
@@ -485,7 +487,6 @@ pmap_bootstrap(vm_offset_t l1pt, vm_padd
 	vm_offset_t va, freemempos;
 	vm_offset_t dpcpu, msgbufpv;
 	vm_paddr_t pa, min_pa;
-	vm_offset_t l2pt;
 	int i;
 
 	kern_delta = KERNBASE - kernstart;
@@ -520,8 +521,7 @@ pmap_bootstrap(vm_offset_t l1pt, vm_padd
 	}
 
 	/* Create a direct map region early so we can use it for pa -> va */
-	l2pt = (l1pt + PAGE_SIZE);
-	pmap_bootstrap_dmap(l2pt);
+	pmap_bootstrap_dmap(l1pt, min_pa);
 
 	va = KERNBASE;
 	pa = KERNBASE - kern_delta;


More information about the svn-src-all mailing list