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