aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/0332-drm-amd-display-get_atomic_property-missing-for-drm_.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/0332-drm-amd-display-get_atomic_property-missing-for-drm_.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/0332-drm-amd-display-get_atomic_property-missing-for-drm_.patch159
1 files changed, 159 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/0332-drm-amd-display-get_atomic_property-missing-for-drm_.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/0332-drm-amd-display-get_atomic_property-missing-for-drm_.patch
new file mode 100644
index 00000000..b113d34d
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/0332-drm-amd-display-get_atomic_property-missing-for-drm_.patch
@@ -0,0 +1,159 @@
+From 1c923b6e6672bc55c6f0c0f3abd3a0bb8ac5dea6 Mon Sep 17 00:00:00 2001
+From: Pratik Vishwakarma <Pratik.Vishwakarma@amd.com>
+Date: Thu, 6 Apr 2017 13:18:20 +0530
+Subject: [PATCH 0332/4131] drm/amd/display: get_atomic_property missing for
+ drm_connector_funcs
+
+DRM_IOCTL_MODE_GETCONNECTOR fails with EINVAL on enabling DRIVER_ATOMIC
+With this DRM_IOCTL_MODE_GETCONNECTOR returns all the connector properties.
+freesync_property and freesync_capable_property return 0 currently.
+
+TESTS(On Chromium OS on Stoney Only)
+* Builds without compilation errors.
+* 'atomictest' proceeds after applying patch and fails with vblank event
+timed out.
+* Chromium OS ui comes up.
+
+Signed-off-by: Pratik Vishwakarma <Pratik.Vishwakarma@amd.com>
+Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
+Reviewed-by: Harry Wentland <harry.wentland@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ .../drm/amd/display/amdgpu_dm/amdgpu_dm_types.c | 89 +++++++++++++---------
+ .../drm/amd/display/amdgpu_dm/amdgpu_dm_types.h | 6 ++
+ 2 files changed, 57 insertions(+), 38 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c
+index 28bd6be..f0896e8 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c
+@@ -1348,6 +1348,56 @@ int amdgpu_dm_connector_atomic_set_property(
+ return ret;
+ }
+
++int amdgpu_dm_connector_atomic_get_property(
++ struct drm_connector *connector,
++ const struct drm_connector_state *state,
++ struct drm_property *property,
++ uint64_t *val)
++{
++ struct drm_device *dev = connector->dev;
++ struct amdgpu_device *adev = dev->dev_private;
++ struct dm_connector_state *dm_state =
++ to_dm_connector_state(state);
++ int ret = -EINVAL;
++
++ if (property == dev->mode_config.scaling_mode_property) {
++ switch (dm_state->scaling) {
++ case RMX_CENTER:
++ *val = DRM_MODE_SCALE_CENTER;
++ break;
++ case RMX_ASPECT:
++ *val = DRM_MODE_SCALE_ASPECT;
++ break;
++ case RMX_FULL:
++ *val = DRM_MODE_SCALE_FULLSCREEN;
++ break;
++ case RMX_OFF:
++ default:
++ *val = DRM_MODE_SCALE_NONE;
++ break;
++ }
++ ret = 0;
++ } else if (property == adev->mode_info.underscan_hborder_property) {
++ *val = dm_state->underscan_hborder;
++ ret = 0;
++ } else if (property == adev->mode_info.underscan_vborder_property) {
++ *val = dm_state->underscan_vborder;
++ ret = 0;
++ } else if (property == adev->mode_info.underscan_property) {
++ *val = dm_state->underscan_enable;
++ ret = 0;
++ } else if (property == adev->mode_info.freesync_property) {
++ //TODO
++ *val = 0;
++ ret = 0;
++ } else if (property == adev->mode_info.freesync_capable_property) {
++ //TODO
++ *val = 0;
++ ret = 0;
++ }
++ return ret;
++}
++
+ void amdgpu_dm_connector_destroy(struct drm_connector *connector)
+ {
+ struct amdgpu_connector *aconnector = to_amdgpu_connector(connector);
+@@ -1410,43 +1460,6 @@ struct drm_connector_state *amdgpu_dm_connector_atomic_duplicate_state(
+ return NULL;
+ }
+
+-
+-/**
+- * amdgpu_dm_atomic_get_property - fetch connector property value
+- * @connector: connector to fetch property for
+- * @state: state containing the property value
+- * @property: property to look up
+- * @val: pointer to write property value into
+- *
+- * The DRM core does not store shadow copies of properties for
+- * atomic-capable drivers. This entrypoint is used to fetch
+- * the current value of a driver-specific connector property.
+- */
+-int amdgpu_dm_connector_atomic_get_property(struct drm_connector *connector,
+- const struct drm_connector_state *state,
+- struct drm_property *property,
+- uint64_t *val)
+-{
+- int i;
+-
+- /*
+- * TODO: Get properties from atomic state or objs. Until it's ready,
+- * continue to look up all property values in the DRM's shadow copy
+- * in obj->properties->values[].
+- *
+- * When the crtc/connector state work matures, this function should
+- * be updated to read the values out of the state structure instead.
+- */
+- for (i = 0; i < connector->base.properties->count; i++) {
+- if (connector->base.properties->properties[i] == property) {
+- *val = connector->base.properties->values[i];
+- return 0;
+- }
+- }
+-
+- return -EINVAL;
+-}
+-
+ static const struct drm_connector_funcs amdgpu_dm_connector_funcs = {
+ .dpms = drm_atomic_helper_connector_dpms,
+ .reset = amdgpu_dm_connector_funcs_reset,
+@@ -1457,7 +1470,7 @@ static const struct drm_connector_funcs amdgpu_dm_connector_funcs = {
+ .atomic_duplicate_state = amdgpu_dm_connector_atomic_duplicate_state,
+ .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
+ .atomic_set_property = amdgpu_dm_connector_atomic_set_property,
+- .atomic_get_property = amdgpu_dm_connector_atomic_get_property,
++ .atomic_get_property = amdgpu_dm_connector_atomic_get_property
+ };
+
+ static struct drm_encoder *best_encoder(struct drm_connector *connector)
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.h
+index ab6d51d..b69c868 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.h
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.h
+@@ -71,6 +71,12 @@ int amdgpu_dm_connector_atomic_set_property(
+ struct drm_property *property,
+ uint64_t val);
+
++int amdgpu_dm_connector_atomic_get_property(
++ struct drm_connector *connector,
++ const struct drm_connector_state *state,
++ struct drm_property *property,
++ uint64_t *val);
++
+ int amdgpu_dm_get_encoder_crtc_mask(struct amdgpu_device *adev);
+
+ void amdgpu_dm_connector_init_helper(
+--
+2.7.4
+