[PATCH] drm/amd/display: fix ABM disablement

Pillai, Aurabindo Aurabindo.Pillai at amd.com
Wed Nov 22 22:45:09 UTC 2023


[AMD Official Use Only - General]

Does amdgpu_dm_connector_funcs_reset() get called on wakeup from suspend ?  Users would want the system to have the same brightness level before suspending.


--

Regards,
Jay
________________________________
From: Mahfooz, Hamza <Hamza.Mahfooz at amd.com>
Sent: Wednesday, November 22, 2023 5:24 PM
To: amd-gfx at lists.freedesktop.org <amd-gfx at lists.freedesktop.org>
Cc: Wentland, Harry <Harry.Wentland at amd.com>; Li, Sun peng (Leo) <Sunpeng.Li at amd.com>; Siqueira, Rodrigo <Rodrigo.Siqueira at amd.com>; Koenig, Christian <Christian.Koenig at amd.com>; Hung, Alex <Alex.Hung at amd.com>; Pillai, Aurabindo <Aurabindo.Pillai at amd.com>; Wu, Hersen <hersenxs.wu at amd.com>; Lin, Wayne <Wayne.Lin at amd.com>; Mahfooz, Hamza <Hamza.Mahfooz at amd.com>
Subject: [PATCH] drm/amd/display: fix ABM disablement

On recent versions of DMUB firmware, if we want to completely disable
ABM we have to pass ABM_LEVEL_IMMEDIATE_DISABLE as the requested ABM
level to DMUB. Otherwise, LCD eDP displays are unable to reach their
maximum brightness levels. So, to fix this whenever the user requests an
ABM level of 0 pass ABM_LEVEL_IMMEDIATE_DISABLE to DMUB instead. Also,
to keep the user's experience consistent map ABM_LEVEL_IMMEDIATE_DISABLE
to 0 when a user tries to read the requested ABM level.

Signed-off-by: Hamza Mahfooz <hamza.mahfooz at amd.com>
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 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 5d9496db0ecb..8cb92d941cd9 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -6230,7 +6230,7 @@ int amdgpu_dm_connector_atomic_set_property(struct drm_connector *connector,
                 dm_new_state->underscan_enable = val;
                 ret = 0;
         } else if (property == adev->mode_info.abm_level_property) {
-               dm_new_state->abm_level = val;
+               dm_new_state->abm_level = val ?: ABM_LEVEL_IMMEDIATE_DISABLE;
                 ret = 0;
         }

@@ -6275,7 +6275,8 @@ int amdgpu_dm_connector_atomic_get_property(struct drm_connector *connector,
                 *val = dm_state->underscan_enable;
                 ret = 0;
         } else if (property == adev->mode_info.abm_level_property) {
-               *val = dm_state->abm_level;
+               *val = (dm_state->abm_level != ABM_LEVEL_IMMEDIATE_DISABLE) ?
+                       dm_state->abm_level : 0;
                 ret = 0;
         }

@@ -6348,7 +6349,8 @@ void amdgpu_dm_connector_funcs_reset(struct drm_connector *connector)
                 state->pbn = 0;

                 if (connector->connector_type == DRM_MODE_CONNECTOR_eDP)
-                       state->abm_level = amdgpu_dm_abm_level;
+                       state->abm_level = amdgpu_dm_abm_level ?:
+                               ABM_LEVEL_IMMEDIATE_DISABLE;

                 __drm_atomic_helper_connector_reset(connector, &state->base);
         }
--
2.42.1

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20231122/b619d48d/attachment-0001.htm>


More information about the amd-gfx mailing list