diff options
Diffstat (limited to 'drivers/gpu/drm')
| -rw-r--r-- | drivers/gpu/drm/drm_dp_mst_topology.c | 114 |
1 files changed, 62 insertions, 52 deletions
diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c index 75cca6a843fb..074e985093ca 100644 --- a/drivers/gpu/drm/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/drm_dp_mst_topology.c | |||
| @@ -46,7 +46,7 @@ static bool dump_dp_payload_table(struct drm_dp_mst_topology_mgr *mgr, | |||
| 46 | char *buf); | 46 | char *buf); |
| 47 | static int test_calc_pbn_mode(void); | 47 | static int test_calc_pbn_mode(void); |
| 48 | 48 | ||
| 49 | static void drm_dp_put_port(struct drm_dp_mst_port *port); | 49 | static void drm_dp_mst_topology_put_port(struct drm_dp_mst_port *port); |
| 50 | 50 | ||
| 51 | static int drm_dp_dpcd_write_payload(struct drm_dp_mst_topology_mgr *mgr, | 51 | static int drm_dp_dpcd_write_payload(struct drm_dp_mst_topology_mgr *mgr, |
| 52 | int id, | 52 | int id, |
| @@ -888,7 +888,7 @@ static void drm_dp_destroy_mst_branch_device(struct kref *kref) | |||
| 888 | */ | 888 | */ |
| 889 | list_for_each_entry_safe(port, tmp, &mstb->ports, next) { | 889 | list_for_each_entry_safe(port, tmp, &mstb->ports, next) { |
| 890 | list_del(&port->next); | 890 | list_del(&port->next); |
| 891 | drm_dp_put_port(port); | 891 | drm_dp_mst_topology_put_port(port); |
| 892 | } | 892 | } |
| 893 | 893 | ||
| 894 | /* drop any tx slots msg */ | 894 | /* drop any tx slots msg */ |
| @@ -911,7 +911,7 @@ static void drm_dp_destroy_mst_branch_device(struct kref *kref) | |||
| 911 | kref_put(kref, drm_dp_free_mst_branch_device); | 911 | kref_put(kref, drm_dp_free_mst_branch_device); |
| 912 | } | 912 | } |
| 913 | 913 | ||
| 914 | static void drm_dp_put_mst_branch_device(struct drm_dp_mst_branch *mstb) | 914 | static void drm_dp_mst_topology_put_mstb(struct drm_dp_mst_branch *mstb) |
| 915 | { | 915 | { |
| 916 | kref_put(&mstb->kref, drm_dp_destroy_mst_branch_device); | 916 | kref_put(&mstb->kref, drm_dp_destroy_mst_branch_device); |
| 917 | } | 917 | } |
| @@ -930,7 +930,7 @@ static void drm_dp_port_teardown_pdt(struct drm_dp_mst_port *port, int old_pdt) | |||
| 930 | case DP_PEER_DEVICE_MST_BRANCHING: | 930 | case DP_PEER_DEVICE_MST_BRANCHING: |
| 931 | mstb = port->mstb; | 931 | mstb = port->mstb; |
| 932 | port->mstb = NULL; | 932 | port->mstb = NULL; |
| 933 | drm_dp_put_mst_branch_device(mstb); | 933 | drm_dp_mst_topology_put_mstb(mstb); |
| 934 | break; | 934 | break; |
| 935 | } | 935 | } |
| 936 | } | 936 | } |
| @@ -970,12 +970,14 @@ static void drm_dp_destroy_port(struct kref *kref) | |||
| 970 | kfree(port); | 970 | kfree(port); |
| 971 | } | 971 | } |
| 972 | 972 | ||
| 973 | static void drm_dp_put_port(struct drm_dp_mst_port *port) | 973 | static void drm_dp_mst_topology_put_port(struct drm_dp_mst_port *port) |
| 974 | { | 974 | { |
| 975 | kref_put(&port->kref, drm_dp_destroy_port); | 975 | kref_put(&port->kref, drm_dp_destroy_port); |
| 976 | } | 976 | } |
| 977 | 977 | ||
| 978 | static struct drm_dp_mst_branch *drm_dp_mst_get_validated_mstb_ref_locked(struct drm_dp_mst_branch *mstb, struct drm_dp_mst_branch *to_find) | 978 | static struct drm_dp_mst_branch * |
| 979 | drm_dp_mst_topology_get_mstb_validated_locked(struct drm_dp_mst_branch *mstb, | ||
| 980 | struct drm_dp_mst_branch *to_find) | ||
| 979 | { | 981 | { |
| 980 | struct drm_dp_mst_port *port; | 982 | struct drm_dp_mst_port *port; |
| 981 | struct drm_dp_mst_branch *rmstb; | 983 | struct drm_dp_mst_branch *rmstb; |
| @@ -985,7 +987,8 @@ static struct drm_dp_mst_branch *drm_dp_mst_get_validated_mstb_ref_locked(struct | |||
| 985 | } | 987 | } |
| 986 | list_for_each_entry(port, &mstb->ports, next) { | 988 | list_for_each_entry(port, &mstb->ports, next) { |
| 987 | if (port->mstb) { | 989 | if (port->mstb) { |
| 988 | rmstb = drm_dp_mst_get_validated_mstb_ref_locked(port->mstb, to_find); | 990 | rmstb = drm_dp_mst_topology_get_mstb_validated_locked( |
| 991 | port->mstb, to_find); | ||
| 989 | if (rmstb) | 992 | if (rmstb) |
| 990 | return rmstb; | 993 | return rmstb; |
| 991 | } | 994 | } |
| @@ -993,12 +996,15 @@ static struct drm_dp_mst_branch *drm_dp_mst_get_validated_mstb_ref_locked(struct | |||
| 993 | return NULL; | 996 | return NULL; |
| 994 | } | 997 | } |
| 995 | 998 | ||
| 996 | static struct drm_dp_mst_branch *drm_dp_get_validated_mstb_ref(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_branch *mstb) | 999 | static struct drm_dp_mst_branch * |
| 1000 | drm_dp_mst_topology_get_mstb_validated(struct drm_dp_mst_topology_mgr *mgr, | ||
| 1001 | struct drm_dp_mst_branch *mstb) | ||
| 997 | { | 1002 | { |
| 998 | struct drm_dp_mst_branch *rmstb = NULL; | 1003 | struct drm_dp_mst_branch *rmstb = NULL; |
| 999 | mutex_lock(&mgr->lock); | 1004 | mutex_lock(&mgr->lock); |
| 1000 | if (mgr->mst_primary) | 1005 | if (mgr->mst_primary) |
| 1001 | rmstb = drm_dp_mst_get_validated_mstb_ref_locked(mgr->mst_primary, mstb); | 1006 | rmstb = drm_dp_mst_topology_get_mstb_validated_locked( |
| 1007 | mgr->mst_primary, mstb); | ||
| 1002 | mutex_unlock(&mgr->lock); | 1008 | mutex_unlock(&mgr->lock); |
| 1003 | return rmstb; | 1009 | return rmstb; |
| 1004 | } | 1010 | } |
| @@ -1021,7 +1027,9 @@ static struct drm_dp_mst_port *drm_dp_mst_get_port_ref_locked(struct drm_dp_mst_ | |||
| 1021 | return NULL; | 1027 | return NULL; |
| 1022 | } | 1028 | } |
| 1023 | 1029 | ||
| 1024 | static struct drm_dp_mst_port *drm_dp_get_validated_port_ref(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port) | 1030 | static struct drm_dp_mst_port * |
| 1031 | drm_dp_mst_topology_get_port_validated(struct drm_dp_mst_topology_mgr *mgr, | ||
| 1032 | struct drm_dp_mst_port *port) | ||
| 1025 | { | 1033 | { |
| 1026 | struct drm_dp_mst_port *rport = NULL; | 1034 | struct drm_dp_mst_port *rport = NULL; |
| 1027 | mutex_lock(&mgr->lock); | 1035 | mutex_lock(&mgr->lock); |
| @@ -1215,7 +1223,7 @@ static void drm_dp_add_port(struct drm_dp_mst_branch *mstb, | |||
| 1215 | list_del(&port->next); | 1223 | list_del(&port->next); |
| 1216 | mutex_unlock(&mstb->mgr->lock); | 1224 | mutex_unlock(&mstb->mgr->lock); |
| 1217 | /* drop port list reference */ | 1225 | /* drop port list reference */ |
| 1218 | drm_dp_put_port(port); | 1226 | drm_dp_mst_topology_put_port(port); |
| 1219 | goto out; | 1227 | goto out; |
| 1220 | } | 1228 | } |
| 1221 | if ((port->pdt == DP_PEER_DEVICE_DP_LEGACY_CONV || | 1229 | if ((port->pdt == DP_PEER_DEVICE_DP_LEGACY_CONV || |
| @@ -1230,7 +1238,7 @@ static void drm_dp_add_port(struct drm_dp_mst_branch *mstb, | |||
| 1230 | 1238 | ||
| 1231 | out: | 1239 | out: |
| 1232 | /* put reference to this port */ | 1240 | /* put reference to this port */ |
| 1233 | drm_dp_put_port(port); | 1241 | drm_dp_mst_topology_put_port(port); |
| 1234 | } | 1242 | } |
| 1235 | 1243 | ||
| 1236 | static void drm_dp_update_port(struct drm_dp_mst_branch *mstb, | 1244 | static void drm_dp_update_port(struct drm_dp_mst_branch *mstb, |
| @@ -1265,7 +1273,7 @@ static void drm_dp_update_port(struct drm_dp_mst_branch *mstb, | |||
| 1265 | dowork = true; | 1273 | dowork = true; |
| 1266 | } | 1274 | } |
| 1267 | 1275 | ||
| 1268 | drm_dp_put_port(port); | 1276 | drm_dp_mst_topology_put_port(port); |
| 1269 | if (dowork) | 1277 | if (dowork) |
| 1270 | queue_work(system_long_wq, &mstb->mgr->work); | 1278 | queue_work(system_long_wq, &mstb->mgr->work); |
| 1271 | 1279 | ||
| @@ -1368,10 +1376,11 @@ static void drm_dp_check_and_send_link_address(struct drm_dp_mst_topology_mgr *m | |||
| 1368 | drm_dp_send_enum_path_resources(mgr, mstb, port); | 1376 | drm_dp_send_enum_path_resources(mgr, mstb, port); |
| 1369 | 1377 | ||
| 1370 | if (port->mstb) { | 1378 | if (port->mstb) { |
| 1371 | mstb_child = drm_dp_get_validated_mstb_ref(mgr, port->mstb); | 1379 | mstb_child = drm_dp_mst_topology_get_mstb_validated( |
| 1380 | mgr, port->mstb); | ||
| 1372 | if (mstb_child) { | 1381 | if (mstb_child) { |
| 1373 | drm_dp_check_and_send_link_address(mgr, mstb_child); | 1382 | drm_dp_check_and_send_link_address(mgr, mstb_child); |
| 1374 | drm_dp_put_mst_branch_device(mstb_child); | 1383 | drm_dp_mst_topology_put_mstb(mstb_child); |
| 1375 | } | 1384 | } |
| 1376 | } | 1385 | } |
| 1377 | } | 1386 | } |
| @@ -1390,7 +1399,7 @@ static void drm_dp_mst_link_probe_work(struct work_struct *work) | |||
| 1390 | mutex_unlock(&mgr->lock); | 1399 | mutex_unlock(&mgr->lock); |
| 1391 | if (mstb) { | 1400 | if (mstb) { |
| 1392 | drm_dp_check_and_send_link_address(mgr, mstb); | 1401 | drm_dp_check_and_send_link_address(mgr, mstb); |
| 1393 | drm_dp_put_mst_branch_device(mstb); | 1402 | drm_dp_mst_topology_put_mstb(mstb); |
| 1394 | } | 1403 | } |
| 1395 | } | 1404 | } |
| 1396 | 1405 | ||
| @@ -1732,19 +1741,19 @@ static int drm_dp_payload_send_msg(struct drm_dp_mst_topology_mgr *mgr, | |||
| 1732 | u8 sinks[DRM_DP_MAX_SDP_STREAMS]; | 1741 | u8 sinks[DRM_DP_MAX_SDP_STREAMS]; |
| 1733 | int i; | 1742 | int i; |
| 1734 | 1743 | ||
| 1735 | port = drm_dp_get_validated_port_ref(mgr, port); | 1744 | port = drm_dp_mst_topology_get_port_validated(mgr, port); |
| 1736 | if (!port) | 1745 | if (!port) |
| 1737 | return -EINVAL; | 1746 | return -EINVAL; |
| 1738 | 1747 | ||
| 1739 | port_num = port->port_num; | 1748 | port_num = port->port_num; |
| 1740 | mstb = drm_dp_get_validated_mstb_ref(mgr, port->parent); | 1749 | mstb = drm_dp_mst_topology_get_mstb_validated(mgr, port->parent); |
| 1741 | if (!mstb) { | 1750 | if (!mstb) { |
| 1742 | mstb = drm_dp_get_last_connected_port_and_mstb(mgr, | 1751 | mstb = drm_dp_get_last_connected_port_and_mstb(mgr, |
| 1743 | port->parent, | 1752 | port->parent, |
| 1744 | &port_num); | 1753 | &port_num); |
| 1745 | 1754 | ||
| 1746 | if (!mstb) { | 1755 | if (!mstb) { |
| 1747 | drm_dp_put_port(port); | 1756 | drm_dp_mst_topology_put_port(port); |
| 1748 | return -EINVAL; | 1757 | return -EINVAL; |
| 1749 | } | 1758 | } |
| 1750 | } | 1759 | } |
| @@ -1774,8 +1783,8 @@ static int drm_dp_payload_send_msg(struct drm_dp_mst_topology_mgr *mgr, | |||
| 1774 | } | 1783 | } |
| 1775 | kfree(txmsg); | 1784 | kfree(txmsg); |
| 1776 | fail_put: | 1785 | fail_put: |
| 1777 | drm_dp_put_mst_branch_device(mstb); | 1786 | drm_dp_mst_topology_put_mstb(mstb); |
| 1778 | drm_dp_put_port(port); | 1787 | drm_dp_mst_topology_put_port(port); |
| 1779 | return ret; | 1788 | return ret; |
| 1780 | } | 1789 | } |
| 1781 | 1790 | ||
| @@ -1785,13 +1794,13 @@ int drm_dp_send_power_updown_phy(struct drm_dp_mst_topology_mgr *mgr, | |||
| 1785 | struct drm_dp_sideband_msg_tx *txmsg; | 1794 | struct drm_dp_sideband_msg_tx *txmsg; |
| 1786 | int len, ret; | 1795 | int len, ret; |
| 1787 | 1796 | ||
| 1788 | port = drm_dp_get_validated_port_ref(mgr, port); | 1797 | port = drm_dp_mst_topology_get_port_validated(mgr, port); |
| 1789 | if (!port) | 1798 | if (!port) |
| 1790 | return -EINVAL; | 1799 | return -EINVAL; |
| 1791 | 1800 | ||
| 1792 | txmsg = kzalloc(sizeof(*txmsg), GFP_KERNEL); | 1801 | txmsg = kzalloc(sizeof(*txmsg), GFP_KERNEL); |
| 1793 | if (!txmsg) { | 1802 | if (!txmsg) { |
| 1794 | drm_dp_put_port(port); | 1803 | drm_dp_mst_topology_put_port(port); |
| 1795 | return -ENOMEM; | 1804 | return -ENOMEM; |
| 1796 | } | 1805 | } |
| 1797 | 1806 | ||
| @@ -1807,7 +1816,7 @@ int drm_dp_send_power_updown_phy(struct drm_dp_mst_topology_mgr *mgr, | |||
| 1807 | ret = 0; | 1816 | ret = 0; |
| 1808 | } | 1817 | } |
| 1809 | kfree(txmsg); | 1818 | kfree(txmsg); |
| 1810 | drm_dp_put_port(port); | 1819 | drm_dp_mst_topology_put_port(port); |
| 1811 | 1820 | ||
| 1812 | return ret; | 1821 | return ret; |
| 1813 | } | 1822 | } |
| @@ -1896,7 +1905,8 @@ int drm_dp_update_payload_part1(struct drm_dp_mst_topology_mgr *mgr) | |||
| 1896 | if (vcpi) { | 1905 | if (vcpi) { |
| 1897 | port = container_of(vcpi, struct drm_dp_mst_port, | 1906 | port = container_of(vcpi, struct drm_dp_mst_port, |
| 1898 | vcpi); | 1907 | vcpi); |
| 1899 | port = drm_dp_get_validated_port_ref(mgr, port); | 1908 | port = drm_dp_mst_topology_get_port_validated(mgr, |
| 1909 | port); | ||
| 1900 | if (!port) { | 1910 | if (!port) { |
| 1901 | mutex_unlock(&mgr->payload_lock); | 1911 | mutex_unlock(&mgr->payload_lock); |
| 1902 | return -EINVAL; | 1912 | return -EINVAL; |
| @@ -1933,7 +1943,7 @@ int drm_dp_update_payload_part1(struct drm_dp_mst_topology_mgr *mgr) | |||
| 1933 | cur_slots += req_payload.num_slots; | 1943 | cur_slots += req_payload.num_slots; |
| 1934 | 1944 | ||
| 1935 | if (port) | 1945 | if (port) |
| 1936 | drm_dp_put_port(port); | 1946 | drm_dp_mst_topology_put_port(port); |
| 1937 | } | 1947 | } |
| 1938 | 1948 | ||
| 1939 | for (i = 0; i < mgr->max_payloads; i++) { | 1949 | for (i = 0; i < mgr->max_payloads; i++) { |
| @@ -2032,7 +2042,7 @@ static int drm_dp_send_dpcd_write(struct drm_dp_mst_topology_mgr *mgr, | |||
| 2032 | struct drm_dp_sideband_msg_tx *txmsg; | 2042 | struct drm_dp_sideband_msg_tx *txmsg; |
| 2033 | struct drm_dp_mst_branch *mstb; | 2043 | struct drm_dp_mst_branch *mstb; |
| 2034 | 2044 | ||
| 2035 | mstb = drm_dp_get_validated_mstb_ref(mgr, port->parent); | 2045 | mstb = drm_dp_mst_topology_get_mstb_validated(mgr, port->parent); |
| 2036 | if (!mstb) | 2046 | if (!mstb) |
| 2037 | return -EINVAL; | 2047 | return -EINVAL; |
| 2038 | 2048 | ||
| @@ -2056,7 +2066,7 @@ static int drm_dp_send_dpcd_write(struct drm_dp_mst_topology_mgr *mgr, | |||
| 2056 | } | 2066 | } |
| 2057 | kfree(txmsg); | 2067 | kfree(txmsg); |
| 2058 | fail_put: | 2068 | fail_put: |
| 2059 | drm_dp_put_mst_branch_device(mstb); | 2069 | drm_dp_mst_topology_put_mstb(mstb); |
| 2060 | return ret; | 2070 | return ret; |
| 2061 | } | 2071 | } |
| 2062 | 2072 | ||
| @@ -2200,7 +2210,7 @@ int drm_dp_mst_topology_mgr_set_mst(struct drm_dp_mst_topology_mgr *mgr, bool ms | |||
| 2200 | out_unlock: | 2210 | out_unlock: |
| 2201 | mutex_unlock(&mgr->lock); | 2211 | mutex_unlock(&mgr->lock); |
| 2202 | if (mstb) | 2212 | if (mstb) |
| 2203 | drm_dp_put_mst_branch_device(mstb); | 2213 | drm_dp_mst_topology_put_mstb(mstb); |
| 2204 | return ret; | 2214 | return ret; |
| 2205 | 2215 | ||
| 2206 | } | 2216 | } |
| @@ -2365,7 +2375,7 @@ static int drm_dp_mst_handle_down_rep(struct drm_dp_mst_topology_mgr *mgr) | |||
| 2365 | mgr->down_rep_recv.initial_hdr.lct, | 2375 | mgr->down_rep_recv.initial_hdr.lct, |
| 2366 | mgr->down_rep_recv.initial_hdr.rad[0], | 2376 | mgr->down_rep_recv.initial_hdr.rad[0], |
| 2367 | mgr->down_rep_recv.msg[0]); | 2377 | mgr->down_rep_recv.msg[0]); |
| 2368 | drm_dp_put_mst_branch_device(mstb); | 2378 | drm_dp_mst_topology_put_mstb(mstb); |
| 2369 | memset(&mgr->down_rep_recv, 0, sizeof(struct drm_dp_sideband_msg_rx)); | 2379 | memset(&mgr->down_rep_recv, 0, sizeof(struct drm_dp_sideband_msg_rx)); |
| 2370 | return 0; | 2380 | return 0; |
| 2371 | } | 2381 | } |
| @@ -2376,7 +2386,7 @@ static int drm_dp_mst_handle_down_rep(struct drm_dp_mst_topology_mgr *mgr) | |||
| 2376 | } | 2386 | } |
| 2377 | 2387 | ||
| 2378 | memset(&mgr->down_rep_recv, 0, sizeof(struct drm_dp_sideband_msg_rx)); | 2388 | memset(&mgr->down_rep_recv, 0, sizeof(struct drm_dp_sideband_msg_rx)); |
| 2379 | drm_dp_put_mst_branch_device(mstb); | 2389 | drm_dp_mst_topology_put_mstb(mstb); |
| 2380 | 2390 | ||
| 2381 | mutex_lock(&mgr->qlock); | 2391 | mutex_lock(&mgr->qlock); |
| 2382 | txmsg->state = DRM_DP_SIDEBAND_TX_RX; | 2392 | txmsg->state = DRM_DP_SIDEBAND_TX_RX; |
| @@ -2449,7 +2459,7 @@ static int drm_dp_mst_handle_up_req(struct drm_dp_mst_topology_mgr *mgr) | |||
| 2449 | } | 2459 | } |
| 2450 | 2460 | ||
| 2451 | if (mstb) | 2461 | if (mstb) |
| 2452 | drm_dp_put_mst_branch_device(mstb); | 2462 | drm_dp_mst_topology_put_mstb(mstb); |
| 2453 | 2463 | ||
| 2454 | memset(&mgr->up_req_recv, 0, sizeof(struct drm_dp_sideband_msg_rx)); | 2464 | memset(&mgr->up_req_recv, 0, sizeof(struct drm_dp_sideband_msg_rx)); |
| 2455 | } | 2465 | } |
| @@ -2509,7 +2519,7 @@ enum drm_connector_status drm_dp_mst_detect_port(struct drm_connector *connector | |||
| 2509 | enum drm_connector_status status = connector_status_disconnected; | 2519 | enum drm_connector_status status = connector_status_disconnected; |
| 2510 | 2520 | ||
| 2511 | /* we need to search for the port in the mgr in case its gone */ | 2521 | /* we need to search for the port in the mgr in case its gone */ |
| 2512 | port = drm_dp_get_validated_port_ref(mgr, port); | 2522 | port = drm_dp_mst_topology_get_port_validated(mgr, port); |
| 2513 | if (!port) | 2523 | if (!port) |
| 2514 | return connector_status_disconnected; | 2524 | return connector_status_disconnected; |
| 2515 | 2525 | ||
| @@ -2534,7 +2544,7 @@ enum drm_connector_status drm_dp_mst_detect_port(struct drm_connector *connector | |||
| 2534 | break; | 2544 | break; |
| 2535 | } | 2545 | } |
| 2536 | out: | 2546 | out: |
| 2537 | drm_dp_put_port(port); | 2547 | drm_dp_mst_topology_put_port(port); |
| 2538 | return status; | 2548 | return status; |
| 2539 | } | 2549 | } |
| 2540 | EXPORT_SYMBOL(drm_dp_mst_detect_port); | 2550 | EXPORT_SYMBOL(drm_dp_mst_detect_port); |
| @@ -2551,11 +2561,11 @@ bool drm_dp_mst_port_has_audio(struct drm_dp_mst_topology_mgr *mgr, | |||
| 2551 | { | 2561 | { |
| 2552 | bool ret = false; | 2562 | bool ret = false; |
| 2553 | 2563 | ||
| 2554 | port = drm_dp_get_validated_port_ref(mgr, port); | 2564 | port = drm_dp_mst_topology_get_port_validated(mgr, port); |
| 2555 | if (!port) | 2565 | if (!port) |
| 2556 | return ret; | 2566 | return ret; |
| 2557 | ret = port->has_audio; | 2567 | ret = port->has_audio; |
| 2558 | drm_dp_put_port(port); | 2568 | drm_dp_mst_topology_put_port(port); |
| 2559 | return ret; | 2569 | return ret; |
| 2560 | } | 2570 | } |
| 2561 | EXPORT_SYMBOL(drm_dp_mst_port_has_audio); | 2571 | EXPORT_SYMBOL(drm_dp_mst_port_has_audio); |
| @@ -2575,7 +2585,7 @@ struct edid *drm_dp_mst_get_edid(struct drm_connector *connector, struct drm_dp_ | |||
| 2575 | struct edid *edid = NULL; | 2585 | struct edid *edid = NULL; |
| 2576 | 2586 | ||
| 2577 | /* we need to search for the port in the mgr in case its gone */ | 2587 | /* we need to search for the port in the mgr in case its gone */ |
| 2578 | port = drm_dp_get_validated_port_ref(mgr, port); | 2588 | port = drm_dp_mst_topology_get_port_validated(mgr, port); |
| 2579 | if (!port) | 2589 | if (!port) |
| 2580 | return NULL; | 2590 | return NULL; |
| 2581 | 2591 | ||
| @@ -2586,7 +2596,7 @@ struct edid *drm_dp_mst_get_edid(struct drm_connector *connector, struct drm_dp_ | |||
| 2586 | drm_connector_set_tile_property(connector); | 2596 | drm_connector_set_tile_property(connector); |
| 2587 | } | 2597 | } |
| 2588 | port->has_audio = drm_detect_monitor_audio(edid); | 2598 | port->has_audio = drm_detect_monitor_audio(edid); |
| 2589 | drm_dp_put_port(port); | 2599 | drm_dp_mst_topology_put_port(port); |
| 2590 | return edid; | 2600 | return edid; |
| 2591 | } | 2601 | } |
| 2592 | EXPORT_SYMBOL(drm_dp_mst_get_edid); | 2602 | EXPORT_SYMBOL(drm_dp_mst_get_edid); |
| @@ -2657,7 +2667,7 @@ int drm_dp_atomic_find_vcpi_slots(struct drm_atomic_state *state, | |||
| 2657 | if (IS_ERR(topology_state)) | 2667 | if (IS_ERR(topology_state)) |
| 2658 | return PTR_ERR(topology_state); | 2668 | return PTR_ERR(topology_state); |
| 2659 | 2669 | ||
| 2660 | port = drm_dp_get_validated_port_ref(mgr, port); | 2670 | port = drm_dp_mst_topology_get_port_validated(mgr, port); |
| 2661 | if (port == NULL) | 2671 | if (port == NULL) |
| 2662 | return -EINVAL; | 2672 | return -EINVAL; |
| 2663 | req_slots = DIV_ROUND_UP(pbn, mgr->pbn_div); | 2673 | req_slots = DIV_ROUND_UP(pbn, mgr->pbn_div); |
| @@ -2665,14 +2675,14 @@ int drm_dp_atomic_find_vcpi_slots(struct drm_atomic_state *state, | |||
| 2665 | req_slots, topology_state->avail_slots); | 2675 | req_slots, topology_state->avail_slots); |
| 2666 | 2676 | ||
| 2667 | if (req_slots > topology_state->avail_slots) { | 2677 | if (req_slots > topology_state->avail_slots) { |
| 2668 | drm_dp_put_port(port); | 2678 | drm_dp_mst_topology_put_port(port); |
| 2669 | return -ENOSPC; | 2679 | return -ENOSPC; |
| 2670 | } | 2680 | } |
| 2671 | 2681 | ||
| 2672 | topology_state->avail_slots -= req_slots; | 2682 | topology_state->avail_slots -= req_slots; |
| 2673 | DRM_DEBUG_KMS("vcpi slots avail=%d", topology_state->avail_slots); | 2683 | DRM_DEBUG_KMS("vcpi slots avail=%d", topology_state->avail_slots); |
| 2674 | 2684 | ||
| 2675 | drm_dp_put_port(port); | 2685 | drm_dp_mst_topology_put_port(port); |
| 2676 | return req_slots; | 2686 | return req_slots; |
| 2677 | } | 2687 | } |
| 2678 | EXPORT_SYMBOL(drm_dp_atomic_find_vcpi_slots); | 2688 | EXPORT_SYMBOL(drm_dp_atomic_find_vcpi_slots); |
| @@ -2723,7 +2733,7 @@ bool drm_dp_mst_allocate_vcpi(struct drm_dp_mst_topology_mgr *mgr, | |||
| 2723 | { | 2733 | { |
| 2724 | int ret; | 2734 | int ret; |
| 2725 | 2735 | ||
| 2726 | port = drm_dp_get_validated_port_ref(mgr, port); | 2736 | port = drm_dp_mst_topology_get_port_validated(mgr, port); |
| 2727 | if (!port) | 2737 | if (!port) |
| 2728 | return false; | 2738 | return false; |
| 2729 | 2739 | ||
| @@ -2734,7 +2744,7 @@ bool drm_dp_mst_allocate_vcpi(struct drm_dp_mst_topology_mgr *mgr, | |||
| 2734 | DRM_DEBUG_KMS("payload: vcpi %d already allocated for pbn %d - requested pbn %d\n", | 2744 | DRM_DEBUG_KMS("payload: vcpi %d already allocated for pbn %d - requested pbn %d\n", |
| 2735 | port->vcpi.vcpi, port->vcpi.pbn, pbn); | 2745 | port->vcpi.vcpi, port->vcpi.pbn, pbn); |
| 2736 | if (pbn == port->vcpi.pbn) { | 2746 | if (pbn == port->vcpi.pbn) { |
| 2737 | drm_dp_put_port(port); | 2747 | drm_dp_mst_topology_put_port(port); |
| 2738 | return true; | 2748 | return true; |
| 2739 | } | 2749 | } |
| 2740 | } | 2750 | } |
| @@ -2748,7 +2758,7 @@ bool drm_dp_mst_allocate_vcpi(struct drm_dp_mst_topology_mgr *mgr, | |||
| 2748 | DRM_DEBUG_KMS("initing vcpi for pbn=%d slots=%d\n", | 2758 | DRM_DEBUG_KMS("initing vcpi for pbn=%d slots=%d\n", |
| 2749 | pbn, port->vcpi.num_slots); | 2759 | pbn, port->vcpi.num_slots); |
| 2750 | 2760 | ||
| 2751 | drm_dp_put_port(port); | 2761 | drm_dp_mst_topology_put_port(port); |
| 2752 | return true; | 2762 | return true; |
| 2753 | out: | 2763 | out: |
| 2754 | return false; | 2764 | return false; |
| @@ -2758,12 +2768,12 @@ EXPORT_SYMBOL(drm_dp_mst_allocate_vcpi); | |||
| 2758 | int drm_dp_mst_get_vcpi_slots(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port) | 2768 | int drm_dp_mst_get_vcpi_slots(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port) |
| 2759 | { | 2769 | { |
| 2760 | int slots = 0; | 2770 | int slots = 0; |
| 2761 | port = drm_dp_get_validated_port_ref(mgr, port); | 2771 | port = drm_dp_mst_topology_get_port_validated(mgr, port); |
| 2762 | if (!port) | 2772 | if (!port) |
| 2763 | return slots; | 2773 | return slots; |
| 2764 | 2774 | ||
| 2765 | slots = port->vcpi.num_slots; | 2775 | slots = port->vcpi.num_slots; |
| 2766 | drm_dp_put_port(port); | 2776 | drm_dp_mst_topology_put_port(port); |
| 2767 | return slots; | 2777 | return slots; |
| 2768 | } | 2778 | } |
| 2769 | EXPORT_SYMBOL(drm_dp_mst_get_vcpi_slots); | 2779 | EXPORT_SYMBOL(drm_dp_mst_get_vcpi_slots); |
| @@ -2777,11 +2787,11 @@ EXPORT_SYMBOL(drm_dp_mst_get_vcpi_slots); | |||
| 2777 | */ | 2787 | */ |
| 2778 | void drm_dp_mst_reset_vcpi_slots(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port) | 2788 | void drm_dp_mst_reset_vcpi_slots(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port) |
| 2779 | { | 2789 | { |
| 2780 | port = drm_dp_get_validated_port_ref(mgr, port); | 2790 | port = drm_dp_mst_topology_get_port_validated(mgr, port); |
| 2781 | if (!port) | 2791 | if (!port) |
| 2782 | return; | 2792 | return; |
| 2783 | port->vcpi.num_slots = 0; | 2793 | port->vcpi.num_slots = 0; |
| 2784 | drm_dp_put_port(port); | 2794 | drm_dp_mst_topology_put_port(port); |
| 2785 | } | 2795 | } |
| 2786 | EXPORT_SYMBOL(drm_dp_mst_reset_vcpi_slots); | 2796 | EXPORT_SYMBOL(drm_dp_mst_reset_vcpi_slots); |
| 2787 | 2797 | ||
| @@ -2793,7 +2803,7 @@ EXPORT_SYMBOL(drm_dp_mst_reset_vcpi_slots); | |||
| 2793 | void drm_dp_mst_deallocate_vcpi(struct drm_dp_mst_topology_mgr *mgr, | 2803 | void drm_dp_mst_deallocate_vcpi(struct drm_dp_mst_topology_mgr *mgr, |
| 2794 | struct drm_dp_mst_port *port) | 2804 | struct drm_dp_mst_port *port) |
| 2795 | { | 2805 | { |
| 2796 | port = drm_dp_get_validated_port_ref(mgr, port); | 2806 | port = drm_dp_mst_topology_get_port_validated(mgr, port); |
| 2797 | if (!port) | 2807 | if (!port) |
| 2798 | return; | 2808 | return; |
| 2799 | 2809 | ||
| @@ -2802,7 +2812,7 @@ void drm_dp_mst_deallocate_vcpi(struct drm_dp_mst_topology_mgr *mgr, | |||
| 2802 | port->vcpi.pbn = 0; | 2812 | port->vcpi.pbn = 0; |
| 2803 | port->vcpi.aligned_pbn = 0; | 2813 | port->vcpi.aligned_pbn = 0; |
| 2804 | port->vcpi.vcpi = 0; | 2814 | port->vcpi.vcpi = 0; |
| 2805 | drm_dp_put_port(port); | 2815 | drm_dp_mst_topology_put_port(port); |
| 2806 | } | 2816 | } |
| 2807 | EXPORT_SYMBOL(drm_dp_mst_deallocate_vcpi); | 2817 | EXPORT_SYMBOL(drm_dp_mst_deallocate_vcpi); |
| 2808 | 2818 | ||
| @@ -3302,7 +3312,7 @@ static int drm_dp_mst_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs | |||
| 3302 | struct drm_dp_sideband_msg_tx *txmsg = NULL; | 3312 | struct drm_dp_sideband_msg_tx *txmsg = NULL; |
| 3303 | int ret; | 3313 | int ret; |
| 3304 | 3314 | ||
| 3305 | mstb = drm_dp_get_validated_mstb_ref(mgr, port->parent); | 3315 | mstb = drm_dp_mst_topology_get_mstb_validated(mgr, port->parent); |
| 3306 | if (!mstb) | 3316 | if (!mstb) |
| 3307 | return -EREMOTEIO; | 3317 | return -EREMOTEIO; |
| 3308 | 3318 | ||
| @@ -3352,7 +3362,7 @@ static int drm_dp_mst_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs | |||
| 3352 | } | 3362 | } |
| 3353 | out: | 3363 | out: |
| 3354 | kfree(txmsg); | 3364 | kfree(txmsg); |
| 3355 | drm_dp_put_mst_branch_device(mstb); | 3365 | drm_dp_mst_topology_put_mstb(mstb); |
| 3356 | return ret; | 3366 | return ret; |
| 3357 | } | 3367 | } |
| 3358 | 3368 | ||
