| From 6570405ccfccefd09db6c64c8a5eb0b203ece516 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 4 Mar 2021 17:23:05 +0100 |
| Subject: serial: stm32: fix FIFO flush in startup and set_termios |
| |
| From: Erwan Le Ray <erwan.leray@foss.st.com> |
| |
| [ Upstream commit 315e2d8a125ad77a1bc28f621162713f3e7aef48 ] |
| |
| Fifo flush set USART_RQR register by calling stm32_usart_set_bits |
| routine (Read/Modify/Write). USART_RQR register is a write only |
| register. So, read before write isn't correct / relevant to flush |
| the FIFOs. |
| Replace stm32_usart_set_bits call by writel_relaxed. |
| |
| Fixes: 84872dc448fe ("serial: stm32: add RX and TX FIFO flush") |
| Signed-off-by: Erwan Le Ray <erwan.leray@foss.st.com> |
| Link: https://lore.kernel.org/r/20210304162308.8984-11-erwan.leray@foss.st.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/tty/serial/stm32-usart.c | 6 +++--- |
| 1 file changed, 3 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/tty/serial/stm32-usart.c b/drivers/tty/serial/stm32-usart.c |
| index a6295897c537..6788fb3af6cb 100644 |
| --- a/drivers/tty/serial/stm32-usart.c |
| +++ b/drivers/tty/serial/stm32-usart.c |
| @@ -656,7 +656,7 @@ static int stm32_usart_startup(struct uart_port *port) |
| |
| /* RX FIFO Flush */ |
| if (ofs->rqr != UNDEF_REG) |
| - stm32_usart_set_bits(port, ofs->rqr, USART_RQR_RXFRQ); |
| + writel_relaxed(USART_RQR_RXFRQ, port->membase + ofs->rqr); |
| |
| /* RX enabling */ |
| val = stm32_port->cr1_irq | USART_CR1_RE | BIT(cfg->uart_enable_bit); |
| @@ -760,8 +760,8 @@ static void stm32_usart_set_termios(struct uart_port *port, |
| |
| /* flush RX & TX FIFO */ |
| if (ofs->rqr != UNDEF_REG) |
| - stm32_usart_set_bits(port, ofs->rqr, |
| - USART_RQR_TXFRQ | USART_RQR_RXFRQ); |
| + writel_relaxed(USART_RQR_TXFRQ | USART_RQR_RXFRQ, |
| + port->membase + ofs->rqr); |
| |
| cr1 = USART_CR1_TE | USART_CR1_RE; |
| if (stm32_port->fifoen) |
| -- |
| 2.30.2 |
| |