diff options
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.patch | 107 |
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 + |