|
@@ -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);
|
|
|
|