From 95aaa207e9ef9e9f1425391826ced2ac7977fbf7 Mon Sep 17 00:00:00 2001 From: Leo Li Date: Mon, 9 Sep 2024 16:15:23 -0400 Subject: [PATCH] Revert "drm/amd/display: change the panel power savings level without a modeset" This reverts commit 8d20a066fa9beb1ec559b12945414a51d17d07e5. It's causing a failure in the abm_gradual igt test. Signed-off-by: Leo Li Signed-off-by: Alex Deucher --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 17 +------- drivers/gpu/drm/amd/display/dc/core/dc.c | 39 ++++++++----------- drivers/gpu/drm/amd/display/dc/dc.h | 2 - 3 files changed, 17 insertions(+), 41 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 1d2d5fb3c56f..6e79028c5d78 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -6908,14 +6908,9 @@ static ssize_t panel_power_savings_store(struct device *device, const char *buf, size_t count) { struct drm_connector *connector = dev_get_drvdata(device); - struct amdgpu_dm_connector *aconn = to_amdgpu_dm_connector(connector); struct drm_device *dev = connector->dev; - struct amdgpu_device *adev = drm_to_adev(dev); - struct dc *dc = adev->dm.dc; - struct pipe_ctx *pipe_ctx; long val; int ret; - int i; ret = kstrtol(buf, 0, &val); @@ -6930,17 +6925,7 @@ static ssize_t panel_power_savings_store(struct device *device, ABM_LEVEL_IMMEDIATE_DISABLE; drm_modeset_unlock(&dev->mode_config.connection_mutex); - mutex_lock(&adev->dm.dc_lock); - for (i = 0; i < dc->res_pool->pipe_count; i++) { - pipe_ctx = &dc->current_state->res_ctx.pipe_ctx[i]; - - if (pipe_ctx->stream && - pipe_ctx->stream->link == aconn->dc_link) { - dc_set_abm_level(dc, pipe_ctx, val); - break; - } - } - mutex_unlock(&adev->dm.dc_lock); + drm_kms_helper_hotplug_event(dev); return count; } diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c index dc07ff422cde..5c39390ecbd5 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc.c @@ -3260,23 +3260,6 @@ fail: } -void dc_set_abm_level(struct dc *dc, struct pipe_ctx *pipe_ctx, int level) -{ - struct timing_generator *tg = pipe_ctx->stream_res.tg; - struct abm *abm = pipe_ctx->stream_res.abm; - - if (!abm) - return; - - if (tg->funcs->is_blanked && !tg->funcs->is_blanked(tg)) - tg->funcs->wait_for_state(tg, CRTC_STATE_VBLANK); - - if (level == ABM_LEVEL_IMMEDIATE_DISABLE) - dc->hwss.set_abm_immediate_disable(pipe_ctx); - else - abm->funcs->set_abm_level(abm, level); -} - static void commit_planes_do_stream_update(struct dc *dc, struct dc_stream_state *stream, struct dc_stream_update *stream_update, @@ -3405,12 +3388,22 @@ static void commit_planes_do_stream_update(struct dc *dc, dc->link_srv->set_dpms_on(dc->current_state, pipe_ctx); } - if (stream_update->abm_level) { - dc_set_abm_level(dc, pipe_ctx, - *stream_update->abm_level == - ABM_LEVEL_IMMEDIATE_DISABLE ? - ABM_LEVEL_IMMEDIATE_DISABLE : - stream->abm_level); + if (stream_update->abm_level && pipe_ctx->stream_res.abm) { + bool should_program_abm = true; + + // if otg funcs defined check if blanked before programming + if (pipe_ctx->stream_res.tg->funcs->is_blanked) + if (pipe_ctx->stream_res.tg->funcs->is_blanked(pipe_ctx->stream_res.tg)) + should_program_abm = false; + + if (should_program_abm) { + if (*stream_update->abm_level == ABM_LEVEL_IMMEDIATE_DISABLE) { + dc->hwss.set_abm_immediate_disable(pipe_ctx); + } else { + pipe_ctx->stream_res.abm->funcs->set_abm_level( + pipe_ctx->stream_res.abm, stream->abm_level); + } + } } } } diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h index 8c769d6519ea..3992ad73165b 100644 --- a/drivers/gpu/drm/amd/display/dc/dc.h +++ b/drivers/gpu/drm/amd/display/dc/dc.h @@ -2503,8 +2503,6 @@ void dc_z10_save_init(struct dc *dc); bool dc_is_dmub_outbox_supported(struct dc *dc); bool dc_enable_dmub_notifications(struct dc *dc); -void dc_set_abm_level(struct dc *dc, struct pipe_ctx *pipe_ctx, int level); - bool dc_abm_save_restore( struct dc *dc, struct dc_stream_state *stream, -- 2.50.1