drm/i915: Add NEEDS_FORCEWAKE() checks for vlv/chv
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Thu, 22 Oct 2015 12:35:00 +0000 (15:35 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Mon, 26 Oct 2015 14:28:46 +0000 (16:28 +0200)
Include an early NEEDS_FORCEWAKE() check for vlv and chv.
Hopefully that will avoid doing so many range checks in for many
register accesses (at least for all display registers).

Note that vlv already had the check in the write path since it shares
the gen6+ code for that.

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

index f38e88b1f5e89d0b87e787dd486811bc4d5af688..f0f97b288d0e3fdf4954febab36cd43999955620 100644 (file)
@@ -726,7 +726,9 @@ static u##x \
 vlv_read##x(struct drm_i915_private *dev_priv, off_t reg, bool trace) { \
        enum forcewake_domains fw_engine = 0; \
        GEN6_READ_HEADER(x); \
-       if (FORCEWAKE_VLV_RENDER_RANGE_OFFSET(reg)) \
+       if (!NEEDS_FORCE_WAKE(reg)) \
+               fw_engine = 0; \
+       else if (FORCEWAKE_VLV_RENDER_RANGE_OFFSET(reg)) \
                fw_engine = FORCEWAKE_RENDER; \
        else if (FORCEWAKE_VLV_MEDIA_RANGE_OFFSET(reg)) \
                fw_engine = FORCEWAKE_MEDIA; \
@@ -741,7 +743,9 @@ static u##x \
 chv_read##x(struct drm_i915_private *dev_priv, off_t reg, bool trace) { \
        enum forcewake_domains fw_engine = 0; \
        GEN6_READ_HEADER(x); \
-       if (FORCEWAKE_CHV_RENDER_RANGE_OFFSET(reg)) \
+       if (!NEEDS_FORCE_WAKE(reg)) \
+               fw_engine = 0; \
+       else if (FORCEWAKE_CHV_RENDER_RANGE_OFFSET(reg)) \
                fw_engine = FORCEWAKE_RENDER; \
        else if (FORCEWAKE_CHV_MEDIA_RANGE_OFFSET(reg)) \
                fw_engine = FORCEWAKE_MEDIA; \
@@ -935,7 +939,8 @@ static void \
 chv_write##x(struct drm_i915_private *dev_priv, off_t reg, u##x val, bool trace) { \
        enum forcewake_domains fw_engine = 0; \
        GEN6_WRITE_HEADER; \
-       if (is_gen8_shadowed(dev_priv, reg)) \
+       if (!NEEDS_FORCE_WAKE(reg) || \
+           is_gen8_shadowed(dev_priv, reg)) \
                fw_engine = 0; \
        else if (FORCEWAKE_CHV_RENDER_RANGE_OFFSET(reg)) \
                fw_engine = FORCEWAKE_RENDER; \