drm: Document variable refresh properties
authorNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Thu, 4 Oct 2018 18:38:42 +0000 (14:38 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 28 Nov 2018 20:55:34 +0000 (15:55 -0500)
These include the drm_connector 'vrr_capable' and the drm_crtc
'vrr_enabled' properties.

Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Acked-by: Pekka Paalanen <pekka.paalanen@collabora.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Documentation/gpu/drm-kms.rst
drivers/gpu/drm/drm_connector.c

index 4b1501b4835b1a41c44207f1b4b4cf1d264cda1a..8da2a178cf85e8559ea1a0ae8047ac771c8a8ef4 100644 (file)
@@ -575,6 +575,13 @@ Explicit Fencing Properties
 .. kernel-doc:: drivers/gpu/drm/drm_atomic_uapi.c
    :doc: explicit fencing properties
 
+
+Variable Refresh Properties
+---------------------------
+
+.. kernel-doc:: drivers/gpu/drm/drm_connector.c
+   :doc: Variable refresh properties
+
 Existing KMS Properties
 -----------------------
 
index 7bd9d824dd7daf226e698125a9d1e2075ee5bebf..ead26bfc30cade822047c147e9893dccfc2a4581 100644 (file)
@@ -1271,6 +1271,74 @@ int drm_mode_create_scaling_mode_property(struct drm_device *dev)
 }
 EXPORT_SYMBOL(drm_mode_create_scaling_mode_property);
 
+/**
+ * DOC: Variable refresh properties
+ *
+ * Variable refresh rate capable displays can dynamically adjust their
+ * refresh rate by extending the duration of their vertical front porch
+ * until page flip or timeout occurs. This can reduce or remove stuttering
+ * and latency in scenarios where the page flip does not align with the
+ * vblank interval.
+ *
+ * An example scenario would be an application flipping at a constant rate
+ * of 48Hz on a 60Hz display. The page flip will frequently miss the vblank
+ * interval and the same contents will be displayed twice. This can be
+ * observed as stuttering for content with motion.
+ *
+ * If variable refresh rate was active on a display that supported a
+ * variable refresh range from 35Hz to 60Hz no stuttering would be observable
+ * for the example scenario. The minimum supported variable refresh rate of
+ * 35Hz is below the page flip frequency and the vertical front porch can
+ * be extended until the page flip occurs. The vblank interval will be
+ * directly aligned to the page flip rate.
+ *
+ * Not all userspace content is suitable for use with variable refresh rate.
+ * Large and frequent changes in vertical front porch duration may worsen
+ * perceived stuttering for input sensitive applications.
+ *
+ * Panel brightness will also vary with vertical front porch duration. Some
+ * panels may have noticeable differences in brightness between the minimum
+ * vertical front porch duration and the maximum vertical front porch duration.
+ * Large and frequent changes in vertical front porch duration may produce
+ * observable flickering for such panels.
+ *
+ * Userspace control for variable refresh rate is supported via properties
+ * on the &drm_connector and &drm_crtc objects.
+ *
+ * "vrr_capable":
+ *     Optional &drm_connector boolean property that drivers should attach
+ *     with drm_connector_attach_vrr_capable_property() on connectors that
+ *     could support variable refresh rates. Drivers should update the
+ *     property value by calling drm_connector_set_vrr_capable_property().
+ *
+ *     Absence of the property should indicate absence of support.
+ *
+ * "vrr_enabled":
+ *     Default &drm_crtc boolean property that notifies the driver that the
+ *     content on the CRTC is suitable for variable refresh rate presentation.
+ *     The driver will take this property as a hint to enable variable
+ *     refresh rate support if the receiver supports it, ie. if the
+ *     "vrr_capable" property is true on the &drm_connector object. The
+ *     vertical front porch duration will be extended until page-flip or
+ *     timeout when enabled.
+ *
+ *     The minimum vertical front porch duration is defined as the vertical
+ *     front porch duration for the current mode.
+ *
+ *     The maximum vertical front porch duration is greater than or equal to
+ *     the minimum vertical front porch duration. The duration is derived
+ *     from the minimum supported variable refresh rate for the connector.
+ *
+ *     The driver may place further restrictions within these minimum
+ *     and maximum bounds.
+ *
+ *     The semantics for the vertical blank timestamp differ when
+ *     variable refresh rate is active. The vertical blank timestamp
+ *     is defined to be an estimate using the current mode's fixed
+ *     refresh rate timings. The semantics for the page-flip event
+ *     timestamp remain the same.
+ */
+
 /**
  * drm_connector_attach_vrr_capable_property - creates the
  * vrr_capable property