mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-22 13:54:57 +08:00
drm/amd/display: Fix 'panel_cntl' could be null in 'dcn21_set_backlight_level()'
[ Upstream commite96fddb329
] '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:474ac4a875
("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: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com> Reviewed-by: Anthony Koo <Anthony.Koo@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
a600c1ebc4
commit
2e150ccea1
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user