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

We have more than one sprite, so a boolean simply won't cut it.
Turn sprite_scaling_enabled into a bitmask and track the state
of sprite scaler for each sprite independently.

Signed-off-by: Ville Syrj?l? <ville.syrjala at linux.intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h     |    2 +-
 drivers/gpu/drm/i915/intel_sprite.c |   11 ++++++-----
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 51b36c1..4cf0e15 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -473,7 +473,7 @@ typedef struct drm_i915_private {

        /* overlay */
        struct intel_overlay *overlay;
-       bool sprite_scaling_enabled;
+       unsigned int sprite_scaling_enabled;

        /* LVDS info */
        int backlight_level;  /* restore backlight to this value */
diff --git a/drivers/gpu/drm/i915/intel_sprite.c 
b/drivers/gpu/drm/i915/intel_sprite.c
index 88fdd0d..97740ee 100644
--- a/drivers/gpu/drm/i915/intel_sprite.c
+++ b/drivers/gpu/drm/i915/intel_sprite.c
@@ -315,15 +315,16 @@ ivb_prepare_plane(struct drm_plane *plane)
         */
        if (regs->scale & SPRITE_SCALE_ENABLE) {
                if (!dev_priv->sprite_scaling_enabled) {
-                       dev_priv->sprite_scaling_enabled = true;
+                       dev_priv->sprite_scaling_enabled |= 1 << pipe;
                        intel_update_watermarks(dev);
                        intel_wait_for_vblank(dev, pipe);
                }
        } else {
-               if (dev_priv->sprite_scaling_enabled) {
-                       dev_priv->sprite_scaling_enabled = false;
+               if (dev_priv->sprite_scaling_enabled & (1 << pipe)) {
+                       dev_priv->sprite_scaling_enabled &= ~(1 << pipe);
                        /* potentially re-enable LP watermarks */
-                       intel_update_watermarks(dev);
+                       if (!dev_priv->sprite_scaling_enabled)
+                               intel_update_watermarks(dev);
                }
        }
 }
@@ -359,7 +360,7 @@ ivb_disable_plane(struct drm_plane *plane)
        ivb_commit_plane(plane);
        POSTING_READ(SPRSURF(pipe));

-       dev_priv->sprite_scaling_enabled = false;
+       dev_priv->sprite_scaling_enabled &= ~(1 << pipe);
        intel_update_watermarks(dev);
 }

-- 
1.7.8.6

Reply via email to