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