diff --git a/include/arch/nios2/arch.h b/include/arch/nios2/arch.h index f2e567791c8..ee76e7102e4 100644 --- a/include/arch/nios2/arch.h +++ b/include/arch/nios2/arch.h @@ -25,6 +25,7 @@ #define _ARCH_IFACE_H #include +#include #include "nios2.h" #ifdef __cplusplus @@ -41,7 +42,6 @@ extern "C" { #ifndef _ASMLANGUAGE #include #include -#include /* STUB. Eventually port ARC/ARM interrupt stuff */ #define _ARCH_IRQ_CONNECT(irq_p, priority_p, isr_p, isr_param_p, flags_p) diff --git a/include/arch/nios2/nios2.h b/include/arch/nios2/nios2.h index d1cd60c85d6..3a546b54d64 100644 --- a/include/arch/nios2/nios2.h +++ b/include/arch/nios2/nios2.h @@ -46,9 +46,14 @@ extern "C" */ #define NIOS2_NIRQ 32 +/* Size in bits of registers */ +#define SYSTEM_BUS_WIDTH 32 + #ifndef _ASMLANGUAGE #include +#include +#include /* * Functions for accessing select Nios II general-purpose registers. @@ -128,6 +133,19 @@ enum nios2_creg { #define _nios2_creg_read(reg) __builtin_rdctl(reg) #define _nios2_creg_write(reg, val) __builtin_wrctl(reg, val) +#define _nios2_get_register_address(base, regnum) \ + ((void *)(((uint8_t *)base) + ((regnum) * (SYSTEM_BUS_WIDTH / 8)))) + +static inline void _nios2_reg_write(void *base, int regnum, uint32_t data) +{ + sys_write32(data, (mm_reg_t)_nios2_get_register_address(base, regnum)); +} + +static inline uint32_t _nios2_reg_read(void *base, int regnum) +{ + return sys_read32((mm_reg_t)_nios2_get_register_address(base, regnum)); +} + #endif /* _ASMLANGUAGE */ /*