summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Hellstrom <daniel@gaisler.com>2019-04-05 13:58:50 +0200
committerDaniel Hellstrom <daniel@gaisler.com>2019-04-05 13:58:50 +0200
commit313a7000f1c9eaa5365708948054c1e2ea224296 (patch)
tree2d2601fb16fdd0f5493c207f377cf20b8ecbfa13
parentfa942802719497ad2808a453d6465076ec24f173 (diff)
grspw: fix for SET_PACKET_SIZE
When the DMA table has been allocated dynamically, the IOCTL_SET_PACKETSIZE will trigger an issue where pDev->rx and pDev->tx are not updated with the new DMA tables base address. Instead the old pointers are used. There is no point in reallocting the DMA tables because there is no configuration option to it. Therefore the DMA tables allocation is moved to a separate function never called from SET_PACKETSIZE.
-rw-r--r--c/src/lib/libbsp/sparc/shared/spw/grspw.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/sparc/shared/spw/grspw.c b/c/src/lib/libbsp/sparc/shared/spw/grspw.c
index 254497e345..64d1a64ff3 100644
--- a/c/src/lib/libbsp/sparc/shared/spw/grspw.c
+++ b/c/src/lib/libbsp/sparc/shared/spw/grspw.c
@@ -328,6 +328,7 @@ static void check_rx_errors(GRSPW_DEV *pDev, int ctrl);
static void grspw_rxnext(GRSPW_DEV *pDev);
static void grspw_interrupt(void *arg);
static int grspw_buffer_alloc(GRSPW_DEV *pDev);
+static int grspw_dmatables_alloc(GRSPW_DEV *pDev);
static rtems_device_driver grspw_initialize(
rtems_device_major_number major,
@@ -621,6 +622,8 @@ int grspw_device_init(GRSPW_DEV *pDev)
if (grspw_buffer_alloc(pDev))
return RTEMS_NO_MEMORY;
+ if (grspw_dmatables_alloc(pDev))
+ return RTEMS_NO_MEMORY;
/* Create semaphores */
rtems_semaphore_create(
@@ -743,7 +746,11 @@ static int grspw_buffer_alloc(GRSPW_DEV *pDev)
(void **)&pDev->ptr_txhbuf0_remote,
pDev->txhbufsize * pDev->txbufcnt);
}
+ return 0;
+}
+static int grspw_dmatables_alloc(GRSPW_DEV *pDev)
+{
/* DMA DESCRIPTOR TABLES */
if (pDev->bd_dma_area & 1) {
/* Address given in remote address */