The UART IP found on RZ/V2M SoC is Register-compatible with the general-purpose 16750 UART chip. This patch updates RZ/V2M port type from 16550A->16750 and also enables 64-bytes fifo support. Signed-off-by: Biju Das <biju.das.jz@xxxxxxxxxxxxxx> --- v2: * New patch --- drivers/tty/serial/8250/8250_em.c | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/drivers/tty/serial/8250/8250_em.c b/drivers/tty/serial/8250/8250_em.c index b78c74755735..628a6846bfdc 100644 --- a/drivers/tty/serial/8250/8250_em.c +++ b/drivers/tty/serial/8250/8250_em.c @@ -9,6 +9,7 @@ #include <linux/io.h> #include <linux/module.h> #include <linux/mod_devicetable.h> +#include <linux/of_device.h> #include <linux/serial_8250.h> #include <linux/serial_reg.h> #include <linux/platform_device.h> @@ -19,9 +20,15 @@ #define UART_DLL_EM 9 #define UART_DLM_EM 10 +struct serial8250_em_hw_info { + unsigned int type; + upf_t flags; +}; + struct serial8250_em_priv { struct clk *sclk; int line; + const struct serial8250_em_hw_info *info; }; static void serial8250_em_serial_out(struct uart_port *p, int offset, int value) @@ -95,6 +102,7 @@ static int serial8250_em_probe(struct platform_device *pdev) if (!priv) return -ENOMEM; + priv->info = of_device_get_match_data(dev); priv->sclk = devm_clk_get_enabled(dev, "sclk"); if (IS_ERR(priv->sclk)) return dev_err_probe(dev, PTR_ERR(priv->sclk), "unable to get clock\n"); @@ -102,8 +110,8 @@ static int serial8250_em_probe(struct platform_device *pdev) memset(&up, 0, sizeof(up)); up.port.mapbase = regs->start; up.port.irq = irq; - up.port.type = PORT_UNKNOWN; - up.port.flags = UPF_BOOT_AUTOCONF | UPF_FIXED_PORT | UPF_IOREMAP; + up.port.type = priv->info->type; + up.port.flags = priv->info->flags; up.port.dev = dev; up.port.private_data = priv; @@ -133,9 +141,20 @@ static int serial8250_em_remove(struct platform_device *pdev) return 0; } +static const struct serial8250_em_hw_info emma_mobile_uart_hw_info = { + .type = PORT_UNKNOWN, + .flags = UPF_BOOT_AUTOCONF | UPF_FIXED_PORT | UPF_IOREMAP, +}; + +static const struct serial8250_em_hw_info rzv2m_uart_hw_info = { + .type = PORT_16750, + .flags = UPF_BOOT_AUTOCONF | UPF_FIXED_PORT | UPF_IOREMAP | UPF_FIXED_TYPE, +}; + static const struct of_device_id serial8250_em_dt_ids[] = { - { .compatible = "renesas,em-uart", }, - {}, + { .compatible = "renesas,r9a09g011-uart", .data = &rzv2m_uart_hw_info }, + { .compatible = "renesas,em-uart", .data = &emma_mobile_uart_hw_info }, + { /* Sentinel */ } }; MODULE_DEVICE_TABLE(of, serial8250_em_dt_ids); -- 2.25.1