aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1881-drm-Add-vrr_enabled-property-to-drm-CRTC.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1881-drm-Add-vrr_enabled-property-to-drm-CRTC.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/1881-drm-Add-vrr_enabled-property-to-drm-CRTC.patch107
1 files changed, 107 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1881-drm-Add-vrr_enabled-property-to-drm-CRTC.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1881-drm-Add-vrr_enabled-property-to-drm-CRTC.patch
new file mode 100644
index 00000000..e504e6bc
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1881-drm-Add-vrr_enabled-property-to-drm-CRTC.patch
@@ -0,0 +1,107 @@
+From 38000dcf0fb7b936d041df95a9534e73b122a7fd Mon Sep 17 00:00:00 2001
+From: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
+Date: Thu, 4 Oct 2018 11:46:07 -0400
+Subject: [PATCH 1881/2940] drm: Add vrr_enabled property to drm CRTC
+
+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>
+Signed-off-by: kalyan Alle <kalyan.alle@amd.com>
+---
+ drivers/gpu/drm/drm_atomic.c | 4 ++++
+ drivers/gpu/drm/drm_crtc.c | 2 ++
+ drivers/gpu/drm/drm_mode_config.c | 6 ++++++
+ include/drm/drm_mode_config.h | 5 +++++
+ 4 files changed, 17 insertions(+)
+ mode change 100644 => 100755 drivers/gpu/drm/drm_crtc.c
+ mode change 100644 => 100755 drivers/gpu/drm/drm_mode_config.c
+
+diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
+index a086934b95f9..2ca381b0cd9a 100644
+--- a/drivers/gpu/drm/drm_atomic.c
++++ b/drivers/gpu/drm/drm_atomic.c
+@@ -558,6 +558,8 @@ 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,
+@@ -632,6 +634,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)
+diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
+old mode 100644
+new mode 100755
+index 9cbe8f5c9aca..162123ec50ef
+--- a/drivers/gpu/drm/drm_crtc.c
++++ b/drivers/gpu/drm/drm_crtc.c
+@@ -337,6 +337,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;
+diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
+old mode 100644
+new mode 100755
+index 21e353bd3948..1708943b051c
+--- a/drivers/gpu/drm/drm_mode_config.c
++++ b/drivers/gpu/drm/drm_mode_config.c
+@@ -311,6 +311,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);
+diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
+index a0b202e1d69a..d662e07db786 100644
+--- a/include/drm/drm_mode_config.h
++++ b/include/drm/drm_mode_config.h
+@@ -639,6 +639,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
+--
+2.17.1
+