drm/amd/display: Check if hubp function hooks exist before calling them
authorCharlene Liu <charlene.liu@amd.com>
Mon, 1 Oct 2018 19:22:12 +0000 (15:22 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 5 Nov 2018 19:21:12 +0000 (14:21 -0500)
Signed-off-by: Charlene Liu <charlene.liu@amd.com>
Reviewed-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c

index f88c440c2826ad53460f89bd3c83f478838735fd..345fc0302e4e0af2d4ff8a89ec1f476672aab116 100644 (file)
@@ -787,7 +787,7 @@ static bool dcn10_hw_wa_force_recovery(struct dc *dc)
                        &dc->current_state->res_ctx.pipe_ctx[i];
                if (pipe_ctx != NULL) {
                        hubp = pipe_ctx->plane_res.hubp;
-                       if (hubp != NULL) {
+                       if (hubp != NULL && hubp->funcs->hubp_get_underflow_status) {
                                if (hubp->funcs->hubp_get_underflow_status(hubp) != 0) {
                                        /* one pipe underflow, we will reset all the pipes*/
                                        need_recover = true;
@@ -813,7 +813,7 @@ static bool dcn10_hw_wa_force_recovery(struct dc *dc)
                if (pipe_ctx != NULL) {
                        hubp = pipe_ctx->plane_res.hubp;
                        /*DCHUBP_CNTL:HUBP_BLANK_EN=1*/
-                       if (hubp != NULL)
+                       if (hubp != NULL && hubp->funcs->set_hubp_blank_en)
                                hubp->funcs->set_hubp_blank_en(hubp, true);
                }
        }
@@ -826,7 +826,7 @@ static bool dcn10_hw_wa_force_recovery(struct dc *dc)
                if (pipe_ctx != NULL) {
                        hubp = pipe_ctx->plane_res.hubp;
                        /*DCHUBP_CNTL:HUBP_DISABLE=1*/
-                       if (hubp != NULL)
+                       if (hubp != NULL && hubp->funcs->hubp_disable_control)
                                hubp->funcs->hubp_disable_control(hubp, true);
                }
        }
@@ -836,7 +836,7 @@ static bool dcn10_hw_wa_force_recovery(struct dc *dc)
                if (pipe_ctx != NULL) {
                        hubp = pipe_ctx->plane_res.hubp;
                        /*DCHUBP_CNTL:HUBP_DISABLE=0*/
-                       if (hubp != NULL)
+                       if (hubp != NULL && hubp->funcs->hubp_disable_control)
                                hubp->funcs->hubp_disable_control(hubp, true);
                }
        }
@@ -848,7 +848,7 @@ static bool dcn10_hw_wa_force_recovery(struct dc *dc)
                if (pipe_ctx != NULL) {
                        hubp = pipe_ctx->plane_res.hubp;
                        /*DCHUBP_CNTL:HUBP_BLANK_EN=0*/
-                       if (hubp != NULL)
+                       if (hubp != NULL && hubp->funcs->set_hubp_blank_en)
                                hubp->funcs->set_hubp_blank_en(hubp, true);
                }
        }