xref: /rk3399_rockchip-uboot/arch/arm/thumb1/include/asm/proc-armv/system.h (revision 5f5620ab2679608f94b3a77e51c77d0a770103bd)
1*62e92077SAlbert ARIBAUD /*
2*62e92077SAlbert ARIBAUD  *  Thumb-1 drop-in for the linux/include/asm-arm/proc-armv/system.h
3*62e92077SAlbert ARIBAUD  *
4*62e92077SAlbert ARIBAUD  *  (C) Copyright 2015
5*62e92077SAlbert ARIBAUD  *  Albert ARIBAUD <albert.u.boot@aribaud.net>
6*62e92077SAlbert ARIBAUD  *
7*62e92077SAlbert ARIBAUD  * The original file does not build in Thumb mode. However, in U-Boot
8*62e92077SAlbert ARIBAUD  * we don't use interrupt context, so we can redefine these as empty
9*62e92077SAlbert ARIBAUD  * memory barriers, which makes Thumb-1 compiler happy.
10*62e92077SAlbert ARIBAUD  *
11*62e92077SAlbert ARIBAUD  *  SPDX-License-Identifier:	GPL-2.0+
12*62e92077SAlbert ARIBAUD  */
13*62e92077SAlbert ARIBAUD 
14*62e92077SAlbert ARIBAUD /*
15*62e92077SAlbert ARIBAUD  * Use the same macro name as linux/include/asm-arm/proc-armv/system.h
16*62e92077SAlbert ARIBAUD  * here, so that if the original ever gets included after us, it won't
17*62e92077SAlbert ARIBAUD  * try to re-redefine anything.
18*62e92077SAlbert ARIBAUD  */
19*62e92077SAlbert ARIBAUD 
20*62e92077SAlbert ARIBAUD #ifndef __ASM_PROC_SYSTEM_H
21*62e92077SAlbert ARIBAUD #define __ASM_PROC_SYSTEM_H
22*62e92077SAlbert ARIBAUD 
23*62e92077SAlbert ARIBAUD /*
24*62e92077SAlbert ARIBAUD  * Redefine all original macros with static inline functions containing
25*62e92077SAlbert ARIBAUD  * a simple memory barrier, so that they produce the same instruction
26*62e92077SAlbert ARIBAUD  * ordering constraints as their original counterparts.
27*62e92077SAlbert ARIBAUD  * We use static inline functions rather than macros so that we can tell
28*62e92077SAlbert ARIBAUD  * the compiler to not complain about unused arguments.
29*62e92077SAlbert ARIBAUD  */
30*62e92077SAlbert ARIBAUD 
local_irq_save(unsigned long flags)31*62e92077SAlbert ARIBAUD static inline void local_irq_save(
32*62e92077SAlbert ARIBAUD 	unsigned long flags __attribute__((unused)))
33*62e92077SAlbert ARIBAUD {
34*62e92077SAlbert ARIBAUD 	__asm__ __volatile__ ("" : : : "memory");
35*62e92077SAlbert ARIBAUD }
36*62e92077SAlbert ARIBAUD 
local_irq_enable(void)37*62e92077SAlbert ARIBAUD static inline void local_irq_enable(void)
38*62e92077SAlbert ARIBAUD {
39*62e92077SAlbert ARIBAUD 	__asm__ __volatile__ ("" : : : "memory");
40*62e92077SAlbert ARIBAUD }
41*62e92077SAlbert ARIBAUD 
local_irq_disable(void)42*62e92077SAlbert ARIBAUD static inline void local_irq_disable(void)
43*62e92077SAlbert ARIBAUD {
44*62e92077SAlbert ARIBAUD 	__asm__ __volatile__ ("" : : : "memory");
45*62e92077SAlbert ARIBAUD }
46*62e92077SAlbert ARIBAUD 
__stf(void)47*62e92077SAlbert ARIBAUD static inline void __stf(void)
48*62e92077SAlbert ARIBAUD {
49*62e92077SAlbert ARIBAUD 	__asm__ __volatile__ ("" : : : "memory");
50*62e92077SAlbert ARIBAUD }
51*62e92077SAlbert ARIBAUD 
__clf(void)52*62e92077SAlbert ARIBAUD static inline void __clf(void)
53*62e92077SAlbert ARIBAUD {
54*62e92077SAlbert ARIBAUD 	__asm__ __volatile__ ("" : : : "memory");
55*62e92077SAlbert ARIBAUD }
56*62e92077SAlbert ARIBAUD 
local_save_flags(unsigned long flags)57*62e92077SAlbert ARIBAUD static inline void local_save_flags(
58*62e92077SAlbert ARIBAUD 	unsigned long flags __attribute__((unused)))
59*62e92077SAlbert ARIBAUD {
60*62e92077SAlbert ARIBAUD 	__asm__ __volatile__ ("" : : : "memory");
61*62e92077SAlbert ARIBAUD }
62*62e92077SAlbert ARIBAUD 
local_irq_restore(unsigned long flags)63*62e92077SAlbert ARIBAUD static inline void local_irq_restore(
64*62e92077SAlbert ARIBAUD 	unsigned long flags __attribute__((unused)))
65*62e92077SAlbert ARIBAUD {
66*62e92077SAlbert ARIBAUD 	__asm__ __volatile__ ("" : : : "memory");
67*62e92077SAlbert ARIBAUD }
68*62e92077SAlbert ARIBAUD 
69*62e92077SAlbert ARIBAUD #endif /*  __ASM_PROC_SYSTEM_H */
70