mirror of
https://github.com/torvalds/linux.git
synced 2026-04-22 16:53:59 -04:00
drm/amd/display: Refactor dc_state interface
[WHY?] Part of the dc_state interface that deals with adding streams and planes should remain public, while others that deal with internal status' and subvp should be private to DC. [HOW?] Move and rename the public functions to dc_state.h and private functions to dc_state_priv.h. Also add some additional functions for extracting subvp meta data from the state. Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Reviewed-by: Jun Lei <jun.lei@amd.com> Acked-by: Wayne Lin <wayne.lin@amd.com> Signed-off-by: Dillon Varone <dillon.varone@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
e5ffd1263d
commit
09a4ec5da9
@@ -37,6 +37,7 @@
|
||||
#include "dc/dc_dmub_srv.h"
|
||||
#include "dc/dc_edid_parser.h"
|
||||
#include "dc/dc_stat.h"
|
||||
#include "dc/dc_state.h"
|
||||
#include "amdgpu_dm_trace.h"
|
||||
#include "dpcd_defs.h"
|
||||
#include "link/protocols/link_dpcd.h"
|
||||
@@ -2607,7 +2608,7 @@ static enum dc_status amdgpu_dm_commit_zero_streams(struct dc *dc)
|
||||
|
||||
memset(del_streams, 0, sizeof(del_streams));
|
||||
|
||||
context = dc_create_state(dc);
|
||||
context = dc_state_create(dc);
|
||||
if (context == NULL)
|
||||
goto context_alloc_fail;
|
||||
|
||||
@@ -2622,12 +2623,12 @@ static enum dc_status amdgpu_dm_commit_zero_streams(struct dc *dc)
|
||||
|
||||
/* Remove all planes for removed streams and then remove the streams */
|
||||
for (i = 0; i < del_streams_count; i++) {
|
||||
if (!dc_rem_all_planes_for_stream(dc, del_streams[i], context)) {
|
||||
if (!dc_state_rem_all_planes_for_stream(dc, del_streams[i], context)) {
|
||||
res = DC_FAIL_DETACH_SURFACES;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
res = dc_remove_stream_from_ctx(dc, context, del_streams[i]);
|
||||
res = dc_state_remove_stream(dc, context, del_streams[i]);
|
||||
if (res != DC_OK)
|
||||
goto fail;
|
||||
}
|
||||
@@ -2635,7 +2636,7 @@ static enum dc_status amdgpu_dm_commit_zero_streams(struct dc *dc)
|
||||
res = dc_commit_streams(dc, context->streams, context->stream_count);
|
||||
|
||||
fail:
|
||||
dc_release_state(context);
|
||||
dc_state_release(context);
|
||||
|
||||
context_alloc_fail:
|
||||
return res;
|
||||
@@ -2662,7 +2663,7 @@ static int dm_suspend(void *handle)
|
||||
|
||||
dc_allow_idle_optimizations(adev->dm.dc, false);
|
||||
|
||||
dm->cached_dc_state = dc_copy_state(dm->dc->current_state);
|
||||
dm->cached_dc_state = dc_state_create_copy(dm->dc->current_state);
|
||||
|
||||
dm_gpureset_toggle_interrupts(adev, dm->cached_dc_state, false);
|
||||
|
||||
@@ -2909,7 +2910,7 @@ static int dm_resume(void *handle)
|
||||
|
||||
dm_gpureset_toggle_interrupts(adev, dm->cached_dc_state, true);
|
||||
|
||||
dc_release_state(dm->cached_dc_state);
|
||||
dc_state_release(dm->cached_dc_state);
|
||||
dm->cached_dc_state = NULL;
|
||||
|
||||
amdgpu_dm_irq_resume_late(adev);
|
||||
@@ -2919,8 +2920,8 @@ static int dm_resume(void *handle)
|
||||
return 0;
|
||||
}
|
||||
/* Recreate dc_state - DC invalidates it when setting power state to S3. */
|
||||
dc_release_state(dm_state->context);
|
||||
dm_state->context = dc_create_state(dm->dc);
|
||||
dc_state_release(dm_state->context);
|
||||
dm_state->context = dc_state_create(dm->dc);
|
||||
/* TODO: Remove dc_state->dccg, use dc->dccg directly. */
|
||||
dc_resource_state_construct(dm->dc, dm_state->context);
|
||||
|
||||
@@ -3998,7 +3999,7 @@ dm_atomic_duplicate_state(struct drm_private_obj *obj)
|
||||
old_state = to_dm_atomic_state(obj->state);
|
||||
|
||||
if (old_state && old_state->context)
|
||||
new_state->context = dc_copy_state(old_state->context);
|
||||
new_state->context = dc_state_create_copy(old_state->context);
|
||||
|
||||
if (!new_state->context) {
|
||||
kfree(new_state);
|
||||
@@ -4014,7 +4015,7 @@ static void dm_atomic_destroy_state(struct drm_private_obj *obj,
|
||||
struct dm_atomic_state *dm_state = to_dm_atomic_state(state);
|
||||
|
||||
if (dm_state && dm_state->context)
|
||||
dc_release_state(dm_state->context);
|
||||
dc_state_release(dm_state->context);
|
||||
|
||||
kfree(dm_state);
|
||||
}
|
||||
@@ -4050,7 +4051,7 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev)
|
||||
if (!state)
|
||||
return -ENOMEM;
|
||||
|
||||
state->context = dc_create_state(adev->dm.dc);
|
||||
state->context = dc_state_create(adev->dm.dc);
|
||||
if (!state->context) {
|
||||
kfree(state);
|
||||
return -ENOMEM;
|
||||
@@ -4065,7 +4066,7 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev)
|
||||
|
||||
r = amdgpu_display_modeset_create_props(adev);
|
||||
if (r) {
|
||||
dc_release_state(state->context);
|
||||
dc_state_release(state->context);
|
||||
kfree(state);
|
||||
return r;
|
||||
}
|
||||
@@ -4077,7 +4078,7 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev)
|
||||
|
||||
r = amdgpu_dm_audio_init(adev);
|
||||
if (r) {
|
||||
dc_release_state(state->context);
|
||||
dc_state_release(state->context);
|
||||
kfree(state);
|
||||
return r;
|
||||
}
|
||||
@@ -6658,7 +6659,7 @@ static enum dc_status dm_validate_stream_and_context(struct dc *dc,
|
||||
if (!dc_plane_state)
|
||||
goto cleanup;
|
||||
|
||||
dc_state = dc_create_state(dc);
|
||||
dc_state = dc_state_create(dc);
|
||||
if (!dc_state)
|
||||
goto cleanup;
|
||||
|
||||
@@ -6685,9 +6686,9 @@ static enum dc_status dm_validate_stream_and_context(struct dc *dc,
|
||||
dc_result = dc_validate_plane(dc, dc_plane_state);
|
||||
|
||||
if (dc_result == DC_OK)
|
||||
dc_result = dc_add_stream_to_ctx(dc, dc_state, stream);
|
||||
dc_result = dc_state_add_stream(dc, dc_state, stream);
|
||||
|
||||
if (dc_result == DC_OK && !dc_add_plane_to_context(
|
||||
if (dc_result == DC_OK && !dc_state_add_plane(
|
||||
dc,
|
||||
stream,
|
||||
dc_plane_state,
|
||||
@@ -6699,7 +6700,7 @@ static enum dc_status dm_validate_stream_and_context(struct dc *dc,
|
||||
|
||||
cleanup:
|
||||
if (dc_state)
|
||||
dc_release_state(dc_state);
|
||||
dc_state_release(dc_state);
|
||||
|
||||
if (dc_plane_state)
|
||||
dc_plane_state_release(dc_plane_state);
|
||||
@@ -8858,7 +8859,7 @@ static void amdgpu_dm_commit_streams(struct drm_atomic_state *state,
|
||||
dc_stream_get_status(dm_new_crtc_state->stream);
|
||||
|
||||
if (!status)
|
||||
status = dc_stream_get_status_from_state(dc_state,
|
||||
status = dc_state_get_stream_status(dc_state,
|
||||
dm_new_crtc_state->stream);
|
||||
if (!status)
|
||||
drm_err(dev,
|
||||
@@ -9783,7 +9784,7 @@ static int dm_update_crtc_state(struct amdgpu_display_manager *dm,
|
||||
crtc->base.id);
|
||||
|
||||
/* i.e. reset mode */
|
||||
if (dc_remove_stream_from_ctx(
|
||||
if (dc_state_remove_stream(
|
||||
dm->dc,
|
||||
dm_state->context,
|
||||
dm_old_crtc_state->stream) != DC_OK) {
|
||||
@@ -9826,7 +9827,7 @@ static int dm_update_crtc_state(struct amdgpu_display_manager *dm,
|
||||
DRM_DEBUG_ATOMIC("Enabling DRM crtc: %d\n",
|
||||
crtc->base.id);
|
||||
|
||||
if (dc_add_stream_to_ctx(
|
||||
if (dc_state_add_stream(
|
||||
dm->dc,
|
||||
dm_state->context,
|
||||
dm_new_crtc_state->stream) != DC_OK) {
|
||||
@@ -10148,7 +10149,7 @@ static int dm_update_plane_state(struct dc *dc,
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (!dc_remove_plane_from_context(
|
||||
if (!dc_state_remove_plane(
|
||||
dc,
|
||||
dm_old_crtc_state->stream,
|
||||
dm_old_plane_state->dc_state,
|
||||
@@ -10226,7 +10227,7 @@ static int dm_update_plane_state(struct dc *dc,
|
||||
* state. It'll be released when the atomic state is
|
||||
* cleaned.
|
||||
*/
|
||||
if (!dc_add_plane_to_context(
|
||||
if (!dc_state_add_plane(
|
||||
dc,
|
||||
dm_new_crtc_state->stream,
|
||||
dc_new_plane_state,
|
||||
|
||||
Reference in New Issue
Block a user