From 5b8d41805878a6a013bc1d4319c01f82f1d0d1f0 Mon Sep 17 00:00:00 2001 From: Anas Nashif Date: Wed, 26 May 2021 14:31:49 -0400 Subject: [PATCH] nios2: revert back to builtin sys_io functions Some time ago we did a cleanup of sys_io function and left nios2 broken, especially on the MAX10 board. Revert back to the original implementation for this architecture. Fixes #35694 Signed-off-by: Anas Nashif --- include/arch/nios2/arch.h | 2 +- include/arch/nios2/asm_inline_gcc.h | 36 +++++++++++++++++++++++++++++ include/arch/nios2/nios2.h | 2 +- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/include/arch/nios2/arch.h b/include/arch/nios2/arch.h index 4a20a27f72a..78fcf791813 100644 --- a/include/arch/nios2/arch.h +++ b/include/arch/nios2/arch.h @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include #define ARCH_STACK_PTR_ALIGN 4 diff --git a/include/arch/nios2/asm_inline_gcc.h b/include/arch/nios2/asm_inline_gcc.h index 9f4a428f1f3..70099a2b17c 100644 --- a/include/arch/nios2/asm_inline_gcc.h +++ b/include/arch/nios2/asm_inline_gcc.h @@ -14,7 +14,43 @@ #ifndef _ASMLANGUAGE #include +#include #include + +/* Using the *io variants of these instructions to prevent issues on + * devices that have an instruction/data cache + */ + +static ALWAYS_INLINE void sys_write32(uint32_t data, mm_reg_t addr) +{ + __builtin_stwio((void *)addr, data); +} + +static ALWAYS_INLINE uint32_t sys_read32(mm_reg_t addr) +{ + return __builtin_ldwio((void *)addr); +} + +static ALWAYS_INLINE void sys_write8(uint8_t data, mm_reg_t addr) +{ + sys_write32(data, addr); +} + +static ALWAYS_INLINE uint8_t sys_read8(mm_reg_t addr) +{ + return __builtin_ldbuio((void *)addr); +} + +static ALWAYS_INLINE void sys_write16(uint16_t data, mm_reg_t addr) +{ + sys_write32(data, addr); +} + +static ALWAYS_INLINE uint16_t sys_read16(mm_reg_t addr) +{ + return __builtin_ldhuio((void *)addr); +} + #endif /* _ASMLANGUAGE */ #endif /* _ASM_INLINE_GCC_PUBLIC_GCC_H */ diff --git a/include/arch/nios2/nios2.h b/include/arch/nios2/nios2.h index 6b4734e47f2..17e57733ceb 100644 --- a/include/arch/nios2/nios2.h +++ b/include/arch/nios2/nios2.h @@ -55,7 +55,7 @@ extern "C" #include #include -#include +#include /* * Functions for accessing select Nios II general-purpose registers.