powerpc: cleanup hw_irq.h
authorChristophe Leroy <christophe.leroy@c-s.fr>
Thu, 29 Aug 2019 08:45:13 +0000 (08:45 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 18 Nov 2019 11:27:52 +0000 (22:27 +1100)
SET_MSR_EE() is just use in this file and doesn't provide
any added value compared to mtmsr(). Drop it.

Add a wrtee() inline function to use wrtee/wrteei insn.

Replace #ifdefs by IS_ENABLED()

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/a28a20514d5f6df9629c1a117b667e48c4272736.1567068137.git.christophe.leroy@c-s.fr
arch/powerpc/include/asm/hw_irq.h
arch/powerpc/include/asm/reg.h

index 32a18f2f49bc80ed98f7af4e101ba6c8f47bacb2..e3a905e3d5736e9d2884477214f291dd9dd40ea4 100644 (file)
@@ -226,8 +226,8 @@ static inline bool arch_irqs_disabled(void)
 #endif /* CONFIG_PPC_BOOK3S */
 
 #ifdef CONFIG_PPC_BOOK3E
-#define __hard_irq_enable()    asm volatile("wrteei 1" : : : "memory")
-#define __hard_irq_disable()   asm volatile("wrteei 0" : : : "memory")
+#define __hard_irq_enable()    wrtee(MSR_EE)
+#define __hard_irq_disable()   wrtee(0)
 #else
 #define __hard_irq_enable()    __mtmsrd(MSR_EE|MSR_RI, 1)
 #define __hard_irq_disable()   __mtmsrd(MSR_RI, 1)
@@ -280,8 +280,6 @@ extern void force_external_irq_replay(void);
 
 #else /* CONFIG_PPC64 */
 
-#define SET_MSR_EE(x)  mtmsr(x)
-
 static inline unsigned long arch_local_save_flags(void)
 {
        return mfmsr();
@@ -289,47 +287,44 @@ static inline unsigned long arch_local_save_flags(void)
 
 static inline void arch_local_irq_restore(unsigned long flags)
 {
-#if defined(CONFIG_BOOKE)
-       asm volatile("wrtee %0" : : "r" (flags) : "memory");
-#else
-       mtmsr(flags);
-#endif
+       if (IS_ENABLED(CONFIG_BOOKE))
+               wrtee(flags);
+       else
+               mtmsr(flags);
 }
 
 static inline unsigned long arch_local_irq_save(void)
 {
        unsigned long flags = arch_local_save_flags();
-#ifdef CONFIG_BOOKE
-       asm volatile("wrteei 0" : : : "memory");
-#elif defined(CONFIG_PPC_8xx)
-       wrtspr(SPRN_EID);
-#else
-       SET_MSR_EE(flags & ~MSR_EE);
-#endif
+
+       if (IS_ENABLED(CONFIG_BOOKE))
+               wrtee(0);
+       else if (IS_ENABLED(CONFIG_PPC_8xx))
+               wrtspr(SPRN_EID);
+       else
+               mtmsr(flags & ~MSR_EE);
+
        return flags;
 }
 
 static inline void arch_local_irq_disable(void)
 {
-#ifdef CONFIG_BOOKE
-       asm volatile("wrteei 0" : : : "memory");
-#elif defined(CONFIG_PPC_8xx)
-       wrtspr(SPRN_EID);
-#else
-       arch_local_irq_save();
-#endif
+       if (IS_ENABLED(CONFIG_BOOKE))
+               wrtee(0);
+       else if (IS_ENABLED(CONFIG_PPC_8xx))
+               wrtspr(SPRN_EID);
+       else
+               mtmsr(mfmsr() & ~MSR_EE);
 }
 
 static inline void arch_local_irq_enable(void)
 {
-#ifdef CONFIG_BOOKE
-       asm volatile("wrteei 1" : : : "memory");
-#elif defined(CONFIG_PPC_8xx)
-       wrtspr(SPRN_EIE);
-#else
-       unsigned long msr = mfmsr();
-       SET_MSR_EE(msr | MSR_EE);
-#endif
+       if (IS_ENABLED(CONFIG_BOOKE))
+               wrtee(MSR_EE);
+       else if (IS_ENABLED(CONFIG_PPC_8xx))
+               wrtspr(SPRN_EIE);
+       else
+               mtmsr(mfmsr() | MSR_EE);
 }
 
 static inline bool arch_irqs_disabled_flags(unsigned long flags)
index b7faf6c781a730db348dac2a19a0f1181abf30fa..0b7900f194c8f752c3e04b946e1ea7d5657d8def 100644 (file)
@@ -1368,6 +1368,14 @@ static inline void mtmsr_isync(unsigned long val)
 #define wrtspr(rn)     asm volatile("mtspr " __stringify(rn) ",0" : \
                                     : : "memory")
 
+static inline void wrtee(unsigned long val)
+{
+       if (__builtin_constant_p(val))
+               asm volatile("wrteei %0" : : "i" ((val & MSR_EE) ? 1 : 0) : "memory");
+       else
+               asm volatile("wrtee %0" : : "r" (val) : "memory");
+}
+
 extern unsigned long msr_check_and_set(unsigned long bits);
 extern bool strict_msr_control;
 extern void __msr_check_and_clear(unsigned long bits);