mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-17 01:04:19 +08: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
@ -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 New Issue
Block a user