From 0a6045367f5368256a9ab77e510fe22bd930b395 Mon Sep 17 00:00:00 2001 From: Daniel Agar Date: Mon, 30 Aug 2021 20:59:49 -0400 Subject: [PATCH] px4io_serial: ensure TX DMA is stopped if exiting early on stream error - otherwise the next retry can happen quickly enough that dma setup hangs waiting for the stream --- .../nuttx/src/px4/stm/stm32f7/px4io_serial/px4io_serial.cpp | 2 ++ .../nuttx/src/px4/stm/stm32h7/px4io_serial/px4io_serial.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/platforms/nuttx/src/px4/stm/stm32f7/px4io_serial/px4io_serial.cpp b/platforms/nuttx/src/px4/stm/stm32f7/px4io_serial/px4io_serial.cpp index e9d230f7e3..20a952f421 100644 --- a/platforms/nuttx/src/px4/stm/stm32f7/px4io_serial/px4io_serial.cpp +++ b/platforms/nuttx/src/px4/stm/stm32f7/px4io_serial/px4io_serial.cpp @@ -328,6 +328,8 @@ ArchPX4IOSerial::_bus_exchange(IOPacket *_packet) if (ret == OK) { /* check for DMA errors */ if (_rx_dma_status & DMA_STATUS_TEIF) { + // stream transfer error, ensure TX DMA is also stopped before exiting early + stm32_dmastop(_tx_dma); perf_count(_pc_dmaerrs); ret = -EIO; break; diff --git a/platforms/nuttx/src/px4/stm/stm32h7/px4io_serial/px4io_serial.cpp b/platforms/nuttx/src/px4/stm/stm32h7/px4io_serial/px4io_serial.cpp index 5743b0a3e9..36ff0b8d22 100644 --- a/platforms/nuttx/src/px4/stm/stm32h7/px4io_serial/px4io_serial.cpp +++ b/platforms/nuttx/src/px4/stm/stm32h7/px4io_serial/px4io_serial.cpp @@ -373,6 +373,8 @@ ArchPX4IOSerial::_bus_exchange(IOPacket *_packet) if (ret == OK) { /* check for DMA errors */ if (_rx_dma_status & DMA_STATUS_TEIF) { + // stream transfer error, ensure TX DMA is also stopped before exiting early + stm32_dmastop(_tx_dma); perf_count(_pc_dmaerrs); ret = -EIO; break;