Commit e96fddb3 authored by Srinivasan Shanmugam's avatar Srinivasan Shanmugam Committed by Alex Deucher

drm/amd/display: Fix 'panel_cntl' could be null in 'dcn21_set_backlight_level()'

'panel_cntl' structure used to control the display panel could be null,
dereferencing it could lead to a null pointer access.

Fixes the below:
drivers/gpu/drm/amd/amdgpu/../display/dc/hwss/dcn21/dcn21_hwseq.c:269 dcn21_set_backlight_level() error: we previously assumed 'panel_cntl' could be null (see line 250)

Fixes: 474ac4a8 ("drm/amd/display: Implement some asic specific abm call backs.")
Cc: Yongqiang Sun <yongqiang.sun@amd.com>
Cc: Anthony Koo <Anthony.Koo@amd.com>
Cc: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Cc: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: default avatarSrinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Reviewed-by: default avatarAnthony Koo <Anthony.Koo@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent d0399da9
...@@ -237,34 +237,35 @@ bool dcn21_set_backlight_level(struct pipe_ctx *pipe_ctx, ...@@ -237,34 +237,35 @@ bool dcn21_set_backlight_level(struct pipe_ctx *pipe_ctx,
{ {
struct dc_context *dc = pipe_ctx->stream->ctx; struct dc_context *dc = pipe_ctx->stream->ctx;
struct abm *abm = pipe_ctx->stream_res.abm; struct abm *abm = pipe_ctx->stream_res.abm;
struct timing_generator *tg = pipe_ctx->stream_res.tg;
struct panel_cntl *panel_cntl = pipe_ctx->stream->link->panel_cntl; struct panel_cntl *panel_cntl = pipe_ctx->stream->link->panel_cntl;
uint32_t otg_inst;
if (!abm && !tg && !panel_cntl)
return false;
otg_inst = tg->inst;
if (dc->dc->res_pool->dmcu) { if (dc->dc->res_pool->dmcu) {
dce110_set_backlight_level(pipe_ctx, backlight_pwm_u16_16, frame_ramp); dce110_set_backlight_level(pipe_ctx, backlight_pwm_u16_16, frame_ramp);
return true; return true;
} }
if (abm != NULL) { if (abm->funcs && abm->funcs->set_pipe_ex) {
uint32_t otg_inst = pipe_ctx->stream_res.tg->inst; abm->funcs->set_pipe_ex(abm,
otg_inst,
if (abm && panel_cntl) { SET_ABM_PIPE_NORMAL,
if (abm->funcs && abm->funcs->set_pipe_ex) { panel_cntl->inst,
abm->funcs->set_pipe_ex(abm, panel_cntl->pwrseq_inst);
otg_inst, } else {
SET_ABM_PIPE_NORMAL, dmub_abm_set_pipe(abm,
panel_cntl->inst, otg_inst,
panel_cntl->pwrseq_inst); SET_ABM_PIPE_NORMAL,
} else { panel_cntl->inst,
dmub_abm_set_pipe(abm, panel_cntl->pwrseq_inst);
otg_inst,
SET_ABM_PIPE_NORMAL,
panel_cntl->inst,
panel_cntl->pwrseq_inst);
}
}
} }
if (abm && abm->funcs && abm->funcs->set_backlight_level_pwm) if (abm->funcs && abm->funcs->set_backlight_level_pwm)
abm->funcs->set_backlight_level_pwm(abm, backlight_pwm_u16_16, abm->funcs->set_backlight_level_pwm(abm, backlight_pwm_u16_16,
frame_ramp, 0, panel_cntl->inst); frame_ramp, 0, panel_cntl->inst);
else else
......
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