|
|
|
@ -16,6 +16,7 @@
@@ -16,6 +16,7 @@
|
|
|
|
|
|
|
|
|
|
#include <zephyr/types.h> |
|
|
|
|
#include <zephyr/sys/sys_io.h> |
|
|
|
|
#include <zephyr/sys/barrier.h> |
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus |
|
|
|
|
extern "C" { |
|
|
|
@ -39,13 +40,13 @@ static ALWAYS_INLINE uint8_t sys_read8(mem_addr_t addr)
@@ -39,13 +40,13 @@ static ALWAYS_INLINE uint8_t sys_read8(mem_addr_t addr)
|
|
|
|
|
|
|
|
|
|
__asm__ volatile("ldrb %w0, [%1]" : "=r" (val) : "r" (addr)); |
|
|
|
|
|
|
|
|
|
__DMB(); |
|
|
|
|
barrier_dmem_fence_full(); |
|
|
|
|
return val; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static ALWAYS_INLINE void sys_write8(uint8_t data, mem_addr_t addr) |
|
|
|
|
{ |
|
|
|
|
__DMB(); |
|
|
|
|
barrier_dmem_fence_full(); |
|
|
|
|
__asm__ volatile("strb %w0, [%1]" : : "r" (data), "r" (addr)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -55,13 +56,13 @@ static ALWAYS_INLINE uint16_t sys_read16(mem_addr_t addr)
@@ -55,13 +56,13 @@ static ALWAYS_INLINE uint16_t sys_read16(mem_addr_t addr)
|
|
|
|
|
|
|
|
|
|
__asm__ volatile("ldrh %w0, [%1]" : "=r" (val) : "r" (addr)); |
|
|
|
|
|
|
|
|
|
__DMB(); |
|
|
|
|
barrier_dmem_fence_full(); |
|
|
|
|
return val; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static ALWAYS_INLINE void sys_write16(uint16_t data, mem_addr_t addr) |
|
|
|
|
{ |
|
|
|
|
__DMB(); |
|
|
|
|
barrier_dmem_fence_full(); |
|
|
|
|
__asm__ volatile("strh %w0, [%1]" : : "r" (data), "r" (addr)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -71,13 +72,13 @@ static ALWAYS_INLINE uint32_t sys_read32(mem_addr_t addr)
@@ -71,13 +72,13 @@ static ALWAYS_INLINE uint32_t sys_read32(mem_addr_t addr)
|
|
|
|
|
|
|
|
|
|
__asm__ volatile("ldr %w0, [%1]" : "=r" (val) : "r" (addr)); |
|
|
|
|
|
|
|
|
|
__DMB(); |
|
|
|
|
barrier_dmem_fence_full(); |
|
|
|
|
return val; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static ALWAYS_INLINE void sys_write32(uint32_t data, mem_addr_t addr) |
|
|
|
|
{ |
|
|
|
|
__DMB(); |
|
|
|
|
barrier_dmem_fence_full(); |
|
|
|
|
__asm__ volatile("str %w0, [%1]" : : "r" (data), "r" (addr)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -87,13 +88,13 @@ static ALWAYS_INLINE uint64_t sys_read64(mem_addr_t addr)
@@ -87,13 +88,13 @@ static ALWAYS_INLINE uint64_t sys_read64(mem_addr_t addr)
|
|
|
|
|
|
|
|
|
|
__asm__ volatile("ldr %x0, [%1]" : "=r" (val) : "r" (addr)); |
|
|
|
|
|
|
|
|
|
__DMB(); |
|
|
|
|
barrier_dmem_fence_full(); |
|
|
|
|
return val; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static ALWAYS_INLINE void sys_write64(uint64_t data, mem_addr_t addr) |
|
|
|
|
{ |
|
|
|
|
__DMB(); |
|
|
|
|
barrier_dmem_fence_full(); |
|
|
|
|
__asm__ volatile("str %x0, [%1]" : : "r" (data), "r" (addr)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|