Prefill calculations are getting screwed up as casf_compute is getting called in later stage. So move casf_compute_config to crtc_compute_config and check if there is a change in the sharpness strength, if so set the flag uapi.mode_changed so that everytime when strength changes casf_compute_config can be called and new strength value gets updated.
Signed-off-by: Nemesa Garg <[email protected]> --- drivers/gpu/drm/i915/display/intel_casf.c | 14 ++++++++++++++ drivers/gpu/drm/i915/display/intel_casf.h | 3 +++ drivers/gpu/drm/i915/display/intel_display.c | 10 ++++++---- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_casf.c b/drivers/gpu/drm/i915/display/intel_casf.c index 95339b496f24..6e45ff7d5ff7 100644 --- a/drivers/gpu/drm/i915/display/intel_casf.c +++ b/drivers/gpu/drm/i915/display/intel_casf.c @@ -288,3 +288,17 @@ void intel_casf_disable(const struct intel_crtc_state *crtc_state) intel_de_write(display, SHARPNESS_CTL(crtc->pipe), 0); intel_de_write(display, SKL_PS_WIN_SZ(crtc->pipe, 1), 0); } + +void intel_casf_check(struct intel_atomic_state *state) +{ + int i; + struct intel_crtc_state *old_crtc_state, *new_crtc_state; + struct intel_crtc *crtc; + + for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, + new_crtc_state, i) { + if (new_crtc_state->uapi.sharpness_strength != + old_crtc_state->uapi.sharpness_strength) + new_crtc_state->uapi.mode_changed = true; + } +} diff --git a/drivers/gpu/drm/i915/display/intel_casf.h b/drivers/gpu/drm/i915/display/intel_casf.h index b3fb0bcb3f5b..2eec90d9d4c4 100644 --- a/drivers/gpu/drm/i915/display/intel_casf.h +++ b/drivers/gpu/drm/i915/display/intel_casf.h @@ -9,6 +9,8 @@ #include <linux/types.h> struct intel_crtc_state; +struct intel_atomic_state; +struct intel_crtc; int intel_casf_compute_config(struct intel_crtc_state *crtc_state); void intel_casf_update_strength(struct intel_crtc_state *new_crtc_state); @@ -17,5 +19,6 @@ void intel_casf_enable(struct intel_crtc_state *crtc_state); void intel_casf_disable(const struct intel_crtc_state *crtc_state); void intel_casf_scaler_compute_config(struct intel_crtc_state *crtc_state); bool intel_casf_needs_scaler(const struct intel_crtc_state *crtc_state); +void intel_casf_check(struct intel_atomic_state *state); #endif /* __INTEL_CASF_H__ */ diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index 9c6d3ecdb589..882ea286fc9c 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -2494,6 +2494,10 @@ static int intel_crtc_compute_config(struct intel_atomic_state *state, intel_vrr_compute_guardband(crtc_state); + ret = intel_casf_compute_config(crtc_state); + if (ret) + return ret; + return 0; } @@ -4286,10 +4290,6 @@ static int intel_crtc_atomic_check(struct intel_atomic_state *state, return ret; } - ret = intel_casf_compute_config(crtc_state); - if (ret) - return ret; - if (DISPLAY_VER(display) >= 9) { if (intel_crtc_needs_modeset(crtc_state) || intel_crtc_needs_fastset(crtc_state) || @@ -6435,6 +6435,8 @@ int intel_atomic_check(struct drm_device *dev, intel_vrr_check_modeset(state); + intel_casf_check(state); + ret = drm_atomic_helper_check_modeset(dev, &state->base); if (ret) goto fail; -- 2.25.1
