drm/msm/sde: add topology management properties
Need to expose connector properties for user interaction with
dynamic hardware resource mapping to drm object topologies.
Expose topology_control property on each connector to allow user
control reservation behavior. An immutable topology_name
property is exposed on each connector to allow user to query
active use case driver chose.
Change-Id: I97d22b9a1a8f6e0094f1148af8adb31c826a266a
Signed-off-by: Lloyd Atkinson <latkinso@codeaurora.org>
diff --git a/drivers/gpu/drm/msm/sde/sde_connector.c b/drivers/gpu/drm/msm/sde/sde_connector.c
index 1b86f00..a39b994 100644
--- a/drivers/gpu/drm/msm/sde/sde_connector.c
+++ b/drivers/gpu/drm/msm/sde/sde_connector.c
@@ -16,6 +16,21 @@
#include "sde_kms.h"
#include "sde_connector.h"
+static const struct drm_prop_enum_list e_topology_name[] = {
+ {SDE_RM_TOPOLOGY_UNKNOWN, "sde_unknown"},
+ {SDE_RM_TOPOLOGY_SINGLEPIPE, "sde_singlepipe"},
+ {SDE_RM_TOPOLOGY_DUALPIPE, "sde_dualpipe"},
+ {SDE_RM_TOPOLOGY_PPSPLIT, "sde_ppsplit"},
+ {SDE_RM_TOPOLOGY_DUALPIPEMERGE, "sde_dualpipemerge"}
+};
+static const struct drm_prop_enum_list e_topology_control[] = {
+ {SDE_RM_TOPCTL_RESERVE_LOCK, "reserve_lock"},
+ {SDE_RM_TOPCTL_RESERVE_CLEAR, "reserve_clear"},
+ {SDE_RM_TOPCTL_DSPP, "dspp"},
+ {SDE_RM_TOPCTL_FORCE_TILING, "force_tiling"},
+ {SDE_RM_TOPCTL_PPSPLIT, "ppsplit"}
+};
+
int sde_connector_get_info(struct drm_connector *connector,
struct msm_display_info *info)
{
@@ -554,12 +569,25 @@
msm_property_install_range(&c_conn->property_info, "RETIRE_FENCE",
0x0, 0, ~0, ~0, CONNECTOR_PROP_RETIRE_FENCE);
+ /* enum/bitmask properties */
+ msm_property_install_enum(&c_conn->property_info, "topology_name",
+ DRM_MODE_PROP_IMMUTABLE, 0, e_topology_name,
+ ARRAY_SIZE(e_topology_name),
+ CONNECTOR_PROP_TOPOLOGY_NAME);
+ msm_property_install_enum(&c_conn->property_info, "topology_control",
+ 0, 1, e_topology_control,
+ ARRAY_SIZE(e_topology_control),
+ CONNECTOR_PROP_TOPOLOGY_CONTROL);
+
rc = msm_property_install_get_status(&c_conn->property_info);
if (rc) {
SDE_ERROR("failed to create one or more properties\n");
goto error_destroy_property;
}
+ SDE_DEBUG("connector %d attach encoder %d\n",
+ c_conn->base.base.id, encoder->base.id);
+
priv->connectors[priv->num_connectors++] = &c_conn->base;
return &c_conn->base;
@@ -579,4 +607,3 @@
return ERR_PTR(rc);
}
-