From: Fangzhi Zuo <jerry....@amd.com>

DSC extended branch decoder caps 0xA0 ~ 0xA2 is read from dsc_aux.
The dsc_aux is returned from drm dsc determination policy with the
right DSC capable MST branch device for decoding.

The values are all zero if DSC decoding at a MST BU with virtual DPCD;
The values are meaningful when DSC decoding at a MST BU without
virtual DPCD or at a DSC capable MST endpoint.

Signed-off-by: Fangzhi Zuo <jerry....@amd.com>
Reviewed-by: Nicholas Kazlauskas <nicholas.kazlaus...@amd.com>
Acked-by: Qingqing Zhuo <qingqing.z...@amd.com>
---
 .../drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c    | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
index f3a9bc828b91..0fca1e842552 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
@@ -160,6 +160,8 @@ static bool validate_dsc_caps_on_connector(struct 
amdgpu_dm_connector *aconnecto
        struct dc_sink *dc_sink = aconnector->dc_sink;
        struct drm_dp_mst_port *port = aconnector->port;
        u8 dsc_caps[16] = { 0 };
+       u8 dsc_branch_dec_caps_raw[3] = { 0 };  // DSC branch decoder caps 0xA0 
~ 0xA2
+       u8 *dsc_branch_dec_caps = NULL;
 
        aconnector->dsc_aux = drm_dp_mst_dsc_aux_for_port(port);
 #if defined(CONFIG_HP_HOOK_WORKAROUND)
@@ -182,9 +184,13 @@ static bool validate_dsc_caps_on_connector(struct 
amdgpu_dm_connector *aconnecto
        if (drm_dp_dpcd_read(aconnector->dsc_aux, DP_DSC_SUPPORT, dsc_caps, 16) 
< 0)
                return false;
 
+       if (drm_dp_dpcd_read(aconnector->dsc_aux,
+                       DP_DSC_BRANCH_OVERALL_THROUGHPUT_0, 
dsc_branch_dec_caps_raw, 3) == 3)
+               dsc_branch_dec_caps = dsc_branch_dec_caps_raw;
+
        if (!dc_dsc_parse_dsc_dpcd(aconnector->dc_link->ctx->dc,
-                                  dsc_caps, NULL,
-                                  &dc_sink->dsc_caps.dsc_dec_caps))
+                                 dsc_caps, dsc_branch_dec_caps,
+                                 &dc_sink->dsc_caps.dsc_dec_caps))
                return false;
 
        return true;
-- 
2.25.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to