drm/i915: Make use of intel_fb_obj() (v2)
This should hopefully simplify the display code slightly and also
solves at least one mistake in intel_pipe_set_base() where
to_intel_framebuffer(fb)->obj is referenced during local variable
initialization, before 'if (!fb)' gets checked.
Potential uses of this macro were identified via the following
Coccinelle patch:
        @@
        expression E;
        @@
        * to_intel_framebuffer(E)->obj
        @@
        expression E;
        identifier I;
        @@
          I = to_intel_framebuffer(E);
          ...
        * I->obj
v2: Rewrite some NULL tests in terms of the obj rather than the fb.
    Also add a WARN() if trying to pageflip with a disabled primary
    plane.  [Suggested by Chris Wilson]
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
	
	
This commit is contained in:
		
					parent
					
						
							
								155e63696c
							
						
					
				
			
			
				commit
				
					
						2ff8fde1ea
					
				
			
		
					 3 changed files with 48 additions and 63 deletions
				
			
		| 
						 | 
				
			
			@ -2356,7 +2356,7 @@ static void intel_find_plane_obj(struct intel_crtc *intel_crtc,
 | 
			
		|||
	struct drm_device *dev = intel_crtc->base.dev;
 | 
			
		||||
	struct drm_crtc *c;
 | 
			
		||||
	struct intel_crtc *i;
 | 
			
		||||
	struct intel_framebuffer *fb;
 | 
			
		||||
	struct drm_i915_gem_object *obj;
 | 
			
		||||
 | 
			
		||||
	if (!intel_crtc->base.primary->fb)
 | 
			
		||||
		return;
 | 
			
		||||
| 
						 | 
				
			
			@ -2377,14 +2377,17 @@ static void intel_find_plane_obj(struct intel_crtc *intel_crtc,
 | 
			
		|||
		if (c == &intel_crtc->base)
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		if (!i->active || !c->primary->fb)
 | 
			
		||||
		if (!i->active)
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		fb = to_intel_framebuffer(c->primary->fb);
 | 
			
		||||
		if (i915_gem_obj_ggtt_offset(fb->obj) == plane_config->base) {
 | 
			
		||||
		obj = intel_fb_obj(c->primary->fb);
 | 
			
		||||
		if (obj == NULL)
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		if (i915_gem_obj_ggtt_offset(obj) == plane_config->base) {
 | 
			
		||||
			drm_framebuffer_reference(c->primary->fb);
 | 
			
		||||
			intel_crtc->base.primary->fb = c->primary->fb;
 | 
			
		||||
			fb->obj->frontbuffer_bits |= INTEL_FRONTBUFFER_PRIMARY(intel_crtc->pipe);
 | 
			
		||||
			obj->frontbuffer_bits |= INTEL_FRONTBUFFER_PRIMARY(intel_crtc->pipe);
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -2397,16 +2400,12 @@ static void i9xx_update_primary_plane(struct drm_crtc *crtc,
 | 
			
		|||
	struct drm_device *dev = crtc->dev;
 | 
			
		||||
	struct drm_i915_private *dev_priv = dev->dev_private;
 | 
			
		||||
	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
 | 
			
		||||
	struct intel_framebuffer *intel_fb;
 | 
			
		||||
	struct drm_i915_gem_object *obj;
 | 
			
		||||
	struct drm_i915_gem_object *obj = intel_fb_obj(fb);
 | 
			
		||||
	int plane = intel_crtc->plane;
 | 
			
		||||
	unsigned long linear_offset;
 | 
			
		||||
	u32 dspcntr;
 | 
			
		||||
	u32 reg;
 | 
			
		||||
 | 
			
		||||
	intel_fb = to_intel_framebuffer(fb);
 | 
			
		||||
	obj = intel_fb->obj;
 | 
			
		||||
 | 
			
		||||
	reg = DSPCNTR(plane);
 | 
			
		||||
	dspcntr = I915_READ(reg);
 | 
			
		||||
	/* Mask out pixel format bits in case we change it */
 | 
			
		||||
| 
						 | 
				
			
			@ -2487,16 +2486,12 @@ static void ironlake_update_primary_plane(struct drm_crtc *crtc,
 | 
			
		|||
	struct drm_device *dev = crtc->dev;
 | 
			
		||||
	struct drm_i915_private *dev_priv = dev->dev_private;
 | 
			
		||||
	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
 | 
			
		||||
	struct intel_framebuffer *intel_fb;
 | 
			
		||||
	struct drm_i915_gem_object *obj;
 | 
			
		||||
	struct drm_i915_gem_object *obj = intel_fb_obj(fb);
 | 
			
		||||
	int plane = intel_crtc->plane;
 | 
			
		||||
	unsigned long linear_offset;
 | 
			
		||||
	u32 dspcntr;
 | 
			
		||||
	u32 reg;
 | 
			
		||||
 | 
			
		||||
	intel_fb = to_intel_framebuffer(fb);
 | 
			
		||||
	obj = intel_fb->obj;
 | 
			
		||||
 | 
			
		||||
	reg = DSPCNTR(plane);
 | 
			
		||||
	dspcntr = I915_READ(reg);
 | 
			
		||||
	/* Mask out pixel format bits in case we change it */
 | 
			
		||||
| 
						 | 
				
			
			@ -2627,7 +2622,7 @@ void intel_display_handle_reset(struct drm_device *dev)
 | 
			
		|||
static int
 | 
			
		||||
intel_finish_fb(struct drm_framebuffer *old_fb)
 | 
			
		||||
{
 | 
			
		||||
	struct drm_i915_gem_object *obj = to_intel_framebuffer(old_fb)->obj;
 | 
			
		||||
	struct drm_i915_gem_object *obj = intel_fb_obj(old_fb);
 | 
			
		||||
	struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
 | 
			
		||||
	bool was_interruptible = dev_priv->mm.interruptible;
 | 
			
		||||
	int ret;
 | 
			
		||||
| 
						 | 
				
			
			@ -2674,9 +2669,9 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
 | 
			
		|||
	struct drm_i915_private *dev_priv = dev->dev_private;
 | 
			
		||||
	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
 | 
			
		||||
	enum pipe pipe = intel_crtc->pipe;
 | 
			
		||||
	struct drm_framebuffer *old_fb;
 | 
			
		||||
	struct drm_i915_gem_object *obj = to_intel_framebuffer(fb)->obj;
 | 
			
		||||
	struct drm_i915_gem_object *old_obj;
 | 
			
		||||
	struct drm_framebuffer *old_fb = crtc->primary->fb;
 | 
			
		||||
	struct drm_i915_gem_object *obj = intel_fb_obj(fb);
 | 
			
		||||
	struct drm_i915_gem_object *old_obj = intel_fb_obj(old_fb);
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	if (intel_crtc_has_pending_flip(crtc)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -2697,9 +2692,6 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
 | 
			
		|||
		return -EINVAL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	old_fb = crtc->primary->fb;
 | 
			
		||||
	old_obj = old_fb ? to_intel_framebuffer(old_fb)->obj : NULL;
 | 
			
		||||
 | 
			
		||||
	mutex_lock(&dev->struct_mutex);
 | 
			
		||||
	ret = intel_pin_and_fence_fb_obj(dev, obj, NULL);
 | 
			
		||||
	if (ret == 0)
 | 
			
		||||
| 
						 | 
				
			
			@ -2755,7 +2747,7 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
 | 
			
		|||
		if (intel_crtc->active && old_fb != fb)
 | 
			
		||||
			intel_wait_for_vblank(dev, intel_crtc->pipe);
 | 
			
		||||
		mutex_lock(&dev->struct_mutex);
 | 
			
		||||
		intel_unpin_fb_obj(to_intel_framebuffer(old_fb)->obj);
 | 
			
		||||
		intel_unpin_fb_obj(old_obj);
 | 
			
		||||
		mutex_unlock(&dev->struct_mutex);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -4929,7 +4921,7 @@ static void intel_crtc_disable(struct drm_crtc *crtc)
 | 
			
		|||
	struct drm_device *dev = crtc->dev;
 | 
			
		||||
	struct drm_connector *connector;
 | 
			
		||||
	struct drm_i915_private *dev_priv = dev->dev_private;
 | 
			
		||||
	struct drm_i915_gem_object *old_obj;
 | 
			
		||||
	struct drm_i915_gem_object *old_obj = intel_fb_obj(crtc->primary->fb);
 | 
			
		||||
	enum pipe pipe = to_intel_crtc(crtc)->pipe;
 | 
			
		||||
 | 
			
		||||
	/* crtc should still be enabled when we disable it. */
 | 
			
		||||
| 
						 | 
				
			
			@ -4944,7 +4936,6 @@ static void intel_crtc_disable(struct drm_crtc *crtc)
 | 
			
		|||
	assert_pipe_disabled(dev->dev_private, pipe);
 | 
			
		||||
 | 
			
		||||
	if (crtc->primary->fb) {
 | 
			
		||||
		old_obj = to_intel_framebuffer(crtc->primary->fb)->obj;
 | 
			
		||||
		mutex_lock(&dev->struct_mutex);
 | 
			
		||||
		intel_unpin_fb_obj(old_obj);
 | 
			
		||||
		i915_gem_track_fb(old_obj, NULL,
 | 
			
		||||
| 
						 | 
				
			
			@ -9586,7 +9577,7 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,
 | 
			
		|||
	struct drm_device *dev = crtc->dev;
 | 
			
		||||
	struct drm_i915_private *dev_priv = dev->dev_private;
 | 
			
		||||
	struct drm_framebuffer *old_fb = crtc->primary->fb;
 | 
			
		||||
	struct drm_i915_gem_object *obj = to_intel_framebuffer(fb)->obj;
 | 
			
		||||
	struct drm_i915_gem_object *obj = intel_fb_obj(fb);
 | 
			
		||||
	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
 | 
			
		||||
	enum pipe pipe = intel_crtc->pipe;
 | 
			
		||||
	struct intel_unpin_work *work;
 | 
			
		||||
| 
						 | 
				
			
			@ -9594,6 +9585,14 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,
 | 
			
		|||
	unsigned long flags;
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * drm_mode_page_flip_ioctl() should already catch this, but double
 | 
			
		||||
	 * check to be safe.  In the future we may enable pageflipping from
 | 
			
		||||
	 * a disabled primary plane.
 | 
			
		||||
	 */
 | 
			
		||||
	if (WARN_ON(intel_fb_obj(old_fb) == NULL))
 | 
			
		||||
		return -EBUSY;
 | 
			
		||||
 | 
			
		||||
	/* Can't change pixel format via MI display flips. */
 | 
			
		||||
	if (fb->pixel_format != crtc->primary->fb->pixel_format)
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
| 
						 | 
				
			
			@ -9616,7 +9615,7 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,
 | 
			
		|||
 | 
			
		||||
	work->event = event;
 | 
			
		||||
	work->crtc = crtc;
 | 
			
		||||
	work->old_fb_obj = to_intel_framebuffer(old_fb)->obj;
 | 
			
		||||
	work->old_fb_obj = intel_fb_obj(old_fb);
 | 
			
		||||
	INIT_WORK(&work->work, intel_unpin_work_fn);
 | 
			
		||||
 | 
			
		||||
	ret = drm_crtc_vblank_get(crtc);
 | 
			
		||||
| 
						 | 
				
			
			@ -10758,10 +10757,9 @@ static int __intel_set_mode(struct drm_crtc *crtc,
 | 
			
		|||
	 * on the DPLL.
 | 
			
		||||
	 */
 | 
			
		||||
	for_each_intel_crtc_masked(dev, modeset_pipes, intel_crtc) {
 | 
			
		||||
		struct drm_framebuffer *old_fb;
 | 
			
		||||
		struct drm_i915_gem_object *old_obj = NULL;
 | 
			
		||||
		struct drm_i915_gem_object *obj =
 | 
			
		||||
			to_intel_framebuffer(fb)->obj;
 | 
			
		||||
		struct drm_framebuffer *old_fb = crtc->primary->fb;
 | 
			
		||||
		struct drm_i915_gem_object *old_obj = intel_fb_obj(old_fb);
 | 
			
		||||
		struct drm_i915_gem_object *obj = intel_fb_obj(fb);
 | 
			
		||||
 | 
			
		||||
		mutex_lock(&dev->struct_mutex);
 | 
			
		||||
		ret = intel_pin_and_fence_fb_obj(dev,
 | 
			
		||||
| 
						 | 
				
			
			@ -10772,11 +10770,8 @@ static int __intel_set_mode(struct drm_crtc *crtc,
 | 
			
		|||
			mutex_unlock(&dev->struct_mutex);
 | 
			
		||||
			goto done;
 | 
			
		||||
		}
 | 
			
		||||
		old_fb = crtc->primary->fb;
 | 
			
		||||
		if (old_fb) {
 | 
			
		||||
			old_obj = to_intel_framebuffer(old_fb)->obj;
 | 
			
		||||
		if (old_fb)
 | 
			
		||||
			intel_unpin_fb_obj(old_obj);
 | 
			
		||||
		}
 | 
			
		||||
		i915_gem_track_fb(old_obj, obj,
 | 
			
		||||
				  INTEL_FRONTBUFFER_PRIMARY(intel_crtc->pipe));
 | 
			
		||||
		mutex_unlock(&dev->struct_mutex);
 | 
			
		||||
| 
						 | 
				
			
			@ -11394,9 +11389,9 @@ intel_primary_plane_disable(struct drm_plane *plane)
 | 
			
		|||
	intel_disable_primary_hw_plane(dev_priv, intel_plane->plane,
 | 
			
		||||
				       intel_plane->pipe);
 | 
			
		||||
disable_unpin:
 | 
			
		||||
	i915_gem_track_fb(to_intel_framebuffer(plane->fb)->obj, NULL,
 | 
			
		||||
	i915_gem_track_fb(intel_fb_obj(plane->fb), NULL,
 | 
			
		||||
			  INTEL_FRONTBUFFER_PRIMARY(intel_crtc->pipe));
 | 
			
		||||
	intel_unpin_fb_obj(to_intel_framebuffer(plane->fb)->obj);
 | 
			
		||||
	intel_unpin_fb_obj(intel_fb_obj(plane->fb));
 | 
			
		||||
	plane->fb = NULL;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -11413,7 +11408,8 @@ intel_primary_plane_setplane(struct drm_plane *plane, struct drm_crtc *crtc,
 | 
			
		|||
	struct drm_i915_private *dev_priv = dev->dev_private;
 | 
			
		||||
	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
 | 
			
		||||
	struct intel_plane *intel_plane = to_intel_plane(plane);
 | 
			
		||||
	struct drm_i915_gem_object *obj, *old_obj = NULL;
 | 
			
		||||
	struct drm_i915_gem_object *obj = intel_fb_obj(fb);
 | 
			
		||||
	struct drm_i915_gem_object *old_obj = intel_fb_obj(plane->fb);
 | 
			
		||||
	struct drm_rect dest = {
 | 
			
		||||
		/* integer pixels */
 | 
			
		||||
		.x1 = crtc_x,
 | 
			
		||||
| 
						 | 
				
			
			@ -11445,10 +11441,6 @@ intel_primary_plane_setplane(struct drm_plane *plane, struct drm_crtc *crtc,
 | 
			
		|||
	if (ret)
 | 
			
		||||
		return ret;
 | 
			
		||||
 | 
			
		||||
	if (plane->fb)
 | 
			
		||||
		old_obj = to_intel_framebuffer(plane->fb)->obj;
 | 
			
		||||
	obj = to_intel_framebuffer(fb)->obj;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * If the CRTC isn't enabled, we're just pinning the framebuffer,
 | 
			
		||||
	 * updating the fb pointer, and returning without touching the
 | 
			
		||||
| 
						 | 
				
			
			@ -12945,7 +12937,7 @@ void intel_modeset_setup_hw_state(struct drm_device *dev,
 | 
			
		|||
void intel_modeset_gem_init(struct drm_device *dev)
 | 
			
		||||
{
 | 
			
		||||
	struct drm_crtc *c;
 | 
			
		||||
	struct intel_framebuffer *fb;
 | 
			
		||||
	struct drm_i915_gem_object *obj;
 | 
			
		||||
 | 
			
		||||
	mutex_lock(&dev->struct_mutex);
 | 
			
		||||
	intel_init_gt_powersave(dev);
 | 
			
		||||
| 
						 | 
				
			
			@ -12962,11 +12954,11 @@ void intel_modeset_gem_init(struct drm_device *dev)
 | 
			
		|||
	 */
 | 
			
		||||
	mutex_lock(&dev->struct_mutex);
 | 
			
		||||
	for_each_crtc(dev, c) {
 | 
			
		||||
		if (!c->primary->fb)
 | 
			
		||||
		obj = intel_fb_obj(c->primary->fb);
 | 
			
		||||
		if (obj == NULL)
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		fb = to_intel_framebuffer(c->primary->fb);
 | 
			
		||||
		if (intel_pin_and_fence_fb_obj(dev, fb->obj, NULL)) {
 | 
			
		||||
		if (intel_pin_and_fence_fb_obj(dev, obj, NULL)) {
 | 
			
		||||
			DRM_ERROR("failed to pin boot fb on pipe %d\n",
 | 
			
		||||
				  to_intel_crtc(c)->pipe);
 | 
			
		||||
			drm_framebuffer_unreference(c->primary->fb);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1752,7 +1752,7 @@ static bool intel_edp_psr_match_conditions(struct intel_dp *intel_dp)
 | 
			
		|||
	struct drm_i915_private *dev_priv = dev->dev_private;
 | 
			
		||||
	struct drm_crtc *crtc = dig_port->base.base.crtc;
 | 
			
		||||
	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
 | 
			
		||||
	struct drm_i915_gem_object *obj = to_intel_framebuffer(crtc->primary->fb)->obj;
 | 
			
		||||
	struct drm_i915_gem_object *obj = intel_fb_obj(crtc->primary->fb);
 | 
			
		||||
	struct intel_encoder *intel_encoder = &dp_to_dig_port(intel_dp)->base;
 | 
			
		||||
 | 
			
		||||
	dev_priv->psr.source_ok = false;
 | 
			
		||||
| 
						 | 
				
			
			@ -1785,7 +1785,6 @@ static bool intel_edp_psr_match_conditions(struct intel_dp *intel_dp)
 | 
			
		|||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	obj = to_intel_framebuffer(crtc->primary->fb)->obj;
 | 
			
		||||
	if (obj->tiling_mode != I915_TILING_X ||
 | 
			
		||||
	    obj->fence_reg == I915_FENCE_REG_NONE) {
 | 
			
		||||
		DRM_DEBUG_KMS("PSR condition failed: fb not tiled or fenced\n");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -93,8 +93,7 @@ static void i8xx_enable_fbc(struct drm_crtc *crtc)
 | 
			
		|||
	struct drm_device *dev = crtc->dev;
 | 
			
		||||
	struct drm_i915_private *dev_priv = dev->dev_private;
 | 
			
		||||
	struct drm_framebuffer *fb = crtc->primary->fb;
 | 
			
		||||
	struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
 | 
			
		||||
	struct drm_i915_gem_object *obj = intel_fb->obj;
 | 
			
		||||
	struct drm_i915_gem_object *obj = intel_fb_obj(fb);
 | 
			
		||||
	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
 | 
			
		||||
	int cfb_pitch;
 | 
			
		||||
	int i;
 | 
			
		||||
| 
						 | 
				
			
			@ -150,8 +149,7 @@ static void g4x_enable_fbc(struct drm_crtc *crtc)
 | 
			
		|||
	struct drm_device *dev = crtc->dev;
 | 
			
		||||
	struct drm_i915_private *dev_priv = dev->dev_private;
 | 
			
		||||
	struct drm_framebuffer *fb = crtc->primary->fb;
 | 
			
		||||
	struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
 | 
			
		||||
	struct drm_i915_gem_object *obj = intel_fb->obj;
 | 
			
		||||
	struct drm_i915_gem_object *obj = intel_fb_obj(fb);
 | 
			
		||||
	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
 | 
			
		||||
	u32 dpfc_ctl;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -222,8 +220,7 @@ static void ironlake_enable_fbc(struct drm_crtc *crtc)
 | 
			
		|||
	struct drm_device *dev = crtc->dev;
 | 
			
		||||
	struct drm_i915_private *dev_priv = dev->dev_private;
 | 
			
		||||
	struct drm_framebuffer *fb = crtc->primary->fb;
 | 
			
		||||
	struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
 | 
			
		||||
	struct drm_i915_gem_object *obj = intel_fb->obj;
 | 
			
		||||
	struct drm_i915_gem_object *obj = intel_fb_obj(fb);
 | 
			
		||||
	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
 | 
			
		||||
	u32 dpfc_ctl;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -289,8 +286,7 @@ static void gen7_enable_fbc(struct drm_crtc *crtc)
 | 
			
		|||
	struct drm_device *dev = crtc->dev;
 | 
			
		||||
	struct drm_i915_private *dev_priv = dev->dev_private;
 | 
			
		||||
	struct drm_framebuffer *fb = crtc->primary->fb;
 | 
			
		||||
	struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
 | 
			
		||||
	struct drm_i915_gem_object *obj = intel_fb->obj;
 | 
			
		||||
	struct drm_i915_gem_object *obj = intel_fb_obj(fb);
 | 
			
		||||
	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
 | 
			
		||||
	u32 dpfc_ctl;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -485,7 +481,6 @@ void intel_update_fbc(struct drm_device *dev)
 | 
			
		|||
	struct drm_crtc *crtc = NULL, *tmp_crtc;
 | 
			
		||||
	struct intel_crtc *intel_crtc;
 | 
			
		||||
	struct drm_framebuffer *fb;
 | 
			
		||||
	struct intel_framebuffer *intel_fb;
 | 
			
		||||
	struct drm_i915_gem_object *obj;
 | 
			
		||||
	const struct drm_display_mode *adjusted_mode;
 | 
			
		||||
	unsigned int max_width, max_height;
 | 
			
		||||
| 
						 | 
				
			
			@ -530,8 +525,7 @@ void intel_update_fbc(struct drm_device *dev)
 | 
			
		|||
 | 
			
		||||
	intel_crtc = to_intel_crtc(crtc);
 | 
			
		||||
	fb = crtc->primary->fb;
 | 
			
		||||
	intel_fb = to_intel_framebuffer(fb);
 | 
			
		||||
	obj = intel_fb->obj;
 | 
			
		||||
	obj = intel_fb_obj(fb);
 | 
			
		||||
	adjusted_mode = &intel_crtc->config.adjusted_mode;
 | 
			
		||||
 | 
			
		||||
	if (i915.enable_fbc < 0) {
 | 
			
		||||
| 
						 | 
				
			
			@ -589,7 +583,7 @@ void intel_update_fbc(struct drm_device *dev)
 | 
			
		|||
	if (in_dbg_master())
 | 
			
		||||
		goto out_disable;
 | 
			
		||||
 | 
			
		||||
	if (i915_gem_stolen_setup_compression(dev, intel_fb->obj->base.size,
 | 
			
		||||
	if (i915_gem_stolen_setup_compression(dev, obj->base.size,
 | 
			
		||||
					      drm_format_plane_cpp(fb->pixel_format, 0))) {
 | 
			
		||||
		if (set_no_fbc_reason(dev_priv, FBC_STOLEN_TOO_SMALL))
 | 
			
		||||
			DRM_DEBUG_KMS("framebuffer too large, disabling compression\n");
 | 
			
		||||
| 
						 | 
				
			
			@ -1599,12 +1593,12 @@ static void i9xx_update_wm(struct drm_crtc *unused_crtc)
 | 
			
		|||
	DRM_DEBUG_KMS("FIFO watermarks - A: %d, B: %d\n", planea_wm, planeb_wm);
 | 
			
		||||
 | 
			
		||||
	if (IS_I915GM(dev) && enabled) {
 | 
			
		||||
		struct intel_framebuffer *fb;
 | 
			
		||||
		struct drm_i915_gem_object *obj;
 | 
			
		||||
 | 
			
		||||
		fb = to_intel_framebuffer(enabled->primary->fb);
 | 
			
		||||
		obj = intel_fb_obj(enabled->primary->fb);
 | 
			
		||||
 | 
			
		||||
		/* self-refresh seems busted with untiled */
 | 
			
		||||
		if (fb->obj->tiling_mode == I915_TILING_NONE)
 | 
			
		||||
		if (obj->tiling_mode == I915_TILING_NONE)
 | 
			
		||||
			enabled = NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue