drm/amd/display: Add writeback enable field (wb_enabled)
authorAlex Hung <alex.hung@amd.com>
Fri, 1 Dec 2023 13:25:36 +0000 (06:25 -0700)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 6 Dec 2023 20:22:35 +0000 (15:22 -0500)
[WHAT]
Add a new field to keep track whether a crtc is previously
writeback-enabled.

Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index a166d7684719622ff648052cb73f191d80b777b1..d8083972e393edac448214f5af80086bc1d92af6 100644 (file)
@@ -418,6 +418,7 @@ struct amdgpu_crtc {
        struct drm_pending_vblank_event *event;
 
        bool wb_pending;
+       bool wb_enabled;
        struct drm_writeback_connector *wb_conn;
 };
 
index 311f815452e07e6756258e8209d8ed68be536779..b45b248808f7bb437709b7bb61de34891e662796 100644 (file)
@@ -8693,9 +8693,13 @@ static void amdgpu_dm_commit_streams(struct drm_atomic_state *state,
                if (acrtc)
                        old_crtc_state = drm_atomic_get_old_crtc_state(state, &acrtc->base);
 
+               if (!acrtc->wb_enabled)
+                       continue;
+
                dm_old_crtc_state = to_dm_crtc_state(old_crtc_state);
 
                dm_clear_writeback(dm, dm_old_crtc_state);
+               acrtc->wb_enabled = false;
        }
 
        for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state,
@@ -9273,9 +9277,13 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state)
                if (acrtc)
                        new_crtc_state = drm_atomic_get_new_crtc_state(state, &acrtc->base);
 
+               if (acrtc->wb_enabled)
+                       continue;
+
                dm_new_crtc_state = to_dm_crtc_state(new_crtc_state);
 
                dm_set_writeback(dm, dm_new_crtc_state, connector, new_con_state);
+               acrtc->wb_enabled = true;
        }
 
        /* Update audio instances for each connector. */