| /* |
| * Copyright (c) 2019 Carlo Caione <ccaione@baylibre.com> |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /* |
| * ARM64 Cortex-A power management |
| */ |
| |
| #include <zephyr/toolchain.h> |
| #include <zephyr/linker/sections.h> |
| #include <zephyr/arch/cpu.h> |
| |
| _ASM_FILE_PROLOGUE |
| |
| GTEXT(arch_cpu_idle) |
| SECTION_FUNC(TEXT, arch_cpu_idle) |
| #ifdef CONFIG_TRACING |
| str lr, [sp, #-16]! |
| bl sys_trace_idle |
| ldr lr, [sp], #16 |
| #endif |
| dsb sy |
| wfi |
| msr daifclr, #(DAIFCLR_IRQ_BIT) |
| ret |
| |
| GTEXT(arch_cpu_atomic_idle) |
| SECTION_FUNC(TEXT, arch_cpu_atomic_idle) |
| #ifdef CONFIG_TRACING |
| stp x0, lr, [sp, #-16]! |
| bl sys_trace_idle |
| ldp x0, lr, [sp], #16 |
| #endif |
| msr daifset, #(DAIFSET_IRQ_BIT) |
| isb |
| wfe |
| tst x0, #(DAIF_IRQ_BIT) |
| beq _irq_disabled |
| msr daifclr, #(DAIFCLR_IRQ_BIT) |
| _irq_disabled: |
| ret |