mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 09:19:51 +00:00
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>
This commit is contained in:
parent
1112c3b2ce
commit
64f42cec84
3 changed files with 16 additions and 7 deletions
|
@ -47,9 +47,6 @@
|
||||||
#define ISA_INIT_STATUS_BITS (STATUS_IE_MASK | STATUS_AD_MASK | \
|
#define ISA_INIT_STATUS_BITS (STATUS_IE_MASK | STATUS_AD_MASK | \
|
||||||
(ARCV2_IRQ_DEF_PRIO << 1))
|
(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__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -43,8 +43,6 @@
|
||||||
|
|
||||||
#define ISA_INIT_STATUS_BITS STATUS_IE_MASK
|
#define ISA_INIT_STATUS_BITS STATUS_IE_MASK
|
||||||
|
|
||||||
#define ISA_SLEEP_ARG 0x3
|
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
|
|
|
@ -79,15 +79,29 @@ SYSCALL_DEFINE3(arc_usr_cmpxchg, int *, uaddr, int, expected, int, new)
|
||||||
return uval;
|
return uval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_ISA_ARCV2
|
||||||
|
|
||||||
void arch_cpu_idle(void)
|
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__(
|
__asm__ __volatile__(
|
||||||
"sleep %0 \n"
|
"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);
|
asmlinkage void ret_from_fork(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue