@@ -2096,6 +2096,15 @@ static bool drm_dp_get_vc_payload_bw(int dp_link_bw,
return true;
}
+static void drm_dp_mst_topology_reset_state(struct drm_dp_mst_topology_mgr *mgr)
+{
+ struct drm_dp_mst_topology_state *state =
+ to_dp_mst_topology_state(mgr->base.state);
+
+ if (mgr->cbs->reset_state)
+ mgr->cbs->reset_state(state);
+}
+
/**
* drm_dp_mst_topology_mgr_set_mst() - Set the MST state for a topology manager
* @mgr: manager to set state for
@@ -2171,6 +2180,7 @@ int drm_dp_mst_topology_mgr_set_mst(struct drm_dp_mst_topology_mgr *mgr, bool ms
mgr->payload_mask = 0;
set_bit(0, &mgr->payload_mask);
mgr->vcpi_mask = 0;
+ drm_dp_mst_topology_reset_state(mgr);
}
out_unlock:
@@ -381,6 +381,7 @@ struct drm_dp_sideband_msg_tx {
/* sideband msg handler */
struct drm_dp_mst_topology_mgr;
+struct drm_dp_mst_topology_state;
struct drm_dp_mst_topology_cbs {
/* create a connector for a port */
struct drm_connector *(*add_connector)(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port, const char *path);
@@ -388,7 +389,7 @@ struct drm_dp_mst_topology_cbs {
void (*destroy_connector)(struct drm_dp_mst_topology_mgr *mgr,
struct drm_connector *connector);
void (*hotplug)(struct drm_dp_mst_topology_mgr *mgr);
-
+ void (*reset_state)(struct drm_dp_mst_topology_state *state);
};
#define DP_MAX_PAYLOAD (sizeof(unsigned long) * 8)