diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2610-drm-amd-display-Use-DRM-new-style-object-iterators.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2610-drm-amd-display-Use-DRM-new-style-object-iterators.patch | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2610-drm-amd-display-Use-DRM-new-style-object-iterators.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2610-drm-amd-display-Use-DRM-new-style-object-iterators.patch new file mode 100644 index 00000000..7262edf0 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2610-drm-amd-display-Use-DRM-new-style-object-iterators.patch @@ -0,0 +1,200 @@ +From c425729f178af24a4f2c0ee41a015d6e14db6db8 Mon Sep 17 00:00:00 2001 +From: Dave Airlie <airlied@redhat.com> +Date: Mon, 9 Oct 2017 10:33:04 +1000 +Subject: [PATCH 2610/4131] drm/amd/display: Use DRM new-style object + iterators. + +Use the correct for_each_new/old_* iterators instead of for_each_* + +The following functions were considered: + +amdgpu_dm_find_first_crtc_matching_connector: use for_each_new + - Old from_state_var flag was always choosing the new state + +amdgpu_dm_display_resume: use for_each_new + - drm_atomic_helper_duplicate_state is called during suspend to + cache the state + - It sets 'state' within the state triplet to 'new_state' + +amdgpu_dm_commit_planes: use for_each_old + - Called after the state was swapped (via atomic commit tail) + +amdgpu_dm_atomic_commit: use for_each_new + - Called before the state is swapped + +amdgpu_dm_atomic_commit_tail: use for_each_old + - Called after the state was swapped + +dm_update_crtcs_state: use for_each_new + - Called before the state is swapped (via atomic check) + +amdgpu_dm_atomic_check: use for_each_new + - Called before the state is swapped + +v2: Split out typo fixes to a new patch. + +v3: Say "functions considered" instead of "affected functions". The + latter implies that changes are made to each. + +[airlied: squashed with my hacks] + +Signed-off-by: Leo (Sunpeng) Li <sunpeng.li@amd.com> +Reviewed-by: Sun peng Li <Sunpeng.Li@amd.com> +Acked-by: Harry Wentland <Harry.Wentland@amd.com> +--- + drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 42 +++++++++-------------- + 1 file changed, 16 insertions(+), 26 deletions(-) + +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 a593d63..89cd4500 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +@@ -605,23 +605,15 @@ static int dm_suspend(void *handle) + + static struct amdgpu_dm_connector * + amdgpu_dm_find_first_crtc_matching_connector(struct drm_atomic_state *state, +- struct drm_crtc *crtc, +- bool from_state_var) ++ struct drm_crtc *crtc) + { + uint32_t i; + struct drm_connector_state *conn_state; + struct drm_connector *connector; + struct drm_crtc *crtc_from_state; + +- for_each_connector_in_state( +- state, +- connector, +- conn_state, +- i) { +- crtc_from_state = +- from_state_var ? +- conn_state->crtc : +- connector->state->crtc; ++ for_each_new_connector_in_state(state, connector, conn_state, i) { ++ crtc_from_state = conn_state->crtc; + + if (crtc_from_state == crtc) + return to_amdgpu_dm_connector(connector); +@@ -684,7 +676,7 @@ int amdgpu_dm_display_resume(struct amdgpu_device *adev) + } + + /* Force mode set in atomic comit */ +- for_each_crtc_in_state(adev->dm.cached_state, crtc, crtc_state, i) ++ for_each_new_crtc_in_state(adev->dm.cached_state, crtc, crtc_state, i) + crtc_state->active_changed = true; + + ret = drm_atomic_helper_resume(ddev, adev->dm.cached_state); +@@ -4036,7 +4028,7 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state, + unsigned long flags; + + /* update planes when needed */ +- for_each_plane_in_state(state, plane, old_plane_state, i) { ++ for_each_old_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; +@@ -4144,7 +4136,7 @@ static int amdgpu_dm_atomic_commit(struct drm_device *dev, + * it will update crtc->dm_crtc_state->stream pointer which is used in + * the ISRs. + */ +- for_each_crtc_in_state(state, crtc, new_state, i) { ++ for_each_new_crtc_in_state(state, crtc, new_state, i) { + struct dm_crtc_state *old_acrtc_state = to_dm_crtc_state(crtc->state); + struct amdgpu_crtc *acrtc = to_amdgpu_crtc(crtc); + +@@ -4182,7 +4174,7 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state) + dm_state = to_dm_atomic_state(state); + + /* update changed items */ +- for_each_crtc_in_state(state, crtc, old_crtc_state, i) { ++ for_each_old_crtc_in_state(state, crtc, old_crtc_state, i) { + struct amdgpu_crtc *acrtc = to_amdgpu_crtc(crtc); + struct drm_crtc_state *new_state = crtc->state; + +@@ -4276,8 +4268,7 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state) + aconnector = + amdgpu_dm_find_first_crtc_matching_connector( + state, +- &new_crtcs[i]->base, +- false); ++ &new_crtcs[i]->base); + if (!aconnector) { + DRM_DEBUG_DRIVER("Atomic commit: Failed to find connector for acrtc id:%d " + "skipping freesync init\n", +@@ -4302,8 +4293,7 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state) + aconnector = + amdgpu_dm_find_first_crtc_matching_connector( + state, +- crtc, +- false); ++ crtc); + if (aconnector) { + conn_state = to_dm_connector_state(aconnector->base.state); + +@@ -4338,7 +4328,7 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state) + } + + /* Handle scaling and undersacn changes*/ +- for_each_connector_in_state(state, connector, old_conn_state, i) { ++ for_each_old_connector_in_state(state, connector, old_conn_state, i) { + struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector); + struct dm_connector_state *con_new_state = + to_dm_connector_state(aconnector->base.state); +@@ -4393,7 +4383,7 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state) + } + + /* update planes when needed per crtc*/ +- for_each_crtc_in_state(state, pcrtc, old_crtc_state, j) { ++ for_each_old_crtc_in_state(state, pcrtc, old_crtc_state, j) { + new_acrtc_state = to_dm_crtc_state(pcrtc->state); + + if (new_acrtc_state->stream) +@@ -4406,7 +4396,7 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state) + * mark consumed event for drm_atomic_helper_commit_hw_done + */ + spin_lock_irqsave(&adev->ddev->event_lock, flags); +- for_each_crtc_in_state(state, crtc, old_crtc_state, i) { ++ for_each_old_crtc_in_state(state, crtc, old_crtc_state, i) { + struct amdgpu_crtc *acrtc = to_amdgpu_crtc(crtc); + + if (acrtc->base.state->event) +@@ -4581,7 +4571,7 @@ static int dm_update_crtcs_state(struct dc *dc, + + /*TODO Move this code into dm_crtc_atomic_check once we get rid of dc_validation_set */ + /* update changed items */ +- for_each_crtc_in_state(state, crtc, crtc_state, i) { ++ for_each_new_crtc_in_state(state, crtc, crtc_state, i) { + struct amdgpu_crtc *acrtc = NULL; + struct amdgpu_dm_connector *aconnector = NULL; + struct drm_connector_state *conn_state = NULL; +@@ -4593,7 +4583,7 @@ static int dm_update_crtcs_state(struct dc *dc, + new_acrtc_state = to_dm_crtc_state(crtc_state); + acrtc = to_amdgpu_crtc(crtc); + +- aconnector = amdgpu_dm_find_first_crtc_matching_connector(state, crtc, true); ++ aconnector = amdgpu_dm_find_first_crtc_matching_connector(state, crtc); + + /* TODO This hack should go away */ + if (aconnector && enable) { +@@ -4895,7 +4885,7 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev, + * we should not add it to list of affected planes. + */ + if (state->legacy_cursor_update) { +- for_each_crtc_in_state(state, crtc, crtc_state, i) { ++ for_each_new_crtc_in_state(state, crtc, crtc_state, i) { + if (crtc_state->color_mgmt_changed) { + ret = drm_atomic_add_affected_planes(state, crtc); + if (ret) +@@ -4960,7 +4950,7 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev, + * new stream into context w\o causing full reset. Need to + * decide how to handle. + */ +- for_each_connector_in_state(state, connector, conn_state, i) { ++ for_each_new_connector_in_state(state, connector, conn_state, i) { + struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector); + struct dm_connector_state *con_old_state = + to_dm_connector_state(aconnector->base.state); +-- +2.7.4 + |