From: Stylon Wang <stylon.w...@amd.com>

[Why]
Setting abm level does not correctly update CRTC state. As a result
no surface update is added to dc stream state and triggers warning.

[How]
Correctly update CRTC state when setting abm level property.

CC: Stable <sta...@vger.kernel.org>
Signed-off-by: Stylon Wang <stylon.w...@amd.com>
Reviewed-by: Nicholas Kazlauskas <nicholas.kazlaus...@amd.com>
Acked-by: Eryk Brol <eryk.b...@amd.com>
---
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 23 +++++++++++++++++++
 1 file changed, 23 insertions(+)

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 2b5e70f68e57..b1bc03594e5c 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -8625,6 +8625,29 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
        if (ret)
                goto fail;
 
+       /* Check connector changes */
+       for_each_oldnew_connector_in_state(state, connector, old_con_state, 
new_con_state, i) {
+               struct dm_connector_state *dm_old_con_state = 
to_dm_connector_state(old_con_state);
+               struct dm_connector_state *dm_new_con_state = 
to_dm_connector_state(new_con_state);
+
+               /* Skip connectors that are disabled or part of modeset 
already. */
+               if (!old_con_state->crtc && !new_con_state->crtc)
+                       continue;
+
+               if (!new_con_state->crtc)
+                       continue;
+
+               new_crtc_state = drm_atomic_get_crtc_state(state, 
new_con_state->crtc);
+               if (IS_ERR(new_crtc_state)) {
+                       ret = PTR_ERR(new_crtc_state);
+                       goto fail;
+               }
+
+               if (dm_old_con_state->abm_level !=
+                   dm_new_con_state->abm_level)
+                       new_crtc_state->connectors_changed = true;
+       }
+
 #if defined(CONFIG_DRM_AMD_DC_DCN)
        if (adev->asic_type >= CHIP_NAVI10) {
                for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, 
new_crtc_state, i) {
-- 
2.25.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to