armv8: Add ICC cpu register definitions
authorMoritz Hoffmann <moritz.hoffmann@inf.ethz.ch>
Tue, 6 Dec 2016 13:00:16 +0000 (14:00 +0100)
committerMoritz Hoffmann <moritz.hoffmann@inf.ethz.ch>
Tue, 6 Dec 2016 13:00:16 +0000 (14:00 +0100)
Signed-off-by: Moritz Hoffmann <moritz.hoffmann@inf.ethz.ch>

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

index 3b8dd2c..ea77bff 100644 (file)
@@ -19,11 +19,141 @@ device armv8 msbfirst () "ARMv8 architecture" {
 
     space sysreg(name) registerwise "System registers";
 
+    register ICC_AP0R0_EL1 rw sysreg(ICC_AP0R0_EL1) "" {
+        impl    32;
+    };
+    register ICC_AP0R1_EL1 rw sysreg(ICC_AP0R1_EL1) "" {
+        impl    32;
+    };
+    register ICC_AP0R2_EL1 rw sysreg(ICC_AP0R2_EL1) "" {
+        impl    32;
+    };
+    register ICC_AP0R3_EL1 rw sysreg(ICC_AP0R3_EL1) "" {
+        impl    32;
+    };
+
+    register ICC_AP1R0_EL1 rw sysreg(ICC_AP1R0_EL1) "" {
+        impl    32;
+    };
+    register ICC_AP1R1_EL1 rw sysreg(ICC_AP1R1_EL1) "" {
+        impl    32;
+    };
+    register ICC_AP1R2_EL1 rw sysreg(ICC_AP1R2_EL1) "" {
+        impl    32;
+    };
+    register ICC_AP1R3_EL1 rw sysreg(ICC_AP1R3_EL1) "" {
+        impl    32;
+    };
+
+    register ICC_BPR0_EL1 rw sysreg(ICC_BPR0_EL1) "Interrupt Controller Binray Point Register 0" {
+        _            29;
+        binary_point  3;
+    };
+
+    register ICC_BPR1_EL1 rw sysreg(ICC_BPR1_EL1) "" {
+        _            29;
+        binary_point  3;
+    };
+
+    register ICC_CTLR_EL1 rw sysreg(ICC_CTLR_EL1) "" {
+        _           16;
+        a3v          1 "Affinity 3 Valid";
+        seis         1 ro "SEI Support";
+        IDbits       3 "Identifier bits";
+        PRIbits      3 "Priority bits";
+        _            1;
+        pmhe         1 "Priority Mask Hint Enable";
+        _            4;
+        EOImode      1 "EOI mode";
+        cbpr         1 "Common Binary Point Regsiter";
+    };
+
+    register ICC_DIR_EL1 rw sysreg(ICC_DIR_EL1) "Interrupt Controller Deactivate Interrupt Register" {
+        _            8;
+        intid       24 "INTID of the interrupt to be deactivated";
+    };
+
+    register ICC_EOIR0_EL1 rw sysreg(ICC_EOIR0_EL1) "Interrupt Controller End Of Interrupt Register 0" {
+        _            8;
+        intid       24 "INTID from the corresponding ICC_IAR0_EL1 access";
+    };
+
+    register ICC_EOI1_EL1 rw sysreg(ICC_EOI1_EL1) "Interrupt Controller End Of Interrupt Register 1" {
+        _            8;
+        intid       24 "INTID from the corresponding ICC_IAR1_EL1 access";
+    };
+
+    register ICC_HPPIR0_EL1 rw sysreg(ICC_HPPIR0_EL1) "Interrupt Controller Highest Priority Pending Interrupt Register 0" {
+        _            8;
+        intid       24 "INTID of the highest priority pending interrupt";
+    };
+
+    register ICC_HPPIR1_EL1 rw sysreg(ICC_HPPIR1_EL1) "Interrupt Controller Highest Priority Pending Interrupt Register 1" {
+        _            8;
+        intid       24 "INTID of the highest priority pending interrupt";
+    };
+
+    register ICC_IAR0_EL1 rw sysreg(ICC_IAR0_EL1) "Interrupt Controller Interrupt Acknowledge Register 0" {
+        _            8;
+        intid       24 "INTID of the signaled interrupt";
+    };
+
+    register ICC_IAR1_EL1 rw sysreg(ICC_IAR1_EL1) "Interrupt Controller Interrupt Acknowledge Register 1" {
+        _            8;
+        intid       24 "INTID of the signaled interrupt";
+    };
+
+    register ICC_IGRPEN0_EL1 rw sysreg(ICC_IGRPEN0_EL1) "Interrupt Controller Interrupt Group 0 Enable Register" {
+        _           31;
+        enable       1 "Enables Group 0 interrupts";
+    };
+
+    register ICC_IGRPEN1_EL1 rw sysreg(ICC_IGRPEN1_EL1) "Interrupt Controller Interrupt Group 1 Enable Register" {
+        _           31;
+        enable       1 "Enables Group 1 interrupts";
+    };
+
+
+    register ICC_PMR_EL1 rw sysreg(ICC_PMR_EL1) "Interrupt Controller Interrupt Priority Mask Register" {
+        _          24;
+        priority    8 "Priority mask level";
+    };
+
+    register ICC_RPR_EL1 rw sysreg(ICC_RPR_EL1) "Interrupt Controller Running Priority Register" {
+        _          24;
+        priority    8 "Running priority";
+    };
+
+
+    register ICC_SGI0R_EL1 wo sysreg(ICC_SGI0R_EL1) "Interrupt Controller Software Generated Interrupt Group 0 Register" {
+        _           8;
+        aff3        8 "Affinity Path 3";
+        _           7;
+        irm         1 "Interrupt Routing Mode";
+        aff2        8 "Affinity Path 2";
+        _           4;
+        intid       4 "INTID of the SGI";
+        aff1        8 "Affinity Path 1";
+        target     16 "Target List";
+    };
+
+    register ICC_SGI1R_EL1 wo sysreg(ICC_SGI1R_EL1) "Interrupt Controller Software Generated Interrupt Group 1 Register" {
+        _           8;
+        aff3        8 "Affinity Path 3";
+        _           7;
+        irm         1 "Interrupt Routing Mode";
+        aff2        8 "Affinity Path 2";
+        _           4;
+        intid       4 "INTID of the SGI";
+        aff1        8 "Affinity Path 1";
+        target     16 "Target List";
+    };
+
     register ICC_SRE_EL1 rw sysreg(ICC_SRE_EL1) "Interrupt Controller System Register Enable" {
         _       29;
-        DIB     1;
-        DFB     1;
-        SRE     1;
+        DIB     1 "Disable IRQ bypass";
+        DFB     1 "Disable FIQ bypass";
+        SRE     1 "System Register Enable";
     };
 
 };
index 2bbfbdb..3a2b606 100644 (file)
@@ -601,6 +601,7 @@ let
     ],
     mackerelDevices = [
         "arm",
+        "armv8",
         "arm_icp_pit",
         "pl130_gic",
         "pl011_uart"
index 797a690..053af43 100644 (file)
@@ -177,7 +177,7 @@ armv8_sysreg_read\()_\sz\()_\name :
 .globl armv8_sysreg_write\()_\sz\()_\name
 armv8_sysreg_write\()_\sz\()_\name :
     mov x12, x30
-    msr \reg , x0
+    msr \reg , x1
     ret x12
     nop
 .endm
@@ -188,7 +188,36 @@ sysreg_write \sz \name \reg
 .endm
 
 .macro sysreg_ro sz name reg
-sysreg read \sz \name \reg
+sysreg_read \sz \name \reg
+.endm
+
+.macro sysreg_wo sz name reg
+sysreg_write \sz \name \reg
 .endm
 
-sysreg_rw 32 ICC_SRE_EL1 S3_0_C12_C12_5
+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
+sysreg_ro 32 ICC_HPPIR0_EL1     S3_0_C12_C8_2
+sysreg_rw 32 ICC_BPR0_EL1       S3_0_C12_C8_3
+sysreg_rw 32 ICC_AP0R0_EL1      S3_0_C12_C8_4
+sysreg_rw 32 ICC_AP0R1_EL1      S3_0_C12_C8_5
+sysreg_rw 32 ICC_AP0R2_EL1      S3_0_C12_C8_6
+sysreg_rw 32 ICC_AP0R3_EL1      S3_0_C12_C8_7
+sysreg_rw 32 ICC_AP1R0_EL1      S3_0_C12_C9_0
+sysreg_rw 32 ICC_AP1R1_EL1      S3_0_C12_C9_1
+sysreg_rw 32 ICC_AP1R2_EL1      S3_0_C12_C9_2
+sysreg_rw 32 ICC_AP1R3_EL1      S3_0_C12_C9_3
+sysreg_wo 32 ICC_DIR_EL1        S3_0_C12_C11_1
+sysreg_ro 32 ICC_RPR_El1        S3_0_C12_C11_3
+sysreg_wo 64 ICC_SGI1R_EL1      S3_0_C12_C11_5
+sysreg_wo 64 ICC_ASGI1R_EL1     S3_0_C12_C11_6
+sysreg_wo 64 ICC_SGI0R_EL1      S3_0_C12_C11_7
+sysreg_ro 32 ICC_IAR1_EL1       S3_0_C12_C12_0
+sysreg_wo 32 ICC_EOIR1_EL1      S3_0_C12_C12_1
+sysreg_ro 32 ICC_HPPIR1_EL1     S3_0_C12_C12_2
+sysreg_rw 32 ICC_BPR1_EL1       S3_0_C12_C12_3
+sysreg_rw 32 ICC_CTLR_EL1       S3_0_C12_C12_4
+sysreg_rw 32 ICC_SRE_EL1        S3_0_C12_C12_5
+sysreg_rw 32 ICC_IGRPEN0_EL1    S3_0_C12_C12_6
+sysreg_rw 32 ICC_IGRPEN1_EL1    S3_0_C12_C12_7