aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0475-drm-amd-display-Get-rid-of-get_dm_commit_action.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0475-drm-amd-display-Get-rid-of-get_dm_commit_action.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0475-drm-amd-display-Get-rid-of-get_dm_commit_action.patch250
1 files changed, 250 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0475-drm-amd-display-Get-rid-of-get_dm_commit_action.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0475-drm-amd-display-Get-rid-of-get_dm_commit_action.patch
new file mode 100644
index 00000000..f1d2394a
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0475-drm-amd-display-Get-rid-of-get_dm_commit_action.patch
@@ -0,0 +1,250 @@
+From 6523322e31844b372f76d84128c3f1581f181489 Mon Sep 17 00:00:00 2001
+From: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com>
+Date: Wed, 24 May 2017 11:59:39 -0400
+Subject: [PATCH 0475/4131] drm/amd/display: Get rid of get_dm_commit_action
+
+Use drm_atomic_crtc_needs_modeset instead.
+
+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 | 127 +++++++--------------
+ 1 file changed, 44 insertions(+), 83 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 3f6a6b8..fbdb599 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
+@@ -2326,57 +2326,23 @@ int amdgpu_dm_encoder_init(
+ return res;
+ }
+
+-enum dm_commit_action {
+- DM_COMMIT_ACTION_NOTHING,
+- DM_COMMIT_ACTION_RESET,
+- DM_COMMIT_ACTION_DPMS_ON,
+- DM_COMMIT_ACTION_DPMS_OFF,
+- DM_COMMIT_ACTION_SET
+-};
+-
+-static enum dm_commit_action get_dm_commit_action(struct drm_crtc_state *state)
++static bool modeset_required(struct drm_crtc_state *crtc_state)
+ {
+- /* mode changed means either actually mode changed or enabled changed */
+- /* active changed means dpms changed */
+-
+- DRM_DEBUG_KMS("crtc_state_flags: enable:%d, active:%d, planes_changed:%d, mode_changed:%d,active_changed:%d,connectors_changed:%d\n",
+- state->enable,
+- state->active,
+- state->planes_changed,
+- state->mode_changed,
+- state->active_changed,
+- state->connectors_changed);
+-
+- if (state->mode_changed) {
+- /* if it is got disabled - call reset mode */
+- if (!state->enable)
+- return DM_COMMIT_ACTION_RESET;
++ if (!drm_atomic_crtc_needs_modeset(crtc_state))
++ return false;
+
+- if (state->active)
+- return DM_COMMIT_ACTION_SET;
+- else
+- return DM_COMMIT_ACTION_RESET;
+- } else {
+- /* ! mode_changed */
++ if (!crtc_state->enable)
++ return false;
+
+- /* if it is remain disable - skip it */
+- if (!state->enable)
+- return DM_COMMIT_ACTION_NOTHING;
++ return crtc_state->active;
++}
+
+- if (state->active && state->connectors_changed)
+- return DM_COMMIT_ACTION_SET;
++static bool modereset_required(struct drm_crtc_state *crtc_state)
++{
++ if (!drm_atomic_crtc_needs_modeset(crtc_state))
++ return false;
+
+- if (state->active_changed) {
+- if (state->active) {
+- return DM_COMMIT_ACTION_DPMS_ON;
+- } else {
+- return DM_COMMIT_ACTION_DPMS_OFF;
+- }
+- } else {
+- /* ! active_changed */
+- return DM_COMMIT_ACTION_NOTHING;
+- }
+- }
++ return !crtc_state->enable || !crtc_state->active;
+ }
+
+ static void manage_dm_interrupts(
+@@ -2629,12 +2595,10 @@ void amdgpu_dm_atomic_commit_tail(
+ struct drm_connector_state *old_conn_state;
+
+ drm_atomic_helper_update_legacy_modeset_state(dev, state);
+-
+ /* update changed items */
+ for_each_crtc_in_state(state, crtc, old_crtc_state, i) {
+ struct amdgpu_crtc *acrtc;
+ struct amdgpu_connector *aconnector = NULL;
+- enum dm_commit_action action;
+ struct drm_crtc_state *new_state = crtc->state;
+
+ acrtc = to_amdgpu_crtc(crtc);
+@@ -2645,15 +2609,23 @@ void amdgpu_dm_atomic_commit_tail(
+ crtc,
+ false);
+
++ DRM_DEBUG_KMS(
++ "amdgpu_crtc id:%d crtc_state_flags: enable:%d, active:%d, "
++ "planes_changed:%d, mode_changed:%d,active_changed:%d,"
++ "connectors_changed:%d\n",
++ acrtc->crtc_id,
++ new_state->enable,
++ new_state->active,
++ new_state->planes_changed,
++ new_state->mode_changed,
++ new_state->active_changed,
++ new_state->connectors_changed);
++
+ /* handles headless hotplug case, updating new_state and
+ * aconnector as needed
+ */
+
+- action = get_dm_commit_action(new_state);
+-
+- switch (action) {
+- case DM_COMMIT_ACTION_DPMS_ON:
+- case DM_COMMIT_ACTION_SET: {
++ if (modeset_required(new_state)) {
+ struct dm_connector_state *dm_state = NULL;
+ new_stream = NULL;
+
+@@ -2703,21 +2675,13 @@ void amdgpu_dm_atomic_commit_tail(
+ acrtc->enabled = true;
+ acrtc->hw_mode = crtc->state->mode;
+ crtc->hwmode = crtc->state->mode;
++ } else if (modereset_required(new_state)) {
+
+- break;
+- }
+- case DM_COMMIT_ACTION_DPMS_OFF:
+- case DM_COMMIT_ACTION_RESET:
+ DRM_INFO("Atomic commit: RESET. crtc id %d:[%p]\n", acrtc->crtc_id, acrtc);
+ /* i.e. reset mode */
+ if (acrtc->stream)
+ remove_stream(adev, acrtc);
+- break;
+-
+- /*TODO retire */
+- case DM_COMMIT_ACTION_NOTHING:
+- continue;
+- } /* switch() */
++ }
+ } /* for_each_crtc_in_state() */
+
+ /* Handle scaling and undersacn changes*/
+@@ -2731,8 +2695,7 @@ void amdgpu_dm_atomic_commit_tail(
+ const struct dc_stream_status *status = NULL;
+
+ /* Skip any modesets/resets */
+- if (!acrtc ||
+- get_dm_commit_action(acrtc->base.state) != DM_COMMIT_ACTION_NOTHING)
++ if (!acrtc || drm_atomic_crtc_needs_modeset(acrtc->base.state))
+ continue;
+
+ /* Skip any thing not scale or underscan chnages */
+@@ -3128,17 +3091,25 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
+ for_each_crtc_in_state(state, crtc, crtc_state, i) {
+ struct amdgpu_crtc *acrtc = NULL;
+ struct amdgpu_connector *aconnector = NULL;
+- enum dm_commit_action action;
+
+ acrtc = to_amdgpu_crtc(crtc);
+
+ aconnector = amdgpu_dm_find_first_crct_matching_connector(state, crtc, true);
+
+- action = get_dm_commit_action(crtc_state);
++ DRM_DEBUG_KMS(
++ "amdgpu_crtc id:%d crtc_state_flags: enable:%d, active:%d, "
++ "planes_changed:%d, mode_changed:%d,active_changed:%d,"
++ "connectors_changed:%d\n",
++ acrtc->crtc_id,
++ crtc_state->enable,
++ crtc_state->active,
++ crtc_state->planes_changed,
++ crtc_state->mode_changed,
++ crtc_state->active_changed,
++ crtc_state->connectors_changed);
++
++ if (modeset_required(crtc_state)) {
+
+- switch (action) {
+- case DM_COMMIT_ACTION_DPMS_ON:
+- case DM_COMMIT_ACTION_SET: {
+ struct dc_stream *new_stream = NULL;
+ struct drm_connector_state *conn_state = NULL;
+ struct dm_connector_state *dm_state = NULL;
+@@ -3176,11 +3147,9 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
+ new_stream_count++;
+ need_to_validate = true;
+ wait_for_prev_commits = true;
+- break;
+- }
+
+- case DM_COMMIT_ACTION_DPMS_OFF:
+- case DM_COMMIT_ACTION_RESET:
++ } else if (modereset_required(crtc_state)) {
++
+ /* i.e. reset mode */
+ if (acrtc->stream) {
+ set_count = remove_from_val_sets(
+@@ -3189,11 +3158,6 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
+ acrtc->stream);
+ wait_for_prev_commits = true;
+ }
+- break;
+-
+- /*TODO retire */
+- case DM_COMMIT_ACTION_NOTHING:
+- continue;
+ }
+
+ /*
+@@ -3221,8 +3185,7 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
+ struct dc_stream *new_stream;
+
+ /* Skip any modesets/resets */
+- if (!acrtc ||
+- get_dm_commit_action(acrtc->base.state) != DM_COMMIT_ACTION_NOTHING)
++ if (!acrtc || drm_atomic_crtc_needs_modeset(acrtc->base.state))
+ continue;
+
+ /* Skip any thing not scale or underscan chnages */
+@@ -3260,7 +3223,6 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
+ struct drm_framebuffer *fb = plane_state->fb;
+ struct drm_connector *connector;
+ struct dm_connector_state *dm_state = NULL;
+- enum dm_commit_action action;
+ struct drm_crtc_state *crtc_state;
+ bool pflip_needed;
+
+@@ -3269,7 +3231,6 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
+ !crtc->state->planes_changed || !crtc->state->active)
+ continue;
+
+- action = get_dm_commit_action(crtc->state);
+
+ crtc_state = drm_atomic_get_crtc_state(state, crtc);
+ pflip_needed = !state->allow_modeset;
+--
+2.7.4
+