drm/i915: Ignore GTFIFODBG FIFO free entry fields on CHV
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 13 Apr 2016 18:09:30 +0000 (21:09 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Thu, 14 Apr 2016 11:45:00 +0000 (14:45 +0300)
On CHV GTFIFODBG has some read-only bits to indicate the number
of free FIFO entries. Ignore these when checking to see if any
of the sticky error bits are set.

This gets rid of these during device resume:
[drm:cherryview_enable_rps] GT fifo had a previous error 1080000

While at it, move the assignments out of the if().

Cc: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1460570970-14073-1-git-send-email-ville.syrjala@linux.intel.com
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_reg.h
drivers/gpu/drm/i915/intel_pm.c

index d0a1928870ead44eb64488543ab88b5bcf93d715..03264fd30fdd0c600e4e4629ad5f254f810394c8 100644 (file)
@@ -6866,6 +6866,8 @@ enum skl_disp_power_wells {
 #define  VLV_SPAREG2H                          _MMIO(0xA194)
 
 #define  GTFIFODBG                             _MMIO(0x120000)
+#define    GT_FIFO_SBDEDICATE_FREE_ENTRY_CHV   (0x1f << 20)
+#define    GT_FIFO_FREE_ENTRIES_CHV            (0x7f << 13)
 #define    GT_FIFO_SBDROPERR                   (1<<6)
 #define    GT_FIFO_BLOBDROPERR                 (1<<5)
 #define    GT_FIFO_SB_READ_ABORTERR            (1<<4)
index b8e395ad05ac35cc98ca9183771e5527b015fa31..b7c218602c6e53cfca384ccd49b1b6c0e260f552 100644 (file)
@@ -4997,7 +4997,8 @@ static void gen6_enable_rps(struct drm_device *dev)
        I915_WRITE(GEN6_RC_STATE, 0);
 
        /* Clear the DBG now so we don't confuse earlier errors */
-       if ((gtfifodbg = I915_READ(GTFIFODBG))) {
+       gtfifodbg = I915_READ(GTFIFODBG);
+       if (gtfifodbg) {
                DRM_ERROR("GT fifo had a previous error %x\n", gtfifodbg);
                I915_WRITE(GTFIFODBG, gtfifodbg);
        }
@@ -5528,7 +5529,8 @@ static void cherryview_enable_rps(struct drm_device *dev)
 
        WARN_ON(!mutex_is_locked(&dev_priv->rps.hw_lock));
 
-       gtfifodbg = I915_READ(GTFIFODBG);
+       gtfifodbg = I915_READ(GTFIFODBG) & ~(GT_FIFO_SBDEDICATE_FREE_ENTRY_CHV |
+                                            GT_FIFO_FREE_ENTRIES_CHV);
        if (gtfifodbg) {
                DRM_DEBUG_DRIVER("GT fifo had a previous error %x\n",
                                 gtfifodbg);
@@ -5627,7 +5629,8 @@ static void valleyview_enable_rps(struct drm_device *dev)
 
        valleyview_check_pctx(dev_priv);
 
-       if ((gtfifodbg = I915_READ(GTFIFODBG))) {
+       gtfifodbg = I915_READ(GTFIFODBG);
+       if (gtfifodbg) {
                DRM_DEBUG_DRIVER("GT fifo had a previous error %x\n",
                                 gtfifodbg);
                I915_WRITE(GTFIFODBG, gtfifodbg);