diff --git a/drivers/dma/dma_stm32.c b/drivers/dma/dma_stm32.c index 1509d536d47d6..4876c6a6b44b6 100644 --- a/drivers/dma/dma_stm32.c +++ b/drivers/dma/dma_stm32.c @@ -129,14 +129,22 @@ static void dma_stm32_irq_handler(const struct device *dev, uint32_t id) } stream->dma_callback(dev, stream->user_data, callback_arg, DMA_STATUS_COMPLETE); } else if (stm32_dma_is_unexpected_irq_happened(dma, id)) { - LOG_ERR("Unexpected irq happened."); + /* Let HAL DMA handle flags on its own */ + if (!stream->hal_override) { + LOG_ERR("Unexpected irq happened."); + stm32_dma_dump_stream_irq(dma, id); + stm32_dma_clear_stream_irq(dma, id); + } stream->dma_callback(dev, stream->user_data, callback_arg, -EIO); } else { - LOG_ERR("Transfer Error."); - stream->busy = false; - dma_stm32_dump_stream_irq(dev, id); - dma_stm32_clear_stream_irq(dev, id); + /* Let HAL DMA handle flags on its own */ + if (!stream->hal_override) { + LOG_ERR("Transfer Error."); + stream->busy = false; + dma_stm32_dump_stream_irq(dev, id); + dma_stm32_clear_stream_irq(dev, id); + } stream->dma_callback(dev, stream->user_data, callback_arg, -EIO); } diff --git a/drivers/dma/dma_stm32_v1.c b/drivers/dma/dma_stm32_v1.c index 58bd15494d621..b02c8978deea1 100644 --- a/drivers/dma/dma_stm32_v1.c +++ b/drivers/dma/dma_stm32_v1.c @@ -306,9 +306,6 @@ bool stm32_dma_is_unexpected_irq_happened(DMA_TypeDef *dma, uint32_t id) if (LL_DMA_IsEnabledIT_FE(dma, dma_stm32_id_to_stream(id)) && dma_stm32_is_fe_active(dma, id)) { LOG_ERR("FiFo error."); - stm32_dma_dump_stream_irq(dma, id); - stm32_dma_clear_stream_irq(dma, id); - return true; }