summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/i915/display/skl_scaler.c
diff options
context:
space:
mode:
authorSuraj Kandpal <suraj.kandpal@intel.com>2025-07-08 07:33:28 +0300
committerSuraj Kandpal <suraj.kandpal@intel.com>2025-07-11 07:08:31 +0300
commit3347b55f2c6c4bebc7a07343448416e5678b8b5c (patch)
tree28dc84017002c62a1aa24231ee02028b0d679ebc /drivers/gpu/drm/i915/display/skl_scaler.c
parentf7a9dc796567b2f1562f83373a5f134a20db25e9 (diff)
downloadlinux-3347b55f2c6c4bebc7a07343448416e5678b8b5c.tar.xz
drm/i915/xe3lpd: Prune modes for YUV420
We only support resolution up to 4k for single pipe when using YUV420 format so we prune these modes and restrict the plane size at src. This is because pipe scaling will not support YUV420 scaling for hwidth > 4096. --v2 -Use output format to check [Ville] -Add Bspec references -Modify commit messge to point to why this is needed --v3 -Use a function skl_scaler_mode_valid which is routed throug intel_pfit_mode_valid [Ville] -Combine the check conditons [Jonathan] --v4 -mode_valid functions should return drm_mode_status [Jani] --v5 -Use skl_scaler_max_src_size [Ankit] Bspec: 49247, 50441 Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com> Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com> #v2 Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com> Link: https://lore.kernel.org/r/20250708043328.1086192-2-suraj.kandpal@intel.com
Diffstat (limited to 'drivers/gpu/drm/i915/display/skl_scaler.c')
-rw-r--r--drivers/gpu/drm/i915/display/skl_scaler.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/display/skl_scaler.c b/drivers/gpu/drm/i915/display/skl_scaler.c
index a6ba9da03542..4cc55f4e1f9f 100644
--- a/drivers/gpu/drm/i915/display/skl_scaler.c
+++ b/drivers/gpu/drm/i915/display/skl_scaler.c
@@ -132,6 +132,23 @@ static void skl_scaler_max_dst_size(struct intel_crtc *crtc,
}
}
+enum drm_mode_status
+skl_scaler_mode_valid(struct intel_display *display,
+ const struct drm_display_mode *mode,
+ enum intel_output_format output_format,
+ int num_joined_pipes)
+{
+ int max_h, max_w;
+
+ if (num_joined_pipes < 2 && output_format == INTEL_OUTPUT_FORMAT_YCBCR420) {
+ skl_scaler_max_src_size(display, &max_w, &max_h);
+ if (mode->hdisplay > max_h)
+ return MODE_NO_420;
+ }
+
+ return MODE_OK;
+}
+
static int
skl_update_scaler(struct intel_crtc_state *crtc_state, bool force_detach,
unsigned int scaler_user, int *scaler_id,