[PATCH 4/6] drm/i915: switch i915 core to generic VLV IOSF SB functions
Jani Nikula
jani.nikula at intel.com
Thu May 8 10:05:14 UTC 2025
On Fri, 25 Apr 2025, Jani Nikula <jani.nikula at intel.com> wrote:
> We'll want to relocate the unit specific functions to display, making
> them inaccessible to i915 core. As there aren't that many users in i915
> core, we can just convert them to the generic VLV IOSF SB read/write
> functions.
>
> Signed-off-by: Jani Nikula <jani.nikula at intel.com>
> ---
> drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.c | 6 +--
> drivers/gpu/drm/i915/gt/intel_rps.c | 46 +++++++++----------
> drivers/gpu/drm/i915/soc/intel_dram.c | 4 +-
> 3 files changed, 28 insertions(+), 28 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.c b/drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.c
> index 0704fe763afe..288b12a02b76 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.c
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.c
> @@ -366,9 +366,9 @@ void intel_gt_pm_frequency_dump(struct intel_gt *gt, struct drm_printer *p)
> drm_printf(p, "SW control enabled: %s\n",
> str_yes_no((rpmodectl & GEN6_RP_MEDIA_MODE_MASK) == GEN6_RP_MEDIA_SW_MODE));
>
> - vlv_punit_get(i915);
> - freq_sts = vlv_punit_read(i915, PUNIT_REG_GPU_FREQ_STS);
> - vlv_punit_put(i915);
> + vlv_iosf_sb_get(i915, VLV_IOSF_SB_PUNIT);
All of the gets and puts need BIT(unit) instead of just unit as
parameter. *facepalm*.
Fixed in v2 [1].
BR,
Jani.
[1] https://lore.kernel.org/r/cover.1746698410.git.jani.nikula@intel.com
> + freq_sts = vlv_iosf_sb_read(i915, VLV_IOSF_SB_PUNIT, PUNIT_REG_GPU_FREQ_STS);
> + vlv_iosf_sb_put(i915, VLV_IOSF_SB_PUNIT);
>
> drm_printf(p, "PUNIT_REG_GPU_FREQ_STS: 0x%08x\n", freq_sts);
>
> diff --git a/drivers/gpu/drm/i915/gt/intel_rps.c b/drivers/gpu/drm/i915/gt/intel_rps.c
> index 4f58b08ca318..e48c5bd805f1 100644
> --- a/drivers/gpu/drm/i915/gt/intel_rps.c
> +++ b/drivers/gpu/drm/i915/gt/intel_rps.c
> @@ -824,9 +824,9 @@ static int vlv_rps_set(struct intel_rps *rps, u8 val)
> struct drm_i915_private *i915 = rps_to_i915(rps);
> int err;
>
> - vlv_punit_get(i915);
> - err = vlv_punit_write(i915, PUNIT_REG_GPU_FREQ_REQ, val);
> - vlv_punit_put(i915);
> + vlv_iosf_sb_get(i915, VLV_IOSF_SB_PUNIT);
> + err = vlv_iosf_sb_write(i915, VLV_IOSF_SB_PUNIT, PUNIT_REG_GPU_FREQ_REQ, val);
> + vlv_iosf_sb_put(i915, VLV_IOSF_SB_PUNIT);
>
> GT_TRACE(rps_to_gt(rps), "set val:%x, freq:%d\n",
> val, intel_gpu_freq(rps, val));
> @@ -1276,7 +1276,7 @@ static int chv_rps_max_freq(struct intel_rps *rps)
> struct intel_gt *gt = rps_to_gt(rps);
> u32 val;
>
> - val = vlv_punit_read(i915, FB_GFX_FMAX_AT_VMAX_FUSE);
> + val = vlv_iosf_sb_read(i915, VLV_IOSF_SB_PUNIT, FB_GFX_FMAX_AT_VMAX_FUSE);
>
> switch (gt->info.sseu.eu_total) {
> case 8:
> @@ -1303,7 +1303,7 @@ static int chv_rps_rpe_freq(struct intel_rps *rps)
> struct drm_i915_private *i915 = rps_to_i915(rps);
> u32 val;
>
> - val = vlv_punit_read(i915, PUNIT_GPU_DUTYCYCLE_REG);
> + val = vlv_iosf_sb_read(i915, VLV_IOSF_SB_PUNIT, PUNIT_GPU_DUTYCYCLE_REG);
> val >>= PUNIT_GPU_DUTYCYCLE_RPE_FREQ_SHIFT;
>
> return val & PUNIT_GPU_DUTYCYCLE_RPE_FREQ_MASK;
> @@ -1314,7 +1314,7 @@ static int chv_rps_guar_freq(struct intel_rps *rps)
> struct drm_i915_private *i915 = rps_to_i915(rps);
> u32 val;
>
> - val = vlv_punit_read(i915, FB_GFX_FMAX_AT_VMAX_FUSE);
> + val = vlv_iosf_sb_read(i915, VLV_IOSF_SB_PUNIT, FB_GFX_FMAX_AT_VMAX_FUSE);
>
> return val & FB_GFX_FREQ_FUSE_MASK;
> }
> @@ -1324,7 +1324,7 @@ static u32 chv_rps_min_freq(struct intel_rps *rps)
> struct drm_i915_private *i915 = rps_to_i915(rps);
> u32 val;
>
> - val = vlv_punit_read(i915, FB_GFX_FMIN_AT_VMIN_FUSE);
> + val = vlv_iosf_sb_read(i915, VLV_IOSF_SB_PUNIT, FB_GFX_FMIN_AT_VMIN_FUSE);
> val >>= FB_GFX_FMIN_AT_VMIN_FUSE_SHIFT;
>
> return val & FB_GFX_FREQ_FUSE_MASK;
> @@ -1358,14 +1358,14 @@ static bool chv_rps_enable(struct intel_rps *rps)
> GEN6_PM_RP_DOWN_TIMEOUT);
>
> /* Setting Fixed Bias */
> - vlv_punit_get(i915);
> + vlv_iosf_sb_get(i915, VLV_IOSF_SB_PUNIT);
>
> val = VLV_OVERRIDE_EN | VLV_SOC_TDP_EN | CHV_BIAS_CPU_50_SOC_50;
> - vlv_punit_write(i915, VLV_TURBO_SOC_OVERRIDE, val);
> + vlv_iosf_sb_write(i915, VLV_IOSF_SB_PUNIT, VLV_TURBO_SOC_OVERRIDE, val);
>
> - val = vlv_punit_read(i915, PUNIT_REG_GPU_FREQ_STS);
> + val = vlv_iosf_sb_read(i915, VLV_IOSF_SB_PUNIT, PUNIT_REG_GPU_FREQ_STS);
>
> - vlv_punit_put(i915);
> + vlv_iosf_sb_put(i915, VLV_IOSF_SB_PUNIT);
>
> /* RPS code assumes GPLL is used */
> drm_WARN_ONCE(&i915->drm, (val & GPLLENABLE) == 0,
> @@ -1383,7 +1383,7 @@ static int vlv_rps_guar_freq(struct intel_rps *rps)
> struct drm_i915_private *i915 = rps_to_i915(rps);
> u32 val, rp1;
>
> - val = vlv_nc_read(i915, IOSF_NC_FB_GFX_FREQ_FUSE);
> + val = vlv_iosf_sb_read(i915, VLV_IOSF_SB_NC, IOSF_NC_FB_GFX_FREQ_FUSE);
>
> rp1 = val & FB_GFX_FGUARANTEED_FREQ_FUSE_MASK;
> rp1 >>= FB_GFX_FGUARANTEED_FREQ_FUSE_SHIFT;
> @@ -1396,7 +1396,7 @@ static int vlv_rps_max_freq(struct intel_rps *rps)
> struct drm_i915_private *i915 = rps_to_i915(rps);
> u32 val, rp0;
>
> - val = vlv_nc_read(i915, IOSF_NC_FB_GFX_FREQ_FUSE);
> + val = vlv_iosf_sb_read(i915, VLV_IOSF_SB_NC, IOSF_NC_FB_GFX_FREQ_FUSE);
>
> rp0 = (val & FB_GFX_MAX_FREQ_FUSE_MASK) >> FB_GFX_MAX_FREQ_FUSE_SHIFT;
> /* Clamp to max */
> @@ -1410,9 +1410,9 @@ static int vlv_rps_rpe_freq(struct intel_rps *rps)
> struct drm_i915_private *i915 = rps_to_i915(rps);
> u32 val, rpe;
>
> - val = vlv_nc_read(i915, IOSF_NC_FB_GFX_FMAX_FUSE_LO);
> + val = vlv_iosf_sb_read(i915, VLV_IOSF_SB_NC, IOSF_NC_FB_GFX_FMAX_FUSE_LO);
> rpe = (val & FB_FMAX_VMIN_FREQ_LO_MASK) >> FB_FMAX_VMIN_FREQ_LO_SHIFT;
> - val = vlv_nc_read(i915, IOSF_NC_FB_GFX_FMAX_FUSE_HI);
> + val = vlv_iosf_sb_read(i915, VLV_IOSF_SB_NC, IOSF_NC_FB_GFX_FMAX_FUSE_HI);
> rpe |= (val & FB_FMAX_VMIN_FREQ_HI_MASK) << 5;
>
> return rpe;
> @@ -1423,7 +1423,7 @@ static int vlv_rps_min_freq(struct intel_rps *rps)
> struct drm_i915_private *i915 = rps_to_i915(rps);
> u32 val;
>
> - val = vlv_punit_read(i915, PUNIT_REG_GPU_LFM) & 0xff;
> + val = vlv_iosf_sb_read(i915, VLV_IOSF_SB_PUNIT, PUNIT_REG_GPU_LFM) & 0xff;
> /*
> * According to the BYT Punit GPU turbo HAS 1.1.6.3 the minimum value
> * for the minimum frequency in GPLL mode is 0xc1. Contrary to this on
> @@ -1459,15 +1459,15 @@ static bool vlv_rps_enable(struct intel_rps *rps)
> /* WaGsvRC0ResidencyMethod:vlv */
> rps->pm_events = GEN6_PM_RP_UP_EI_EXPIRED;
>
> - vlv_punit_get(i915);
> + vlv_iosf_sb_get(i915, VLV_IOSF_SB_PUNIT);
>
> /* Setting Fixed Bias */
> val = VLV_OVERRIDE_EN | VLV_SOC_TDP_EN | VLV_BIAS_CPU_125_SOC_875;
> - vlv_punit_write(i915, VLV_TURBO_SOC_OVERRIDE, val);
> + vlv_iosf_sb_write(i915, VLV_IOSF_SB_PUNIT, VLV_TURBO_SOC_OVERRIDE, val);
>
> - val = vlv_punit_read(i915, PUNIT_REG_GPU_FREQ_STS);
> + val = vlv_iosf_sb_read(i915, VLV_IOSF_SB_PUNIT, PUNIT_REG_GPU_FREQ_STS);
>
> - vlv_punit_put(i915);
> + vlv_iosf_sb_put(i915, VLV_IOSF_SB_PUNIT);
>
> /* RPS code assumes GPLL is used */
> drm_WARN_ONCE(&i915->drm, (val & GPLLENABLE) == 0,
> @@ -2115,9 +2115,9 @@ static u32 __read_cagf(struct intel_rps *rps, bool take_fw)
> } else if (GRAPHICS_VER(i915) >= 12) {
> r = GEN12_RPSTAT1;
> } else if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915)) {
> - vlv_punit_get(i915);
> - freq = vlv_punit_read(i915, PUNIT_REG_GPU_FREQ_STS);
> - vlv_punit_put(i915);
> + vlv_iosf_sb_get(i915, VLV_IOSF_SB_PUNIT);
> + freq = vlv_iosf_sb_read(i915, VLV_IOSF_SB_PUNIT, PUNIT_REG_GPU_FREQ_STS);
> + vlv_iosf_sb_put(i915, VLV_IOSF_SB_PUNIT);
> } else if (GRAPHICS_VER(i915) >= 6) {
> r = GEN6_RPSTAT1;
> } else {
> diff --git a/drivers/gpu/drm/i915/soc/intel_dram.c b/drivers/gpu/drm/i915/soc/intel_dram.c
> index 0b92ab4e9fb9..e8d6bd116b44 100644
> --- a/drivers/gpu/drm/i915/soc/intel_dram.c
> +++ b/drivers/gpu/drm/i915/soc/intel_dram.c
> @@ -98,7 +98,7 @@ static unsigned int chv_mem_freq(struct drm_i915_private *i915)
> u32 val;
>
> vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_CCK));
> - val = vlv_cck_read(i915, CCK_FUSE_REG);
> + val = vlv_iosf_sb_read(i915, VLV_IOSF_SB_CCK, CCK_FUSE_REG);
> vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_CCK));
>
> switch ((val >> 2) & 0x7) {
> @@ -114,7 +114,7 @@ static unsigned int vlv_mem_freq(struct drm_i915_private *i915)
> u32 val;
>
> vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_PUNIT));
> - val = vlv_punit_read(i915, PUNIT_REG_GPU_FREQ_STS);
> + val = vlv_iosf_sb_read(i915, VLV_IOSF_SB_PUNIT, PUNIT_REG_GPU_FREQ_STS);
> vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_PUNIT));
>
> switch ((val >> 6) & 3) {
--
Jani Nikula, Intel
More information about the Intel-xe
mailing list