aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/0437-drm-amd-display-Unify-loop-for-surface-update-and-pa.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/0437-drm-amd-display-Unify-loop-for-surface-update-and-pa.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/0437-drm-amd-display-Unify-loop-for-surface-update-and-pa.patch208
1 files changed, 0 insertions, 208 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/0437-drm-amd-display-Unify-loop-for-surface-update-and-pa.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/0437-drm-amd-display-Unify-loop-for-surface-update-and-pa.patch
deleted file mode 100644
index 815c3793..00000000
--- a/common/recipes-kernel/linux/linux-yocto-4.14.71/0437-drm-amd-display-Unify-loop-for-surface-update-and-pa.patch
+++ /dev/null
@@ -1,208 +0,0 @@
-From e6a11de519591103b97e3317b7c65f4131b26716 Mon Sep 17 00:00:00 2001
-From: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com>
-Date: Mon, 15 May 2017 18:55:38 -0400
-Subject: [PATCH 0437/4131] drm/amd/display: Unify loop for surface update and
- page flip.
-
-Remove extra loop we have for page flips and do flips in same loop we do
-for surface create/update.
-Add documentation for synchronization between commits on different crtcs.
-Rename function to have DM prefix.
-
-Signed-off-by: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com>
-Reviewed-by: Harry Wentland <Harry.Wentland@amd.com>
-Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
----
- .../drm/amd/display/amdgpu_dm/amdgpu_dm_types.c | 88 +++++++++++-----------
- 1 file changed, 42 insertions(+), 46 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 c0f2699..03f05a7 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
-@@ -2559,10 +2559,11 @@ static void amdgpu_dm_do_flip(
- acrtc->crtc_id);
- }
-
--void dc_commit_surfaces(struct drm_atomic_state *state,
-+static void amdgpu_dm_commit_surfaces(struct drm_atomic_state *state,
- struct drm_device *dev,
- struct amdgpu_display_manager *dm,
-- struct drm_crtc *pcrtc)
-+ struct drm_crtc *pcrtc,
-+ bool *wait_for_vblank)
- {
- uint32_t i;
- struct drm_plane *plane;
-@@ -2575,10 +2576,11 @@ void dc_commit_surfaces(struct drm_atomic_state *state,
- 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 amdgpu_crtc *acrtc_attach = to_amdgpu_crtc(crtc);
- struct drm_framebuffer *fb = plane_state->fb;
- struct drm_connector *connector;
- struct dm_connector_state *dm_state = NULL;
-- struct amdgpu_crtc *acrtc_attach;
-+
- enum dm_commit_action action;
- bool pflip_needed;
-
-@@ -2587,13 +2589,13 @@ void dc_commit_surfaces(struct drm_atomic_state *state,
-
- 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.
-+ /*
-+ * TODO - TO decide if it's a flip or surface update
-+ * stop relying on allow_modeset flag and query DC
-+ * using dc_check_update_surfaces_for_stream.
- */
- pflip_needed = !state->allow_modeset;
-- if (!pflip_needed || action == DM_COMMIT_ACTION_DPMS_ON
-- || action == DM_COMMIT_ACTION_SET) {
-+ if (!pflip_needed) {
- list_for_each_entry(connector,
- &dev->mode_config.connector_list,
- head) {
-@@ -2623,11 +2625,23 @@ void dc_commit_surfaces(struct drm_atomic_state *state,
- if (crtc == pcrtc) {
- add_surface(dm->dc, crtc, plane,
- &dc_surfaces_constructed[planes_count]);
-- acrtc_attach = to_amdgpu_crtc(crtc);
- dc_stream_attach = acrtc_attach->stream;
- planes_count++;
- }
-+ } else if (crtc->state->planes_changed) {
-+ *wait_for_vblank =
-+ acrtc_attach->flip_flags & DRM_MODE_PAGE_FLIP_ASYNC ?
-+ false : true;
-+
-+ amdgpu_dm_do_flip(
-+ crtc,
-+ fb,
-+ drm_crtc_vblank_count(crtc) + *wait_for_vblank);
-+
-+ /*clean up the flags for next usage*/
-+ acrtc_attach->flip_flags = 0;
- }
-+
- }
-
- if (planes_count) {
-@@ -2649,8 +2663,6 @@ void amdgpu_dm_atomic_commit_tail(
- struct drm_device *dev = state->dev;
- struct amdgpu_device *adev = dev->dev_private;
- struct amdgpu_display_manager *dm = &adev->dm;
-- struct drm_plane *plane;
-- struct drm_plane_state *old_plane_state;
- uint32_t i, j;
- uint32_t commit_streams_count = 0;
- uint32_t new_crtcs_count = 0;
-@@ -2815,7 +2827,7 @@ void amdgpu_dm_atomic_commit_tail(
-
- /* update planes when needed per crtc*/
- for_each_crtc_in_state(state, pcrtc, old_crtc_state, j)
-- dc_commit_surfaces(state, dev, dm, pcrtc);
-+ amdgpu_dm_commit_surfaces(state, dev, dm, pcrtc, &wait_for_vblank);
-
- for (i = 0; i < new_crtcs_count; i++) {
- /*
-@@ -2829,34 +2841,6 @@ void amdgpu_dm_atomic_commit_tail(
-
- manage_dm_interrupts(adev, acrtc, true);
- dm_crtc_cursor_reset(&acrtc->base);
--
-- }
--
-- 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 amdgpu_crtc *acrtc = to_amdgpu_crtc(crtc);
-- struct drm_framebuffer *fb = plane_state->fb;
-- bool pflip_needed;
--
-- if (!fb || !crtc || !crtc->state->planes_changed ||
-- !crtc->state->active)
-- continue;
-- pflip_needed = !state->allow_modeset;
--
-- if (pflip_needed) {
-- wait_for_vblank =
-- acrtc->flip_flags & DRM_MODE_PAGE_FLIP_ASYNC ?
-- false : true;
--
-- amdgpu_dm_do_flip(
-- crtc,
-- fb,
-- drm_crtc_vblank_count(crtc) + wait_for_vblank);
--
-- /*clean up the flags for next usage*/
-- acrtc->flip_flags = 0;
-- }
- }
-
-
-@@ -3079,7 +3063,11 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
- struct dc *dc = adev->dm.dc;
- bool need_to_validate = false;
- struct validate_context *context;
-- bool wait_4_prev_commits = false;
-+ /*
-+ * This bool will be set for true for any modeset/reset
-+ * or surface update which implies non fast surfae update.
-+ */
-+ bool wait_for_prev_commits = false;
-
- ret = drm_atomic_helper_check(dev, state);
-
-@@ -3156,7 +3144,7 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
-
- new_stream_count++;
- need_to_validate = true;
-- wait_4_prev_commits = true;
-+ wait_for_prev_commits = true;
- break;
- }
-
-@@ -3202,7 +3190,7 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
-
- new_stream_count++;
- need_to_validate = true;
-- wait_4_prev_commits = true;
-+ wait_for_prev_commits = true;
-
- break;
- }
-@@ -3214,7 +3202,7 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
- set,
- set_count,
- acrtc->stream);
-- wait_4_prev_commits = true;
-+ wait_for_prev_commits = true;
- }
- break;
- }
-@@ -3310,8 +3298,16 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
- if (need_to_validate == false || set_count == 0 || context) {
-
- ret = 0;
--
-- if (wait_4_prev_commits) {
-+ /*
-+ * For full updates case when
-+ * removing/adding/updateding streams on once CRTC while flipping
-+ * on another CRTC,
-+ * Adding all current active CRTC's states to the atomic commit in
-+ * amdgpu_dm_atomic_check will guarantee that any such full update commit
-+ * will wait for completion of any outstanding flip using DRMs
-+ * synchronization events.
-+ */
-+ if (wait_for_prev_commits) {
- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
- struct amdgpu_crtc *acrtc = to_amdgpu_crtc(crtc);
- struct drm_crtc_state *crtc_state;
---
-2.7.4
-