diff options
author | Vineet Gupta <vgupta@synopsys.com> | 2017-06-02 11:49:10 -0700 |
---|---|---|
committer | Vineet Gupta <vgupta@synopsys.com> | 2017-08-28 15:17:36 -0700 |
commit | 64f42cec84deb32fdaf24649481c72fcd7800dc1 (patch) | |
tree | bd75a5d0e9f965fbc98e23310dd8fcbba497c97a /arch/arc/kernel | |
parent | 1112c3b2ce5281a7118606648bb8cc010b2499ca (diff) | |
download | linux-64f42cec84deb32fdaf24649481c72fcd7800dc1.tar.bz2 |
ARC: create cpu specific version of arch_cpu_idle()
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>
Diffstat (limited to 'arch/arc/kernel')
-rw-r--r-- | arch/arc/kernel/process.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/arch/arc/kernel/process.c b/arch/arc/kernel/process.c index 2a018de6d6cd..fd5b2190a957 100644 --- a/arch/arc/kernel/process.c +++ b/arch/arc/kernel/process.c @@ -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); /* |