As pointed out by Simona, the drm_atomic_helper_check_modeset() and drm_atomic_helper_check() require the former function is rerun if the driver's callbacks modify crtc_state->mode_changed. MSM is one of the drivers which failed to follow this requirement. As suggested by Simona, implement generic code to verify that the drivers abide to those requirement and rework MSM driver to follow that restrictions. There are no dependencies between core and MSM parts, so they can go separately via corresponding trees. Reported-by: Simona Vetter <simona.vetter@xxxxxxxx> Link: https://lore.kernel.org/dri-devel/ZtW_S0j5AEr4g0QW@phenom.ffwll.local/ Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxx> --- Dmitry Baryshkov (6): drm/atomic-helper: document drm_atomic_helper_check() restrictions drm/atomic: prepare to check that drivers follow restrictions for needs_modeset drm/msm/dpu: don't use active in atomic_check() drm/msm/dpu: move needs_cdm setting to dpu_encoder_get_topology() drm/msm/dpu: simplify dpu_encoder_get_topology() interface drm/msm/dpu: don't set crtc_state->mode_changed from atomic_check() drivers/gpu/drm/drm_atomic.c | 3 + drivers/gpu/drm/drm_atomic_helper.c | 86 ++++++++++++++++++++++++++--- drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 4 -- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 82 +++++++++++++++++---------- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h | 4 ++ drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 26 +++++++++ drivers/gpu/drm/msm/msm_atomic.c | 13 ++++- drivers/gpu/drm/msm/msm_kms.h | 7 +++ include/drm/drm_atomic.h | 10 ++++ 9 files changed, 192 insertions(+), 43 deletions(-) --- base-commit: b72747fdde637ebf52e181671bf6f41cd773b3e1 change-id: 20241222-drm-dirty-modeset-88079bd27ae6 Best regards, -- Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxx>