Skip to content

Commit 748c5ea

Browse files
colorsugregkh
authored andcommitted
serial: 8250_dw: Preserve original value of DLF register
Preserve the original value of the Divisor Latch Fraction (DLF) register. When the DLF register is modified without preservation, it can disrupt the baudrate settings established by firmware or bootloader, leading to data corruption and the generation of unreadable or distorted characters. Fixes: 701c5e7 ("serial: 8250_dw: add fractional divisor support") Cc: stable <[email protected]> Signed-off-by: Ruihong Luo <[email protected]> Link: https://lore.kernel.org/stable/20230713004235.35904-1-colorsu1922%40gmail.com Reviewed-by: Ilpo Järvinen <[email protected]> Reviewed-by: Andy Shevchenko <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 57c984f commit 748c5ea

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

drivers/tty/serial/8250/8250_dwlib.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ void dw8250_setup_port(struct uart_port *p)
244244
struct dw8250_port_data *pd = p->private_data;
245245
struct dw8250_data *data = to_dw8250_data(pd);
246246
struct uart_8250_port *up = up_to_u8250p(p);
247-
u32 reg;
247+
u32 reg, old_dlf;
248248

249249
pd->hw_rs485_support = dw8250_detect_rs485_hw(p);
250250
if (pd->hw_rs485_support) {
@@ -270,9 +270,11 @@ void dw8250_setup_port(struct uart_port *p)
270270
dev_dbg(p->dev, "Designware UART version %c.%c%c\n",
271271
(reg >> 24) & 0xff, (reg >> 16) & 0xff, (reg >> 8) & 0xff);
272272

273+
/* Preserve value written by firmware or bootloader */
274+
old_dlf = dw8250_readl_ext(p, DW_UART_DLF);
273275
dw8250_writel_ext(p, DW_UART_DLF, ~0U);
274276
reg = dw8250_readl_ext(p, DW_UART_DLF);
275-
dw8250_writel_ext(p, DW_UART_DLF, 0);
277+
dw8250_writel_ext(p, DW_UART_DLF, old_dlf);
276278

277279
if (reg) {
278280
pd->dlf_size = fls(reg);

0 commit comments

Comments
 (0)