Source-Changes-HG archive

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

[src/trunk]: src/sys/arch/aarch64 * define LX_BLKPAG_{OS, ATTR}_* for OS depen...



details:   https://anonhg.NetBSD.org/src/rev/88852bd0b7c7
branches:  trunk
changeset: 836221:88852bd0b7c7
user:      ryo <ryo%NetBSD.org@localhost>
date:      Thu Oct 04 09:09:29 2018 +0000

description:
* define LX_BLKPAG_{OS,ATTR}_* for OS dependent PTE attributes in pmap.h
* cleanup macros

diffstat:

 sys/arch/aarch64/aarch64/genassym.cf |  11 ++++++-----
 sys/arch/aarch64/aarch64/locore.S    |  16 +++++-----------
 sys/arch/aarch64/aarch64/pmap.c      |  17 ++---------------
 sys/arch/aarch64/include/pmap.h      |  26 +++++++++++++++++++++++---
 sys/arch/aarch64/include/pte.h       |   4 +++-
 5 files changed, 39 insertions(+), 35 deletions(-)

diffs (194 lines):

diff -r dffe51619b1c -r 88852bd0b7c7 sys/arch/aarch64/aarch64/genassym.cf
--- a/sys/arch/aarch64/aarch64/genassym.cf      Thu Oct 04 08:58:13 2018 +0000
+++ b/sys/arch/aarch64/aarch64/genassym.cf      Thu Oct 04 09:09:29 2018 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: genassym.cf,v 1.7 2018/08/26 18:15:49 ryo Exp $
+# $NetBSD: genassym.cf,v 1.8 2018/10/04 09:09:29 ryo Exp $
 #-
 # Copyright (c) 2014 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -68,6 +68,7 @@
 define VM_MIN_KERNEL_ADDRESS   VM_MIN_KERNEL_ADDRESS
 define VM_MAX_KERNEL_ADDRESS   VM_MAX_KERNEL_ADDRESS
 define VM_KERNEL_IO_ADDRESS    VM_KERNEL_IO_ADDRESS
+define VM_KERNEL_IO_SIZE       VM_KERNEL_IO_SIZE
 define AARCH64_KSEG_START      AARCH64_KSEG_START
 define UPAGES                  UPAGES
 define USPACE                  (UPAGES * PAGE_SIZE)
@@ -124,10 +125,10 @@
 define LX_BLKPAG_AP_RO         LX_BLKPAG_AP_RO
 define LX_BLKPAG_AP_RW         LX_BLKPAG_AP_RW
 define LX_BLKPAG_SH_IS         LX_BLKPAG_SH_IS
-define LX_BLKPAG_ATTR_INDX_0   LX_BLKPAG_ATTR_INDX_0
-define LX_BLKPAG_ATTR_INDX_1   LX_BLKPAG_ATTR_INDX_1
-define LX_BLKPAG_ATTR_INDX_2   LX_BLKPAG_ATTR_INDX_2
-define LX_BLKPAG_ATTR_INDX_3   LX_BLKPAG_ATTR_INDX_3
+define LX_BLKPAG_ATTR_NORMAL_WB        LX_BLKPAG_ATTR_NORMAL_WB
+define LX_BLKPAG_ATTR_NORMAL_NC        LX_BLKPAG_ATTR_NORMAL_NC
+define LX_BLKPAG_ATTR_NORMAL_WT        LX_BLKPAG_ATTR_NORMAL_WT
+define LX_BLKPAG_ATTR_DEVICE_MEM       LX_BLKPAG_ATTR_DEVICE_MEM
 define Ln_ENTRIES              Ln_ENTRIES
 
 define TCR_AS64K               TCR_AS64K
diff -r dffe51619b1c -r 88852bd0b7c7 sys/arch/aarch64/aarch64/locore.S
--- a/sys/arch/aarch64/aarch64/locore.S Thu Oct 04 08:58:13 2018 +0000
+++ b/sys/arch/aarch64/aarch64/locore.S Thu Oct 04 09:09:29 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: locore.S,v 1.26 2018/10/01 19:45:00 skrll Exp $        */
+/*     $NetBSD: locore.S,v 1.27 2018/10/04 09:09:29 ryo Exp $  */
 
 /*
  * Copyright (c) 2017 Ryo Shimizu <ryo%nerv.org@localhost>
@@ -35,7 +35,7 @@
 #include <aarch64/hypervisor.h>
 #include "assym.h"
 
-RCSID("$NetBSD: locore.S,v 1.26 2018/10/01 19:45:00 skrll Exp $")
+RCSID("$NetBSD: locore.S,v 1.27 2018/10/04 09:09:29 ryo Exp $")
 
 /* #define DEBUG_LOCORE */
 /* #define DEBUG_MMU */
@@ -46,12 +46,6 @@
 
 #define LOCORE_EL2
 
-/* attributes are defined in MAIR_EL1 */
-#define L2_BLKPAG_ATTR_NORMAL_WB       LX_BLKPAG_ATTR_INDX_0
-#define L2_BLKPAG_ATTR_NORMAL_NC       LX_BLKPAG_ATTR_INDX_1
-#define L2_BLKPAG_ATTR_NORMAL_WT       LX_BLKPAG_ATTR_INDX_2
-#define L2_BLKPAG_ATTR_DEVICE_MEM      LX_BLKPAG_ATTR_INDX_3
-
 #define PRINT(string)  bl xprint;.asciz string;.align 2
 
 #ifdef VERBOSE_LOCORE
@@ -629,7 +623,7 @@
        ADDR    x0, ttbr0_l1table
        mov     x1, #0                  /* VA */
        mov     x2, #0                  /* PA */
-       mov     x3, #L2_BLKPAG_ATTR_DEVICE_MEM
+       mov     x3, #LX_BLKPAG_ATTR_DEVICE_MEM
        mov     x4, #4                  /* 4GB = whole 32bit */
        bl      l1_setblocks
 
@@ -645,7 +639,7 @@
        ADDR    x0, ttbr1_l1table_kseg
        mov     x1, #AARCH64_KSEG_START
        mov     x2, #0
-       mov     x3, #L2_BLKPAG_ATTR_NORMAL_WB
+       mov     x3, #LX_BLKPAG_ATTR_NORMAL_WB
        orr     x3, x3, #(LX_BLKPAG_PXN|LX_BLKPAG_UXN)
        mov     x4, #Ln_ENTRIES         /* whole l1 table */
        bl      l1_setblocks
@@ -669,7 +663,7 @@
        adr     x2, start               /* physical addr. before MMU */
        and     x2, x2, #L2_BLK_OA      /* L2 block size aligned (2MB) */
        mov     x1, #VM_MIN_KERNEL_ADDRESS
-       mov     x3, #(L2_BLKPAG_ATTR_NORMAL_WB|LX_BLKPAG_UXN)
+       mov     x3, #(LX_BLKPAG_ATTR_NORMAL_WB|LX_BLKPAG_UXN)
 
        /* kernelsize = _end - start */
        ldr     x1, =start
diff -r dffe51619b1c -r 88852bd0b7c7 sys/arch/aarch64/aarch64/pmap.c
--- a/sys/arch/aarch64/aarch64/pmap.c   Thu Oct 04 08:58:13 2018 +0000
+++ b/sys/arch/aarch64/aarch64/pmap.c   Thu Oct 04 09:09:29 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: pmap.c,v 1.24 2018/09/17 00:15:55 ryo Exp $    */
+/*     $NetBSD: pmap.c,v 1.25 2018/10/04 09:09:29 ryo Exp $    */
 
 /*
  * Copyright (c) 2017 Ryo Shimizu <ryo%nerv.org@localhost>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.24 2018/09/17 00:15:55 ryo Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.25 2018/10/04 09:09:29 ryo Exp $");
 
 #include "opt_arm_debug.h"
 #include "opt_ddb.h"
@@ -142,19 +142,6 @@
 #define PMAP_COUNT(name)               __nothing
 #endif /* PMAPCOUNTERS */
 
-/* saved permission bit for referenced/modified emulation */
-#define LX_BLKPAG_OS_READ      LX_BLKPAG_OS_0
-#define LX_BLKPAG_OS_WRITE     LX_BLKPAG_OS_1
-#define LX_BLKPAG_OS_WIRED     LX_BLKPAG_OS_2
-#define LX_BLKPAG_OS_RWMASK    (LX_BLKPAG_OS_WRITE|LX_BLKPAG_OS_READ)
-
-/* memory attributes are configured MAIR_EL1 in locore */
-#define LX_BLKPAG_ATTR_NORMAL_WB       __SHIFTIN(0, LX_BLKPAG_ATTR_INDX)
-#define LX_BLKPAG_ATTR_NORMAL_NC       __SHIFTIN(1, LX_BLKPAG_ATTR_INDX)
-#define LX_BLKPAG_ATTR_NORMAL_WT       __SHIFTIN(2, LX_BLKPAG_ATTR_INDX)
-#define LX_BLKPAG_ATTR_DEVICE_MEM      __SHIFTIN(3, LX_BLKPAG_ATTR_INDX)
-#define LX_BLKPAG_ATTR_MASK            LX_BLKPAG_ATTR_INDX
-
 /*
  * invalidate TLB entry for ASID and VA.
  * `ll' invalidates only the Last Level (usually L3) of TLB entry
diff -r dffe51619b1c -r 88852bd0b7c7 sys/arch/aarch64/include/pmap.h
--- a/sys/arch/aarch64/include/pmap.h   Thu Oct 04 08:58:13 2018 +0000
+++ b/sys/arch/aarch64/include/pmap.h   Thu Oct 04 09:09:29 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.h,v 1.10 2018/09/15 19:47:48 jakllsch Exp $ */
+/* $NetBSD: pmap.h,v 1.11 2018/10/04 09:09:29 ryo Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -78,6 +78,21 @@
                (pg)->mdpage.mdpg_flags = 0;            \
        } while (/*CONSTCOND*/ 0)
 
+
+/* saved permission bit for referenced/modified emulation */
+#define LX_BLKPAG_OS_READ              LX_BLKPAG_OS_0
+#define LX_BLKPAG_OS_WRITE             LX_BLKPAG_OS_1
+#define LX_BLKPAG_OS_WIRED             LX_BLKPAG_OS_2
+#define LX_BLKPAG_OS_BOOT              LX_BLKPAG_OS_3
+#define LX_BLKPAG_OS_RWMASK            (LX_BLKPAG_OS_WRITE|LX_BLKPAG_OS_READ)
+
+/* memory attributes are configured MAIR_EL1 in locore */
+#define LX_BLKPAG_ATTR_NORMAL_WB       __SHIFTIN(0, LX_BLKPAG_ATTR_INDX)
+#define LX_BLKPAG_ATTR_NORMAL_NC       __SHIFTIN(1, LX_BLKPAG_ATTR_INDX)
+#define LX_BLKPAG_ATTR_NORMAL_WT       __SHIFTIN(2, LX_BLKPAG_ATTR_INDX)
+#define LX_BLKPAG_ATTR_DEVICE_MEM      __SHIFTIN(3, LX_BLKPAG_ATTR_INDX)
+#define LX_BLKPAG_ATTR_MASK            LX_BLKPAG_ATTR_INDX
+
 #define l0pde_pa(pde)          ((paddr_t)((pde) & LX_TBL_PA))
 #define l0pde_index(v)         (((vaddr_t)(v) & L0_ADDR_BITS) >> L0_SHIFT)
 #define l0pde_valid(pde)       (((pde) & LX_VALID) == LX_VALID)
@@ -138,9 +153,14 @@
 
 pd_entry_t *pmap_alloc_pdp(struct pmap *, paddr_t *);
 
+#define L1_TRUNC_BLOCK(x)      ((x) & L1_FRAME)
+#define L1_ROUND_BLOCK(x)      L1_TRUNC_BLOCK((x) + L1_SIZE - 1)
+#define L2_TRUNC_BLOCK(x)      ((x) & L2_FRAME)
+#define L2_ROUND_BLOCK(x)      L2_TRUNC_BLOCK((x) + L2_SIZE - 1)
+
 /* devmap use L2 blocks. (2Mbyte) */
-#define DEVMAP_TRUNC_ADDR(x)   ((x) & ~L2_OFFSET)
-#define DEVMAP_ROUND_SIZE(x)   (((x) + L2_SIZE - 1) & ~(L2_SIZE - 1))
+#define DEVMAP_TRUNC_ADDR(x)   L2_TRUNC_BLOCK((x))
+#define DEVMAP_ROUND_SIZE(x)   L2_ROUND_BLOCK((x))
 
 #define        DEVMAP_ENTRY(va, pa, sz)                        \
        {                                               \
diff -r dffe51619b1c -r 88852bd0b7c7 sys/arch/aarch64/include/pte.h
--- a/sys/arch/aarch64/include/pte.h    Thu Oct 04 08:58:13 2018 +0000
+++ b/sys/arch/aarch64/include/pte.h    Thu Oct 04 09:09:29 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: pte.h,v 1.4 2018/07/17 10:01:59 ryo Exp $ */
+/* $NetBSD: pte.h,v 1.5 2018/10/04 09:09:29 ryo Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -186,6 +186,8 @@
 #define TTBR_ASID              __BITS(63,48)
 #define TTBR_BADDR             __BITS(47,0)
 
+#define TTBR_SEL_VA            __BIT(63)       /* which TTBR is selected */
+
 
 #elif defined(__arm__)
 



Home | Main Index | Thread Index | Old Index