Commit cd4891e4 authored by Ville Syrjälä's avatar Ville Syrjälä

drm/i915/fbc: Move the "recompress on activate" to a central place

On ILK+ we current do a nuke right after activating FBC. If my
memory isn't playing tricks on me this is actially required if
FBC didn't stay disabled for a full frame. In that case the
deactivate+reactivate may not invalidate the cfb. I'd have to
double chekc to be sure though.

So let's keep the nuke, and just extend it backwards to cover
all the platforms by doing it a bit higher up.
Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210702204603.596-4-ville.syrjala@linux.intel.com
parent 287d00d4
...@@ -232,16 +232,16 @@ static void i965_fbc_recompress(struct drm_i915_private *dev_priv) ...@@ -232,16 +232,16 @@ static void i965_fbc_recompress(struct drm_i915_private *dev_priv)
/* This function forces a CFB recompression through the nuke operation. */ /* This function forces a CFB recompression through the nuke operation. */
static void snb_fbc_recompress(struct drm_i915_private *dev_priv) static void snb_fbc_recompress(struct drm_i915_private *dev_priv)
{ {
struct intel_fbc *fbc = &dev_priv->fbc;
trace_intel_fbc_nuke(fbc->crtc);
intel_de_write(dev_priv, MSG_FBC_REND_STATE, FBC_REND_NUKE); intel_de_write(dev_priv, MSG_FBC_REND_STATE, FBC_REND_NUKE);
intel_de_posting_read(dev_priv, MSG_FBC_REND_STATE); intel_de_posting_read(dev_priv, MSG_FBC_REND_STATE);
} }
static void intel_fbc_recompress(struct drm_i915_private *dev_priv) static void intel_fbc_recompress(struct drm_i915_private *dev_priv)
{ {
struct intel_fbc *fbc = &dev_priv->fbc;
trace_intel_fbc_nuke(fbc->crtc);
if (DISPLAY_VER(dev_priv) >= 6) if (DISPLAY_VER(dev_priv) >= 6)
snb_fbc_recompress(dev_priv); snb_fbc_recompress(dev_priv);
else if (DISPLAY_VER(dev_priv) >= 4) else if (DISPLAY_VER(dev_priv) >= 4)
...@@ -280,8 +280,6 @@ static void ilk_fbc_activate(struct drm_i915_private *dev_priv) ...@@ -280,8 +280,6 @@ static void ilk_fbc_activate(struct drm_i915_private *dev_priv)
params->fence_y_offset); params->fence_y_offset);
/* enable it... */ /* enable it... */
intel_de_write(dev_priv, ILK_DPFC_CONTROL, dpfc_ctl | DPFC_CTL_EN); intel_de_write(dev_priv, ILK_DPFC_CONTROL, dpfc_ctl | DPFC_CTL_EN);
intel_fbc_recompress(dev_priv);
} }
static void ilk_fbc_deactivate(struct drm_i915_private *dev_priv) static void ilk_fbc_deactivate(struct drm_i915_private *dev_priv)
...@@ -339,8 +337,6 @@ static void gen7_fbc_activate(struct drm_i915_private *dev_priv) ...@@ -339,8 +337,6 @@ static void gen7_fbc_activate(struct drm_i915_private *dev_priv)
dpfc_ctl |= FBC_CTL_FALSE_COLOR; dpfc_ctl |= FBC_CTL_FALSE_COLOR;
intel_de_write(dev_priv, ILK_DPFC_CONTROL, dpfc_ctl | DPFC_CTL_EN); intel_de_write(dev_priv, ILK_DPFC_CONTROL, dpfc_ctl | DPFC_CTL_EN);
intel_fbc_recompress(dev_priv);
} }
static bool intel_fbc_hw_is_active(struct drm_i915_private *dev_priv) static bool intel_fbc_hw_is_active(struct drm_i915_private *dev_priv)
...@@ -402,6 +398,12 @@ bool intel_fbc_is_active(struct drm_i915_private *dev_priv) ...@@ -402,6 +398,12 @@ bool intel_fbc_is_active(struct drm_i915_private *dev_priv)
return dev_priv->fbc.active; return dev_priv->fbc.active;
} }
static void intel_fbc_activate(struct drm_i915_private *dev_priv)
{
intel_fbc_hw_activate(dev_priv);
intel_fbc_recompress(dev_priv);
}
static void intel_fbc_deactivate(struct drm_i915_private *dev_priv, static void intel_fbc_deactivate(struct drm_i915_private *dev_priv,
const char *reason) const char *reason)
{ {
...@@ -1088,7 +1090,7 @@ static void __intel_fbc_post_update(struct intel_crtc *crtc) ...@@ -1088,7 +1090,7 @@ static void __intel_fbc_post_update(struct intel_crtc *crtc)
return; return;
if (!fbc->busy_bits) if (!fbc->busy_bits)
intel_fbc_hw_activate(dev_priv); intel_fbc_activate(dev_priv);
else else
intel_fbc_deactivate(dev_priv, "frontbuffer write"); intel_fbc_deactivate(dev_priv, "frontbuffer write");
} }
......
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