Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/arm64/kernel/idle.c
26442 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
/*
3
* Low-level idle sequences
4
*/
5
6
#include <linux/cpu.h>
7
#include <linux/irqflags.h>
8
9
#include <asm/barrier.h>
10
#include <asm/cpuidle.h>
11
#include <asm/cpufeature.h>
12
#include <asm/sysreg.h>
13
14
/*
15
* cpu_do_idle()
16
*
17
* Idle the processor (wait for interrupt).
18
*
19
* If the CPU supports priority masking we must do additional work to
20
* ensure that interrupts are not masked at the PMR (because the core will
21
* not wake up if we block the wake up signal in the interrupt controller).
22
*/
23
void __cpuidle cpu_do_idle(void)
24
{
25
struct arm_cpuidle_irq_context context;
26
27
arm_cpuidle_save_irq_context(&context);
28
29
dsb(sy);
30
wfi();
31
32
arm_cpuidle_restore_irq_context(&context);
33
}
34
35
/*
36
* This is our default idle handler.
37
*/
38
void __cpuidle arch_cpu_idle(void)
39
{
40
/*
41
* This should do all the clock switching and wait for interrupt
42
* tricks
43
*/
44
cpu_do_idle();
45
}
46
47