All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rodrigo Vivi <rodrigo.vivi@intel.com>
To: Jani Nikula <jani.nikula@intel.com>
Cc: <intel-gfx@lists.freedesktop.org>,
	<intel-xe@lists.freedesktop.org>, <imre.deak@intel.com>,
	<ville.syrjala@linux.intel.com>
Subject: Re: [PATCH 5/6] drm/i915/power: convert to display runtime PM interfaces
Date: Tue, 11 Mar 2025 16:45:56 -0400	[thread overview]
Message-ID: <Z9ChBEK8IEkhUeSS@intel.com> (raw)
In-Reply-To: <840f7cd7945757ac59e0522f3bf803105f54052c.1741694400.git.jani.nikula@intel.com>

On Tue, Mar 11, 2025 at 02:05:39PM +0200, Jani Nikula wrote:
> Finish the conversions to display specific runtime PM interfaces in the
> power code.
> 

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>

> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>  .../drm/i915/display/intel_display_power.c    | 63 ++++++++-----------
>  .../i915/display/intel_display_power_well.c   |  4 +-
>  2 files changed, 30 insertions(+), 37 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display_power.c b/drivers/gpu/drm/i915/display/intel_display_power.c
> index f7171e6932dc..adeb4408eb49 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_power.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_power.c
> @@ -16,6 +16,7 @@
>  #include "intel_display_power.h"
>  #include "intel_display_power_map.h"
>  #include "intel_display_power_well.h"
> +#include "intel_display_rpm.h"
>  #include "intel_display_types.h"
>  #include "intel_dmc.h"
>  #include "intel_mchbar_regs.h"
> @@ -204,7 +205,7 @@ static bool __intel_display_power_is_enabled(struct intel_display *display,
>  	struct i915_power_well *power_well;
>  	bool is_enabled;
>  
> -	if (pm_runtime_suspended(display->drm->dev))
> +	if (intel_display_rpm_suspended(display))
>  		return false;
>  
>  	is_enabled = true;
> @@ -455,7 +456,6 @@ static bool
>  intel_display_power_grab_async_put_ref(struct intel_display *display,
>  				       enum intel_display_power_domain domain)
>  {
> -	struct drm_i915_private *dev_priv = to_i915(display->drm);
>  	struct i915_power_domains *power_domains = &display->power.domains;
>  	struct intel_power_domain_mask async_put_mask;
>  	bool ret = false;
> @@ -473,8 +473,8 @@ intel_display_power_grab_async_put_ref(struct intel_display *display,
>  		goto out_verify;
>  
>  	cancel_async_put_work(power_domains, false);
> -	intel_runtime_pm_put_raw(&dev_priv->runtime_pm,
> -				 fetch_and_zero(&power_domains->async_put_wakeref));
> +	intel_display_rpm_put_raw(display,
> +				  fetch_and_zero(&power_domains->async_put_wakeref));
>  out_verify:
>  	verify_async_put_domains_state(power_domains);
>  
> @@ -512,9 +512,10 @@ __intel_display_power_get_domain(struct intel_display *display,
>  intel_wakeref_t intel_display_power_get(struct intel_display *display,
>  					enum intel_display_power_domain domain)
>  {
> -	struct drm_i915_private *dev_priv = to_i915(display->drm);
>  	struct i915_power_domains *power_domains = &display->power.domains;
> -	intel_wakeref_t wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
> +	struct ref_tracker *wakeref;
> +
> +	wakeref = intel_display_rpm_get(display);
>  
>  	mutex_lock(&power_domains->lock);
>  	__intel_display_power_get_domain(display, domain);
> @@ -539,12 +540,11 @@ intel_wakeref_t
>  intel_display_power_get_if_enabled(struct intel_display *display,
>  				   enum intel_display_power_domain domain)
>  {
> -	struct drm_i915_private *dev_priv = to_i915(display->drm);
>  	struct i915_power_domains *power_domains = &display->power.domains;
> -	intel_wakeref_t wakeref;
> +	struct ref_tracker *wakeref;
>  	bool is_enabled;
>  
> -	wakeref = intel_runtime_pm_get_if_in_use(&dev_priv->runtime_pm);
> +	wakeref = intel_display_rpm_get_if_in_use(display);
>  	if (!wakeref)
>  		return NULL;
>  
> @@ -560,7 +560,7 @@ intel_display_power_get_if_enabled(struct intel_display *display,
>  	mutex_unlock(&power_domains->lock);
>  
>  	if (!is_enabled) {
> -		intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
> +		intel_display_rpm_put(display, wakeref);
>  		wakeref = NULL;
>  	}
>  
> @@ -623,12 +623,10 @@ release_async_put_domains(struct i915_power_domains *power_domains,
>  	struct intel_display *display = container_of(power_domains,
>  						     struct intel_display,
>  						     power.domains);
> -	struct drm_i915_private *dev_priv = to_i915(display->drm);
> -	struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
>  	enum intel_display_power_domain domain;
> -	intel_wakeref_t wakeref;
> +	struct ref_tracker *wakeref;
>  
> -	wakeref = intel_runtime_pm_get_noresume(rpm);
> +	wakeref = intel_display_rpm_get_noresume(display);
>  
>  	for_each_power_domain(domain, mask) {
>  		/* Clear before put, so put's sanity check is happy. */
> @@ -636,7 +634,7 @@ release_async_put_domains(struct i915_power_domains *power_domains,
>  		__intel_display_power_put_domain(display, domain);
>  	}
>  
> -	intel_runtime_pm_put(rpm, wakeref);
> +	intel_display_rpm_put(display, wakeref);
>  }
>  
>  static void
> @@ -644,11 +642,10 @@ intel_display_power_put_async_work(struct work_struct *work)
>  {
>  	struct intel_display *display = container_of(work, struct intel_display,
>  						     power.domains.async_put_work.work);
> -	struct drm_i915_private *dev_priv = to_i915(display->drm);
>  	struct i915_power_domains *power_domains = &display->power.domains;
> -	struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
> -	intel_wakeref_t new_work_wakeref = intel_runtime_pm_get_raw(rpm);
> -	intel_wakeref_t old_work_wakeref = NULL;
> +	struct ref_tracker *new_work_wakeref, *old_work_wakeref = NULL;
> +
> +	new_work_wakeref = intel_display_rpm_get_raw(display);
>  
>  	mutex_lock(&power_domains->lock);
>  
> @@ -688,9 +685,9 @@ intel_display_power_put_async_work(struct work_struct *work)
>  	mutex_unlock(&power_domains->lock);
>  
>  	if (old_work_wakeref)
> -		intel_runtime_pm_put_raw(rpm, old_work_wakeref);
> +		intel_display_rpm_put_raw(display, old_work_wakeref);
>  	if (new_work_wakeref)
> -		intel_runtime_pm_put_raw(rpm, new_work_wakeref);
> +		intel_display_rpm_put_raw(display, new_work_wakeref);
>  }
>  
>  /**
> @@ -711,10 +708,10 @@ void __intel_display_power_put_async(struct intel_display *display,
>  				     intel_wakeref_t wakeref,
>  				     int delay_ms)
>  {
> -	struct drm_i915_private *i915 = to_i915(display->drm);
>  	struct i915_power_domains *power_domains = &display->power.domains;
> -	struct intel_runtime_pm *rpm = &i915->runtime_pm;
> -	intel_wakeref_t work_wakeref = intel_runtime_pm_get_raw(rpm);
> +	struct ref_tracker *work_wakeref;
> +
> +	work_wakeref = intel_display_rpm_get_raw(display);
>  
>  	delay_ms = delay_ms >= 0 ? delay_ms : 100;
>  
> @@ -746,9 +743,9 @@ void __intel_display_power_put_async(struct intel_display *display,
>  	mutex_unlock(&power_domains->lock);
>  
>  	if (work_wakeref)
> -		intel_runtime_pm_put_raw(rpm, work_wakeref);
> +		intel_display_rpm_put_raw(display, work_wakeref);
>  
> -	intel_runtime_pm_put(rpm, wakeref);
> +	intel_display_rpm_put(display, wakeref);
>  }
>  
>  /**
> @@ -765,7 +762,6 @@ void __intel_display_power_put_async(struct intel_display *display,
>   */
>  void intel_display_power_flush_work(struct intel_display *display)
>  {
> -	struct drm_i915_private *i915 = to_i915(display->drm);
>  	struct i915_power_domains *power_domains = &display->power.domains;
>  	struct intel_power_domain_mask async_put_mask;
>  	intel_wakeref_t work_wakeref;
> @@ -786,7 +782,7 @@ void intel_display_power_flush_work(struct intel_display *display)
>  	mutex_unlock(&power_domains->lock);
>  
>  	if (work_wakeref)
> -		intel_runtime_pm_put_raw(&i915->runtime_pm, work_wakeref);
> +		intel_display_rpm_put_raw(display, work_wakeref);
>  }
>  
>  /**
> @@ -824,10 +820,8 @@ void intel_display_power_put(struct intel_display *display,
>  			     enum intel_display_power_domain domain,
>  			     intel_wakeref_t wakeref)
>  {
> -	struct drm_i915_private *dev_priv = to_i915(display->drm);
> -
>  	__intel_display_power_put(display, domain);
> -	intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
> +	intel_display_rpm_put(display, wakeref);
>  }
>  #else
>  /**
> @@ -846,10 +840,8 @@ void intel_display_power_put(struct intel_display *display,
>  void intel_display_power_put_unchecked(struct intel_display *display,
>  				       enum intel_display_power_domain domain)
>  {
> -	struct drm_i915_private *dev_priv = to_i915(display->drm);
> -
>  	__intel_display_power_put(display, domain);
> -	intel_runtime_pm_put_unchecked(&dev_priv->runtime_pm);
> +	intel_display_rpm_put_unchecked(display);
>  }
>  #endif
>  
> @@ -1979,7 +1971,6 @@ void intel_power_domains_init_hw(struct intel_display *display, bool resume)
>   */
>  void intel_power_domains_driver_remove(struct intel_display *display)
>  {
> -	struct drm_i915_private *i915 = to_i915(display->drm);
>  	intel_wakeref_t wakeref __maybe_unused =
>  		fetch_and_zero(&display->power.domains.init_wakeref);
>  
> @@ -1993,7 +1984,7 @@ void intel_power_domains_driver_remove(struct intel_display *display)
>  	intel_power_domains_verify_state(display);
>  
>  	/* Keep the power well enabled, but cancel its rpm wakeref. */
> -	intel_runtime_pm_put(&i915->runtime_pm, wakeref);
> +	intel_display_rpm_put(display, wakeref);
>  }
>  
>  /**
> diff --git a/drivers/gpu/drm/i915/display/intel_display_power_well.c b/drivers/gpu/drm/i915/display/intel_display_power_well.c
> index 8ec87ffd87d2..8e7610d9ca23 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_power_well.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_power_well.c
> @@ -13,6 +13,7 @@
>  #include "intel_de.h"
>  #include "intel_display_irq.h"
>  #include "intel_display_power_well.h"
> +#include "intel_display_rpm.h"
>  #include "intel_display_types.h"
>  #include "intel_dkl_phy.h"
>  #include "intel_dkl_phy_regs.h"
> @@ -816,7 +817,8 @@ static void assert_can_enable_dc5(struct intel_display *display)
>  		      (intel_de_read(display, DC_STATE_EN) &
>  		       DC_STATE_EN_UPTO_DC5),
>  		      "DC5 already programmed to be enabled.\n");
> -	assert_rpm_wakelock_held(&dev_priv->runtime_pm);
> +
> +	assert_display_rpm_held(display);
>  
>  	assert_dmc_loaded(display);
>  }
> -- 
> 2.39.5
> 

  reply	other threads:[~2025-03-11 20:46 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-11 12:05 [PATCH 0/6] drm/i915/display: add display specific runtime PM interface Jani Nikula
2025-03-11 12:05 ` [PATCH 1/6] drm/i915/display: add display specific runtime PM wrappers Jani Nikula
2025-03-11 20:36   ` Rodrigo Vivi
2025-03-11 12:05 ` [PATCH 2/6] drm/i915/display: conversions to with_intel_display_rpm() Jani Nikula
2025-03-11 20:36   ` Rodrigo Vivi
2025-03-11 12:05 ` [PATCH 3/6] drm/i915/display: use display runtime PM interfaces for for atomic state Jani Nikula
2025-03-11 20:39   ` Rodrigo Vivi
2025-03-11 12:05 ` [PATCH 4/6] drm/i915/display: convert to display runtime PM interfaces Jani Nikula
2025-03-11 20:43   ` Rodrigo Vivi
2025-03-12 10:43     ` Jani Nikula
2025-03-12 19:57       ` Rodrigo Vivi
2025-03-11 12:05 ` [PATCH 5/6] drm/i915/power: " Jani Nikula
2025-03-11 20:45   ` Rodrigo Vivi [this message]
2025-03-11 12:05 ` [PATCH 6/6] drm/xe/compat: remove intel_runtime_pm.h Jani Nikula
2025-03-11 20:46   ` Rodrigo Vivi
2025-03-11 14:31 ` ✓ CI.Patch_applied: success for drm/i915/display: add display specific runtime PM interface Patchwork
2025-03-11 14:32 ` ✗ CI.checkpatch: warning " Patchwork
2025-03-11 14:33 ` ✓ CI.KUnit: success " Patchwork
2025-03-11 14:49 ` ✓ CI.Build: " Patchwork
2025-03-11 14:52 ` ✓ CI.Hooks: " Patchwork
2025-03-11 14:53 ` ✗ CI.checksparse: warning " Patchwork
2025-03-11 15:15 ` ✓ Xe.CI.BAT: success " Patchwork
2025-03-11 16:32 ` ✗ Fi.CI.CHECKPATCH: warning " Patchwork
2025-03-11 16:32 ` ✗ Fi.CI.SPARSE: " Patchwork
2025-03-11 16:58 ` ✗ i915.CI.BAT: failure " Patchwork
2025-03-12  7:16 ` ✓ Xe.CI.Full: success " Patchwork
2025-03-13 11:04 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/display: add display specific runtime PM interface (rev2) Patchwork
2025-03-13 11:04 ` ✗ Fi.CI.SPARSE: " Patchwork
2025-03-13 11:27 ` ✓ i915.CI.BAT: success " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Z9ChBEK8IEkhUeSS@intel.com \
    --to=rodrigo.vivi@intel.com \
    --cc=imre.deak@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=jani.nikula@intel.com \
    --cc=ville.syrjala@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.