diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/0252-drm-amd-display-Remove-page_fleep_needed-function.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/0252-drm-amd-display-Remove-page_fleep_needed-function.patch | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/0252-drm-amd-display-Remove-page_fleep_needed-function.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/0252-drm-amd-display-Remove-page_fleep_needed-function.patch new file mode 100644 index 00000000..c4900833 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/0252-drm-amd-display-Remove-page_fleep_needed-function.patch @@ -0,0 +1,156 @@ +From b145199fed6dc8b9078e4bb9a002da09fe946933 Mon Sep 17 00:00:00 2001 +From: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com> +Date: Tue, 28 Feb 2017 16:45:46 -0500 +Subject: [PATCH 0252/4131] drm/amd/display: Remove page_fleep_needed function. + +This function makes a lot of assumptions to try and deduce +tha an atomic_commit came from FLIP ioctl. Those assumptions +are not explicit contract with DRM API and might lead to wrong +result as the code changes. Instead use drm_atomic_state.allow_modeset +flag which explicitly is set to false only in atomic flip +helper function, otherwise this flag is always true. +P.S When we get to do actual atomic IOCTL this will have to be revised +with the atomic call behavior. + +Signed-off-by: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com> +Acked-by: Harry Wentland <Harry.Wentland@amd.com> +Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + .../drm/amd/display/amdgpu_dm/amdgpu_dm_types.c | 92 +--------------------- + 1 file changed, 3 insertions(+), 89 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 1e4f2b7..38d37c2 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 +@@ -1592,80 +1592,6 @@ static const struct drm_plane_funcs dm_plane_funcs = { + .atomic_destroy_state = drm_atomic_helper_plane_destroy_state + }; + +-static void clear_unrelated_fields(struct drm_plane_state *state) +-{ +- state->crtc = NULL; +- state->fb = NULL; +- state->state = NULL; +- state->fence = NULL; +-} +- +-/*TODO update because event is always present now */ +-static bool page_flip_needed( +- const struct drm_plane_state *new_state, +- const struct drm_plane_state *old_state, +- struct drm_pending_vblank_event *event, +- bool commit_surface_required) +-{ +- struct drm_plane_state old_state_tmp; +- struct drm_plane_state new_state_tmp; +- +- struct amdgpu_framebuffer *amdgpu_fb_old; +- struct amdgpu_framebuffer *amdgpu_fb_new; +- struct amdgpu_crtc *acrtc_new; +- +- uint64_t old_tiling_flags; +- uint64_t new_tiling_flags; +- +- bool page_flip_required; +- +- if (!old_state) +- return false; +- +- if (!old_state->fb) +- return false; +- +- if (!new_state) +- return false; +- +- if (!new_state->fb) +- return false; +- +- old_state_tmp = *old_state; +- new_state_tmp = *new_state; +- +- if (!event) +- return false; +- +- amdgpu_fb_old = to_amdgpu_framebuffer(old_state->fb); +- amdgpu_fb_new = to_amdgpu_framebuffer(new_state->fb); +- +- if (!get_fb_info(amdgpu_fb_old, &old_tiling_flags, NULL)) +- return false; +- +- if (!get_fb_info(amdgpu_fb_new, &new_tiling_flags, NULL)) +- return false; +- +- if (commit_surface_required == true && +- old_tiling_flags != new_tiling_flags) +- return false; +- +- clear_unrelated_fields(&old_state_tmp); +- clear_unrelated_fields(&new_state_tmp); +- +- page_flip_required = memcmp(&old_state_tmp, +- &new_state_tmp, +- sizeof(old_state_tmp)) == 0 ? true:false; +- +- if (new_state->crtc && page_flip_required == false) { +- acrtc_new = to_amdgpu_crtc(new_state->crtc); +- if (acrtc_new->flip_flags & DRM_MODE_PAGE_FLIP_ASYNC) +- page_flip_required = true; +- } +- +- return page_flip_required; +-} +- + static int dm_plane_helper_prepare_fb( + struct drm_plane *plane, + struct drm_plane_state *new_state) +@@ -2647,11 +2573,7 @@ void amdgpu_dm_atomic_commit_tail( + * 1. This commit is not a page flip. + * 2. This commit is a page flip, and streams are created. + */ +- pflip_needed = !state->allow_modeset && +- page_flip_needed( +- plane_state, +- old_plane_state, +- crtc->state->event, true); ++ pflip_needed = !state->allow_modeset; + if (!pflip_needed || + action == DM_COMMIT_ACTION_DPMS_ON || + action == DM_COMMIT_ACTION_SET) { +@@ -2710,12 +2632,7 @@ void amdgpu_dm_atomic_commit_tail( + if (!fb || !crtc || !crtc->state->planes_changed || + !crtc->state->active) + continue; +- pflip_needed = !state->allow_modeset && +- page_flip_needed( +- plane_state, +- old_plane_state, +- crtc->state->event, +- false); ++ pflip_needed = !state->allow_modeset; + + if (pflip_needed) { + amdgpu_dm_do_flip( +@@ -3097,7 +3014,6 @@ int amdgpu_dm_atomic_check(struct drm_device *dev, + + for (i = 0; i < set_count; i++) { + for_each_plane_in_state(state, plane, plane_state, j) { +- struct drm_plane_state *old_plane_state = plane->state; + struct drm_crtc *crtc = plane_state->crtc; + struct drm_framebuffer *fb = plane_state->fb; + struct drm_connector *connector; +@@ -3118,9 +3034,7 @@ int amdgpu_dm_atomic_check(struct drm_device *dev, + * 2. This commit is a page flip, and streams are created. + */ + crtc_state = drm_atomic_get_crtc_state(state, crtc); +- pflip_needed = !state->allow_modeset && +- page_flip_needed(plane_state, old_plane_state, +- crtc_state->event, true); ++ pflip_needed = !state->allow_modeset; + if (!pflip_needed || + action == DM_COMMIT_ACTION_DPMS_ON || + action == DM_COMMIT_ACTION_SET) { +-- +2.7.4 + |