]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe/display: Add macro with display driver ops
authorMichal Wajdeczko <michal.wajdeczko@intel.com>
Tue, 12 May 2026 18:33:39 +0000 (20:33 +0200)
committerMichal Wajdeczko <michal.wajdeczko@intel.com>
Thu, 14 May 2026 18:44:11 +0000 (20:44 +0200)
Instead of updating the drm_driver.fbdev_probe field in the runtime,
we can use macro which value depends on the actual Kconfig setup.

The .fbdev_probe hook will not be used by the drm core unless we
also enable a DRIVER_MODESET driver feature flag, and this flag
still depends on the xe_modparam.probe_display parameter.

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patch.msgid.link/20260512183342.3374-5-michal.wajdeczko@intel.com
drivers/gpu/drm/xe/display/xe_display.c
drivers/gpu/drm/xe/display/xe_display.h
drivers/gpu/drm/xe/xe_device.c

index 263e92203c9db1d42ccc6fea591b9fadc27b2e03..7e7d476da8ce59e4d64ff176fee63f0dc35e1487 100644 (file)
@@ -85,10 +85,6 @@ void xe_display_driver_set_hooks(struct drm_driver *driver)
        if (!xe_modparam.probe_display)
                return;
 
-#ifdef CONFIG_DRM_FBDEV_EMULATION
-       driver->fbdev_probe = intel_fbdev_driver_fbdev_probe;
-#endif
-
        driver->driver_features |= DRIVER_MODESET | DRIVER_ATOMIC;
 }
 
@@ -603,3 +599,11 @@ no_display:
        unset_display_features(xe);
        return 0;
 }
+
+#ifdef CONFIG_DRM_FBDEV_EMULATION
+int xe_display_driver_fbdev_probe(struct drm_fb_helper *fbh,
+                                 struct drm_fb_helper_surface_size *sizes)
+{
+       return intel_fbdev_driver_fbdev_probe(fbh, sizes);
+}
+#endif
index 95acf0fd8e7be0904e6b4d83f222434466215074..deec0232532eb4dd55d606b609feddd8aab3b33e 100644 (file)
@@ -9,6 +9,8 @@
 #include <linux/types.h>
 
 struct drm_driver;
+struct drm_fb_helper;
+struct drm_fb_helper_surface_size;
 struct pci_dev;
 struct xe_device;
 
@@ -16,6 +18,8 @@ struct xe_device;
 
 bool xe_display_driver_probe_defer(struct pci_dev *pdev);
 void xe_display_driver_set_hooks(struct drm_driver *driver);
+int xe_display_driver_fbdev_probe(struct drm_fb_helper *fbh,
+                                 struct drm_fb_helper_surface_size *sizes);
 
 int xe_display_probe(struct xe_device *xe);
 
@@ -40,8 +44,15 @@ void xe_display_pm_runtime_suspend(struct xe_device *xe);
 void xe_display_pm_runtime_suspend_late(struct xe_device *xe);
 void xe_display_pm_runtime_resume(struct xe_device *xe);
 
+#define XE_DISPLAY_DRIVER_OPS                                          \
+       .fbdev_probe = PTR_IF(IS_ENABLED(CONFIG_DRM_FBDEV_EMULATION),   \
+                             xe_display_driver_fbdev_probe)
+
 #else
 
+#define XE_DISPLAY_DRIVER_OPS \
+       .fbdev_probe = NULL
+
 static inline int xe_display_driver_probe_defer(struct pci_dev *pdev) { return 0; }
 static inline void xe_display_driver_set_hooks(struct drm_driver *driver) { }
 
index 6512f1dfe691985df76a218daaa14dd11b838937..3bca4c1d1d5f142a6667b35d411dbe8542c6d22b 100644 (file)
@@ -414,6 +414,7 @@ static struct drm_driver regular_driver = {
        .major = DRIVER_MAJOR,
        .minor = DRIVER_MINOR,
        .patchlevel = DRIVER_PATCHLEVEL,
+       XE_DISPLAY_DRIVER_OPS,
 };
 
 #ifdef CONFIG_PCI_IOV
@@ -435,6 +436,7 @@ static struct drm_driver admin_only_driver = {
        .major = DRIVER_MAJOR,
        .minor = DRIVER_MINOR,
        .patchlevel = DRIVER_PATCHLEVEL,
+       XE_DISPLAY_DRIVER_OPS,
 };
 
 /**