csr: fix simple accessor alignment
authorGabriel Somlo <gsomlo@gmail.com>
Fri, 29 May 2020 15:54:10 +0000 (11:54 -0400)
committerGabriel Somlo <gsomlo@gmail.com>
Fri, 29 May 2020 16:03:05 +0000 (12:03 -0400)
MMPTR should always follow CSR alignment, NOT CSR data width.
(the latter merely indicates how many bits within a MMPTR are
actually populated).

Fixup for commit #4a5072a.

Signed-off-by: Gabriel Somlo <gsomlo@gmail.com>
litex/soc/software/include/hw/common.h

index 3db167dd61037b9df5fd9af032b35a63fa76fd64..b976bd9e005bb081feb90b205d54bd8332fe4f8f 100644 (file)
 
 /* CSR subregisters (a.k.a. "simple CSRs") are embedded inside native CPU-word
  * aligned locations: */
-#if CONFIG_CSR_DATA_WIDTH == 32
-#define MMPTR(a) (*((volatile unsigned int *)(a)))
-#elif CONFIG_CSR_DATA_WIDTH == 8
-#define MMPTR(a) (*((volatile unsigned char *)(a)))
+#if CONFIG_CSR_ALIGNMENT == 32
+#define MMPTR(a) (*((volatile uint32_t *)(a)))
+#elif CONFIG_CSR_ALIGNMENT == 64
+#define MMPTR(a) (*((volatile uint64_t *)(a)))
 #else
-#error Unsupported CSR data width
+#error Unsupported CSR alignment
 #endif
 
 static inline void csr_write_simple(unsigned long v, unsigned long a)