]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
drm: Add vrr_enabled property to drm CRTC
authorNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Thu, 4 Oct 2018 15:46:07 +0000 (11:46 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 28 Nov 2018 20:55:34 +0000 (15:55 -0500)
This patch introduces the 'vrr_enabled' CRTC property to allow
dynamic control over variable refresh rate support for a CRTC.

This property should be treated like a content hint to the driver -
if the hardware or driver is not capable of driving variable refresh
timings then this is not considered an error.

Capability for variable refresh rate support should be determined
by querying the vrr_capable drm connector property.

It is worth noting that while the property is intended for atomic use
it isn't filtered from legacy userspace queries. This allows for Xorg
userspace drivers to implement support.

Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/drm_atomic_uapi.c
drivers/gpu/drm/drm_crtc.c
drivers/gpu/drm/drm_mode_config.c
include/drm/drm_crtc.h
include/drm/drm_mode_config.h

index d5b7f315098c23b2ddc0c0ab74e410396e0ad917..eec396a57b887e44865af86214e541d10bb64c2e 100644 (file)
@@ -433,6 +433,8 @@ static int drm_atomic_crtc_set_property(struct drm_crtc *crtc,
                ret = drm_atomic_set_mode_prop_for_crtc(state, mode);
                drm_property_blob_put(mode);
                return ret;
+       } else if (property == config->prop_vrr_enabled) {
+               state->vrr_enabled = val;
        } else if (property == config->degamma_lut_property) {
                ret = drm_atomic_replace_property_blob_from_id(dev,
                                        &state->degamma_lut,
@@ -491,6 +493,8 @@ drm_atomic_crtc_get_property(struct drm_crtc *crtc,
                *val = state->active;
        else if (property == config->prop_mode_id)
                *val = (state->mode_blob) ? state->mode_blob->base.id : 0;
+       else if (property == config->prop_vrr_enabled)
+               *val = state->vrr_enabled;
        else if (property == config->degamma_lut_property)
                *val = (state->degamma_lut) ? state->degamma_lut->base.id : 0;
        else if (property == config->ctm_property)
index 268a182ae18939e4ea16e18d9d12dd29bb153b7b..6f8ddfcfaba505b9e6f935eb6ea206360a74e6a5 100644 (file)
@@ -340,6 +340,8 @@ int drm_crtc_init_with_planes(struct drm_device *dev, struct drm_crtc *crtc,
                drm_object_attach_property(&crtc->base, config->prop_mode_id, 0);
                drm_object_attach_property(&crtc->base,
                                           config->prop_out_fence_ptr, 0);
+               drm_object_attach_property(&crtc->base,
+                                          config->prop_vrr_enabled, 0);
        }
 
        return 0;
index ee80788f2c40deb56045fa363e710450f25ef63d..5670c67f28d4192fdfb1f7bfc2d51da76fe7b421 100644 (file)
@@ -310,6 +310,12 @@ static int drm_mode_create_standard_properties(struct drm_device *dev)
                return -ENOMEM;
        dev->mode_config.prop_mode_id = prop;
 
+       prop = drm_property_create_bool(dev, 0,
+                       "VRR_ENABLED");
+       if (!prop)
+               return -ENOMEM;
+       dev->mode_config.prop_vrr_enabled = prop;
+
        prop = drm_property_create(dev,
                        DRM_MODE_PROP_BLOB,
                        "DEGAMMA_LUT", 0);
index b21437bc95bf3169319b5baee2b356d149ee6e49..39c3900aab3cea107a0771b6fe0d5dc510ac4c11 100644 (file)
@@ -290,6 +290,15 @@ struct drm_crtc_state {
         */
        u32 pageflip_flags;
 
+       /**
+        * @vrr_enabled:
+        *
+        * Indicates if variable refresh rate should be enabled for the CRTC.
+        * Support for the requested vrr state will depend on driver and
+        * hardware capabiltiy - lacking support is not treated as failure.
+        */
+       bool vrr_enabled;
+
        /**
         * @event:
         *
index 5dbeabdbaf91f774c53c35588132835753e66827..9db59a1caf5b7ef70df7d95a007decdc230bf6e1 100644 (file)
@@ -645,6 +645,11 @@ struct drm_mode_config {
         * connectors must be of and active must be set to disabled, too.
         */
        struct drm_property *prop_mode_id;
+       /**
+        * @prop_vrr_enabled: Default atomic CRTC property to indicate
+        * whether variable refresh rate should be enabled on the CRTC.
+        */
+       struct drm_property *prop_vrr_enabled;
 
        /**
         * @dvi_i_subconnector_property: Optional DVI-I property to