Make a common wrapper for pipe_scaling and sharpness which will be invoked from hsw_crtc_enable and pipe_fastset. Then accoridng to the condition pfit_enable or casf_enable or casf_update_strength can be invoked. This is done so that all pipe related functions can be under one umberalla.
Signed-off-by: Nemesa Garg <[email protected]> --- drivers/gpu/drm/i915/display/intel_display.c | 24 ++++------------ drivers/gpu/drm/i915/display/skl_scaler.c | 29 ++++++++++++++++++++ drivers/gpu/drm/i915/display/skl_scaler.h | 3 ++ 3 files changed, 37 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index 568730ffe359..ddab4a1417ec 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -991,15 +991,6 @@ static bool audio_disabling(const struct intel_crtc_state *old_crtc_state, memcmp(old_crtc_state->eld, new_crtc_state->eld, MAX_ELD_BYTES) != 0); } -static bool intel_casf_enabling(const struct intel_crtc_state *new_crtc_state, - const struct intel_crtc_state *old_crtc_state) -{ - if (!new_crtc_state->hw.active) - return false; - - return is_enabling(hw.casf_params.casf_enable, old_crtc_state, new_crtc_state); -} - static bool intel_casf_disabling(const struct intel_crtc_state *old_crtc_state, const struct intel_crtc_state *new_crtc_state) { @@ -1679,7 +1670,7 @@ static void hsw_crtc_enable(struct intel_atomic_state *state, glk_pipe_scaler_clock_gating_wa(pipe_crtc, true); if (DISPLAY_VER(display) >= 9) - skl_pfit_enable(pipe_crtc_state); + skl_scaler_enable(state, crtc); else ilk_pfit_enable(pipe_crtc_state); @@ -6635,7 +6626,8 @@ void intel_crtc_arm_fifo_underrun(struct intel_crtc *crtc, } } -static void intel_pipe_fastset(const struct intel_crtc_state *old_crtc_state, +static void intel_pipe_fastset(struct intel_atomic_state *state, + const struct intel_crtc_state *old_crtc_state, const struct intel_crtc_state *new_crtc_state) { struct intel_display *display = to_intel_display(new_crtc_state); @@ -6653,8 +6645,7 @@ static void intel_pipe_fastset(const struct intel_crtc_state *old_crtc_state, /* on skylake this is done by detaching scalers */ if (DISPLAY_VER(display) >= 9) { - if (new_crtc_state->pch_pfit.enabled) - skl_pfit_enable(new_crtc_state); + skl_scaler_enable(state, crtc); } else if (HAS_PCH_SPLIT(display)) { if (new_crtc_state->pch_pfit.enabled) ilk_pfit_enable(new_crtc_state); @@ -6706,7 +6697,7 @@ static void commit_pipe_pre_planes(struct intel_atomic_state *state, bdw_set_pipe_misc(NULL, new_crtc_state); if (intel_crtc_needs_fastset(new_crtc_state)) - intel_pipe_fastset(old_crtc_state, new_crtc_state); + intel_pipe_fastset(state, old_crtc_state, new_crtc_state); } intel_psr2_program_trans_man_trk_ctl(NULL, new_crtc_state); @@ -6805,11 +6796,6 @@ static void intel_pre_update_crtc(struct intel_atomic_state *state, intel_vrr_set_transcoder_timings(new_crtc_state); } - if (intel_casf_enabling(new_crtc_state, old_crtc_state)) - intel_casf_enable(new_crtc_state); - else if (new_crtc_state->hw.casf_params.strength != old_crtc_state->hw.casf_params.strength) - intel_casf_update_strength(new_crtc_state); - intel_fbc_update(state, crtc); drm_WARN_ON(display->drm, !intel_display_power_is_enabled(display, POWER_DOMAIN_DC_OFF)); diff --git a/drivers/gpu/drm/i915/display/skl_scaler.c b/drivers/gpu/drm/i915/display/skl_scaler.c index abd951f7dd71..19a9c4a0da0a 100644 --- a/drivers/gpu/drm/i915/display/skl_scaler.c +++ b/drivers/gpu/drm/i915/display/skl_scaler.c @@ -752,6 +752,19 @@ static void skl_scaler_setup_filter(struct intel_display *display, } } +#define is_enabling(feature, old_crtc_state, new_crtc_state) \ + ((!(old_crtc_state)->feature || intel_crtc_needs_modeset(new_crtc_state)) && \ + (new_crtc_state)->feature) + +static bool intel_casf_enabling(const struct intel_crtc_state *new_crtc_state, + const struct intel_crtc_state *old_crtc_state) +{ + if (!new_crtc_state->hw.active) + return false; + + return is_enabling(hw.casf_params.casf_enable, old_crtc_state, new_crtc_state); +} + #define CASF_SCALER_FILTER_SELECT \ (PS_FILTER_PROGRAMMED | \ PS_Y_VERT_FILTER_SELECT(0) | \ @@ -859,6 +872,22 @@ void skl_pipe_scaler_setup(const struct intel_crtc_state *crtc_state, PS_WIN_XPOS(x) | PS_WIN_YPOS(y)); } +void skl_scaler_enable(struct intel_atomic_state *state, + struct intel_crtc *crtc) +{ + struct intel_crtc_state *new_crtc_state = + intel_atomic_get_new_crtc_state(state, crtc); + struct intel_crtc_state *old_crtc_state = + intel_atomic_get_old_crtc_state(state, crtc); + + if (new_crtc_state->pch_pfit.enabled) + skl_pfit_enable(new_crtc_state); + else if (intel_casf_enabling(new_crtc_state, old_crtc_state)) + intel_casf_enable(new_crtc_state); + else if (new_crtc_state->hw.casf_params.strength != old_crtc_state->hw.casf_params.strength) + intel_casf_update_strength(new_crtc_state); +} + void skl_program_plane_scaler(struct intel_dsb *dsb, struct intel_plane *plane, diff --git a/drivers/gpu/drm/i915/display/skl_scaler.h b/drivers/gpu/drm/i915/display/skl_scaler.h index 94bde5d1c06a..3d49836334b7 100644 --- a/drivers/gpu/drm/i915/display/skl_scaler.h +++ b/drivers/gpu/drm/i915/display/skl_scaler.h @@ -40,6 +40,9 @@ void skl_scaler_get_config(struct intel_crtc_state *crtc_state); void skl_scaler_setup_casf(struct intel_crtc_state *crtc_state); +void skl_scaler_enable(struct intel_atomic_state *state, + struct intel_crtc *crtc); + enum drm_mode_status skl_scaler_mode_valid(struct intel_display *display, const struct drm_display_mode *mode, -- 2.25.1
