summaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorAndrey Grodzovsky <Andrey.Grodzovsky@amd.com>2017-05-24 11:59:39 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-09-26 18:07:37 -0400
commit4c92c92d77cdbfb46925d498addf19e5aebe46b8 (patch)
tree8df9233ff4702c494568f48eb9ec02e4394c1977 /drivers/gpu
parentafdbd4ccfd36eb18ce89b504d79bb3051cdab839 (diff)
downloadlinux-4c92c92d77cdbfb46925d498addf19e5aebe46b8.tar.bz2
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>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c127
1 files 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 810373480ed5..3747c99f3a8d 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
@@ -2164,57 +2164,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(
@@ -2467,12 +2433,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);
@@ -2483,15 +2447,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;
@@ -2541,21 +2513,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*/
@@ -2569,8 +2533,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 */
@@ -2966,17 +2929,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;
@@ -3014,11 +2985,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(
@@ -3027,11 +2996,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;
}
/*
@@ -3059,8 +3023,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 */
@@ -3098,7 +3061,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;
@@ -3107,7 +3069,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;