]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
serial: pl010: Drop CR register reset on set_termios
authorLukas Wunner <lukas@wunner.de>
Sun, 2 Jan 2022 17:42:44 +0000 (18:42 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 27 Jan 2022 08:04:28 +0000 (09:04 +0100)
[ Upstream commit 08a0c6dff91c965e39905cf200d22db989203ccb ]

pl010_set_termios() briefly resets the CR register to zero.

Where does this register write come from?

The PL010 driver's IRQ handler ambauart_int() originally modified the CR
register without holding the port spinlock.  ambauart_set_termios() also
modified that register.  To prevent concurrent read-modify-writes by the
IRQ handler and to prevent transmission while changing baudrate,
ambauart_set_termios() had to disable interrupts.  That is achieved by
writing zero to the CR register.

However in 2004 the PL010 driver was amended to acquire the port
spinlock in the IRQ handler, obviating the need to disable interrupts in
->set_termios():
https://git.kernel.org/history/history/c/157c0342e591

That rendered the CR register write obsolete.  Drop it.

Cc: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Link: https://lore.kernel.org/r/fcaff16e5b1abb4cc3da5a2879ac13f278b99ed0.1641128728.git.lukas@wunner.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/tty/serial/amba-pl010.c

index 2c37d11726aba666d88933a7cf9e0a534d6c8f49..13f882e5e7b76ba318a4149721889b26a006718b 100644 (file)
@@ -452,14 +452,11 @@ pl010_set_termios(struct uart_port *port, struct ktermios *termios,
        if ((termios->c_cflag & CREAD) == 0)
                uap->port.ignore_status_mask |= UART_DUMMY_RSR_RX;
 
-       /* first, disable everything */
        old_cr = readb(uap->port.membase + UART010_CR) & ~UART010_CR_MSIE;
 
        if (UART_ENABLE_MS(port, termios->c_cflag))
                old_cr |= UART010_CR_MSIE;
 
-       writel(0, uap->port.membase + UART010_CR);
-
        /* Set baud rate */
        quot -= 1;
        writel((quot & 0xf00) >> 8, uap->port.membase + UART010_LCRM);