linux-doc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] drm/doc: Define KMS atomic state set
@ 2023-11-30 20:07 André Almeida
  2023-12-01  1:07 ` Bagas Sanjaya
                   ` (3 more replies)
  0 siblings, 4 replies; 17+ messages in thread
From: André Almeida @ 2023-11-30 20:07 UTC (permalink / raw)
  To: dri-devel, linux-kernel
  Cc: kernel-dev, alexander.deucher, christian.koenig, Simon Ser,
	Rob Clark, Pekka Paalanen, daniel, Daniel Stone,
	'Marek Olšák', Dave Airlie, Michel Dänzer,
	Randy Dunlap, Jonathan Corbet, linux-doc, Thomas Zimmermann,
	Maxime Ripard, Maarten Lankhorst, Pekka Paalanen,
	André Almeida

From: Pekka Paalanen <pekka.paalanen@collabora.com>

Specify how the atomic state is maintained between userspace and
kernel, plus the special case for async flips.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
Signed-off-by: André Almeida <andrealmeid@igalia.com>
---

This is a standalone patch from the following serie, the other patches are
already merged:
https://lore.kernel.org/lkml/20231122161941.320564-1-andrealmeid@igalia.com/

 Documentation/gpu/drm-uapi.rst | 47 ++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

diff --git a/Documentation/gpu/drm-uapi.rst b/Documentation/gpu/drm-uapi.rst
index 370d820be248..d0693f902a5c 100644
--- a/Documentation/gpu/drm-uapi.rst
+++ b/Documentation/gpu/drm-uapi.rst
@@ -570,3 +570,50 @@ dma-buf interoperability
 
 Please see Documentation/userspace-api/dma-buf-alloc-exchange.rst for
 information on how dma-buf is integrated and exposed within DRM.
+
+KMS atomic state
+================
+
+An atomic commit can change multiple KMS properties in an atomic fashion,
+without ever applying intermediate or partial state changes.  Either the whole
+commit succeeds or fails, and it will never be applied partially. This is the
+fundamental improvement of the atomic API over the older non-atomic API which is
+referred to as the "legacy API".  Applying intermediate state could unexpectedly
+fail, cause visible glitches, or delay reaching the final state.
+
+An atomic commit can be flagged with DRM_MODE_ATOMIC_TEST_ONLY, which means the
+complete state change is validated but not applied.  Userspace should use this
+flag to validate any state change before asking to apply it. If validation fails
+for any reason, userspace should attempt to fall back to another, perhaps
+simpler, final state.  This allows userspace to probe for various configurations
+without causing visible glitches on screen and without the need to undo a
+probing change.
+
+The changes recorded in an atomic commit apply on top the current KMS state in
+the kernel. Hence, the complete new KMS state is the complete old KMS state with
+the committed property settings done on top. The kernel will try to avoid
+no-operation changes, so it is safe for userspace to send redundant property
+settings.  However, not every situation allows for no-op changes, due to the
+need to acquire locks for some attributes. Userspace needs to be aware that some
+redundant information might result in oversynchronization issues.  No-operation
+changes do not count towards actually needed changes, e.g.  setting MODE_ID to a
+different blob with identical contents as the current KMS state shall not be a
+modeset on its own. As a special exception for VRR needs, explicitly setting
+FB_ID to its current value is not a no-op.
+
+A "modeset" is a change in KMS state that might enable, disable, or temporarily
+disrupt the emitted video signal, possibly causing visible glitches on screen. A
+modeset may also take considerably more time to complete than other kinds of
+changes, and the video sink might also need time to adapt to the new signal
+properties. Therefore a modeset must be explicitly allowed with the flag
+DRM_MODE_ATOMIC_ALLOW_MODESET.  This in combination with
+DRM_MODE_ATOMIC_TEST_ONLY allows userspace to determine if a state change is
+likely to cause visible disruption on screen and avoid such changes when end
+users do not expect them.
+
+An atomic commit with the flag DRM_MODE_PAGE_FLIP_ASYNC is allowed to
+effectively change only the FB_ID property on any planes. No-operation changes
+are ignored as always. Changing any other property will cause the commit to be
+rejected. Each driver may relax this restriction if they have guarantees that
+such property change doesn't cause modesets. Userspace can use TEST_ONLY commits
+to query the driver about this.
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2023-12-05  8:36 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-30 20:07 [PATCH] drm/doc: Define KMS atomic state set André Almeida
2023-12-01  1:07 ` Bagas Sanjaya
2023-12-01  8:29 ` Maxime Ripard
2023-12-01  9:06   ` Pekka Paalanen
2023-12-01  9:25     ` Maxime Ripard
2023-12-01 10:06       ` Pekka Paalanen
2023-12-01 13:20         ` Maxime Ripard
2023-12-01 16:03           ` Pekka Paalanen
2023-12-04  9:21             ` Maxime Ripard
2023-12-05  8:35               ` Pekka Paalanen
2023-12-01  9:31 ` Simon Ser
2023-12-01  9:57   ` Pekka Paalanen
2023-12-01 10:25     ` Simon Ser
2023-12-01 15:00 ` Ville Syrjälä
2023-12-01 16:16   ` Pekka Paalanen
2023-12-01 18:09     ` Ville Syrjälä
2023-12-04 12:20       ` Maxime Ripard

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).