Merge tag 'kvm-4.9-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm
[linux-2.6-microblaze.git] / arch / arm64 / include / asm / arch_gicv3.h
index 8ec88e5..f8ae6d6 100644 (file)
@@ -28,6 +28,7 @@
 #define ICC_CTLR_EL1                   sys_reg(3, 0, 12, 12, 4)
 #define ICC_SRE_EL1                    sys_reg(3, 0, 12, 12, 5)
 #define ICC_GRPEN1_EL1                 sys_reg(3, 0, 12, 12, 7)
+#define ICC_BPR1_EL1                   sys_reg(3, 0, 12, 12, 3)
 
 #define ICC_SRE_EL2                    sys_reg(3, 4, 12, 9, 5)
 
 #include <linux/stringify.h>
 #include <asm/barrier.h>
 
+#define read_gicreg(r)                                                 \
+       ({                                                              \
+               u64 reg;                                                \
+               asm volatile("mrs_s %0, " __stringify(r) : "=r" (reg)); \
+               reg;                                                    \
+       })
+
+#define write_gicreg(v,r)                                              \
+       do {                                                            \
+               u64 __val = (v);                                        \
+               asm volatile("msr_s " __stringify(r) ", %0" : : "r" (__val));\
+       } while (0)
+
 /*
  * Low-level accessors
  *
@@ -165,6 +179,11 @@ static inline void gic_write_sre(u32 val)
        isb();
 }
 
+static inline void gic_write_bpr1(u32 val)
+{
+       asm volatile("msr_s " __stringify(ICC_BPR1_EL1) ", %0" : : "r" (val));
+}
+
 #define gic_read_typer(c)              readq_relaxed(c)
 #define gic_write_irouter(v, c)                writeq_relaxed(v, c)