Skip to content

Commit 07bfa9c

Browse files
Leo Maalexdeucher
authored andcommitted
drm/amd/display: Add HDMI DSC native YCbCr422 support
[WHY && HOW] For some HDMI OVT timing, YCbCr422 encoding fails at the DSC bandwidth check. The root cause is our DSC policy for timing doesn't account for HDMI YCbCr422 native support. Cc: Mario Limonciello <mario.limonciello@amd.com> Cc: Alex Deucher <alexander.deucher@amd.com> Cc: stable@vger.kernel.org Reviewed-by: Chris Park <chris.park@amd.com> Signed-off-by: Leo Ma <hanghong.ma@amd.com> Signed-off-by: Alex Hung <alex.hung@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
1 parent e79563b commit 07bfa9c

3 files changed

Lines changed: 7 additions & 5 deletions

File tree

drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1147,7 +1147,7 @@ static int compute_mst_dsc_configs_for_link(struct drm_atomic_state *state,
11471147
params[count].num_slices_v = aconnector->dsc_settings.dsc_num_slices_v;
11481148
params[count].bpp_overwrite = aconnector->dsc_settings.dsc_bits_per_pixel;
11491149
params[count].compression_possible = stream->sink->dsc_caps.dsc_dec_caps.is_dsc_supported;
1150-
dc_dsc_get_policy_for_timing(params[count].timing, 0, &dsc_policy);
1150+
dc_dsc_get_policy_for_timing(params[count].timing, 0, &dsc_policy, dc_link_get_highest_encoding_format(stream->link));
11511151
if (!dc_dsc_compute_bandwidth_range(
11521152
stream->sink->ctx->dc->res_pool->dscs[0],
11531153
stream->sink->ctx->dc->debug.dsc_min_slice_height_override,
@@ -1681,7 +1681,7 @@ static bool is_dsc_common_config_possible(struct dc_stream_state *stream,
16811681
{
16821682
struct dc_dsc_policy dsc_policy = {0};
16831683

1684-
dc_dsc_get_policy_for_timing(&stream->timing, 0, &dsc_policy);
1684+
dc_dsc_get_policy_for_timing(&stream->timing, 0, &dsc_policy, dc_link_get_highest_encoding_format(stream->link));
16851685
dc_dsc_compute_bandwidth_range(stream->sink->ctx->dc->res_pool->dscs[0],
16861686
stream->sink->ctx->dc->debug.dsc_min_slice_height_override,
16871687
dsc_policy.min_target_bpp * 16,

drivers/gpu/drm/amd/display/dc/dc_dsc.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,8 @@ uint32_t dc_dsc_stream_bandwidth_overhead_in_kbps(
101101
*/
102102
void dc_dsc_get_policy_for_timing(const struct dc_crtc_timing *timing,
103103
uint32_t max_target_bpp_limit_override_x16,
104-
struct dc_dsc_policy *policy);
104+
struct dc_dsc_policy *policy,
105+
const enum dc_link_encoding_format link_encoding);
105106

106107
void dc_dsc_policy_set_max_target_bpp_limit(uint32_t limit);
107108

drivers/gpu/drm/amd/display/dc/dsc/dc_dsc.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -883,7 +883,7 @@ static bool setup_dsc_config(
883883

884884
memset(dsc_cfg, 0, sizeof(struct dc_dsc_config));
885885

886-
dc_dsc_get_policy_for_timing(timing, options->max_target_bpp_limit_override_x16, &policy);
886+
dc_dsc_get_policy_for_timing(timing, options->max_target_bpp_limit_override_x16, &policy, link_encoding);
887887
pic_width = timing->h_addressable + timing->h_border_left + timing->h_border_right;
888888
pic_height = timing->v_addressable + timing->v_border_top + timing->v_border_bottom;
889889

@@ -1173,7 +1173,8 @@ uint32_t dc_dsc_stream_bandwidth_overhead_in_kbps(
11731173

11741174
void dc_dsc_get_policy_for_timing(const struct dc_crtc_timing *timing,
11751175
uint32_t max_target_bpp_limit_override_x16,
1176-
struct dc_dsc_policy *policy)
1176+
struct dc_dsc_policy *policy,
1177+
const enum dc_link_encoding_format link_encoding)
11771178
{
11781179
uint32_t bpc = 0;
11791180

0 commit comments

Comments
 (0)