drm/i915/psr: Implement WaPsrDPRSUnmaskVBlankInSRD:hsw
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 9 Jun 2023 14:14:00 +0000 (17:14 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 16 Jun 2023 14:58:07 +0000 (17:58 +0300)
Bspec asks us to unmask "vblank to registers" in the DPRS unit.

Note that I was unable to observe any change in hardware
behviour due to this bit on HSW. But let's do this anyway
in case it matters in some cases, and the corresponding bit
on BDW is abolutely critical as without it the hardware
won't generate any vblanks whatsoever after PSR exit.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230609141404.12729-10-ville.syrjala@linux.intel.com
Reviewed-by: Jouni Högander <jouni.hogander@intel.com>
drivers/gpu/drm/i915/intel_clock_gating.c

index 9682323..d9600cd 100644 (file)
@@ -559,12 +559,20 @@ static void bdw_init_clock_gating(struct drm_i915_private *i915)
 
 static void hsw_init_clock_gating(struct drm_i915_private *i915)
 {
+       enum pipe pipe;
+
        /* WaFbcAsynchFlipDisableFbcQueue:hsw,bdw */
        intel_uncore_rmw(&i915->uncore, CHICKEN_PIPESL_1(PIPE_A), 0, HSW_FBCQ_DIS);
 
        /* WaPsrDPAMaskVBlankInSRD:hsw */
        intel_uncore_rmw(&i915->uncore, CHICKEN_PAR1_1, 0, HSW_MASK_VBL_TO_PIPE_IN_SRD);
 
+       for_each_pipe(i915, pipe) {
+               /* WaPsrDPRSUnmaskVBlankInSRD:hsw */
+               intel_uncore_rmw(&i915->uncore, CHICKEN_PIPESL_1(pipe),
+                                0, HSW_UNMASK_VBL_TO_REGS_IN_SRD);
+       }
+
        /* This is required by WaCatErrorRejectionIssue:hsw */
        intel_uncore_rmw(&i915->uncore, GEN7_SQ_CHICKEN_MBCUNIT_CONFIG,
                         0, GEN7_SQ_CHICKEN_MBCUNIT_SQINTMOB);