Commit 2490a0ca authored by Amelie Delaunay's avatar Amelie Delaunay Committed by Greg Kroah-Hartman
Browse files

serial: stm32: synchronize RX DMA channel in shutdown



In shutdown, RX DMA channel is terminated. If the DMA RX callback is
scheduled but not yet executed, while a new RX DMA transfer is started, the
callback can be executed, and then disturb the ongoing RX DMA transfer.
To avoid such a case, call dmaengine_synchronize in shutdown, after the
DMA RX channel is terminated.

Signed-off-by: default avatarAmelie Delaunay <amelie.delaunay@foss.st.com>
Signed-off-by: default avatarValentin Caron <valentin.caron@foss.st.com>
Link: https://lore.kernel.org/r/20230808161906.178996-7-valentin.caron@foss.st.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent a01ae50d
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -1123,8 +1123,10 @@ static void stm32_usart_shutdown(struct uart_port *port)
		dev_err(port->dev, "Transmission is not complete\n");

	/* Disable RX DMA. */
	if (stm32_port->rx_ch)
	if (stm32_port->rx_ch) {
		stm32_usart_rx_dma_terminate(stm32_port);
		dmaengine_synchronize(stm32_port->rx_ch);
	}

	/* flush RX & TX FIFO */
	if (ofs->rqr != UNDEF_REG)