From: Harry Wentland <harry.wentl...@amd.com>

[Why & How]
DM should never use a non-interface function to call into
DC. The original code is incorrect on ASICs that don't
use DCN20's remove_stream_from_ctx function.

Reviewed-by: Aurabindo Pillai <aurabindo.pil...@amd.com>
Acked-by: Qingqing Zhuo <qingqing.z...@amd.com>
Signed-off-by: Harry Wentland <harry.wentl...@amd.com>
---
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c    | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

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 1579c2839ce3..248f25943748 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
@@ -1153,6 +1153,7 @@ int compute_mst_dsc_configs_for_state(struct 
drm_atomic_state *state,
        bool computed_streams[MAX_PIPES];
        struct amdgpu_dm_connector *aconnector;
        struct drm_dp_mst_topology_mgr *mst_mgr;
+       struct resource_pool *res_pool;
        int link_vars_start_index = 0;
        int ret = 0;
 
@@ -1161,6 +1162,7 @@ int compute_mst_dsc_configs_for_state(struct 
drm_atomic_state *state,
 
        for (i = 0; i < dc_state->stream_count; i++) {
                stream = dc_state->streams[i];
+               res_pool = stream->ctx->dc->res_pool;
 
                if (stream->signal != SIGNAL_TYPE_DISPLAY_PORT_MST)
                        continue;
@@ -1176,7 +1178,8 @@ int compute_mst_dsc_configs_for_state(struct 
drm_atomic_state *state,
                if (computed_streams[i])
                        continue;
 
-               if (dcn20_remove_stream_from_ctx(stream->ctx->dc, dc_state, 
stream) != DC_OK)
+               if (!res_pool->funcs->remove_stream_from_ctx ||
+                   res_pool->funcs->remove_stream_from_ctx(stream->ctx->dc, 
dc_state, stream) != DC_OK)
                        return -EINVAL;
 
                if (!is_dsc_need_re_compute(state, dc_state, stream->link))
@@ -1214,6 +1217,7 @@ static int pre_compute_mst_dsc_configs_for_state(struct 
drm_atomic_state *state,
        bool computed_streams[MAX_PIPES];
        struct amdgpu_dm_connector *aconnector;
        struct drm_dp_mst_topology_mgr *mst_mgr;
+       struct resource_pool *res_pool;
        int link_vars_start_index = 0;
        int ret = 0;
 
@@ -1222,6 +1226,7 @@ static int pre_compute_mst_dsc_configs_for_state(struct 
drm_atomic_state *state,
 
        for (i = 0; i < dc_state->stream_count; i++) {
                stream = dc_state->streams[i];
+               res_pool = stream->ctx->dc->res_pool;
 
                if (stream->signal != SIGNAL_TYPE_DISPLAY_PORT_MST)
                        continue;
-- 
2.34.1

Reply via email to