From 7a9e08de7005d42aaaceeaf9afa0fb7b537272a9 Mon Sep 17 00:00:00 2001 From: Amine Najahi Date: Tue, 17 Nov 2020 17:12:55 -0500 Subject: [PATCH] disp: msm: dp: fix DSC and PPS version mismatch Currently, driver hardcodes the DSC version to use to v1.1 in DP driver even if the sink reports v1.2 in the DPCD DSC_ALGORITHM_REVISISON register. This causes a mismatch between the source DSC hardware programming and the PPS packet information sent to sink. This change sets the PPS DSC version field to the one reported by the sink and falls back to v1.1 in case of DPCD parsing error. Change-Id: I76fb55b7bf9b3925ae3f408008f3257fc85cef2c Signed-off-by: Amine Najahi --- msm/dp/dp_panel.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/msm/dp/dp_panel.c b/msm/dp/dp_panel.c index 3937eda85b9d..407f304369d0 100644 --- a/msm/dp/dp_panel.c +++ b/msm/dp/dp_panel.c @@ -1357,9 +1357,28 @@ static int dp_panel_dsc_prepare_basic_params( u32 ppr_per_slice; u32 slice_caps_1; u32 slice_caps_2; + u32 dsc_version_major, dsc_version_minor; + bool dsc_version_supported = false; - comp_info->dsc_info.config.dsc_version_major = 0x1; - comp_info->dsc_info.config.dsc_version_minor = 0x1; + dsc_version_major = dp_panel->sink_dsc_caps.version & 0xF; + dsc_version_minor = (dp_panel->sink_dsc_caps.version >> 4) & 0xF; + dsc_version_supported = (dsc_version_major == 0x1 && + (dsc_version_minor == 0x1 || dsc_version_minor == 0x2)) + ? true : false; + + DP_DEBUG("DSC version: %d.%d, dpcd value: %x\n", + dsc_version_major, dsc_version_minor, + dp_panel->sink_dsc_caps.version); + + if (!dsc_version_supported) { + dsc_version_major = 1; + dsc_version_minor = 1; + DP_ERR("invalid sink DSC version, fallback to %d.%d\n", + dsc_version_major, dsc_version_minor); + } + + comp_info->dsc_info.config.dsc_version_major = dsc_version_major; + comp_info->dsc_info.config.dsc_version_minor = dsc_version_minor; comp_info->dsc_info.scr_rev = 0x0; comp_info->dsc_info.slice_per_pkt = 0;