Module Name:    src
Committed By:   maxv
Date:           Sat Jun  1 12:42:28 UTC 2019

Modified Files:
        src/common/lib/libc/arch/riscv/atomic: Makefile.inc
        src/sys/arch/riscv/conf: GENERIC Makefile.riscv files.riscv
        src/sys/arch/riscv/include: cpu.h elf_machdep.h mutex.h param.h pmap.h
            pte.h vmparam.h
        src/sys/arch/riscv/riscv: core_machdep.c genassym.cf locore.S
            pmap_machdep.c
        src/sys/uvm/pmap: pmap.h
Added Files:
        src/sys/arch/riscv/compile: Makefile

Log Message:
Misc changes in RISC-V. Start changing the memory layout, too.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/common/lib/libc/arch/riscv/atomic/Makefile.inc
cvs rdiff -u -r0 -r1.1 src/sys/arch/riscv/compile/Makefile
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/riscv/conf/GENERIC
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/riscv/conf/Makefile.riscv
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/riscv/conf/files.riscv
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/riscv/include/cpu.h \
    src/sys/arch/riscv/include/vmparam.h
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/riscv/include/elf_machdep.h
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/riscv/include/mutex.h \
    src/sys/arch/riscv/include/pmap.h src/sys/arch/riscv/include/pte.h
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/riscv/include/param.h
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/riscv/riscv/core_machdep.c
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/riscv/riscv/genassym.cf
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/riscv/riscv/locore.S
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/riscv/riscv/pmap_machdep.c
cvs rdiff -u -r1.11 -r1.12 src/sys/uvm/pmap/pmap.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/common/lib/libc/arch/riscv/atomic/Makefile.inc
diff -u src/common/lib/libc/arch/riscv/atomic/Makefile.inc:1.3 src/common/lib/libc/arch/riscv/atomic/Makefile.inc:1.4
--- src/common/lib/libc/arch/riscv/atomic/Makefile.inc:1.3	Wed Apr 17 07:40:34 2019
+++ src/common/lib/libc/arch/riscv/atomic/Makefile.inc	Sat Jun  1 12:42:27 2019
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile.inc,v 1.3 2019/04/17 07:40:34 mrg Exp $
+#	$NetBSD: Makefile.inc,v 1.4 2019/06/01 12:42:27 maxv Exp $
 
 .for op in add and cas nand or sub swap xor
 sizes=32
@@ -27,7 +27,7 @@ SRCS.atomic+=	atomic_init_cas.c			\
 
 .endif #LIB
 
-.if ${LIB} == "c"
+.if defined(LIB) && ${LIB} == "c"
 SRCS.atomic+=	atomic_and_16_nv_cas.c atomic_and_8_nv_cas.c
 .endif
 

Index: src/sys/arch/riscv/conf/GENERIC
diff -u src/sys/arch/riscv/conf/GENERIC:1.9 src/sys/arch/riscv/conf/GENERIC:1.10
--- src/sys/arch/riscv/conf/GENERIC:1.9	Wed Aug  1 20:04:13 2018
+++ src/sys/arch/riscv/conf/GENERIC	Sat Jun  1 12:42:27 2019
@@ -1,4 +1,4 @@
-# $NetBSD: GENERIC,v 1.9 2018/08/01 20:04:13 maxv Exp $
+# $NetBSD: GENERIC,v 1.10 2019/06/01 12:42:27 maxv Exp $
 #
 # GENERIC machine description file
 #
@@ -22,7 +22,7 @@ include	"arch/riscv/conf/std.riscv64"
 
 options 	INCLUDE_CONFIG_FILE	# embed config file in kernel binary
 
-#ident 		"GENERIC-$Revision: 1.9 $"
+#ident 		"GENERIC-$Revision: 1.10 $"
 
 maxusers	64		# estimated number of users
 
@@ -74,9 +74,7 @@ options 	DDB_HISTORY_SIZE=512	# enable h
 include 	"conf/compat_netbsd70.config"
 
 options 	COMPAT_OSSAUDIO
-options 	COMPAT_NETBSD32
-#options 	COMPAT_LINUX
-#options 	COMPAT_LINUX32	# req. COMPAT_LINUX and COMPAT_NETBSD32
+#options 	COMPAT_NETBSD32
 #options 	EXEC_ELF32
 
 # Wedge support

Index: src/sys/arch/riscv/conf/Makefile.riscv
diff -u src/sys/arch/riscv/conf/Makefile.riscv:1.3 src/sys/arch/riscv/conf/Makefile.riscv:1.4
--- src/sys/arch/riscv/conf/Makefile.riscv:1.3	Sat Sep 22 12:24:03 2018
+++ src/sys/arch/riscv/conf/Makefile.riscv	Sat Jun  1 12:42:27 2019
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile.riscv,v 1.3 2018/09/22 12:24:03 rin Exp $
+#	$NetBSD: Makefile.riscv,v 1.4 2019/06/01 12:42:27 maxv Exp $
 
 # Makefile for NetBSD
 #
@@ -39,7 +39,6 @@ GENASSYM_CONF=	${RISCV}/riscv/genassym.c
 ##
 CPPFLAGS+=	-D${MACHINE}
 CFLAGS+=	-mcmodel=medany
-CFLAGS+=	-msoft-float
 .if !defined(LP64) || ${LP64} == "no"
 CFLAGS+=	-m32
 AFLAGS+=	-m32
@@ -70,7 +69,7 @@ locore.o: ${RISCV}/riscv/locore.S assym.
 ## (5) link settings
 ##
 .if ${MACHINE_ARCH} == "riscv64" && ${LP64:Uyes} == "yes"
-TEXTADDR?=              0xFFFFFFFF80002000
+TEXTADDR?=              0xFFFFFFC000000000
 .else   
 TEXTADDR?=		0xC0001000
 .endif

Index: src/sys/arch/riscv/conf/files.riscv
diff -u src/sys/arch/riscv/conf/files.riscv:1.1 src/sys/arch/riscv/conf/files.riscv:1.2
--- src/sys/arch/riscv/conf/files.riscv:1.1	Sat Mar 28 16:13:56 2015
+++ src/sys/arch/riscv/conf/files.riscv	Sat Jun  1 12:42:27 2019
@@ -1,4 +1,4 @@
-#	$NetBSD: files.riscv,v 1.1 2015/03/28 16:13:56 matt Exp $
+#	$NetBSD: files.riscv,v 1.2 2019/06/01 12:42:27 maxv Exp $
 #
 
 maxpartitions	16
@@ -41,7 +41,7 @@ file	dev/md_root.c				memory_disk_hooks
 file	kern/subr_disk_mbr.c			disk
 
 file	uvm/pmap/pmap.c
-file	uvm/pmap/pmap_pv.c
+file	uvm/pmap/pmap_pvt.c
 file	uvm/pmap/pmap_segtab.c
 file	uvm/pmap/pmap_tlb.c
 
@@ -51,13 +51,6 @@ file	arch/riscv/riscv/netbsd32_machdep.c
 file	arch/riscv/riscv/sig32_machdep.c	compat_netbsd32
 include "compat/netbsd32/files.netbsd32"
 
-# Linux compatibility (COMPAT_LINUX)	XXX Highly experimental
-#include "compat/ossaudio/files.ossaudio"
-#include "compat/linux/files.linux"
-#include "compat/linux/arch/riscv/files.linux_riscv"
-#file	arch/riscv/riscv/linux_trap.c		compat_linux
-#file	arch/riscv/riscv/linux_syscall.c	compat_linux
-
 device	mainbus { [instance=-1] }
 attach	mainbus at root
 file	arch/riscv/riscv/mainbus.c		mainbus

Index: src/sys/arch/riscv/include/cpu.h
diff -u src/sys/arch/riscv/include/cpu.h:1.4 src/sys/arch/riscv/include/cpu.h:1.5
--- src/sys/arch/riscv/include/cpu.h:1.4	Wed Apr  1 21:55:03 2015
+++ src/sys/arch/riscv/include/cpu.h	Sat Jun  1 12:42:28 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu.h,v 1.4 2015/04/01 21:55:03 matt Exp $ */
+/* $NetBSD: cpu.h,v 1.5 2019/06/01 12:42:28 maxv Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -68,11 +68,10 @@ struct cpu_info {
 	volatile u_int ci_intr_depth;
 
 	tlb_asid_t ci_pmap_asid_cur;
-#if 0
-	union pmap_pdetab *ci_pmap_user_pdetab;
+
+	union pmap_segtab *ci_pmap_user_segtab;
 #ifdef _LP64
-	union pmap_pdetab *ci_pmap_user_pde0tab;
-#endif
+	union pmap_segtab *ci_pmap_user_seg0tab;
 #endif
 
 	struct evcnt ci_ev_fpu_saves;
Index: src/sys/arch/riscv/include/vmparam.h
diff -u src/sys/arch/riscv/include/vmparam.h:1.4 src/sys/arch/riscv/include/vmparam.h:1.5
--- src/sys/arch/riscv/include/vmparam.h:1.4	Thu May 31 22:26:36 2018
+++ src/sys/arch/riscv/include/vmparam.h	Sat Jun  1 12:42:28 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmparam.h,v 1.4 2018/05/31 22:26:36 mrg Exp $	*/
+/*	$NetBSD: vmparam.h,v 1.5 2019/06/01 12:42:28 maxv Exp $	*/
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -42,10 +42,6 @@
  * Machine dependent VM constants for RISCV.
  */
 
-/*
- * We use a 8K page on RV64 and 4K on RV32 systems.
- * Override PAGE_* definitions to compile-time constants.
- */
 #define	PAGE_SHIFT	PGSHIFT
 #define	PAGE_SIZE	(1 << PAGE_SHIFT)
 #define	PAGE_MASK	(PAGE_SIZE - 1)
@@ -107,24 +103,16 @@
 #define USRIOSIZE	(MAXBSIZE/PAGE_SIZE * 8)
 #endif
 
-// user/kernel map constants
-// These use negative addresses since RISCV addresses are signed.
+/*
+ * User/kernel map constants.
+ */
 #define VM_MIN_ADDRESS		((vaddr_t)0x00000000)
-#ifdef _LP64
-#define VM_MAXUSER_ADDRESS	((vaddr_t) 1L << 42)	/* 0x0000040000000000 */
-// For 64-bit kernels, we could, in theory, have 8TB (42 (13+29) bits worth)
-// of KVA space.  We need to divide that between KVA for direct-mapped memory,
-// space for I/O devices (someday), the kernel's mapped space.  For now, we are
-// going to restrict ourselves to use highest 8GB of KVA. The highest 2GB of
-// that KVA will be used to direct map memory.
-#define VM_MAX_KERNEL_ADDRESS	((vaddr_t) -PAGE_SIZE << 18)
-							/* 0xFFFFFFFF80000000 */
-#define VM_MIN_KERNEL_ADDRESS	((vaddr_t) -PAGE_SIZE << 20)
-							/* 0xFFFFFFFE00000000 */
-#else
+#ifdef _LP64	/* Sv39 */
+#define VM_MAXUSER_ADDRESS	((vaddr_t)0x0000004000000000 - 16 * PAGE_SIZE)
+#define VM_MIN_KERNEL_ADDRESS	((vaddr_t)0xFFFFFFC000000000)
+#define VM_MAX_KERNEL_ADDRESS	((vaddr_t)0xFFFFFFD000000000) /* MIN + 64GB */
+#else		/* Sv32 */
 #define VM_MAXUSER_ADDRESS	((vaddr_t)-0x7fffffff-1)/* 0xFFFFFFFF80000000 */
-// We reserve the bottom (nonnegative) address for user, then split the upper
-// 2GB into two 1GB, the lower for mapped KVA and the upper for direct-mapped.
 #define VM_MIN_KERNEL_ADDRESS	((vaddr_t)-0x7fffffff-1)/* 0xFFFFFFFF80000000 */
 #define VM_MAX_KERNEL_ADDRESS	((vaddr_t)-0x40000000)	/* 0xFFFFFFFFC0000000 */
 #endif

Index: src/sys/arch/riscv/include/elf_machdep.h
diff -u src/sys/arch/riscv/include/elf_machdep.h:1.6 src/sys/arch/riscv/include/elf_machdep.h:1.7
--- src/sys/arch/riscv/include/elf_machdep.h:1.6	Mon Nov  6 03:47:48 2017
+++ src/sys/arch/riscv/include/elf_machdep.h	Sat Jun  1 12:42:28 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: elf_machdep.h,v 1.6 2017/11/06 03:47:48 christos Exp $ */
+/* $NetBSD: elf_machdep.h,v 1.7 2019/06/01 12:42:28 maxv Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -46,10 +46,11 @@
 		case EM_RISCV:		\
 			break;
 
-#define	KERN_ELFSIZE		32
 #ifdef _LP64
+#define	KERN_ELFSIZE		64
 #define ARCH_ELFSIZE		64	/* MD native binary size */
 #else
+#define	KERN_ELFSIZE		32
 #define ARCH_ELFSIZE		32	/* MD native binary size */
 #endif
 

Index: src/sys/arch/riscv/include/mutex.h
diff -u src/sys/arch/riscv/include/mutex.h:1.1 src/sys/arch/riscv/include/mutex.h:1.2
--- src/sys/arch/riscv/include/mutex.h:1.1	Fri Sep 19 17:36:26 2014
+++ src/sys/arch/riscv/include/mutex.h	Sat Jun  1 12:42:28 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: mutex.h,v 1.1 2014/09/19 17:36:26 matt Exp $	*/
+/*	$NetBSD: mutex.h,v 1.2 2019/06/01 12:42:28 maxv Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc.
@@ -83,7 +83,7 @@ riscv_mutex_spinbit_lock_init(kmutex_t *
 }
 
 static inline bool
-riscv_mutex_spinbit_locked_p(kmutex_t *__mtx)
+riscv_mutex_spinbit_locked_p(const kmutex_t *__mtx)
 {
 	return (__mtx->mtx_owner & MTX_LOCK) != 0;
 }
Index: src/sys/arch/riscv/include/pmap.h
diff -u src/sys/arch/riscv/include/pmap.h:1.1 src/sys/arch/riscv/include/pmap.h:1.2
--- src/sys/arch/riscv/include/pmap.h:1.1	Fri Sep 19 17:36:26 2014
+++ src/sys/arch/riscv/include/pmap.h	Sat Jun  1 12:42:28 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.h,v 1.1 2014/09/19 17:36:26 matt Exp $ */
+/* $NetBSD: pmap.h,v 1.2 2019/06/01 12:42:28 maxv Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -42,12 +42,12 @@
 #include <sys/pool.h>
 #include <sys/evcnt.h>
 
+#include <uvm/uvm_physseg.h>
 #include <uvm/pmap/vmpagemd.h>
 
 #include <riscv/pte.h>
 
-#define	PMAP_SEGTABSIZE		(__SHIFTOUT(PTE_PPN0, PTE_PPN0) + 1)
-#define	PMAP_PDETABSIZE		(__SHIFTOUT(PTE_PPN0, PTE_PPN0) + 1)
+#define	PMAP_SEGTABSIZE		NPTEPG
 
 #define NBSEG		(NBPG*NPTEPG)
 #ifdef _LP64
@@ -76,6 +76,15 @@
 
 #define pmap_phys_address(x)		(x)
 
+#ifndef __BSD_PTENTRY_T__
+#define __BSD_PTENTRY_T__
+#ifdef _LP64
+#define PRIxPTE         PRIx64
+#else
+#define PRIxPTE         PRIx32
+#endif
+#endif /* __BSD_PTENTRY_T__ */
+
 #define PMAP_NEED_PROCWR
 static inline void
 pmap_procwr(struct proc *p, vaddr_t va, vsize_t len)
@@ -96,6 +105,7 @@ pmap_procwr(struct proc *p, vaddr_t va, 
 #define __HAVE_PMAP_MD
 struct pmap_md {
 	paddr_t md_ptbr;
+	pd_entry_t *md_pdetab;
 };
 
 struct vm_page *
@@ -112,6 +122,7 @@ bool    pmap_md_tlb_check_entry(void *, 
 
 void	pmap_md_pdetab_activate(struct pmap *);
 void	pmap_md_pdetab_init(struct pmap *);
+bool	pmap_md_ok_to_steal_p(const uvm_physseg_t, size_t);
 
 #ifdef __PMAP_PRIVATE
 static inline void
@@ -166,10 +177,10 @@ pmap_md_tlb_asid_max(void)
 struct vm_page_md {
 	uintptr_t mdpg_dummy[3];
 };
-#endif /* !__HVE_VM_PAGE_MD */
-
 __CTASSERT(sizeof(struct vm_page_md) == sizeof(uintptr_t)*3);
 
+#endif /* !__HAVE_VM_PAGE_MD */
+
 #endif /* MODULAR || _MODULE */
 
 #endif /* !_RISCV_PMAP_H_ */
Index: src/sys/arch/riscv/include/pte.h
diff -u src/sys/arch/riscv/include/pte.h:1.1 src/sys/arch/riscv/include/pte.h:1.2
--- src/sys/arch/riscv/include/pte.h:1.1	Fri Sep 19 17:36:26 2014
+++ src/sys/arch/riscv/include/pte.h	Sat Jun  1 12:42:28 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: pte.h,v 1.1 2014/09/19 17:36:26 matt Exp $ */
+/* $NetBSD: pte.h,v 1.2 2019/06/01 12:42:28 maxv Exp $ */
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -239,30 +239,6 @@ pte_set(pt_entry_t *ptep, pt_entry_t pte
 	*ptep = pte;
 }
 
-static inline pd_entry_t
-pte_invalid_pde(void)
-{
-	return 0;
-}
-
-static inline pd_entry_t
-pte_pde_pdetab(paddr_t pa)
-{
-	return PTE_V | PTE_G | PTE_T | pa;
-}
-
-static inline pd_entry_t
-pte_pde_ptpage(paddr_t pa)
-{
-	return PTE_V | PTE_G | PTE_T | pa;
-}
-
-static inline bool
-pte_pde_valid_p(pd_entry_t pde)
-{
-	return (pde & (PTE_V|PTE_T)) == (PTE_V|PTE_T);
-}
-
 static inline paddr_t
 pte_pde_to_paddr(pd_entry_t pde)
 {
@@ -283,4 +259,11 @@ pte_pde_cas(pd_entry_t *pdep, pd_entry_t
 	return 0;
 #endif
 }
+
+static inline pt_entry_t
+pte_value(pt_entry_t pte)
+{
+	return pte;
+}
+
 #endif /* _RISCV_PTE_H_ */

Index: src/sys/arch/riscv/include/param.h
diff -u src/sys/arch/riscv/include/param.h:1.2 src/sys/arch/riscv/include/param.h:1.3
--- src/sys/arch/riscv/include/param.h:1.2	Mon Jan  7 22:00:32 2019
+++ src/sys/arch/riscv/include/param.h	Sat Jun  1 12:42:28 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: param.h,v 1.2 2019/01/07 22:00:32 jdolecek Exp $ */
+/* $NetBSD: param.h,v 1.3 2019/06/01 12:42:28 maxv Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -66,11 +66,7 @@
 #define NKMEMPAGES_MAX_DEFAULT	(2048UL * 1024 * 1024)
 #define NKMEMPAGES_MIN_DEFAULT	(128UL * 1024 * 1024)
 
-#ifdef _LP64
-#define PGSHIFT		13
-#else
 #define PGSHIFT		12
-#endif
 #define	NBPG		(1 << PGSHIFT)
 #define PGOFSET		(NBPG - 1)
 

Index: src/sys/arch/riscv/riscv/core_machdep.c
diff -u src/sys/arch/riscv/riscv/core_machdep.c:1.1 src/sys/arch/riscv/riscv/core_machdep.c:1.2
--- src/sys/arch/riscv/riscv/core_machdep.c:1.1	Sat Mar 28 16:13:56 2015
+++ src/sys/arch/riscv/riscv/core_machdep.c	Sat Jun  1 12:42:28 2019
@@ -30,7 +30,7 @@
 #include <sys/cdefs.h>
 
 #ifndef CORENAME
-__RCSID("$NetBSD: core_machdep.c,v 1.1 2015/03/28 16:13:56 matt Exp $");
+__RCSID("$NetBSD: core_machdep.c,v 1.2 2019/06/01 12:42:28 maxv Exp $");
 #endif
 
 #include <sys/param.h>
@@ -83,7 +83,7 @@ CORENAME(cpu_coredump)(struct lwp *l, st
 	cpustate.tf.tf_badaddr = tf->tf_badaddr;
 	cpustate.tf.tf_cause = tf->tf_cause;
 	cpustate.tf.tf_sr = tf->tf_sr;
-	if (fpu_valid_p()) {
+	if (fpu_valid_p(l)) {
 		cpustate.fpregs = ((struct pcb *)lwp_getpcb(l))->pcb_fpregs;
 	} else {
 		memset(&cpustate.fpregs, 0, sizeof(cpustate.fpregs));

Index: src/sys/arch/riscv/riscv/genassym.cf
diff -u src/sys/arch/riscv/riscv/genassym.cf:1.3 src/sys/arch/riscv/riscv/genassym.cf:1.4
--- src/sys/arch/riscv/riscv/genassym.cf:1.3	Tue Mar 31 06:47:47 2015
+++ src/sys/arch/riscv/riscv/genassym.cf	Sat Jun  1 12:42:28 2019
@@ -1,4 +1,4 @@
-#	$NetBSD: genassym.cf,v 1.3 2015/03/31 06:47:47 matt Exp $
+#	$NetBSD: genassym.cf,v 1.4 2019/06/01 12:42:28 maxv Exp $
 #-
 # Copyright (c) 2014 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -194,5 +194,5 @@ define	PTE_SX		PTE_SX
 define	PTE_SW		PTE_SW
 define	PTE_SR		PTE_SR
 
-define	PM_PDETAB	offsetof(struct pmap, pm_pdetab)
+define	PM_MD_PDETAB	offsetof(struct pmap, pm_md.md_pdetab)
 define	PM_MD_PTBR	offsetof(struct pmap, pm_md.md_ptbr)

Index: src/sys/arch/riscv/riscv/locore.S
diff -u src/sys/arch/riscv/riscv/locore.S:1.7 src/sys/arch/riscv/riscv/locore.S:1.8
--- src/sys/arch/riscv/riscv/locore.S:1.7	Mon Feb  5 10:41:12 2018
+++ src/sys/arch/riscv/riscv/locore.S	Sat Jun  1 12:42:28 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.S,v 1.7 2018/02/05 10:41:12 maya Exp $ */
+/* $NetBSD: locore.S,v 1.8 2019/06/01 12:42:28 maxv Exp $ */
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -91,7 +91,11 @@ ENTRY_NP(start)
 	REG_S	t0, -SZREG(s3)		// store in highest first level PDE
 #endif
 
-#if (VM_MIN_KERNEL_ADDRESS >> XSEGSHIFT) != (VM_MAX_KERNEL_ADDRESS >> XSEGSHIFT)
+	/*
+	 * XXX XXX XXX: This is completely broken and wrong, we should map only
+	 * the kernel sections, and the direct map should be mapped later in C.
+	 */
+#if 0 && (VM_MIN_KERNEL_ADDRESS >> XSEGSHIFT) != (VM_MAX_KERNEL_ADDRESS >> XSEGSHIFT)
 #error VM_MIN_KERNEL_ADDRESS not in same first level PDE as VM_MAX_KERNEL_ADDRESS
 #endif
 	// We allocated the kernel first PTE page so let's insert in the
@@ -144,7 +148,7 @@ ENTRY_NP(start)
 
 	PTR_LA	t1, _C_LABEL(kernel_pmap_store)
 	add	t2, s2, s11 		// PA -> VA
-	PTR_S	t2, PM_PDETAB(t1)	// VA of kernel PDETAB
+	PTR_S	t2, PM_MD_PDETAB(t1)	// VA of kernel PDETAB
 	PTR_S	s2, PM_MD_PTBR(t1)	// PA of kernel PDETAB
 
 	// Now we should ready to start initializing the kernel.

Index: src/sys/arch/riscv/riscv/pmap_machdep.c
diff -u src/sys/arch/riscv/riscv/pmap_machdep.c:1.2 src/sys/arch/riscv/riscv/pmap_machdep.c:1.3
--- src/sys/arch/riscv/riscv/pmap_machdep.c:1.2	Tue Mar 31 01:14:57 2015
+++ src/sys/arch/riscv/riscv/pmap_machdep.c	Sat Jun  1 12:42:28 2019
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 
-__RCSID("$NetBSD: pmap_machdep.c,v 1.2 2015/03/31 01:14:57 matt Exp $");
+__RCSID("$NetBSD: pmap_machdep.c,v 1.3 2019/06/01 12:42:28 maxv Exp $");
 
 #include <sys/param.h>
 
@@ -100,7 +100,7 @@ paddr_t
 pmap_md_direct_mapped_vaddr_to_paddr(vaddr_t va)
 {
 	KASSERT(VM_MAX_KERNEL_ADDRESS <= va && (intptr_t) va < 0);
-	const pmap_pdetab_t *ptb = pmap_kernel()->pm_pdetab;
+	const pmap_pdetab_t *ptb = pmap_kernel()->pm_md.md_pdetab;
 	pd_entry_t pde;
 
 #ifdef _LP64
@@ -136,6 +136,12 @@ pmap_md_init(void)
 }
 
 bool
+pmap_md_ok_to_steal_p(const uvm_physseg_t bank, size_t npgs)
+{
+	return true;
+}
+
+bool
 pmap_md_tlb_check_entry(void *ctx, vaddr_t va, tlb_asid_t asid, pt_entry_t pte)
 {
 	return false;
@@ -150,9 +156,9 @@ pmap_md_pdetab_activate(struct pmap *pma
 void
 pmap_md_pdetab_init(struct pmap *pmap)
 {
-	pmap->pm_pdetab[NPDEPG-1] = pmap_kernel()->pm_pdetab[NPDEPG-1];
+	pmap->pm_md.md_pdetab[NPDEPG-1] = pmap_kernel()->pm_md.md_pdetab[NPDEPG-1];
 	pmap->pm_md.md_ptbr =
-	    pmap_md_direct_mapped_vaddr_to_paddr((vaddr_t)pmap->pm_pdetab);
+	    pmap_md_direct_mapped_vaddr_to_paddr((vaddr_t)pmap->pm_md.md_pdetab);
 }
 
 // TLB mainenance routines

Index: src/sys/uvm/pmap/pmap.h
diff -u src/sys/uvm/pmap/pmap.h:1.11 src/sys/uvm/pmap/pmap.h:1.12
--- src/sys/uvm/pmap/pmap.h:1.11	Mon May 20 17:00:57 2019
+++ src/sys/uvm/pmap/pmap.h	Sat Jun  1 12:42:28 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.h,v 1.11 2019/05/20 17:00:57 skrll Exp $	*/
+/*	$NetBSD: pmap.h,v 1.12 2019/06/01 12:42:28 maxv Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -134,6 +134,9 @@ struct pmap {
 	struct pmap_statistics	pm_stats;	/* pmap statistics */
 	vaddr_t			pm_minaddr;
 	vaddr_t			pm_maxaddr;
+#ifdef __HAVE_PMAP_MD
+	struct pmap_md		pm_md;
+#endif
 	struct pmap_asid_info	pm_pai[1];
 };
 

Added files:

Index: src/sys/arch/riscv/compile/Makefile
diff -u /dev/null src/sys/arch/riscv/compile/Makefile:1.1
--- /dev/null	Sat Jun  1 12:42:28 2019
+++ src/sys/arch/riscv/compile/Makefile	Sat Jun  1 12:42:27 2019
@@ -0,0 +1,3 @@
+#	$NetBSD: Makefile,v 1.1 2019/06/01 12:42:27 maxv Exp $
+
+.include <bsd.prog.mk>

Reply via email to