diff --git a/drivers/gpu/drm/imx/dcnano/dcnano-crtc.c b/drivers/gpu/drm/imx/dcnano/dcnano-crtc.c
index 7524c3f78dbc4d693f3e7f90b05a704e83b62e18..7de24e5aa5fd344452ae49d989f87b79900b7cdf 100644
--- a/drivers/gpu/drm/imx/dcnano/dcnano-crtc.c
+++ b/drivers/gpu/drm/imx/dcnano/dcnano-crtc.c
@@ -202,6 +202,9 @@ static void dcnano_crtc_mode_set_nofb(struct drm_crtc *crtc)
 	struct dcnano_dev *dcnano = crtc_to_dcnano_dev(crtc);
 	struct drm_display_mode *adj = &crtc->state->adjusted_mode;
 
+	if (dcnano->modeset_done)
+		return;
+
 	dcnano_crtc_dbg(crtc, "mode " DRM_MODE_FMT "\n", DRM_MODE_ARG(adj));
 
 	dcnano_crtc_set_pixel_clock(crtc);
@@ -211,6 +214,8 @@ static void dcnano_crtc_mode_set_nofb(struct drm_crtc *crtc)
 
 	if (dcnano->port == DCNANO_DPI_PORT)
 		dcnano_crtc_mode_set_nofb_dpi(crtc);
+
+	dcnano->modeset_done = true;
 }
 
 static void dcnano_crtc_queue_state_event(struct drm_crtc *crtc)
@@ -330,6 +335,8 @@ static void dcnano_crtc_atomic_disable(struct drm_crtc *crtc,
 		crtc->state->event = NULL;
 	}
 	spin_unlock_irq(&crtc->dev->event_lock);
+
+	dcnano->modeset_done = false;
 }
 
 static bool
diff --git a/drivers/gpu/drm/imx/dcnano/dcnano-drv.h b/drivers/gpu/drm/imx/dcnano/dcnano-drv.h
index 357a496c5f85206c80ec95a39096ab4d80bf4bd0..bbcdd2f5d2041df90ef348502fab773cc12962e4 100644
--- a/drivers/gpu/drm/imx/dcnano/dcnano-drv.h
+++ b/drivers/gpu/drm/imx/dcnano/dcnano-drv.h
@@ -42,6 +42,8 @@ struct dcnano_dev {
 	struct drm_pending_vblank_event *event;
 
 	enum dcnano_port port;
+
+	bool modeset_done;
 };
 
 static inline struct dcnano_dev *to_dcnano_dev(struct drm_device *drm)