Module Name: src
Committed By: matt
Date: Fri Aug 21 17:26:23 UTC 2009
Modified Files:
src/sys/arch/mips/include [matt-nb5-mips64]: cpuregs.h vmparam.h
Log Message:
Define manifest kernel addresses as negative so that proper sign extension
happens. This gives proper results for both 32bit and 64bit kernels.
To generate a diff of this commit:
cvs rdiff -u -r1.74.28.1 -r1.74.28.2 src/sys/arch/mips/include/cpuregs.h
cvs rdiff -u -r1.41 -r1.41.28.1 src/sys/arch/mips/include/vmparam.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/mips/include/cpuregs.h
diff -u src/sys/arch/mips/include/cpuregs.h:1.74.28.1 src/sys/arch/mips/include/cpuregs.h:1.74.28.2
--- src/sys/arch/mips/include/cpuregs.h:1.74.28.1 Thu Aug 20 07:49:52 2009
+++ src/sys/arch/mips/include/cpuregs.h Fri Aug 21 17:26:23 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: cpuregs.h,v 1.74.28.1 2009/08/20 07:49:52 matt Exp $ */
+/* $NetBSD: cpuregs.h,v 1.74.28.2 2009/08/21 17:26:23 matt Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -76,31 +76,36 @@
* Caching of mapped addresses is controlled by bits in the TLB entry.
*/
-#define MIPS_KUSEG_START 0x0
-#define MIPS_KSEG0_START 0x80000000
-#define MIPS_KSEG1_START 0xa0000000
-#define MIPS_KSEG2_START 0xc0000000
-#define MIPS_MAX_MEM_ADDR 0xbe000000
-#define MIPS_RESERVED_ADDR 0xbfc80000
+#define MIPS_KUSEG_START 0x0L
+
+/*
+ * MIPS addresses are signed and we defining as negative so that
+ * in LP64 kern they get sign-extended correctly.
+ */
+#define MIPS_KSEG0_START (-0x7fffffff-1) /* 0x80000000 */
+#define MIPS_KSEG1_START -0x60000000 /* 0xa0000000 */
+#define MIPS_KSEG2_START -0x40000000 /* 0xc0000000 */
+#define MIPS_MAX_MEM_ADDR -0x42000000 /* 0xbe000000 */
+#define MIPS_RESERVED_ADDR -0x40380000 /* 0xbfc80000 */
#define MIPS_PHYS_MASK 0x1fffffff
#define MIPS_KSEG0_TO_PHYS(x) ((uintptr_t)(x) & MIPS_PHYS_MASK)
-#define MIPS_PHYS_TO_KSEG0(x) ((uintptr_t)(x) | MIPS_KSEG0_START)
+#define MIPS_PHYS_TO_KSEG0(x) ((uintptr_t)(x) | (intptr_t)MIPS_KSEG0_START)
#define MIPS_KSEG1_TO_PHYS(x) ((uintptr_t)(x) & MIPS_PHYS_MASK)
-#define MIPS_PHYS_TO_KSEG1(x) ((uintptr_t)(x) | MIPS_KSEG1_START)
+#define MIPS_PHYS_TO_KSEG1(x) ((uintptr_t)(x) | (intptr_t)MIPS_KSEG1_START)
/* Map virtual address to index in mips3 r4k virtually-indexed cache */
#define MIPS3_VA_TO_CINDEX(x) \
- ((uintptr_t)(x) & 0xffffff | MIPS_KSEG0_START)
-
-#define MIPS_XSEG_MASK (0x3fffffffffffffffULL)
-#define MIPS_XKSEG_BASE (0x3ULL << 62)
+ (((intptr_t)(x) & 0xffffff) | MIPS_KSEG0_START)
+#define MIPS_XSEG_MASK (0x3fffffffffffffffLL)
+#define MIPS_XKSEG_START (0x3ULL << 62)
#define MIPS_XKSEG_P(x) (((uint64_t)(x) >> 62) == 3)
+#define MIPS_XKPHYS_START (0x2ULL << 62)
#define MIPS_PHYS_TO_XKPHYS(cca,x) \
- ((0x2ULL << 62) | ((uint64_t)(cca) << 59) | (x))
-#define MIPS_XKPHYS_TO_PHYS(x) ((x) & 0x0effffffffffffffULL)
+ (MIPS_XKPHYS_START | ((uint64_t)(cca) << 59) | (x))
+#define MIPS_XKPHYS_TO_PHYS(x) ((x) & 0x0effffffffffffffLL)
#define MIPS_XKPHYS_P(x) (((uint64_t)(x) >> 62) == 2)
/* CPU dependent mtc0 hazard hook */
@@ -399,31 +404,31 @@
*
* Common vectors: reset and UTLB miss.
*/
-#define MIPS_RESET_EXC_VEC 0xBFC00000
-#define MIPS_UTLB_MISS_EXC_VEC 0x80000000
+#define MIPS_RESET_EXC_VEC MIPS_PHYS_TO_KSEG1(0x1FC00000)
+#define MIPS_UTLB_MISS_EXC_VEC MIPS_PHYS_TO_KSEG0(0)
/*
* MIPS-1 general exception vector (everything else)
*/
-#define MIPS1_GEN_EXC_VEC 0x80000080
+#define MIPS1_GEN_EXC_VEC MIPS_PHYS_TO_KSEG0(0x0080)
/*
* MIPS-III exception vectors
*/
-#define MIPS3_XTLB_MISS_EXC_VEC 0x80000080
-#define MIPS3_CACHE_ERR_EXC_VEC 0x80000100
-#define MIPS3_GEN_EXC_VEC 0x80000180
+#define MIPS3_XTLB_MISS_EXC_VEC MIPS_PHYS_TO_KSEG0(0x0080)
+#define MIPS3_CACHE_ERR_EXC_VEC MIPS_PHYS_TO_KSEG0(0x0100)
+#define MIPS3_GEN_EXC_VEC MIPS_PHYS_TO_KSEG0(0x0180)
/*
* TX79 (R5900) exception vectors
*/
-#define MIPS_R5900_COUNTER_EXC_VEC 0x80000080
-#define MIPS_R5900_DEBUG_EXC_VEC 0x80000100
+#define MIPS_R5900_COUNTER_EXC_VEC MIPS_PHYS_TO_KSEG0(0x0080)
+#define MIPS_R5900_DEBUG_EXC_VEC MIPS_PHYS_TO_KSEG0(0x0100)
/*
* MIPS32/MIPS64 (and some MIPS3) dedicated interrupt vector.
*/
-#define MIPS3_INTR_EXC_VEC 0x80000200
+#define MIPS3_INTR_EXC_VEC MIPS_PHYS_TO_KSEG0(0x0200)
/*
* Coprocessor 0 registers:
Index: src/sys/arch/mips/include/vmparam.h
diff -u src/sys/arch/mips/include/vmparam.h:1.41 src/sys/arch/mips/include/vmparam.h:1.41.28.1
--- src/sys/arch/mips/include/vmparam.h:1.41 Wed Dec 26 16:01:34 2007
+++ src/sys/arch/mips/include/vmparam.h Fri Aug 21 17:26:23 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: vmparam.h,v 1.41 2007/12/26 16:01:34 ad Exp $ */
+/* $NetBSD: vmparam.h,v 1.41.28.1 2009/08/21 17:26:23 matt Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -142,15 +142,18 @@
* Mach derived constants
*/
-/* user/kernel map constants */
+/*
+ * user/kernel map constants
+ * These are negative addresses since MIPS addresses are signed.
+ */
#define VM_MIN_ADDRESS ((vaddr_t)0x00000000)
-#define VM_MAXUSER_ADDRESS ((vaddr_t)0x80000000)
-#define VM_MAX_ADDRESS ((vaddr_t)0x80000000)
-#define VM_MIN_KERNEL_ADDRESS ((vaddr_t)0xC0000000)
+#define VM_MAXUSER_ADDRESS ((vaddr_t)-0x7fffffff-1)/* 0xFFFFFFFF80000000 */
+#define VM_MAX_ADDRESS ((vaddr_t)-0x7fffffff-1)/* 0xFFFFFFFF80000000 */
+#define VM_MIN_KERNEL_ADDRESS ((vaddr_t)-0x40000000) /* 0xFFFFFFFFC0000000 */
#ifdef ENABLE_MIPS_TX3900
-#define VM_MAX_KERNEL_ADDRESS ((vaddr_t)0xFF000000)
+#define VM_MAX_KERNEL_ADDRESS ((vaddr_t)-0x01000000) /* 0xFFFFFFFFFF000000 */
#else
-#define VM_MAX_KERNEL_ADDRESS ((vaddr_t)0xFFFFC000)
+#define VM_MAX_KERNEL_ADDRESS ((vaddr_t)-0x00004000) /* 0xFFFFFFFFFFFFC000 */
#endif
/*