diff mbox series

[6/6] drm/i915/vga: Consolidate intel_vga_disable() calls

Message ID 20250417114454.12836-7-ville.syrjala@linux.intel.com (mailing list archive)
State New
Headers show
Series drm/i915/vga: Clean up VGA plane handling | expand

Commit Message

Ville Syrjala April 17, 2025, 11:44 a.m. UTC
From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Currently we disable the VGA plane from various places, sometimes
multiple times in the same init/resume sequence. Get rid of all this
mess and do it just once. The most correct place seems to be just
after intel_early_display_was() as that one applies various workarounds
that need to be in place before we touch any planes (including the
VGA plane).

Actually, we do still have a second caller in
vlv_display_power_well_init(). I think we still need that as the reset
value of VGACNTR is 0x0 and thus technically the VGA plane will be
(at least partially) enabled after the power well has been toggled.

In both cases we have the necessary power reference already held
(INIT power domain for load/resume case, and the display power well
itself being what we need for vlv_display_power_well_init()).

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 .../drm/i915/display/intel_display_driver.c   |  3 ---
 .../drm/i915/display/intel_modeset_setup.c    |  3 +++
 drivers/gpu/drm/i915/display/intel_vga.c      | 22 -------------------
 drivers/gpu/drm/i915/display/intel_vga.h      |  1 -
 drivers/gpu/drm/i915/i915_driver.c            |  3 ---
 5 files changed, 3 insertions(+), 29 deletions(-)

Comments

Jani Nikula April 17, 2025, 1:32 p.m. UTC | #1
On Thu, 17 Apr 2025, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Currently we disable the VGA plane from various places, sometimes
> multiple times in the same init/resume sequence. Get rid of all this
> mess and do it just once. The most correct place seems to be just
> after intel_early_display_was() as that one applies various workarounds
> that need to be in place before we touch any planes (including the
> VGA plane).
>
> Actually, we do still have a second caller in
> vlv_display_power_well_init(). I think we still need that as the reset
> value of VGACNTR is 0x0 and thus technically the VGA plane will be
> (at least partially) enabled after the power well has been toggled.
>
> In both cases we have the necessary power reference already held
> (INIT power domain for load/resume case, and the display power well
> itself being what we need for vlv_display_power_well_init()).
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Seems good.

Reviewed-by: Jani Nikula <jani.nikula@intel.com>


> ---
>  .../drm/i915/display/intel_display_driver.c   |  3 ---
>  .../drm/i915/display/intel_modeset_setup.c    |  3 +++
>  drivers/gpu/drm/i915/display/intel_vga.c      | 22 -------------------
>  drivers/gpu/drm/i915/display/intel_vga.h      |  1 -
>  drivers/gpu/drm/i915/i915_driver.c            |  3 ---
>  5 files changed, 3 insertions(+), 29 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c
> index eb3ae05d1569..ac0f79476675 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_driver.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_driver.c
> @@ -455,8 +455,6 @@ int intel_display_driver_probe_nogem(struct intel_display *display)
>  
>  	intel_hti_init(display);
>  
> -	/* Just disable it once at startup */
> -	intel_vga_disable(display);
>  	intel_setup_outputs(display);
>  
>  	ret = intel_dp_tunnel_mgr_init(display);
> @@ -693,7 +691,6 @@ __intel_display_driver_resume(struct intel_display *display,
>  	int ret, i;
>  
>  	intel_modeset_setup_hw_state(display, ctx);
> -	intel_vga_redisable(display);
>  
>  	if (!state)
>  		return 0;
> diff --git a/drivers/gpu/drm/i915/display/intel_modeset_setup.c b/drivers/gpu/drm/i915/display/intel_modeset_setup.c
> index 5d5ade7fdd77..0325b0c9506d 100644
> --- a/drivers/gpu/drm/i915/display/intel_modeset_setup.c
> +++ b/drivers/gpu/drm/i915/display/intel_modeset_setup.c
> @@ -31,6 +31,7 @@
>  #include "intel_pmdemand.h"
>  #include "intel_tc.h"
>  #include "intel_vblank.h"
> +#include "intel_vga.h"
>  #include "intel_wm.h"
>  #include "skl_watermark.h"
>  
> @@ -935,6 +936,8 @@ void intel_modeset_setup_hw_state(struct intel_display *display,
>  	wakeref = intel_display_power_get(display, POWER_DOMAIN_INIT);
>  
>  	intel_early_display_was(display);
> +	intel_vga_disable(display);
> +
>  	intel_modeset_readout_hw_state(display);
>  
>  	/* HW state is read out, now we need to sanitize this mess. */
> diff --git a/drivers/gpu/drm/i915/display/intel_vga.c b/drivers/gpu/drm/i915/display/intel_vga.c
> index d01de61105c1..a0940a050994 100644
> --- a/drivers/gpu/drm/i915/display/intel_vga.c
> +++ b/drivers/gpu/drm/i915/display/intel_vga.c
> @@ -74,28 +74,6 @@ void intel_vga_disable(struct intel_display *display)
>  	intel_de_posting_read(display, vga_reg);
>  }
>  
> -void intel_vga_redisable(struct intel_display *display)
> -{
> -	intel_wakeref_t wakeref;
> -
> -	/*
> -	 * This function can be called both from intel_modeset_setup_hw_state or
> -	 * at a very early point in our resume sequence, where the power well
> -	 * structures are not yet restored. Since this function is at a very
> -	 * paranoid "someone might have enabled VGA while we were not looking"
> -	 * level, just check if the power well is enabled instead of trying to
> -	 * follow the "don't touch the power well if we don't need it" policy
> -	 * the rest of the driver uses.
> -	 */
> -	wakeref = intel_display_power_get_if_enabled(display, POWER_DOMAIN_VGA);
> -	if (!wakeref)
> -		return;
> -
> -	intel_vga_disable(display);
> -
> -	intel_display_power_put(display, POWER_DOMAIN_VGA, wakeref);
> -}
> -
>  void intel_vga_reset_io_mem(struct intel_display *display)
>  {
>  	struct pci_dev *pdev = to_pci_dev(display->drm->dev);
> diff --git a/drivers/gpu/drm/i915/display/intel_vga.h b/drivers/gpu/drm/i915/display/intel_vga.h
> index d0716782c1f9..16d699f3b641 100644
> --- a/drivers/gpu/drm/i915/display/intel_vga.h
> +++ b/drivers/gpu/drm/i915/display/intel_vga.h
> @@ -10,7 +10,6 @@ struct intel_display;
>  
>  void intel_vga_reset_io_mem(struct intel_display *display);
>  void intel_vga_disable(struct intel_display *display);
> -void intel_vga_redisable(struct intel_display *display);
>  int intel_vga_register(struct intel_display *display);
>  void intel_vga_unregister(struct intel_display *display);
>  
> diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
> index 97ff9855b5de..96a52f963475 100644
> --- a/drivers/gpu/drm/i915/i915_driver.c
> +++ b/drivers/gpu/drm/i915/i915_driver.c
> @@ -62,7 +62,6 @@
>  #include "display/intel_pch_refclk.h"
>  #include "display/intel_pps.h"
>  #include "display/intel_sprite_uapi.h"
> -#include "display/intel_vga.h"
>  #include "display/skl_watermark.h"
>  
>  #include "gem/i915_gem_context.h"
> @@ -1202,8 +1201,6 @@ static int i915_drm_resume(struct drm_device *dev)
>  
>  	i9xx_display_sr_restore(display);
>  
> -	intel_vga_redisable(display);
> -
>  	intel_gmbus_reset(display);
>  
>  	intel_pps_unlock_regs_wa(display);
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c
index eb3ae05d1569..ac0f79476675 100644
--- a/drivers/gpu/drm/i915/display/intel_display_driver.c
+++ b/drivers/gpu/drm/i915/display/intel_display_driver.c
@@ -455,8 +455,6 @@  int intel_display_driver_probe_nogem(struct intel_display *display)
 
 	intel_hti_init(display);
 
-	/* Just disable it once at startup */
-	intel_vga_disable(display);
 	intel_setup_outputs(display);
 
 	ret = intel_dp_tunnel_mgr_init(display);
@@ -693,7 +691,6 @@  __intel_display_driver_resume(struct intel_display *display,
 	int ret, i;
 
 	intel_modeset_setup_hw_state(display, ctx);
-	intel_vga_redisable(display);
 
 	if (!state)
 		return 0;
diff --git a/drivers/gpu/drm/i915/display/intel_modeset_setup.c b/drivers/gpu/drm/i915/display/intel_modeset_setup.c
index 5d5ade7fdd77..0325b0c9506d 100644
--- a/drivers/gpu/drm/i915/display/intel_modeset_setup.c
+++ b/drivers/gpu/drm/i915/display/intel_modeset_setup.c
@@ -31,6 +31,7 @@ 
 #include "intel_pmdemand.h"
 #include "intel_tc.h"
 #include "intel_vblank.h"
+#include "intel_vga.h"
 #include "intel_wm.h"
 #include "skl_watermark.h"
 
@@ -935,6 +936,8 @@  void intel_modeset_setup_hw_state(struct intel_display *display,
 	wakeref = intel_display_power_get(display, POWER_DOMAIN_INIT);
 
 	intel_early_display_was(display);
+	intel_vga_disable(display);
+
 	intel_modeset_readout_hw_state(display);
 
 	/* HW state is read out, now we need to sanitize this mess. */
diff --git a/drivers/gpu/drm/i915/display/intel_vga.c b/drivers/gpu/drm/i915/display/intel_vga.c
index d01de61105c1..a0940a050994 100644
--- a/drivers/gpu/drm/i915/display/intel_vga.c
+++ b/drivers/gpu/drm/i915/display/intel_vga.c
@@ -74,28 +74,6 @@  void intel_vga_disable(struct intel_display *display)
 	intel_de_posting_read(display, vga_reg);
 }
 
-void intel_vga_redisable(struct intel_display *display)
-{
-	intel_wakeref_t wakeref;
-
-	/*
-	 * This function can be called both from intel_modeset_setup_hw_state or
-	 * at a very early point in our resume sequence, where the power well
-	 * structures are not yet restored. Since this function is at a very
-	 * paranoid "someone might have enabled VGA while we were not looking"
-	 * level, just check if the power well is enabled instead of trying to
-	 * follow the "don't touch the power well if we don't need it" policy
-	 * the rest of the driver uses.
-	 */
-	wakeref = intel_display_power_get_if_enabled(display, POWER_DOMAIN_VGA);
-	if (!wakeref)
-		return;
-
-	intel_vga_disable(display);
-
-	intel_display_power_put(display, POWER_DOMAIN_VGA, wakeref);
-}
-
 void intel_vga_reset_io_mem(struct intel_display *display)
 {
 	struct pci_dev *pdev = to_pci_dev(display->drm->dev);
diff --git a/drivers/gpu/drm/i915/display/intel_vga.h b/drivers/gpu/drm/i915/display/intel_vga.h
index d0716782c1f9..16d699f3b641 100644
--- a/drivers/gpu/drm/i915/display/intel_vga.h
+++ b/drivers/gpu/drm/i915/display/intel_vga.h
@@ -10,7 +10,6 @@  struct intel_display;
 
 void intel_vga_reset_io_mem(struct intel_display *display);
 void intel_vga_disable(struct intel_display *display);
-void intel_vga_redisable(struct intel_display *display);
 int intel_vga_register(struct intel_display *display);
 void intel_vga_unregister(struct intel_display *display);
 
diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
index 97ff9855b5de..96a52f963475 100644
--- a/drivers/gpu/drm/i915/i915_driver.c
+++ b/drivers/gpu/drm/i915/i915_driver.c
@@ -62,7 +62,6 @@ 
 #include "display/intel_pch_refclk.h"
 #include "display/intel_pps.h"
 #include "display/intel_sprite_uapi.h"
-#include "display/intel_vga.h"
 #include "display/skl_watermark.h"
 
 #include "gem/i915_gem_context.h"
@@ -1202,8 +1201,6 @@  static int i915_drm_resume(struct drm_device *dev)
 
 	i9xx_display_sr_restore(display);
 
-	intel_vga_redisable(display);
-
 	intel_gmbus_reset(display);
 
 	intel_pps_unlock_regs_wa(display);