From 9d4cd5384dc7d9e245df62241268b739fa4e2236 Mon Sep 17 00:00:00 2001 From: Niklas Eiling Date: Tue, 21 Mar 2023 11:51:17 +0100 Subject: [PATCH] clean up debuggin output and fix scanf usage in villasfpga_dma.c Signed-off-by: Niklas Eiling --- fpga/.vscode/launch.json | 2 +- fpga/include/villas/fpga/villasfpga_dma.h | 1 + fpga/lib/villasfpga_dma.cpp | 8 +++++++- fpga/tests/unit/villasfpga_dma.c | 25 ++++++++++++++++------- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/fpga/.vscode/launch.json b/fpga/.vscode/launch.json index 2e3dcbd26..1bce5a80d 100644 --- a/fpga/.vscode/launch.json +++ b/fpga/.vscode/launch.json @@ -10,7 +10,7 @@ "request": "launch", "program": "${workspaceFolder}/build/src/villas-fpga-ctrl", "args": [ - "-c", "${workspaceFolder}/etc/fpgas.json", "--connect", "\"4<->stdout\"" + "-c", "${workspaceFolder}/etc/fpgas.json", "--connect", "\"2<->stdout\"" ], "stopAtEntry": false, "cwd": "${workspaceFolder}", diff --git a/fpga/include/villas/fpga/villasfpga_dma.h b/fpga/include/villas/fpga/villasfpga_dma.h index f6491ddd8..dec2f5992 100644 --- a/fpga/include/villas/fpga/villasfpga_dma.h +++ b/fpga/include/villas/fpga/villasfpga_dma.h @@ -24,6 +24,7 @@ void villasfpga_destroy(villasfpga_handle handle); int villasfpga_alloc(villasfpga_handle handle, villasfpga_memory *mem, size_t size); int villasfpga_register(villasfpga_handle handle, villasfpga_memory *mem); int villasfpga_free(villasfpga_memory mem); +void* villasfpga_get_ptr(villasfpga_memory mem); int villasfpga_read(villasfpga_handle handle, villasfpga_memory mem, size_t size); int villasfpga_read_complete(villasfpga_handle handle, size_t *size); diff --git a/fpga/lib/villasfpga_dma.cpp b/fpga/lib/villasfpga_dma.cpp index 872813c59..a1e6324b6 100644 --- a/fpga/lib/villasfpga_dma.cpp +++ b/fpga/lib/villasfpga_dma.cpp @@ -158,7 +158,7 @@ int villasfpga_read_complete(villasfpga_handle handle, size_t *size) { try { auto readComp = handle->dma->readComplete(); - logger->debug("Wrote {} bytes", readComp.bytes); + logger->debug("Read {} bytes", readComp.bytes); *size = readComp.bytes; return 0; } catch (const RuntimeError &e) { @@ -193,3 +193,9 @@ int villasfpga_write_complete(villasfpga_handle handle, size_t *size) return -1; } } + +void* villasfpga_get_ptr(villasfpga_memory mem) +{ + return (void*)MemoryManager::get().getTranslationFromProcess(mem->block->getAddrSpaceId()).getLocalAddr(0); +} + diff --git a/fpga/tests/unit/villasfpga_dma.c b/fpga/tests/unit/villasfpga_dma.c index cfb70e3e7..427f1f0a6 100644 --- a/fpga/tests/unit/villasfpga_dma.c +++ b/fpga/tests/unit/villasfpga_dma.c @@ -9,6 +9,7 @@ int main(int argc, char *argv[]) int ret; villasfpga_handle vh; villasfpga_memory mem1, mem2; + void *mem1ptr, *mem2ptr; char line[1024]; float f; size_t size; @@ -35,6 +36,20 @@ int main(int argc, char *argv[]) goto out; } + if ((mem1ptr = villasfpga_get_ptr(mem1)) == NULL) { + fprintf(stderr, "Failed to get pointer to DMA memory 1\n"); + ret = 1; + goto out; + } + + if ((mem2ptr = villasfpga_get_ptr(mem2)) == NULL) { + fprintf(stderr, "Failed to get pointer to DMA memory 2\n"); + ret = 1; + goto out; + } + + printf("DMA memory 1: %p, DMA memory 2: %p\n", mem1ptr, mem2ptr); + while (1) { // Setup read transfer if ((ret = villasfpga_read(vh, mem1, 0x200 * sizeof(uint32_t))) != 0) { @@ -44,14 +59,12 @@ int main(int argc, char *argv[]) } printf("Enter a float:\n"); - if ((ret = sscanf(line, "%f")) != 1) { + if ((ret = scanf("%f", mem2ptr)) != 1) { fprintf(stderr, "Failed to parse input: sscanf returned %d\n", ret); ret = 1; goto out; } - - ((float*)mem2)[0] = atof(line); - printf("Read %f\n", ((float*)mem2)[0]); + printf("sending %f (%zu bytes)\n", ((float*)mem2ptr)[0], sizeof(float)); // Initiate write transfer if ((ret = villasfpga_write(vh, mem2, sizeof(float))) != 0) { fprintf(stderr, "Failed to initiate write transfer\n"); @@ -64,16 +77,14 @@ int main(int argc, char *argv[]) ret = 1; goto out; } - printf("Wrote %zu bytes", size); if ((ret = villasfpga_read_complete(vh, &size)) != 0) { fprintf(stderr, "Failed to write complete\n"); ret = 1; goto out; } - printf("Read %zu bytes", size); - printf("Read %f\n", ((float*)mem1)[0]); + printf("Read %f (%zu bytes)\n", ((float*)mem1ptr)[0], size); } ret = 0;