From 7bd697b0d596b269d9d5db8eb2dcbe3068376755 Mon Sep 17 00:00:00 2001 From: Andrew Boie Date: Mon, 20 Jun 2016 13:39:21 -0700 Subject: [PATCH] nios2: add _nios2_reg_write/read functions The technical manuals and example HAL code frequently refer to register bank numbers from some base address. Add these helper functions to read and write registers correctly using this notation. Change-Id: Ia082f5cc89081fcea2cb6ad8204c1b9b2650d3fd Signed-off-by: Andrew Boie --- include/arch/nios2/arch.h | 2 +- include/arch/nios2/nios2.h | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) 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 */ /*