Commit da5c47f6 authored by Andrey Grodzovsky's avatar Andrey Grodzovsky Committed by Alex Deucher

drm/amd/display: Remove acrtc->stream

Remove acrtc->stream and move it into dm_crtc_state.
This allows to get rid of dm_atomic_state->dm_set.
Also reuse streams created in atomic_check during
commit.
Signed-off-by: default avatarAndrey Grodzovsky <Andrey.Grodzovsky@amd.com>
Reviewed-by: default avatarTony Cheng <Tony.Cheng@amd.com>
Acked-by: default avatarHarry Wentland <Harry.Wentland@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 89a1fc59
...@@ -100,13 +100,16 @@ static u32 dm_vblank_get_counter(struct amdgpu_device *adev, int crtc) ...@@ -100,13 +100,16 @@ static u32 dm_vblank_get_counter(struct amdgpu_device *adev, int crtc)
return 0; return 0;
else { else {
struct amdgpu_crtc *acrtc = adev->mode_info.crtcs[crtc]; struct amdgpu_crtc *acrtc = adev->mode_info.crtcs[crtc];
struct dm_crtc_state *acrtc_state = to_dm_crtc_state(
acrtc->base.state);
if (NULL == acrtc->stream) {
if (acrtc_state->stream == NULL) {
DRM_ERROR("dc_stream is NULL for crtc '%d'!\n", crtc); DRM_ERROR("dc_stream is NULL for crtc '%d'!\n", crtc);
return 0; return 0;
} }
return dc_stream_get_vblank_counter(acrtc->stream); return dc_stream_get_vblank_counter(acrtc_state->stream);
} }
} }
...@@ -119,8 +122,10 @@ static int dm_crtc_get_scanoutpos(struct amdgpu_device *adev, int crtc, ...@@ -119,8 +122,10 @@ static int dm_crtc_get_scanoutpos(struct amdgpu_device *adev, int crtc,
return -EINVAL; return -EINVAL;
else { else {
struct amdgpu_crtc *acrtc = adev->mode_info.crtcs[crtc]; struct amdgpu_crtc *acrtc = adev->mode_info.crtcs[crtc];
struct dm_crtc_state *acrtc_state = to_dm_crtc_state(
acrtc->base.state);
if (NULL == acrtc->stream) { if (acrtc_state->stream == NULL) {
DRM_ERROR("dc_stream is NULL for crtc '%d'!\n", crtc); DRM_ERROR("dc_stream is NULL for crtc '%d'!\n", crtc);
return 0; return 0;
} }
...@@ -129,7 +134,7 @@ static int dm_crtc_get_scanoutpos(struct amdgpu_device *adev, int crtc, ...@@ -129,7 +134,7 @@ static int dm_crtc_get_scanoutpos(struct amdgpu_device *adev, int crtc,
* TODO rework base driver to use values directly. * TODO rework base driver to use values directly.
* for now parse it back into reg-format * for now parse it back into reg-format
*/ */
dc_stream_get_scanoutpos(acrtc->stream, dc_stream_get_scanoutpos(acrtc_state->stream,
&v_blank_start, &v_blank_start,
&v_blank_end, &v_blank_end,
&h_position, &h_position,
...@@ -652,22 +657,12 @@ dm_atomic_state_alloc(struct drm_device *dev) ...@@ -652,22 +657,12 @@ dm_atomic_state_alloc(struct drm_device *dev)
void dm_atomic_state_clear(struct drm_atomic_state *state) void dm_atomic_state_clear(struct drm_atomic_state *state)
{ {
struct dm_atomic_state *dm_state = to_dm_atomic_state(state); struct dm_atomic_state *dm_state = to_dm_atomic_state(state);
int i, j;
for (i = 0; i < dm_state->set_count; i++) {
for (j = 0; j < dm_state->set[i].surface_count; j++) {
dc_surface_release(dm_state->set[i].surfaces[j]);
dm_state->set[i].surfaces[j] = NULL;
}
dc_stream_release(dm_state->set[i].stream); if (dm_state->context) {
dm_state->set[i].stream = NULL; dc_resource_validate_ctx_destruct(dm_state->context);
dm_free(dm_state->context);
dm_state->context = NULL;
} }
dm_state->set_count = 0;
dc_resource_validate_ctx_destruct(dm_state->context);
dm_free(dm_state->context);
dm_state->context = NULL;
drm_atomic_state_default_clear(state); drm_atomic_state_default_clear(state);
} }
...@@ -676,7 +671,7 @@ static const struct drm_mode_config_funcs amdgpu_dm_mode_funcs = { ...@@ -676,7 +671,7 @@ static const struct drm_mode_config_funcs amdgpu_dm_mode_funcs = {
.fb_create = amdgpu_user_framebuffer_create, .fb_create = amdgpu_user_framebuffer_create,
.output_poll_changed = amdgpu_output_poll_changed, .output_poll_changed = amdgpu_output_poll_changed,
.atomic_check = amdgpu_dm_atomic_check, .atomic_check = amdgpu_dm_atomic_check,
.atomic_commit = drm_atomic_helper_commit, .atomic_commit = amdgpu_dm_atomic_commit,
.atomic_state_alloc = dm_atomic_state_alloc, .atomic_state_alloc = dm_atomic_state_alloc,
.atomic_state_clear = dm_atomic_state_clear, .atomic_state_clear = dm_atomic_state_clear,
}; };
......
...@@ -45,7 +45,7 @@ struct dm_plane_state { ...@@ -45,7 +45,7 @@ struct dm_plane_state {
struct dm_crtc_state { struct dm_crtc_state {
struct drm_crtc_state base; struct drm_crtc_state base;
struct dc_stream *dc_stream; const struct dc_stream *stream;
}; };
#define to_dm_crtc_state(x) container_of(x, struct dm_crtc_state, base) #define to_dm_crtc_state(x) container_of(x, struct dm_crtc_state, base)
...@@ -53,8 +53,6 @@ struct dm_crtc_state { ...@@ -53,8 +53,6 @@ struct dm_crtc_state {
struct dm_atomic_state { struct dm_atomic_state {
struct drm_atomic_state base; struct drm_atomic_state base;
struct dc_validation_set set[MAX_STREAMS];
int set_count;
struct validate_context *context; struct validate_context *context;
}; };
...@@ -83,6 +81,11 @@ void amdgpu_dm_encoder_destroy(struct drm_encoder *encoder); ...@@ -83,6 +81,11 @@ void amdgpu_dm_encoder_destroy(struct drm_encoder *encoder);
int amdgpu_dm_connector_get_modes(struct drm_connector *connector); int amdgpu_dm_connector_get_modes(struct drm_connector *connector);
int amdgpu_dm_atomic_commit(
struct drm_device *dev,
struct drm_atomic_state *state,
bool nonblock);
void amdgpu_dm_atomic_commit_tail( void amdgpu_dm_atomic_commit_tail(
struct drm_atomic_state *state); struct drm_atomic_state *state);
......
...@@ -481,8 +481,6 @@ struct dc_stream { ...@@ -481,8 +481,6 @@ struct dc_stream {
/* TODO: ABM info (DMCU) */ /* TODO: ABM info (DMCU) */
/* TODO: PSR info */ /* TODO: PSR info */
/* TODO: CEA VIC */ /* TODO: CEA VIC */
void *priv;
}; };
struct dc_stream_update { struct dc_stream_update {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment