diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 9655f1f1ae85643481dcc782544859c7a58aa386..9aa90abab4ba69f6cd4b0a2e9c56cd9cdfbb39b8 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -12278,10 +12278,8 @@ static int __intel_set_mode(struct drm_crtc *modeset_crtc,
 		return ret;
 
 	crtc_state_copy = kmalloc(sizeof(*crtc_state_copy), GFP_KERNEL);
-	if (!crtc_state_copy) {
-		ret = -ENOMEM;
-		goto done;
-	}
+	if (!crtc_state_copy)
+		return -ENOMEM;
 
 	for_each_crtc_in_state(state, crtc, crtc_state, i) {
 		if (!needs_modeset(crtc_state))
@@ -12337,6 +12335,7 @@ static int __intel_set_mode(struct drm_crtc *modeset_crtc,
 					      hdisplay, vdisplay,
 					      x << 16, y << 16,
 					      hdisplay << 16, vdisplay << 16);
+		WARN_ON(ret != 0);
 	}
 
 	/* Now enable the clocks, plane, pipe, and connectors that we set up. */
@@ -12351,21 +12350,16 @@ static int __intel_set_mode(struct drm_crtc *modeset_crtc,
 	}
 
 	/* FIXME: add subpixel order */
-done:
-	if (ret == 0 && pipe_config) {
-		struct intel_crtc *intel_crtc = to_intel_crtc(modeset_crtc);
-
-		/* The pipe_config will be freed with the atomic state, so
-		 * make a copy. */
-		memcpy(crtc_state_copy, intel_crtc->config,
-		       sizeof *crtc_state_copy);
-		intel_crtc->config = crtc_state_copy;
-		intel_crtc->base.state = &crtc_state_copy->base;
-	} else {
-		kfree(crtc_state_copy);
-	}
 
-	return ret;
+	intel_crtc = to_intel_crtc(modeset_crtc);
+
+	/* The pipe_config will be freed with the atomic state, so
+	 * make a copy. */
+	memcpy(crtc_state_copy, intel_crtc->config, sizeof *crtc_state_copy);
+	intel_crtc->config = crtc_state_copy;
+	intel_crtc->base.state = &crtc_state_copy->base;
+
+	return 0;
 }
 
 static int intel_set_mode_with_config(struct drm_crtc *crtc,