On Mon, Sep 08, 2025 at 10:35:35AM +0300, Luca Coelho wrote: > Isolate the code that handles method selection and calculation, so > skl_compute_plane_wm() doesn't get too long. > > Signed-off-by: Luca Coelho <luciano.coe...@intel.com> > --- > drivers/gpu/drm/i915/display/skl_watermark.c | 51 ++++++++++++-------- > 1 file changed, 31 insertions(+), 20 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c > b/drivers/gpu/drm/i915/display/skl_watermark.c > index 21f8d52ec1d2..33853a18ee9c 100644 > --- a/drivers/gpu/drm/i915/display/skl_watermark.c > +++ b/drivers/gpu/drm/i915/display/skl_watermark.c > @@ -1806,25 +1806,14 @@ static bool xe3_auto_min_alloc_capable(struct > intel_plane *plane, int level) > return DISPLAY_VER(display) >= 30 && level == 0 && plane->id != > PLANE_CURSOR; > } > > -static void skl_compute_plane_wm(const struct intel_crtc_state *crtc_state, > - struct intel_plane *plane, > - int level, > - unsigned int latency, > - const struct skl_wm_params *wp, > - const struct skl_wm_level *result_prev, > - struct skl_wm_level *result /* out */) > +static uint_fixed_16_16_t > +skl_wm_run_method(struct intel_display *display,
I was confused what a "run method" is, but I guess "run" is supposed to be a verb here. However this thing does a lot more than "run a method", so I don't really like this. I susepct it would make more sense to carve up skl_compute_plane_wm() into several smaller (possibly platform dependent) pieces. Eg. the result selection part seems like one thing that could extracted into a small function. The min_ddb_alloc calculation would be another clear piece that can be extracted. > + const struct intel_crtc_state *crtc_state, > + const struct skl_wm_params *wp, > + unsigned int latency) > { > - struct intel_display *display = to_intel_display(crtc_state); > uint_fixed_16_16_t method1, method2; > uint_fixed_16_16_t selected_result; > - u32 blocks, lines, min_ddb_alloc = 0; > - > - if (latency == 0 || > - (use_minimal_wm0_only(crtc_state, plane) && level > 0)) { > - /* reject it */ > - result->min_ddb_alloc = U16_MAX; > - return; > - } > > method1 = skl_wm_method1(display, wp->plane_pixel_rate, > wp->cpp, latency, wp->dbuf_block_size); > @@ -1837,7 +1826,9 @@ static void skl_compute_plane_wm(const struct > intel_crtc_state *crtc_state, > case WM_TILING_Y_FAMILY: > selected_result = max_fixed16(method2, wp->y_tile_minimum); > break; > - > + default: > + MISSING_CASE(wp->tiling); > + fallthrough; > case WM_TILING_LINEAR: > case WM_TILING_X_TILED: > /* > @@ -1862,12 +1853,32 @@ static void skl_compute_plane_wm(const struct > intel_crtc_state *crtc_state, > selected_result = method1; > } > break; > + } > > - default: > - drm_err(display->drm, "Invalid tiling mode\n", wp->tiling); > - break; > + return selected_result; > +} > + > +static void skl_compute_plane_wm(const struct intel_crtc_state *crtc_state, > + struct intel_plane *plane, > + int level, > + unsigned int latency, > + const struct skl_wm_params *wp, > + const struct skl_wm_level *result_prev, > + struct skl_wm_level *result /* out */) > +{ > + struct intel_display *display = to_intel_display(crtc_state); > + uint_fixed_16_16_t selected_result; > + u32 blocks, lines, min_ddb_alloc = 0; > + > + if (latency == 0 || > + (use_minimal_wm0_only(crtc_state, plane) && level > 0)) { > + /* reject it */ > + result->min_ddb_alloc = U16_MAX; > + return; > } > > + selected_result = skl_wm_run_method(display, crtc_state, wp, latency); > + > blocks = fixed16_to_u32_round_up(selected_result); > if (DISPLAY_VER(display) < 30) > blocks++; > -- > 2.50.1 -- Ville Syrjälä Intel