* [PATCH 0/3] drm/i915: color management atomic fixes
@ 2016-03-30 15:16 Maarten Lankhorst
2016-03-30 15:16 ` [PATCH 1/3] drm/i915: Pass crtc_state to color management functions Maarten Lankhorst
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Maarten Lankhorst @ 2016-03-30 15:16 UTC (permalink / raw)
To: intel-gfx
Some small fixes to color management.
crtc_state should be passed, a redundant check removed, and
color management updated during vblank evasion.
Maarten Lankhorst (3):
drm/i915: Pass crtc_state to color management functions.
drm/i915: Do not check crtc_state->active in intel_color_load_luts.
drm/i915: Update color management during vblank evasion.
drivers/gpu/drm/i915/i915_drv.h | 4 ++--
drivers/gpu/drm/i915/intel_color.c | 45 +++++++++++++++++-------------------
drivers/gpu/drm/i915/intel_display.c | 41 ++++++++++++++++----------------
drivers/gpu/drm/i915/intel_drv.h | 4 ++--
4 files changed, 46 insertions(+), 48 deletions(-)
--
2.1.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH 1/3] drm/i915: Pass crtc_state to color management functions. 2016-03-30 15:16 [PATCH 0/3] drm/i915: color management atomic fixes Maarten Lankhorst @ 2016-03-30 15:16 ` Maarten Lankhorst 2016-03-30 16:44 ` Lionel Landwerlin 2016-03-30 15:16 ` [PATCH 2/3] drm/i915: Do not check crtc_state->active in intel_color_load_luts Maarten Lankhorst 2016-03-30 15:16 ` [PATCH 3/3] drm/i915: Update color management during vblank evasion Maarten Lankhorst 2 siblings, 1 reply; 9+ messages in thread From: Maarten Lankhorst @ 2016-03-30 15:16 UTC (permalink / raw) To: intel-gfx Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> --- drivers/gpu/drm/i915/i915_drv.h | 4 ++-- drivers/gpu/drm/i915/intel_color.c | 43 ++++++++++++++++++------------------ drivers/gpu/drm/i915/intel_display.c | 22 +++++++++++------- drivers/gpu/drm/i915/intel_drv.h | 4 ++-- 4 files changed, 40 insertions(+), 33 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index f6d71590bd7b..a93ba2903018 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -612,8 +612,8 @@ struct drm_i915_display_funcs { /* display clock increase/decrease */ /* pll clock increase/decrease */ - void (*load_csc_matrix)(struct drm_crtc *crtc); - void (*load_luts)(struct drm_crtc *crtc); + void (*load_csc_matrix)(struct drm_crtc_state *crtc_state); + void (*load_luts)(struct drm_crtc_state *crtc_state); }; enum forcewake_domain_id { diff --git a/drivers/gpu/drm/i915/intel_color.c b/drivers/gpu/drm/i915/intel_color.c index aa0b20dcb834..9cffa638c351 100644 --- a/drivers/gpu/drm/i915/intel_color.c +++ b/drivers/gpu/drm/i915/intel_color.c @@ -92,10 +92,10 @@ static void ctm_mult_by_limited(uint64_t *result, int64_t *input) } /* Set up the pipe CSC unit. */ -static void i9xx_load_csc_matrix(struct drm_crtc *crtc) +static void i9xx_load_csc_matrix(struct drm_crtc_state *crtc_state) { + struct drm_crtc *crtc = crtc_state->crtc; struct drm_device *dev = crtc->dev; - struct drm_crtc_state *crtc_state = crtc->state; struct drm_i915_private *dev_priv = dev->dev_private; struct intel_crtc *intel_crtc = to_intel_crtc(crtc); int i, pipe = intel_crtc->pipe; @@ -203,10 +203,10 @@ static void i9xx_load_csc_matrix(struct drm_crtc *crtc) /* * Set up the pipe CSC unit on CherryView. */ -static void cherryview_load_csc_matrix(struct drm_crtc *crtc) +static void cherryview_load_csc_matrix(struct drm_crtc_state *state) { + struct drm_crtc *crtc = state->crtc; struct drm_device *dev = crtc->dev; - struct drm_crtc_state *state = crtc->state; struct drm_i915_private *dev_priv = dev->dev_private; int pipe = to_intel_crtc(crtc)->pipe; uint32_t mode; @@ -252,13 +252,13 @@ static void cherryview_load_csc_matrix(struct drm_crtc *crtc) I915_WRITE(CGM_PIPE_MODE(pipe), mode); } -void intel_color_set_csc(struct drm_crtc *crtc) +void intel_color_set_csc(struct drm_crtc_state *crtc_state) { - struct drm_device *dev = crtc->dev; + struct drm_device *dev = crtc_state->crtc->dev; struct drm_i915_private *dev_priv = dev->dev_private; if (dev_priv->display.load_csc_matrix) - dev_priv->display.load_csc_matrix(crtc); + dev_priv->display.load_csc_matrix(crtc_state); } /* Loads the legacy palette/gamma unit for the CRTC. */ @@ -303,19 +303,20 @@ static void i9xx_load_luts_internal(struct drm_crtc *crtc, } } -static void i9xx_load_luts(struct drm_crtc *crtc) +static void i9xx_load_luts(struct drm_crtc_state *crtc_state) { - i9xx_load_luts_internal(crtc, crtc->state->gamma_lut); + i9xx_load_luts_internal(crtc_state->crtc, crtc_state->gamma_lut); } /* Loads the legacy palette/gamma unit for the CRTC on Haswell. */ -static void haswell_load_luts(struct drm_crtc *crtc) +static void haswell_load_luts(struct drm_crtc_state *crtc_state) { + struct drm_crtc *crtc = crtc_state->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_crtc_state *intel_crtc_state = - to_intel_crtc_state(crtc->state); + to_intel_crtc_state(crtc_state); bool reenable_ips = false; /* @@ -331,24 +332,24 @@ static void haswell_load_luts(struct drm_crtc *crtc) intel_crtc_state->gamma_mode = GAMMA_MODE_MODE_8BIT; I915_WRITE(GAMMA_MODE(intel_crtc->pipe), GAMMA_MODE_MODE_8BIT); - i9xx_load_luts(crtc); + i9xx_load_luts(crtc_state); if (reenable_ips) hsw_enable_ips(intel_crtc); } /* Loads the palette/gamma unit for the CRTC on Broadwell+. */ -static void broadwell_load_luts(struct drm_crtc *crtc) +static void broadwell_load_luts(struct drm_crtc_state *state) { + struct drm_crtc *crtc = state->crtc; struct drm_device *dev = crtc->dev; - struct drm_crtc_state *state = crtc->state; struct drm_i915_private *dev_priv = dev->dev_private; struct intel_crtc_state *intel_state = to_intel_crtc_state(state); enum pipe pipe = to_intel_crtc(crtc)->pipe; uint32_t i, lut_size = INTEL_INFO(dev)->color.degamma_lut_size; if (crtc_state_is_legacy(state)) { - haswell_load_luts(crtc); + haswell_load_luts(state); return; } @@ -421,11 +422,11 @@ static void broadwell_load_luts(struct drm_crtc *crtc) } /* Loads the palette/gamma unit for the CRTC on CherryView. */ -static void cherryview_load_luts(struct drm_crtc *crtc) +static void cherryview_load_luts(struct drm_crtc_state *state) { + struct drm_crtc *crtc = state->crtc; struct drm_device *dev = crtc->dev; struct drm_i915_private *dev_priv = dev->dev_private; - struct drm_crtc_state *state = crtc->state; enum pipe pipe = to_intel_crtc(crtc)->pipe; struct drm_color_lut *lut; uint32_t i, lut_size; @@ -481,16 +482,16 @@ static void cherryview_load_luts(struct drm_crtc *crtc) i9xx_load_luts_internal(crtc, NULL); } -void intel_color_load_luts(struct drm_crtc *crtc) +void intel_color_load_luts(struct drm_crtc_state *crtc_state) { - struct drm_device *dev = crtc->dev; + struct drm_device *dev = crtc_state->crtc->dev; struct drm_i915_private *dev_priv = dev->dev_private; /* The clocks have to be on to load the palette. */ - if (!crtc->state->active) + if (!crtc_state->active) return; - dev_priv->display.load_luts(crtc); + dev_priv->display.load_luts(crtc_state); } int intel_color_check(struct drm_crtc *crtc, diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 29aa64be1f03..4f913e5febf1 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -3223,7 +3223,7 @@ static void intel_update_pipe_config(struct intel_crtc *crtc, pipe_config->pipe_src_w, pipe_config->pipe_src_h); if (HAS_DDI(dev)) - intel_color_set_csc(&crtc->base); + intel_color_set_csc(&pipe_config->base); /* * Update pipe size and adjust fitter if needed: the reason for this is @@ -4723,6 +4723,8 @@ static void ironlake_crtc_enable(struct drm_crtc *crtc) struct intel_crtc *intel_crtc = to_intel_crtc(crtc); struct intel_encoder *encoder; int pipe = intel_crtc->pipe; + struct intel_crtc_state *pipe_config = + to_intel_crtc_state(crtc->state); if (WARN_ON(intel_crtc->active)) return; @@ -4770,7 +4772,7 @@ static void ironlake_crtc_enable(struct drm_crtc *crtc) * On ILK+ LUT must be loaded before the pipe is running but with * clocks enabled */ - intel_color_load_luts(crtc); + intel_color_load_luts(&pipe_config->base); if (dev_priv->display.initial_watermarks != NULL) dev_priv->display.initial_watermarks(intel_crtc->config); @@ -4845,7 +4847,7 @@ static void haswell_crtc_enable(struct drm_crtc *crtc) haswell_set_pipemisc(crtc); - intel_color_set_csc(crtc); + intel_color_set_csc(&pipe_config->base); intel_crtc->active = true; @@ -4874,7 +4876,7 @@ static void haswell_crtc_enable(struct drm_crtc *crtc) * On ILK+ LUT must be loaded before the pipe is running but with * clocks enabled */ - intel_color_load_luts(crtc); + intel_color_load_luts(&pipe_config->base); intel_ddi_set_pipe_settings(crtc); if (!intel_crtc->config->has_dsi_encoder) @@ -6035,6 +6037,8 @@ static void valleyview_crtc_enable(struct drm_crtc *crtc) struct drm_i915_private *dev_priv = to_i915(dev); struct intel_crtc *intel_crtc = to_intel_crtc(crtc); struct intel_encoder *encoder; + struct intel_crtc_state *pipe_config = + to_intel_crtc_state(crtc->state); int pipe = intel_crtc->pipe; if (WARN_ON(intel_crtc->active)) @@ -6079,7 +6083,7 @@ static void valleyview_crtc_enable(struct drm_crtc *crtc) i9xx_pfit_enable(intel_crtc); - intel_color_load_luts(crtc); + intel_color_load_luts(&pipe_config->base); intel_update_watermarks(crtc); intel_enable_pipe(intel_crtc); @@ -6106,6 +6110,8 @@ static void i9xx_crtc_enable(struct drm_crtc *crtc) struct drm_i915_private *dev_priv = to_i915(dev); struct intel_crtc *intel_crtc = to_intel_crtc(crtc); struct intel_encoder *encoder; + struct intel_crtc_state *pipe_config = + to_intel_crtc_state(crtc->state); int pipe = intel_crtc->pipe; if (WARN_ON(intel_crtc->active)) @@ -6134,7 +6140,7 @@ static void i9xx_crtc_enable(struct drm_crtc *crtc) i9xx_pfit_enable(intel_crtc); - intel_color_load_luts(crtc); + intel_color_load_luts(&pipe_config->base); intel_update_watermarks(crtc); intel_enable_pipe(intel_crtc); @@ -13605,8 +13611,8 @@ static int intel_atomic_commit(struct drm_device *dev, * a modeset as this will be done by * crtc_enable already. */ - intel_color_set_csc(crtc); - intel_color_load_luts(crtc); + intel_color_set_csc(crtc->state); + intel_color_load_luts(crtc->state); } if (!modeset) diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index c87b4503435d..6ac46d921cde 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h @@ -1669,7 +1669,7 @@ extern const struct drm_plane_helper_funcs intel_plane_helper_funcs; /* intel_color.c */ void intel_color_init(struct drm_crtc *crtc); int intel_color_check(struct drm_crtc *crtc, struct drm_crtc_state *state); -void intel_color_set_csc(struct drm_crtc *crtc); -void intel_color_load_luts(struct drm_crtc *crtc); +void intel_color_set_csc(struct drm_crtc_state *crtc_state); +void intel_color_load_luts(struct drm_crtc_state *crtc_state); #endif /* __INTEL_DRV_H__ */ -- 2.1.0 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 1/3] drm/i915: Pass crtc_state to color management functions. 2016-03-30 15:16 ` [PATCH 1/3] drm/i915: Pass crtc_state to color management functions Maarten Lankhorst @ 2016-03-30 16:44 ` Lionel Landwerlin 0 siblings, 0 replies; 9+ messages in thread From: Lionel Landwerlin @ 2016-03-30 16:44 UTC (permalink / raw) To: Maarten Lankhorst, intel-gfx On 30/03/16 16:16, Maarten Lankhorst wrote: > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> > --- > drivers/gpu/drm/i915/i915_drv.h | 4 ++-- > drivers/gpu/drm/i915/intel_color.c | 43 ++++++++++++++++++------------------ > drivers/gpu/drm/i915/intel_display.c | 22 +++++++++++------- > drivers/gpu/drm/i915/intel_drv.h | 4 ++-- > 4 files changed, 40 insertions(+), 33 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h > index f6d71590bd7b..a93ba2903018 100644 > --- a/drivers/gpu/drm/i915/i915_drv.h > +++ b/drivers/gpu/drm/i915/i915_drv.h > @@ -612,8 +612,8 @@ struct drm_i915_display_funcs { > /* display clock increase/decrease */ > /* pll clock increase/decrease */ > > - void (*load_csc_matrix)(struct drm_crtc *crtc); > - void (*load_luts)(struct drm_crtc *crtc); > + void (*load_csc_matrix)(struct drm_crtc_state *crtc_state); > + void (*load_luts)(struct drm_crtc_state *crtc_state); > }; > > enum forcewake_domain_id { > diff --git a/drivers/gpu/drm/i915/intel_color.c b/drivers/gpu/drm/i915/intel_color.c > index aa0b20dcb834..9cffa638c351 100644 > --- a/drivers/gpu/drm/i915/intel_color.c > +++ b/drivers/gpu/drm/i915/intel_color.c > @@ -92,10 +92,10 @@ static void ctm_mult_by_limited(uint64_t *result, int64_t *input) > } > > /* Set up the pipe CSC unit. */ > -static void i9xx_load_csc_matrix(struct drm_crtc *crtc) > +static void i9xx_load_csc_matrix(struct drm_crtc_state *crtc_state) > { > + struct drm_crtc *crtc = crtc_state->crtc; > struct drm_device *dev = crtc->dev; > - struct drm_crtc_state *crtc_state = crtc->state; > struct drm_i915_private *dev_priv = dev->dev_private; > struct intel_crtc *intel_crtc = to_intel_crtc(crtc); > int i, pipe = intel_crtc->pipe; > @@ -203,10 +203,10 @@ static void i9xx_load_csc_matrix(struct drm_crtc *crtc) > /* > * Set up the pipe CSC unit on CherryView. > */ > -static void cherryview_load_csc_matrix(struct drm_crtc *crtc) > +static void cherryview_load_csc_matrix(struct drm_crtc_state *state) > { > + struct drm_crtc *crtc = state->crtc; > struct drm_device *dev = crtc->dev; > - struct drm_crtc_state *state = crtc->state; > struct drm_i915_private *dev_priv = dev->dev_private; > int pipe = to_intel_crtc(crtc)->pipe; > uint32_t mode; > @@ -252,13 +252,13 @@ static void cherryview_load_csc_matrix(struct drm_crtc *crtc) > I915_WRITE(CGM_PIPE_MODE(pipe), mode); > } > > -void intel_color_set_csc(struct drm_crtc *crtc) > +void intel_color_set_csc(struct drm_crtc_state *crtc_state) > { > - struct drm_device *dev = crtc->dev; > + struct drm_device *dev = crtc_state->crtc->dev; > struct drm_i915_private *dev_priv = dev->dev_private; > > if (dev_priv->display.load_csc_matrix) > - dev_priv->display.load_csc_matrix(crtc); > + dev_priv->display.load_csc_matrix(crtc_state); > } > > /* Loads the legacy palette/gamma unit for the CRTC. */ > @@ -303,19 +303,20 @@ static void i9xx_load_luts_internal(struct drm_crtc *crtc, > } > } > > -static void i9xx_load_luts(struct drm_crtc *crtc) > +static void i9xx_load_luts(struct drm_crtc_state *crtc_state) > { > - i9xx_load_luts_internal(crtc, crtc->state->gamma_lut); > + i9xx_load_luts_internal(crtc_state->crtc, crtc_state->gamma_lut); > } > > /* Loads the legacy palette/gamma unit for the CRTC on Haswell. */ > -static void haswell_load_luts(struct drm_crtc *crtc) > +static void haswell_load_luts(struct drm_crtc_state *crtc_state) > { > + struct drm_crtc *crtc = crtc_state->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_crtc_state *intel_crtc_state = > - to_intel_crtc_state(crtc->state); > + to_intel_crtc_state(crtc_state); > bool reenable_ips = false; > > /* > @@ -331,24 +332,24 @@ static void haswell_load_luts(struct drm_crtc *crtc) > intel_crtc_state->gamma_mode = GAMMA_MODE_MODE_8BIT; > I915_WRITE(GAMMA_MODE(intel_crtc->pipe), GAMMA_MODE_MODE_8BIT); > > - i9xx_load_luts(crtc); > + i9xx_load_luts(crtc_state); > > if (reenable_ips) > hsw_enable_ips(intel_crtc); > } > > /* Loads the palette/gamma unit for the CRTC on Broadwell+. */ > -static void broadwell_load_luts(struct drm_crtc *crtc) > +static void broadwell_load_luts(struct drm_crtc_state *state) > { > + struct drm_crtc *crtc = state->crtc; > struct drm_device *dev = crtc->dev; > - struct drm_crtc_state *state = crtc->state; > struct drm_i915_private *dev_priv = dev->dev_private; > struct intel_crtc_state *intel_state = to_intel_crtc_state(state); > enum pipe pipe = to_intel_crtc(crtc)->pipe; > uint32_t i, lut_size = INTEL_INFO(dev)->color.degamma_lut_size; > > if (crtc_state_is_legacy(state)) { > - haswell_load_luts(crtc); > + haswell_load_luts(state); > return; > } > > @@ -421,11 +422,11 @@ static void broadwell_load_luts(struct drm_crtc *crtc) > } > > /* Loads the palette/gamma unit for the CRTC on CherryView. */ > -static void cherryview_load_luts(struct drm_crtc *crtc) > +static void cherryview_load_luts(struct drm_crtc_state *state) > { > + struct drm_crtc *crtc = state->crtc; > struct drm_device *dev = crtc->dev; > struct drm_i915_private *dev_priv = dev->dev_private; > - struct drm_crtc_state *state = crtc->state; > enum pipe pipe = to_intel_crtc(crtc)->pipe; > struct drm_color_lut *lut; > uint32_t i, lut_size; > @@ -481,16 +482,16 @@ static void cherryview_load_luts(struct drm_crtc *crtc) > i9xx_load_luts_internal(crtc, NULL); > } > > -void intel_color_load_luts(struct drm_crtc *crtc) > +void intel_color_load_luts(struct drm_crtc_state *crtc_state) > { > - struct drm_device *dev = crtc->dev; > + struct drm_device *dev = crtc_state->crtc->dev; > struct drm_i915_private *dev_priv = dev->dev_private; > > /* The clocks have to be on to load the palette. */ > - if (!crtc->state->active) > + if (!crtc_state->active) > return; > > - dev_priv->display.load_luts(crtc); > + dev_priv->display.load_luts(crtc_state); > } > > int intel_color_check(struct drm_crtc *crtc, > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index 29aa64be1f03..4f913e5febf1 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -3223,7 +3223,7 @@ static void intel_update_pipe_config(struct intel_crtc *crtc, > pipe_config->pipe_src_w, pipe_config->pipe_src_h); > > if (HAS_DDI(dev)) > - intel_color_set_csc(&crtc->base); > + intel_color_set_csc(&pipe_config->base); > > /* > * Update pipe size and adjust fitter if needed: the reason for this is > @@ -4723,6 +4723,8 @@ static void ironlake_crtc_enable(struct drm_crtc *crtc) > struct intel_crtc *intel_crtc = to_intel_crtc(crtc); > struct intel_encoder *encoder; > int pipe = intel_crtc->pipe; > + struct intel_crtc_state *pipe_config = > + to_intel_crtc_state(crtc->state); > > if (WARN_ON(intel_crtc->active)) > return; > @@ -4770,7 +4772,7 @@ static void ironlake_crtc_enable(struct drm_crtc *crtc) > * On ILK+ LUT must be loaded before the pipe is running but with > * clocks enabled > */ > - intel_color_load_luts(crtc); > + intel_color_load_luts(&pipe_config->base); > > if (dev_priv->display.initial_watermarks != NULL) > dev_priv->display.initial_watermarks(intel_crtc->config); > @@ -4845,7 +4847,7 @@ static void haswell_crtc_enable(struct drm_crtc *crtc) > > haswell_set_pipemisc(crtc); > > - intel_color_set_csc(crtc); > + intel_color_set_csc(&pipe_config->base); > > intel_crtc->active = true; > > @@ -4874,7 +4876,7 @@ static void haswell_crtc_enable(struct drm_crtc *crtc) > * On ILK+ LUT must be loaded before the pipe is running but with > * clocks enabled > */ > - intel_color_load_luts(crtc); > + intel_color_load_luts(&pipe_config->base); > > intel_ddi_set_pipe_settings(crtc); > if (!intel_crtc->config->has_dsi_encoder) > @@ -6035,6 +6037,8 @@ static void valleyview_crtc_enable(struct drm_crtc *crtc) > struct drm_i915_private *dev_priv = to_i915(dev); > struct intel_crtc *intel_crtc = to_intel_crtc(crtc); > struct intel_encoder *encoder; > + struct intel_crtc_state *pipe_config = > + to_intel_crtc_state(crtc->state); > int pipe = intel_crtc->pipe; > > if (WARN_ON(intel_crtc->active)) > @@ -6079,7 +6083,7 @@ static void valleyview_crtc_enable(struct drm_crtc *crtc) > > i9xx_pfit_enable(intel_crtc); > > - intel_color_load_luts(crtc); > + intel_color_load_luts(&pipe_config->base); > > intel_update_watermarks(crtc); > intel_enable_pipe(intel_crtc); > @@ -6106,6 +6110,8 @@ static void i9xx_crtc_enable(struct drm_crtc *crtc) > struct drm_i915_private *dev_priv = to_i915(dev); > struct intel_crtc *intel_crtc = to_intel_crtc(crtc); > struct intel_encoder *encoder; > + struct intel_crtc_state *pipe_config = > + to_intel_crtc_state(crtc->state); > int pipe = intel_crtc->pipe; > > if (WARN_ON(intel_crtc->active)) > @@ -6134,7 +6140,7 @@ static void i9xx_crtc_enable(struct drm_crtc *crtc) > > i9xx_pfit_enable(intel_crtc); > > - intel_color_load_luts(crtc); > + intel_color_load_luts(&pipe_config->base); > > intel_update_watermarks(crtc); > intel_enable_pipe(intel_crtc); > @@ -13605,8 +13611,8 @@ static int intel_atomic_commit(struct drm_device *dev, > * a modeset as this will be done by > * crtc_enable already. > */ > - intel_color_set_csc(crtc); > - intel_color_load_luts(crtc); > + intel_color_set_csc(crtc->state); > + intel_color_load_luts(crtc->state); > } > > if (!modeset) > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h > index c87b4503435d..6ac46d921cde 100644 > --- a/drivers/gpu/drm/i915/intel_drv.h > +++ b/drivers/gpu/drm/i915/intel_drv.h > @@ -1669,7 +1669,7 @@ extern const struct drm_plane_helper_funcs intel_plane_helper_funcs; > /* intel_color.c */ > void intel_color_init(struct drm_crtc *crtc); > int intel_color_check(struct drm_crtc *crtc, struct drm_crtc_state *state); > -void intel_color_set_csc(struct drm_crtc *crtc); > -void intel_color_load_luts(struct drm_crtc *crtc); > +void intel_color_set_csc(struct drm_crtc_state *crtc_state); > +void intel_color_load_luts(struct drm_crtc_state *crtc_state); > > #endif /* __INTEL_DRV_H__ */ _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/3] drm/i915: Do not check crtc_state->active in intel_color_load_luts. 2016-03-30 15:16 [PATCH 0/3] drm/i915: color management atomic fixes Maarten Lankhorst 2016-03-30 15:16 ` [PATCH 1/3] drm/i915: Pass crtc_state to color management functions Maarten Lankhorst @ 2016-03-30 15:16 ` Maarten Lankhorst 2016-03-30 16:42 ` Lionel Landwerlin 2016-03-30 15:16 ` [PATCH 3/3] drm/i915: Update color management during vblank evasion Maarten Lankhorst 2 siblings, 1 reply; 9+ messages in thread From: Maarten Lankhorst @ 2016-03-30 15:16 UTC (permalink / raw) To: intel-gfx This is already tested by its callers. Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> --- drivers/gpu/drm/i915/intel_color.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_color.c b/drivers/gpu/drm/i915/intel_color.c index 9cffa638c351..1b3f97449395 100644 --- a/drivers/gpu/drm/i915/intel_color.c +++ b/drivers/gpu/drm/i915/intel_color.c @@ -487,10 +487,6 @@ void intel_color_load_luts(struct drm_crtc_state *crtc_state) struct drm_device *dev = crtc_state->crtc->dev; struct drm_i915_private *dev_priv = dev->dev_private; - /* The clocks have to be on to load the palette. */ - if (!crtc_state->active) - return; - dev_priv->display.load_luts(crtc_state); } -- 2.1.0 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] drm/i915: Do not check crtc_state->active in intel_color_load_luts. 2016-03-30 15:16 ` [PATCH 2/3] drm/i915: Do not check crtc_state->active in intel_color_load_luts Maarten Lankhorst @ 2016-03-30 16:42 ` Lionel Landwerlin 0 siblings, 0 replies; 9+ messages in thread From: Lionel Landwerlin @ 2016-03-30 16:42 UTC (permalink / raw) To: Maarten Lankhorst, intel-gfx On 30/03/16 16:16, Maarten Lankhorst wrote: > This is already tested by its callers. > > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> > --- > drivers/gpu/drm/i915/intel_color.c | 4 ---- > 1 file changed, 4 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_color.c b/drivers/gpu/drm/i915/intel_color.c > index 9cffa638c351..1b3f97449395 100644 > --- a/drivers/gpu/drm/i915/intel_color.c > +++ b/drivers/gpu/drm/i915/intel_color.c > @@ -487,10 +487,6 @@ void intel_color_load_luts(struct drm_crtc_state *crtc_state) > struct drm_device *dev = crtc_state->crtc->dev; > struct drm_i915_private *dev_priv = dev->dev_private; > > - /* The clocks have to be on to load the palette. */ > - if (!crtc_state->active) > - return; > - > dev_priv->display.load_luts(crtc_state); > } > _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 3/3] drm/i915: Update color management during vblank evasion. 2016-03-30 15:16 [PATCH 0/3] drm/i915: color management atomic fixes Maarten Lankhorst 2016-03-30 15:16 ` [PATCH 1/3] drm/i915: Pass crtc_state to color management functions Maarten Lankhorst 2016-03-30 15:16 ` [PATCH 2/3] drm/i915: Do not check crtc_state->active in intel_color_load_luts Maarten Lankhorst @ 2016-03-30 15:16 ` Maarten Lankhorst 2016-03-30 16:41 ` Lionel Landwerlin 2 siblings, 1 reply; 9+ messages in thread From: Maarten Lankhorst @ 2016-03-30 15:16 UTC (permalink / raw) To: intel-gfx Without this a vblank may occur between updating color management and planes, which should be prevented. intel_color_set_csc was called in update pipe config because the handover from hardware may not have any csc set, which resulted in a black screen. Because of this also update color management during fastset. Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> --- drivers/gpu/drm/i915/intel_display.c | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 4f913e5febf1..179461b45ce3 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -3222,9 +3222,6 @@ static void intel_update_pipe_config(struct intel_crtc *crtc, old_crtc_state->pipe_src_w, old_crtc_state->pipe_src_h, pipe_config->pipe_src_w, pipe_config->pipe_src_h); - if (HAS_DDI(dev)) - intel_color_set_csc(&pipe_config->base); - /* * Update pipe size and adjust fitter if needed: the reason for this is * that in compute_mode_changes we check the native mode (not the pfit @@ -13603,18 +13600,6 @@ static int intel_atomic_commit(struct drm_device *dev, dev_priv->display.crtc_enable(crtc); } - if (!modeset && - crtc->state->active && - crtc->state->color_mgmt_changed) { - /* - * Only update color management when not doing - * a modeset as this will be done by - * crtc_enable already. - */ - intel_color_set_csc(crtc->state); - intel_color_load_luts(crtc->state); - } - if (!modeset) intel_pre_plane_update(to_intel_crtc_state(old_crtc_state)); @@ -13933,6 +13918,16 @@ static void intel_begin_crtc_commit(struct drm_crtc *crtc, if (modeset) return; + if (crtc->state->color_mgmt_changed || to_intel_crtc_state(crtc->state)->update_pipe) { + /* + * Only update color management when not doing + * a modeset as this will be done by + * crtc_enable already. + */ + intel_color_set_csc(crtc->state); + intel_color_load_luts(crtc->state); + } + if (to_intel_crtc_state(crtc->state)->update_pipe) intel_update_pipe_config(intel_crtc, old_intel_state); else if (INTEL_INFO(dev)->gen >= 9) -- 2.1.0 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 3/3] drm/i915: Update color management during vblank evasion. 2016-03-30 15:16 ` [PATCH 3/3] drm/i915: Update color management during vblank evasion Maarten Lankhorst @ 2016-03-30 16:41 ` Lionel Landwerlin 2016-03-31 10:35 ` Lionel Landwerlin 2016-03-31 10:35 ` Lionel Landwerlin 0 siblings, 2 replies; 9+ messages in thread From: Lionel Landwerlin @ 2016-03-30 16:41 UTC (permalink / raw) To: Maarten Lankhorst, intel-gfx On 30/03/16 16:16, Maarten Lankhorst wrote: > Without this a vblank may occur between updating color management > and planes, which should be prevented. > > intel_color_set_csc was called in update pipe config because the > handover from hardware may not have any csc set, which resulted > in a black screen. Because of this also update color management > during fastset. > > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Tested-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> > --- > drivers/gpu/drm/i915/intel_display.c | 25 ++++++++++--------------- > 1 file changed, 10 insertions(+), 15 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index 4f913e5febf1..179461b45ce3 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -3222,9 +3222,6 @@ static void intel_update_pipe_config(struct intel_crtc *crtc, > old_crtc_state->pipe_src_w, old_crtc_state->pipe_src_h, > pipe_config->pipe_src_w, pipe_config->pipe_src_h); > > - if (HAS_DDI(dev)) > - intel_color_set_csc(&pipe_config->base); > - > /* > * Update pipe size and adjust fitter if needed: the reason for this is > * that in compute_mode_changes we check the native mode (not the pfit > @@ -13603,18 +13600,6 @@ static int intel_atomic_commit(struct drm_device *dev, > dev_priv->display.crtc_enable(crtc); > } > > - if (!modeset && > - crtc->state->active && > - crtc->state->color_mgmt_changed) { > - /* > - * Only update color management when not doing > - * a modeset as this will be done by > - * crtc_enable already. > - */ > - intel_color_set_csc(crtc->state); > - intel_color_load_luts(crtc->state); > - } > - > if (!modeset) > intel_pre_plane_update(to_intel_crtc_state(old_crtc_state)); > > @@ -13933,6 +13918,16 @@ static void intel_begin_crtc_commit(struct drm_crtc *crtc, > if (modeset) > return; > > + if (crtc->state->color_mgmt_changed || to_intel_crtc_state(crtc->state)->update_pipe) { > + /* > + * Only update color management when not doing > + * a modeset as this will be done by > + * crtc_enable already. > + */ I guess we can drop this comment. > + intel_color_set_csc(crtc->state); > + intel_color_load_luts(crtc->state); > + } > + > if (to_intel_crtc_state(crtc->state)->update_pipe) > intel_update_pipe_config(intel_crtc, old_intel_state); > else if (INTEL_INFO(dev)->gen >= 9) _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/3] drm/i915: Update color management during vblank evasion. 2016-03-30 16:41 ` Lionel Landwerlin @ 2016-03-31 10:35 ` Lionel Landwerlin 2016-03-31 10:35 ` Lionel Landwerlin 1 sibling, 0 replies; 9+ messages in thread From: Lionel Landwerlin @ 2016-03-31 10:35 UTC (permalink / raw) To: intel-gfx, Maarten Lankhorst On 30/03/16 17:41, Lionel Landwerlin wrote: > On 30/03/16 16:16, Maarten Lankhorst wrote: >> Without this a vblank may occur between updating color management >> and planes, which should be prevented. >> >> intel_color_set_csc was called in update pipe config because the >> handover from hardware may not have any csc set, which resulted >> in a black screen. Because of this also update color management >> during fastset. >> >> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> > Tested-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> > >> --- >> drivers/gpu/drm/i915/intel_display.c | 25 ++++++++++--------------- >> 1 file changed, 10 insertions(+), 15 deletions(-) >> >> diff --git a/drivers/gpu/drm/i915/intel_display.c >> b/drivers/gpu/drm/i915/intel_display.c >> index 4f913e5febf1..179461b45ce3 100644 >> --- a/drivers/gpu/drm/i915/intel_display.c >> +++ b/drivers/gpu/drm/i915/intel_display.c >> @@ -3222,9 +3222,6 @@ static void intel_update_pipe_config(struct >> intel_crtc *crtc, >> old_crtc_state->pipe_src_w, old_crtc_state->pipe_src_h, >> pipe_config->pipe_src_w, pipe_config->pipe_src_h); >> - if (HAS_DDI(dev)) >> - intel_color_set_csc(&pipe_config->base); >> - >> /* >> * Update pipe size and adjust fitter if needed: the reason for >> this is >> * that in compute_mode_changes we check the native mode (not >> the pfit >> @@ -13603,18 +13600,6 @@ static int intel_atomic_commit(struct >> drm_device *dev, >> dev_priv->display.crtc_enable(crtc); >> } >> - if (!modeset && >> - crtc->state->active && >> - crtc->state->color_mgmt_changed) { >> - /* >> - * Only update color management when not doing >> - * a modeset as this will be done by >> - * crtc_enable already. >> - */ >> - intel_color_set_csc(crtc->state); >> - intel_color_load_luts(crtc->state); >> - } >> - >> if (!modeset) >> intel_pre_plane_update(to_intel_crtc_state(old_crtc_state)); >> @@ -13933,6 +13918,16 @@ static void intel_begin_crtc_commit(struct >> drm_crtc *crtc, >> if (modeset) >> return; >> + if (crtc->state->color_mgmt_changed || >> to_intel_crtc_state(crtc->state)->update_pipe) { >> + /* >> + * Only update color management when not doing >> + * a modeset as this will be done by >> + * crtc_enable already. >> + */ > I guess we can drop this comment. >> + intel_color_set_csc(crtc->state); >> + intel_color_load_luts(crtc->state); >> + } >> + >> if (to_intel_crtc_state(crtc->state)->update_pipe) >> intel_update_pipe_config(intel_crtc, old_intel_state); >> else if (INTEL_INFO(dev)->gen >= 9) > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/3] drm/i915: Update color management during vblank evasion. 2016-03-30 16:41 ` Lionel Landwerlin 2016-03-31 10:35 ` Lionel Landwerlin @ 2016-03-31 10:35 ` Lionel Landwerlin 1 sibling, 0 replies; 9+ messages in thread From: Lionel Landwerlin @ 2016-03-31 10:35 UTC (permalink / raw) To: intel-gfx, Maarten Lankhorst On 30/03/16 17:41, Lionel Landwerlin wrote: > On 30/03/16 16:16, Maarten Lankhorst wrote: >> Without this a vblank may occur between updating color management >> and planes, which should be prevented. >> >> intel_color_set_csc was called in update pipe config because the >> handover from hardware may not have any csc set, which resulted >> in a black screen. Because of this also update color management >> during fastset. >> >> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> > Tested-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> > >> --- >> drivers/gpu/drm/i915/intel_display.c | 25 ++++++++++--------------- >> 1 file changed, 10 insertions(+), 15 deletions(-) >> >> diff --git a/drivers/gpu/drm/i915/intel_display.c >> b/drivers/gpu/drm/i915/intel_display.c >> index 4f913e5febf1..179461b45ce3 100644 >> --- a/drivers/gpu/drm/i915/intel_display.c >> +++ b/drivers/gpu/drm/i915/intel_display.c >> @@ -3222,9 +3222,6 @@ static void intel_update_pipe_config(struct >> intel_crtc *crtc, >> old_crtc_state->pipe_src_w, old_crtc_state->pipe_src_h, >> pipe_config->pipe_src_w, pipe_config->pipe_src_h); >> - if (HAS_DDI(dev)) >> - intel_color_set_csc(&pipe_config->base); >> - >> /* >> * Update pipe size and adjust fitter if needed: the reason for >> this is >> * that in compute_mode_changes we check the native mode (not >> the pfit >> @@ -13603,18 +13600,6 @@ static int intel_atomic_commit(struct >> drm_device *dev, >> dev_priv->display.crtc_enable(crtc); >> } >> - if (!modeset && >> - crtc->state->active && >> - crtc->state->color_mgmt_changed) { >> - /* >> - * Only update color management when not doing >> - * a modeset as this will be done by >> - * crtc_enable already. >> - */ >> - intel_color_set_csc(crtc->state); >> - intel_color_load_luts(crtc->state); >> - } >> - >> if (!modeset) >> intel_pre_plane_update(to_intel_crtc_state(old_crtc_state)); >> @@ -13933,6 +13918,16 @@ static void intel_begin_crtc_commit(struct >> drm_crtc *crtc, >> if (modeset) >> return; >> + if (crtc->state->color_mgmt_changed || >> to_intel_crtc_state(crtc->state)->update_pipe) { >> + /* >> + * Only update color management when not doing >> + * a modeset as this will be done by >> + * crtc_enable already. >> + */ > I guess we can drop this comment. >> + intel_color_set_csc(crtc->state); >> + intel_color_load_luts(crtc->state); >> + } >> + >> if (to_intel_crtc_state(crtc->state)->update_pipe) >> intel_update_pipe_config(intel_crtc, old_intel_state); >> else if (INTEL_INFO(dev)->gen >= 9) > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2016-03-31 10:35 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-03-30 15:16 [PATCH 0/3] drm/i915: color management atomic fixes Maarten Lankhorst 2016-03-30 15:16 ` [PATCH 1/3] drm/i915: Pass crtc_state to color management functions Maarten Lankhorst 2016-03-30 16:44 ` Lionel Landwerlin 2016-03-30 15:16 ` [PATCH 2/3] drm/i915: Do not check crtc_state->active in intel_color_load_luts Maarten Lankhorst 2016-03-30 16:42 ` Lionel Landwerlin 2016-03-30 15:16 ` [PATCH 3/3] drm/i915: Update color management during vblank evasion Maarten Lankhorst 2016-03-30 16:41 ` Lionel Landwerlin 2016-03-31 10:35 ` Lionel Landwerlin 2016-03-31 10:35 ` Lionel Landwerlin
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox