Lines Matching refs:mstb

81 				    struct drm_dp_mst_branch *mstb);
85 struct drm_dp_mst_branch *mstb);
88 struct drm_dp_mst_branch *mstb,
1303 static int drm_dp_mst_wait_tx_reply(struct drm_dp_mst_branch *mstb, in drm_dp_mst_wait_tx_reply() argument
1306 struct drm_dp_mst_topology_mgr *mgr = mstb->mgr; in drm_dp_mst_wait_tx_reply()
1371 struct drm_dp_mst_branch *mstb; in drm_dp_add_mst_branch_device() local
1373 mstb = kzalloc(sizeof(*mstb), GFP_KERNEL); in drm_dp_add_mst_branch_device()
1374 if (!mstb) in drm_dp_add_mst_branch_device()
1377 mstb->lct = lct; in drm_dp_add_mst_branch_device()
1379 memcpy(mstb->rad, rad, lct / 2); in drm_dp_add_mst_branch_device()
1380 INIT_LIST_HEAD(&mstb->ports); in drm_dp_add_mst_branch_device()
1381 kref_init(&mstb->topology_kref); in drm_dp_add_mst_branch_device()
1382 kref_init(&mstb->malloc_kref); in drm_dp_add_mst_branch_device()
1383 return mstb; in drm_dp_add_mst_branch_device()
1388 struct drm_dp_mst_branch *mstb = in drm_dp_free_mst_branch_device() local
1391 if (mstb->port_parent) in drm_dp_free_mst_branch_device()
1392 drm_dp_mst_put_port_malloc(mstb->port_parent); in drm_dp_free_mst_branch_device()
1394 kfree(mstb); in drm_dp_free_mst_branch_device()
1497 drm_dp_mst_get_mstb_malloc(struct drm_dp_mst_branch *mstb) in drm_dp_mst_get_mstb_malloc() argument
1499 kref_get(&mstb->malloc_kref); in drm_dp_mst_get_mstb_malloc()
1500 drm_dbg(mstb->mgr->dev, "mstb %p (%d)\n", mstb, kref_read(&mstb->malloc_kref)); in drm_dp_mst_get_mstb_malloc()
1515 drm_dp_mst_put_mstb_malloc(struct drm_dp_mst_branch *mstb) in drm_dp_mst_put_mstb_malloc() argument
1517 drm_dbg(mstb->mgr->dev, "mstb %p (%d)\n", mstb, kref_read(&mstb->malloc_kref) - 1); in drm_dp_mst_put_mstb_malloc()
1518 kref_put(&mstb->malloc_kref, drm_dp_free_mst_branch_device); in drm_dp_mst_put_mstb_malloc()
1692 drm_dp_mst_dump_mstb_topology_history(struct drm_dp_mst_branch *mstb) in drm_dp_mst_dump_mstb_topology_history() argument
1694 __dump_topology_ref_history(&mstb->topology_ref_history, mstb, in drm_dp_mst_dump_mstb_topology_history()
1706 save_mstb_topology_ref(struct drm_dp_mst_branch *mstb, in save_mstb_topology_ref() argument
1709 __topology_ref_save(mstb->mgr, &mstb->topology_ref_history, type); in save_mstb_topology_ref()
1736 drm_dp_mst_dump_mstb_topology_history(struct drm_dp_mst_branch *mstb) {} in drm_dp_mst_dump_mstb_topology_history() argument
1739 #define save_mstb_topology_ref(mstb, type) argument
1745 struct drm_dp_mst_branch *mstb = in drm_dp_destroy_mst_branch_device() local
1747 struct drm_dp_mst_topology_mgr *mgr = mstb->mgr; in drm_dp_destroy_mst_branch_device()
1749 drm_dp_mst_dump_mstb_topology_history(mstb); in drm_dp_destroy_mst_branch_device()
1751 INIT_LIST_HEAD(&mstb->destroy_next); in drm_dp_destroy_mst_branch_device()
1758 list_add(&mstb->destroy_next, &mgr->destroy_branch_device_list); in drm_dp_destroy_mst_branch_device()
1786 drm_dp_mst_topology_try_get_mstb(struct drm_dp_mst_branch *mstb) in drm_dp_mst_topology_try_get_mstb() argument
1790 topology_ref_history_lock(mstb->mgr); in drm_dp_mst_topology_try_get_mstb()
1791 ret = kref_get_unless_zero(&mstb->topology_kref); in drm_dp_mst_topology_try_get_mstb()
1793 drm_dbg(mstb->mgr->dev, "mstb %p (%d)\n", mstb, kref_read(&mstb->topology_kref)); in drm_dp_mst_topology_try_get_mstb()
1794 save_mstb_topology_ref(mstb, DRM_DP_MST_TOPOLOGY_REF_GET); in drm_dp_mst_topology_try_get_mstb()
1797 topology_ref_history_unlock(mstb->mgr); in drm_dp_mst_topology_try_get_mstb()
1816 static void drm_dp_mst_topology_get_mstb(struct drm_dp_mst_branch *mstb) in drm_dp_mst_topology_get_mstb() argument
1818 topology_ref_history_lock(mstb->mgr); in drm_dp_mst_topology_get_mstb()
1820 save_mstb_topology_ref(mstb, DRM_DP_MST_TOPOLOGY_REF_GET); in drm_dp_mst_topology_get_mstb()
1821 WARN_ON(kref_read(&mstb->topology_kref) == 0); in drm_dp_mst_topology_get_mstb()
1822 kref_get(&mstb->topology_kref); in drm_dp_mst_topology_get_mstb()
1823 drm_dbg(mstb->mgr->dev, "mstb %p (%d)\n", mstb, kref_read(&mstb->topology_kref)); in drm_dp_mst_topology_get_mstb()
1825 topology_ref_history_unlock(mstb->mgr); in drm_dp_mst_topology_get_mstb()
1841 drm_dp_mst_topology_put_mstb(struct drm_dp_mst_branch *mstb) in drm_dp_mst_topology_put_mstb() argument
1843 topology_ref_history_lock(mstb->mgr); in drm_dp_mst_topology_put_mstb()
1845 drm_dbg(mstb->mgr->dev, "mstb %p (%d)\n", mstb, kref_read(&mstb->topology_kref) - 1); in drm_dp_mst_topology_put_mstb()
1846 save_mstb_topology_ref(mstb, DRM_DP_MST_TOPOLOGY_REF_PUT); in drm_dp_mst_topology_put_mstb()
1848 topology_ref_history_unlock(mstb->mgr); in drm_dp_mst_topology_put_mstb()
1849 kref_put(&mstb->topology_kref, drm_dp_destroy_mst_branch_device); in drm_dp_mst_topology_put_mstb()
1964 drm_dp_mst_topology_get_mstb_validated_locked(struct drm_dp_mst_branch *mstb, in drm_dp_mst_topology_get_mstb_validated_locked() argument
1970 if (to_find == mstb) in drm_dp_mst_topology_get_mstb_validated_locked()
1971 return mstb; in drm_dp_mst_topology_get_mstb_validated_locked()
1973 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_mst_topology_get_mstb_validated_locked()
1974 if (port->mstb) { in drm_dp_mst_topology_get_mstb_validated_locked()
1976 port->mstb, to_find); in drm_dp_mst_topology_get_mstb_validated_locked()
1986 struct drm_dp_mst_branch *mstb) in drm_dp_mst_topology_get_mstb_validated() argument
1993 mgr->mst_primary, mstb); in drm_dp_mst_topology_get_mstb_validated()
2003 drm_dp_mst_topology_get_port_validated_locked(struct drm_dp_mst_branch *mstb, in drm_dp_mst_topology_get_port_validated_locked() argument
2008 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_mst_topology_get_port_validated_locked()
2012 if (port->mstb) { in drm_dp_mst_topology_get_port_validated_locked()
2014 port->mstb, to_find); in drm_dp_mst_topology_get_port_validated_locked()
2040 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
2045 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_get_port()
2098 struct drm_dp_mst_branch *mstb; in drm_dp_port_set_pdt() local
2123 drm_dp_mst_topology_put_mstb(port->mstb); in drm_dp_port_set_pdt()
2124 port->mstb = NULL; in drm_dp_port_set_pdt()
2138 mstb = drm_dp_add_mst_branch_device(lct, rad); in drm_dp_port_set_pdt()
2139 if (!mstb) { in drm_dp_port_set_pdt()
2146 port->mstb = mstb; in drm_dp_port_set_pdt()
2147 mstb->mgr = port->mgr; in drm_dp_port_set_pdt()
2148 mstb->port_parent = port; in drm_dp_port_set_pdt()
2214 static int drm_dp_check_mstb_guid(struct drm_dp_mst_branch *mstb, u8 *guid) in drm_dp_check_mstb_guid() argument
2218 memcpy(mstb->guid, guid, 16); in drm_dp_check_mstb_guid()
2220 if (!drm_dp_validate_guid(mstb->mgr, mstb->guid)) { in drm_dp_check_mstb_guid()
2221 if (mstb->port_parent) { in drm_dp_check_mstb_guid()
2222 ret = drm_dp_send_dpcd_write(mstb->mgr, in drm_dp_check_mstb_guid()
2223 mstb->port_parent, in drm_dp_check_mstb_guid()
2224 DP_GUID, 16, mstb->guid); in drm_dp_check_mstb_guid()
2226 ret = drm_dp_dpcd_write(mstb->mgr->aux, in drm_dp_check_mstb_guid()
2227 DP_GUID, mstb->guid, 16); in drm_dp_check_mstb_guid()
2237 static void build_mst_prop_path(const struct drm_dp_mst_branch *mstb, in build_mst_prop_path() argument
2245 snprintf(proppath, proppath_size, "mst:%d", mstb->mgr->conn_base_id); in build_mst_prop_path()
2246 for (i = 0; i < (mstb->lct - 1); i++) { in build_mst_prop_path()
2248 int port_num = (mstb->rad[i / 2] >> shift) & 0xf; in build_mst_prop_path()
2298 drm_dp_mst_port_add_connector(struct drm_dp_mst_branch *mstb, in drm_dp_mst_port_add_connector() argument
2305 build_mst_prop_path(mstb, port->port_num, proppath, sizeof(proppath)); in drm_dp_mst_port_add_connector()
2343 struct drm_dp_mst_branch *mstb, u8 port_number) in drm_dp_mst_add_port() argument
2352 port->parent = mstb; in drm_dp_mst_add_port()
2367 drm_dp_mst_get_mstb_malloc(mstb); in drm_dp_mst_add_port()
2373 drm_dp_mst_handle_link_address_port(struct drm_dp_mst_branch *mstb, in drm_dp_mst_handle_link_address_port() argument
2377 struct drm_dp_mst_topology_mgr *mgr = mstb->mgr; in drm_dp_mst_handle_link_address_port()
2384 port = drm_dp_get_port(mstb, port_msg->port_number); in drm_dp_mst_handle_link_address_port()
2386 port = drm_dp_mst_add_port(dev, mgr, mstb, in drm_dp_mst_handle_link_address_port()
2398 port = drm_dp_mst_add_port(dev, mgr, mstb, in drm_dp_mst_handle_link_address_port()
2438 list_add(&port->next, &mstb->ports); in drm_dp_mst_handle_link_address_port()
2439 mstb->num_ports++; in drm_dp_mst_handle_link_address_port()
2449 ret = drm_dp_send_enum_path_resources(mgr, mstb, in drm_dp_mst_handle_link_address_port()
2478 drm_dp_mst_port_add_connector(mstb, port); in drm_dp_mst_handle_link_address_port()
2480 if (send_link_addr && port->mstb) { in drm_dp_mst_handle_link_address_port()
2481 ret = drm_dp_send_link_address(mgr, port->mstb); in drm_dp_mst_handle_link_address_port()
2502 drm_dp_mst_handle_conn_stat(struct drm_dp_mst_branch *mstb, in drm_dp_mst_handle_conn_stat() argument
2505 struct drm_dp_mst_topology_mgr *mgr = mstb->mgr; in drm_dp_mst_handle_conn_stat()
2512 port = drm_dp_get_port(mstb, conn_stat->port_number); in drm_dp_mst_handle_conn_stat()
2524 mstb->link_address_sent = false; in drm_dp_mst_handle_conn_stat()
2534 mstb->link_address_sent = false; in drm_dp_mst_handle_conn_stat()
2545 drm_dp_send_enum_path_resources(mgr, mstb, port); in drm_dp_mst_handle_conn_stat()
2563 drm_dp_mst_port_add_connector(mstb, port); in drm_dp_mst_handle_conn_stat()
2568 queue_work(system_long_wq, &mstb->mgr->work); in drm_dp_mst_handle_conn_stat()
2574 struct drm_dp_mst_branch *mstb; in drm_dp_get_mst_branch_device() local
2580 mstb = mgr->mst_primary; in drm_dp_get_mst_branch_device()
2582 if (!mstb) in drm_dp_get_mst_branch_device()
2589 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_get_mst_branch_device()
2591 mstb = port->mstb; in drm_dp_get_mst_branch_device()
2592 if (!mstb) { in drm_dp_get_mst_branch_device()
2603 ret = drm_dp_mst_topology_try_get_mstb(mstb); in drm_dp_get_mst_branch_device()
2605 mstb = NULL; in drm_dp_get_mst_branch_device()
2608 return mstb; in drm_dp_get_mst_branch_device()
2612 struct drm_dp_mst_branch *mstb, in get_mst_branch_device_by_guid_helper() argument
2618 if (memcmp(mstb->guid, guid, 16) == 0) in get_mst_branch_device_by_guid_helper()
2619 return mstb; in get_mst_branch_device_by_guid_helper()
2622 list_for_each_entry(port, &mstb->ports, next) { in get_mst_branch_device_by_guid_helper()
2623 if (!port->mstb) in get_mst_branch_device_by_guid_helper()
2626 found_mstb = get_mst_branch_device_by_guid_helper(port->mstb, guid); in get_mst_branch_device_by_guid_helper()
2639 struct drm_dp_mst_branch *mstb; in drm_dp_get_mst_branch_device_by_guid() local
2645 mstb = get_mst_branch_device_by_guid_helper(mgr->mst_primary, guid); in drm_dp_get_mst_branch_device_by_guid()
2646 if (mstb) { in drm_dp_get_mst_branch_device_by_guid()
2647 ret = drm_dp_mst_topology_try_get_mstb(mstb); in drm_dp_get_mst_branch_device_by_guid()
2649 mstb = NULL; in drm_dp_get_mst_branch_device_by_guid()
2653 return mstb; in drm_dp_get_mst_branch_device_by_guid()
2657 struct drm_dp_mst_branch *mstb) in drm_dp_check_and_send_link_address() argument
2663 if (!mstb->link_address_sent) { in drm_dp_check_and_send_link_address()
2664 ret = drm_dp_send_link_address(mgr, mstb); in drm_dp_check_and_send_link_address()
2671 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_check_and_send_link_address()
2677 if (port->mstb) in drm_dp_check_and_send_link_address()
2679 mgr, port->mstb); in drm_dp_check_and_send_link_address()
2700 struct drm_dp_mst_branch *mstb; in drm_dp_mst_link_probe_work() local
2710 mstb = mgr->mst_primary; in drm_dp_mst_link_probe_work()
2711 if (mstb) { in drm_dp_mst_link_probe_work()
2712 ret = drm_dp_mst_topology_try_get_mstb(mstb); in drm_dp_mst_link_probe_work()
2714 mstb = NULL; in drm_dp_mst_link_probe_work()
2717 if (!mstb) { in drm_dp_mst_link_probe_work()
2732 drm_dp_send_clear_payload_id_table(mgr, mstb); in drm_dp_mst_link_probe_work()
2735 ret = drm_dp_check_and_send_link_address(mgr, mstb); in drm_dp_mst_link_probe_work()
2736 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_mst_link_probe_work()
2806 struct drm_dp_mst_branch *mstb = txmsg->dst; in set_hdr_from_dst_qlock() local
2821 hdr->lct = mstb->lct; in set_hdr_from_dst_qlock()
2822 hdr->lcr = mstb->lct - 1; in set_hdr_from_dst_qlock()
2825 memcpy(hdr->rad, mstb->rad, hdr->lct / 2); in set_hdr_from_dst_qlock()
2957 struct drm_dp_mst_branch *mstb) in drm_dp_send_link_address() argument
2969 txmsg->dst = mstb; in drm_dp_send_link_address()
2972 mstb->link_address_sent = true; in drm_dp_send_link_address()
2976 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_send_link_address()
2991 ret = drm_dp_check_mstb_guid(mstb, reply->guid); in drm_dp_send_link_address()
2995 drm_dp_mst_rad_to_str(mstb->rad, mstb->lct, buf, sizeof(buf)); in drm_dp_send_link_address()
3002 ret = drm_dp_mst_handle_link_address_port(mstb, mgr->dev, in drm_dp_send_link_address()
3016 list_for_each_entry_safe(port, tmp, &mstb->ports, next) { in drm_dp_send_link_address()
3030 mstb->link_address_sent = false; in drm_dp_send_link_address()
3037 struct drm_dp_mst_branch *mstb) in drm_dp_send_clear_payload_id_table() argument
3046 txmsg->dst = mstb; in drm_dp_send_clear_payload_id_table()
3051 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_send_clear_payload_id_table()
3060 struct drm_dp_mst_branch *mstb, in drm_dp_send_enum_path_resources() argument
3071 txmsg->dst = mstb; in drm_dp_send_enum_path_resources()
3076 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_send_enum_path_resources()
3109 …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
3111 if (!mstb->port_parent) in drm_dp_get_last_connected_port_to_mstb()
3114 if (mstb->port_parent->mstb != mstb) in drm_dp_get_last_connected_port_to_mstb()
3115 return mstb->port_parent; in drm_dp_get_last_connected_port_to_mstb()
3117 return drm_dp_get_last_connected_port_to_mstb(mstb->port_parent->parent); in drm_dp_get_last_connected_port_to_mstb()
3130 struct drm_dp_mst_branch *mstb, in drm_dp_get_last_connected_port_and_mstb() argument
3141 found_port = drm_dp_get_last_connected_port_to_mstb(mstb); in drm_dp_get_last_connected_port_and_mstb()
3150 mstb = found_port->parent; in drm_dp_get_last_connected_port_and_mstb()
3164 struct drm_dp_mst_branch *mstb; in drm_dp_payload_send_msg() local
3170 mstb = drm_dp_mst_topology_get_mstb_validated(mgr, port->parent); in drm_dp_payload_send_msg()
3171 if (!mstb) { in drm_dp_payload_send_msg()
3172 mstb = drm_dp_get_last_connected_port_and_mstb(mgr, in drm_dp_payload_send_msg()
3176 if (!mstb) in drm_dp_payload_send_msg()
3189 txmsg->dst = mstb; in drm_dp_payload_send_msg()
3204 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_payload_send_msg()
3213 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_payload_send_msg()
3538 struct drm_dp_mst_branch *mstb; in drm_dp_send_dpcd_read() local
3540 mstb = drm_dp_mst_topology_get_mstb_validated(mgr, port->parent); in drm_dp_send_dpcd_read()
3541 if (!mstb) in drm_dp_send_dpcd_read()
3555 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_send_dpcd_read()
3562 mstb, port->port_num, offset, size); in drm_dp_send_dpcd_read()
3579 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_send_dpcd_read()
3590 struct drm_dp_mst_branch *mstb; in drm_dp_send_dpcd_write() local
3592 mstb = drm_dp_mst_topology_get_mstb_validated(mgr, port->parent); in drm_dp_send_dpcd_write()
3593 if (!mstb) in drm_dp_send_dpcd_write()
3603 txmsg->dst = mstb; in drm_dp_send_dpcd_write()
3607 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_send_dpcd_write()
3617 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_send_dpcd_write()
3632 struct drm_dp_mst_branch *mstb, in drm_dp_send_up_ack_reply() argument
3641 txmsg->dst = mstb; in drm_dp_send_up_ack_reply()
3709 struct drm_dp_mst_branch *mstb = NULL; in drm_dp_mst_topology_mgr_set_mst() local
3744 mstb = drm_dp_add_mst_branch_device(1, NULL); in drm_dp_mst_topology_mgr_set_mst()
3745 if (mstb == NULL) { in drm_dp_mst_topology_mgr_set_mst()
3749 mstb->mgr = mgr; in drm_dp_mst_topology_mgr_set_mst()
3752 mgr->mst_primary = mstb; in drm_dp_mst_topology_mgr_set_mst()
3771 mstb = mgr->mst_primary; in drm_dp_mst_topology_mgr_set_mst()
3789 if (mstb) in drm_dp_mst_topology_mgr_set_mst()
3790 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_mst_topology_mgr_set_mst()
3797 drm_dp_mst_topology_mgr_invalidate_mstb(struct drm_dp_mst_branch *mstb) in drm_dp_mst_topology_mgr_invalidate_mstb() argument
3802 mstb->link_address_sent = false; in drm_dp_mst_topology_mgr_invalidate_mstb()
3804 list_for_each_entry(port, &mstb->ports, next) in drm_dp_mst_topology_mgr_invalidate_mstb()
3805 if (port->mstb) in drm_dp_mst_topology_mgr_invalidate_mstb()
3806 drm_dp_mst_topology_mgr_invalidate_mstb(port->mstb); in drm_dp_mst_topology_mgr_invalidate_mstb()
3916 struct drm_dp_mst_branch **mstb) in drm_dp_get_one_sb_msg() argument
3930 *mstb = NULL; in drm_dp_get_one_sb_msg()
3949 *mstb = drm_dp_get_mst_branch_device(mgr, hdr.lct, hdr.rad); in drm_dp_get_one_sb_msg()
3950 if (!*mstb) { in drm_dp_get_one_sb_msg()
3995 struct drm_dp_mst_branch *mstb = NULL; in drm_dp_mst_handle_down_rep() local
3998 if (!drm_dp_get_one_sb_msg(mgr, false, &mstb)) in drm_dp_mst_handle_down_rep()
4012 if (!txmsg || txmsg->dst != mstb) { in drm_dp_mst_handle_down_rep()
4017 mstb, hdr->seqno, hdr->lct, hdr->rad[0], msg->msg[0]); in drm_dp_mst_handle_down_rep()
4034 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_mst_handle_down_rep()
4048 if (mstb) in drm_dp_mst_handle_down_rep()
4049 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_mst_handle_down_rep()
4058 struct drm_dp_mst_branch *mstb = NULL; in drm_dp_mst_process_up_req() local
4072 mstb = drm_dp_get_mst_branch_device_by_guid(mgr, guid); in drm_dp_mst_process_up_req()
4074 mstb = drm_dp_get_mst_branch_device(mgr, hdr->lct, hdr->rad); in drm_dp_mst_process_up_req()
4077 if (!mstb) { in drm_dp_mst_process_up_req()
4084 drm_dp_mst_handle_conn_stat(mstb, &msg->u.conn_stat); in drm_dp_mst_process_up_req()
4088 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_mst_process_up_req()
4783 struct drm_dp_mst_branch *mstb) in drm_dp_mst_dump_mstb() argument
4786 int tabs = mstb->lct; in drm_dp_mst_dump_mstb()
4794 seq_printf(m, "%smstb - [%p]: num_ports: %d\n", prefix, mstb, mstb->num_ports); in drm_dp_mst_dump_mstb()
4795 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_mst_dump_mstb()
4808 if (port->mstb) in drm_dp_mst_dump_mstb()
4809 drm_dp_mst_dump_mstb(m, port->mstb); in drm_dp_mst_dump_mstb()
4963 drm_dp_delayed_destroy_mstb(struct drm_dp_mst_branch *mstb) in drm_dp_delayed_destroy_mstb() argument
4965 struct drm_dp_mst_topology_mgr *mgr = mstb->mgr; in drm_dp_delayed_destroy_mstb()
4971 list_for_each_entry_safe(port, port_tmp, &mstb->ports, next) { in drm_dp_delayed_destroy_mstb()
4978 mutex_lock(&mstb->mgr->qlock); in drm_dp_delayed_destroy_mstb()
4980 if (txmsg->dst != mstb) in drm_dp_delayed_destroy_mstb()
4987 mutex_unlock(&mstb->mgr->qlock); in drm_dp_delayed_destroy_mstb()
4990 wake_up_all(&mstb->mgr->tx_waitq); in drm_dp_delayed_destroy_mstb()
4992 drm_dp_mst_put_mstb_malloc(mstb); in drm_dp_delayed_destroy_mstb()
5011 struct drm_dp_mst_branch *mstb; in drm_dp_delayed_destroy_work() local
5014 mstb = list_first_entry_or_null(&mgr->destroy_branch_device_list, in drm_dp_delayed_destroy_work()
5017 if (mstb) in drm_dp_delayed_destroy_work()
5018 list_del(&mstb->destroy_next); in drm_dp_delayed_destroy_work()
5021 if (!mstb) in drm_dp_delayed_destroy_work()
5024 drm_dp_delayed_destroy_mstb(mstb); in drm_dp_delayed_destroy_work()
5129 drm_dp_mst_atomic_check_mstb_bw_limit(struct drm_dp_mst_branch *mstb, in drm_dp_mst_atomic_check_mstb_bw_limit() argument
5142 !drm_dp_mst_port_downstream_of_branch(vcpi->port, mstb)) in drm_dp_mst_atomic_check_mstb_bw_limit()
5151 if (mstb->port_parent) in drm_dp_mst_atomic_check_mstb_bw_limit()
5152 drm_dbg_atomic(mstb->mgr->dev, in drm_dp_mst_atomic_check_mstb_bw_limit()
5154 mstb->port_parent->parent, mstb->port_parent, mstb); in drm_dp_mst_atomic_check_mstb_bw_limit()
5156 drm_dbg_atomic(mstb->mgr->dev, "[MSTB:%p] Checking bandwidth limits\n", mstb); in drm_dp_mst_atomic_check_mstb_bw_limit()
5158 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_mst_atomic_check_mstb_bw_limit()
5207 pbn_used = drm_dp_mst_atomic_check_mstb_bw_limit(port->mstb, in drm_dp_mst_atomic_check_port_bw_limit()
5614 static int drm_dp_mst_i2c_read(struct drm_dp_mst_branch *mstb, in drm_dp_mst_i2c_read() argument
5643 txmsg->dst = mstb; in drm_dp_mst_i2c_read()
5648 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_mst_i2c_read()
5667 static int drm_dp_mst_i2c_write(struct drm_dp_mst_branch *mstb, in drm_dp_mst_i2c_write() argument
5691 txmsg->dst = mstb; in drm_dp_mst_i2c_write()
5696 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_mst_i2c_write()
5719 struct drm_dp_mst_branch *mstb; in drm_dp_mst_i2c_xfer() local
5723 mstb = drm_dp_mst_topology_get_mstb_validated(mgr, port->parent); in drm_dp_mst_i2c_xfer()
5724 if (!mstb) in drm_dp_mst_i2c_xfer()
5728 ret = drm_dp_mst_i2c_read(mstb, port, msgs, num); in drm_dp_mst_i2c_xfer()
5730 ret = drm_dp_mst_i2c_write(mstb, port, msgs, num); in drm_dp_mst_i2c_xfer()
5736 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_mst_i2c_xfer()
5825 port->mstb && in drm_dp_mst_is_virtual_dpcd()
5826 port->mstb->num_ports == 2) { in drm_dp_mst_is_virtual_dpcd()
5827 list_for_each_entry(downstream_port, &port->mstb->ports, next) { in drm_dp_mst_is_virtual_dpcd()