Skip to content

Commit f4f3b7d

Browse files
Fangzhi Zuoalexdeucher
authored andcommitted
drm/amd/display: Add DSC Support for Synaptics Cascaded MST Hub
Traditional synaptics hub has one MST branch device without virtual dpcd. Synaptics cascaded hub has two chained MST branch devices. DSC decoding is performed via root MST branch device, instead of the second MST branch device. Reviewed-by: Hersen Wu <[email protected]> Acked-by: Qingqing Zhuo <[email protected]> Signed-off-by: Fangzhi Zuo <[email protected]> Tested-by: Daniel Wheeler <[email protected]> Signed-off-by: Alex Deucher <[email protected]> Cc: [email protected]
1 parent 197b6b6 commit f4f3b7d

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,21 @@ bool needs_dsc_aux_workaround(struct dc_link *link)
212212
return false;
213213
}
214214

215+
bool is_synaptics_cascaded_panamera(struct dc_link *link, struct drm_dp_mst_port *port)
216+
{
217+
u8 branch_vendor_data[4] = { 0 }; // Vendor data 0x50C ~ 0x50F
218+
219+
if (drm_dp_dpcd_read(port->mgr->aux, DP_BRANCH_VENDOR_SPECIFIC_START, &branch_vendor_data, 4) == 4) {
220+
if (link->dpcd_caps.branch_dev_id == DP_BRANCH_DEVICE_ID_90CC24 &&
221+
IS_SYNAPTICS_CASCADED_PANAMERA(link->dpcd_caps.branch_dev_name, branch_vendor_data)) {
222+
DRM_INFO("Synaptics Cascaded MST hub\n");
223+
return true;
224+
}
225+
}
226+
227+
return false;
228+
}
229+
215230
static bool validate_dsc_caps_on_connector(struct amdgpu_dm_connector *aconnector)
216231
{
217232
struct dc_sink *dc_sink = aconnector->dc_sink;
@@ -235,6 +250,10 @@ static bool validate_dsc_caps_on_connector(struct amdgpu_dm_connector *aconnecto
235250
needs_dsc_aux_workaround(aconnector->dc_link))
236251
aconnector->dsc_aux = &aconnector->mst_root->dm_dp_aux.aux;
237252

253+
/* synaptics cascaded MST hub case */
254+
if (!aconnector->dsc_aux && is_synaptics_cascaded_panamera(aconnector->dc_link, port))
255+
aconnector->dsc_aux = port->mgr->aux;
256+
238257
if (!aconnector->dsc_aux)
239258
return false;
240259

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,18 @@
3434
#define SYNAPTICS_RC_OFFSET 0x4BC
3535
#define SYNAPTICS_RC_DATA 0x4C0
3636

37+
#define DP_BRANCH_VENDOR_SPECIFIC_START 0x50C
38+
39+
/**
40+
* Panamera MST Hub detection
41+
* Offset DPCD 050Eh == 0x5A indicates cascaded MST hub case
42+
* Check from beginning of branch device vendor specific field (050Ch)
43+
*/
44+
#define IS_SYNAPTICS_PANAMERA(branchDevName) (((int)branchDevName[4] & 0xF0) == 0x50 ? 1 : 0)
45+
#define BRANCH_HW_REVISION_PANAMERA_A2 0x10
46+
#define SYNAPTICS_CASCADED_HUB_ID 0x5A
47+
#define IS_SYNAPTICS_CASCADED_PANAMERA(devName, data) ((IS_SYNAPTICS_PANAMERA(devName) && ((int)data[2] == SYNAPTICS_CASCADED_HUB_ID)) ? 1 : 0)
48+
3749
struct amdgpu_display_manager;
3850
struct amdgpu_dm_connector;
3951

0 commit comments

Comments
 (0)