Hi Rob, Missatge de Rob Clark <robdclark@xxxxxxxxx> del dia dl., 4 de nov. 2019 a les 18:42: > > From: Rob Clark <robdclark@xxxxxxxxxxxx> > > The new state should not be accessed after this point. Clear the > pointers to make that explicit. > > Signed-off-by: Rob Clark <robdclark@xxxxxxxxxxxx> While looking to another issue I applied this patch on top of 5.4-rc7 and my display stopped working. The system gets stuck with the messages below ... [ 17.558689] rockchip-vop ff8f0000.vop: Adding to iommu group 1 [ 17.566014] rk3399-gru-sound sound: ASoC: failed to init link DP: -517 [ 17.567618] rockchip-vop ff900000.vop: Adding to iommu group 2 [ 17.580671] rk3399-gru-sound sound: ASoC: failed to init link DP: -517 [ 17.585996] rockchip-drm display-subsystem: bound ff8f0000.vop (ops vop_component_ops [rockchipdrm]) [ 17.589294] rk3399-gru-sound sound: ASoC: failed to init link DP: -517 [ 17.599899] rockchip-drm display-subsystem: bound ff900000.vop (ops vop_component_ops [rockchipdrm]) [ 17.615846] rockchip-dp ff970000.edp: no DP phy configured [ 17.622495] rockchip-drm display-subsystem: bound ff970000.edp (ops rockchip_dp_component_ops [rockchipdrm]) [ 17.633688] rockchip-drm display-subsystem: bound fec00000.dp (ops cdn_dp_component_ops [rockchipdrm]) [ 17.644141] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013). [ 17.651548] [drm] No driver support for vblank timestamp query. Not really useful information at this point, but I am wondering if could be that the rockchip driver is doing something wrong more than this patch is wrong? Thanks, Enric > --- > drivers/gpu/drm/drm_atomic_helper.c | 30 +++++++++++++++++++++++++++++ > 1 file changed, 30 insertions(+) > > diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c > index 648494c813e5..aec9759d9df2 100644 > --- a/drivers/gpu/drm/drm_atomic_helper.c > +++ b/drivers/gpu/drm/drm_atomic_helper.c > @@ -2246,12 +2246,42 @@ EXPORT_SYMBOL(drm_atomic_helper_fake_vblank); > */ > void drm_atomic_helper_commit_hw_done(struct drm_atomic_state *old_state) > { > + struct drm_connector *connector; > + struct drm_connector_state *old_conn_state, *new_conn_state; > struct drm_crtc *crtc; > struct drm_crtc_state *old_crtc_state, *new_crtc_state; > + struct drm_plane *plane; > + struct drm_plane_state *old_plane_state, *new_plane_state; > struct drm_crtc_commit *commit; > + struct drm_private_obj *obj; > + struct drm_private_state *old_obj_state, *new_obj_state; > int i; > > + /* > + * After this point, drivers should not access the permanent modeset > + * state, so we also clear the new_state pointers to make this > + * restriction explicit. > + * > + * For the CRTC state, we do this in the same loop where we signal > + * hw_done, since we still need to new_crtc_state to fish out the > + * commit. > + */ > + > + for_each_oldnew_connector_in_state(old_state, connector, old_conn_state, new_conn_state, i) { > + old_state->connectors[i].new_state = NULL; > + } > + > + for_each_oldnew_plane_in_state(old_state, plane, old_plane_state, new_plane_state, i) { > + old_state->planes[i].new_state = NULL; > + } > + > + for_each_oldnew_private_obj_in_state(old_state, obj, old_obj_state, new_obj_state, i) { > + old_state->private_objs[i].new_state = NULL; > + } > + > for_each_oldnew_crtc_in_state(old_state, crtc, old_crtc_state, new_crtc_state, i) { > + old_state->crtcs[i].new_state = NULL; > + > commit = new_crtc_state->commit; > if (!commit) > continue; > -- > 2.23.0 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel