mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-06 03:06:50 -04:00
drm/i915/scaler: Refactor max_scale computation
Refactor max scaling factor computation into a reusable function for scalers. --v2: - Add missing comment. [Ankit] Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com> Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20250120172209.188488-4-mitulkumar.ajitkumar.golani@intel.com
This commit is contained in:
committed by
Ankit Nautiyal
parent
f42da9aa86
commit
cabb162f7b
@@ -319,6 +319,44 @@ static int intel_allocate_scaler(struct intel_crtc_scaler_state *scaler_state,
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void
|
||||
calculate_max_scale(struct intel_crtc *crtc,
|
||||
bool is_yuv_semiplanar,
|
||||
int scaler_id,
|
||||
int *max_hscale, int *max_vscale)
|
||||
{
|
||||
struct intel_display *display = to_intel_display(crtc);
|
||||
|
||||
/*
|
||||
* FIXME: When two scalers are needed, but only one of
|
||||
* them needs to downscale, we should make sure that
|
||||
* the one that needs downscaling support is assigned
|
||||
* as the first scaler, so we don't reject downscaling
|
||||
* unnecessarily.
|
||||
*/
|
||||
|
||||
if (DISPLAY_VER(display) >= 14) {
|
||||
/*
|
||||
* On versions 14 and up, only the first
|
||||
* scaler supports a vertical scaling factor
|
||||
* of more than 1.0, while a horizontal
|
||||
* scaling factor of 3.0 is supported.
|
||||
*/
|
||||
*max_hscale = 0x30000 - 1;
|
||||
|
||||
if (scaler_id == 0)
|
||||
*max_vscale = 0x30000 - 1;
|
||||
else
|
||||
*max_vscale = 0x10000;
|
||||
} else if (DISPLAY_VER(display) >= 10 || !is_yuv_semiplanar) {
|
||||
*max_hscale = 0x30000 - 1;
|
||||
*max_vscale = 0x30000 - 1;
|
||||
} else {
|
||||
*max_hscale = 0x20000 - 1;
|
||||
*max_vscale = 0x20000 - 1;
|
||||
}
|
||||
}
|
||||
|
||||
static int intel_atomic_setup_scaler(struct intel_crtc_state *crtc_state,
|
||||
int num_scalers_need, struct intel_crtc *crtc,
|
||||
const char *name, int idx,
|
||||
@@ -388,35 +426,9 @@ static int intel_atomic_setup_scaler(struct intel_crtc_state *crtc_state,
|
||||
const struct drm_rect *dst = &plane_state->uapi.dst;
|
||||
int hscale, vscale, max_vscale, max_hscale;
|
||||
|
||||
/*
|
||||
* FIXME: When two scalers are needed, but only one of
|
||||
* them needs to downscale, we should make sure that
|
||||
* the one that needs downscaling support is assigned
|
||||
* as the first scaler, so we don't reject downscaling
|
||||
* unnecessarily.
|
||||
*/
|
||||
|
||||
if (DISPLAY_VER(display) >= 14) {
|
||||
/*
|
||||
* On versions 14 and up, only the first
|
||||
* scaler supports a vertical scaling factor
|
||||
* of more than 1.0, while a horizontal
|
||||
* scaling factor of 3.0 is supported.
|
||||
*/
|
||||
max_hscale = 0x30000 - 1;
|
||||
if (*scaler_id == 0)
|
||||
max_vscale = 0x30000 - 1;
|
||||
else
|
||||
max_vscale = 0x10000;
|
||||
|
||||
} else if (DISPLAY_VER(display) >= 10 ||
|
||||
!intel_format_info_is_yuv_semiplanar(fb->format, fb->modifier)) {
|
||||
max_hscale = 0x30000 - 1;
|
||||
max_vscale = 0x30000 - 1;
|
||||
} else {
|
||||
max_hscale = 0x20000 - 1;
|
||||
max_vscale = 0x20000 - 1;
|
||||
}
|
||||
calculate_max_scale(crtc,
|
||||
intel_format_info_is_yuv_semiplanar(fb->format, fb->modifier),
|
||||
*scaler_id, &max_hscale, &max_vscale);
|
||||
|
||||
/*
|
||||
* FIXME: We should change the if-else block above to
|
||||
|
||||
Reference in New Issue
Block a user