]> Gentwo Git Trees - linux/.git/commitdiff
drm/amd/display: Get panel replay capability from DPCD
authorJack Chang <jack.chang@amd.com>
Wed, 20 Aug 2025 08:59:08 +0000 (16:59 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 18 Nov 2025 15:50:13 +0000 (10:50 -0500)
[Why&How]
Read Panel replay caps from DPCD when retrieving link capability

Reviewed-by: Robin Chen <robin.chen@amd.com>
Signed-off-by: Jack Chang <jack.chang@amd.com>
Signed-off-by: Leon Huang <Leon.Huang1@amd.com>
Signed-off-by: Ivan Lipski <ivan.lipski@amd.com>
Tested-by: Dan Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dc_dp_types.h
drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c

index 17bcff25a26268b2101575909cf2bd4729f6c058..79e1696def63057ccfeabef28fb54927fa9af3ea 100644 (file)
@@ -1157,6 +1157,16 @@ struct dprx_states {
        bool cable_id_written;
 };
 
+union dpcd_panel_replay_capability_supported {
+       struct {
+               unsigned char PANEL_REPLAY_SUPPORT          :1;
+               unsigned char SELECTIVE_UPDATE_SUPPORT      :1;
+               unsigned char EARLY_TRANSPORT_SUPPORT       :1;
+               unsigned char RESERVED                                  :5;
+       } bits;
+       unsigned char raw;
+};
+
 enum dpcd_downstream_port_max_bpc {
        DOWN_STREAM_MAX_8BPC = 0,
        DOWN_STREAM_MAX_10BPC,
@@ -1280,6 +1290,7 @@ struct dpcd_caps {
        struct edp_psr_info psr_info;
 
        struct replay_info pr_info;
+       union dpcd_panel_replay_capability_supported pr_caps_supported;
        uint16_t edp_oled_emission_rate;
        union dp_receive_port0_cap receive_port0_cap;
        /* Indicates the number of SST links supported by MSO (Multi-Stream Output) */
index 750147c52c8af77012795f90792ed2cbe0ee36a0..168c59bf1f169f42f2389eec1389e811d89ff2f0 100644 (file)
@@ -2091,6 +2091,11 @@ static bool retrieve_link_cap(struct dc_link *link)
                        link->dpcd_caps.max_uncompressed_pixel_rate_cap.raw,
                        sizeof(link->dpcd_caps.max_uncompressed_pixel_rate_cap.raw));
 
+       core_link_read_dpcd(link,
+                       DP_PANEL_REPLAY_CAPABILITY_SUPPORT,
+                       &link->dpcd_caps.pr_caps_supported.raw,
+                       sizeof(link->dpcd_caps.pr_caps_supported.raw));
+
        /* Read DP tunneling information. */
        status = dpcd_get_tunneling_device_data(link);
        if (status != DC_OK)