From 2256f5fb4bc353c7d8f4a8c073b27a9677661a57 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Fri, 10 Jan 2020 14:08:58 +0100 Subject: [PATCH] dde_linux: add dma_wmb/rmb barriers for arm_v6 --- .../src/include/spec/arm_v6/lx_emul/barrier.h | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/repos/dde_linux/src/include/spec/arm_v6/lx_emul/barrier.h b/repos/dde_linux/src/include/spec/arm_v6/lx_emul/barrier.h index a754f14d5..98ccb25d8 100644 --- a/repos/dde_linux/src/include/spec/arm_v6/lx_emul/barrier.h +++ b/repos/dde_linux/src/include/spec/arm_v6/lx_emul/barrier.h @@ -11,24 +11,27 @@ * version 2. */ -/******************* - ** asm/barrier.h ** - *******************/ +/******************************************* + ** source/arch/arm/include/asm/barrier.h ** + *******************************************/ -#define mb() asm volatile ("": : :"memory") +#define dsb() asm volatile ("mcr p15, 0, %0, c7, c10, 4": : "r" (0) : "memory") +#define dmb() asm volatile ("mcr p15, 0, %0, c7, c10, 5": : "r" (0) : "memory") + +#define mb() dsb() #define rmb() mb() -#define wmb() asm volatile ("": : :"memory") +#define wmb() dsb() -#define dma_wmb() barrier() -#define dma_rmb() barrier() +#define dma_wmb() dmb() +#define dma_rmb() dmb() /* * This is the "safe" implementation as needed for a configuration * with SMP enabled. */ -#define smp_mb() asm volatile ("": : :"memory") +#define smp_mb() dmb() #define smp_rmb() smp_mb() -#define smp_wmb() asm volatile ("": : :"memory") +#define smp_wmb() dmb() static inline void barrier() { asm volatile ("": : :"memory"); }