Commit 18a4c404 authored by Ahung Cheng's avatar Ahung Cheng Committed by Greg Kroah-Hartman

serial: tegra: protect IER against LCR.DLAB

The IER and DLH registers occupy the same address space, selected by
the LCR.DLAB bit. Hence, add port lock to protect IER when LCR.DLAB bit
is set.
Signed-off-by: default avatarAhung Cheng <ahcheng@nvidia.com>
Signed-off-by: default avatarKrishna Yarlagadda <kyarlagadda@nvidia.com>
Acked-by: default avatarThierry Reding <treding@nvidia.com>
Link: https://lore.kernel.org/r/1565609303-27000-5-git-send-email-kyarlagadda@nvidia.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 6300b140
...@@ -294,6 +294,7 @@ static int tegra_set_baudrate(struct tegra_uart_port *tup, unsigned int baud) ...@@ -294,6 +294,7 @@ static int tegra_set_baudrate(struct tegra_uart_port *tup, unsigned int baud)
unsigned long rate; unsigned long rate;
unsigned int divisor; unsigned int divisor;
unsigned long lcr; unsigned long lcr;
unsigned long flags;
int ret; int ret;
if (tup->current_baud == baud) if (tup->current_baud == baud)
...@@ -313,6 +314,7 @@ static int tegra_set_baudrate(struct tegra_uart_port *tup, unsigned int baud) ...@@ -313,6 +314,7 @@ static int tegra_set_baudrate(struct tegra_uart_port *tup, unsigned int baud)
divisor = DIV_ROUND_CLOSEST(rate, baud * 16); divisor = DIV_ROUND_CLOSEST(rate, baud * 16);
} }
spin_lock_irqsave(&tup->uport.lock, flags);
lcr = tup->lcr_shadow; lcr = tup->lcr_shadow;
lcr |= UART_LCR_DLAB; lcr |= UART_LCR_DLAB;
tegra_uart_write(tup, lcr, UART_LCR); tegra_uart_write(tup, lcr, UART_LCR);
...@@ -325,6 +327,7 @@ static int tegra_set_baudrate(struct tegra_uart_port *tup, unsigned int baud) ...@@ -325,6 +327,7 @@ static int tegra_set_baudrate(struct tegra_uart_port *tup, unsigned int baud)
/* Dummy read to ensure the write is posted */ /* Dummy read to ensure the write is posted */
tegra_uart_read(tup, UART_SCR); tegra_uart_read(tup, UART_SCR);
spin_unlock_irqrestore(&tup->uport.lock, flags);
tup->current_baud = baud; tup->current_baud = baud;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment