|
@@ -4009,6 +4009,19 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * amdgpu_dm_crtc_copy_transient_flags - copy mirrored flags from DRM to DC
|
|
|
+ * @crtc_state: the DRM CRTC state
|
|
|
+ * @stream_state: the DC stream state.
|
|
|
+ *
|
|
|
+ * Copy the mirrored transient state flags from DRM, to DC. It is used to bring
|
|
|
+ * a dc_stream_state's flags in sync with a drm_crtc_state's flags.
|
|
|
+ */
|
|
|
+static void amdgpu_dm_crtc_copy_transient_flags(struct drm_crtc_state *crtc_state,
|
|
|
+ struct dc_stream_state *stream_state)
|
|
|
+{
|
|
|
+ stream_state->mode_changed = crtc_state->mode_changed;
|
|
|
+}
|
|
|
|
|
|
static int amdgpu_dm_atomic_commit(struct drm_device *dev,
|
|
|
struct drm_atomic_state *state,
|
|
@@ -4079,6 +4092,12 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state)
|
|
|
new_crtc_state->active_changed,
|
|
|
new_crtc_state->connectors_changed);
|
|
|
|
|
|
+ /* Copy all transient state flags into dc state */
|
|
|
+ if (dm_new_crtc_state->stream) {
|
|
|
+ amdgpu_dm_crtc_copy_transient_flags(&dm_new_crtc_state->base,
|
|
|
+ dm_new_crtc_state->stream);
|
|
|
+ }
|
|
|
+
|
|
|
/* handles headless hotplug case, updating new_state and
|
|
|
* aconnector as needed
|
|
|
*/
|
|
@@ -4563,6 +4582,7 @@ static int dm_update_crtcs_state(struct dc *dc,
|
|
|
WARN_ON(dm_new_crtc_state->stream);
|
|
|
|
|
|
dm_new_crtc_state->stream = new_stream;
|
|
|
+
|
|
|
dc_stream_retain(new_stream);
|
|
|
|
|
|
DRM_DEBUG_DRIVER("Enabling DRM crtc: %d\n",
|