Commit e35fef21 authored by Paulo Zanoni's avatar Paulo Zanoni Committed by Daniel Vetter

drm/i915: change dev_priv->fbc.plane to dev_priv->fbc.crtc

Since the mapping from CRTCs to planes is fixed, looking at the CRTC
is essentially the same as looking at the plane. Also, the next
patches wil start using the frontbuffer_bits macros, and they take the
pipe as the parameter instead of the plane, and this could differ on
gens 2 and 3.

Another nice thing is that we don't risk accidentally initializing
things to PLANE_A if we don't set the value before it is used for the
first time. But this shouldn't be a problem with the current code.

V2: Rebase.

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> (v1)
Signed-off-by: default avatarPaulo Zanoni <paulo.r.zanoni@intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 104618b3
...@@ -775,7 +775,7 @@ struct i915_fbc { ...@@ -775,7 +775,7 @@ struct i915_fbc {
unsigned long uncompressed_size; unsigned long uncompressed_size;
unsigned threshold; unsigned threshold;
unsigned int fb_id; unsigned int fb_id;
enum plane plane; struct intel_crtc *crtc;
int y; int y;
struct drm_mm_node compressed_fb; struct drm_mm_node compressed_fb;
......
...@@ -4277,11 +4277,10 @@ static void intel_crtc_disable_planes(struct drm_crtc *crtc) ...@@ -4277,11 +4277,10 @@ static void intel_crtc_disable_planes(struct drm_crtc *crtc)
struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_crtc *intel_crtc = to_intel_crtc(crtc); struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
int pipe = intel_crtc->pipe; int pipe = intel_crtc->pipe;
int plane = intel_crtc->plane;
intel_crtc_wait_for_pending_flips(crtc); intel_crtc_wait_for_pending_flips(crtc);
if (dev_priv->fbc.plane == plane) if (dev_priv->fbc.crtc == intel_crtc)
intel_fbc_disable(dev); intel_fbc_disable(dev);
hsw_disable_ips(intel_crtc); hsw_disable_ips(intel_crtc);
...@@ -11932,7 +11931,7 @@ intel_check_primary_plane(struct drm_plane *plane, ...@@ -11932,7 +11931,7 @@ intel_check_primary_plane(struct drm_plane *plane,
*/ */
if (intel_crtc->primary_enabled && if (intel_crtc->primary_enabled &&
INTEL_INFO(dev)->gen <= 4 && !IS_G4X(dev) && INTEL_INFO(dev)->gen <= 4 && !IS_G4X(dev) &&
dev_priv->fbc.plane == intel_crtc->plane && dev_priv->fbc.crtc == intel_crtc &&
state->base.rotation != BIT(DRM_ROTATE_0)) { state->base.rotation != BIT(DRM_ROTATE_0)) {
intel_crtc->atomic.disable_fbc = true; intel_crtc->atomic.disable_fbc = true;
} }
......
...@@ -369,7 +369,7 @@ static void intel_fbc_work_fn(struct work_struct *__work) ...@@ -369,7 +369,7 @@ static void intel_fbc_work_fn(struct work_struct *__work)
if (work->crtc->primary->fb == work->fb) { if (work->crtc->primary->fb == work->fb) {
dev_priv->display.enable_fbc(work->crtc); dev_priv->display.enable_fbc(work->crtc);
dev_priv->fbc.plane = to_intel_crtc(work->crtc)->plane; dev_priv->fbc.crtc = to_intel_crtc(work->crtc);
dev_priv->fbc.fb_id = work->crtc->primary->fb->base.id; dev_priv->fbc.fb_id = work->crtc->primary->fb->base.id;
dev_priv->fbc.y = work->crtc->y; dev_priv->fbc.y = work->crtc->y;
} }
...@@ -460,7 +460,7 @@ void intel_fbc_disable(struct drm_device *dev) ...@@ -460,7 +460,7 @@ void intel_fbc_disable(struct drm_device *dev)
return; return;
dev_priv->display.disable_fbc(dev); dev_priv->display.disable_fbc(dev);
dev_priv->fbc.plane = -1; dev_priv->fbc.crtc = NULL;
} }
static bool set_no_fbc_reason(struct drm_i915_private *dev_priv, static bool set_no_fbc_reason(struct drm_i915_private *dev_priv,
...@@ -612,7 +612,7 @@ void intel_fbc_update(struct drm_device *dev) ...@@ -612,7 +612,7 @@ void intel_fbc_update(struct drm_device *dev)
* cannot be unpinned (and have its GTT offset and fence revoked) * cannot be unpinned (and have its GTT offset and fence revoked)
* without first being decoupled from the scanout and FBC disabled. * without first being decoupled from the scanout and FBC disabled.
*/ */
if (dev_priv->fbc.plane == intel_crtc->plane && if (dev_priv->fbc.crtc == intel_crtc &&
dev_priv->fbc.fb_id == fb->base.id && dev_priv->fbc.fb_id == fb->base.id &&
dev_priv->fbc.y == crtc->y) dev_priv->fbc.y == crtc->y)
return; return;
......
...@@ -993,7 +993,7 @@ intel_pre_disable_primary(struct drm_crtc *crtc) ...@@ -993,7 +993,7 @@ intel_pre_disable_primary(struct drm_crtc *crtc)
struct intel_crtc *intel_crtc = to_intel_crtc(crtc); struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
mutex_lock(&dev->struct_mutex); mutex_lock(&dev->struct_mutex);
if (dev_priv->fbc.plane == intel_crtc->plane) if (dev_priv->fbc.crtc == intel_crtc)
intel_fbc_disable(dev); intel_fbc_disable(dev);
mutex_unlock(&dev->struct_mutex); mutex_unlock(&dev->struct_mutex);
......
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