drm/dp_mst: Add a helper to queue a topology probe

A follow up i915 patch will need to reprobe the MST topology after the
initial probing, add a helper for this.

Cc: Lyude Paul <lyude@redhat.com>
Cc: dri-devel@lists.freedesktop.org
Reviewed-by: Lyude Paul <lyude@redhat.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240722165503.2084999-3-imre.deak@intel.com
This commit is contained in:
Imre Deak 2024-07-22 19:54:51 +03:00
parent e9b36c5be2
commit dbaeef363e
2 changed files with 29 additions and 0 deletions

View File

@ -3728,6 +3728,33 @@ drm_dp_mst_topology_mgr_invalidate_mstb(struct drm_dp_mst_branch *mstb)
drm_dp_mst_topology_mgr_invalidate_mstb(port->mstb);
}
/**
* drm_dp_mst_topology_queue_probe - Queue a topology probe
* @mgr: manager to probe
*
* Queue a work to probe the MST topology. Driver's should call this only to
* sync the topology's HW->SW state after the MST link's parameters have
* changed in a way the state could've become out-of-sync. This is the case
* for instance when the link rate between the source and first downstream
* branch device has switched between UHBR and non-UHBR rates. Except of those
* cases - for instance when a sink gets plugged/unplugged to a port - the SW
* state will get updated automatically via MST UP message notifications.
*/
void drm_dp_mst_topology_queue_probe(struct drm_dp_mst_topology_mgr *mgr)
{
mutex_lock(&mgr->lock);
if (drm_WARN_ON(mgr->dev, !mgr->mst_state || !mgr->mst_primary))
goto out_unlock;
drm_dp_mst_topology_mgr_invalidate_mstb(mgr->mst_primary);
drm_dp_mst_queue_probe_work(mgr);
out_unlock:
mutex_unlock(&mgr->lock);
}
EXPORT_SYMBOL(drm_dp_mst_topology_queue_probe);
/**
* drm_dp_mst_topology_mgr_suspend() - suspend the MST manager
* @mgr: manager to suspend

View File

@ -885,6 +885,8 @@ int drm_dp_check_act_status(struct drm_dp_mst_topology_mgr *mgr);
void drm_dp_mst_dump_topology(struct seq_file *m,
struct drm_dp_mst_topology_mgr *mgr);
void drm_dp_mst_topology_queue_probe(struct drm_dp_mst_topology_mgr *mgr);
void drm_dp_mst_topology_mgr_suspend(struct drm_dp_mst_topology_mgr *mgr);
int __must_check
drm_dp_mst_topology_mgr_resume(struct drm_dp_mst_topology_mgr *mgr,