diff --git a/drivers/gpu/drm/bridge/nwl-dsi.c b/drivers/gpu/drm/bridge/nwl-dsi.c
index 4c4415cd8005d300bdc595fa15ffed16d8792000..8d42d567152ca6a9848c060c728a979773490dfc 100644
--- a/drivers/gpu/drm/bridge/nwl-dsi.c
+++ b/drivers/gpu/drm/bridge/nwl-dsi.c
@@ -185,6 +185,7 @@ struct nwl_dsi {
 	struct list_head valid_modes;
 	u32 clk_drop_lvl;
 	bool use_dcss;
+	bool modeset_done;
 };
 
 static const struct regmap_config nwl_dsi_regmap_config = {
@@ -925,6 +926,8 @@ nwl_dsi_bridge_atomic_post_disable(struct drm_bridge *bridge,
 		clk_disable_unprepare(dsi->lcdif_clk);
 
 	pm_runtime_put(dsi->dev);
+
+	dsi->modeset_done = false;
 }
 
 static unsigned long nwl_dsi_get_bit_clock(struct nwl_dsi *dsi,
@@ -1269,6 +1272,9 @@ nwl_dsi_bridge_mode_set(struct drm_bridge *bridge,
 	struct mode_config *config;
 	int ret;
 
+	if (dsi->modeset_done)
+		return;
+
 	DRM_DEV_DEBUG_DRIVER(dsi->dev, "Setting mode:\n");
 	drm_mode_debug_printmodeline(adjusted_mode);
 
@@ -1346,6 +1352,8 @@ nwl_dsi_bridge_mode_set(struct drm_bridge *bridge,
 		DRM_DEV_ERROR(dev, "Failed to deassert DSI: %d\n", ret);
 		return;
 	}
+
+	dsi->modeset_done = true;
 }
 
 static void