Skip to content

Commit 753d6b4

Browse files
committed
drm/i915/dp: Align min/max DSC input BPPs to sink caps
Align the minimum/maximum DSC input BPPs to the corresponding sink DSC input BPP capability limits already when computing the BPP limits. This alignment is also performed later during state computation, however there is no reason to initialize the limits to an unaligned/incorrect value. Reviewed-by: Vinod Govindapillai <vinod.govindapillai@intel.com> Signed-off-by: Imre Deak <imre.deak@intel.com> Link: https://patch.msgid.link/20251222153547.713360-6-imre.deak@intel.com
1 parent 44a95ff commit 753d6b4

1 file changed

Lines changed: 23 additions & 2 deletions

File tree

drivers/gpu/drm/i915/display/intel_dp.c

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1905,6 +1905,23 @@ int intel_dp_dsc_max_src_input_bpc(struct intel_display *display)
19051905
return intel_dp_dsc_min_src_input_bpc();
19061906
}
19071907

1908+
static int align_min_sink_dsc_input_bpp(const struct intel_connector *connector,
1909+
int min_pipe_bpp)
1910+
{
1911+
u8 dsc_bpc[3];
1912+
int num_bpc;
1913+
int i;
1914+
1915+
num_bpc = drm_dp_dsc_sink_supported_input_bpcs(connector->dp.dsc_dpcd,
1916+
dsc_bpc);
1917+
for (i = num_bpc - 1; i >= 0; i--) {
1918+
if (dsc_bpc[i] * 3 >= min_pipe_bpp)
1919+
return dsc_bpc[i] * 3;
1920+
}
1921+
1922+
return 0;
1923+
}
1924+
19081925
static int align_max_sink_dsc_input_bpp(const struct intel_connector *connector,
19091926
int max_pipe_bpp)
19101927
{
@@ -2680,15 +2697,19 @@ intel_dp_dsc_compute_pipe_bpp_limits(struct intel_connector *connector,
26802697
int dsc_max_bpc = intel_dp_dsc_max_src_input_bpc(display);
26812698

26822699
limits->pipe.min_bpp = max(limits->pipe.min_bpp, dsc_min_bpc * 3);
2700+
limits->pipe.min_bpp = align_min_sink_dsc_input_bpp(connector, limits->pipe.min_bpp);
2701+
26832702
limits->pipe.max_bpp = min(limits->pipe.max_bpp, dsc_max_bpc * 3);
2703+
limits->pipe.max_bpp = align_max_sink_dsc_input_bpp(connector, limits->pipe.max_bpp);
26842704

26852705
if (limits->pipe.min_bpp <= 0 ||
26862706
limits->pipe.min_bpp > limits->pipe.max_bpp) {
26872707
drm_dbg_kms(display->drm,
2688-
"[CONNECTOR:%d:%s] Invalid DSC src/sink input BPP (src:%d-%d pipe:%d-%d)\n",
2708+
"[CONNECTOR:%d:%s] Invalid DSC src/sink input BPP (src:%d-%d pipe:%d-%d sink-align:%d-%d)\n",
26892709
connector->base.base.id, connector->base.name,
26902710
dsc_min_bpc * 3, dsc_max_bpc * 3,
2691-
orig_limits.pipe.min_bpp, orig_limits.pipe.max_bpp);
2711+
orig_limits.pipe.min_bpp, orig_limits.pipe.max_bpp,
2712+
limits->pipe.min_bpp, limits->pipe.max_bpp);
26922713

26932714
return false;
26942715
}

0 commit comments

Comments
 (0)