mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-27 19:29:37 +00:00
serial: stm32: move tx dma terminate DMA to shutdown
Terminate DMA transaction and clear CR3_DMAT when shutdown is requested,
instead of when remove is requested. If DMA transfer is not stopped in
shutdown ops, driver will fail to start a new DMA transfer after next
startup ops.
Fixes: 3489187204
("serial: stm32: adding dma support")
Signed-off-by: Erwan Le Ray <erwan.leray@foss.st.com>
Signed-off-by: Valentin Caron <valentin.caron@foss.st.com>
Link: https://lore.kernel.org/r/20220104182445.4195-2-valentin.caron@foss.st.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
49a80424e3
commit
56a23f9319
1 changed files with 5 additions and 1 deletions
|
@ -883,6 +883,11 @@ static void stm32_usart_shutdown(struct uart_port *port)
|
|||
u32 val, isr;
|
||||
int ret;
|
||||
|
||||
if (stm32_port->tx_dma_busy) {
|
||||
dmaengine_terminate_async(stm32_port->tx_ch);
|
||||
stm32_usart_clr_bits(port, ofs->cr3, USART_CR3_DMAT);
|
||||
}
|
||||
|
||||
/* Disable modem control interrupts */
|
||||
stm32_usart_disable_ms(port);
|
||||
|
||||
|
@ -1570,7 +1575,6 @@ static int stm32_usart_serial_remove(struct platform_device *pdev)
|
|||
writel_relaxed(cr3, port->membase + ofs->cr3);
|
||||
|
||||
if (stm32_port->tx_ch) {
|
||||
dmaengine_terminate_async(stm32_port->tx_ch);
|
||||
stm32_usart_of_dma_tx_remove(stm32_port, pdev);
|
||||
dma_release_channel(stm32_port->tx_ch);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue