|
@@ -9,6 +9,8 @@
|
|
|
#include <pcilib/bar.h>
|
|
|
#include <pcilib/kmem.h>
|
|
|
|
|
|
+#include "hf-interface.h"
|
|
|
+
|
|
|
/* this should actually come from the distributed pcitool sources */
|
|
|
#include "pciDriver.h"
|
|
|
|
|
@@ -134,14 +136,18 @@ write_to_ddr (pcilib_t *pci, volatile void *bar, Options *opts)
|
|
|
}
|
|
|
|
|
|
/* reset DDR and FIFOs */
|
|
|
- WR32_sleep (0x9040, 0x1000F);
|
|
|
+ WR32_sleep (HF_REG_CONTROL,
|
|
|
+ HF_CONTROL_RESET |
|
|
|
+ HF_CONTROL_SOFT_RESET |
|
|
|
+ 0x3 | /* what does this even mean? */
|
|
|
+ HF_CONTROL_SOURCE_DCG);
|
|
|
|
|
|
/* write only in DDR mode, disable read */
|
|
|
- WR32_sleep (0x9040, 0x10000);
|
|
|
+ WR32_sleep (HF_REG_CONTROL, HF_CONTROL_SOURCE_DCG);
|
|
|
|
|
|
/* reset DMA */
|
|
|
- WR32_sleep (0x0, 1);
|
|
|
- WR32_sleep (0x0, 0);
|
|
|
+ WR32_sleep (HF_REG_BASE, HF_BASE_RESET);
|
|
|
+ WR32_sleep (HF_REG_BASE, !HF_BASE_RESET);
|
|
|
|
|
|
switch (opts->copy) {
|
|
|
case COPY_MEMCPY:
|
|
@@ -198,16 +204,19 @@ read_from_ddr (pcilib_t *pci, volatile void *bar, Options *opts)
|
|
|
bus_addr = pcilib_kmem_get_block_ba (pci, kmem, 0);
|
|
|
|
|
|
/* enable multi-read from DDR */
|
|
|
- WR32_sleep (0x9040, 0x10C00);
|
|
|
+ WR32_sleep (HF_REG_CONTROL,
|
|
|
+ HF_CONTROL_ENABLE_READ |
|
|
|
+ HF_CONTROL_ENABLE_MULTI_READ |
|
|
|
+ HF_CONTROL_SOURCE_DCG);
|
|
|
|
|
|
/* DMA config */
|
|
|
- WR32_sleep (0x10, 0x20);
|
|
|
- WR32_sleep (0x0C, 0x20);
|
|
|
- WR32_sleep (0x60, 1);
|
|
|
+ WR32_sleep (HF_REG_NUM_PACKETS, 0x20);
|
|
|
+ WR32_sleep (HF_REG_PACKET_LENGTH, 0x20);
|
|
|
+ WR32_sleep (HF_REG_UPDATE_THRESHOLD, 1);
|
|
|
|
|
|
while (size >= mem_size) {
|
|
|
/* set write addr */
|
|
|
- WR64 (0x50, bus_addr);
|
|
|
+ WR64 (HF_REG_DESCRIPTOR_ADDRESS, bus_addr);
|
|
|
|
|
|
/* start DMA */
|
|
|
if (!started) {
|
|
@@ -222,20 +231,20 @@ read_from_ddr (pcilib_t *pci, volatile void *bar, Options *opts)
|
|
|
}
|
|
|
|
|
|
if (size > 0) {
|
|
|
- WR64_sleep (0x50, bus_addr);
|
|
|
- WR32_sleep (0x04, 1);
|
|
|
+ WR64_sleep (HF_REG_DESCRIPTOR_ADDRESS, bus_addr);
|
|
|
+ WR32_sleep (HF_REG_DMA, HF_DMA_START);
|
|
|
|
|
|
usleep (100);
|
|
|
fwrite (mem, 1, size, fp);
|
|
|
}
|
|
|
|
|
|
- WR32_sleep (0x04, 0);
|
|
|
+ WR32_sleep (HF_REG_DMA, HF_DMA_STOP);
|
|
|
fclose (fp);
|
|
|
|
|
|
pcilib_free_kernel_memory (pci, kmem, KMEM_DEFAULT_FLAGS);
|
|
|
}
|
|
|
|
|
|
-int
|
|
|
+int
|
|
|
main (int argc, char const* argv[])
|
|
|
{
|
|
|
static const char *DEVICE = "/dev/fpga0";
|
|
@@ -257,10 +266,10 @@ main (int argc, char const* argv[])
|
|
|
bar = pcilib_resolve_bar_address (pci, PCILIB_BAR0, 0);
|
|
|
|
|
|
/* reset dbg tx */
|
|
|
- WR32_sleep (0x9344, 1);
|
|
|
- WR32_sleep (0x9344, 0);
|
|
|
- WR32_sleep (0x93A4, 1);
|
|
|
- WR32_sleep (0x93A4, 0);
|
|
|
+ WR32_sleep (HF_REG_DEBUG_REQUESTER_RESET, 1);
|
|
|
+ WR32_sleep (HF_REG_DEBUG_REQUESTER_RESET, 0);
|
|
|
+ WR32_sleep (HF_REG_DEBUG_COMPLETER_RESET, 1);
|
|
|
+ WR32_sleep (HF_REG_DEBUG_COMPLETER_RESET, 0);
|
|
|
|
|
|
if (opts.input != NULL)
|
|
|
write_to_ddr (pci, bar, &opts);
|