> -----Original Message-----
> From: Intel-xe <intel-xe-boun...@lists.freedesktop.org> On Behalf Of Jani 
> Nikula
> Sent: Tuesday, 5 August 2025 12.18
> To: intel-gfx@lists.freedesktop.org; intel...@lists.freedesktop.org
> Cc: Nikula, Jani <jani.nik...@intel.com>
> Subject: [PATCH 02/12] drm/i915: add vlv_clock_get_czclk()
> 
> Add vlv_clock_get_czclk() helper to avoid looking at i915->czclk_freq 
> directly.
> 

Reviewed-by: Mika Kahola <mika.kah...@intel.com>

> Signed-off-by: Jani Nikula <jani.nik...@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_cdclk.c   |  3 +--
>  drivers/gpu/drm/i915/display/intel_display.c | 20 ++++++++++++++------  
> drivers/gpu/drm/i915/display/intel_display.h |  1 +
>  drivers/gpu/drm/i915/gt/intel_rc6.c          |  3 ++-
>  drivers/gpu/drm/i915/gt/intel_rps.c          |  3 ++-
>  5 files changed, 20 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_cdclk.c 
> b/drivers/gpu/drm/i915/display/intel_cdclk.c
> index 59997dc95984..8f6b31bfe7c0 100644
> --- a/drivers/gpu/drm/i915/display/intel_cdclk.c
> +++ b/drivers/gpu/drm/i915/display/intel_cdclk.c
> @@ -629,7 +629,6 @@ static void vlv_get_cdclk(struct intel_display *display,
> 
>  static void vlv_program_pfi_credits(struct intel_display *display)  {
> -     struct drm_i915_private *dev_priv = to_i915(display->drm);
>       unsigned int credits, default_credits;
> 
>       if (display->platform.cherryview)
> @@ -637,7 +636,7 @@ static void vlv_program_pfi_credits(struct intel_display 
> *display)
>       else
>               default_credits = PFI_CREDIT(8);
> 
> -     if (display->cdclk.hw.cdclk >= dev_priv->czclk_freq) {
> +     if (display->cdclk.hw.cdclk >= vlv_clock_get_czclk(display->drm)) {
>               /* CHV suggested value is 31 or 63 */
>               if (display->platform.cherryview)
>                       credits = PFI_CREDIT_63;
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c 
> b/drivers/gpu/drm/i915/display/intel_display.c
> index fdd29d9256ed..117b6c423a4c 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -186,25 +186,33 @@ int vlv_get_cck_clock_hpll(struct drm_device *drm,
>       return hpll;
>  }
> 
> -int vlv_clock_get_gpll(struct drm_device *drm)
> +int vlv_clock_get_czclk(struct drm_device *drm)
>  {
>       struct drm_i915_private *i915 = to_i915(drm);
> 
> +     if (!i915->czclk_freq)
> +             i915->czclk_freq = vlv_get_cck_clock_hpll(drm, "czclk",
> +                                                       CCK_CZ_CLOCK_CONTROL);
> +
> +     return i915->czclk_freq;
> +}
> +
> +int vlv_clock_get_gpll(struct drm_device *drm) {
>       return vlv_get_cck_clock(drm, "GPLL ref", CCK_GPLL_CLOCK_CONTROL,
> -                              i915->czclk_freq);
> +                              vlv_clock_get_czclk(drm));
>  }
> 
>  void intel_update_czclk(struct intel_display *display)  {
> -     struct drm_i915_private *dev_priv = to_i915(display->drm);
> +     int czclk_freq;
> 
>       if (!display->platform.valleyview && !display->platform.cherryview)
>               return;
> 
> -     dev_priv->czclk_freq = vlv_get_cck_clock_hpll(display->drm, "czclk",
> -                                                   CCK_CZ_CLOCK_CONTROL);
> +     czclk_freq = vlv_clock_get_czclk(display->drm);
> 
> -     drm_dbg_kms(display->drm, "CZ clock rate: %d kHz\n", 
> dev_priv->czclk_freq);
> +     drm_dbg_kms(display->drm, "CZ clock rate: %d kHz\n", czclk_freq);
>  }
> 
>  static bool is_hdr_mode(const struct intel_crtc_state *crtc_state) diff 
> --git a/drivers/gpu/drm/i915/display/intel_display.h
> b/drivers/gpu/drm/i915/display/intel_display.h
> index 7ae899b8787a..811066a9e69d 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.h
> +++ b/drivers/gpu/drm/i915/display/intel_display.h
> @@ -440,6 +440,7 @@ int vlv_get_cck_clock(struct drm_device *drm,
>                     const char *name, u32 reg, int ref_freq);  int 
> vlv_get_cck_clock_hpll(struct drm_device *drm,
>                          const char *name, u32 reg);
> +int vlv_clock_get_czclk(struct drm_device *drm);
>  int vlv_clock_get_gpll(struct drm_device *drm);  bool 
> intel_has_pending_fb_unpin(struct intel_display *display);  void
> intel_encoder_destroy(struct drm_encoder *encoder); diff --git 
> a/drivers/gpu/drm/i915/gt/intel_rc6.c
> b/drivers/gpu/drm/i915/gt/intel_rc6.c
> index 9ca42589da4d..0fd23b04d3f9 100644
> --- a/drivers/gpu/drm/i915/gt/intel_rc6.c
> +++ b/drivers/gpu/drm/i915/gt/intel_rc6.c
> @@ -6,6 +6,7 @@
>  #include <linux/pm_runtime.h>
>  #include <linux/string_helpers.h>
> 
> +#include "display/intel_display.h"
>  #include "gem/i915_gem_region.h"
>  #include "i915_drv.h"
>  #include "i915_reg.h"
> @@ -802,7 +803,7 @@ u64 intel_rc6_residency_ns(struct intel_rc6 *rc6, enum 
> intel_rc6_res_type id)
>       /* On VLV and CHV, residency time is in CZ units rather than 1.28us */
>       if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915)) {
>               mul = 1000000;
> -             div = i915->czclk_freq;
> +             div = vlv_clock_get_czclk(&i915->drm);
>               overflow_hw = BIT_ULL(40);
>               time_hw = vlv_residency_raw(uncore, reg);
>       } else {
> diff --git a/drivers/gpu/drm/i915/gt/intel_rps.c 
> b/drivers/gpu/drm/i915/gt/intel_rps.c
> index e2b5cdf6b7cb..664ffe02dc28 100644
> --- a/drivers/gpu/drm/i915/gt/intel_rps.c
> +++ b/drivers/gpu/drm/i915/gt/intel_rps.c
> @@ -1770,6 +1770,7 @@ static void vlv_c0_read(struct intel_uncore *uncore, 
> struct intel_rps_ei *ei)
> 
>  static u32 vlv_wa_c0_ei(struct intel_rps *rps, u32 pm_iir)  {
> +     struct drm_i915_private *i915 = rps_to_i915(rps);
>       struct intel_uncore *uncore = rps_to_uncore(rps);
>       const struct intel_rps_ei *prev = &rps->ei;
>       struct intel_rps_ei now;
> @@ -1786,7 +1787,7 @@ static u32 vlv_wa_c0_ei(struct intel_rps *rps, u32 
> pm_iir)
> 
>               time = ktime_us_delta(now.ktime, prev->ktime);
> 
> -             time *= rps_to_i915(rps)->czclk_freq;
> +             time *= vlv_clock_get_czclk(&i915->drm);
> 
>               /* Workload can be split between render + media,
>                * e.g. SwapBuffers being blitted in X after being rendered in
> --
> 2.39.5

Reply via email to