Hi Paul,

Unfortunate that we've been writing the same patch at the same time :(
I think this we've got pretty much the same fix, but it probably needs to be done at the DRM level, because this can impact other drivers too.

Cheers,

-
Lionel

On 08/04/16 17:26, Bob Paauwe wrote:
The i915 driver is now using atomic properties and atomic commit
to handle the legacy set gamma IOCTL. However, if the driver is
configured without atomic (nuclear_pageflip = false), it won't
update the legacy properties for degamma_lut, gamma_lut and ctm
leaving them out of sync with the atomic version of the properties.

Until the driver is full atomic, make sure we update the non-atomic
version of the properties.

igt-testcase: kms_pipe_color / legacy-gamma-reset-pipeX
Signed-off-by: Bob Paauwe <bob.j.paa...@intel.com>
---
  drivers/gpu/drm/i915/intel_display.c | 38 +++++++++++++++++++++++++++++++++++-
  1 file changed, 37 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c 
b/drivers/gpu/drm/i915/intel_display.c
index 5155efb6..ff09a18 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -13885,8 +13885,44 @@ out:
#undef for_each_intel_crtc_masked +/*
+ * TODO: Remove this once we have full atomic implmented.
+ */
+static void intel_atomic_legacy_gamma_set(struct drm_crtc *crtc,
+                                         u16 *red, u16 *green, u16 *blue,
+                                         uint32_t start, uint32_t size)
+{
+       struct drm_device *dev = crtc->dev;
+       struct drm_mode_config *config = &dev->mode_config;
+       struct drm_crtc_state *state;
+
+       drm_atomic_helper_legacy_gamma_set(crtc, red, green, blue, start, size);
+
+       /*
+        * Make sure we update the legacy properties so this works when
+        * atomic is not enabled.
+        */
+
+       state = crtc->state;
+
+       drm_object_property_set_value(&crtc->base,
+                                     config->degamma_lut_property,
+                                     (state->degamma_lut) ?
+                                     state->degamma_lut->base.id : 0);
+
+       drm_object_property_set_value(&crtc->base,
+                                     config->ctm_property,
+                                     (state->ctm) ?
+                                     state->ctm->base.id : 0);
+
+       drm_object_property_set_value(&crtc->base,
+                                     config->gamma_lut_property,
+                                     (state->gamma_lut) ?
+                                     state->gamma_lut->base.id : 0);
+}
+
  static const struct drm_crtc_funcs intel_crtc_funcs = {
-       .gamma_set = drm_atomic_helper_legacy_gamma_set,
+       .gamma_set = intel_atomic_legacy_gamma_set,
        .set_config = drm_atomic_helper_set_config,
        .set_property = drm_atomic_helper_crtc_set_property,
        .destroy = intel_crtc_destroy,

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to