Commit 384bd90d authored by Roman Li's avatar Roman Li Committed by Alex Deucher

drm/amd/display: Enable power gating before init_pipes

[Why]
In init_hw() we call init_pipes() before enabling power gating.
init_pipes() tries to power gate dsc but it may fail because
required force-ons are not released yet.
As a result with dsc config the following errors observed on resume:
"REG_WAIT timeout 1us * 1000 tries - dcn20_dsc_pg_control"
"REG_WAIT timeout 1us * 1000 tries - dcn20_dpp_pg_control"
"REG_WAIT timeout 1us * 1000 tries - dcn20_hubp_pg_control"

[How]
Move enable_power_gating_plane() before init_pipes() in init_hw()
Reviewed-by: default avatarAnthony Koo <Anthony.Koo@amd.com>
Reviewed-by: default avatarEric Yang <Eric.Yang2@amd.com>
Acked-by: default avatarAlex Hung <alex.hung@amd.com>
Signed-off-by: default avatarRoman Li <Roman.Li@amd.com>
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 75c95f45
...@@ -1504,6 +1504,9 @@ void dcn10_init_hw(struct dc *dc) ...@@ -1504,6 +1504,9 @@ void dcn10_init_hw(struct dc *dc)
/* we want to turn off all dp displays before doing detection */ /* we want to turn off all dp displays before doing detection */
dc_link_blank_all_dp_displays(dc); dc_link_blank_all_dp_displays(dc);
if (hws->funcs.enable_power_gating_plane)
hws->funcs.enable_power_gating_plane(dc->hwseq, true);
/* If taking control over from VBIOS, we may want to optimize our first /* If taking control over from VBIOS, we may want to optimize our first
* mode set, so we need to skip powering down pipes until we know which * mode set, so we need to skip powering down pipes until we know which
* pipes we want to use. * pipes we want to use.
...@@ -1556,8 +1559,6 @@ void dcn10_init_hw(struct dc *dc) ...@@ -1556,8 +1559,6 @@ void dcn10_init_hw(struct dc *dc)
REG_UPDATE(DCFCLK_CNTL, DCFCLK_GATE_DIS, 0); REG_UPDATE(DCFCLK_CNTL, DCFCLK_GATE_DIS, 0);
} }
if (hws->funcs.enable_power_gating_plane)
hws->funcs.enable_power_gating_plane(dc->hwseq, true);
if (dc->clk_mgr->funcs->notify_wm_ranges) if (dc->clk_mgr->funcs->notify_wm_ranges)
dc->clk_mgr->funcs->notify_wm_ranges(dc->clk_mgr); dc->clk_mgr->funcs->notify_wm_ranges(dc->clk_mgr);
......
...@@ -547,6 +547,9 @@ void dcn30_init_hw(struct dc *dc) ...@@ -547,6 +547,9 @@ void dcn30_init_hw(struct dc *dc)
/* we want to turn off all dp displays before doing detection */ /* we want to turn off all dp displays before doing detection */
dc_link_blank_all_dp_displays(dc); dc_link_blank_all_dp_displays(dc);
if (hws->funcs.enable_power_gating_plane)
hws->funcs.enable_power_gating_plane(dc->hwseq, true);
/* If taking control over from VBIOS, we may want to optimize our first /* If taking control over from VBIOS, we may want to optimize our first
* mode set, so we need to skip powering down pipes until we know which * mode set, so we need to skip powering down pipes until we know which
* pipes we want to use. * pipes we want to use.
...@@ -624,8 +627,6 @@ void dcn30_init_hw(struct dc *dc) ...@@ -624,8 +627,6 @@ void dcn30_init_hw(struct dc *dc)
REG_UPDATE(DCFCLK_CNTL, DCFCLK_GATE_DIS, 0); REG_UPDATE(DCFCLK_CNTL, DCFCLK_GATE_DIS, 0);
} }
if (hws->funcs.enable_power_gating_plane)
hws->funcs.enable_power_gating_plane(dc->hwseq, true);
if (!dcb->funcs->is_accelerated_mode(dcb) && dc->res_pool->hubbub->funcs->init_watermarks) if (!dcb->funcs->is_accelerated_mode(dcb) && dc->res_pool->hubbub->funcs->init_watermarks)
dc->res_pool->hubbub->funcs->init_watermarks(dc->res_pool->hubbub); dc->res_pool->hubbub->funcs->init_watermarks(dc->res_pool->hubbub);
......
...@@ -203,6 +203,9 @@ void dcn31_init_hw(struct dc *dc) ...@@ -203,6 +203,9 @@ void dcn31_init_hw(struct dc *dc)
/* we want to turn off all dp displays before doing detection */ /* we want to turn off all dp displays before doing detection */
dc_link_blank_all_dp_displays(dc); dc_link_blank_all_dp_displays(dc);
if (hws->funcs.enable_power_gating_plane)
hws->funcs.enable_power_gating_plane(dc->hwseq, true);
/* If taking control over from VBIOS, we may want to optimize our first /* If taking control over from VBIOS, we may want to optimize our first
* mode set, so we need to skip powering down pipes until we know which * mode set, so we need to skip powering down pipes until we know which
* pipes we want to use. * pipes we want to use.
...@@ -252,8 +255,6 @@ void dcn31_init_hw(struct dc *dc) ...@@ -252,8 +255,6 @@ void dcn31_init_hw(struct dc *dc)
REG_UPDATE(DCFCLK_CNTL, DCFCLK_GATE_DIS, 0); REG_UPDATE(DCFCLK_CNTL, DCFCLK_GATE_DIS, 0);
} }
if (hws->funcs.enable_power_gating_plane)
hws->funcs.enable_power_gating_plane(dc->hwseq, true);
if (!dcb->funcs->is_accelerated_mode(dcb) && dc->res_pool->hubbub->funcs->init_watermarks) if (!dcb->funcs->is_accelerated_mode(dcb) && dc->res_pool->hubbub->funcs->init_watermarks)
dc->res_pool->hubbub->funcs->init_watermarks(dc->res_pool->hubbub); dc->res_pool->hubbub->funcs->init_watermarks(dc->res_pool->hubbub);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment