struct drm_connector *connector;
        unsigned long tx_byte_period;
        struct cdns_dsi_cfg dsi_cfg;
-       u32 tmp, reg_wakeup, div;
+       u32 tmp, reg_wakeup, div, status;
        int nlanes;
 
        if (WARN_ON(pm_runtime_get_sync(dsi->base.dev) < 0))
        cdns_dsi_hs_init(dsi);
        cdns_dsi_init_link(dsi);
 
+       /*
+        * Now that the DSI Link and DSI Phy are initialized,
+        * wait for the CLK and Data Lanes to be ready.
+        */
+       tmp = CLK_LANE_RDY;
+       for (int i = 0; i < nlanes; i++)
+               tmp |= DATA_LANE_RDY(i);
+
+       if (readl_poll_timeout(dsi->regs + MCTL_MAIN_STS, status,
+                              (tmp == (status & tmp)), 100, 500000))
+               dev_err(dsi->base.dev,
+                       "Timed Out: DSI-DPhy Clock and Data Lanes not ready.\n");
+
        writel(HBP_LEN(dsi_cfg.hbp) | HSA_LEN(dsi_cfg.hsa),
               dsi->regs + VID_HSIZE1);
        writel(HFP_LEN(dsi_cfg.hfp) | HACT_LEN(dsi_cfg.hact),