1*f739fcd8STom Rini /* SPDX-License-Identifier: GPL-2.0+ */
262e92077SAlbert ARIBAUD /*
362e92077SAlbert ARIBAUD  *  Thumb-1 drop-in for the linux/include/asm-arm/proc-armv/system.h
462e92077SAlbert ARIBAUD  *
562e92077SAlbert ARIBAUD  *  (C) Copyright 2015
662e92077SAlbert ARIBAUD  *  Albert ARIBAUD <albert.u.boot@aribaud.net>
762e92077SAlbert ARIBAUD  *
862e92077SAlbert ARIBAUD  * The original file does not build in Thumb mode. However, in U-Boot
962e92077SAlbert ARIBAUD  * we don't use interrupt context, so we can redefine these as empty
1062e92077SAlbert ARIBAUD  * memory barriers, which makes Thumb-1 compiler happy.
1162e92077SAlbert ARIBAUD  */
1262e92077SAlbert ARIBAUD 
1362e92077SAlbert ARIBAUD /*
1462e92077SAlbert ARIBAUD  * Use the same macro name as linux/include/asm-arm/proc-armv/system.h
1562e92077SAlbert ARIBAUD  * here, so that if the original ever gets included after us, it won't
1662e92077SAlbert ARIBAUD  * try to re-redefine anything.
1762e92077SAlbert ARIBAUD  */
1862e92077SAlbert ARIBAUD 
1962e92077SAlbert ARIBAUD #ifndef __ASM_PROC_SYSTEM_H
2062e92077SAlbert ARIBAUD #define __ASM_PROC_SYSTEM_H
2162e92077SAlbert ARIBAUD 
2262e92077SAlbert ARIBAUD /*
2362e92077SAlbert ARIBAUD  * Redefine all original macros with static inline functions containing
2462e92077SAlbert ARIBAUD  * a simple memory barrier, so that they produce the same instruction
2562e92077SAlbert ARIBAUD  * ordering constraints as their original counterparts.
2662e92077SAlbert ARIBAUD  * We use static inline functions rather than macros so that we can tell
2762e92077SAlbert ARIBAUD  * the compiler to not complain about unused arguments.
2862e92077SAlbert ARIBAUD  */
2962e92077SAlbert ARIBAUD 
local_irq_save(unsigned long flags)3062e92077SAlbert ARIBAUD static inline void local_irq_save(
3162e92077SAlbert ARIBAUD 	unsigned long flags __attribute__((unused)))
3262e92077SAlbert ARIBAUD {
3362e92077SAlbert ARIBAUD 	__asm__ __volatile__ ("" : : : "memory");
3462e92077SAlbert ARIBAUD }
3562e92077SAlbert ARIBAUD 
local_irq_enable(void)3662e92077SAlbert ARIBAUD static inline void local_irq_enable(void)
3762e92077SAlbert ARIBAUD {
3862e92077SAlbert ARIBAUD 	__asm__ __volatile__ ("" : : : "memory");
3962e92077SAlbert ARIBAUD }
4062e92077SAlbert ARIBAUD 
local_irq_disable(void)4162e92077SAlbert ARIBAUD static inline void local_irq_disable(void)
4262e92077SAlbert ARIBAUD {
4362e92077SAlbert ARIBAUD 	__asm__ __volatile__ ("" : : : "memory");
4462e92077SAlbert ARIBAUD }
4562e92077SAlbert ARIBAUD 
__stf(void)4662e92077SAlbert ARIBAUD static inline void __stf(void)
4762e92077SAlbert ARIBAUD {
4862e92077SAlbert ARIBAUD 	__asm__ __volatile__ ("" : : : "memory");
4962e92077SAlbert ARIBAUD }
5062e92077SAlbert ARIBAUD 
__clf(void)5162e92077SAlbert ARIBAUD static inline void __clf(void)
5262e92077SAlbert ARIBAUD {
5362e92077SAlbert ARIBAUD 	__asm__ __volatile__ ("" : : : "memory");
5462e92077SAlbert ARIBAUD }
5562e92077SAlbert ARIBAUD 
local_save_flags(unsigned long flags)5662e92077SAlbert ARIBAUD static inline void local_save_flags(
5762e92077SAlbert ARIBAUD 	unsigned long flags __attribute__((unused)))
5862e92077SAlbert ARIBAUD {
5962e92077SAlbert ARIBAUD 	__asm__ __volatile__ ("" : : : "memory");
6062e92077SAlbert ARIBAUD }
6162e92077SAlbert ARIBAUD 
local_irq_restore(unsigned long flags)6262e92077SAlbert ARIBAUD static inline void local_irq_restore(
6362e92077SAlbert ARIBAUD 	unsigned long flags __attribute__((unused)))
6462e92077SAlbert ARIBAUD {
6562e92077SAlbert ARIBAUD 	__asm__ __volatile__ ("" : : : "memory");
6662e92077SAlbert ARIBAUD }
6762e92077SAlbert ARIBAUD 
6862e92077SAlbert ARIBAUD #endif /*  __ASM_PROC_SYSTEM_H */
69