From ba34c8528437a6ecc2c1c4b5f15488cb1d4d39fa Mon Sep 17 00:00:00 2001 From: Gabriel Somlo Date: Mon, 6 Jul 2020 09:07:25 -0400 Subject: [PATCH] cores/dma, liblitesdcard/sdcard: use 64 bits for dma base address Make the DMA base address register 64-bit wide, to cover situations in which the physical memory being accessed is above the 4GB limit (e.g., on 64-bit systems with more than 4GB of provisioned physical memory). Also update DMA reader/writer setup call sites in the bios (currently only used by litesdcard). Signed-off-by: Gabriel Somlo --- litex/soc/cores/dma.py | 4 ++-- litex/soc/software/liblitesdcard/sdcard.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/litex/soc/cores/dma.py b/litex/soc/cores/dma.py index b116c867c..211664df0 100644 --- a/litex/soc/cores/dma.py +++ b/litex/soc/cores/dma.py @@ -72,7 +72,7 @@ class WishboneDMAReader(Module, AutoCSR): self.add_csr() def add_csr(self): - self._base = CSRStorage(32) + self._base = CSRStorage(64) self._length = CSRStorage(32) self._enable = CSRStorage() self._done = CSRStatus() @@ -158,7 +158,7 @@ class WishboneDMAWriter(Module, AutoCSR): self._sink = self.sink self.sink = stream.Endpoint([("data", self.bus.data_width)]) - self._base = CSRStorage(32) + self._base = CSRStorage(64) self._length = CSRStorage(32) self._enable = CSRStorage() self._done = CSRStatus() diff --git a/litex/soc/software/liblitesdcard/sdcard.c b/litex/soc/software/liblitesdcard/sdcard.c index 9c2a56228..fc9e3ff0a 100644 --- a/litex/soc/software/liblitesdcard/sdcard.c +++ b/litex/soc/software/liblitesdcard/sdcard.c @@ -561,7 +561,7 @@ void sdcard_read(uint32_t sector, uint32_t count, uint8_t* buf) { /* Initialize DMA Writer */ sdblock2mem_dma_enable_write(0); - sdblock2mem_dma_base_write((uint32_t) buf); + sdblock2mem_dma_base_write((uint64_t) buf); sdblock2mem_dma_length_write(512*count); sdblock2mem_dma_enable_write(1); @@ -594,7 +594,7 @@ void sdcard_write(uint32_t sector, uint32_t count, uint8_t* buf) while (count--) { /* Initialize DMA Reader */ sdmem2block_dma_enable_write(0); - sdmem2block_dma_base_write((uint32_t) buf); + sdmem2block_dma_base_write((uint64_t) buf); sdmem2block_dma_length_write(512); sdmem2block_dma_enable_write(1);