drm/i915: Reduce INTEL_DISPLAY_ENABLED to just removing the outputs
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 9 Sep 2020 21:38:23 +0000 (00:38 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Tue, 15 Sep 2020 11:57:13 +0000 (14:57 +0300)
Having a mode where the display hardware is present but we try
to pretend it isn't just leads to massive headaches when trying
to reason what the fallout might be from skipping some random
bits of programming.

Let's just neuter INTEL_DISPLAY_ENABLED so that we treat the
hardware as fully present, except we just don't register any
outputs. That's still rather sketchy if the outputs are already
enabled when the driver is loaded. I think the simplest solution
would be to probe everything as normal and just return
disconnected" from all .detect() hooks. That would avoid anything
automagically enabling those outputs, but the driver could then
shut things down using the normal codepaths.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200909213824.12390-1-ville.syrjala@linux.intel.com
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/display/intel_bios.c
drivers/gpu/drm/i915/display/intel_display.c
drivers/gpu/drm/i915/display/intel_fbdev.c
drivers/gpu/drm/i915/display/intel_gmbus.c
drivers/gpu/drm/i915/i915_drv.c

index a0a41ec5c341908a9c53bb260c1c6cfba127cc4e..c110cd9e8a73c09043d5848fa414a51596552497 100644 (file)
@@ -2133,7 +2133,7 @@ void intel_bios_init(struct drm_i915_private *dev_priv)
 
        INIT_LIST_HEAD(&dev_priv->vbt.display_devices);
 
-       if (!HAS_DISPLAY(dev_priv) || !INTEL_DISPLAY_ENABLED(dev_priv)) {
+       if (!HAS_DISPLAY(dev_priv)) {
                drm_dbg_kms(&dev_priv->drm,
                            "Skipping VBT init due to disabled display.\n");
                return;
index ec148a8da2c297a78d9e99ae20228eb22a1011c2..bacaf713eed4a2e6b0335543d0669247f5a3e306 100644 (file)
@@ -17882,7 +17882,7 @@ int intel_modeset_init_noirq(struct drm_i915_private *i915)
        if (i915_inject_probe_failure(i915))
                return -ENODEV;
 
-       if (HAS_DISPLAY(i915) && INTEL_DISPLAY_ENABLED(i915)) {
+       if (HAS_DISPLAY(i915)) {
                ret = drm_vblank_init(&i915->drm,
                                      INTEL_NUM_PIPES(i915));
                if (ret)
@@ -17956,7 +17956,7 @@ int intel_modeset_init_nogem(struct drm_i915_private *i915)
                    INTEL_NUM_PIPES(i915),
                    INTEL_NUM_PIPES(i915) > 1 ? "s" : "");
 
-       if (HAS_DISPLAY(i915) && INTEL_DISPLAY_ENABLED(i915)) {
+       if (HAS_DISPLAY(i915)) {
                for_each_pipe(i915, pipe) {
                        ret = intel_crtc_init(i915, pipe);
                        if (ret) {
@@ -18045,7 +18045,7 @@ int intel_modeset_init(struct drm_i915_private *i915)
 
        intel_overlay_setup(i915);
 
-       if (!HAS_DISPLAY(i915) || !INTEL_DISPLAY_ENABLED(i915))
+       if (!HAS_DISPLAY(i915))
                return 0;
 
        ret = intel_fbdev_init(&i915->drm);
@@ -19018,7 +19018,7 @@ intel_display_capture_error_state(struct drm_i915_private *dev_priv)
 
        BUILD_BUG_ON(ARRAY_SIZE(transcoders) != ARRAY_SIZE(error->transcoder));
 
-       if (!HAS_DISPLAY(dev_priv) || !INTEL_DISPLAY_ENABLED(dev_priv))
+       if (!HAS_DISPLAY(dev_priv))
                return NULL;
 
        error = kzalloc(sizeof(*error), GFP_ATOMIC);
index bd39eb6a21b8bd6bd515da15b14b92abaabb76a7..842c04e6321472490a0e5b7f9a6af500764b039b 100644 (file)
@@ -451,8 +451,7 @@ int intel_fbdev_init(struct drm_device *dev)
        struct intel_fbdev *ifbdev;
        int ret;
 
-       if (drm_WARN_ON(dev, !HAS_DISPLAY(dev_priv) ||
-                       !INTEL_DISPLAY_ENABLED(dev_priv)))
+       if (drm_WARN_ON(dev, !HAS_DISPLAY(dev_priv)))
                return -ENODEV;
 
        ifbdev = kzalloc(sizeof(struct intel_fbdev), GFP_KERNEL);
index a8d119b6b45c8eab2862c569dbbe57df5c638f1f..e6b8d6dfb598efd578a34493f9eec559775aa860 100644 (file)
@@ -834,7 +834,7 @@ int intel_gmbus_setup(struct drm_i915_private *dev_priv)
        unsigned int pin;
        int ret;
 
-       if (!HAS_DISPLAY(dev_priv) || !INTEL_DISPLAY_ENABLED(dev_priv))
+       if (!HAS_DISPLAY(dev_priv))
                return 0;
 
        if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
index 94e00e4506834de210d0dfa2d824df940259b960..acc32066cec3572481c11732f291b92df5068a82 100644 (file)
@@ -677,7 +677,7 @@ static void i915_driver_register(struct drm_i915_private *dev_priv)
                drm_err(&dev_priv->drm,
                        "Failed to register driver for userspace access!\n");
 
-       if (HAS_DISPLAY(dev_priv) && INTEL_DISPLAY_ENABLED(dev_priv)) {
+       if (HAS_DISPLAY(dev_priv)) {
                /* Must be done after probing outputs */
                intel_opregion_register(dev_priv);
                acpi_video_register();
@@ -700,7 +700,7 @@ static void i915_driver_register(struct drm_i915_private *dev_priv)
         * We need to coordinate the hotplugs with the asynchronous fbdev
         * configuration, for which we use the fbdev->async_cookie.
         */
-       if (HAS_DISPLAY(dev_priv) && INTEL_DISPLAY_ENABLED(dev_priv))
+       if (HAS_DISPLAY(dev_priv))
                drm_kms_helper_poll_init(dev);
 
        intel_power_domains_enable(dev_priv);