From: Alvin Lee <alvin.l...@amd.com>

[Description]
hardare_release() is called when driver is removed. Add the missing hook for 
DCN401

Reviewed-by: Dillon Varone <dillon.var...@amd.com>
Acked-by: Zaeem Mohamed <zaeem.moha...@amd.com>
Signed-off-by: Alvin Lee <alvin.l...@amd.com>
---
 .../amd/display/dc/hwss/dcn401/dcn401_hwseq.c | 20 +++++++++++++++++++
 .../amd/display/dc/hwss/dcn401/dcn401_hwseq.h |  2 +-
 .../amd/display/dc/hwss/dcn401/dcn401_init.c  |  2 +-
 3 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.c 
b/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.c
index 116411aa0a2b..4d0c01e866be 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.c
@@ -1674,3 +1674,23 @@ void dcn401_unblank_stream(struct pipe_ctx *pipe_ctx,
        if (link->local_sink && link->local_sink->sink_signal == 
SIGNAL_TYPE_EDP)
                hws->funcs.edp_backlight_control(link, true);
 }
+
+void dcn401_hardware_release(struct dc *dc)
+{
+       dc_dmub_srv_fams2_update_config(dc, dc->current_state, false);
+
+       /* If pstate unsupported, or still supported
+        * by firmware, force it supported by dcn
+        */
+       if (dc->current_state) {
+               if ((!dc->clk_mgr->clks.p_state_change_support ||
+                               
dc->current_state->bw_ctx.bw.dcn.fams2_stream_count > 0) &&
+                               
dc->res_pool->hubbub->funcs->force_pstate_change_control)
+                       
dc->res_pool->hubbub->funcs->force_pstate_change_control(
+                                       dc->res_pool->hubbub, true, true);
+
+               dc->current_state->bw_ctx.bw.dcn.clk.p_state_change_support = 
true;
+               dc->clk_mgr->funcs->update_clocks(dc->clk_mgr, 
dc->current_state, true);
+       }
+}
+
diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.h 
b/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.h
index f91159a6e6d4..bada43d4b2eb 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.h
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.h
@@ -75,7 +75,7 @@ void dcn401_fams2_global_control_lock(struct dc *dc,
 void dcn401_fams2_update_config(struct dc *dc, struct dc_state *context, bool 
enable);
 void dcn401_fams2_global_control_lock_fast(union block_sequence_params 
*params);
 void dcn401_unblank_stream(struct pipe_ctx *pipe_ctx, struct dc_link_settings 
*link_settings);
-
+void dcn401_hardware_release(struct dc *dc);
 void dcn401_update_odm(struct dc *dc, struct dc_state *context,
                struct pipe_ctx *otg_master);
 #endif /* __DC_HWSS_DCN401_H__ */
diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_init.c 
b/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_init.c
index 8358ba74405f..dabad7feff03 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_init.c
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_init.c
@@ -79,7 +79,7 @@ static const struct hw_sequencer_funcs dcn401_funcs = {
        .does_plane_fit_in_mall = NULL,
        .set_backlight_level = dcn21_set_backlight_level,
        .set_abm_immediate_disable = dcn21_set_abm_immediate_disable,
-       .hardware_release = dcn30_hardware_release,
+       .hardware_release = dcn401_hardware_release,
        .set_pipe = dcn21_set_pipe,
        .enable_lvds_link_output = dce110_enable_lvds_link_output,
        .enable_tmds_link_output = dce110_enable_tmds_link_output,
-- 
2.34.1

Reply via email to