]> www.infradead.org Git - users/hch/configfs.git/commitdiff
drm/amd/display: Expand supported Replay residency mode
authorLeon Huang <leon.huang1@amd.com>
Mon, 4 Mar 2024 08:52:25 +0000 (16:52 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 10 Apr 2024 01:59:14 +0000 (21:59 -0400)
[Why]
Dmub provides several Replay residency calculation methods,
but current interface only supports either ALPM or PHY mode

[How]
Modify the interface for supporting different types
of Replay residency calculation.

Reviewed-by: Robin Chen <robin.chen@amd.com>
Acked-by: Roman Li <roman.li@amd.com>
Signed-off-by: Leon Huang <leon.huang1@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/inc/link.h
drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.h

index bf29fc58ea6a62af45d0643b497cc54a779c0a8b..7ab8ba5e23ed32d5f39be78fdd2c31fe62f8ef7b 100644 (file)
@@ -288,7 +288,7 @@ struct link_service {
                        struct dc_link *link, uint32_t coasting_vtotal);
        bool (*edp_replay_residency)(const struct dc_link *link,
                        unsigned int *residency, const bool is_start,
-                       const bool is_alpm);
+                       const enum pr_residency_mode mode);
        bool (*edp_set_replay_power_opt_and_coasting_vtotal)(struct dc_link *link,
                        const unsigned int *power_opts, uint32_t coasting_vtotal);
 
index 0682dbbad448dcbfcfb6231d83f9c19228478090..689c5fb44e86a808c63dc835109f6f51bd63db4c 100644 (file)
@@ -1056,7 +1056,7 @@ bool edp_set_coasting_vtotal(struct dc_link *link, uint32_t coasting_vtotal)
 }
 
 bool edp_replay_residency(const struct dc_link *link,
-       unsigned int *residency, const bool is_start, const bool is_alpm)
+       unsigned int *residency, const bool is_start, const enum pr_residency_mode mode)
 {
        struct dc  *dc = link->ctx->dc;
        struct dmub_replay *replay = dc->res_pool->replay;
@@ -1065,8 +1065,11 @@ bool edp_replay_residency(const struct dc_link *link,
        if (!dc_get_edp_link_panel_inst(dc, link, &panel_inst))
                return false;
 
+       if (!residency)
+               return false;
+
        if (replay != NULL && link->replay_settings.replay_feature_enabled)
-               replay->funcs->replay_residency(replay, panel_inst, residency, is_start, is_alpm);
+               replay->funcs->replay_residency(replay, panel_inst, residency, is_start, mode);
        else
                *residency = 0;
 
index eee8a4db6f853ac14c878b5b42cf89d8acb1ca7f..cb6d95cc36e46f36a51a9833d7be8c2cc9113f47 100644 (file)
@@ -61,7 +61,7 @@ bool edp_send_replay_cmd(struct dc_link *link,
                        union dmub_replay_cmd_set *cmd_data);
 bool edp_set_coasting_vtotal(struct dc_link *link, uint32_t coasting_vtotal);
 bool edp_replay_residency(const struct dc_link *link,
-       unsigned int *residency, const bool is_start, const bool is_alpm);
+       unsigned int *residency, const bool is_start, const enum pr_residency_mode mode);
 bool edp_get_replay_state(const struct dc_link *link, uint64_t *state);
 bool edp_set_replay_power_opt_and_coasting_vtotal(struct dc_link *link,
        const unsigned int *power_opts, uint32_t coasting_vtotal);