From c3752bf4423eb2b41630350041502f3cf60f1d8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fin=20Maa=C3=9F?= Date: Fri, 21 Jun 2024 16:31:05 +0200 Subject: [PATCH] soc: riscv: litex: soc.h: add litex_write64 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add function for a 64-bit write in litex. Signed-off-by: Fin Maaß --- soc/litex/litex_vexriscv/soc.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/soc/litex/litex_vexriscv/soc.h b/soc/litex/litex_vexriscv/soc.h index 4334be4ec1c..060110bbdbe 100644 --- a/soc/litex/litex_vexriscv/soc.h +++ b/soc/litex/litex_vexriscv/soc.h @@ -103,6 +103,27 @@ static inline void litex_write32(unsigned int value, unsigned long addr) #endif } +static inline void litex_write64(uint64_t value, unsigned long addr) +{ +#if CONFIG_LITEX_CSR_DATA_WIDTH == 8 + sys_write8(value >> 56, addr); + sys_write8(value >> 48, addr + 0x4); + sys_write8(value >> 40, addr + 0x8); + sys_write8(value >> 32, addr + 0xC); + sys_write8(value >> 24, addr + 0x10); + sys_write8(value >> 16, addr + 0x14); + sys_write8(value >> 8, addr + 0x18); + sys_write8(value, addr + 0x1C); +#elif CONFIG_LITEX_CSR_DATA_WIDTH == 32 + sys_write32(value >> 32, addr); + sys_write32(value, addr + 0x4); +#elif CONFIG_LITEX_CSR_DATA_WIDTH >= 64 + sys_write64(value, addr); +#else +#error Unsupported CSR data width +#endif +} + /* * Operates on uint32_t values only * Size is in bytes and meaningful are 1, 2 or 4