Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/riscv Misc changes in RISC-V.



details:   https://anonhg.NetBSD.org/src/rev/f5f590bd8bf7
branches:  trunk
changeset: 452030:f5f590bd8bf7
user:      maxv <maxv%NetBSD.org@localhost>
date:      Sun Jun 16 07:42:52 2019 +0000

description:
Misc changes in RISC-V.

diffstat:

 sys/arch/riscv/conf/Makefile.riscv  |    6 +-
 sys/arch/riscv/conf/files.riscv     |    3 +-
 sys/arch/riscv/conf/kern.ldscript   |  137 ++++++++++++----------------
 sys/arch/riscv/include/pmap.h       |   28 +++--
 sys/arch/riscv/include/pte.h        |  170 +++++++++++++++--------------------
 sys/arch/riscv/include/sysreg.h     |   41 ++++----
 sys/arch/riscv/riscv/db_machdep.c   |    4 +-
 sys/arch/riscv/riscv/genassym.cf    |   14 +-
 sys/arch/riscv/riscv/locore.S       |   14 +-
 sys/arch/riscv/riscv/pmap_machdep.c |   56 ++++-------
 sys/arch/riscv/riscv/trap.c         |    8 +-
 11 files changed, 218 insertions(+), 263 deletions(-)

diffs (truncated from 836 to 300 lines):

diff -r f6e4922c600b -r f5f590bd8bf7 sys/arch/riscv/conf/Makefile.riscv
--- a/sys/arch/riscv/conf/Makefile.riscv        Sat Jun 15 15:22:56 2019 +0000
+++ b/sys/arch/riscv/conf/Makefile.riscv        Sun Jun 16 07:42:52 2019 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: Makefile.riscv,v 1.4 2019/06/01 12:42:27 maxv Exp $
+#      $NetBSD: Makefile.riscv,v 1.5 2019/06/16 07:42:52 maxv Exp $
 
 # Makefile for NetBSD
 #
@@ -69,8 +69,8 @@
 ## (5) link settings
 ##
 .if ${MACHINE_ARCH} == "riscv64" && ${LP64:Uyes} == "yes"
-TEXTADDR?=              0xFFFFFFC000000000
-.else   
+TEXTADDR?=             0xFFFFFFC000000000
+.else
 TEXTADDR?=             0xC0001000
 .endif
 KERNLDSCRIPT?=         ${RISCV}/conf/kern.ldscript
diff -r f6e4922c600b -r f5f590bd8bf7 sys/arch/riscv/conf/files.riscv
--- a/sys/arch/riscv/conf/files.riscv   Sat Jun 15 15:22:56 2019 +0000
+++ b/sys/arch/riscv/conf/files.riscv   Sun Jun 16 07:42:52 2019 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: files.riscv,v 1.2 2019/06/01 12:42:27 maxv Exp $
+#      $NetBSD: files.riscv,v 1.3 2019/06/16 07:42:52 maxv Exp $
 #
 
 maxpartitions  16
@@ -41,7 +41,6 @@
 file   kern/subr_disk_mbr.c                    disk
 
 file   uvm/pmap/pmap.c
-file   uvm/pmap/pmap_pvt.c
 file   uvm/pmap/pmap_segtab.c
 file   uvm/pmap/pmap_tlb.c
 
diff -r f6e4922c600b -r f5f590bd8bf7 sys/arch/riscv/conf/kern.ldscript
--- a/sys/arch/riscv/conf/kern.ldscript Sat Jun 15 15:22:56 2019 +0000
+++ b/sys/arch/riscv/conf/kern.ldscript Sun Jun 16 07:42:52 2019 +0000
@@ -1,82 +1,63 @@
-/* Script for -n: mix text and data on same page */
-OUTPUT_FORMAT("elf64-littleriscv")
 OUTPUT_ARCH(riscv)
-ENTRY(_start)
+ENTRY(start)
+
+__PAGE_SIZE = 0x1000 ;
+__LARGE_PAGE_SIZE = 0x200000 ;
+
 SECTIONS
 {
-  /* Read-only sections, merged into text segment: */
-  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0xffffffff80000000)); . = SEGMENT_START("text-segment", 0xffffffff80000000) + SIZEOF_HEADERS;
-  .text           :
-  {
-    _ftext = . ;
-    *(.text)
-    *(.text.unlikely .text.*_unlikely)
-    *(.text.exit .text.exit.*)
-    *(.text.startup .text.startup.*)
-    *(.text.hot .text.hot.*)
-    *(.stub .text.* .gnu.linkonce.t.*)
-  }
-  PROVIDE (__etext = .);
-  PROVIDE (_etext = .);
-  PROVIDE (etext = .);
-  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
-  .rodata1        : { *(.rodata1) }
-  .sdata2         :
-  {
-    *(.sdata2 .sdata2.* .gnu.linkonce.s2.*)
-  }
-  .sbss2          : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) }
-  .eh_frame_hdr : { *(.eh_frame_hdr) }
-  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
-  /* These sections are generated by the Sun/Oracle C++ compiler.  */
-  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges
-  .exception_ranges*) }
-  /* Adjust the address for the data segment.  We want to adjust up to
-     the same address within the page on the next page up.  */
-  . = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1)); . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
-  /* Exception handling  */
-  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }
-  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges .exception_ranges*) }
-  . = DATA_SEGMENT_RELRO_END (0, .);
-  .data           :
-  {
-    _fdata = . ;
-    *(.data .data.* .gnu.linkonce.d.*)
-    SORT(CONSTRUCTORS)
-  }
-  .data1          : { *(.data1) }
-  /* We want the small data sections together, so single-instruction offsets
-     can access them all, and initialized data all before uninitialized, so
-     we can shorten the on-disk segment size.  */
-  .sdata          :
-  {
-    /*_gp = . + 0x800;*/
-    *(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata*)
-    *(.sdata .sdata.* .gnu.linkonce.s.*)
-  }
-  _edata = .; PROVIDE (edata = .);
-  . = .;
-  __bss_start = .;
-  _fbss = .;
-  .sbss           :
-  {
-    *(.dynsbss)
-    *(.sbss .sbss.* .gnu.linkonce.sb.*)
-    *(.scommon)
-  }
-  .bss            :
-  {
-    *(.dynbss)
-    *(.bss .bss.* .gnu.linkonce.b.*)
-    *(COMMON)
-    /* Align here to ensure that the .bss section occupies space up to
-       _end.  Align after .bss to ensure correct alignment even if the
-       .bss section disappears because there are no input sections.
-       FIXME: Why do we need it? When there is no .bss section, we don't
-       pad the .data section.  */
-    . = ALIGN(. != 0 ? 64 / 8 : 1);
-  }
-  . = ALIGN(64 / 8);
-  _end = .; PROVIDE (end = .);
-  . = DATA_SEGMENT_END (.);
+       .text : AT (ADDR(.text) & 0x0fffffff)
+       {
+               *(.text)
+               *(.text.*)
+               *(.stub)
+       }
+       _etext = . ;
+       PROVIDE (etext = .);
+
+       . = ALIGN(__LARGE_PAGE_SIZE);
+
+       __rodata_start = . ;
+       .rodata :
+       {
+               *(.rodata)
+               *(.rodata.*)
+               *(.srodata)
+               *(.srodata.*)
+       }
+
+       . = ALIGN(__LARGE_PAGE_SIZE);
+
+       __data_start = . ;
+       .data :
+       {
+               *(.data)
+               *(.sdata)
+               *(.sdata.*)
+       }
+       _edata = . ;
+       PROVIDE (edata = .) ;
+
+       __bss_start = .;
+       .bss :
+       {
+               *(.bss)
+               *(.bss.*)
+               *(.sbss)
+               *(.sbss.*)
+               *(COMMON)
+               . = ALIGN(__LARGE_PAGE_SIZE);
+       }
+
+       . = ALIGN(__PAGE_SIZE);
+
+       /* End of the kernel image */
+       __kernel_end = . ;
+
+       _end = . ;
+       PROVIDE (end = .) ;
+       .note.netbsd.ident :
+       {
+               KEEP(*(.note.netbsd.ident));
+       }
 }
diff -r f6e4922c600b -r f5f590bd8bf7 sys/arch/riscv/include/pmap.h
--- a/sys/arch/riscv/include/pmap.h     Sat Jun 15 15:22:56 2019 +0000
+++ b/sys/arch/riscv/include/pmap.h     Sun Jun 16 07:42:52 2019 +0000
@@ -1,11 +1,11 @@
-/* $NetBSD: pmap.h,v 1.2 2019/06/01 12:42:28 maxv Exp $ */
+/* $NetBSD: pmap.h,v 1.3 2019/06/16 07:42:52 maxv Exp $ */
 
-/*-
- * Copyright (c) 2014 The NetBSD Foundation, Inc.
+/*
+ * Copyright (c) 2014, 2019 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
  * This code is derived from software contributed to The NetBSD Foundation
- * by Matt Thomas of 3am Software Foundry.
+ * by Matt Thomas (of 3am Software Foundry) and Maxime Villard.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -47,17 +47,19 @@
 
 #include <riscv/pte.h>
 
-#define        PMAP_SEGTABSIZE         NPTEPG
+#define        PMAP_SEGTABSIZE NPTEPG
 
-#define NBSEG          (NBPG*NPTEPG)
+#define NBSEG          (PAGE_SIZE * NPTEPG)
+
 #ifdef _LP64
-#define NBXSEG         (NBSEG*NSEGPG)
+#define NBXSEG         (NBSEG * NSEGPG)
 #define XSEGSHIFT      (SEGSHIFT + PGSHIFT - 3)
-#define XSEGOFSET      (PTE_PPN1|SEGOFSET)
+#define XSEGOFSET      (PTE_PPN1 | SEGOFSET)
 #define SEGSHIFT       (PGSHIFT + PGSHIFT - 3)
 #else
 #define SEGSHIFT       (PGSHIFT + PGSHIFT - 2)
 #endif
+
 #define SEGOFSET       (PTE_PPN0|PAGE_MASK)
 
 #define KERNEL_PID     0
@@ -92,9 +94,7 @@
        __asm __volatile("fence\trw,rw; fence.i");
 }
 
-
 #include <uvm/pmap/tlb.h>
-
 #include <uvm/pmap/pmap_tlb.h>
 
 #define PMAP_GROWKERNEL
@@ -124,6 +124,11 @@
 void   pmap_md_pdetab_init(struct pmap *);
 bool   pmap_md_ok_to_steal_p(const uvm_physseg_t, size_t);
 
+extern vaddr_t pmap_direct_base;
+extern vaddr_t pmap_direct_end;
+#define PMAP_DIRECT_MAP(pa)    (pmap_direct_base + (pa))
+#define PMAP_DIRECT_UNMAP(va)  ((paddr_t)(va) - pmap_direct_base)
+
 #ifdef __PMAP_PRIVATE
 static inline void
 pmap_md_page_syncicache(struct vm_page *pg, const kcpuset_t *kc)
@@ -159,9 +164,6 @@
 #endif /* __PMAP_PRIVATE */
 #endif /* _KERNEL */
 
-#define POOL_VTOPHYS(va)       ((paddr_t)((vaddr_t)(va)-VM_MAX_KERNEL_ADDRESS))
-#define POOL_PHYSTOV(pa)       ((vaddr_t)(paddr_t)(pa)+VM_MAX_KERNEL_ADDRESS)
-
 #include <uvm/pmap/pmap.h>
 
 #endif /* !_MODULE */
diff -r f6e4922c600b -r f5f590bd8bf7 sys/arch/riscv/include/pte.h
--- a/sys/arch/riscv/include/pte.h      Sat Jun 15 15:22:56 2019 +0000
+++ b/sys/arch/riscv/include/pte.h      Sun Jun 16 07:42:52 2019 +0000
@@ -1,10 +1,11 @@
-/* $NetBSD: pte.h,v 1.2 2019/06/01 12:42:28 maxv Exp $ */
-/*-
- * Copyright (c) 2014 The NetBSD Foundation, Inc.
+/* $NetBSD: pte.h,v 1.3 2019/06/16 07:42:52 maxv Exp $ */
+
+/*
+ * Copyright (c) 2014, 2019 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
  * This code is derived from software contributed to The NetBSD Foundation
- * by Matt Thomas of 3am Software Foundry.
+ * by Matt Thomas (of 3am Software Foundry) and Maxime Villard.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -31,68 +32,63 @@
 #ifndef _RISCV_PTE_H_
 #define _RISCV_PTE_H_
 
-//
-// RV32 page table entry (4 GB VA space)
-//   [31..22] = PPN[1]
-//   [21..12] = PPN[0]
-//   [11.. 9] = software
-//
-// RV64 page table entry (4 TB VA space)
-//   [64..43] = 0
-//   [42..33] = PPN[2]
-//   [32..23] = PPN[1]
-//   [22..13] = PPN[0]
-//   [12.. 9] = software
-//
-// Common to both:
-//   [8] = SX
-//   [7] = SW
-//   [6] = SR
-//   [5] = UX
-//   [4] = UW
-//   [3] = UR



Home | Main Index | Thread Index | Old Index