]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
arm: Move sev() and wfe() definitions to common Arm header file
authorPeter Hoyes <Peter.Hoyes@arm.com>
Wed, 1 May 2024 08:16:32 +0000 (09:16 +0100)
committerTom Rini <trini@konsulko.com>
Mon, 13 May 2024 22:51:14 +0000 (16:51 -0600)
The sev() and wfe() asm macros are currently defined only for
mach-exynos. As these are common Arm instructions, move them to the
common asm/system.h header file, for both Armv7 and Armv8, so they
can be used by other machines.

wfe may theoretically trigger a context switch if an interrupt occurs
so add a memory barrier to this call.

Signed-off-by: Peter Hoyes <Peter.Hoyes@arm.com>
Reviewed-by: Andre Przywara<andre.przywara@arm.com>
arch/arm/include/asm/system.h
arch/arm/mach-exynos/include/mach/system.h

index 43f7503571d7a1c94a274be16a3f785f7d331df1..51123c2968430a77e2732cc2f0cc77255077915d 100644 (file)
@@ -154,6 +154,13 @@ enum dcache_option {
        "wfi" : : : "memory");          \
        })
 
+#define wfe()                          \
+       ({asm volatile(                 \
+       "wfe" : : : "memory");          \
+       })
+
+#define sev() asm volatile("sev")
+
 static inline unsigned int current_el(void)
 {
        unsigned long el;
@@ -369,6 +376,8 @@ void switch_to_hypervisor_ret(void);
 
 #ifdef __ARM_ARCH_7A__
 #define wfi() __asm__ __volatile__ ("wfi" : : : "memory")
+#define wfe() __asm__ __volatile__ ("wfe" : : : "memory")
+#define sev() __asm__ __volatile__ ("sev")
 #else
 #define wfi()
 #endif
index 5d0bebac5733e4cd5d3a727859c0c94324b9919f..0aed4c3e2bf69a2d9f13d34462c9e299a8da6fc7 100644 (file)
@@ -36,25 +36,6 @@ struct exynos5_sysreg {
 
 #define USB20_PHY_CFG_HOST_LINK_EN     (1 << 0)
 
-/*
- * This instruction causes an event to be signaled to all cores
- * within a multiprocessor system. If SEV is implemented,
- * WFE must also be implemented.
- */
-#define sev() __asm__ __volatile__ ("sev\n\t" : : );
-/*
- * If the Event Register is not set, WFE suspends execution until
- * one of the following events occurs:
- * - an IRQ interrupt, unless masked by the CPSR I-bit
- * - an FIQ interrupt, unless masked by the CPSR F-bit
- * - an Imprecise Data abort, unless masked by the CPSR A-bit
- * - a Debug Entry request, if Debug is enabled
- * - an Event signaled by another processor using the SEV instruction.
- * If the Event Register is set, WFE clears it and returns immediately.
- * If WFE is implemented, SEV must also be implemented.
- */
-#define wfe() __asm__ __volatile__ ("wfe\n\t" : : );
-
 /* Move 0xd3 value to CPSR register to enable SVC mode */
 #define svc32_mode_en() __asm__ __volatile__                           \
                        ("@ I&F disable, Mode: 0x13 - SVC\n\t"          \