> -----Original Message----- > From: Intel-gfx <intel-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx> On Behalf Of Ville Syrjala > Sent: Thursday, September 29, 2022 12:45 PM > To: intel-gfx@xxxxxxxxxxxxxxxxxxxxx > Subject: [PATCH 10/10] drm/i915: Stop loading linear degammma LUT on > glk needlessly Typo in degamma > > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > Make glk_load_luts() a bit lighter for the common case where neither the degamma > LUT nor pipe CSC are enabled by not loading the linear degamma LUT. Making > .load_luts() as lightweight as possible is a good idea since it may need to execute > from a vblank worker under tight deadlines. > > My earlier reasoning for always loading the linear degamma LUT was to avoid an > extra LUT load when just enabling/disabling the pipe CSC, but that is nonsense since > we load the LUTs on every flagged color manaement change/modeset anyway Nit pick: Typo in management. With above fixed, Reviewed-by: Uma Shankar <uma.shankar@xxxxxxxxx> > (either of which is needed for a pipe CSC toggle). > > We can also get rid of the glk_can_preload_luts() special case since the presence of > the degamma LUT will now always match csc_enable. > > Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/display/intel_color.c | 26 +++------------------- > 1 file changed, 3 insertions(+), 23 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_color.c > b/drivers/gpu/drm/i915/display/intel_color.c > index de530bf1aba1..a3066d942f58 100644 > --- a/drivers/gpu/drm/i915/display/intel_color.c > +++ b/drivers/gpu/drm/i915/display/intel_color.c > @@ -1198,24 +1198,6 @@ static bool chv_can_preload_luts(const struct > intel_crtc_state *new_crtc_state) > return !old_crtc_state->post_csc_lut; > } > > -static bool glk_can_preload_luts(const struct intel_crtc_state *new_crtc_state) -{ > - struct intel_crtc *crtc = to_intel_crtc(new_crtc_state->uapi.crtc); > - struct intel_atomic_state *state = > - to_intel_atomic_state(new_crtc_state->uapi.state); > - const struct intel_crtc_state *old_crtc_state = > - intel_atomic_get_old_crtc_state(state, crtc); > - > - /* > - * The hardware degamma is active whenever the pipe > - * CSC is active. Thus even if the old state has no > - * software degamma we need to avoid clobbering the > - * linear hardware degamma mid scanout. > - */ > - return !old_crtc_state->csc_enable && > - !old_crtc_state->post_csc_lut; > -} > - > int intel_color_check(struct intel_crtc_state *crtc_state) { > struct drm_i915_private *dev_priv = to_i915(crtc_state->uapi.crtc->dev); > @@ -1622,11 +1604,9 @@ static void glk_assign_luts(struct intel_crtc_state > *crtc_state) > * On GLK+ both pipe CSC and degamma LUT are controlled > * by csc_enable. Hence for the cases where the CSC is > * needed but degamma LUT is not we need to load a > - * linear degamma LUT. In fact we'll just always load > - * the degama LUT so that we don't have to reload > - * it every time the pipe CSC is being enabled. > + * linear degamma LUT. > */ > - if (!crtc_state->pre_csc_lut) > + if (crtc_state->csc_enable && !crtc_state->pre_csc_lut) > drm_property_replace_blob(&crtc_state->pre_csc_lut, > i915- > >display.color.glk_linear_degamma_lut); > } > @@ -1667,7 +1647,7 @@ static int glk_color_check(struct intel_crtc_state > *crtc_state) > > glk_assign_luts(crtc_state); > > - crtc_state->preload_luts = glk_can_preload_luts(crtc_state); > + crtc_state->preload_luts = intel_can_preload_luts(crtc_state); > > return 0; > } > -- > 2.35.1