ARMv8: adding more sysregs to mackerel
authorReto Achermann <reto.achermann@inf.ethz.ch>
Sun, 5 Mar 2017 09:56:15 +0000 (10:56 +0100)
committerReto Achermann <reto.achermann@inf.ethz.ch>
Sun, 5 Mar 2017 09:56:15 +0000 (10:56 +0100)
Signed-off-by: Reto Achermann <reto.achermann@inf.ethz.ch>

devices/armv8.dev
kernel/arch/armv8/sysreg.S

index 4470b4e..c9f0f5b 100644 (file)
@@ -25,7 +25,16 @@ device armv8 msbfirst () "ARMv8 architecture registers" {
         _        2;
     };
 
-    register DAIF rw sysreg(DAIF) "Interrupt Mask Bits" {
+    register DAIFSet rw sysreg(DAIFSet) "Interrupt Mask Bits" {
+        _       22;
+        D        1 "Process state D mask";
+        A        1 "SError interrupt mask bit";
+        I        1 "IRQ mask bit";
+        F        1 "FIQ mask bit";
+        _        6;
+    };
+    
+    register DAIFClr rw sysreg(DAIFClr) "Interrupt Mask Bits" {
         _       22;
         D        1 "Process state D mask";
         A        1 "SError interrupt mask bit";
@@ -248,6 +257,53 @@ device armv8 msbfirst () "ARMv8 architecture registers" {
         A        1 "Alignment check enable";
         M        1 "MMU enable";
     };
+    
+    register SCTLR_EL2 rw sysreg(SCTLR_EL2) "System Control Register (EL2)" {
+        _        2 mbz;
+        _        2 mb1;
+        _        2 mbz;
+        EE       1 "Exception Endianess";
+        _        1 mbz;
+        _        2 mb1;
+        _        2 mbz;
+        WZN      1 "Force treatment of all memory regions with write permissions as XN";
+        _        1 mb1;
+        _        1 mbz;
+        _        1 mb1;
+        _        3 mbz;
+        I        1 "Instruction cache enable";
+        _        1 mb1;
+        _        5 mbz;
+        _        2 mb1;
+        SA       1 "Enable SP Alignment check";
+        C        1 "Data cacheability control";
+        A        1 "Alignment check enable";
+        M        1 "MMU enable";
+    };
+    
+    register SCTLR_EL3 rw sysreg(SCTLR_EL3) "System Control Register (EL3)" {
+        _        2 mbz;
+        _        2 mb1;
+        _        2 mbz;
+        EE       1 "Exception Endianess";
+        _        1 mbz;
+        _        2 mb1;
+        _        2 mbz;
+        WZN      1 "Force treatment of all memory regions with write permissions as XN";
+        _        1 mb1;
+        _        1 mbz;
+        _        1 mb1;
+        _        3 mbz;
+        I        1 "Instruction cache enable";
+        _        1 mb1;
+        _        5 mbz;
+        _        2 mb1;
+        SA       1 "Enable SP Alignment check";
+        C        1 "Data cacheability control";
+        A        1 "Alignment check enable";
+        M        1 "MMU enable";
+    };
+
 
     register ICC_AP0R0_EL1 rw sysreg(ICC_AP0R0_EL1) "" {
         impl    32;
@@ -385,5 +441,6 @@ device armv8 msbfirst () "ARMv8 architecture registers" {
         DFB     1 "Disable FIQ bypass";
         SRE     1 "System Register Enable";
     };
-
+    
+   
 };
index f0957b0..0e4e3cf 100644 (file)
@@ -169,6 +169,7 @@ sysreg_enable_mmu:
 armv8_sysreg_read\()_\sz\()_\name :
     mov x12, x30
     mrs x0, \reg
+    isb
     ret x12
     nop
 .endm
@@ -178,6 +179,7 @@ armv8_sysreg_read\()_\sz\()_\name :
 armv8_sysreg_write\()_\sz\()_\name :
     mov x12, x30
     msr \reg , x0
+    isb
     ret x12
     nop
 .endm
@@ -197,6 +199,9 @@ sysreg_write \sz \name \reg
 
 sysreg_rw 64 TCR_EL1            TCR_EL1
 sysreg_rw 32 TCR_EL2            TCR_EL2
+sysreg_rw 32 SCTLR_EL1          SCTLR_EL1
+sysreg_rw 32 SCTLR_EL2          SCTLR_EL2
+sysreg_rw 32 SCTLR_EL3          SCTLR_EL3
 sysreg_rw 32 ICC_PMR_EL1        S3_0_C4_C6_0
 sysreg_ro 32 ICC_IAR0_EL1       S3_0_C12_C8_0
 sysreg_wo 32 ICC_EOIR0_EL1      S3_0_C12_C8_1