^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) =========================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) Kernel Mode Setting (KMS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) =========================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) Drivers must initialize the mode setting core by calling
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) drmm_mode_config_init() on the DRM device. The function
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) initializes the :c:type:`struct drm_device <drm_device>`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) mode_config field and never fails. Once done, mode configuration must
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) be setup by initializing the following fields.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) - int min_width, min_height; int max_width, max_height;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) Minimum and maximum width and height of the frame buffers in pixel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) units.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) - struct drm_mode_config_funcs \*funcs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) Mode setting functions.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) Overview
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) ========
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) .. kernel-render:: DOT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) :alt: KMS Display Pipeline
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) :caption: KMS Display Pipeline Overview
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) digraph "KMS" {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) node [shape=box]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) subgraph cluster_static {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) style=dashed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) label="Static Objects"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) node [bgcolor=grey style=filled]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) "drm_plane A" -> "drm_crtc"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) "drm_plane B" -> "drm_crtc"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) "drm_crtc" -> "drm_encoder A"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) "drm_crtc" -> "drm_encoder B"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) subgraph cluster_user_created {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) style=dashed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) label="Userspace-Created"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) node [shape=oval]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) "drm_framebuffer 1" -> "drm_plane A"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) "drm_framebuffer 2" -> "drm_plane B"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) subgraph cluster_connector {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) style=dashed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) label="Hotpluggable"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) "drm_encoder A" -> "drm_connector A"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) "drm_encoder B" -> "drm_connector B"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) The basic object structure KMS presents to userspace is fairly simple.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) Framebuffers (represented by :c:type:`struct drm_framebuffer <drm_framebuffer>`,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) see `Frame Buffer Abstraction`_) feed into planes. Planes are represented by
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) :c:type:`struct drm_plane <drm_plane>`, see `Plane Abstraction`_ for more
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) details. One or more (or even no) planes feed their pixel data into a CRTC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) (represented by :c:type:`struct drm_crtc <drm_crtc>`, see `CRTC Abstraction`_)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) for blending. The precise blending step is explained in more detail in `Plane
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) Composition Properties`_ and related chapters.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) For the output routing the first step is encoders (represented by
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) :c:type:`struct drm_encoder <drm_encoder>`, see `Encoder Abstraction`_). Those
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) are really just internal artifacts of the helper libraries used to implement KMS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) drivers. Besides that they make it unecessarily more complicated for userspace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) to figure out which connections between a CRTC and a connector are possible, and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) what kind of cloning is supported, they serve no purpose in the userspace API.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) Unfortunately encoders have been exposed to userspace, hence can't remove them
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) at this point. Futhermore the exposed restrictions are often wrongly set by
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) drivers, and in many cases not powerful enough to express the real restrictions.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) A CRTC can be connected to multiple encoders, and for an active CRTC there must
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) be at least one encoder.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) The final, and real, endpoint in the display chain is the connector (represented
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) by :c:type:`struct drm_connector <drm_connector>`, see `Connector
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) Abstraction`_). Connectors can have different possible encoders, but the kernel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) driver selects which encoder to use for each connector. The use case is DVI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) which could switch between an analog and a digital encoder. Encoders can also
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) drive multiple different connectors. There is exactly one active connector for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) every active encoder.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) Internally the output pipeline is a bit more complex and matches today's
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) hardware more closely:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) .. kernel-render:: DOT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) :alt: KMS Output Pipeline
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) :caption: KMS Output Pipeline
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) digraph "Output Pipeline" {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) node [shape=box]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) subgraph {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) "drm_crtc" [bgcolor=grey style=filled]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) subgraph cluster_internal {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) style=dashed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) label="Internal Pipeline"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) node [bgcolor=grey style=filled]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) "drm_encoder A";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) "drm_encoder B";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) "drm_encoder C";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) node [bgcolor=grey style=filled]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) "drm_encoder B" -> "drm_bridge B"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) "drm_encoder C" -> "drm_bridge C1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) "drm_bridge C1" -> "drm_bridge C2";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) "drm_crtc" -> "drm_encoder A"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) "drm_crtc" -> "drm_encoder B"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) "drm_crtc" -> "drm_encoder C"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) subgraph cluster_output {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) style=dashed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) label="Outputs"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) "drm_encoder A" -> "drm_connector A";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) "drm_bridge B" -> "drm_connector B";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) "drm_bridge C2" -> "drm_connector C";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) "drm_panel"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) Internally two additional helper objects come into play. First, to be able to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) share code for encoders (sometimes on the same SoC, sometimes off-chip) one or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) more :ref:`drm_bridges` (represented by :c:type:`struct drm_bridge
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) <drm_bridge>`) can be linked to an encoder. This link is static and cannot be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) changed, which means the cross-bar (if there is any) needs to be mapped between
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) the CRTC and any encoders. Often for drivers with bridges there's no code left
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) at the encoder level. Atomic drivers can leave out all the encoder callbacks to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) essentially only leave a dummy routing object behind, which is needed for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) backwards compatibility since encoders are exposed to userspace.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) The second object is for panels, represented by :c:type:`struct drm_panel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) <drm_panel>`, see :ref:`drm_panel_helper`. Panels do not have a fixed binding
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) point, but are generally linked to the driver private structure that embeds
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) :c:type:`struct drm_connector <drm_connector>`.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) Note that currently the bridge chaining and interactions with connectors and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) panels are still in-flux and not really fully sorted out yet.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) KMS Core Structures and Functions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) =================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) .. kernel-doc:: include/drm/drm_mode_config.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) :internal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) .. kernel-doc:: drivers/gpu/drm/drm_mode_config.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) Modeset Base Object Abstraction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) ===============================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) .. kernel-render:: DOT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) :alt: Mode Objects and Properties
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) :caption: Mode Objects and Properties
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) digraph {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) node [shape=box]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) "drm_property A" -> "drm_mode_object A"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) "drm_property A" -> "drm_mode_object B"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) "drm_property B" -> "drm_mode_object A"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) The base structure for all KMS objects is :c:type:`struct drm_mode_object
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) <drm_mode_object>`. One of the base services it provides is tracking properties,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) which are especially important for the atomic IOCTL (see `Atomic Mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) Setting`_). The somewhat surprising part here is that properties are not
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) directly instantiated on each object, but free-standing mode objects themselves,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) represented by :c:type:`struct drm_property <drm_property>`, which only specify
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) the type and value range of a property. Any given property can be attached
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) multiple times to different objects using drm_object_attach_property().
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) .. kernel-doc:: include/drm/drm_mode_object.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) :internal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) .. kernel-doc:: drivers/gpu/drm/drm_mode_object.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) Atomic Mode Setting
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) ===================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) .. kernel-render:: DOT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) :alt: Mode Objects and Properties
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) :caption: Mode Objects and Properties
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) digraph {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) node [shape=box]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) subgraph cluster_state {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) style=dashed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) label="Free-standing state"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) "drm_atomic_state" -> "duplicated drm_plane_state A"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) "drm_atomic_state" -> "duplicated drm_plane_state B"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) "drm_atomic_state" -> "duplicated drm_crtc_state"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) "drm_atomic_state" -> "duplicated drm_connector_state"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) "drm_atomic_state" -> "duplicated driver private state"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) subgraph cluster_current {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) style=dashed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) label="Current state"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) "drm_device" -> "drm_plane A"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) "drm_device" -> "drm_plane B"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) "drm_device" -> "drm_crtc"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) "drm_device" -> "drm_connector"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) "drm_device" -> "driver private object"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) "drm_plane A" -> "drm_plane_state A"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) "drm_plane B" -> "drm_plane_state B"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) "drm_crtc" -> "drm_crtc_state"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) "drm_connector" -> "drm_connector_state"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) "driver private object" -> "driver private state"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) "drm_atomic_state" -> "drm_device" [label="atomic_commit"]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) "duplicated drm_plane_state A" -> "drm_device"[style=invis]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) Atomic provides transactional modeset (including planes) updates, but a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) bit differently from the usual transactional approach of try-commit and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) rollback:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) - Firstly, no hardware changes are allowed when the commit would fail. This
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) allows us to implement the DRM_MODE_ATOMIC_TEST_ONLY mode, which allows
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) userspace to explore whether certain configurations would work or not.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) - This would still allow setting and rollback of just the software state,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) simplifying conversion of existing drivers. But auditing drivers for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) correctness of the atomic_check code becomes really hard with that: Rolling
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) back changes in data structures all over the place is hard to get right.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) - Lastly, for backwards compatibility and to support all use-cases, atomic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) updates need to be incremental and be able to execute in parallel. Hardware
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) doesn't always allow it, but where possible plane updates on different CRTCs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) should not interfere, and not get stalled due to output routing changing on
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) different CRTCs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) Taken all together there's two consequences for the atomic design:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) - The overall state is split up into per-object state structures:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) :c:type:`struct drm_plane_state <drm_plane_state>` for planes, :c:type:`struct
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) drm_crtc_state <drm_crtc_state>` for CRTCs and :c:type:`struct
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) drm_connector_state <drm_connector_state>` for connectors. These are the only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) objects with userspace-visible and settable state. For internal state drivers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) can subclass these structures through embeddeding, or add entirely new state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) structures for their globally shared hardware functions, see :c:type:`struct
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) drm_private_state<drm_private_state>`.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) - An atomic update is assembled and validated as an entirely free-standing pile
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) of structures within the :c:type:`drm_atomic_state <drm_atomic_state>`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) container. Driver private state structures are also tracked in the same
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) structure; see the next chapter. Only when a state is committed is it applied
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) to the driver and modeset objects. This way rolling back an update boils down
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) to releasing memory and unreferencing objects like framebuffers.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) Locking of atomic state structures is internally using :c:type:`struct
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) drm_modeset_lock <drm_modeset_lock>`. As a general rule the locking shouldn't be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) exposed to drivers, instead the right locks should be automatically acquired by
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) any function that duplicates or peeks into a state, like e.g.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) drm_atomic_get_crtc_state(). Locking only protects the software data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) structure, ordering of committing state changes to hardware is sequenced using
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) :c:type:`struct drm_crtc_commit <drm_crtc_commit>`.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) Read on in this chapter, and also in :ref:`drm_atomic_helper` for more detailed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) coverage of specific topics.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) Handling Driver Private State
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) -----------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) .. kernel-doc:: drivers/gpu/drm/drm_atomic.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) :doc: handling driver private state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) Atomic Mode Setting Function Reference
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) --------------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) .. kernel-doc:: include/drm/drm_atomic.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) :internal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) .. kernel-doc:: drivers/gpu/drm/drm_atomic.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) Atomic Mode Setting IOCTL and UAPI Functions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) --------------------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) .. kernel-doc:: drivers/gpu/drm/drm_atomic_uapi.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) :doc: overview
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) .. kernel-doc:: drivers/gpu/drm/drm_atomic_uapi.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) CRTC Abstraction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) ================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) .. kernel-doc:: drivers/gpu/drm/drm_crtc.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) :doc: overview
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) CRTC Functions Reference
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) --------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) .. kernel-doc:: include/drm/drm_crtc.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) :internal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) .. kernel-doc:: drivers/gpu/drm/drm_crtc.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) Frame Buffer Abstraction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) ========================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) .. kernel-doc:: drivers/gpu/drm/drm_framebuffer.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) :doc: overview
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) Frame Buffer Functions Reference
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) --------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) .. kernel-doc:: include/drm/drm_framebuffer.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) :internal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) .. kernel-doc:: drivers/gpu/drm/drm_framebuffer.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) DRM Format Handling
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) ===================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) .. kernel-doc:: include/uapi/drm/drm_fourcc.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) :doc: overview
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) Format Functions Reference
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) --------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) .. kernel-doc:: include/drm/drm_fourcc.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) :internal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) .. kernel-doc:: drivers/gpu/drm/drm_fourcc.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) Dumb Buffer Objects
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) ===================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) .. kernel-doc:: drivers/gpu/drm/drm_dumb_buffers.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) :doc: overview
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) Plane Abstraction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) =================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) .. kernel-doc:: drivers/gpu/drm/drm_plane.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) :doc: overview
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) Plane Functions Reference
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) -------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) .. kernel-doc:: include/drm/drm_plane.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) :internal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) .. kernel-doc:: drivers/gpu/drm/drm_plane.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) Display Modes Function Reference
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) ================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) .. kernel-doc:: include/drm/drm_modes.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) :internal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) .. kernel-doc:: drivers/gpu/drm/drm_modes.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) Connector Abstraction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) =====================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) .. kernel-doc:: drivers/gpu/drm/drm_connector.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) :doc: overview
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) Connector Functions Reference
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) -----------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) .. kernel-doc:: include/drm/drm_connector.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) :internal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) .. kernel-doc:: drivers/gpu/drm/drm_connector.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) Writeback Connectors
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) --------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) .. kernel-doc:: include/drm/drm_writeback.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) :internal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) .. kernel-doc:: drivers/gpu/drm/drm_writeback.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) :doc: overview
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) .. kernel-doc:: drivers/gpu/drm/drm_writeback.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) Encoder Abstraction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) ===================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) .. kernel-doc:: drivers/gpu/drm/drm_encoder.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) :doc: overview
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) Encoder Functions Reference
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) ---------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) .. kernel-doc:: include/drm/drm_encoder.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) :internal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) .. kernel-doc:: drivers/gpu/drm/drm_encoder.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) KMS Locking
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) ===========
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) .. kernel-doc:: drivers/gpu/drm/drm_modeset_lock.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) :doc: kms locking
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) .. kernel-doc:: include/drm/drm_modeset_lock.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) :internal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) .. kernel-doc:: drivers/gpu/drm/drm_modeset_lock.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) KMS Properties
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) ==============
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) Property Types and Blob Property Support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) ----------------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) .. kernel-doc:: drivers/gpu/drm/drm_property.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) :doc: overview
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) .. kernel-doc:: include/drm/drm_property.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) :internal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) .. kernel-doc:: drivers/gpu/drm/drm_property.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) Standard Connector Properties
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) -----------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) .. kernel-doc:: drivers/gpu/drm/drm_connector.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) :doc: standard connector properties
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) HDMI Specific Connector Properties
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) ----------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) .. kernel-doc:: drivers/gpu/drm/drm_connector.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) :doc: HDMI connector properties
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) Standard CRTC Properties
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) ------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) .. kernel-doc:: drivers/gpu/drm/drm_crtc.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) :doc: standard CRTC properties
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) Plane Composition Properties
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) ----------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) .. kernel-doc:: drivers/gpu/drm/drm_blend.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) :doc: overview
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) .. kernel-doc:: drivers/gpu/drm/drm_blend.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) FB_DAMAGE_CLIPS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) ~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) .. kernel-doc:: drivers/gpu/drm/drm_damage_helper.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) :doc: overview
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) .. kernel-doc:: drivers/gpu/drm/drm_damage_helper.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) .. kernel-doc:: include/drm/drm_damage_helper.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) :internal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) Color Management Properties
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) ---------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) .. kernel-doc:: drivers/gpu/drm/drm_color_mgmt.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) :doc: overview
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) .. kernel-doc:: drivers/gpu/drm/drm_color_mgmt.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) .. kernel-doc:: include/drm/drm_color_mgmt.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) :internal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) Tile Group Property
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) -------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) .. kernel-doc:: drivers/gpu/drm/drm_connector.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) :doc: Tile group
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) Explicit Fencing Properties
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) ---------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) .. kernel-doc:: drivers/gpu/drm/drm_atomic_uapi.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) :doc: explicit fencing properties
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) Variable Refresh Properties
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) ---------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) .. kernel-doc:: drivers/gpu/drm/drm_connector.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) :doc: Variable refresh properties
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) Existing KMS Properties
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) -----------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) The following table gives description of drm properties exposed by various
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) modules/drivers. Because this table is very unwieldy, do not add any new
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) properties here. Instead document them in a section above.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) .. csv-table::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) :header-rows: 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) :file: kms-properties.csv
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) Vertical Blanking
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) =================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) .. kernel-doc:: drivers/gpu/drm/drm_vblank.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) :doc: vblank handling
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) Vertical Blanking and Interrupt Handling Functions Reference
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) ------------------------------------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) .. kernel-doc:: include/drm/drm_vblank.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) :internal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) .. kernel-doc:: drivers/gpu/drm/drm_vblank.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) :export:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) Vertical Blank Work
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) ===================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) .. kernel-doc:: drivers/gpu/drm/drm_vblank_work.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) :doc: vblank works
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) Vertical Blank Work Functions Reference
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) ---------------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) .. kernel-doc:: include/drm/drm_vblank_work.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) :internal:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) .. kernel-doc:: drivers/gpu/drm/drm_vblank_work.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) :export: