drm/atomic: check mode_changed *after* atomic_check
Subsystems (2)
PATCH 1/2 drm/atomic: check mode_changed *after* atomic_check
The intention is that drivers can set crtc_state->mode_changed in their atomic_check() fxns if they encounter a scenario that requires full modeset.
--- drivers/gpu/drm/drm_atomic_helper.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
drivers/gpu/drm/drm_atomic_helper.c +5 -5
@@ -332,7 +332,7 @@ mode_fixup(struct drm_atomic_state *state) }static int -drm_atomic_helper_check_prepare (struct drm_device *dev, +drm_atomic_helper_check_modeset (struct drm_device *dev,struct drm_atomic_state *state) {int ncrtcs = dev->mode_config.num_crtc;
@@ -430,10 +430,6 @@ int drm_atomic_helper_check(struct drm_device *dev,int ncrtcs = dev->mode_config.num_crtc;int i, ret =0 ; - ret =drm_atomic_helper_check_prepare (dev, state); -if (ret) -return ret; -for (i =0 ; i < nplanes; i++) {struct drm_plane_helper_funcs *funcs;struct drm_plane *plane = state->planes[i];
@@ -477,6 +473,10 @@ int drm_atomic_helper_check(struct drm_device *dev, } } + ret =drm_atomic_helper_check_modeset (dev, state); +if (ret) +return ret; +return ret; }EXPORT_SYMBOL (drm_atomic_helper_check);
Signature · 6 lines
1.9.3 _______________________________________________ dri-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/dri-devel
PATCH 2/2 drm/atomic: shutdown *current* encoder
In disable_outputs() we need to shut down the outgoing encoder, not the incoming one (we have already swapped-state at this point). Without this, we end up telling the driver to crtc->dpms(OFF) without first encoder->dpms(OFF), and that makes some hw quite unhappy.
--- drivers/gpu/drm/drm_atomic_helper.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/drm_atomic_helper.c +1 -1
@@ -502,7 +502,7 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)if (!old_conn_state || !old_conn_state->crtc)continue ; - encoder = connector->state->best_encoder; + encoder = old_conn_state->best_encoder;if (!encoder)continue ;
Signature · 6 lines
1.9.3 _______________________________________________ dri-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH 2/2] drm/atomic: shutdown *current* encoder
Quoted 16 lines · Rob Clark
In
disable_outputs()we need to shut down the outgoing encoder, not the incoming one (we have already swapped-state at this point). Without this, we end up telling the driver tocrtc->dpms(OFF)without firstencoder->dpms(OFF), and that makes some hw quite unhappy.Reviewed-by Daniel Vetter <[email protected]>Signed-off-by Rob Clark <[email protected]>--- drivers/gpu/drm/drm_atomic_helper.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/gpu/drm/drm_atomic_helper.c +0
-0
drivers/gpu/drm/drm_atomic_helper.c disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state) · line 507
Quoted 7 lines
drivers/gpu/drm/drm_atomic_helper.c +1
-1@@ -502,7 +502,7 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)if (!old_conn_state || !old_conn_state->crtc)continue ; - encoder = connector->state->best_encoder; + encoder = old_conn_state->best_encoder;if (!encoder)
I wanted a if (WARN_ON(!encoder)) here for my r-b, since this really shouldn't ever happen. And these kinds of cross-checks tend to be useful ime.
-Daniel
Quoted 4 lines
drivers/gpu/drm/drm_atomic_helper.c +0
-0continue ;Signature · 1 line
1.9.3
Signature · 7 lines
Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch _______________________________________________ dri-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH 2/2] drm/atomic: shutdown *current* encoder
In reply to Rob ClarkQuoted 5 lines · Rob Clark
In
disable_outputs()we need to shut down the outgoing encoder, not the incoming one (we have already swapped-state at this point). Without this, we end up telling the driver tocrtc->dpms(OFF)without firstencoder->dpms(OFF), and that makes some hw quite unhappy.
bleh, missed a hunk that added a WARN_ON().. will resend this
Quoted 20 lines
Reviewed-by Daniel Vetter <[email protected]>Signed-off-by Rob Clark <[email protected]>--- drivers/gpu/drm/drm_atomic_helper.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/gpu/drm/drm_atomic_helper.c +1
-2@@ -502,7 +502,7 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)if (!old_conn_state || !old_conn_state->crtc)continue ; - encoder = connector->state->best_encoder; + encoder = old_conn_state->best_encoder;if (!encoder)continue ; --
Quoted 2 lines
1.9.3
_______________________________________________
dri-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/dri-devel
PATCH 1/1 drm/atomic: shutdown *current* encoder
In reply to Rob ClarkIn disable_outputs() we need to shut down the outgoing encoder, not the incoming one (we have already swapped-state at this point). Without this, we end up telling the driver to crtc->dpms(OFF) without first encoder->dpms(OFF), and that makes some hw quite unhappy.
v2: missing WARN_ON() hunk and comment
--- drivers/gpu/drm/drm_atomic_helper.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/gpu/drm/drm_atomic_helper.c +5 -2
@@ -502,9 +502,12 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)if (!old_conn_state || !old_conn_state->crtc)continue ; - encoder = connector->state->best_encoder; + encoder = old_conn_state->best_encoder; -if (!encoder) +/* We shouldn't get this far if we didn't previously have +* an encoder.. but WARN_ON() rather than explode. +*/ +if (WARN_ON (!encoder))continue ; funcs = encoder->helper_private;
Signature · 6 lines
1.9.3 _______________________________________________ dri-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/dri-devel
Quoted 5 lines · Rob Clark
The intention is that drivers can set
crtc_state->mode_changedin theiratomic_check()fxns if they encounter a scenario that requires full modeset.Signed-off-by Rob Clark <[email protected]>
Quoted 42 lines
--- drivers/gpu/drm/drm_atomic_helper.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)drivers/gpu/drm/drm_atomic_helper.c +5
-5@@ -332,7 +332,7 @@ mode_fixup(struct drm_atomic_state *state) }static int -drm_atomic_helper_check_prepare (struct drm_device *dev, +drm_atomic_helper_check_modeset (struct drm_device *dev,struct drm_atomic_state *state) {int ncrtcs = dev->mode_config.num_crtc;@@ -430,10 +430,6 @@ int drm_atomic_helper_check(struct drm_device *dev,int ncrtcs = dev->mode_config.num_crtc;int i, ret =0 ; - ret =drm_atomic_helper_check_prepare (dev, state); -if (ret) -return ret; -for (i =0 ; i < nplanes; i++) {struct drm_plane_helper_funcs *funcs;struct drm_plane *plane = state->planes[i];@@ -477,6 +473,10 @@ int drm_atomic_helper_check(struct drm_device *dev, } } + ret =drm_atomic_helper_check_modeset (dev, state); +if (ret) +return ret; +return ret; }EXPORT_SYMBOL (drm_atomic_helper_check);Signature · 1 line
1.9.3
Signature · 7 lines
Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch _______________________________________________ dri-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/dri-devel