2019-11-10 16:17:19 +00:00
|
|
|
/*
|
|
|
|
* Copyright (c) 2019 Carlo Caione <ccaione@baylibre.com>
|
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
|
|
*/
|
|
|
|
|
2020-09-18 09:04:43 +02:00
|
|
|
/*
|
|
|
|
* ARM64 Cortex-A power management
|
2019-11-10 16:17:19 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#include <toolchain.h>
|
|
|
|
#include <linker/sections.h>
|
|
|
|
#include <arch/cpu.h>
|
|
|
|
|
2020-03-10 18:26:58 +01:00
|
|
|
_ASM_FILE_PROLOGUE
|
|
|
|
|
2019-11-10 16:17:19 +00:00
|
|
|
GTEXT(arch_cpu_idle)
|
|
|
|
SECTION_FUNC(TEXT, arch_cpu_idle)
|
2019-11-18 09:49:25 +00:00
|
|
|
#ifdef CONFIG_TRACING
|
|
|
|
stp xzr, x30, [sp, #-16]!
|
|
|
|
bl sys_trace_idle
|
|
|
|
ldp xzr, x30, [sp], #16
|
|
|
|
#endif
|
2019-11-10 16:17:19 +00:00
|
|
|
dsb sy
|
|
|
|
wfi
|
2021-02-11 15:22:04 +01:00
|
|
|
msr daifclr, #(DAIFCLR_IRQ_BIT)
|
2019-11-10 16:17:19 +00:00
|
|
|
ret
|
|
|
|
|
|
|
|
GTEXT(arch_cpu_atomic_idle)
|
|
|
|
SECTION_FUNC(TEXT, arch_cpu_atomic_idle)
|
2019-11-18 09:49:25 +00:00
|
|
|
#ifdef CONFIG_TRACING
|
2021-02-10 09:04:20 +01:00
|
|
|
stp x0, x30, [sp, #-16]!
|
2019-11-18 09:49:25 +00:00
|
|
|
bl sys_trace_idle
|
2021-02-10 09:04:20 +01:00
|
|
|
ldp x0, x30, [sp], #16
|
2019-11-18 09:49:25 +00:00
|
|
|
#endif
|
2021-02-11 15:22:04 +01:00
|
|
|
msr daifset, #(DAIFSET_IRQ_BIT)
|
2019-11-10 16:17:19 +00:00
|
|
|
isb
|
|
|
|
wfe
|
2021-02-11 15:22:04 +01:00
|
|
|
tst x0, #(DAIF_IRQ_BIT)
|
2019-11-10 16:17:19 +00:00
|
|
|
beq _irq_disabled
|
2021-02-11 15:22:04 +01:00
|
|
|
msr daifclr, #(DAIFCLR_IRQ_BIT)
|
2019-11-10 16:17:19 +00:00
|
|
|
_irq_disabled:
|
|
|
|
ret
|