]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/amd/display: Not check wm and clk change flag in optimized bandwidth.
authorYongqiang Sun <yongqiang.sun@amd.com>
Wed, 26 Feb 2020 19:25:29 +0000 (14:25 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 9 Mar 2020 17:49:26 +0000 (13:49 -0400)
[Why]
System isn't able to enter S0i3 due to not send display count 0 to smu.
When dpms off, clk changed flag is cleared alreay, and it is checked
when doing optimized bandwidth, and update clocks is bypassed due to the
flag is unset.

[How]
Remove check flag incide the function since watermark values and clocks
values are checked during update to determine whether to perform it, no
need to check it again outside the function.

Signed-off-by: Yongqiang Sun <yongqiang.sun@amd.com>
Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc.c
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c

index 6dece1ee30bf9c48f0a013a2cc31774ed01b61e1..df285f57fe9249f450abb74bc3de330f9db1fca8 100644 (file)
@@ -1378,6 +1378,10 @@ bool dc_post_update_surfaces_to_stream(struct dc *dc)
                }
 
        dc->hwss.optimize_bandwidth(dc, context);
+
+       dc->clk_optimized_required = false;
+       dc->wm_optimized_required = false;
+
        return true;
 }
 
index 385250e1e3fde9080b0e46a919a7bf8971896606..21c7c1b010eca91744fa8511c1a8c44b5a7fdc48 100644 (file)
@@ -2717,30 +2717,20 @@ void dcn10_optimize_bandwidth(
                hws->funcs.verify_allow_pstate_change_high(dc);
 
        if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) {
-               if (context->stream_count == 0) {
+               if (context->stream_count == 0)
                        context->bw_ctx.bw.dcn.clk.phyclk_khz = 0;
 
-                       dc->clk_mgr->funcs->update_clocks(
-                                       dc->clk_mgr,
-                                       context,
-                                       true);
-               } else if (dc->clk_optimized_required || IS_DIAG_DC(dc->ctx->dce_environment)) {
-                       dc->clk_mgr->funcs->update_clocks(
-                                                               dc->clk_mgr,
-                                                               context,
-                                                               true);
-               }
-       }
-
-       if (dc->wm_optimized_required || IS_DIAG_DC(dc->ctx->dce_environment)) {
-               hubbub->funcs->program_watermarks(hubbub,
-                               &context->bw_ctx.bw.dcn.watermarks,
-                               dc->res_pool->ref_clocks.dchub_ref_clock_inKhz / 1000,
+               dc->clk_mgr->funcs->update_clocks(
+                               dc->clk_mgr,
+                               context,
                                true);
        }
 
-       dc->clk_optimized_required = false;
-       dc->wm_optimized_required = false;
+       hubbub->funcs->program_watermarks(hubbub,
+                       &context->bw_ctx.bw.dcn.watermarks,
+                       dc->res_pool->ref_clocks.dchub_ref_clock_inKhz / 1000,
+                       true);
+
        dcn10_stereo_hw_frame_pack_wa(dc, context);
 
        if (dc->debug.pplib_wm_report_mode == WM_REPORT_OVERRIDE)
index 045ba08c85b4fbde1b1963dc42691cb942e2e71e..b0f61bd7c2081ebd8a8270360faae352b25e6455 100644 (file)
@@ -1660,22 +1660,16 @@ void dcn20_optimize_bandwidth(
 {
        struct hubbub *hubbub = dc->res_pool->hubbub;
 
-       if (dc->wm_optimized_required || IS_DIAG_DC(dc->ctx->dce_environment)) {
-               /* program dchubbub watermarks */
-               hubbub->funcs->program_watermarks(hubbub,
-                                               &context->bw_ctx.bw.dcn.watermarks,
-                                               dc->res_pool->ref_clocks.dchub_ref_clock_inKhz / 1000,
-                                               true);
-               dc->wm_optimized_required = false;
-       }
-
-       if (dc->clk_optimized_required || IS_DIAG_DC(dc->ctx->dce_environment)) {
-               dc->clk_mgr->funcs->update_clocks(
-                               dc->clk_mgr,
-                               context,
-                               true);
-               dc->clk_optimized_required = false;
-       }
+       /* program dchubbub watermarks */
+       hubbub->funcs->program_watermarks(hubbub,
+                                       &context->bw_ctx.bw.dcn.watermarks,
+                                       dc->res_pool->ref_clocks.dchub_ref_clock_inKhz / 1000,
+                                       true);
+
+       dc->clk_mgr->funcs->update_clocks(
+                       dc->clk_mgr,
+                       context,
+                       true);
 }
 
 bool dcn20_update_bandwidth(