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;
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to