drm/i915: Move fbc members out of line
Signed-off-by: Ben Widawsky <ben@bwidawsk.net> [danvet: Resolve conflict with Damien's FBC_CHIP_DEFAULT no fbc reason.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
b2f21b4dfd
commit
5c3fe8b03e
6 changed files with 69 additions and 67 deletions
|
@ -1492,7 +1492,7 @@ static int i915_fbc_status(struct seq_file *m, void *unused)
|
||||||
seq_puts(m, "FBC enabled\n");
|
seq_puts(m, "FBC enabled\n");
|
||||||
} else {
|
} else {
|
||||||
seq_puts(m, "FBC disabled: ");
|
seq_puts(m, "FBC disabled: ");
|
||||||
switch (dev_priv->no_fbc_reason) {
|
switch (dev_priv->fbc.no_fbc_reason) {
|
||||||
case FBC_NO_OUTPUT:
|
case FBC_NO_OUTPUT:
|
||||||
seq_puts(m, "no outputs");
|
seq_puts(m, "no outputs");
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -528,18 +528,36 @@ struct i915_hw_context {
|
||||||
struct i915_ctx_hang_stats hang_stats;
|
struct i915_ctx_hang_stats hang_stats;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum no_fbc_reason {
|
struct i915_fbc {
|
||||||
FBC_NO_OUTPUT, /* no outputs enabled to compress */
|
unsigned long size;
|
||||||
FBC_STOLEN_TOO_SMALL, /* not enough space to hold compressed buffers */
|
unsigned int fb_id;
|
||||||
FBC_UNSUPPORTED_MODE, /* interlace or doublescanned mode */
|
enum plane plane;
|
||||||
FBC_MODE_TOO_LARGE, /* mode too large for compression */
|
int y;
|
||||||
FBC_BAD_PLANE, /* fbc not supported on plane */
|
|
||||||
FBC_NOT_TILED, /* buffer not tiled */
|
struct drm_mm_node *compressed_fb;
|
||||||
FBC_MULTIPLE_PIPES, /* more than one pipe active */
|
struct drm_mm_node *compressed_llb;
|
||||||
FBC_MODULE_PARAM,
|
|
||||||
FBC_CHIP_DEFAULT, /* disabled by default on this chip */
|
struct intel_fbc_work {
|
||||||
|
struct delayed_work work;
|
||||||
|
struct drm_crtc *crtc;
|
||||||
|
struct drm_framebuffer *fb;
|
||||||
|
int interval;
|
||||||
|
} *fbc_work;
|
||||||
|
|
||||||
|
enum {
|
||||||
|
FBC_NO_OUTPUT, /* no outputs enabled to compress */
|
||||||
|
FBC_STOLEN_TOO_SMALL, /* not enough space for buffers */
|
||||||
|
FBC_UNSUPPORTED_MODE, /* interlace or doublescanned mode */
|
||||||
|
FBC_MODE_TOO_LARGE, /* mode too large for compression */
|
||||||
|
FBC_BAD_PLANE, /* fbc not supported on plane */
|
||||||
|
FBC_NOT_TILED, /* buffer not tiled */
|
||||||
|
FBC_MULTIPLE_PIPES, /* more than one pipe active */
|
||||||
|
FBC_MODULE_PARAM,
|
||||||
|
FBC_CHIP_DEFAULT, /* disabled by default on this chip */
|
||||||
|
} no_fbc_reason;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
enum intel_pch {
|
enum intel_pch {
|
||||||
PCH_NONE = 0, /* No PCH present */
|
PCH_NONE = 0, /* No PCH present */
|
||||||
PCH_IBX, /* Ibexpeak PCH */
|
PCH_IBX, /* Ibexpeak PCH */
|
||||||
|
@ -1059,12 +1077,7 @@ typedef struct drm_i915_private {
|
||||||
|
|
||||||
int num_plane;
|
int num_plane;
|
||||||
|
|
||||||
unsigned long cfb_size;
|
struct i915_fbc fbc;
|
||||||
unsigned int cfb_fb;
|
|
||||||
enum plane cfb_plane;
|
|
||||||
int cfb_y;
|
|
||||||
struct intel_fbc_work *fbc_work;
|
|
||||||
|
|
||||||
struct intel_opregion opregion;
|
struct intel_opregion opregion;
|
||||||
struct intel_vbt_data vbt;
|
struct intel_vbt_data vbt;
|
||||||
|
|
||||||
|
@ -1142,11 +1155,6 @@ typedef struct drm_i915_private {
|
||||||
/* Haswell power well */
|
/* Haswell power well */
|
||||||
struct i915_power_well power_well;
|
struct i915_power_well power_well;
|
||||||
|
|
||||||
enum no_fbc_reason no_fbc_reason;
|
|
||||||
|
|
||||||
struct drm_mm_node *compressed_fb;
|
|
||||||
struct drm_mm_node *compressed_llb;
|
|
||||||
|
|
||||||
struct i915_gpu_error gpu_error;
|
struct i915_gpu_error gpu_error;
|
||||||
|
|
||||||
struct drm_i915_gem_object *vlv_pctx;
|
struct drm_i915_gem_object *vlv_pctx;
|
||||||
|
|
|
@ -120,7 +120,7 @@ static int i915_setup_compression(struct drm_device *dev, int size)
|
||||||
if (!compressed_llb)
|
if (!compressed_llb)
|
||||||
goto err_fb;
|
goto err_fb;
|
||||||
|
|
||||||
dev_priv->compressed_llb = compressed_llb;
|
dev_priv->fbc.compressed_llb = compressed_llb;
|
||||||
|
|
||||||
I915_WRITE(FBC_CFB_BASE,
|
I915_WRITE(FBC_CFB_BASE,
|
||||||
dev_priv->mm.stolen_base + compressed_fb->start);
|
dev_priv->mm.stolen_base + compressed_fb->start);
|
||||||
|
@ -128,8 +128,8 @@ static int i915_setup_compression(struct drm_device *dev, int size)
|
||||||
dev_priv->mm.stolen_base + compressed_llb->start);
|
dev_priv->mm.stolen_base + compressed_llb->start);
|
||||||
}
|
}
|
||||||
|
|
||||||
dev_priv->compressed_fb = compressed_fb;
|
dev_priv->fbc.compressed_fb = compressed_fb;
|
||||||
dev_priv->cfb_size = size;
|
dev_priv->fbc.size = size;
|
||||||
|
|
||||||
DRM_DEBUG_KMS("reserved %d bytes of contiguous stolen space for FBC\n",
|
DRM_DEBUG_KMS("reserved %d bytes of contiguous stolen space for FBC\n",
|
||||||
size);
|
size);
|
||||||
|
@ -150,7 +150,7 @@ int i915_gem_stolen_setup_compression(struct drm_device *dev, int size)
|
||||||
if (dev_priv->mm.stolen_base == 0)
|
if (dev_priv->mm.stolen_base == 0)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
if (size < dev_priv->cfb_size)
|
if (size < dev_priv->fbc.size)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Release any current block */
|
/* Release any current block */
|
||||||
|
@ -163,16 +163,16 @@ void i915_gem_stolen_cleanup_compression(struct drm_device *dev)
|
||||||
{
|
{
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
|
|
||||||
if (dev_priv->cfb_size == 0)
|
if (dev_priv->fbc.size == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (dev_priv->compressed_fb)
|
if (dev_priv->fbc.compressed_fb)
|
||||||
drm_mm_put_block(dev_priv->compressed_fb);
|
drm_mm_put_block(dev_priv->fbc.compressed_fb);
|
||||||
|
|
||||||
if (dev_priv->compressed_llb)
|
if (dev_priv->fbc.compressed_llb)
|
||||||
drm_mm_put_block(dev_priv->compressed_llb);
|
drm_mm_put_block(dev_priv->fbc.compressed_llb);
|
||||||
|
|
||||||
dev_priv->cfb_size = 0;
|
dev_priv->fbc.size = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void i915_gem_cleanup_stolen(struct drm_device *dev)
|
void i915_gem_cleanup_stolen(struct drm_device *dev)
|
||||||
|
|
|
@ -3408,7 +3408,7 @@ static void ironlake_crtc_disable(struct drm_crtc *crtc)
|
||||||
intel_crtc_wait_for_pending_flips(crtc);
|
intel_crtc_wait_for_pending_flips(crtc);
|
||||||
drm_vblank_off(dev, pipe);
|
drm_vblank_off(dev, pipe);
|
||||||
|
|
||||||
if (dev_priv->cfb_plane == plane)
|
if (dev_priv->fbc.plane == plane)
|
||||||
intel_disable_fbc(dev);
|
intel_disable_fbc(dev);
|
||||||
|
|
||||||
intel_crtc_update_cursor(crtc, false);
|
intel_crtc_update_cursor(crtc, false);
|
||||||
|
@ -3481,7 +3481,7 @@ static void haswell_crtc_disable(struct drm_crtc *crtc)
|
||||||
drm_vblank_off(dev, pipe);
|
drm_vblank_off(dev, pipe);
|
||||||
|
|
||||||
/* FBC must be disabled before disabling the plane on HSW. */
|
/* FBC must be disabled before disabling the plane on HSW. */
|
||||||
if (dev_priv->cfb_plane == plane)
|
if (dev_priv->fbc.plane == plane)
|
||||||
intel_disable_fbc(dev);
|
intel_disable_fbc(dev);
|
||||||
|
|
||||||
hsw_disable_ips(intel_crtc);
|
hsw_disable_ips(intel_crtc);
|
||||||
|
@ -3720,7 +3720,7 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc)
|
||||||
intel_crtc_wait_for_pending_flips(crtc);
|
intel_crtc_wait_for_pending_flips(crtc);
|
||||||
drm_vblank_off(dev, pipe);
|
drm_vblank_off(dev, pipe);
|
||||||
|
|
||||||
if (dev_priv->cfb_plane == plane)
|
if (dev_priv->fbc.plane == plane)
|
||||||
intel_disable_fbc(dev);
|
intel_disable_fbc(dev);
|
||||||
|
|
||||||
intel_crtc_dpms_overlay(intel_crtc, false);
|
intel_crtc_dpms_overlay(intel_crtc, false);
|
||||||
|
|
|
@ -549,13 +549,6 @@ struct intel_unpin_work {
|
||||||
bool enable_stall_check;
|
bool enable_stall_check;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct intel_fbc_work {
|
|
||||||
struct delayed_work work;
|
|
||||||
struct drm_crtc *crtc;
|
|
||||||
struct drm_framebuffer *fb;
|
|
||||||
int interval;
|
|
||||||
};
|
|
||||||
|
|
||||||
int intel_pch_rawclk(struct drm_device *dev);
|
int intel_pch_rawclk(struct drm_device *dev);
|
||||||
|
|
||||||
int intel_connector_update_modes(struct drm_connector *connector,
|
int intel_connector_update_modes(struct drm_connector *connector,
|
||||||
|
|
|
@ -87,7 +87,7 @@ static void i8xx_enable_fbc(struct drm_crtc *crtc, unsigned long interval)
|
||||||
int plane, i;
|
int plane, i;
|
||||||
u32 fbc_ctl, fbc_ctl2;
|
u32 fbc_ctl, fbc_ctl2;
|
||||||
|
|
||||||
cfb_pitch = dev_priv->cfb_size / FBC_LL_SIZE;
|
cfb_pitch = dev_priv->fbc.size / FBC_LL_SIZE;
|
||||||
if (fb->pitches[0] < cfb_pitch)
|
if (fb->pitches[0] < cfb_pitch)
|
||||||
cfb_pitch = fb->pitches[0];
|
cfb_pitch = fb->pitches[0];
|
||||||
|
|
||||||
|
@ -326,7 +326,7 @@ static void intel_fbc_work_fn(struct work_struct *__work)
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
|
|
||||||
mutex_lock(&dev->struct_mutex);
|
mutex_lock(&dev->struct_mutex);
|
||||||
if (work == dev_priv->fbc_work) {
|
if (work == dev_priv->fbc.fbc_work) {
|
||||||
/* Double check that we haven't switched fb without cancelling
|
/* Double check that we haven't switched fb without cancelling
|
||||||
* the prior work.
|
* the prior work.
|
||||||
*/
|
*/
|
||||||
|
@ -334,12 +334,12 @@ static void intel_fbc_work_fn(struct work_struct *__work)
|
||||||
dev_priv->display.enable_fbc(work->crtc,
|
dev_priv->display.enable_fbc(work->crtc,
|
||||||
work->interval);
|
work->interval);
|
||||||
|
|
||||||
dev_priv->cfb_plane = to_intel_crtc(work->crtc)->plane;
|
dev_priv->fbc.plane = to_intel_crtc(work->crtc)->plane;
|
||||||
dev_priv->cfb_fb = work->crtc->fb->base.id;
|
dev_priv->fbc.fb_id = work->crtc->fb->base.id;
|
||||||
dev_priv->cfb_y = work->crtc->y;
|
dev_priv->fbc.y = work->crtc->y;
|
||||||
}
|
}
|
||||||
|
|
||||||
dev_priv->fbc_work = NULL;
|
dev_priv->fbc.fbc_work = NULL;
|
||||||
}
|
}
|
||||||
mutex_unlock(&dev->struct_mutex);
|
mutex_unlock(&dev->struct_mutex);
|
||||||
|
|
||||||
|
@ -348,25 +348,25 @@ static void intel_fbc_work_fn(struct work_struct *__work)
|
||||||
|
|
||||||
static void intel_cancel_fbc_work(struct drm_i915_private *dev_priv)
|
static void intel_cancel_fbc_work(struct drm_i915_private *dev_priv)
|
||||||
{
|
{
|
||||||
if (dev_priv->fbc_work == NULL)
|
if (dev_priv->fbc.fbc_work == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
DRM_DEBUG_KMS("cancelling pending FBC enable\n");
|
DRM_DEBUG_KMS("cancelling pending FBC enable\n");
|
||||||
|
|
||||||
/* Synchronisation is provided by struct_mutex and checking of
|
/* Synchronisation is provided by struct_mutex and checking of
|
||||||
* dev_priv->fbc_work, so we can perform the cancellation
|
* dev_priv->fbc.fbc_work, so we can perform the cancellation
|
||||||
* entirely asynchronously.
|
* entirely asynchronously.
|
||||||
*/
|
*/
|
||||||
if (cancel_delayed_work(&dev_priv->fbc_work->work))
|
if (cancel_delayed_work(&dev_priv->fbc.fbc_work->work))
|
||||||
/* tasklet was killed before being run, clean up */
|
/* tasklet was killed before being run, clean up */
|
||||||
kfree(dev_priv->fbc_work);
|
kfree(dev_priv->fbc.fbc_work);
|
||||||
|
|
||||||
/* Mark the work as no longer wanted so that if it does
|
/* Mark the work as no longer wanted so that if it does
|
||||||
* wake-up (because the work was already running and waiting
|
* wake-up (because the work was already running and waiting
|
||||||
* for our mutex), it will discover that is no longer
|
* for our mutex), it will discover that is no longer
|
||||||
* necessary to run.
|
* necessary to run.
|
||||||
*/
|
*/
|
||||||
dev_priv->fbc_work = NULL;
|
dev_priv->fbc.fbc_work = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void intel_enable_fbc(struct drm_crtc *crtc, unsigned long interval)
|
static void intel_enable_fbc(struct drm_crtc *crtc, unsigned long interval)
|
||||||
|
@ -392,7 +392,7 @@ static void intel_enable_fbc(struct drm_crtc *crtc, unsigned long interval)
|
||||||
work->interval = interval;
|
work->interval = interval;
|
||||||
INIT_DELAYED_WORK(&work->work, intel_fbc_work_fn);
|
INIT_DELAYED_WORK(&work->work, intel_fbc_work_fn);
|
||||||
|
|
||||||
dev_priv->fbc_work = work;
|
dev_priv->fbc.fbc_work = work;
|
||||||
|
|
||||||
/* Delay the actual enabling to let pageflipping cease and the
|
/* Delay the actual enabling to let pageflipping cease and the
|
||||||
* display to settle before starting the compression. Note that
|
* display to settle before starting the compression. Note that
|
||||||
|
@ -418,7 +418,7 @@ void intel_disable_fbc(struct drm_device *dev)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
dev_priv->display.disable_fbc(dev);
|
dev_priv->display.disable_fbc(dev);
|
||||||
dev_priv->cfb_plane = -1;
|
dev_priv->fbc.plane = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -470,7 +470,8 @@ void intel_update_fbc(struct drm_device *dev)
|
||||||
!to_intel_crtc(tmp_crtc)->primary_disabled) {
|
!to_intel_crtc(tmp_crtc)->primary_disabled) {
|
||||||
if (crtc) {
|
if (crtc) {
|
||||||
DRM_DEBUG_KMS("more than one pipe active, disabling compression\n");
|
DRM_DEBUG_KMS("more than one pipe active, disabling compression\n");
|
||||||
dev_priv->no_fbc_reason = FBC_MULTIPLE_PIPES;
|
dev_priv->fbc.no_fbc_reason =
|
||||||
|
FBC_MULTIPLE_PIPES;
|
||||||
goto out_disable;
|
goto out_disable;
|
||||||
}
|
}
|
||||||
crtc = tmp_crtc;
|
crtc = tmp_crtc;
|
||||||
|
@ -479,7 +480,7 @@ void intel_update_fbc(struct drm_device *dev)
|
||||||
|
|
||||||
if (!crtc || crtc->fb == NULL) {
|
if (!crtc || crtc->fb == NULL) {
|
||||||
DRM_DEBUG_KMS("no output, disabling\n");
|
DRM_DEBUG_KMS("no output, disabling\n");
|
||||||
dev_priv->no_fbc_reason = FBC_NO_OUTPUT;
|
dev_priv->fbc.no_fbc_reason = FBC_NO_OUTPUT;
|
||||||
goto out_disable;
|
goto out_disable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -491,19 +492,19 @@ void intel_update_fbc(struct drm_device *dev)
|
||||||
if (i915_enable_fbc < 0 &&
|
if (i915_enable_fbc < 0 &&
|
||||||
INTEL_INFO(dev)->gen <= 7 && !IS_HASWELL(dev)) {
|
INTEL_INFO(dev)->gen <= 7 && !IS_HASWELL(dev)) {
|
||||||
DRM_DEBUG_KMS("disabled per chip default\n");
|
DRM_DEBUG_KMS("disabled per chip default\n");
|
||||||
dev_priv->no_fbc_reason = FBC_CHIP_DEFAULT;
|
dev_priv->fbc.no_fbc_reason = FBC_CHIP_DEFAULT;
|
||||||
goto out_disable;
|
goto out_disable;
|
||||||
}
|
}
|
||||||
if (!i915_enable_fbc) {
|
if (!i915_enable_fbc) {
|
||||||
DRM_DEBUG_KMS("fbc disabled per module param\n");
|
DRM_DEBUG_KMS("fbc disabled per module param\n");
|
||||||
dev_priv->no_fbc_reason = FBC_MODULE_PARAM;
|
dev_priv->fbc.no_fbc_reason = FBC_MODULE_PARAM;
|
||||||
goto out_disable;
|
goto out_disable;
|
||||||
}
|
}
|
||||||
if ((crtc->mode.flags & DRM_MODE_FLAG_INTERLACE) ||
|
if ((crtc->mode.flags & DRM_MODE_FLAG_INTERLACE) ||
|
||||||
(crtc->mode.flags & DRM_MODE_FLAG_DBLSCAN)) {
|
(crtc->mode.flags & DRM_MODE_FLAG_DBLSCAN)) {
|
||||||
DRM_DEBUG_KMS("mode incompatible with compression, "
|
DRM_DEBUG_KMS("mode incompatible with compression, "
|
||||||
"disabling\n");
|
"disabling\n");
|
||||||
dev_priv->no_fbc_reason = FBC_UNSUPPORTED_MODE;
|
dev_priv->fbc.no_fbc_reason = FBC_UNSUPPORTED_MODE;
|
||||||
goto out_disable;
|
goto out_disable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -517,13 +518,13 @@ void intel_update_fbc(struct drm_device *dev)
|
||||||
if ((crtc->mode.hdisplay > max_hdisplay) ||
|
if ((crtc->mode.hdisplay > max_hdisplay) ||
|
||||||
(crtc->mode.vdisplay > max_vdisplay)) {
|
(crtc->mode.vdisplay > max_vdisplay)) {
|
||||||
DRM_DEBUG_KMS("mode too large for compression, disabling\n");
|
DRM_DEBUG_KMS("mode too large for compression, disabling\n");
|
||||||
dev_priv->no_fbc_reason = FBC_MODE_TOO_LARGE;
|
dev_priv->fbc.no_fbc_reason = FBC_MODE_TOO_LARGE;
|
||||||
goto out_disable;
|
goto out_disable;
|
||||||
}
|
}
|
||||||
if ((IS_I915GM(dev) || IS_I945GM(dev) || IS_HASWELL(dev)) &&
|
if ((IS_I915GM(dev) || IS_I945GM(dev) || IS_HASWELL(dev)) &&
|
||||||
intel_crtc->plane != 0) {
|
intel_crtc->plane != 0) {
|
||||||
DRM_DEBUG_KMS("plane not 0, disabling compression\n");
|
DRM_DEBUG_KMS("plane not 0, disabling compression\n");
|
||||||
dev_priv->no_fbc_reason = FBC_BAD_PLANE;
|
dev_priv->fbc.no_fbc_reason = FBC_BAD_PLANE;
|
||||||
goto out_disable;
|
goto out_disable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -533,7 +534,7 @@ void intel_update_fbc(struct drm_device *dev)
|
||||||
if (obj->tiling_mode != I915_TILING_X ||
|
if (obj->tiling_mode != I915_TILING_X ||
|
||||||
obj->fence_reg == I915_FENCE_REG_NONE) {
|
obj->fence_reg == I915_FENCE_REG_NONE) {
|
||||||
DRM_DEBUG_KMS("framebuffer not tiled or fenced, disabling compression\n");
|
DRM_DEBUG_KMS("framebuffer not tiled or fenced, disabling compression\n");
|
||||||
dev_priv->no_fbc_reason = FBC_NOT_TILED;
|
dev_priv->fbc.no_fbc_reason = FBC_NOT_TILED;
|
||||||
goto out_disable;
|
goto out_disable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -543,7 +544,7 @@ void intel_update_fbc(struct drm_device *dev)
|
||||||
|
|
||||||
if (i915_gem_stolen_setup_compression(dev, intel_fb->obj->base.size)) {
|
if (i915_gem_stolen_setup_compression(dev, intel_fb->obj->base.size)) {
|
||||||
DRM_DEBUG_KMS("framebuffer too large, disabling compression\n");
|
DRM_DEBUG_KMS("framebuffer too large, disabling compression\n");
|
||||||
dev_priv->no_fbc_reason = FBC_STOLEN_TOO_SMALL;
|
dev_priv->fbc.no_fbc_reason = FBC_STOLEN_TOO_SMALL;
|
||||||
goto out_disable;
|
goto out_disable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -552,9 +553,9 @@ void intel_update_fbc(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->cfb_plane == intel_crtc->plane &&
|
if (dev_priv->fbc.plane == intel_crtc->plane &&
|
||||||
dev_priv->cfb_fb == fb->base.id &&
|
dev_priv->fbc.fb_id == fb->base.id &&
|
||||||
dev_priv->cfb_y == crtc->y)
|
dev_priv->fbc.y == crtc->y)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (intel_fbc_enabled(dev)) {
|
if (intel_fbc_enabled(dev)) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue