This should make things simpler when we try to rework this later when we
pass validate_context from atomic_check to atomic_commit.

Change-Id: Icbf1514abff4b25163f4a54e73f41310e9bc970c
Signed-off-by: Harry Wentland <harry.wentl...@amd.com>
Acked-by: Harry Wentland <harry.wentl...@amd.com>
Reviewed-by: Tony Cheng <tony.ch...@amd.com>
---
 .../drm/amd/display/amdgpu_dm/amdgpu_dm_types.c    | 113 +++++++++++----------
 1 file changed, 62 insertions(+), 51 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c
index 4eb3d819404a..78c346a4affa 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c
@@ -2483,6 +2483,67 @@ static void amdgpu_dm_do_flip(
                                                 acrtc->crtc_id);
 }
 
+void dc_commit_surfaces(struct drm_atomic_state *state,
+       struct drm_device *dev, struct amdgpu_display_manager *dm)
+{
+       uint32_t i;
+       struct drm_plane *plane;
+       struct drm_plane_state *old_plane_state;
+
+       /* update planes when needed */
+       for_each_plane_in_state(state, plane, old_plane_state, i) {
+               struct drm_plane_state *plane_state = plane->state;
+               struct drm_crtc *crtc = plane_state->crtc;
+               struct drm_framebuffer *fb = plane_state->fb;
+               struct drm_connector *connector;
+               struct dm_connector_state *dm_state = NULL;
+               enum dm_commit_action action;
+               bool pflip_needed;
+
+               if (!fb || !crtc || !crtc->state->active)
+                       continue;
+
+               action = get_dm_commit_action(crtc->state);
+
+               /* Surfaces are created under two scenarios:
+                * 1. This commit is not a page flip.
+                * 2. This commit is a page flip, and streams are created.
+                */
+               pflip_needed = !state->allow_modeset;
+               if (!pflip_needed || action == DM_COMMIT_ACTION_DPMS_ON
+                               || action == DM_COMMIT_ACTION_SET) {
+                       list_for_each_entry(connector,
+                                           &dev->mode_config.connector_list,
+                                           head) {
+                               if (connector->state->crtc == crtc) {
+                                       dm_state = to_dm_connector_state(
+                                                       connector->state);
+                                       break;
+                               }
+                       }
+
+                       /*
+                        * This situation happens in the following case:
+                        * we are about to get set mode for connector who's only
+                        * possible crtc (in encoder crtc mask) is used by
+                        * another connector, that is why it will try to
+                        * re-assing crtcs in order to make configuration
+                        * supported. For our implementation we need to make all
+                        * encoders support all crtcs, then this issue will
+                        * never arise again. But to guard code from this issue
+                        * check is left.
+                        *
+                        * Also it should be needed when used with actual
+                        * drm_atomic_commit ioctl in future
+                        */
+                       if (!dm_state)
+                               continue;
+
+                       dm_dc_surface_commit(dm->dc, crtc);
+               }
+       }
+}
+
 void amdgpu_dm_atomic_commit_tail(
        struct drm_atomic_state *state)
 {
@@ -2654,57 +2715,7 @@ void amdgpu_dm_atomic_commit_tail(
        }
 
        /* update planes when needed */
-       for_each_plane_in_state(state, plane, old_plane_state, i) {
-               struct drm_plane_state *plane_state = plane->state;
-               struct drm_crtc *crtc = plane_state->crtc;
-               struct drm_framebuffer *fb = plane_state->fb;
-               struct drm_connector *connector;
-               struct dm_connector_state *dm_state = NULL;
-               enum dm_commit_action action;
-               bool pflip_needed;
-
-               if (!fb || !crtc || !crtc->state->active)
-                       continue;
-
-               action = get_dm_commit_action(crtc->state);
-
-               /* Surfaces are created under two scenarios:
-                * 1. This commit is not a page flip.
-                * 2. This commit is a page flip, and streams are created.
-                */
-               pflip_needed = !state->allow_modeset;
-               if (!pflip_needed ||
-                    action == DM_COMMIT_ACTION_DPMS_ON ||
-                    action == DM_COMMIT_ACTION_SET) {
-                       list_for_each_entry(connector,
-                               &dev->mode_config.connector_list, head) {
-                               if (connector->state->crtc == crtc) {
-                                       dm_state = to_dm_connector_state(
-                                               connector->state);
-                                       break;
-                               }
-                       }
-
-                       /*
-                        * This situation happens in the following case:
-                        * we are about to get set mode for connector who's only
-                        * possible crtc (in encoder crtc mask) is used by
-                        * another connector, that is why it will try to
-                        * re-assing crtcs in order to make configuration
-                        * supported. For our implementation we need to make all
-                        * encoders support all crtcs, then this issue will
-                        * never arise again. But to guard code from this issue
-                        * check is left.
-                        *
-                        * Also it should be needed when used with actual
-                        * drm_atomic_commit ioctl in future
-                        */
-                       if (!dm_state)
-                               continue;
-
-                       dm_dc_surface_commit(dm->dc, crtc);
-               }
-       }
+       dc_commit_surfaces(state, dev, dm);
 
        for (i = 0; i < new_crtcs_count; i++) {
                /*
-- 
2.11.0

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

Reply via email to