From: Charlene Liu <charlene....@amd.com>

Change-Id: I31c377a4ab1c428d260cf311b7e28c6137159cf7
Signed-off-by: Charlene Liu <charlene....@amd.com>
Reviewed-by: Dmytro Laktyushkin <dmytro.laktyush...@amd.com>
Acked-by: Harry Wentland <harry.wentl...@amd.com>
---
 drivers/gpu/drm/amd/display/dc/core/dc_link.c |  8 +++---
 .../gpu/drm/amd/display/dc/core/dc_link_dp.c  |  9 ++++---
 .../display/dc/dce110/dce110_hw_sequencer.c   |  7 ++---
 .../drm/amd/display/dc/dcn10/dcn10_hubbub.c   |  5 ++++
 .../amd/display/dc/dcn10/dcn10_hw_sequencer.c | 26 ++++++++++++++-----
 5 files changed, 38 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link.c 
b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
index 2f9c23d94b50..053ef83ea60f 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
@@ -33,6 +33,7 @@
 #include "dc_link_dp.h"
 #include "dc_link_ddc.h"
 #include "link_hwss.h"
+#include "opp.h"
 
 #include "link_encoder.h"
 #include "hw_sequencer.h"
@@ -2416,9 +2417,10 @@ void core_link_enable_stream(
        core_dc->hwss.enable_audio_stream(pipe_ctx);
 
        /* turn off otg test pattern if enable */
-       
pipe_ctx->stream_res.tg->funcs->set_test_pattern(pipe_ctx->stream_res.tg,
-                       CONTROLLER_DP_TEST_PATTERN_VIDEOMODE,
-                       COLOR_DEPTH_UNDEFINED);
+       if (pipe_ctx->stream_res.tg->funcs->set_test_pattern)
+               
pipe_ctx->stream_res.tg->funcs->set_test_pattern(pipe_ctx->stream_res.tg,
+                               CONTROLLER_DP_TEST_PATTERN_VIDEOMODE,
+                               COLOR_DEPTH_UNDEFINED);
 
        core_dc->hwss.enable_stream(pipe_ctx);
 
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c 
b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
index 72a8a55565c8..aa27a301653f 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
@@ -3,6 +3,7 @@
 #include "dc.h"
 #include "dc_link_dp.h"
 #include "dm_helpers.h"
+#include "opp.h"
 
 #include "inc/core_types.h"
 #include "link_hwss.h"
@@ -2514,8 +2515,8 @@ static void set_crtc_test_pattern(struct dc_link *link,
                pipe_ctx->stream->bit_depth_params = params;
                pipe_ctx->stream_res.opp->funcs->
                        
opp_program_bit_depth_reduction(pipe_ctx->stream_res.opp, &params);
-
-               
pipe_ctx->stream_res.tg->funcs->set_test_pattern(pipe_ctx->stream_res.tg,
+               if (pipe_ctx->stream_res.tg->funcs->set_test_pattern)
+                       
pipe_ctx->stream_res.tg->funcs->set_test_pattern(pipe_ctx->stream_res.tg,
                                controller_test_pattern, color_depth);
        }
        break;
@@ -2527,8 +2528,8 @@ static void set_crtc_test_pattern(struct dc_link *link,
                pipe_ctx->stream->bit_depth_params = params;
                pipe_ctx->stream_res.opp->funcs->
                        
opp_program_bit_depth_reduction(pipe_ctx->stream_res.opp, &params);
-
-               
pipe_ctx->stream_res.tg->funcs->set_test_pattern(pipe_ctx->stream_res.tg,
+               if (pipe_ctx->stream_res.tg->funcs->set_test_pattern)
+                       
pipe_ctx->stream_res.tg->funcs->set_test_pattern(pipe_ctx->stream_res.tg,
                                CONTROLLER_DP_TEST_PATTERN_VIDEOMODE,
                                color_depth);
        }
diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c 
b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
index 9ea576cbbefa..b96525036f94 100644
--- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
+++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
@@ -1449,7 +1449,7 @@ static void power_down_controllers(struct dc *dc)
 {
        int i;
 
-       for (i = 0; i < dc->res_pool->pipe_count; i++) {
+       for (i = 0; i < dc->res_pool->timing_generator_count; i++) {
                dc->res_pool->timing_generators[i]->funcs->disable_crtc(
                                dc->res_pool->timing_generators[i]);
        }
@@ -1489,12 +1489,13 @@ static void disable_vga_and_power_gate_all_controllers(
        struct timing_generator *tg;
        struct dc_context *ctx = dc->ctx;
 
-       for (i = 0; i < dc->res_pool->pipe_count; i++) {
+       for (i = 0; i < dc->res_pool->timing_generator_count; i++) {
                tg = dc->res_pool->timing_generators[i];
 
                if (tg->funcs->disable_vga)
                        tg->funcs->disable_vga(tg);
-
+       }
+       for (i = 0; i < dc->res_pool->pipe_count; i++) {
                /* Enable CLOCK gating for each pipe BEFORE controller
                 * powergating. */
                enable_display_pipe_clock_gating(ctx,
diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubbub.c 
b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubbub.c
index 623db09389b5..1ea91e153d3a 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubbub.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubbub.c
@@ -483,6 +483,11 @@ void hubbub1_update_dchub(
        struct hubbub *hubbub,
        struct dchub_init_data *dh_data)
 {
+       if (REG(DCHUBBUB_SDPIF_FB_TOP) == 0) {
+               ASSERT(false);
+               /*should not come here*/
+               return;
+       }
        /* TODO: port code from dal2 */
        switch (dh_data->fb_mode) {
        case FRAME_BUFFER_MODE_ZFB_ONLY:
diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c 
b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
index da82c6a2d4e0..12cb82806b4b 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
@@ -415,6 +415,8 @@ static void dpp_pg_control(
 
        if (hws->ctx->dc->debug.disable_dpp_power_gate)
                return;
+       if (REG(DOMAIN1_PG_CONFIG) == 0)
+               return;
 
        switch (dpp_inst) {
        case 0: /* DPP0 */
@@ -465,6 +467,8 @@ static void hubp_pg_control(
 
        if (hws->ctx->dc->debug.disable_hubp_power_gate)
                return;
+       if (REG(DOMAIN0_PG_CONFIG) == 0)
+               return;
 
        switch (hubp_inst) {
        case 0: /* DCHUBP0 */
@@ -880,7 +884,8 @@ void hwss1_plane_atomic_disconnect(struct dc *dc, struct 
pipe_ctx *pipe_ctx)
                return;
 
        mpc->funcs->remove_mpcc(mpc, mpc_tree_params, mpcc_to_remove);
-       opp->mpcc_disconnect_pending[pipe_ctx->plane_res.mpcc_inst] = true;
+       if (opp != NULL)
+               opp->mpcc_disconnect_pending[pipe_ctx->plane_res.mpcc_inst] = 
true;
 
        dc->optimized_required = true;
 
@@ -1358,10 +1363,11 @@ static void dcn10_enable_per_frame_crtc_position_reset(
 
        DC_SYNC_INFO("Setting up\n");
        for (i = 0; i < group_size; i++)
-               grouped_pipes[i]->stream_res.tg->funcs->enable_crtc_reset(
-                               grouped_pipes[i]->stream_res.tg,
-                               
grouped_pipes[i]->stream->triggered_crtc_reset.event_source->status.primary_otg_inst,
-                               
&grouped_pipes[i]->stream->triggered_crtc_reset);
+               if (grouped_pipes[i]->stream_res.tg->funcs->enable_crtc_reset)
+                       
grouped_pipes[i]->stream_res.tg->funcs->enable_crtc_reset(
+                                       grouped_pipes[i]->stream_res.tg,
+                                       
grouped_pipes[i]->stream->triggered_crtc_reset.event_source->status.primary_otg_inst,
+                                       
&grouped_pipes[i]->stream->triggered_crtc_reset);
 
        DC_SYNC_INFO("Waiting for trigger\n");
 
@@ -2519,8 +2525,14 @@ static void dcn10_update_pending_status(struct pipe_ctx 
*pipe_ctx)
 
 static void dcn10_update_dchub(struct dce_hwseq *hws, struct dchub_init_data 
*dh_data)
 {
-       if (hws->ctx->dc->res_pool->hubbub != NULL)
-               hubbub1_update_dchub(hws->ctx->dc->res_pool->hubbub, dh_data);
+       if (hws->ctx->dc->res_pool->hubbub != NULL) {
+               struct hubp *hubp = hws->ctx->dc->res_pool->hubps[0];
+
+               if (hubp->funcs->hubp_update_dchub)
+                       hubp->funcs->hubp_update_dchub(hubp, dh_data);
+               else
+                       hubbub1_update_dchub(hws->ctx->dc->res_pool->hubbub, 
dh_data);
+       }
 }
 
 static void dcn10_set_cursor_position(struct pipe_ctx *pipe_ctx)
-- 
2.17.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to