diff options
| author | Dhaval Patel <pdhaval@quicinc.com> | 2016-09-06 10:44:57 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-09-06 10:44:57 -0700 |
| commit | dbf0d50ee39b43f4f911080010135fcdcada0eaf (patch) | |
| tree | 19578288ed40c5e0d7328bbe32ed57105ea3d7f9 /drivers/gpu | |
| parent | 08e1cca95420d63981f2e7da525084568c21a0b8 (diff) | |
| parent | f3033ccae43819b704866569a63541bc125addbb (diff) | |
Merge "drm/msm: internal property updates should update cached value" into dev/msm-4.4-drm_kms
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/msm/msm_prop.c | 22 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/msm_prop.h | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/sde/sde_connector.h | 8 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/sde/sde_rm.c | 2 |
4 files changed, 31 insertions, 3 deletions
diff --git a/drivers/gpu/drm/msm/msm_prop.c b/drivers/gpu/drm/msm/msm_prop.c index e9550f580b11..3edf4b93f5d3 100644 --- a/drivers/gpu/drm/msm/msm_prop.c +++ b/drivers/gpu/drm/msm/msm_prop.c @@ -590,21 +590,37 @@ exit: } int msm_property_set_property(struct msm_property_info *info, + uint64_t *property_values, uint32_t property_idx, uint64_t val) { int rc = -EINVAL; if (!info || (property_idx >= info->property_count) || - property_idx < info->blob_count) { + property_idx < info->blob_count || !property_values) { DRM_ERROR("invalid argument(s)\n"); } else { + struct drm_property *drm_prop; + + mutex_lock(&info->property_lock); + + /* update cached value */ + if (property_values) + property_values[property_idx] = val; + + /* update the new default value for immutables */ + drm_prop = info->property_array[property_idx]; + if (drm_prop->flags & DRM_MODE_PROP_IMMUTABLE) + info->property_data[property_idx].default_value = val; + + mutex_unlock(&info->property_lock); + /* update drm object */ - rc = drm_object_property_set_value(info->base, - info->property_array[property_idx], val); + rc = drm_object_property_set_value(info->base, drm_prop, val); if (rc) DRM_ERROR("failed set property value, idx %d rc %d\n", property_idx, rc); + } return rc; diff --git a/drivers/gpu/drm/msm/msm_prop.h b/drivers/gpu/drm/msm/msm_prop.h index 9a4879854bbd..f065cbffda09 100644 --- a/drivers/gpu/drm/msm/msm_prop.h +++ b/drivers/gpu/drm/msm/msm_prop.h @@ -353,11 +353,13 @@ int msm_property_set_blob(struct msm_property_info *info, * DRM_MODE_PROP_IMMUTABLE flag set. * Note: This function cannot be called on a blob. * @info: Pointer to property info container struct + * @property_values: Pointer to property values cache array * @property_idx: Property index * @val: value of the property to set * Returns: Zero on success */ int msm_property_set_property(struct msm_property_info *info, + uint64_t *property_values, uint32_t property_idx, uint64_t val); diff --git a/drivers/gpu/drm/msm/sde/sde_connector.h b/drivers/gpu/drm/msm/sde/sde_connector.h index f47d3b01de29..403160c85ae2 100644 --- a/drivers/gpu/drm/msm/sde/sde_connector.h +++ b/drivers/gpu/drm/msm/sde/sde_connector.h @@ -223,6 +223,14 @@ struct sde_connector_state { (to_sde_connector_state((S))->property_values[(X)]) : 0) /** + * sde_connector_get_property_values - retrieve property values cache + * @S: Pointer to drm connector state + * Returns: Integer value of requested property + */ +#define sde_connector_get_property_values(S) \ + ((S) ? (to_sde_connector_state((S))->property_values) : 0) + +/** * sde_connector_get_out_fb - query out_fb value from sde connector state * @S: Pointer to drm connector state * Returns: Output fb associated with specified connector state diff --git a/drivers/gpu/drm/msm/sde/sde_rm.c b/drivers/gpu/drm/msm/sde/sde_rm.c index a8e0e89d9720..54f0e3a5d65c 100644 --- a/drivers/gpu/drm/msm/sde/sde_rm.c +++ b/drivers/gpu/drm/msm/sde/sde_rm.c @@ -996,6 +996,7 @@ void sde_rm_release(struct sde_rm *rm, struct drm_encoder *enc) _sde_rm_release_rsvp(rm, rsvp); (void) msm_property_set_property( sde_connector_get_propinfo(conn), + sde_connector_get_property_values(conn->state), CONNECTOR_PROP_TOPOLOGY_NAME, SDE_RM_TOPOLOGY_UNKNOWN); } @@ -1011,6 +1012,7 @@ static int _sde_rm_commit_rsvp( ret = msm_property_set_property( sde_connector_get_propinfo(conn_state->connector), + sde_connector_get_property_values(conn_state), CONNECTOR_PROP_TOPOLOGY_NAME, rsvp->topology); if (ret) |
