]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915/casf: Make a proper hw state copy of the sharpness_strength
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Tue, 7 Apr 2026 17:52:36 +0000 (20:52 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 8 Apr 2026 11:40:26 +0000 (14:40 +0300)
Make a copy of the uapi.sharpness_strength property value in our hw
state. This is how we deal with having proper state for joined pipes.

Reviewed-by: Michał Grzelak <michal.grzelak@intel.com>
Reviewed-by: Nemesa Garg <nemesa.garg@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patch.msgid.link/20260407175244.19654-3-ville.syrjala@linux.intel.com
drivers/gpu/drm/i915/display/intel_casf.c
drivers/gpu/drm/i915/display/intel_crtc_state_dump.c
drivers/gpu/drm/i915/display/intel_display.c
drivers/gpu/drm/i915/display/intel_display_debugfs.c
drivers/gpu/drm/i915/display/intel_display_types.h
drivers/gpu/drm/i915/display/intel_modeset_setup.c

index 32e6f7c8acdde8c7b960b0fcbeb671c867457bdc..4316d8214e80847c1874d070cb7aa63c56917a0c 100644 (file)
@@ -109,7 +109,7 @@ int intel_casf_compute_config(struct intel_crtc_state *crtc_state)
        if (!HAS_CASF(display))
                return 0;
 
-       if (crtc_state->uapi.sharpness_strength == 0) {
+       if (crtc_state->hw.sharpness_strength == 0) {
                crtc_state->hw.casf_params.enable = false;
                crtc_state->hw.casf_params.strength = 0;
                return 0;
@@ -132,7 +132,7 @@ int intel_casf_compute_config(struct intel_crtc_state *crtc_state)
         * Also 85 + 16 = 101.
         */
        crtc_state->hw.casf_params.strength =
-               min(crtc_state->uapi.sharpness_strength, 0xEF) + 0x10;
+               min(crtc_state->hw.sharpness_strength, 0xEF) + 0x10;
 
        intel_casf_compute_win_size(crtc_state);
 
index a11a79a0211ecfc5550ef21af8dbc422bb0673ab..42676adf6062039f6856524c6612a81027a86e74 100644 (file)
@@ -328,11 +328,12 @@ void intel_crtc_state_dump(const struct intel_crtc_state *pipe_config,
                   pipe_config->linetime, pipe_config->ips_linetime);
 
        if (DISPLAY_VER(display) >= 9)
-               drm_printf(&p, "num_scalers: %d, scaler_users: 0x%x, scaler_id: %d, scaling_filter: %d\n",
+               drm_printf(&p, "num_scalers: %d, scaler_users: 0x%x, scaler_id: %d, scaling_filter: %d, sharpness_strength: %d\n",
                           crtc->num_scalers,
                           pipe_config->scaler_state.scaler_users,
                           pipe_config->scaler_state.scaler_id,
-                          pipe_config->hw.scaling_filter);
+                          pipe_config->hw.scaling_filter,
+                          pipe_config->hw.sharpness_strength);
 
        drm_printf(&p, "pipe src: " DRM_RECT_FMT "\n",
                   DRM_RECT_ARG(&pipe_config->pipe_src));
index 78d97441f6825ae1ea754ecea91ec2944afecdbb..a02c58b5a34d10aa19ffb9054c7a3015fe0bc906 100644 (file)
@@ -4550,6 +4550,7 @@ intel_crtc_copy_uapi_to_hw_state_modeset(struct intel_atomic_state *state,
        drm_mode_copy(&crtc_state->hw.adjusted_mode,
                      &crtc_state->uapi.adjusted_mode);
        crtc_state->hw.scaling_filter = crtc_state->uapi.scaling_filter;
+       crtc_state->hw.sharpness_strength = crtc_state->uapi.sharpness_strength;
 
        intel_crtc_copy_uapi_to_hw_state_nomodeset(state, crtc);
 }
@@ -4615,6 +4616,7 @@ copy_joiner_crtc_state_modeset(struct intel_atomic_state *state,
        drm_mode_copy(&secondary_crtc_state->hw.adjusted_mode,
                      &primary_crtc_state->hw.adjusted_mode);
        secondary_crtc_state->hw.scaling_filter = primary_crtc_state->hw.scaling_filter;
+       secondary_crtc_state->hw.sharpness_strength = primary_crtc_state->hw.sharpness_strength;
 
        if (primary_crtc_state->dp_tunnel_ref.tunnel)
                drm_dp_tunnel_ref_get(primary_crtc_state->dp_tunnel_ref.tunnel,
@@ -6441,6 +6443,10 @@ int intel_atomic_check(struct drm_device *dev,
                if (new_crtc_state->uapi.scaling_filter !=
                    old_crtc_state->uapi.scaling_filter)
                        new_crtc_state->uapi.mode_changed = true;
+
+               if (new_crtc_state->uapi.sharpness_strength !=
+                   old_crtc_state->uapi.sharpness_strength)
+                       new_crtc_state->uapi.mode_changed = true;
        }
 
        intel_vrr_check_modeset(state);
index 2614c4863c87778b73ba479ba33050b57a67dc52..f244a2b5d139444ace7783b9786fcf8d792e3161 100644 (file)
@@ -416,11 +416,12 @@ static void intel_scaler_info(struct seq_file *m, struct intel_crtc *crtc)
 
        /* Not all platforms have a scaler */
        if (num_scalers) {
-               seq_printf(m, "\tnum_scalers=%d, scaler_users=%x scaler_id=%d scaling_filter=%d",
+               seq_printf(m, "\tnum_scalers=%d, scaler_users=%x scaler_id=%d scaling_filter=%d sharpness_strength=%d",
                           num_scalers,
                           crtc_state->scaler_state.scaler_users,
                           crtc_state->scaler_state.scaler_id,
-                          crtc_state->hw.scaling_filter);
+                          crtc_state->hw.scaling_filter,
+                          crtc_state->hw.sharpness_strength);
 
                for (i = 0; i < num_scalers; i++) {
                        const struct intel_scaler *sc =
index 83bb5d19b6f66019259a91217d4f2f8de30709b4..af0d870de342905c8c1808bbdd7eddabf4088fef 100644 (file)
@@ -1036,6 +1036,7 @@ struct intel_crtc_state {
                struct drm_property_blob *degamma_lut, *gamma_lut, *ctm;
                struct drm_display_mode mode, pipe_mode, adjusted_mode;
                enum drm_scaling_filter scaling_filter;
+               u8 sharpness_strength;
                struct intel_casf casf_params;
        } hw;
 
index 4086f16a12bf472e52f9ba2f4939acd6d7187b9a..40a65a0d7ec722e1a36722df581f5ee3e4260459 100644 (file)
@@ -333,6 +333,7 @@ static void intel_crtc_copy_hw_to_uapi_state(struct intel_crtc_state *crtc_state
 
        crtc_state->uapi.adjusted_mode = crtc_state->hw.adjusted_mode;
        crtc_state->uapi.scaling_filter = crtc_state->hw.scaling_filter;
+       crtc_state->uapi.sharpness_strength = crtc_state->hw.sharpness_strength;
 
        if (DISPLAY_INFO(display)->color.degamma_lut_size) {
                /* assume 1:1 mapping */