mirror of https://gitee.com/openkylin/linux.git
drm/amd/display: Make atomic-check validate underscan changes
When the underscan state was changed, atomic-check was triggering a validation but passing the old underscan values. This change adds a somewhat hacky check in dm_update_crtcs_state that will update the stream if old and newunderscan values are different. This was causing 4k on Fiji to allow underscan when it wasn't permitted. Signed-off-by: David Francis <David.Francis@amd.com> Reviewed-by: David Francis <David.Francis@amd.com> Acked-by: Harry Wentland <harry.wentland@amd.com> Cc: stable@vger.kernel.org Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
0e333751cf
commit
a9e8d27574
|
@ -4555,8 +4555,8 @@ static int dm_update_crtcs_state(struct dc *dc,
|
|||
for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) {
|
||||
struct amdgpu_crtc *acrtc = NULL;
|
||||
struct amdgpu_dm_connector *aconnector = NULL;
|
||||
struct drm_connector_state *new_con_state = NULL;
|
||||
struct dm_connector_state *dm_conn_state = NULL;
|
||||
struct drm_connector_state *drm_new_conn_state = NULL, *drm_old_conn_state = NULL;
|
||||
struct dm_connector_state *dm_new_conn_state = NULL, *dm_old_conn_state = NULL;
|
||||
struct drm_plane_state *new_plane_state = NULL;
|
||||
|
||||
new_stream = NULL;
|
||||
|
@ -4577,19 +4577,23 @@ static int dm_update_crtcs_state(struct dc *dc,
|
|||
/* TODO This hack should go away */
|
||||
if (aconnector && enable) {
|
||||
// Make sure fake sink is created in plug-in scenario
|
||||
new_con_state = drm_atomic_get_connector_state(state,
|
||||
drm_new_conn_state = drm_atomic_get_new_connector_state(state,
|
||||
&aconnector->base);
|
||||
drm_old_conn_state = drm_atomic_get_old_connector_state(state,
|
||||
&aconnector->base);
|
||||
|
||||
if (IS_ERR(new_con_state)) {
|
||||
ret = PTR_ERR_OR_ZERO(new_con_state);
|
||||
|
||||
if (IS_ERR(drm_new_conn_state)) {
|
||||
ret = PTR_ERR_OR_ZERO(drm_new_conn_state);
|
||||
break;
|
||||
}
|
||||
|
||||
dm_conn_state = to_dm_connector_state(new_con_state);
|
||||
dm_new_conn_state = to_dm_connector_state(drm_new_conn_state);
|
||||
dm_old_conn_state = to_dm_connector_state(drm_old_conn_state);
|
||||
|
||||
new_stream = create_stream_for_sink(aconnector,
|
||||
&new_crtc_state->mode,
|
||||
dm_conn_state);
|
||||
dm_new_conn_state);
|
||||
|
||||
/*
|
||||
* we can have no stream on ACTION_SET if a display
|
||||
|
@ -4708,6 +4712,11 @@ static int dm_update_crtcs_state(struct dc *dc,
|
|||
*/
|
||||
BUG_ON(dm_new_crtc_state->stream == NULL);
|
||||
|
||||
/* Scaling or underscan settings */
|
||||
if (is_scaling_state_different(dm_old_conn_state, dm_new_conn_state))
|
||||
update_stream_scaling_settings(
|
||||
&new_crtc_state->mode, dm_new_conn_state, dm_new_crtc_state->stream);
|
||||
|
||||
/* Color managment settings */
|
||||
if (dm_new_crtc_state->base.color_mgmt_changed) {
|
||||
ret = amdgpu_dm_set_regamma_lut(dm_new_crtc_state);
|
||||
|
|
Loading…
Reference in New Issue