OSDN Git Service

drm/i915: Move display power initialization during driver probing later
authorImre Deak <imre.deak@intel.com>
Wed, 8 Feb 2023 11:42:58 +0000 (13:42 +0200)
committerImre Deak <imre.deak@intel.com>
Wed, 15 Feb 2023 09:46:57 +0000 (11:46 +0200)
Determining whether the display engine is present on a platform happens
only in intel_device_info_runtime_init(). Initializing the display power
functionality depends on this condition, so move
intel_power_domains_init() later after the runtime init function has
been called.

The next patch fixing platforms without display, depends on this patch.

Acked-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230208114300.3123934-3-imre.deak@intel.com
drivers/gpu/drm/i915/display/intel_display.c
drivers/gpu/drm/i915/i915_driver.c

index 322f3b2..8a17c0e 100644 (file)
@@ -8634,6 +8634,10 @@ int intel_modeset_init_noirq(struct drm_i915_private *i915)
                goto cleanup_bios;
 
        /* FIXME: completely on the wrong abstraction layer */
+       ret = intel_power_domains_init(i915);
+       if (ret < 0)
+               goto cleanup_vga;
+
        intel_power_domains_init_hw(i915, false);
 
        if (!HAS_DISPLAY(i915))
@@ -8676,6 +8680,7 @@ int intel_modeset_init_noirq(struct drm_i915_private *i915)
 cleanup_vga_client_pw_domain_dmc:
        intel_dmc_fini(i915);
        intel_power_domains_driver_remove(i915);
+cleanup_vga:
        intel_vga_unregister(i915);
 cleanup_bios:
        intel_bios_driver_remove(i915);
index 27b496a..4b40522 100644 (file)
@@ -251,9 +251,6 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
        intel_detect_pch(dev_priv);
 
        intel_pm_setup(dev_priv);
-       ret = intel_power_domains_init(dev_priv);
-       if (ret < 0)
-               goto err_gem;
        intel_irq_init(dev_priv);
        intel_init_display_hooks(dev_priv);
        intel_init_clock_gating_hooks(dev_priv);
@@ -262,10 +259,6 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
 
        return 0;
 
-err_gem:
-       i915_gem_cleanup_early(dev_priv);
-       intel_gt_driver_late_release_all(dev_priv);
-       i915_drm_clients_fini(&dev_priv->clients);
 err_rootgt:
        intel_region_ttm_device_fini(dev_priv);
 err_ttm: