]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915/display: Set and get the casf config
authorNemesa Garg <nemesa.garg@intel.com>
Tue, 28 Oct 2025 12:07:44 +0000 (17:37 +0530)
committerJani Nikula <jani.nikula@intel.com>
Thu, 30 Oct 2025 13:44:25 +0000 (15:44 +0200)
Set the configuration for CASF and capture it
in crtc_state and get the configuration by
reading back. Add the support to compare the
software and hardware state of CASF.

v2: Update subject[Ankit]
v3: Add the state compare[Ankit]

Signed-off-by: Nemesa Garg <nemesa.garg@intel.com>
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Link: https://patch.msgid.link/20251028120747.3027332-9-ankit.k.nautiyal@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/display/intel_display.c
drivers/gpu/drm/i915/display/skl_scaler.c

index 0435b5da674a91b472d6c99ef34d80930e212426..c82439150eb9d8506c37f9509cf1aff495be793e 100644 (file)
@@ -4228,6 +4228,10 @@ 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) ||
@@ -5294,6 +5298,9 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
 
                PIPE_CONF_CHECK_I(scaler_state.scaler_id);
                PIPE_CONF_CHECK_I(pixel_rate);
+               PIPE_CONF_CHECK_BOOL(hw.casf_params.casf_enable);
+               PIPE_CONF_CHECK_I(hw.casf_params.win_size);
+               PIPE_CONF_CHECK_I(hw.casf_params.strength);
 
                PIPE_CONF_CHECK_X(gamma_mode);
                if (display->platform.cherryview)
index 9439b1a65fa6d92ce53e76a2faa3169762c694bc..92b920899dcea45d875992bfafe7a62eacc90ac2 100644 (file)
@@ -981,16 +981,23 @@ void skl_scaler_get_config(struct intel_crtc_state *crtc_state)
                        continue;
 
                id = i;
-               crtc_state->pch_pfit.enabled = true;
+
+               /* Read CASF regs for second scaler */
+               if (HAS_CASF(display) && id == 1)
+                       intel_casf_sharpness_get_config(crtc_state);
+
+               if (!crtc_state->hw.casf_params.casf_enable)
+                       crtc_state->pch_pfit.enabled = true;
 
                pos = intel_de_read(display, SKL_PS_WIN_POS(crtc->pipe, i));
                size = intel_de_read(display, SKL_PS_WIN_SZ(crtc->pipe, i));
 
-               drm_rect_init(&crtc_state->pch_pfit.dst,
-                             REG_FIELD_GET(PS_WIN_XPOS_MASK, pos),
-                             REG_FIELD_GET(PS_WIN_YPOS_MASK, pos),
-                             REG_FIELD_GET(PS_WIN_XSIZE_MASK, size),
-                             REG_FIELD_GET(PS_WIN_YSIZE_MASK, size));
+               if (!crtc_state->hw.casf_params.casf_enable)
+                       drm_rect_init(&crtc_state->pch_pfit.dst,
+                                     REG_FIELD_GET(PS_WIN_XPOS_MASK, pos),
+                                     REG_FIELD_GET(PS_WIN_YPOS_MASK, pos),
+                                     REG_FIELD_GET(PS_WIN_XSIZE_MASK, size),
+                                     REG_FIELD_GET(PS_WIN_YSIZE_MASK, size));
 
                scaler_state->scalers[i].in_use = true;
                break;