aboutsummaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorAndrey Grodzovsky <Andrey.Grodzovsky@amd.com>2017-07-11 13:45:57 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-09-26 18:13:41 -0400
commit3b42a1c09568ac6b65bfa40931600c5fe49d31e2 (patch)
tree7e3dc1b8e6707fdfd6af7244b1851277edc1ce68 /drivers/gpu
parent8a76708ec4be2e9d63131e3769f17a04d8a82c87 (diff)
drm/amd/display: Skip DC validation for flips and cursor.
Nothing to validate in DC in this case. Skip it. Signed-off-by: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com> Reviewed-by: Roman Li <Roman.Li@amd.com> Acked-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.c35
1 files changed, 18 insertions, 17 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 b56150a29502..248b397a6a7d 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
@@ -1311,8 +1311,7 @@ int amdgpu_dm_connector_mode_valid(
if (context) {
result = MODE_OK;
- dc_resource_validate_ctx_destruct(context);
- dm_free(context);
+ dc_release_validate_context(context);
}
dc_stream_release(stream);
@@ -2598,8 +2597,8 @@ void amdgpu_dm_atomic_commit_tail(
}
}
- /* DC is optimized not to do anything if 'streams' didn't change. */
- WARN_ON(!dc_commit_context(dm->dc, dm_state->context));
+ if (dm_state->context)
+ WARN_ON(!dc_commit_context(dm->dc, dm_state->context));
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
@@ -2932,9 +2931,9 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
/*
* This bool will be set for true for any modeset/reset
- * or surface update which implies non fast surfae update.
+ * or surface update which implies non fast surface update.
*/
- bool aquire_global_lock = false;
+ bool lock_and_validation_needed = false;
ret = drm_atomic_helper_check(dev, state);
@@ -3022,7 +3021,7 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
new_acrtc_state->stream,
crtc);
- aquire_global_lock = true;
+ lock_and_validation_needed = true;
} else if (modereset_required(crtc_state)) {
@@ -3036,7 +3035,7 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
dc_stream_release(new_acrtc_state->stream);
new_acrtc_state->stream = NULL;
- aquire_global_lock = true;
+ lock_and_validation_needed = true;
}
}
@@ -3074,7 +3073,7 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
if (!is_scaling_state_different(con_new_state, con_old_state))
continue;
- aquire_global_lock = true;
+ lock_and_validation_needed = true;
}
for_each_crtc_in_state(state, crtc, crtc_state, i) {
@@ -3124,17 +3123,11 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
new_acrtc_state->stream,
surface);
- aquire_global_lock = true;
+ lock_and_validation_needed = true;
}
}
}
- dm_state->context = dc_get_validate_context(dc, set, set_count);
- if (!dm_state->context) {
- ret = -EINVAL;
- goto fail_planes;
- }
-
/*
* For full updates case when
* removing/adding/updating streams on once CRTC while flipping
@@ -3144,10 +3137,18 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
* will wait for completion of any outstanding flip using DRMs
* synchronization events.
*/
- if (aquire_global_lock) {
+
+ if (lock_and_validation_needed) {
+
ret = do_aquire_global_lock(dev, state);
if (ret)
goto fail_planes;
+
+ dm_state->context = dc_get_validate_context(dc, set, set_count);
+ if (!dm_state->context) {
+ ret = -EINVAL;
+ goto fail_planes;
+ }
}
/* Must be success */