diff --git a/drivers/gpu/drm/xe/display/ext/intel_device_info.c b/drivers/gpu/drm/xe/display/ext/intel_device_info.c
index a4c844aa8be6aed0a80af3036ae667006a32f1d1..9a54611037b50aa6303953e1b9e961dce7b09aa3 100644
--- a/drivers/gpu/drm/xe/display/ext/intel_device_info.c
+++ b/drivers/gpu/drm/xe/display/ext/intel_device_info.c
@@ -109,12 +109,6 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv)
 			runtime->has_dsc = 0;
 	}
 
-	if (!HAS_DISPLAY(dev_priv)) {
-		dev_priv->drm.driver_features &= ~(DRIVER_MODESET |
-						   DRIVER_ATOMIC);
-		memset(runtime, 0, sizeof(*runtime));
-	}
-
 	runtime->rawclk_freq = intel_read_rawclk(dev_priv);
 	drm_dbg(&dev_priv->drm, "rawclk rate: %d kHz\n", runtime->rawclk_freq);
 }
diff --git a/drivers/gpu/drm/xe/xe_display.c b/drivers/gpu/drm/xe/xe_display.c
index c1987cea359af83b3db34d694406960bceaaa124..7b513da803152652267b64ad8dd03ed33560f23c 100644
--- a/drivers/gpu/drm/xe/xe_display.c
+++ b/drivers/gpu/drm/xe/xe_display.c
@@ -63,6 +63,11 @@ int xe_display_set_driver_hooks(struct pci_dev *pdev, struct drm_driver *driver)
 	return 0;
 }
 
+static void unset_driver_hooks(struct xe_device *xe)
+{
+	xe->drm.driver_features &= ~(DRIVER_MODESET | DRIVER_ATOMIC);
+}
+
 static void display_destroy(struct drm_device *dev, void *dummy)
 {
 	struct xe_device *xe = to_xe_device(dev);
@@ -85,7 +90,6 @@ int xe_display_create(struct xe_device *xe)
 {
 	int err;
 
-	/* Initialize display parts here.. */
 	spin_lock_init(&xe->display.fb_tracking.lock);
 
 	xe->display.hotplug.dp_wq = alloc_ordered_workqueue("xe-dp", 0);
@@ -525,11 +529,10 @@ void xe_display_info_init(struct xe_device *xe)
 		xe->info.display = (struct xe_device_display_info) { XE_LPDP };
 		break;
 	default:
-		/*
-		 * If platform doesn't have display, enable_display should
-		 * had been forced to false already at this point
-		 */
-		drm_WARN_ON(&xe->drm, 1);
+		drm_dbg(&xe->drm, "No display IP, skipping\n");
+		xe->info.enable_display = false;
+		unset_driver_hooks(xe);
+		return;
 	}
 }