|
@@ -22,9 +22,7 @@
|
|
|
|
|
|
#include <linux/io.h>
|
|
|
#include <asm/barrier.h>
|
|
|
-
|
|
|
-#define __ACCESS_CP15(CRn, Op1, CRm, Op2) p15, Op1, %0, CRn, CRm, Op2
|
|
|
-#define __ACCESS_CP15_64(Op1, CRm) p15, Op1, %Q0, %R0, CRm
|
|
|
+#include <asm/cp15.h>
|
|
|
|
|
|
#define ICC_EOIR1 __ACCESS_CP15(c12, 0, c12, 1)
|
|
|
#define ICC_DIR __ACCESS_CP15(c12, 0, c11, 1)
|
|
@@ -102,58 +100,55 @@
|
|
|
|
|
|
static inline void gic_write_eoir(u32 irq)
|
|
|
{
|
|
|
- asm volatile("mcr " __stringify(ICC_EOIR1) : : "r" (irq));
|
|
|
+ write_sysreg(irq, ICC_EOIR1);
|
|
|
isb();
|
|
|
}
|
|
|
|
|
|
static inline void gic_write_dir(u32 val)
|
|
|
{
|
|
|
- asm volatile("mcr " __stringify(ICC_DIR) : : "r" (val));
|
|
|
+ write_sysreg(val, ICC_DIR);
|
|
|
isb();
|
|
|
}
|
|
|
|
|
|
static inline u32 gic_read_iar(void)
|
|
|
{
|
|
|
- u32 irqstat;
|
|
|
+ u32 irqstat = read_sysreg(ICC_IAR1);
|
|
|
|
|
|
- asm volatile("mrc " __stringify(ICC_IAR1) : "=r" (irqstat));
|
|
|
dsb(sy);
|
|
|
+
|
|
|
return irqstat;
|
|
|
}
|
|
|
|
|
|
static inline void gic_write_pmr(u32 val)
|
|
|
{
|
|
|
- asm volatile("mcr " __stringify(ICC_PMR) : : "r" (val));
|
|
|
+ write_sysreg(val, ICC_PMR);
|
|
|
}
|
|
|
|
|
|
static inline void gic_write_ctlr(u32 val)
|
|
|
{
|
|
|
- asm volatile("mcr " __stringify(ICC_CTLR) : : "r" (val));
|
|
|
+ write_sysreg(val, ICC_CTLR);
|
|
|
isb();
|
|
|
}
|
|
|
|
|
|
static inline void gic_write_grpen1(u32 val)
|
|
|
{
|
|
|
- asm volatile("mcr " __stringify(ICC_IGRPEN1) : : "r" (val));
|
|
|
+ write_sysreg(val, ICC_IGRPEN1);
|
|
|
isb();
|
|
|
}
|
|
|
|
|
|
static inline void gic_write_sgi1r(u64 val)
|
|
|
{
|
|
|
- asm volatile("mcrr " __stringify(ICC_SGI1R) : : "r" (val));
|
|
|
+ write_sysreg(val, ICC_SGI1R);
|
|
|
}
|
|
|
|
|
|
static inline u32 gic_read_sre(void)
|
|
|
{
|
|
|
- u32 val;
|
|
|
-
|
|
|
- asm volatile("mrc " __stringify(ICC_SRE) : "=r" (val));
|
|
|
- return val;
|
|
|
+ return read_sysreg(ICC_SRE);
|
|
|
}
|
|
|
|
|
|
static inline void gic_write_sre(u32 val)
|
|
|
{
|
|
|
- asm volatile("mcr " __stringify(ICC_SRE) : : "r" (val));
|
|
|
+ write_sysreg(val, ICC_SRE);
|
|
|
isb();
|
|
|
}
|
|
|
|