xref: /rk3399_rockchip-uboot/arch/arm/include/asm/barriers.h (revision a78cd8613204188991c192b8dae2de0aae3b1722)
11ea4fac5SAndre Przywara /*
21ea4fac5SAndre Przywara  * Copyright (C) 2016 ARM Ltd.
31ea4fac5SAndre Przywara  *
41ea4fac5SAndre Przywara  * ARM and ARM64 barrier instructions
51ea4fac5SAndre Przywara  * split from armv7.h to allow sharing between ARM and ARM64
61ea4fac5SAndre Przywara  *
71ea4fac5SAndre Przywara  * Original copyright in armv7.h was:
81ea4fac5SAndre Przywara  * (C) Copyright 2010 Texas Instruments, <www.ti.com> Aneesh V <aneesh@ti.com>
91ea4fac5SAndre Przywara  *
101ea4fac5SAndre Przywara  * Much of the original barrier code was contributed by:
111ea4fac5SAndre Przywara  *   Valentine Barshak <valentine.barshak@cogentembedded.com>
121ea4fac5SAndre Przywara  *
131ea4fac5SAndre Przywara  * SPDX-License-Identifier:	GPL-2.0+
141ea4fac5SAndre Przywara  */
151ea4fac5SAndre Przywara #ifndef __BARRIERS_H__
161ea4fac5SAndre Przywara #define __BARRIERS_H__
171ea4fac5SAndre Przywara 
181ea4fac5SAndre Przywara #ifndef __ASSEMBLY__
191ea4fac5SAndre Przywara 
201ea4fac5SAndre Przywara #ifndef CONFIG_ARM64
211ea4fac5SAndre Przywara /*
221ea4fac5SAndre Przywara  * CP15 Barrier instructions
231ea4fac5SAndre Przywara  * Please note that we have separate barrier instructions in ARMv7
241ea4fac5SAndre Przywara  * However, we use the CP15 based instructtions because we use
251ea4fac5SAndre Przywara  * -march=armv5 in U-Boot
261ea4fac5SAndre Przywara  */
271ea4fac5SAndre Przywara #define CP15ISB	asm volatile ("mcr     p15, 0, %0, c7, c5, 4" : : "r" (0))
281ea4fac5SAndre Przywara #define CP15DSB	asm volatile ("mcr     p15, 0, %0, c7, c10, 4" : : "r" (0))
291ea4fac5SAndre Przywara #define CP15DMB	asm volatile ("mcr     p15, 0, %0, c7, c10, 5" : : "r" (0))
301ea4fac5SAndre Przywara 
311ea4fac5SAndre Przywara #endif /* !CONFIG_ARM64 */
321ea4fac5SAndre Przywara 
33*a78cd861STom Rini #if __LINUX_ARM_ARCH__ >= 7
341ea4fac5SAndre Przywara #define ISB	asm volatile ("isb sy" : : : "memory")
351ea4fac5SAndre Przywara #define DSB	asm volatile ("dsb sy" : : : "memory")
361ea4fac5SAndre Przywara #define DMB	asm volatile ("dmb sy" : : : "memory")
37*a78cd861STom Rini #elif __LINUX_ARM_ARCH__ == 6
381ea4fac5SAndre Przywara #define ISB	CP15ISB
391ea4fac5SAndre Przywara #define DSB	CP15DSB
401ea4fac5SAndre Przywara #define DMB	CP15DMB
41*a78cd861STom Rini #else
42*a78cd861STom Rini #define ISB	asm volatile ("" : : : "memory")
43*a78cd861STom Rini #define DSB	CP15DSB
44*a78cd861STom Rini #define DMB	asm volatile ("" : : : "memory")
451ea4fac5SAndre Przywara #endif
461ea4fac5SAndre Przywara 
47*a78cd861STom Rini #define isb()	ISB
48*a78cd861STom Rini #define dsb()	DSB
49*a78cd861STom Rini #define dmb()	DMB
501ea4fac5SAndre Przywara #endif	/* __ASSEMBLY__ */
511ea4fac5SAndre Przywara #endif	/* __BARRIERS_H__ */
52