Message ID | 20250108172417.160831-1-simona.vetter@ffwll.ch (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | drm/atomic: clarify the rules around drm_atomic_state->allow_modeset | expand |
On Wed, Jan 08, 2025 at 06:24:16PM +0100, Simona Vetter wrote: > msm is automagically upgrading normal commits to full modesets, and > that's a big no-no: > > - for one this results in full on->off->on transitions on all these > crtc, at least if you're using the usual helpers. Which seems to be > the case, and is breaking uapi > > - further even if the ctm change itself would not result in flicker, > this can hide modesets for other reasons. Which again breaks the > uapi > > v2: I forgot the case of adding unrelated crtc state. Add that case > and link to the existing kerneldoc explainers. This has come up in an > irc discussion with Manasi and Ville about intel's bigjoiner mode. > Also cc everyone involved in the msm irc discussion, more people > joined after I sent out v1. > > v3: Wording polish from Pekka and Thomas > > Acked-by: Pekka Paalanen <pekka.paalanen@collabora.com> > Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> > Cc: Maxime Ripard <mripard@kernel.org> > Cc: Thomas Zimmermann <tzimmermann@suse.de> > Cc: David Airlie <airlied@gmail.com> > Cc: Daniel Vetter <daniel@ffwll.ch> > Cc: Pekka Paalanen <pekka.paalanen@collabora.com> > Cc: Rob Clark <robdclark@gmail.com> > Cc: Simon Ser <contact@emersion.fr> > Cc: Manasi Navare <navaremanasi@google.com> > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> > Cc: Abhinav Kumar <quic_abhinavk@quicinc.com> > Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> > Signed-off-by: Simona Vetter <simona.vetter@intel.com> > Signed-off-by: Simona Vetter <simona.vetter@ffwll.ch> > --- > include/drm/drm_atomic.h | 23 +++++++++++++++++++++-- > 1 file changed, 21 insertions(+), 2 deletions(-) > Acked-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
diff --git a/include/drm/drm_atomic.h b/include/drm/drm_atomic.h index 31ca88deb10d..1ded9a8d4e84 100644 --- a/include/drm/drm_atomic.h +++ b/include/drm/drm_atomic.h @@ -376,8 +376,27 @@ struct drm_atomic_state { * * Allow full modeset. This is used by the ATOMIC IOCTL handler to * implement the DRM_MODE_ATOMIC_ALLOW_MODESET flag. Drivers should - * never consult this flag, instead looking at the output of - * drm_atomic_crtc_needs_modeset(). + * generally not consult this flag, but instead look at the output of + * drm_atomic_crtc_needs_modeset(). The detailed rules are: + * + * - Drivers must not consult @allow_modeset in the atomic commit path. + * Use drm_atomic_crtc_needs_modeset() instead. + * + * - Drivers must consult @allow_modeset before adding unrelated struct + * drm_crtc_state to this commit by calling + * drm_atomic_get_crtc_state(). See also the warning in the + * documentation for that function. + * + * - Drivers must never change this flag, it is under the exclusive + * control of userspace. + * + * - Drivers may consult @allow_modeset in the atomic check path, if + * they have the choice between an optimal hardware configuration + * which requires a modeset, and a less optimal configuration which + * can be committed without a modeset. An example would be suboptimal + * scanout FIFO allocation resulting in increased idle power + * consumption. This allows userspace to avoid flickering and delays + * for the normal composition loop at reasonable cost. */ bool allow_modeset : 1; /**