Lines Matching refs:mstm

921 	struct nv50_mstm *mstm;
947 return msto->mstc->mstm->outp;
955 struct nv50_mstm *mstm = mstc->mstm;
958 WARN_ON(!mutex_is_locked(&mstm->mgr.payload_lock));
961 for (i = 0; i < mstm->mgr.max_payloads; i++) {
962 struct drm_dp_payload *payload = &mstm->mgr.payloads[i];
964 mstm->outp->base.base.name, i, payload->vcpi,
968 for (i = 0; i < mstm->mgr.max_payloads; i++) {
969 struct drm_dp_payload *payload = &mstm->mgr.payloads[i];
982 struct nv50_mstm *mstm = mstc->mstm;
989 drm_dp_mst_deallocate_vcpi(&mstm->mgr, mstc->port);
1000 struct nv50_mstm *mstm = mstc->mstm;
1007 .base.hasht = mstm->outp->dcb->hasht,
1008 .base.hashm = (0xf0ff & mstm->outp->dcb->hashm) |
1012 mutex_lock(&mstm->mgr.payload_lock);
1031 mutex_unlock(&mstm->mgr.payload_lock);
1042 struct nv50_mstm *mstm = mstc->mstm;
1068 slots = drm_dp_atomic_find_vcpi_slots(state, &mstm->mgr, mstc->port,
1096 struct nv50_mstm *mstm = NULL;
1106 mstm = mstc->mstm;
1115 r = drm_dp_mst_allocate_vcpi(&mstm->mgr, mstc->port, armh->dp.pbn,
1120 if (!mstm->links++)
1121 nv50_outp_acquire(mstm->outp, false /*XXX: MST audio.*/);
1123 if (mstm->outp->link & 1)
1128 mstm->outp->update(mstm->outp, head->base.index, armh, proto,
1132 mstm->modified = true;
1140 struct nv50_mstm *mstm = mstc->mstm;
1142 drm_dp_mst_reset_vcpi_slots(&mstm->mgr, mstc->port);
1144 mstm->outp->update(mstm->outp, msto->head->base.index, NULL, 0, 0);
1145 mstm->modified = true;
1146 if (!--mstm->links)
1147 mstm->disabled = true;
1201 if (!(mstc->mstm->outp->dcb->heads & drm_crtc_mask(crtc)))
1212 struct nouveau_encoder *outp = mstc->mstm->outp;
1255 struct drm_dp_mst_topology_mgr *mgr = &mstc->mstm->mgr;
1340 nv50_mstc_new(struct nv50_mstm *mstm, struct drm_dp_mst_port *port,
1343 struct drm_device *dev = mstm->outp->base.base.dev;
1350 mstc->mstm = mstm;
1367 if (!(mstm->outp->dcb->heads & drm_crtc_mask(crtc)))
1382 nv50_mstm_cleanup(struct nv50_mstm *mstm)
1384 struct nouveau_drm *drm = nouveau_drm(mstm->outp->base.base.dev);
1388 NV_ATOMIC(drm, "%s: mstm cleanup\n", mstm->outp->base.base.name);
1389 ret = drm_dp_check_act_status(&mstm->mgr);
1391 ret = drm_dp_update_payload_part2(&mstm->mgr);
1393 drm_for_each_encoder(encoder, mstm->outp->base.base.dev) {
1397 if (mstc && mstc->mstm == mstm)
1402 mstm->modified = false;
1406 nv50_mstm_prepare(struct nv50_mstm *mstm)
1408 struct nouveau_drm *drm = nouveau_drm(mstm->outp->base.base.dev);
1412 NV_ATOMIC(drm, "%s: mstm prepare\n", mstm->outp->base.base.name);
1413 ret = drm_dp_update_payload_part1(&mstm->mgr);
1415 drm_for_each_encoder(encoder, mstm->outp->base.base.dev) {
1419 if (mstc && mstc->mstm == mstm)
1424 if (mstm->disabled) {
1425 if (!mstm->links)
1426 nv50_outp_release(mstm->outp);
1427 mstm->disabled = false;
1435 struct nv50_mstm *mstm = nv50_mstm(mgr);
1439 ret = nv50_mstc_new(mstm, port, path, &mstc);
1454 struct nv50_mstm *mstm)
1468 drm_dp_mst_hpd_irq(&mstm->mgr, esi, &handled);
1488 nv50_mstm_remove(struct nv50_mstm *mstm)
1490 mstm->is_mst = false;
1491 drm_dp_mst_topology_mgr_set_mst(&mstm->mgr, false);
1495 nv50_mstm_enable(struct nv50_mstm *mstm, int state)
1497 struct nouveau_encoder *outp = mstm->outp;
1517 struct nv50_mstm *mstm = outp->dp.mstm;
1521 if (!mstm || !mstm->can_mst)
1524 aux = mstm->mgr.aux;
1534 ret = nv50_mstm_enable(mstm, true);
1538 ret = drm_dp_mst_topology_mgr_set_mst(&mstm->mgr, true);
1540 nv50_mstm_enable(mstm, false);
1544 mstm->is_mst = true;
1551 struct nv50_mstm *mstm = outp->dp.mstm;
1553 if (!mstm)
1558 * path to protect mstm->is_mst without potentially deadlocking
1561 mstm->suspended = true;
1564 if (mstm->is_mst)
1565 drm_dp_mst_topology_mgr_suspend(&mstm->mgr);
1571 struct nv50_mstm *mstm = outp->dp.mstm;
1574 if (!mstm)
1577 if (mstm->is_mst) {
1578 ret = drm_dp_mst_topology_mgr_resume(&mstm->mgr, !runtime);
1580 nv50_mstm_remove(mstm);
1584 mstm->suspended = false;
1588 drm_kms_helper_hotplug_event(mstm->mgr.dev);
1594 struct nv50_mstm *mstm = *pmstm;
1595 if (mstm) {
1596 drm_dp_mst_topology_mgr_destroy(&mstm->mgr);
1608 struct nv50_mstm *mstm;
1611 if (!(mstm = *pmstm = kzalloc(sizeof(*mstm), GFP_KERNEL)))
1613 mstm->outp = outp;
1614 mstm->mgr.cbs = &nv50_mstm;
1616 ret = drm_dp_mst_topology_mgr_init(&mstm->mgr, dev, aux, aux_max,
1793 nv50_mstm_del(&nv_encoder->dp.mstm);
1877 &nv_encoder->dp.mstm);
2037 struct nv50_mstm *mstm;
2044 mstm = nouveau_encoder(encoder)->dp.mstm;
2045 if (mstm && mstm->modified)
2046 nv50_mstm_prepare(mstm);
2058 mstm = nouveau_encoder(encoder)->dp.mstm;
2059 if (mstm && mstm->modified)
2060 nv50_mstm_cleanup(mstm);