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 ARIBAUDstatic 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 ARIBAUDstatic 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 ARIBAUDstatic 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 ARIBAUDstatic inline void __stf(void) 48*62e92077SAlbert ARIBAUD { 49*62e92077SAlbert ARIBAUD __asm__ __volatile__ ("" : : : "memory"); 50*62e92077SAlbert ARIBAUD } 51*62e92077SAlbert ARIBAUD __clf(void)52*62e92077SAlbert ARIBAUDstatic 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 ARIBAUDstatic 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 ARIBAUDstatic 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