Browse Source

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
release/1.12
Daniel Agar 3 years ago
parent
commit
0a6045367f
No known key found for this signature in database
GPG Key ID: FD3CBA98017A69DE
  1. 2
      platforms/nuttx/src/px4/stm/stm32f7/px4io_serial/px4io_serial.cpp
  2. 2
      platforms/nuttx/src/px4/stm/stm32h7/px4io_serial/px4io_serial.cpp

2
platforms/nuttx/src/px4/stm/stm32f7/px4io_serial/px4io_serial.cpp

@ -328,6 +328,8 @@ ArchPX4IOSerial::_bus_exchange(IOPacket *_packet)
if (ret == OK) { if (ret == OK) {
/* check for DMA errors */ /* check for DMA errors */
if (_rx_dma_status & DMA_STATUS_TEIF) { 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); perf_count(_pc_dmaerrs);
ret = -EIO; ret = -EIO;
break; break;

2
platforms/nuttx/src/px4/stm/stm32h7/px4io_serial/px4io_serial.cpp

@ -373,6 +373,8 @@ ArchPX4IOSerial::_bus_exchange(IOPacket *_packet)
if (ret == OK) { if (ret == OK) {
/* check for DMA errors */ /* check for DMA errors */
if (_rx_dma_status & DMA_STATUS_TEIF) { 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); perf_count(_pc_dmaerrs);
ret = -EIO; ret = -EIO;
break; break;

Loading…
Cancel
Save