From: Phil Edworthy <phil.edworthy@xxxxxxxxxxx> This UART controller can be synthesized without the CPR register. In that case, let's use the platform information to provide a CPR value. Signed-off-by: Phil Edworthy <phil.edworthy@xxxxxxxxxxx> Signed-off-by: Miquel Raynal <miquel.raynal@xxxxxxxxxxx> --- drivers/tty/serial/8250/8250_dwlib.c | 10 ++++++++-- drivers/tty/serial/8250/8250_dwlib.h | 4 ++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/tty/serial/8250/8250_dwlib.c b/drivers/tty/serial/8250/8250_dwlib.c index 622d3b0d89e7..5cf298c5a0f9 100644 --- a/drivers/tty/serial/8250/8250_dwlib.c +++ b/drivers/tty/serial/8250/8250_dwlib.c @@ -3,6 +3,7 @@ #include <linux/bitops.h> #include <linux/device.h> +#include <linux/of_device.h> #include <linux/io.h> #include <linux/kernel.h> #include <linux/serial_8250.h> @@ -90,6 +91,7 @@ EXPORT_SYMBOL_GPL(dw8250_do_set_termios); void dw8250_setup_port(struct uart_port *p) { struct uart_8250_port *up = up_to_u8250p(p); + const struct dw8250_platform_data *plat = of_device_get_match_data(up->port.dev); u32 reg; /* @@ -116,8 +118,12 @@ void dw8250_setup_port(struct uart_port *p) } reg = dw8250_readl_ext(p, DW_UART_CPR); - if (!reg) - return; + if (!reg) { + if (!plat) + return; + + reg = plat->cpr; + } /* Select the type based on FIFO */ if (reg & DW_UART_CPR_FIFO_MODE) { diff --git a/drivers/tty/serial/8250/8250_dwlib.h b/drivers/tty/serial/8250/8250_dwlib.h index ef63eaf7e598..ffce2744a28e 100644 --- a/drivers/tty/serial/8250/8250_dwlib.h +++ b/drivers/tty/serial/8250/8250_dwlib.h @@ -16,6 +16,10 @@ struct dw8250_port_data { u8 dlf_size; }; +struct dw8250_platform_data { + u32 cpr; +}; + struct dw8250_data { struct dw8250_port_data data; -- 2.27.0