ARC: create cpu specific version of arch_cpu_idle()
authorVineet Gupta <vgupta@synopsys.com>
Fri, 2 Jun 2017 18:49:10 +0000 (11:49 -0700)
committerVineet Gupta <vgupta@synopsys.com>
Mon, 28 Aug 2017 22:17:36 +0000 (15:17 -0700)
This paves way for creating a 3rd variant needed for NPS ARC700 without
littering ifdey'ery all over the place

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
arch/arc/include/asm/irqflags-arcv2.h
arch/arc/include/asm/irqflags-compact.h
arch/arc/kernel/process.c

index a64c447b0337804568c69cf2e15998deabdd9b40..8a4f77ea3238e6f017ae24ab6b55e2952637fe04 100644 (file)
@@ -47,9 +47,6 @@
 #define ISA_INIT_STATUS_BITS   (STATUS_IE_MASK | STATUS_AD_MASK | \
                                        (ARCV2_IRQ_DEF_PRIO << 1))
 
-/* SLEEP needs default irq priority (<=) which can interrupt the doze */
-#define ISA_SLEEP_ARG          (0x10 | ARCV2_IRQ_DEF_PRIO)
-
 #ifndef __ASSEMBLY__
 
 /*
index 4c6eed80cd8ba3bd935e60b30ffadf147326aeca..fcb80171fc346252c55d1593ac9198862daf5b15 100644 (file)
@@ -43,8 +43,6 @@
 
 #define ISA_INIT_STATUS_BITS   STATUS_IE_MASK
 
-#define ISA_SLEEP_ARG          0x3
-
 #ifndef __ASSEMBLY__
 
 /******************************************************************
index 2a018de6d6cdbce2abc9f02b9671c41136c9ffb7..fd5b2190a957fcbb0e96990dc9c1682a6d6739f9 100644 (file)
@@ -79,15 +79,29 @@ done:
        return uval;
 }
 
+#ifdef CONFIG_ISA_ARCV2
+
 void arch_cpu_idle(void)
 {
-       /* sleep, but enable all interrupts before committing */
+       /* Re-enable interrupts <= default irq priority before commiting SLEEP */
+       const unsigned int arg = 0x10 | ARCV2_IRQ_DEF_PRIO;
+
        __asm__ __volatile__(
                "sleep %0       \n"
                :
-               :"I"(ISA_SLEEP_ARG)); /* can't be "r" has to be embedded const */
+               :"I"(arg)); /* can't be "r" has to be embedded const */
+}
+
+#else
+
+void arch_cpu_idle(void)
+{
+       /* sleep, but enable both set E1/E2 (levels of interrutps) before committing */
+       __asm__ __volatile__("sleep 0x3 \n");
 }
 
+#endif
+
 asmlinkage void ret_from_fork(void);
 
 /*