From: Ville Syrjälä <ville.syrj...@linux.intel.com>

There should be no need to do posting reads between all the cursor
register accessess. Let's just drop them.

v2: Rebase due to I915_WRITE_FW() and uncore.lock

Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>
Reviewed-by: Chris Wilson <ch...@chris-wilson.co.uk> #v1
---
 drivers/gpu/drm/i915/intel_display.c | 32 +++++++++++++++-----------------
 1 file changed, 15 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c 
b/drivers/gpu/drm/i915/intel_display.c
index bc0e71fda90c..bba763b03d28 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -9223,30 +9223,28 @@ static void i845_update_cursor(struct intel_plane 
*plane,
                 * whilst the cursor is disabled.
                 */
                I915_WRITE_FW(CURCNTR(PIPE_A), 0);
-               POSTING_READ_FW(CURCNTR(PIPE_A));
                plane->cursor.cntl = 0;
        }
 
-       if (plane->cursor.base != base) {
+       if (plane->cursor.base != base)
                I915_WRITE_FW(CURBASE(PIPE_A), base);
-               plane->cursor.base = base;
-       }
 
-       if (plane->cursor.size != size) {
+       if (plane->cursor.size != size)
                I915_WRITE_FW(CURSIZE, size);
-               plane->cursor.size = size;
-       }
 
        if (cntl)
                I915_WRITE_FW(CURPOS(PIPE_A), pos);
 
-       if (plane->cursor.cntl != cntl) {
+       if (plane->cursor.cntl != cntl)
                I915_WRITE_FW(CURCNTR(PIPE_A), cntl);
-               POSTING_READ_FW(CURCNTR(PIPE_A));
-               plane->cursor.cntl = cntl;
-       }
+
+       POSTING_READ_FW(CURCNTR(PIPE_A));
 
        spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
+
+       plane->cursor.cntl = cntl;
+       plane->cursor.base = base;
+       plane->cursor.size = size;
 }
 
 static void i845_disable_cursor(struct intel_plane *plane,
@@ -9309,21 +9307,21 @@ static void i9xx_update_cursor(struct intel_plane 
*plane,
 
        spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
 
-       if (plane->cursor.cntl != cntl) {
+       if (plane->cursor.cntl != cntl)
                I915_WRITE_FW(CURCNTR(pipe), cntl);
-               POSTING_READ_FW(CURCNTR(pipe));
-               plane->cursor.cntl = cntl;
-       }
 
        if (cntl)
                I915_WRITE_FW(CURPOS(pipe), pos);
 
-       /* and commit changes on next vblank */
-       I915_WRITE_FW(CURBASE(pipe), base);
+       if (plane->cursor.cntl != cntl ||
+           plane->cursor.base != base)
+               I915_WRITE_FW(CURBASE(pipe), base);
+
        POSTING_READ_FW(CURBASE(pipe));
 
        spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
 
+       plane->cursor.cntl = cntl;
        plane->cursor.base = base;
 }
 
-- 
2.10.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to