Lines Matching refs:mstb
82 struct drm_dp_mst_branch *mstb);
86 struct drm_dp_mst_branch *mstb);
89 struct drm_dp_mst_branch *mstb,
1253 static int drm_dp_mst_wait_tx_reply(struct drm_dp_mst_branch *mstb, in drm_dp_mst_wait_tx_reply() argument
1256 struct drm_dp_mst_topology_mgr *mgr = mstb->mgr; in drm_dp_mst_wait_tx_reply()
1322 struct drm_dp_mst_branch *mstb; in drm_dp_add_mst_branch_device() local
1324 mstb = kzalloc(sizeof(*mstb), GFP_KERNEL); in drm_dp_add_mst_branch_device()
1325 if (!mstb) in drm_dp_add_mst_branch_device()
1328 mstb->lct = lct; in drm_dp_add_mst_branch_device()
1330 memcpy(mstb->rad, rad, lct / 2); in drm_dp_add_mst_branch_device()
1331 INIT_LIST_HEAD(&mstb->ports); in drm_dp_add_mst_branch_device()
1332 kref_init(&mstb->topology_kref); in drm_dp_add_mst_branch_device()
1333 kref_init(&mstb->malloc_kref); in drm_dp_add_mst_branch_device()
1334 return mstb; in drm_dp_add_mst_branch_device()
1339 struct drm_dp_mst_branch *mstb = in drm_dp_free_mst_branch_device() local
1342 if (mstb->port_parent) in drm_dp_free_mst_branch_device()
1343 drm_dp_mst_put_port_malloc(mstb->port_parent); in drm_dp_free_mst_branch_device()
1345 kfree(mstb); in drm_dp_free_mst_branch_device()
1448 drm_dp_mst_get_mstb_malloc(struct drm_dp_mst_branch *mstb) in drm_dp_mst_get_mstb_malloc() argument
1450 kref_get(&mstb->malloc_kref); in drm_dp_mst_get_mstb_malloc()
1451 drm_dbg(mstb->mgr->dev, "mstb %p (%d)\n", mstb, kref_read(&mstb->malloc_kref)); in drm_dp_mst_get_mstb_malloc()
1466 drm_dp_mst_put_mstb_malloc(struct drm_dp_mst_branch *mstb) in drm_dp_mst_put_mstb_malloc() argument
1468 drm_dbg(mstb->mgr->dev, "mstb %p (%d)\n", mstb, kref_read(&mstb->malloc_kref) - 1); in drm_dp_mst_put_mstb_malloc()
1469 kref_put(&mstb->malloc_kref, drm_dp_free_mst_branch_device); in drm_dp_mst_put_mstb_malloc()
1641 drm_dp_mst_dump_mstb_topology_history(struct drm_dp_mst_branch *mstb) in drm_dp_mst_dump_mstb_topology_history() argument
1643 __dump_topology_ref_history(mstb->mgr->dev, &mstb->topology_ref_history, in drm_dp_mst_dump_mstb_topology_history()
1644 mstb, "MSTB"); in drm_dp_mst_dump_mstb_topology_history()
1655 save_mstb_topology_ref(struct drm_dp_mst_branch *mstb, in save_mstb_topology_ref() argument
1658 __topology_ref_save(mstb->mgr, &mstb->topology_ref_history, type); in save_mstb_topology_ref()
1685 drm_dp_mst_dump_mstb_topology_history(struct drm_dp_mst_branch *mstb) {} in drm_dp_mst_dump_mstb_topology_history() argument
1688 #define save_mstb_topology_ref(mstb, type) argument
1708 struct drm_dp_mst_branch *mstb = in drm_dp_destroy_mst_branch_device() local
1710 struct drm_dp_mst_topology_mgr *mgr = mstb->mgr; in drm_dp_destroy_mst_branch_device()
1712 drm_dp_mst_dump_mstb_topology_history(mstb); in drm_dp_destroy_mst_branch_device()
1714 INIT_LIST_HEAD(&mstb->destroy_next); in drm_dp_destroy_mst_branch_device()
1721 list_add(&mstb->destroy_next, &mgr->destroy_branch_device_list); in drm_dp_destroy_mst_branch_device()
1749 drm_dp_mst_topology_try_get_mstb(struct drm_dp_mst_branch *mstb) in drm_dp_mst_topology_try_get_mstb() argument
1753 topology_ref_history_lock(mstb->mgr); in drm_dp_mst_topology_try_get_mstb()
1754 ret = kref_get_unless_zero(&mstb->topology_kref); in drm_dp_mst_topology_try_get_mstb()
1756 drm_dbg(mstb->mgr->dev, "mstb %p (%d)\n", mstb, kref_read(&mstb->topology_kref)); in drm_dp_mst_topology_try_get_mstb()
1757 save_mstb_topology_ref(mstb, DRM_DP_MST_TOPOLOGY_REF_GET); in drm_dp_mst_topology_try_get_mstb()
1760 topology_ref_history_unlock(mstb->mgr); in drm_dp_mst_topology_try_get_mstb()
1779 static void drm_dp_mst_topology_get_mstb(struct drm_dp_mst_branch *mstb) in drm_dp_mst_topology_get_mstb() argument
1781 topology_ref_history_lock(mstb->mgr); in drm_dp_mst_topology_get_mstb()
1783 save_mstb_topology_ref(mstb, DRM_DP_MST_TOPOLOGY_REF_GET); in drm_dp_mst_topology_get_mstb()
1784 WARN_ON(kref_read(&mstb->topology_kref) == 0); in drm_dp_mst_topology_get_mstb()
1785 kref_get(&mstb->topology_kref); in drm_dp_mst_topology_get_mstb()
1786 drm_dbg(mstb->mgr->dev, "mstb %p (%d)\n", mstb, kref_read(&mstb->topology_kref)); in drm_dp_mst_topology_get_mstb()
1788 topology_ref_history_unlock(mstb->mgr); in drm_dp_mst_topology_get_mstb()
1804 drm_dp_mst_topology_put_mstb(struct drm_dp_mst_branch *mstb) in drm_dp_mst_topology_put_mstb() argument
1806 topology_ref_history_lock(mstb->mgr); in drm_dp_mst_topology_put_mstb()
1808 drm_dbg(mstb->mgr->dev, "mstb %p (%d)\n", mstb, kref_read(&mstb->topology_kref) - 1); in drm_dp_mst_topology_put_mstb()
1809 save_mstb_topology_ref(mstb, DRM_DP_MST_TOPOLOGY_REF_PUT); in drm_dp_mst_topology_put_mstb()
1811 topology_ref_history_unlock(mstb->mgr); in drm_dp_mst_topology_put_mstb()
1812 kref_put(&mstb->topology_kref, drm_dp_destroy_mst_branch_device); in drm_dp_mst_topology_put_mstb()
1927 drm_dp_mst_topology_get_mstb_validated_locked(struct drm_dp_mst_branch *mstb, in drm_dp_mst_topology_get_mstb_validated_locked() argument
1933 if (to_find == mstb) in drm_dp_mst_topology_get_mstb_validated_locked()
1934 return mstb; in drm_dp_mst_topology_get_mstb_validated_locked()
1936 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_mst_topology_get_mstb_validated_locked()
1937 if (port->mstb) { in drm_dp_mst_topology_get_mstb_validated_locked()
1939 port->mstb, to_find); in drm_dp_mst_topology_get_mstb_validated_locked()
1949 struct drm_dp_mst_branch *mstb) in drm_dp_mst_topology_get_mstb_validated() argument
1956 mgr->mst_primary, mstb); in drm_dp_mst_topology_get_mstb_validated()
1966 drm_dp_mst_topology_get_port_validated_locked(struct drm_dp_mst_branch *mstb, in drm_dp_mst_topology_get_port_validated_locked() argument
1971 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_mst_topology_get_port_validated_locked()
1975 if (port->mstb) { in drm_dp_mst_topology_get_port_validated_locked()
1977 port->mstb, to_find); in drm_dp_mst_topology_get_port_validated_locked()
2003 static struct drm_dp_mst_port *drm_dp_get_port(struct drm_dp_mst_branch *mstb, u8 port_num) in drm_dp_get_port() argument
2008 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_get_port()
2061 struct drm_dp_mst_branch *mstb; in drm_dp_port_set_pdt() local
2086 drm_dp_mst_topology_put_mstb(port->mstb); in drm_dp_port_set_pdt()
2087 port->mstb = NULL; in drm_dp_port_set_pdt()
2101 mstb = drm_dp_add_mst_branch_device(lct, rad); in drm_dp_port_set_pdt()
2102 if (!mstb) { in drm_dp_port_set_pdt()
2109 port->mstb = mstb; in drm_dp_port_set_pdt()
2110 mstb->mgr = port->mgr; in drm_dp_port_set_pdt()
2111 mstb->port_parent = port; in drm_dp_port_set_pdt()
2177 static int drm_dp_check_mstb_guid(struct drm_dp_mst_branch *mstb, guid_t *guid) in drm_dp_check_mstb_guid() argument
2181 guid_copy(&mstb->guid, guid); in drm_dp_check_mstb_guid()
2183 if (!drm_dp_validate_guid(mstb->mgr, &mstb->guid)) { in drm_dp_check_mstb_guid()
2186 export_guid(buf, &mstb->guid); in drm_dp_check_mstb_guid()
2188 if (mstb->port_parent) { in drm_dp_check_mstb_guid()
2189 ret = drm_dp_send_dpcd_write(mstb->mgr, in drm_dp_check_mstb_guid()
2190 mstb->port_parent, in drm_dp_check_mstb_guid()
2193 ret = drm_dp_dpcd_write(mstb->mgr->aux, in drm_dp_check_mstb_guid()
2204 static void build_mst_prop_path(const struct drm_dp_mst_branch *mstb, in build_mst_prop_path() argument
2212 snprintf(proppath, proppath_size, "mst:%d", mstb->mgr->conn_base_id); in build_mst_prop_path()
2213 for (i = 0; i < (mstb->lct - 1); i++) { in build_mst_prop_path()
2215 int port_num = (mstb->rad[i / 2] >> shift) & 0xf; in build_mst_prop_path()
2265 drm_dp_mst_port_add_connector(struct drm_dp_mst_branch *mstb, in drm_dp_mst_port_add_connector() argument
2272 build_mst_prop_path(mstb, port->port_num, proppath, sizeof(proppath)); in drm_dp_mst_port_add_connector()
2310 struct drm_dp_mst_branch *mstb, u8 port_number) in drm_dp_mst_add_port() argument
2319 port->parent = mstb; in drm_dp_mst_add_port()
2334 drm_dp_mst_get_mstb_malloc(mstb); in drm_dp_mst_add_port()
2340 drm_dp_mst_handle_link_address_port(struct drm_dp_mst_branch *mstb, in drm_dp_mst_handle_link_address_port() argument
2344 struct drm_dp_mst_topology_mgr *mgr = mstb->mgr; in drm_dp_mst_handle_link_address_port()
2351 port = drm_dp_get_port(mstb, port_msg->port_number); in drm_dp_mst_handle_link_address_port()
2353 port = drm_dp_mst_add_port(dev, mgr, mstb, in drm_dp_mst_handle_link_address_port()
2365 port = drm_dp_mst_add_port(dev, mgr, mstb, in drm_dp_mst_handle_link_address_port()
2404 list_add(&port->next, &mstb->ports); in drm_dp_mst_handle_link_address_port()
2405 mstb->num_ports++; in drm_dp_mst_handle_link_address_port()
2414 ret = drm_dp_send_enum_path_resources(mgr, mstb, in drm_dp_mst_handle_link_address_port()
2442 drm_dp_mst_port_add_connector(mstb, port); in drm_dp_mst_handle_link_address_port()
2444 if (send_link_addr && port->mstb) { in drm_dp_mst_handle_link_address_port()
2445 ret = drm_dp_send_link_address(mgr, port->mstb); in drm_dp_mst_handle_link_address_port()
2466 drm_dp_mst_handle_conn_stat(struct drm_dp_mst_branch *mstb, in drm_dp_mst_handle_conn_stat() argument
2469 struct drm_dp_mst_topology_mgr *mgr = mstb->mgr; in drm_dp_mst_handle_conn_stat()
2476 port = drm_dp_get_port(mstb, conn_stat->port_number); in drm_dp_mst_handle_conn_stat()
2488 mstb->link_address_sent = false; in drm_dp_mst_handle_conn_stat()
2498 mstb->link_address_sent = false; in drm_dp_mst_handle_conn_stat()
2509 drm_dp_send_enum_path_resources(mgr, mstb, port); in drm_dp_mst_handle_conn_stat()
2527 drm_dp_mst_port_add_connector(mstb, port); in drm_dp_mst_handle_conn_stat()
2537 struct drm_dp_mst_branch *mstb; in drm_dp_get_mst_branch_device() local
2543 mstb = mgr->mst_primary; in drm_dp_get_mst_branch_device()
2545 if (!mstb) in drm_dp_get_mst_branch_device()
2552 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_get_mst_branch_device()
2554 mstb = port->mstb; in drm_dp_get_mst_branch_device()
2555 if (!mstb) { in drm_dp_get_mst_branch_device()
2566 ret = drm_dp_mst_topology_try_get_mstb(mstb); in drm_dp_get_mst_branch_device()
2568 mstb = NULL; in drm_dp_get_mst_branch_device()
2571 return mstb; in drm_dp_get_mst_branch_device()
2575 get_mst_branch_device_by_guid_helper(struct drm_dp_mst_branch *mstb, in get_mst_branch_device_by_guid_helper() argument
2581 if (!mstb) in get_mst_branch_device_by_guid_helper()
2584 if (guid_equal(&mstb->guid, guid)) in get_mst_branch_device_by_guid_helper()
2585 return mstb; in get_mst_branch_device_by_guid_helper()
2587 list_for_each_entry(port, &mstb->ports, next) { in get_mst_branch_device_by_guid_helper()
2588 found_mstb = get_mst_branch_device_by_guid_helper(port->mstb, guid); in get_mst_branch_device_by_guid_helper()
2601 struct drm_dp_mst_branch *mstb; in drm_dp_get_mst_branch_device_by_guid() local
2607 mstb = get_mst_branch_device_by_guid_helper(mgr->mst_primary, guid); in drm_dp_get_mst_branch_device_by_guid()
2608 if (mstb) { in drm_dp_get_mst_branch_device_by_guid()
2609 ret = drm_dp_mst_topology_try_get_mstb(mstb); in drm_dp_get_mst_branch_device_by_guid()
2611 mstb = NULL; in drm_dp_get_mst_branch_device_by_guid()
2615 return mstb; in drm_dp_get_mst_branch_device_by_guid()
2619 struct drm_dp_mst_branch *mstb) in drm_dp_check_and_send_link_address() argument
2625 if (!mstb->link_address_sent) { in drm_dp_check_and_send_link_address()
2626 ret = drm_dp_send_link_address(mgr, mstb); in drm_dp_check_and_send_link_address()
2633 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_check_and_send_link_address()
2634 if (port->input || !port->ddps || !port->mstb) in drm_dp_check_and_send_link_address()
2637 ret = drm_dp_check_and_send_link_address(mgr, port->mstb); in drm_dp_check_and_send_link_address()
2652 struct drm_dp_mst_branch *mstb; in drm_dp_mst_link_probe_work() local
2662 mstb = mgr->mst_primary; in drm_dp_mst_link_probe_work()
2663 if (mstb) { in drm_dp_mst_link_probe_work()
2664 ret = drm_dp_mst_topology_try_get_mstb(mstb); in drm_dp_mst_link_probe_work()
2666 mstb = NULL; in drm_dp_mst_link_probe_work()
2669 if (!mstb) { in drm_dp_mst_link_probe_work()
2684 drm_dp_send_clear_payload_id_table(mgr, mstb); in drm_dp_mst_link_probe_work()
2687 ret = drm_dp_check_and_send_link_address(mgr, mstb); in drm_dp_mst_link_probe_work()
2688 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_mst_link_probe_work()
2758 struct drm_dp_mst_branch *mstb = txmsg->dst; in set_hdr_from_dst_qlock() local
2773 hdr->lct = mstb->lct; in set_hdr_from_dst_qlock()
2774 hdr->lcr = mstb->lct - 1; in set_hdr_from_dst_qlock()
2777 memcpy(hdr->rad, mstb->rad, hdr->lct / 2); in set_hdr_from_dst_qlock()
2912 struct drm_dp_mst_branch *mstb) in drm_dp_send_link_address() argument
2924 txmsg->dst = mstb; in drm_dp_send_link_address()
2927 mstb->link_address_sent = true; in drm_dp_send_link_address()
2931 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_send_link_address()
2946 ret = drm_dp_check_mstb_guid(mstb, &reply->guid); in drm_dp_send_link_address()
2950 drm_dp_mst_rad_to_str(mstb->rad, mstb->lct, buf, sizeof(buf)); in drm_dp_send_link_address()
2957 ret = drm_dp_mst_handle_link_address_port(mstb, mgr->dev, in drm_dp_send_link_address()
2971 list_for_each_entry_safe(port, tmp, &mstb->ports, next) { in drm_dp_send_link_address()
2985 mstb->link_address_sent = false; in drm_dp_send_link_address()
2992 struct drm_dp_mst_branch *mstb) in drm_dp_send_clear_payload_id_table() argument
3001 txmsg->dst = mstb; in drm_dp_send_clear_payload_id_table()
3006 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_send_clear_payload_id_table()
3015 struct drm_dp_mst_branch *mstb, in drm_dp_send_enum_path_resources() argument
3026 txmsg->dst = mstb; in drm_dp_send_enum_path_resources()
3031 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_send_enum_path_resources()
3064 …atic struct drm_dp_mst_port *drm_dp_get_last_connected_port_to_mstb(struct drm_dp_mst_branch *mstb) in drm_dp_get_last_connected_port_to_mstb() argument
3066 if (!mstb->port_parent) in drm_dp_get_last_connected_port_to_mstb()
3069 if (mstb->port_parent->mstb != mstb) in drm_dp_get_last_connected_port_to_mstb()
3070 return mstb->port_parent; in drm_dp_get_last_connected_port_to_mstb()
3072 return drm_dp_get_last_connected_port_to_mstb(mstb->port_parent->parent); in drm_dp_get_last_connected_port_to_mstb()
3085 struct drm_dp_mst_branch *mstb, in drm_dp_get_last_connected_port_and_mstb() argument
3096 found_port = drm_dp_get_last_connected_port_to_mstb(mstb); in drm_dp_get_last_connected_port_and_mstb()
3105 mstb = found_port->parent; in drm_dp_get_last_connected_port_and_mstb()
3119 struct drm_dp_mst_branch *mstb; in drm_dp_payload_send_msg() local
3125 mstb = drm_dp_mst_topology_get_mstb_validated(mgr, port->parent); in drm_dp_payload_send_msg()
3126 if (!mstb) { in drm_dp_payload_send_msg()
3127 mstb = drm_dp_get_last_connected_port_and_mstb(mgr, in drm_dp_payload_send_msg()
3131 if (!mstb) in drm_dp_payload_send_msg()
3144 txmsg->dst = mstb; in drm_dp_payload_send_msg()
3159 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_payload_send_msg()
3168 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_payload_send_msg()
3461 struct drm_dp_mst_branch *mstb; in drm_dp_send_dpcd_read() local
3463 mstb = drm_dp_mst_topology_get_mstb_validated(mgr, port->parent); in drm_dp_send_dpcd_read()
3464 if (!mstb) in drm_dp_send_dpcd_read()
3478 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_send_dpcd_read()
3484 mstb, port->port_num, offset, size); in drm_dp_send_dpcd_read()
3501 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_send_dpcd_read()
3512 struct drm_dp_mst_branch *mstb; in drm_dp_send_dpcd_write() local
3514 mstb = drm_dp_mst_topology_get_mstb_validated(mgr, port->parent); in drm_dp_send_dpcd_write()
3515 if (!mstb) in drm_dp_send_dpcd_write()
3525 txmsg->dst = mstb; in drm_dp_send_dpcd_write()
3529 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_send_dpcd_write()
3539 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_send_dpcd_write()
3554 struct drm_dp_mst_branch *mstb, in drm_dp_send_up_ack_reply() argument
3563 txmsg->dst = mstb; in drm_dp_send_up_ack_reply()
3647 struct drm_dp_mst_branch *mstb = NULL; in drm_dp_mst_topology_mgr_set_mst() local
3667 mstb = drm_dp_add_mst_branch_device(1, NULL); in drm_dp_mst_topology_mgr_set_mst()
3668 if (mstb == NULL) { in drm_dp_mst_topology_mgr_set_mst()
3672 mstb->mgr = mgr; in drm_dp_mst_topology_mgr_set_mst()
3675 mgr->mst_primary = mstb; in drm_dp_mst_topology_mgr_set_mst()
3693 mstb = mgr->mst_primary; in drm_dp_mst_topology_mgr_set_mst()
3706 if (mstb) in drm_dp_mst_topology_mgr_set_mst()
3707 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_mst_topology_mgr_set_mst()
3714 drm_dp_mst_topology_mgr_invalidate_mstb(struct drm_dp_mst_branch *mstb) in drm_dp_mst_topology_mgr_invalidate_mstb() argument
3719 mstb->link_address_sent = false; in drm_dp_mst_topology_mgr_invalidate_mstb()
3721 list_for_each_entry(port, &mstb->ports, next) in drm_dp_mst_topology_mgr_invalidate_mstb()
3722 if (port->mstb) in drm_dp_mst_topology_mgr_invalidate_mstb()
3723 drm_dp_mst_topology_mgr_invalidate_mstb(port->mstb); in drm_dp_mst_topology_mgr_invalidate_mstb()
3861 struct drm_dp_mst_branch **mstb) in drm_dp_get_one_sb_msg() argument
3875 *mstb = NULL; in drm_dp_get_one_sb_msg()
3894 *mstb = drm_dp_get_mst_branch_device(mgr, hdr.lct, hdr.rad); in drm_dp_get_one_sb_msg()
3895 if (!*mstb) { in drm_dp_get_one_sb_msg()
3940 struct drm_dp_mst_branch *mstb = NULL; in drm_dp_mst_handle_down_rep() local
3943 if (!drm_dp_get_one_sb_msg(mgr, false, &mstb)) in drm_dp_mst_handle_down_rep()
3957 if (!txmsg || txmsg->dst != mstb) { in drm_dp_mst_handle_down_rep()
3962 mstb, hdr->seqno, hdr->lct, hdr->rad[0], msg->msg[0]); in drm_dp_mst_handle_down_rep()
3979 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_mst_handle_down_rep()
3993 if (mstb) in drm_dp_mst_handle_down_rep()
3994 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_mst_handle_down_rep()
4003 struct drm_dp_mst_branch *mstb = NULL; in drm_dp_mst_process_up_req() local
4017 mstb = drm_dp_get_mst_branch_device_by_guid(mgr, guid); in drm_dp_mst_process_up_req()
4019 mstb = drm_dp_get_mst_branch_device(mgr, hdr->lct, hdr->rad); in drm_dp_mst_process_up_req()
4022 if (!mstb) { in drm_dp_mst_process_up_req()
4029 dowork = drm_dp_mst_handle_conn_stat(mstb, &msg->u.conn_stat); in drm_dp_mst_process_up_req()
4033 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_mst_process_up_req()
4844 struct drm_dp_mst_branch *mstb) in drm_dp_mst_dump_mstb() argument
4847 int tabs = mstb->lct; in drm_dp_mst_dump_mstb()
4855 seq_printf(m, "%smstb - [%p]: num_ports: %d\n", prefix, mstb, mstb->num_ports); in drm_dp_mst_dump_mstb()
4856 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_mst_dump_mstb()
4869 if (port->mstb) in drm_dp_mst_dump_mstb()
4870 drm_dp_mst_dump_mstb(m, port->mstb); in drm_dp_mst_dump_mstb()
5033 drm_dp_delayed_destroy_mstb(struct drm_dp_mst_branch *mstb) in drm_dp_delayed_destroy_mstb() argument
5035 struct drm_dp_mst_topology_mgr *mgr = mstb->mgr; in drm_dp_delayed_destroy_mstb()
5041 list_for_each_entry_safe(port, port_tmp, &mstb->ports, next) { in drm_dp_delayed_destroy_mstb()
5048 mutex_lock(&mstb->mgr->qlock); in drm_dp_delayed_destroy_mstb()
5050 if (txmsg->dst != mstb) in drm_dp_delayed_destroy_mstb()
5057 mutex_unlock(&mstb->mgr->qlock); in drm_dp_delayed_destroy_mstb()
5060 wake_up_all(&mstb->mgr->tx_waitq); in drm_dp_delayed_destroy_mstb()
5062 drm_dp_mst_put_mstb_malloc(mstb); in drm_dp_delayed_destroy_mstb()
5081 struct drm_dp_mst_branch *mstb; in drm_dp_delayed_destroy_work() local
5084 mstb = list_first_entry_or_null(&mgr->destroy_branch_device_list, in drm_dp_delayed_destroy_work()
5087 if (mstb) in drm_dp_delayed_destroy_work()
5088 list_del(&mstb->destroy_next); in drm_dp_delayed_destroy_work()
5091 if (!mstb) in drm_dp_delayed_destroy_work()
5094 drm_dp_delayed_destroy_mstb(mstb); in drm_dp_delayed_destroy_work()
5223 if (!parent->mstb) in drm_dp_mst_port_downstream_of_parent_locked()
5226 return drm_dp_mst_port_downstream_of_branch(port, parent->mstb); in drm_dp_mst_port_downstream_of_parent_locked()
5260 drm_dp_mst_atomic_check_mstb_bw_limit(struct drm_dp_mst_branch *mstb, in drm_dp_mst_atomic_check_mstb_bw_limit() argument
5274 !drm_dp_mst_port_downstream_of_branch(payload->port, mstb)) in drm_dp_mst_atomic_check_mstb_bw_limit()
5283 if (mstb->port_parent) in drm_dp_mst_atomic_check_mstb_bw_limit()
5284 drm_dbg_atomic(mstb->mgr->dev, in drm_dp_mst_atomic_check_mstb_bw_limit()
5286 mstb->port_parent->parent, mstb->port_parent, mstb); in drm_dp_mst_atomic_check_mstb_bw_limit()
5288 drm_dbg_atomic(mstb->mgr->dev, "[MSTB:%p] Checking bandwidth limits\n", mstb); in drm_dp_mst_atomic_check_mstb_bw_limit()
5290 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_mst_atomic_check_mstb_bw_limit()
5331 pbn_used = drm_dp_mst_atomic_check_mstb_bw_limit(port->mstb, in drm_dp_mst_atomic_check_port_bw_limit()
5823 static int drm_dp_mst_i2c_read(struct drm_dp_mst_branch *mstb, in drm_dp_mst_i2c_read() argument
5852 txmsg->dst = mstb; in drm_dp_mst_i2c_read()
5857 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_mst_i2c_read()
5876 static int drm_dp_mst_i2c_write(struct drm_dp_mst_branch *mstb, in drm_dp_mst_i2c_write() argument
5900 txmsg->dst = mstb; in drm_dp_mst_i2c_write()
5905 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_mst_i2c_write()
5928 struct drm_dp_mst_branch *mstb; in drm_dp_mst_i2c_xfer() local
5932 mstb = drm_dp_mst_topology_get_mstb_validated(mgr, port->parent); in drm_dp_mst_i2c_xfer()
5933 if (!mstb) in drm_dp_mst_i2c_xfer()
5937 ret = drm_dp_mst_i2c_read(mstb, port, msgs, num); in drm_dp_mst_i2c_xfer()
5939 ret = drm_dp_mst_i2c_write(mstb, port, msgs, num); in drm_dp_mst_i2c_xfer()
5945 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_mst_i2c_xfer()
6033 port->mstb && in drm_dp_mst_is_virtual_dpcd()
6034 port->mstb->num_ports == 2) { in drm_dp_mst_is_virtual_dpcd()
6035 list_for_each_entry(downstream_port, &port->mstb->ports, next) { in drm_dp_mst_is_virtual_dpcd()