#define DEV_NAME       "ttyLP"
 #define UART_NR                6
 
+/* IMX lpuart has four extra unused regs located at the beginning */
+#define IMX_REG_OFF    0x10
+
 struct lpuart_port {
        struct uart_port        port;
        struct clk              *clk;
 
 struct lpuart_soc_data {
        char    iotype;
+       u8      reg_off;
 };
 
 static const struct lpuart_soc_data vf_data = {
        .iotype = UPIO_MEM32BE,
 };
 
+static struct lpuart_soc_data imx_data = {
+       .iotype = UPIO_MEM32,
+       .reg_off = IMX_REG_OFF,
+};
+
 static const struct of_device_id lpuart_dt_ids[] = {
        { .compatible = "fsl,vf610-lpuart",     .data = &vf_data, },
        { .compatible = "fsl,ls1021a-lpuart",   .data = &ls_data, },
+       { .compatible = "fsl,imx7ulp-lpuart",   .data = &imx_data, },
        { /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, lpuart_dt_ids);
        if (IS_ERR(sport->port.membase))
                return PTR_ERR(sport->port.membase);
 
+       sport->port.membase += sdata->reg_off;
        sport->port.mapbase = res->start;
        sport->port.dev = &pdev->dev;
        sport->port.type = PORT_LPUART;