From: Andrey Grodzovsky <Andrey.Grodzovsky@xxxxxxx> Use drm_atomic_crtc_needs_modeset instead. Change-Id: I296cd1c8f8a2e4239a3cb814805868c14bcd20ba Signed-off-by: Andrey Grodzovsky <Andrey.Grodzovsky at amd.com> Reviewed-by: Harry Wentland <Harry.Wentland at 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 543acb712edf..aaa290bc425f 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 @@ -2343,57 +2343,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( @@ -2646,12 +2612,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); @@ -2662,15 +2626,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; @@ -2720,21 +2692,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*/ @@ -2748,8 +2712,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 */ @@ -3145,17 +3108,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; @@ -3193,11 +3164,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( @@ -3206,11 +3175,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; } /* @@ -3238,8 +3202,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 */ @@ -3277,7 +3240,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; @@ -3286,7 +3248,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.11.0