提交 012cface 编写于 作者: D Dave Airlie

Merge branch 'drm-fixes-4.17' of git://people.freedesktop.org/~agd5f/linux into drm-fixes

Two last minute DC fixes for 4.17.  A fix for underscan on fiji and
a fix for gamma settings getting after dpms.

* 'drm-fixes-4.17' of git://people.freedesktop.org/~agd5f/linux:
  drm/amd/display: Update color props when modeset is required
  drm/amd/display: Make atomic-check validate underscan changes
...@@ -4555,8 +4555,8 @@ static int dm_update_crtcs_state(struct dc *dc, ...@@ -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) { for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) {
struct amdgpu_crtc *acrtc = NULL; struct amdgpu_crtc *acrtc = NULL;
struct amdgpu_dm_connector *aconnector = NULL; struct amdgpu_dm_connector *aconnector = NULL;
struct drm_connector_state *new_con_state = NULL; struct drm_connector_state *drm_new_conn_state = NULL, *drm_old_conn_state = NULL;
struct dm_connector_state *dm_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; struct drm_plane_state *new_plane_state = NULL;
new_stream = NULL; new_stream = NULL;
...@@ -4577,19 +4577,23 @@ static int dm_update_crtcs_state(struct dc *dc, ...@@ -4577,19 +4577,23 @@ static int dm_update_crtcs_state(struct dc *dc,
/* TODO This hack should go away */ /* TODO This hack should go away */
if (aconnector && enable) { if (aconnector && enable) {
// Make sure fake sink is created in plug-in scenario // 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); &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; 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_stream = create_stream_for_sink(aconnector,
&new_crtc_state->mode, &new_crtc_state->mode,
dm_conn_state); dm_new_conn_state);
/* /*
* we can have no stream on ACTION_SET if a display * we can have no stream on ACTION_SET if a display
...@@ -4708,8 +4712,17 @@ static int dm_update_crtcs_state(struct dc *dc, ...@@ -4708,8 +4712,17 @@ static int dm_update_crtcs_state(struct dc *dc,
*/ */
BUG_ON(dm_new_crtc_state->stream == NULL); BUG_ON(dm_new_crtc_state->stream == NULL);
/* Color managment settings */ /* Scaling or underscan settings */
if (dm_new_crtc_state->base.color_mgmt_changed) { 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 management settings. We also update color properties
* when a modeset is needed, to ensure it gets reprogrammed.
*/
if (dm_new_crtc_state->base.color_mgmt_changed ||
drm_atomic_crtc_needs_modeset(new_crtc_state)) {
ret = amdgpu_dm_set_regamma_lut(dm_new_crtc_state); ret = amdgpu_dm_set_regamma_lut(dm_new_crtc_state);
if (ret) if (ret)
goto fail; goto fail;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册