diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/0351-drm-amd-display-pull-commit_surfaces-out-of-atomic_c.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/0351-drm-amd-display-pull-commit_surfaces-out-of-atomic_c.patch | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/0351-drm-amd-display-pull-commit_surfaces-out-of-atomic_c.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/0351-drm-amd-display-pull-commit_surfaces-out-of-atomic_c.patch new file mode 100644 index 00000000..301437c6 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/0351-drm-amd-display-pull-commit_surfaces-out-of-atomic_c.patch @@ -0,0 +1,151 @@ +From 9e87f12572e4ed00ca4fe0d17ed67adaef8246c4 Mon Sep 17 00:00:00 2001 +From: Harry Wentland <harry.wentland@amd.com> +Date: Thu, 6 Apr 2017 16:22:33 -0400 +Subject: [PATCH 0351/4131] drm/amd/display: pull commit_surfaces out of + atomic_commit into helper function + +This should make things simpler when we try to rework this later when we +pass validate_context from atomic_check to atomic_commit. + +Signed-off-by: Harry Wentland <harry.wentland@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 | 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 14800ba..dbeee59 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 +@@ -2531,6 +2531,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) + { +@@ -2702,57 +2763,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.7.4 + |