Commit 7f93c1de authored by Charlene Liu's avatar Charlene Liu Committed by Alex Deucher

drm/amd/display: add valid regoffset and NULL pointer check

Signed-off-by: default avatarCharlene Liu <charlene.liu@amd.com>
Reviewed-by: default avatarDmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
Acked-by: default avatarHarry Wentland <harry.wentland@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent c1aaea99
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include "dc_link_dp.h" #include "dc_link_dp.h"
#include "dc_link_ddc.h" #include "dc_link_ddc.h"
#include "link_hwss.h" #include "link_hwss.h"
#include "opp.h"
#include "link_encoder.h" #include "link_encoder.h"
#include "hw_sequencer.h" #include "hw_sequencer.h"
...@@ -2382,9 +2383,10 @@ void core_link_enable_stream( ...@@ -2382,9 +2383,10 @@ void core_link_enable_stream(
core_dc->hwss.enable_audio_stream(pipe_ctx); core_dc->hwss.enable_audio_stream(pipe_ctx);
/* turn off otg test pattern if enable */ /* turn off otg test pattern if enable */
pipe_ctx->stream_res.tg->funcs->set_test_pattern(pipe_ctx->stream_res.tg, if (pipe_ctx->stream_res.tg->funcs->set_test_pattern)
CONTROLLER_DP_TEST_PATTERN_VIDEOMODE, pipe_ctx->stream_res.tg->funcs->set_test_pattern(pipe_ctx->stream_res.tg,
COLOR_DEPTH_UNDEFINED); CONTROLLER_DP_TEST_PATTERN_VIDEOMODE,
COLOR_DEPTH_UNDEFINED);
core_dc->hwss.enable_stream(pipe_ctx); core_dc->hwss.enable_stream(pipe_ctx);
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#include "dc.h" #include "dc.h"
#include "dc_link_dp.h" #include "dc_link_dp.h"
#include "dm_helpers.h" #include "dm_helpers.h"
#include "opp.h"
#include "inc/core_types.h" #include "inc/core_types.h"
#include "link_hwss.h" #include "link_hwss.h"
...@@ -2511,8 +2512,8 @@ static void set_crtc_test_pattern(struct dc_link *link, ...@@ -2511,8 +2512,8 @@ static void set_crtc_test_pattern(struct dc_link *link,
pipe_ctx->stream->bit_depth_params = params; pipe_ctx->stream->bit_depth_params = params;
pipe_ctx->stream_res.opp->funcs-> pipe_ctx->stream_res.opp->funcs->
opp_program_bit_depth_reduction(pipe_ctx->stream_res.opp, &params); opp_program_bit_depth_reduction(pipe_ctx->stream_res.opp, &params);
if (pipe_ctx->stream_res.tg->funcs->set_test_pattern)
pipe_ctx->stream_res.tg->funcs->set_test_pattern(pipe_ctx->stream_res.tg, pipe_ctx->stream_res.tg->funcs->set_test_pattern(pipe_ctx->stream_res.tg,
controller_test_pattern, color_depth); controller_test_pattern, color_depth);
} }
break; break;
...@@ -2524,8 +2525,8 @@ static void set_crtc_test_pattern(struct dc_link *link, ...@@ -2524,8 +2525,8 @@ static void set_crtc_test_pattern(struct dc_link *link,
pipe_ctx->stream->bit_depth_params = params; pipe_ctx->stream->bit_depth_params = params;
pipe_ctx->stream_res.opp->funcs-> pipe_ctx->stream_res.opp->funcs->
opp_program_bit_depth_reduction(pipe_ctx->stream_res.opp, &params); opp_program_bit_depth_reduction(pipe_ctx->stream_res.opp, &params);
if (pipe_ctx->stream_res.tg->funcs->set_test_pattern)
pipe_ctx->stream_res.tg->funcs->set_test_pattern(pipe_ctx->stream_res.tg, pipe_ctx->stream_res.tg->funcs->set_test_pattern(pipe_ctx->stream_res.tg,
CONTROLLER_DP_TEST_PATTERN_VIDEOMODE, CONTROLLER_DP_TEST_PATTERN_VIDEOMODE,
color_depth); color_depth);
} }
......
...@@ -1475,7 +1475,7 @@ static void power_down_controllers(struct dc *dc) ...@@ -1475,7 +1475,7 @@ static void power_down_controllers(struct dc *dc)
{ {
int i; 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]->funcs->disable_crtc(
dc->res_pool->timing_generators[i]); dc->res_pool->timing_generators[i]);
} }
...@@ -1515,12 +1515,13 @@ static void disable_vga_and_power_gate_all_controllers( ...@@ -1515,12 +1515,13 @@ static void disable_vga_and_power_gate_all_controllers(
struct timing_generator *tg; struct timing_generator *tg;
struct dc_context *ctx = dc->ctx; 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]; tg = dc->res_pool->timing_generators[i];
if (tg->funcs->disable_vga) if (tg->funcs->disable_vga)
tg->funcs->disable_vga(tg); tg->funcs->disable_vga(tg);
}
for (i = 0; i < dc->res_pool->pipe_count; i++) {
/* Enable CLOCK gating for each pipe BEFORE controller /* Enable CLOCK gating for each pipe BEFORE controller
* powergating. */ * powergating. */
enable_display_pipe_clock_gating(ctx, enable_display_pipe_clock_gating(ctx,
......
...@@ -483,6 +483,11 @@ void hubbub1_update_dchub( ...@@ -483,6 +483,11 @@ void hubbub1_update_dchub(
struct hubbub *hubbub, struct hubbub *hubbub,
struct dchub_init_data *dh_data) 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 */ /* TODO: port code from dal2 */
switch (dh_data->fb_mode) { switch (dh_data->fb_mode) {
case FRAME_BUFFER_MODE_ZFB_ONLY: case FRAME_BUFFER_MODE_ZFB_ONLY:
......
...@@ -415,6 +415,8 @@ static void dpp_pg_control( ...@@ -415,6 +415,8 @@ static void dpp_pg_control(
if (hws->ctx->dc->debug.disable_dpp_power_gate) if (hws->ctx->dc->debug.disable_dpp_power_gate)
return; return;
if (REG(DOMAIN1_PG_CONFIG) == 0)
return;
switch (dpp_inst) { switch (dpp_inst) {
case 0: /* DPP0 */ case 0: /* DPP0 */
...@@ -465,6 +467,8 @@ static void hubp_pg_control( ...@@ -465,6 +467,8 @@ static void hubp_pg_control(
if (hws->ctx->dc->debug.disable_hubp_power_gate) if (hws->ctx->dc->debug.disable_hubp_power_gate)
return; return;
if (REG(DOMAIN0_PG_CONFIG) == 0)
return;
switch (hubp_inst) { switch (hubp_inst) {
case 0: /* DCHUBP0 */ case 0: /* DCHUBP0 */
...@@ -865,7 +869,8 @@ void hwss1_plane_atomic_disconnect(struct dc *dc, struct pipe_ctx *pipe_ctx) ...@@ -865,7 +869,8 @@ void hwss1_plane_atomic_disconnect(struct dc *dc, struct pipe_ctx *pipe_ctx)
return; return;
mpc->funcs->remove_mpcc(mpc, mpc_tree_params, mpcc_to_remove); 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; dc->optimized_required = true;
...@@ -1343,10 +1348,11 @@ static void dcn10_enable_per_frame_crtc_position_reset( ...@@ -1343,10 +1348,11 @@ static void dcn10_enable_per_frame_crtc_position_reset(
DC_SYNC_INFO("Setting up\n"); DC_SYNC_INFO("Setting up\n");
for (i = 0; i < group_size; i++) for (i = 0; i < group_size; i++)
grouped_pipes[i]->stream_res.tg->funcs->enable_crtc_reset( if (grouped_pipes[i]->stream_res.tg->funcs->enable_crtc_reset)
grouped_pipes[i]->stream_res.tg, grouped_pipes[i]->stream_res.tg->funcs->enable_crtc_reset(
grouped_pipes[i]->stream->triggered_crtc_reset.event_source->status.primary_otg_inst, grouped_pipes[i]->stream_res.tg,
&grouped_pipes[i]->stream->triggered_crtc_reset); 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"); DC_SYNC_INFO("Waiting for trigger\n");
...@@ -2496,8 +2502,14 @@ static void dcn10_update_pending_status(struct pipe_ctx *pipe_ctx) ...@@ -2496,8 +2502,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) static void dcn10_update_dchub(struct dce_hwseq *hws, struct dchub_init_data *dh_data)
{ {
if (hws->ctx->dc->res_pool->hubbub != NULL) if (hws->ctx->dc->res_pool->hubbub != NULL) {
hubbub1_update_dchub(hws->ctx->dc->res_pool->hubbub, dh_data); 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) static void dcn10_set_cursor_position(struct pipe_ctx *pipe_ctx)
......
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