aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorLeo Li <sunpeng.li@amd.com>2024-09-09 16:15:23 -0400
committerAlex Deucher <alexander.deucher@amd.com>2024-10-01 17:07:06 -0400
commit95aaa207e9ef9e9f1425391826ced2ac7977fbf7 (patch)
treee283f7025b02e3a1ceb7acb0627d94da4cda5d57 /drivers/gpu
parentdrm/amd/display: change the panel power savings level without a modeset (diff)
downloadlinux-95aaa207e9ef9e9f1425391826ced2ac7977fbf7.tar.gz
linux-95aaa207e9ef9e9f1425391826ced2ac7977fbf7.zip
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 <sunpeng.li@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c17
-rw-r--r--drivers/gpu/drm/amd/display/dc/core/dc.c39
-rw-r--r--drivers/gpu/drm/amd/display/dc/dc.h2
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,