cores/dma, liblitesdcard/sdcard: use 64 bits for dma base address
authorGabriel Somlo <gsomlo@gmail.com>
Mon, 6 Jul 2020 13:07:25 +0000 (09:07 -0400)
committerGabriel Somlo <gsomlo@gmail.com>
Mon, 10 Aug 2020 18:09:25 +0000 (14:09 -0400)
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 <gsomlo@gmail.com>
litex/soc/cores/dma.py
litex/soc/software/liblitesdcard/sdcard.c

index b116c867cd5fa6af6ef9d9d6601f8efd9ef2c7c3..211664df05b84287d5e4f5689a7a16d3d9c67067 100644 (file)
@@ -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()
index 9c2a56228268711babde945f637f36a9fae8eba4..fc9e3ff0ad8af95aa9e62c5897d078650845f8a8 100644 (file)
@@ -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);