Commit 529b43df authored by Ville Syrjälä's avatar Ville Syrjälä

drm/i915/fbc: Streamline frontbuffer busy bits handling

If the frontbuffer bits say this fbc instance isn't affected just
skip the whole thing.
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220315140001.1172-3-ville.syrjala@linux.intel.comReviewed-by: default avatarMika Kahola <mika.kahola@intel.com>
parent 20bea20a
...@@ -1273,6 +1273,7 @@ static void __intel_fbc_disable(struct intel_fbc *fbc) ...@@ -1273,6 +1273,7 @@ static void __intel_fbc_disable(struct intel_fbc *fbc)
__intel_fbc_cleanup_cfb(fbc); __intel_fbc_cleanup_cfb(fbc);
fbc->state.plane = NULL; fbc->state.plane = NULL;
fbc->busy_bits = 0;
} }
static void __intel_fbc_post_update(struct intel_fbc *fbc) static void __intel_fbc_post_update(struct intel_fbc *fbc)
...@@ -1328,11 +1329,14 @@ static void __intel_fbc_invalidate(struct intel_fbc *fbc, ...@@ -1328,11 +1329,14 @@ static void __intel_fbc_invalidate(struct intel_fbc *fbc,
mutex_lock(&fbc->lock); mutex_lock(&fbc->lock);
fbc->busy_bits |= intel_fbc_get_frontbuffer_bit(fbc) & frontbuffer_bits; frontbuffer_bits &= intel_fbc_get_frontbuffer_bit(fbc);
if (!frontbuffer_bits)
goto out;
if (fbc->state.plane && fbc->busy_bits) fbc->busy_bits |= frontbuffer_bits;
intel_fbc_deactivate(fbc, "frontbuffer write"); intel_fbc_deactivate(fbc, "frontbuffer write");
out:
mutex_unlock(&fbc->lock); mutex_unlock(&fbc->lock);
} }
...@@ -1354,18 +1358,22 @@ static void __intel_fbc_flush(struct intel_fbc *fbc, ...@@ -1354,18 +1358,22 @@ static void __intel_fbc_flush(struct intel_fbc *fbc,
{ {
mutex_lock(&fbc->lock); mutex_lock(&fbc->lock);
frontbuffer_bits &= intel_fbc_get_frontbuffer_bit(fbc);
if (!frontbuffer_bits)
goto out;
fbc->busy_bits &= ~frontbuffer_bits; fbc->busy_bits &= ~frontbuffer_bits;
if (origin == ORIGIN_FLIP || origin == ORIGIN_CURSOR_UPDATE) if (origin == ORIGIN_FLIP || origin == ORIGIN_CURSOR_UPDATE)
goto out; goto out;
if (!fbc->busy_bits && fbc->state.plane && if (fbc->busy_bits)
(frontbuffer_bits & intel_fbc_get_frontbuffer_bit(fbc))) { goto out;
if (fbc->active)
intel_fbc_nuke(fbc); if (fbc->active)
else if (!fbc->flip_pending) intel_fbc_nuke(fbc);
__intel_fbc_post_update(fbc); else if (!fbc->flip_pending)
} __intel_fbc_post_update(fbc);
out: out:
mutex_unlock(&fbc->lock); mutex_unlock(&fbc->lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment