xref: /openbmc/linux/arch/arm64/kernel/idle.c (revision 89b30987)
1*b5df5b83SMark Rutland // SPDX-License-Identifier: GPL-2.0-only
2*b5df5b83SMark Rutland /*
3*b5df5b83SMark Rutland  * Low-level idle sequences
4*b5df5b83SMark Rutland  */
5*b5df5b83SMark Rutland 
6*b5df5b83SMark Rutland #include <linux/cpu.h>
7*b5df5b83SMark Rutland #include <linux/irqflags.h>
8*b5df5b83SMark Rutland 
9*b5df5b83SMark Rutland #include <asm/barrier.h>
106cf61e06SWill Deacon #include <asm/cpuidle.h>
11*b5df5b83SMark Rutland #include <asm/cpufeature.h>
12*b5df5b83SMark Rutland #include <asm/sysreg.h>
13*b5df5b83SMark Rutland 
14*b5df5b83SMark Rutland /*
15*b5df5b83SMark Rutland  *	cpu_do_idle()
16*b5df5b83SMark Rutland  *
17*b5df5b83SMark Rutland  *	Idle the processor (wait for interrupt).
18*b5df5b83SMark Rutland  *
19*b5df5b83SMark Rutland  *	If the CPU supports priority masking we must do additional work to
20*b5df5b83SMark Rutland  *	ensure that interrupts are not masked at the PMR (because the core will
21*b5df5b83SMark Rutland  *	not wake up if we block the wake up signal in the interrupt controller).
22*b5df5b83SMark Rutland  */
cpu_do_idle(void)23*b5df5b83SMark Rutland void noinstr cpu_do_idle(void)
24*b5df5b83SMark Rutland {
256cf61e06SWill Deacon 	struct arm_cpuidle_irq_context context;
266cf61e06SWill Deacon 
276cf61e06SWill Deacon 	arm_cpuidle_save_irq_context(&context);
286cf61e06SWill Deacon 
296cf61e06SWill Deacon 	dsb(sy);
306cf61e06SWill Deacon 	wfi();
316cf61e06SWill Deacon 
326cf61e06SWill Deacon 	arm_cpuidle_restore_irq_context(&context);
33*b5df5b83SMark Rutland }
34*b5df5b83SMark Rutland 
35*b5df5b83SMark Rutland /*
36*b5df5b83SMark Rutland  * This is our default idle handler.
37*b5df5b83SMark Rutland  */
arch_cpu_idle(void)38*b5df5b83SMark Rutland void noinstr arch_cpu_idle(void)
39*b5df5b83SMark Rutland {
40*b5df5b83SMark Rutland 	/*
41*b5df5b83SMark Rutland 	 * This should do all the clock switching and wait for interrupt
42*b5df5b83SMark Rutland 	 * tricks
43*b5df5b83SMark Rutland 	 */
44*b5df5b83SMark Rutland 	cpu_do_idle();
45*b5df5b83SMark Rutland }
46