From: Matt Roper <matthew.d.roper@xxxxxxxxx> The intel_atomic_check() function had some simple testing to make sure that an atomic update isn't updating more than one CRTC at a time. The logic assumed that a plane was always being updated, so it figured out the "nuclear pipe" from the first plane it encountered and just made sure that all CRTC's matched that nuclear pipe. But when someone is adding CRTC properties, it's valid to update just a CRTC property and not have any plane updates in the transaction, which means the initial 'nuclear_pipe' value was never set. This patch adds a fix for it and makes sure CRTC properties also get through atomic commit path. Signed-off-by: Matt Roper <matthew.d.roper@xxxxxxxxx> Signed-off-by: Kausal Malladi <Kausal.Malladi@xxxxxxxxx> --- drivers/gpu/drm/i915/intel_atomic.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/gpu/drm/i915/intel_atomic.c b/drivers/gpu/drm/i915/intel_atomic.c index 0aeced8..126e092 100644 --- a/drivers/gpu/drm/i915/intel_atomic.c +++ b/drivers/gpu/drm/i915/intel_atomic.c @@ -80,6 +80,15 @@ int intel_atomic_check(struct drm_device *dev, state->allow_modeset = false; for (i = 0; i < ncrtcs; i++) { struct intel_crtc *crtc = to_intel_crtc(state->crtcs[i]); + + /* + * If we're only updating CRTC properties, we may not have + * established a 'nuclear pipe' yet. In that case, the first + * CRTC we encounter here should be taken as the 'nuclear + * pipe.' + */ + if (nuclear_pipe == INVALID_PIPE && crtc) + nuclear_pipe = crtc->pipe; if (crtc) memset(&crtc->atomic, 0, sizeof(crtc->atomic)); if (crtc && crtc->pipe != nuclear_pipe) -- 2.4.5 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel