]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/amd/display: Fix dmesg warning from setting abm level
authorStylon Wang <stylon.wang@amd.com>
Tue, 30 Jun 2020 09:55:29 +0000 (17:55 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 21 Aug 2020 11:07:45 +0000 (13:07 +0200)
commit c5892a10218214d729699ab61bad6fc109baf0ce upstream.

[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 <stable@vger.kernel.org>
Signed-off-by: Stylon Wang <stylon.wang@amd.com>
Reviewed-by: Nicholas Kazlauskas <Nicholas.Kazlauskas@amd.com>
Acked-by: Eryk Brol <eryk.brol@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index d50751ae73f1b605d7d74a861ba9a62d5c62d28f..7cb4fe479614e8b3995b871813f664b6017e20bc 100644 (file)
@@ -8458,6 +8458,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 (!compute_mst_dsc_configs_for_state(state, dm_state->context))
                        goto fail;