Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^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: