diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0332-drm-amd-display-get_atomic_property-missing-for-drm_.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0332-drm-amd-display-get_atomic_property-missing-for-drm_.patch | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0332-drm-amd-display-get_atomic_property-missing-for-drm_.patch b/meta-amd-bsp/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/meta-amd-bsp/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 + |