Quellcode durchsuchen

Fix reading data

Matthias Vogelgesang vor 8 Jahren
Ursprung
Commit
38ee464ac5
1 geänderte Dateien mit 16 neuen und 17 gelöschten Zeilen
  1. 16 17
      ddrio.c

+ 16 - 17
ddrio.c

@@ -179,6 +179,7 @@ read_from_ddr (pcilib_t *pci, volatile void *bar, Options *opts)
     uintptr_t bus_addr;
     size_t size;
     const size_t mem_size = 4096;
+    int started = 0;
 
     if (opts->size == 0) {
         fprintf (stderr, "Read size is zero, not going to read\n");
@@ -199,30 +200,33 @@ read_from_ddr (pcilib_t *pci, volatile void *bar, Options *opts)
     /* enable multi-read from DDR */
     WR32_sleep (0x9040, 0x10C00);
 
-    /* set write addr */
-    WR64_sleep (0x50, bus_addr);
-
     /* DMA config */
     WR32_sleep (0x10, 0x20);
     WR32_sleep (0x0C, 0x20);
     WR32_sleep (0x60, 1);
 
-    /* start DMA */
-    WR32_sleep (0x04, 1);
-
     while (size >= mem_size) {
-        usleep (100000);
-        fwrite (mem, 1, mem_size, fp);
-
         /* set write addr */
-        WR64_sleep (0x50, bus_addr);
+        WR64 (0x50, bus_addr);
+
+        /* start DMA */
+        if (!started) {
+            WR32_sleep (0x04, 1);
+            started = 1;
+        }
+
+        usleep (100);
+        fwrite (mem, 1, mem_size, fp);
 
         size -= mem_size;
     }
 
     if (size > 0) {
-        usleep (100000);
-        fwrite (mem, 1, mem_size, fp);
+        WR64_sleep (0x50, bus_addr);
+        WR32_sleep (0x04, 1);
+
+        usleep (100);
+        fwrite (mem, 1, size, fp);
     }
 
     WR32_sleep (0x04, 0);
@@ -258,11 +262,6 @@ main (int argc, char const* argv[])
     WR32_sleep (0x93A4, 1);
     WR32_sleep (0x93A4, 0);
 
-    /* reset */
-    WR32_sleep (0x9000, 0x10);
-    WR32_sleep (0x9000, 0);
-    WR32_sleep (0x4, 0);
-
     if (opts.input != NULL)
         write_to_ddr (pci, bar, &opts);