dde_linux: add barriers to readl/writel

Issue #3571
This commit is contained in:
Alexander Boettcher 2019-12-06 15:42:29 +01:00 committed by Christian Helmuth
parent 4299b85cdb
commit 6b17bb647e
5 changed files with 23 additions and 8 deletions

View File

@ -19,12 +19,15 @@
** asm-generic/io.h **
**********************/
#define writeq(value, addr) (*(volatile uint64_t *)(addr) = (value))
#define writel(value, addr) (*(volatile uint32_t *)(addr) = (value))
#define writew(value, addr) (*(volatile uint16_t *)(addr) = (value))
#define writeb(value, addr) (*(volatile uint8_t *)(addr) = (value))
#define iowmb dma_wmb
#define iormb dma_rmb
#define readq(addr) (*(volatile uint64_t *)(addr))
#define readl(addr) (*(volatile uint32_t *)(addr))
#define readw(addr) (*(volatile uint16_t *)(addr))
#define readb(addr) (*(volatile uint8_t *)(addr))
#define writeq(value, addr) ({ iowmb(); *(volatile uint64_t *)(addr) = (value); })
#define writel(value, addr) ({ iowmb(); *(volatile uint32_t *)(addr) = (value); })
#define writew(value, addr) ({ iowmb(); *(volatile uint16_t *)(addr) = (value); })
#define writeb(value, addr) ({ iowmb(); *(volatile uint8_t *)(addr) = (value); })
#define readq(addr) ({ uint64_t const r = *(volatile uint64_t *)(addr); iormb(); r; })
#define readl(addr) ({ uint32_t const r = *(volatile uint32_t *)(addr); iormb(); r; })
#define readw(addr) ({ uint16_t const r = *(volatile uint16_t *)(addr); iormb(); r; })
#define readb(addr) ({ uint8_t const r = *(volatile uint8_t *)(addr); iormb(); r; })

View File

@ -19,6 +19,9 @@
#define rmb() mb()
#define wmb() asm volatile ("dsb st": : :"memory")
#define dma_wmb() __asm__ __volatile__ ("dmb oshst" : : : "memory")
#define dma_rmb() __asm__ __volatile__ ("dmb oshld" : : : "memory")
/*
* This is the "safe" implementation as needed for a configuration
* with bufferable DMA memory and SMP enabled.

View File

@ -19,6 +19,9 @@
#define rmb() mb()
#define wmb() asm volatile ("": : :"memory")
#define dma_wmb() barrier()
#define dma_rmb() barrier()
/*
* This is the "safe" implementation as needed for a configuration
* with SMP enabled.

View File

@ -19,6 +19,9 @@
#define rmb() mb()
#define wmb() asm volatile ("dsb st": : :"memory")
#define dma_wmb() barrier()
#define dma_rmb() barrier()
/*
* This is the "safe" implementation as needed for a configuration
* with bufferable DMA memory and SMP enabled.

View File

@ -7,6 +7,9 @@
#define rmb() asm volatile ("lfence": : :"memory")
#define wmb() asm volatile ("sfence": : :"memory")
#define dma_wmb() barrier()
#define dma_rmb() barrier()
/*
* This is the "safe" implementation as needed for a configuration
* with SMP enabled.