This is a very similar bug in the load detect code fixed in
commit 9128b040eb774e04bc23777b005ace2b66ab2a85 Author: Daniel Vetter daniel.vetter@ffwll.ch Date: Tue Mar 3 17:31:21 2015 +0100
drm/i915: Fix modeset state confusion in the load detect code
But this time around it was the initial fb code that forgot to update the plane->crtc pointer. Otherwise it's the exact same bug, with the exact same restrains (any set_config call/ioctl that doesn't disable the pipe papers over the bug for free, so fairly hard to hit in normal testing). So if you want the full explanation just go read that one over there - it's rather long ...
Cc: Matt Roper matthew.d.roper@intel.com Cc: Linus Torvalds torvalds@linux-foundation.org Cc: Chris Wilson chris@chris-wilson.co.uk Cc: Josh Boyer jwboyer@fedoraproject.org Cc: Jani Nikula jani.nikula@linux.intel.com Signed-off-by: Daniel Vetter daniel.vetter@intel.com --- This is the version for -next. The one for -fixes just needs an s/primary/intel_crtc->base.primary/ and some fudge in the diff. I just want to apply this in both trees since with all the cherry-picking the conflicts are fun already and with this patch in both places we can just go with the code in -next.
Cheers, Daniel --- drivers/gpu/drm/i915/intel_display.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index ceb2e61b4c91..cb508542c6ab 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -2594,6 +2594,7 @@ intel_find_plane_obj(struct intel_crtc *intel_crtc,
primary->fb = &plane_config->fb->base; primary->state->crtc = &intel_crtc->base; + primary->crtc = &intel_crtc->base; update_state_fb(primary);
return; @@ -2627,6 +2628,7 @@ intel_find_plane_obj(struct intel_crtc *intel_crtc, drm_framebuffer_reference(c->primary->fb); primary->fb = c->primary->fb; primary->state->crtc = &intel_crtc->base; + primary->crtc = &intel_crtc->base; update_state_fb(intel_crtc->base.primary); obj->frontbuffer_bits |= INTEL_FRONTBUFFER_PRIMARY(intel_crtc->pipe); break;
On Wed, 25 Mar 2015, Daniel Vetter daniel.vetter@ffwll.ch wrote:
This is a very similar bug in the load detect code fixed in
commit 9128b040eb774e04bc23777b005ace2b66ab2a85 Author: Daniel Vetter daniel.vetter@ffwll.ch Date: Tue Mar 3 17:31:21 2015 +0100
drm/i915: Fix modeset state confusion in the load detect code
But this time around it was the initial fb code that forgot to update the plane->crtc pointer. Otherwise it's the exact same bug, with the exact same restrains (any set_config call/ioctl that doesn't disable the pipe papers over the bug for free, so fairly hard to hit in normal testing). So if you want the full explanation just go read that one over there - it's rather long ...
Cc: Matt Roper matthew.d.roper@intel.com Cc: Linus Torvalds torvalds@linux-foundation.org Cc: Chris Wilson chris@chris-wilson.co.uk Cc: Josh Boyer jwboyer@fedoraproject.org Cc: Jani Nikula jani.nikula@linux.intel.com Signed-off-by: Daniel Vetter daniel.vetter@intel.com
This is the version for -next. The one for -fixes just needs an s/primary/intel_crtc->base.primary/ and some fudge in the diff. I just want to apply this in both trees since with all the cherry-picking the conflicts are fun already and with this patch in both places we can just go with the code in -next.
I've also picked this up from -next to drm-intel-fixes.
BR, Jani.
Cheers, Daniel
drivers/gpu/drm/i915/intel_display.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index ceb2e61b4c91..cb508542c6ab 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -2594,6 +2594,7 @@ intel_find_plane_obj(struct intel_crtc *intel_crtc,
primary->fb = &plane_config->fb->base; primary->state->crtc = &intel_crtc->base;
primary->crtc = &intel_crtc->base;
update_state_fb(primary);
return;
@@ -2627,6 +2628,7 @@ intel_find_plane_obj(struct intel_crtc *intel_crtc, drm_framebuffer_reference(c->primary->fb); primary->fb = c->primary->fb; primary->state->crtc = &intel_crtc->base;
primary->crtc = &intel_crtc->base; update_state_fb(intel_crtc->base.primary); obj->frontbuffer_bits |= INTEL_FRONTBUFFER_PRIMARY(intel_crtc->pipe); break;
-- 2.1.4
dri-devel@lists.freedesktop.org