diff options
-rw-r--r-- | drivers/gpu/drm/nouveau/dispnv50/disp.c | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c index d9801847936a..f80750ee04ea 100644 --- a/drivers/gpu/drm/nouveau/dispnv50/disp.c +++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c | |||
@@ -701,8 +701,7 @@ nv50_msto_cleanup(struct nv50_msto *msto) | |||
701 | 701 | ||
702 | NV_ATOMIC(drm, "%s: msto cleanup\n", msto->encoder.name); | 702 | NV_ATOMIC(drm, "%s: msto cleanup\n", msto->encoder.name); |
703 | 703 | ||
704 | if (mstc->port) | 704 | drm_dp_mst_deallocate_vcpi(&mstm->mgr, mstc->port); |
705 | drm_dp_mst_deallocate_vcpi(&mstm->mgr, mstc->port); | ||
706 | 705 | ||
707 | msto->mstc = NULL; | 706 | msto->mstc = NULL; |
708 | msto->head = NULL; | 707 | msto->head = NULL; |
@@ -727,7 +726,7 @@ nv50_msto_prepare(struct nv50_msto *msto) | |||
727 | }; | 726 | }; |
728 | 727 | ||
729 | NV_ATOMIC(drm, "%s: msto prepare\n", msto->encoder.name); | 728 | NV_ATOMIC(drm, "%s: msto prepare\n", msto->encoder.name); |
730 | if (mstc->port && mstc->port->vcpi.vcpi > 0) { | 729 | if (mstc->port->vcpi.vcpi > 0) { |
731 | struct drm_dp_payload *payload = nv50_msto_payload(msto); | 730 | struct drm_dp_payload *payload = nv50_msto_payload(msto); |
732 | if (payload) { | 731 | if (payload) { |
733 | args.vcpi.start_slot = payload->start_slot; | 732 | args.vcpi.start_slot = payload->start_slot; |
@@ -824,8 +823,7 @@ nv50_msto_disable(struct drm_encoder *encoder) | |||
824 | struct nv50_mstc *mstc = msto->mstc; | 823 | struct nv50_mstc *mstc = msto->mstc; |
825 | struct nv50_mstm *mstm = mstc->mstm; | 824 | struct nv50_mstm *mstm = mstc->mstm; |
826 | 825 | ||
827 | if (mstc->port) | 826 | drm_dp_mst_reset_vcpi_slots(&mstm->mgr, mstc->port); |
828 | drm_dp_mst_reset_vcpi_slots(&mstm->mgr, mstc->port); | ||
829 | 827 | ||
830 | mstm->outp->update(mstm->outp, msto->head->base.index, NULL, 0, 0); | 828 | mstm->outp->update(mstm->outp, msto->head->base.index, NULL, 0, 0); |
831 | mstm->modified = true; | 829 | mstm->modified = true; |
@@ -937,7 +935,7 @@ nv50_mstc_detect(struct drm_connector *connector, bool force) | |||
937 | enum drm_connector_status conn_status; | 935 | enum drm_connector_status conn_status; |
938 | int ret; | 936 | int ret; |
939 | 937 | ||
940 | if (!mstc->port) | 938 | if (drm_connector_is_unregistered(connector)) |
941 | return connector_status_disconnected; | 939 | return connector_status_disconnected; |
942 | 940 | ||
943 | ret = pm_runtime_get_sync(connector->dev->dev); | 941 | ret = pm_runtime_get_sync(connector->dev->dev); |
@@ -958,8 +956,7 @@ nv50_mstc_destroy(struct drm_connector *connector) | |||
958 | struct nv50_mstc *mstc = nv50_mstc(connector); | 956 | struct nv50_mstc *mstc = nv50_mstc(connector); |
959 | 957 | ||
960 | drm_connector_cleanup(&mstc->connector); | 958 | drm_connector_cleanup(&mstc->connector); |
961 | if (mstc->port) | 959 | drm_dp_mst_put_port_malloc(mstc->port); |
962 | drm_dp_mst_put_port_malloc(mstc->port); | ||
963 | 960 | ||
964 | kfree(mstc); | 961 | kfree(mstc); |
965 | } | 962 | } |
@@ -1073,11 +1070,6 @@ nv50_mstm_destroy_connector(struct drm_dp_mst_topology_mgr *mgr, | |||
1073 | 1070 | ||
1074 | drm_fb_helper_remove_one_connector(&drm->fbcon->helper, &mstc->connector); | 1071 | drm_fb_helper_remove_one_connector(&drm->fbcon->helper, &mstc->connector); |
1075 | 1072 | ||
1076 | drm_modeset_lock(&drm->dev->mode_config.connection_mutex, NULL); | ||
1077 | drm_dp_mst_put_port_malloc(mstc->port); | ||
1078 | mstc->port = NULL; | ||
1079 | drm_modeset_unlock(&drm->dev->mode_config.connection_mutex); | ||
1080 | |||
1081 | drm_connector_put(&mstc->connector); | 1073 | drm_connector_put(&mstc->connector); |
1082 | } | 1074 | } |
1083 | 1075 | ||