diff mbox series

[CI,1/2] drm/i915: register vga switcheroo later, unregister earlier

Message ID 20200211162802.16180-1-jani.nikula@intel.com (mailing list archive)
State New, archived
Headers show
Series [CI,1/2] drm/i915: register vga switcheroo later, unregister earlier | expand

Commit Message

Jani Nikula Feb. 11, 2020, 4:28 p.m. UTC
Move vga switcheroo and dsm handler register later in
i915_driver_register(), and unregister in i915_driver_unregister(). The
dsm handler unregister is a nop, and is only added for completeness.

My unsubstantiated suspicion is that the vga switcheroo state change
would not work as early as we register the hooks currently. In any case
exposing the interfaces to the world only after we've got everything set
up seems prudent.

Also replace the error handling in vga switcheroo register with a simple
error message. This is done at the same time due to lack of error
propagation from i915_driver_register().

Cc: Lukas Wunner <lukas@wunner.de>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Acked-by: Lukas Wunner <lukas@wunner.de>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/i915_drv.c | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

Comments

Jani Nikula Feb. 14, 2020, 7:04 a.m. UTC | #1
On Tue, 11 Feb 2020, Jani Nikula <jani.nikula@intel.com> wrote:
> Move vga switcheroo and dsm handler register later in
> i915_driver_register(), and unregister in i915_driver_unregister(). The
> dsm handler unregister is a nop, and is only added for completeness.
>
> My unsubstantiated suspicion is that the vga switcheroo state change
> would not work as early as we register the hooks currently. In any case
> exposing the interfaces to the world only after we've got everything set
> up seems prudent.
>
> Also replace the error handling in vga switcheroo register with a simple
> error message. This is done at the same time due to lack of error
> propagation from i915_driver_register().
>
> Cc: Lukas Wunner <lukas@wunner.de>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Acked-by: Lukas Wunner <lukas@wunner.de>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>

Both finally pushed, thanks for the acks and reviews.

BR,
Jani.

> ---
>  drivers/gpu/drm/i915/i915_drv.c | 19 +++++++++----------
>  1 file changed, 9 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> index 516536234e97..4c75437f33af 100644
> --- a/drivers/gpu/drm/i915/i915_drv.c
> +++ b/drivers/gpu/drm/i915/i915_drv.c
> @@ -292,12 +292,6 @@ static int i915_driver_modeset_probe(struct drm_i915_private *i915)
>  	if (ret)
>  		goto out;
>  
> -	intel_register_dsm_handler();
> -
> -	ret = i915_switcheroo_register(i915);
> -	if (ret)
> -		goto cleanup_vga_client;
> -
>  	intel_power_domains_init_hw(i915, false);
>  
>  	intel_csr_ucode_init(i915);
> @@ -343,8 +337,6 @@ static int i915_driver_modeset_probe(struct drm_i915_private *i915)
>  cleanup_csr:
>  	intel_csr_ucode_fini(i915);
>  	intel_power_domains_driver_remove(i915);
> -	i915_switcheroo_unregister(i915);
> -cleanup_vga_client:
>  	intel_vga_unregister(i915);
>  out:
>  	return ret;
> @@ -358,8 +350,6 @@ static void i915_driver_modeset_remove(struct drm_i915_private *i915)
>  
>  	intel_bios_driver_remove(i915);
>  
> -	i915_switcheroo_unregister(i915);
> -
>  	intel_vga_unregister(i915);
>  
>  	intel_csr_ucode_fini(i915);
> @@ -1366,6 +1356,11 @@ static void i915_driver_register(struct drm_i915_private *dev_priv)
>  
>  	intel_power_domains_enable(dev_priv);
>  	intel_runtime_pm_enable(&dev_priv->runtime_pm);
> +
> +	intel_register_dsm_handler();
> +
> +	if (i915_switcheroo_register(dev_priv))
> +		drm_err(&dev_priv->drm, "Failed to register vga switcheroo!\n");
>  }
>  
>  /**
> @@ -1374,6 +1369,10 @@ static void i915_driver_register(struct drm_i915_private *dev_priv)
>   */
>  static void i915_driver_unregister(struct drm_i915_private *dev_priv)
>  {
> +	i915_switcheroo_unregister(dev_priv);
> +
> +	intel_unregister_dsm_handler();
> +
>  	intel_runtime_pm_disable(&dev_priv->runtime_pm);
>  	intel_power_domains_disable(dev_priv);
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 516536234e97..4c75437f33af 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -292,12 +292,6 @@  static int i915_driver_modeset_probe(struct drm_i915_private *i915)
 	if (ret)
 		goto out;
 
-	intel_register_dsm_handler();
-
-	ret = i915_switcheroo_register(i915);
-	if (ret)
-		goto cleanup_vga_client;
-
 	intel_power_domains_init_hw(i915, false);
 
 	intel_csr_ucode_init(i915);
@@ -343,8 +337,6 @@  static int i915_driver_modeset_probe(struct drm_i915_private *i915)
 cleanup_csr:
 	intel_csr_ucode_fini(i915);
 	intel_power_domains_driver_remove(i915);
-	i915_switcheroo_unregister(i915);
-cleanup_vga_client:
 	intel_vga_unregister(i915);
 out:
 	return ret;
@@ -358,8 +350,6 @@  static void i915_driver_modeset_remove(struct drm_i915_private *i915)
 
 	intel_bios_driver_remove(i915);
 
-	i915_switcheroo_unregister(i915);
-
 	intel_vga_unregister(i915);
 
 	intel_csr_ucode_fini(i915);
@@ -1366,6 +1356,11 @@  static void i915_driver_register(struct drm_i915_private *dev_priv)
 
 	intel_power_domains_enable(dev_priv);
 	intel_runtime_pm_enable(&dev_priv->runtime_pm);
+
+	intel_register_dsm_handler();
+
+	if (i915_switcheroo_register(dev_priv))
+		drm_err(&dev_priv->drm, "Failed to register vga switcheroo!\n");
 }
 
 /**
@@ -1374,6 +1369,10 @@  static void i915_driver_register(struct drm_i915_private *dev_priv)
  */
 static void i915_driver_unregister(struct drm_i915_private *dev_priv)
 {
+	i915_switcheroo_unregister(dev_priv);
+
+	intel_unregister_dsm_handler();
+
 	intel_runtime_pm_disable(&dev_priv->runtime_pm);
 	intel_power_domains_disable(dev_priv);