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