diff mbox

drm/i915: Set legacy properties when using legacy gamma set IOCTL. (v2)

Message ID 1468591142-2253-1-git-send-email-lionel.g.landwerlin@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Lionel Landwerlin July 15, 2016, 1:59 p.m. UTC
From: Bob Paauwe <bob.j.paauwe@intel.com>

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.

v2: Update the comment with a FIXME.  (Daniel)

v3: Update arguments of the gamma_set vfunc (Lionel)

v4: Fixed vfunc prototype (Lionel)

igt-testcase: kms_pipe_color / legacy-gamma-reset-pipeX
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Signed-off-by: Bob Paauwe <bob.j.paauwe@intel.com>
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
---
 drivers/gpu/drm/i915/intel_display.c | 44 +++++++++++++++++++++++++++++++++++-
 1 file changed, 43 insertions(+), 1 deletion(-)

Comments

Paauwe, Bob J July 15, 2016, 4:13 p.m. UTC | #1
On Fri, 15 Jul 2016 14:59:02 +0100
Lionel Landwerlin <lionel.g.landwerlin@intel.com> wrote:

> From: Bob Paauwe <bob.j.paauwe@intel.com>
> 
> 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.
> 
> v2: Update the comment with a FIXME.  (Daniel)
> 
> v3: Update arguments of the gamma_set vfunc (Lionel)
> 
> v4: Fixed vfunc prototype (Lionel)

Lionel,

The changes looks correct to me, thanks!  Is it appropriate for me to
add a reviewed-by for those changes?  

Bob

> 
> igt-testcase: kms_pipe_color / legacy-gamma-reset-pipeX
> Cc: Daniel Vetter <daniel@ffwll.ch>
> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> Signed-off-by: Bob Paauwe <bob.j.paauwe@intel.com>
> Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c | 44 +++++++++++++++++++++++++++++++++++-
>  1 file changed, 43 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 9337d3a..fb7d8fc5 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -13924,8 +13924,50 @@ out:
>  
>  #undef for_each_intel_crtc_masked
>  
> +/*
> + * FIXME: Remove this once i915 is fully DRIVER_ATOMIC by calling
> + *        drm_atomic_helper_legacy_gamma_set() directly.
> + */
> +static int intel_atomic_legacy_gamma_set(struct drm_crtc *crtc,
> +					 u16 *red, u16 *green, u16 *blue,
> +					 uint32_t size)
> +{
> +	struct drm_device *dev = crtc->dev;
> +	struct drm_mode_config *config = &dev->mode_config;
> +	struct drm_crtc_state *state;
> +	int ret;
> +
> +	ret = drm_atomic_helper_legacy_gamma_set(crtc, red, green, blue, size);
> +	if (ret)
> +		return ret;
> +
> +	/*
> +	 * 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);
> +
> +	return 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,
Maarten Lankhorst July 18, 2016, 7:50 a.m. UTC | #2
Op 15-07-16 om 15:59 schreef Lionel Landwerlin:
> From: Bob Paauwe <bob.j.paauwe@intel.com>
>
> 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.
>
> v2: Update the comment with a FIXME.  (Daniel)
>
> v3: Update arguments of the gamma_set vfunc (Lionel)
>
> v4: Fixed vfunc prototype (Lionel)
>
> igt-testcase: kms_pipe_color / legacy-gamma-reset-pipeX
> Cc: Daniel Vetter <daniel@ffwll.ch>
> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> Signed-off-by: Bob Paauwe <bob.j.paauwe@intel.com>
> Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>

Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Maarten Lankhorst July 18, 2016, 2:27 p.m. UTC | #3
Op 15-07-16 om 18:13 schreef Bob Paauwe:
> On Fri, 15 Jul 2016 14:59:02 +0100
> Lionel Landwerlin <lionel.g.landwerlin@intel.com> wrote:
>
>> From: Bob Paauwe <bob.j.paauwe@intel.com>
>>
>> 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.
>>
>> v2: Update the comment with a FIXME.  (Daniel)
>>
>> v3: Update arguments of the gamma_set vfunc (Lionel)
>>
>> v4: Fixed vfunc prototype (Lionel)
> Lionel,
>
> The changes looks correct to me, thanks!  Is it appropriate for me to
> add a reviewed-by for those changes?  
I think the signed-off-by is strong enough, patch applied, thanks.

Pushed.
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 9337d3a..fb7d8fc5 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -13924,8 +13924,50 @@  out:
 
 #undef for_each_intel_crtc_masked
 
+/*
+ * FIXME: Remove this once i915 is fully DRIVER_ATOMIC by calling
+ *        drm_atomic_helper_legacy_gamma_set() directly.
+ */
+static int intel_atomic_legacy_gamma_set(struct drm_crtc *crtc,
+					 u16 *red, u16 *green, u16 *blue,
+					 uint32_t size)
+{
+	struct drm_device *dev = crtc->dev;
+	struct drm_mode_config *config = &dev->mode_config;
+	struct drm_crtc_state *state;
+	int ret;
+
+	ret = drm_atomic_helper_legacy_gamma_set(crtc, red, green, blue, size);
+	if (ret)
+		return ret;
+
+	/*
+	 * 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);
+
+	return 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,