Module Name:    src
Committed By:   ryo
Date:           Wed May 13 06:08:51 UTC 2020

Modified Files:
        src/sys/arch/aarch64/aarch64: db_trace.c fault.c
        src/sys/arch/aarch64/include: armreg.h cpufunc.h pmap.h

Log Message:
- move aarch64 addressspace macros from pmap.h to cpufunc.h
- rename ptr_strip_pac() to aarch64_strip_pac()


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/aarch64/aarch64/db_trace.c
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/aarch64/aarch64/fault.c
cvs rdiff -u -r1.42 -r1.43 src/sys/arch/aarch64/include/armreg.h
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/aarch64/include/cpufunc.h
cvs rdiff -u -r1.37 -r1.38 src/sys/arch/aarch64/include/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/sys/arch/aarch64/aarch64/db_trace.c
diff -u src/sys/arch/aarch64/aarch64/db_trace.c:1.9 src/sys/arch/aarch64/aarch64/db_trace.c:1.10
--- src/sys/arch/aarch64/aarch64/db_trace.c:1.9	Sun Apr 12 07:49:58 2020
+++ src/sys/arch/aarch64/aarch64/db_trace.c	Wed May 13 06:08:51 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: db_trace.c,v 1.9 2020/04/12 07:49:58 maxv Exp $ */
+/* $NetBSD: db_trace.c,v 1.10 2020/05/13 06:08:51 ryo Exp $ */
 
 /*
  * Copyright (c) 2017 Ryo Shimizu <r...@nerv.org>
@@ -28,11 +28,12 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.9 2020/04/12 07:49:58 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.10 2020/05/13 06:08:51 ryo Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
 
+#include <aarch64/cpufunc.h>
 #include <aarch64/db_machdep.h>
 #include <aarch64/machdep.h>
 #include <aarch64/armreg.h>
@@ -236,7 +237,7 @@ db_stack_trace_print(db_expr_t addr, boo
 		lastfp = lastlr = lr = fp = 0;
 		db_read_bytes((db_addr_t)&tf->tf_pc, sizeof(lr), (char *)&lr);
 		db_read_bytes((db_addr_t)&tf->tf_reg[29], sizeof(fp), (char *)&fp);
-		lr = ptr_strip_pac(lr);
+		lr = aarch64_strip_pac(lr);
 
 		pr_traceaddr("fp", fp, lr - 4, flags, pr);
 	}
@@ -252,7 +253,7 @@ db_stack_trace_print(db_expr_t addr, boo
 		 */
 		db_read_bytes(lastfp + 0, sizeof(fp), (char *)&fp);
 		db_read_bytes(lastfp + 8, sizeof(lr), (char *)&lr);
-		lr = ptr_strip_pac(lr);
+		lr = aarch64_strip_pac(lr);
 
 		if (!trace_user && IN_USER_VM_ADDRESS(lr))
 			break;
@@ -270,7 +271,7 @@ db_stack_trace_print(db_expr_t addr, boo
 			lr = fp = 0;
 			db_read_bytes((db_addr_t)&tf->tf_pc, sizeof(lr), (char *)&lr);
 			db_read_bytes((db_addr_t)&tf->tf_reg[29], sizeof(fp), (char *)&fp);
-			lr = ptr_strip_pac(lr);
+			lr = aarch64_strip_pac(lr);
 
 			/*
 			 * no need to display the frame of el0_trap

Index: src/sys/arch/aarch64/aarch64/fault.c
diff -u src/sys/arch/aarch64/aarch64/fault.c:1.12 src/sys/arch/aarch64/aarch64/fault.c:1.13
--- src/sys/arch/aarch64/aarch64/fault.c:1.12	Sat Feb 29 21:34:37 2020
+++ src/sys/arch/aarch64/aarch64/fault.c	Wed May 13 06:08:51 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: fault.c,v 1.12 2020/02/29 21:34:37 ryo Exp $	*/
+/*	$NetBSD: fault.c,v 1.13 2020/05/13 06:08:51 ryo Exp $	*/
 
 /*
  * Copyright (c) 2017 Ryo Shimizu <r...@nerv.org>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fault.c,v 1.12 2020/02/29 21:34:37 ryo Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fault.c,v 1.13 2020/05/13 06:08:51 ryo Exp $");
 
 #include "opt_compat_netbsd32.h"
 #include "opt_ddb.h"
@@ -40,6 +40,7 @@ __KERNEL_RCSID(0, "$NetBSD: fault.c,v 1.
 
 #include <uvm/uvm.h>
 
+#include <aarch64/cpufunc.h>
 #include <aarch64/frame.h>
 #include <aarch64/machdep.h>
 #include <aarch64/armreg.h>

Index: src/sys/arch/aarch64/include/armreg.h
diff -u src/sys/arch/aarch64/include/armreg.h:1.42 src/sys/arch/aarch64/include/armreg.h:1.43
--- src/sys/arch/aarch64/include/armreg.h:1.42	Mon May 11 03:00:57 2020
+++ src/sys/arch/aarch64/include/armreg.h	Wed May 13 06:08:51 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: armreg.h,v 1.42 2020/05/11 03:00:57 ryo Exp $ */
+/* $NetBSD: armreg.h,v 1.43 2020/05/13 06:08:51 ryo Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -807,17 +807,6 @@ AARCH64REG_WRITE_INLINE(sctlr_el1)
 #define	SCTLR_ATA		__BIT(43)
 #define	SCTLR_DSSBS		__BIT(44)
 
-#define	PTR_VA_RANGE_SELECT	__BIT(55)
-#define	PTR_PAC_MASK		(__BITS(63,56) | __BITS(54, 48))
-
-static __inline uint64_t
-ptr_strip_pac(uint64_t __val)
-{
-	if (__val & PTR_VA_RANGE_SELECT)
-		return __val | PTR_PAC_MASK;
-	return __val & ~PTR_PAC_MASK;
-}
-
 // current EL stack pointer
 static __inline uint64_t
 reg_sp_read(void)

Index: src/sys/arch/aarch64/include/cpufunc.h
diff -u src/sys/arch/aarch64/include/cpufunc.h:1.12 src/sys/arch/aarch64/include/cpufunc.h:1.13
--- src/sys/arch/aarch64/include/cpufunc.h:1.12	Sun Apr 12 07:49:58 2020
+++ src/sys/arch/aarch64/include/cpufunc.h	Wed May 13 06:08:51 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpufunc.h,v 1.12 2020/04/12 07:49:58 maxv Exp $	*/
+/*	$NetBSD: cpufunc.h,v 1.13 2020/05/13 06:08:51 ryo Exp $	*/
 
 /*
  * Copyright (c) 2017 Ryo Shimizu <r...@nerv.org>
@@ -166,4 +166,86 @@ cpu_earlydevice_va_p(void)
 
 #endif /* _KERNEL */
 
+/* definitions of TAG and PAC in pointers */
+#define AARCH64_ADDRTOP_TAG		__BIT(55)	/* ECR_EL1.TBI[01]=1 */
+#define AARCH64_ADDRTOP_MSB		__BIT(63)	/* ECR_EL1.TBI[01]=0 */
+#define AARCH64_ADDRESS_TAG_MASK	__BITS(63,56)	/* if TCR.TBI[01]=1 */
+#define AARCH64_ADDRESS_PAC_MASK	__BITS(54,48)	/* depend on VIRT_BIT */
+#define AARCH64_ADDRESS_TAGPAC_MASK	\
+			(AARCH64_ADDRESS_TAG_MASK|AARCH64_ADDRESS_PAC_MASK)
+
+#ifdef _KERNEL
+/*
+ * Which is the address space of this VA?
+ * return the space considering TBI. (PAC is not yet)
+ *
+ * return value: AARCH64_ADDRSPACE_{LOWER,UPPER}{_OUTOFRANGE}?
+ */
+#define AARCH64_ADDRSPACE_LOWER			0	/* -> TTBR0 */
+#define AARCH64_ADDRSPACE_UPPER			1	/* -> TTBR1 */
+#define AARCH64_ADDRSPACE_LOWER_OUTOFRANGE	-1	/* certainly fault */
+#define AARCH64_ADDRSPACE_UPPER_OUTOFRANGE	-2	/* certainly fault */
+static inline int
+aarch64_addressspace(vaddr_t va)
+{
+	uint64_t addrtop, tbi;
+
+	addrtop = (uint64_t)va & AARCH64_ADDRTOP_TAG;
+	tbi = addrtop ? TCR_TBI1 : TCR_TBI0;
+	if (reg_tcr_el1_read() & tbi) {
+		if (addrtop == 0) {
+			/* lower address, and TBI0 enabled */
+			if ((va & AARCH64_ADDRESS_PAC_MASK) != 0)
+				return AARCH64_ADDRSPACE_LOWER_OUTOFRANGE;
+			return AARCH64_ADDRSPACE_LOWER;
+		}
+		/* upper address, and TBI1 enabled */
+		if ((va & AARCH64_ADDRESS_PAC_MASK) != AARCH64_ADDRESS_PAC_MASK)
+			return AARCH64_ADDRSPACE_UPPER_OUTOFRANGE;
+		return AARCH64_ADDRSPACE_UPPER;
+	}
+
+	addrtop = (uint64_t)va & AARCH64_ADDRTOP_MSB;
+	if (addrtop == 0) {
+		/* lower address, and TBI0 disabled */
+		if ((va & AARCH64_ADDRESS_TAGPAC_MASK) != 0)
+			return AARCH64_ADDRSPACE_LOWER_OUTOFRANGE;
+		return AARCH64_ADDRSPACE_LOWER;
+	}
+	/* upper address, and TBI1 disabled */
+	if ((va & AARCH64_ADDRESS_TAGPAC_MASK) != AARCH64_ADDRESS_TAGPAC_MASK)
+		return AARCH64_ADDRSPACE_UPPER_OUTOFRANGE;
+	return AARCH64_ADDRSPACE_UPPER;
+}
+
+static inline vaddr_t
+aarch64_untag_address(vaddr_t va)
+{
+	uint64_t addrtop, tbi;
+
+	addrtop = (uint64_t)va & AARCH64_ADDRTOP_TAG;
+	tbi = addrtop ? TCR_TBI1 : TCR_TBI0;
+	if (reg_tcr_el1_read() & tbi) {
+		if (addrtop == 0) {
+			/* lower address, and TBI0 enabled */
+			return (uint64_t)va & ~AARCH64_ADDRESS_TAG_MASK;
+		}
+		/* upper address, and TBI1 enabled */
+		return (uint64_t)va | AARCH64_ADDRESS_TAG_MASK;
+	}
+
+	/* TBI[01] is disabled, nothing to do */
+	return va;
+}
+
+#endif /* _KERNEL */
+
+static __inline uint64_t
+aarch64_strip_pac(uint64_t __val)
+{
+	if (__val & AARCH64_ADDRTOP_TAG)
+		return __val | AARCH64_ADDRESS_TAGPAC_MASK;
+	return __val & ~AARCH64_ADDRESS_TAGPAC_MASK;
+}
+
 #endif /* _AARCH64_CPUFUNC_H_ */

Index: src/sys/arch/aarch64/include/pmap.h
diff -u src/sys/arch/aarch64/include/pmap.h:1.37 src/sys/arch/aarch64/include/pmap.h:1.38
--- src/sys/arch/aarch64/include/pmap.h:1.37	Wed Apr  8 00:13:40 2020
+++ src/sys/arch/aarch64/include/pmap.h	Wed May 13 06:08:51 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.h,v 1.37 2020/04/08 00:13:40 ryo Exp $ */
+/* $NetBSD: pmap.h,v 1.38 2020/05/13 06:08:51 ryo Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -282,76 +282,6 @@ aarch64_mmap_flags(paddr_t mdpgno)
 	return pflag;
 }
 
-/*
- * Which is the address space of this VA?
- * return the space considering TBI. (PAC is not yet)
- *
- * return value: AARCH64_ADDRSPACE_{LOWER,UPPER}{_OUTOFRANGE}?
- */
-#define AARCH64_ADDRTOP_TAG		__BIT(55)	/* ECR_EL1.TBI[01]=1 */
-#define AARCH64_ADDRTOP_MSB		__BIT(63)	/* ECR_EL1.TBI[01]=0 */
-#define AARCH64_ADDRESS_TAG_MASK	__BITS(63,56)	/* if TCR.TBI[01]=1 */
-#define AARCH64_ADDRESS_PAC_MASK	__BITS(54,48)	/* depend on VIRT_BIT */
-#define AARCH64_ADDRESS_TAGPAC_MASK	\
-			(AARCH64_ADDRESS_TAG_MASK|AARCH64_ADDRESS_PAC_MASK)
-
-#define AARCH64_ADDRSPACE_LOWER			0	/* -> TTBR0 */
-#define AARCH64_ADDRSPACE_UPPER			1	/* -> TTBR1 */
-#define AARCH64_ADDRSPACE_LOWER_OUTOFRANGE	-1	/* certainly fault */
-#define AARCH64_ADDRSPACE_UPPER_OUTOFRANGE	-2	/* certainly fault */
-static inline int
-aarch64_addressspace(vaddr_t va)
-{
-	uint64_t addrtop, tbi;
-
-	addrtop = (uint64_t)va & AARCH64_ADDRTOP_TAG;
-	tbi = addrtop ? TCR_TBI1 : TCR_TBI0;
-	if (reg_tcr_el1_read() & tbi) {
-		if (addrtop == 0) {
-			/* lower address, and TBI0 enabled */
-			if ((va & AARCH64_ADDRESS_PAC_MASK) != 0)
-				return AARCH64_ADDRSPACE_LOWER_OUTOFRANGE;
-			return AARCH64_ADDRSPACE_LOWER;
-		}
-		/* upper address, and TBI1 enabled */
-		if ((va & AARCH64_ADDRESS_PAC_MASK) != AARCH64_ADDRESS_PAC_MASK)
-			return AARCH64_ADDRSPACE_UPPER_OUTOFRANGE;
-		return AARCH64_ADDRSPACE_UPPER;
-	}
-
-	addrtop = (uint64_t)va & AARCH64_ADDRTOP_MSB;
-	if (addrtop == 0) {
-		/* lower address, and TBI0 disabled */
-		if ((va & AARCH64_ADDRESS_TAGPAC_MASK) != 0)
-			return AARCH64_ADDRSPACE_LOWER_OUTOFRANGE;
-		return AARCH64_ADDRSPACE_LOWER;
-	}
-	/* upper address, and TBI1 disabled */
-	if ((va & AARCH64_ADDRESS_TAGPAC_MASK) != AARCH64_ADDRESS_TAGPAC_MASK)
-		return AARCH64_ADDRSPACE_UPPER_OUTOFRANGE;
-	return AARCH64_ADDRSPACE_UPPER;
-}
-
-static inline vaddr_t
-aarch64_untag_address(vaddr_t va)
-{
-	uint64_t addrtop, tbi;
-
-	addrtop = (uint64_t)va & AARCH64_ADDRTOP_TAG;
-	tbi = addrtop ? TCR_TBI1 : TCR_TBI0;
-	if (reg_tcr_el1_read() & tbi) {
-		if (addrtop == 0) {
-			/* lower address, and TBI0 enabled */
-			return (uint64_t)va & ~AARCH64_ADDRESS_TAG_MASK;
-		}
-		/* upper address, and TBI1 enabled */
-		return (uint64_t)va | AARCH64_ADDRESS_TAG_MASK;
-	}
-
-	/* TBI[01] is disabled, nothing to do */
-	return va;
-}
-
 #define pmap_phys_address(pa)		aarch64_ptob((pa))
 #define pmap_mmap_flags(ppn)		aarch64_mmap_flags((ppn))
 

Reply via email to