]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amd/display: Fix sending redundant enable command to dmub
authorJack Chang <jack.chang@amd.com>
Wed, 17 Sep 2025 07:51:40 +0000 (15:51 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 8 Dec 2025 18:56:36 +0000 (13:56 -0500)
[WHY & HOW]
Fix sending repeating PR enable/disable command to dmub
which causing performance problem

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: Alex Hung <alex.hung@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c

index 07f4f15851fc858ea37514f0dafead27ec7d66cf..99741c1334ca4ec2d3bf0a988f8ef02de9cc2dda 100644 (file)
@@ -1313,16 +1313,20 @@ bool edp_pr_enable(struct dc_link *link, bool enable)
        if (!dc_get_edp_link_panel_inst(dc, link, &panel_inst))
                return false;
 
-       //for sending PR enable commands to DMUB
-       memset(&cmd, 0, sizeof(cmd));
+       if (link->replay_settings.replay_allow_active != enable) {
+               //for sending PR enable commands to DMUB
+               memset(&cmd, 0, sizeof(cmd));
 
-       cmd.pr_enable.header.type = DMUB_CMD__PR;
-       cmd.pr_enable.header.sub_type = DMUB_CMD__PR_ENABLE;
-       cmd.pr_enable.header.payload_bytes = sizeof(struct dmub_cmd_pr_enable_data);
-       cmd.pr_enable.data.panel_inst = panel_inst;
-       cmd.pr_enable.data.enable = enable ? 1 : 0;
+               cmd.pr_enable.header.type = DMUB_CMD__PR;
+               cmd.pr_enable.header.sub_type = DMUB_CMD__PR_ENABLE;
+               cmd.pr_enable.header.payload_bytes = sizeof(struct dmub_cmd_pr_enable_data);
+               cmd.pr_enable.data.panel_inst = panel_inst;
+               cmd.pr_enable.data.enable = enable ? 1 : 0;
 
-       dc_wake_and_execute_dmub_cmd(dc->ctx, &cmd, DM_DMUB_WAIT_TYPE_WAIT);
+               dc_wake_and_execute_dmub_cmd(dc->ctx, &cmd, DM_DMUB_WAIT_TYPE_WAIT);
+
+               link->replay_settings.replay_allow_active = enable;
+       }
        return true;
 }