Lines Matching refs:mstb

78 				    struct drm_dp_mst_branch *mstb);
82 struct drm_dp_mst_branch *mstb);
85 struct drm_dp_mst_branch *mstb,
1252 static int drm_dp_mst_wait_tx_reply(struct drm_dp_mst_branch *mstb, in drm_dp_mst_wait_tx_reply() argument
1255 struct drm_dp_mst_topology_mgr *mgr = mstb->mgr; in drm_dp_mst_wait_tx_reply()
1321 struct drm_dp_mst_branch *mstb; in drm_dp_add_mst_branch_device() local
1323 mstb = kzalloc(sizeof(*mstb), GFP_KERNEL); in drm_dp_add_mst_branch_device()
1324 if (!mstb) in drm_dp_add_mst_branch_device()
1327 mstb->lct = lct; in drm_dp_add_mst_branch_device()
1329 memcpy(mstb->rad, rad, lct / 2); in drm_dp_add_mst_branch_device()
1330 INIT_LIST_HEAD(&mstb->ports); in drm_dp_add_mst_branch_device()
1331 kref_init(&mstb->topology_kref); in drm_dp_add_mst_branch_device()
1332 kref_init(&mstb->malloc_kref); in drm_dp_add_mst_branch_device()
1333 return mstb; in drm_dp_add_mst_branch_device()
1338 struct drm_dp_mst_branch *mstb = in drm_dp_free_mst_branch_device() local
1341 if (mstb->port_parent) in drm_dp_free_mst_branch_device()
1342 drm_dp_mst_put_port_malloc(mstb->port_parent); in drm_dp_free_mst_branch_device()
1344 kfree(mstb); in drm_dp_free_mst_branch_device()
1447 drm_dp_mst_get_mstb_malloc(struct drm_dp_mst_branch *mstb) in drm_dp_mst_get_mstb_malloc() argument
1449 kref_get(&mstb->malloc_kref); in drm_dp_mst_get_mstb_malloc()
1450 drm_dbg(mstb->mgr->dev, "mstb %p (%d)\n", mstb, kref_read(&mstb->malloc_kref)); in drm_dp_mst_get_mstb_malloc()
1465 drm_dp_mst_put_mstb_malloc(struct drm_dp_mst_branch *mstb) in drm_dp_mst_put_mstb_malloc() argument
1467 drm_dbg(mstb->mgr->dev, "mstb %p (%d)\n", mstb, kref_read(&mstb->malloc_kref) - 1); in drm_dp_mst_put_mstb_malloc()
1468 kref_put(&mstb->malloc_kref, drm_dp_free_mst_branch_device); in drm_dp_mst_put_mstb_malloc()
1640 drm_dp_mst_dump_mstb_topology_history(struct drm_dp_mst_branch *mstb) in drm_dp_mst_dump_mstb_topology_history() argument
1642 __dump_topology_ref_history(mstb->mgr->dev, &mstb->topology_ref_history, in drm_dp_mst_dump_mstb_topology_history()
1643 mstb, "MSTB"); in drm_dp_mst_dump_mstb_topology_history()
1654 save_mstb_topology_ref(struct drm_dp_mst_branch *mstb, in save_mstb_topology_ref() argument
1657 __topology_ref_save(mstb->mgr, &mstb->topology_ref_history, type); in save_mstb_topology_ref()
1684 drm_dp_mst_dump_mstb_topology_history(struct drm_dp_mst_branch *mstb) {} in drm_dp_mst_dump_mstb_topology_history() argument
1687 #define save_mstb_topology_ref(mstb, type) argument
1707 struct drm_dp_mst_branch *mstb = in drm_dp_destroy_mst_branch_device() local
1709 struct drm_dp_mst_topology_mgr *mgr = mstb->mgr; in drm_dp_destroy_mst_branch_device()
1711 drm_dp_mst_dump_mstb_topology_history(mstb); in drm_dp_destroy_mst_branch_device()
1713 INIT_LIST_HEAD(&mstb->destroy_next); in drm_dp_destroy_mst_branch_device()
1720 list_add(&mstb->destroy_next, &mgr->destroy_branch_device_list); in drm_dp_destroy_mst_branch_device()
1748 drm_dp_mst_topology_try_get_mstb(struct drm_dp_mst_branch *mstb) in drm_dp_mst_topology_try_get_mstb() argument
1752 topology_ref_history_lock(mstb->mgr); in drm_dp_mst_topology_try_get_mstb()
1753 ret = kref_get_unless_zero(&mstb->topology_kref); in drm_dp_mst_topology_try_get_mstb()
1755 drm_dbg(mstb->mgr->dev, "mstb %p (%d)\n", mstb, kref_read(&mstb->topology_kref)); in drm_dp_mst_topology_try_get_mstb()
1756 save_mstb_topology_ref(mstb, DRM_DP_MST_TOPOLOGY_REF_GET); in drm_dp_mst_topology_try_get_mstb()
1759 topology_ref_history_unlock(mstb->mgr); in drm_dp_mst_topology_try_get_mstb()
1778 static void drm_dp_mst_topology_get_mstb(struct drm_dp_mst_branch *mstb) in drm_dp_mst_topology_get_mstb() argument
1780 topology_ref_history_lock(mstb->mgr); in drm_dp_mst_topology_get_mstb()
1782 save_mstb_topology_ref(mstb, DRM_DP_MST_TOPOLOGY_REF_GET); in drm_dp_mst_topology_get_mstb()
1783 WARN_ON(kref_read(&mstb->topology_kref) == 0); in drm_dp_mst_topology_get_mstb()
1784 kref_get(&mstb->topology_kref); in drm_dp_mst_topology_get_mstb()
1785 drm_dbg(mstb->mgr->dev, "mstb %p (%d)\n", mstb, kref_read(&mstb->topology_kref)); in drm_dp_mst_topology_get_mstb()
1787 topology_ref_history_unlock(mstb->mgr); in drm_dp_mst_topology_get_mstb()
1803 drm_dp_mst_topology_put_mstb(struct drm_dp_mst_branch *mstb) in drm_dp_mst_topology_put_mstb() argument
1805 topology_ref_history_lock(mstb->mgr); in drm_dp_mst_topology_put_mstb()
1807 drm_dbg(mstb->mgr->dev, "mstb %p (%d)\n", mstb, kref_read(&mstb->topology_kref) - 1); in drm_dp_mst_topology_put_mstb()
1808 save_mstb_topology_ref(mstb, DRM_DP_MST_TOPOLOGY_REF_PUT); in drm_dp_mst_topology_put_mstb()
1810 topology_ref_history_unlock(mstb->mgr); in drm_dp_mst_topology_put_mstb()
1811 kref_put(&mstb->topology_kref, drm_dp_destroy_mst_branch_device); in drm_dp_mst_topology_put_mstb()
1926 drm_dp_mst_topology_get_mstb_validated_locked(struct drm_dp_mst_branch *mstb, in drm_dp_mst_topology_get_mstb_validated_locked() argument
1932 if (to_find == mstb) in drm_dp_mst_topology_get_mstb_validated_locked()
1933 return mstb; in drm_dp_mst_topology_get_mstb_validated_locked()
1935 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_mst_topology_get_mstb_validated_locked()
1936 if (port->mstb) { in drm_dp_mst_topology_get_mstb_validated_locked()
1938 port->mstb, to_find); in drm_dp_mst_topology_get_mstb_validated_locked()
1948 struct drm_dp_mst_branch *mstb) in drm_dp_mst_topology_get_mstb_validated() argument
1955 mgr->mst_primary, mstb); in drm_dp_mst_topology_get_mstb_validated()
1965 drm_dp_mst_topology_get_port_validated_locked(struct drm_dp_mst_branch *mstb, in drm_dp_mst_topology_get_port_validated_locked() argument
1970 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_mst_topology_get_port_validated_locked()
1974 if (port->mstb) { in drm_dp_mst_topology_get_port_validated_locked()
1976 port->mstb, to_find); in drm_dp_mst_topology_get_port_validated_locked()
2002 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
2007 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_get_port()
2060 struct drm_dp_mst_branch *mstb; in drm_dp_port_set_pdt() local
2085 drm_dp_mst_topology_put_mstb(port->mstb); in drm_dp_port_set_pdt()
2086 port->mstb = NULL; in drm_dp_port_set_pdt()
2100 mstb = drm_dp_add_mst_branch_device(lct, rad); in drm_dp_port_set_pdt()
2101 if (!mstb) { in drm_dp_port_set_pdt()
2108 port->mstb = mstb; in drm_dp_port_set_pdt()
2109 mstb->mgr = port->mgr; in drm_dp_port_set_pdt()
2110 mstb->port_parent = port; in drm_dp_port_set_pdt()
2176 static int drm_dp_check_mstb_guid(struct drm_dp_mst_branch *mstb, guid_t *guid) in drm_dp_check_mstb_guid() argument
2180 guid_copy(&mstb->guid, guid); in drm_dp_check_mstb_guid()
2182 if (!drm_dp_validate_guid(mstb->mgr, &mstb->guid)) { in drm_dp_check_mstb_guid()
2185 export_guid(buf, &mstb->guid); in drm_dp_check_mstb_guid()
2187 if (mstb->port_parent) { in drm_dp_check_mstb_guid()
2188 ret = drm_dp_send_dpcd_write(mstb->mgr, in drm_dp_check_mstb_guid()
2189 mstb->port_parent, in drm_dp_check_mstb_guid()
2192 ret = drm_dp_dpcd_write(mstb->mgr->aux, in drm_dp_check_mstb_guid()
2203 static void build_mst_prop_path(const struct drm_dp_mst_branch *mstb, in build_mst_prop_path() argument
2211 snprintf(proppath, proppath_size, "mst:%d", mstb->mgr->conn_base_id); in build_mst_prop_path()
2212 for (i = 0; i < (mstb->lct - 1); i++) { in build_mst_prop_path()
2214 int port_num = (mstb->rad[i / 2] >> shift) & 0xf; in build_mst_prop_path()
2264 drm_dp_mst_port_add_connector(struct drm_dp_mst_branch *mstb, in drm_dp_mst_port_add_connector() argument
2271 build_mst_prop_path(mstb, port->port_num, proppath, sizeof(proppath)); in drm_dp_mst_port_add_connector()
2309 struct drm_dp_mst_branch *mstb, u8 port_number) in drm_dp_mst_add_port() argument
2318 port->parent = mstb; in drm_dp_mst_add_port()
2333 drm_dp_mst_get_mstb_malloc(mstb); in drm_dp_mst_add_port()
2339 drm_dp_mst_handle_link_address_port(struct drm_dp_mst_branch *mstb, in drm_dp_mst_handle_link_address_port() argument
2343 struct drm_dp_mst_topology_mgr *mgr = mstb->mgr; in drm_dp_mst_handle_link_address_port()
2350 port = drm_dp_get_port(mstb, port_msg->port_number); in drm_dp_mst_handle_link_address_port()
2352 port = drm_dp_mst_add_port(dev, mgr, mstb, in drm_dp_mst_handle_link_address_port()
2364 port = drm_dp_mst_add_port(dev, mgr, mstb, in drm_dp_mst_handle_link_address_port()
2403 list_add(&port->next, &mstb->ports); in drm_dp_mst_handle_link_address_port()
2404 mstb->num_ports++; in drm_dp_mst_handle_link_address_port()
2413 ret = drm_dp_send_enum_path_resources(mgr, mstb, in drm_dp_mst_handle_link_address_port()
2441 drm_dp_mst_port_add_connector(mstb, port); in drm_dp_mst_handle_link_address_port()
2443 if (send_link_addr && port->mstb) { in drm_dp_mst_handle_link_address_port()
2444 ret = drm_dp_send_link_address(mgr, port->mstb); in drm_dp_mst_handle_link_address_port()
2465 drm_dp_mst_handle_conn_stat(struct drm_dp_mst_branch *mstb, in drm_dp_mst_handle_conn_stat() argument
2468 struct drm_dp_mst_topology_mgr *mgr = mstb->mgr; in drm_dp_mst_handle_conn_stat()
2475 port = drm_dp_get_port(mstb, conn_stat->port_number); in drm_dp_mst_handle_conn_stat()
2487 mstb->link_address_sent = false; in drm_dp_mst_handle_conn_stat()
2497 mstb->link_address_sent = false; in drm_dp_mst_handle_conn_stat()
2508 drm_dp_send_enum_path_resources(mgr, mstb, port); in drm_dp_mst_handle_conn_stat()
2526 drm_dp_mst_port_add_connector(mstb, port); in drm_dp_mst_handle_conn_stat()
2536 struct drm_dp_mst_branch *mstb; in drm_dp_get_mst_branch_device() local
2542 mstb = mgr->mst_primary; in drm_dp_get_mst_branch_device()
2544 if (!mstb) in drm_dp_get_mst_branch_device()
2551 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_get_mst_branch_device()
2553 mstb = port->mstb; in drm_dp_get_mst_branch_device()
2554 if (!mstb) { in drm_dp_get_mst_branch_device()
2565 ret = drm_dp_mst_topology_try_get_mstb(mstb); in drm_dp_get_mst_branch_device()
2567 mstb = NULL; in drm_dp_get_mst_branch_device()
2570 return mstb; in drm_dp_get_mst_branch_device()
2574 get_mst_branch_device_by_guid_helper(struct drm_dp_mst_branch *mstb, in get_mst_branch_device_by_guid_helper() argument
2580 if (!mstb) in get_mst_branch_device_by_guid_helper()
2583 if (guid_equal(&mstb->guid, guid)) in get_mst_branch_device_by_guid_helper()
2584 return mstb; in get_mst_branch_device_by_guid_helper()
2586 list_for_each_entry(port, &mstb->ports, next) { in get_mst_branch_device_by_guid_helper()
2587 found_mstb = get_mst_branch_device_by_guid_helper(port->mstb, guid); in get_mst_branch_device_by_guid_helper()
2600 struct drm_dp_mst_branch *mstb; in drm_dp_get_mst_branch_device_by_guid() local
2606 mstb = get_mst_branch_device_by_guid_helper(mgr->mst_primary, guid); in drm_dp_get_mst_branch_device_by_guid()
2607 if (mstb) { in drm_dp_get_mst_branch_device_by_guid()
2608 ret = drm_dp_mst_topology_try_get_mstb(mstb); in drm_dp_get_mst_branch_device_by_guid()
2610 mstb = NULL; in drm_dp_get_mst_branch_device_by_guid()
2614 return mstb; in drm_dp_get_mst_branch_device_by_guid()
2618 struct drm_dp_mst_branch *mstb) in drm_dp_check_and_send_link_address() argument
2624 if (!mstb->link_address_sent) { in drm_dp_check_and_send_link_address()
2625 ret = drm_dp_send_link_address(mgr, mstb); in drm_dp_check_and_send_link_address()
2632 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_check_and_send_link_address()
2633 if (port->input || !port->ddps || !port->mstb) in drm_dp_check_and_send_link_address()
2636 ret = drm_dp_check_and_send_link_address(mgr, port->mstb); in drm_dp_check_and_send_link_address()
2651 struct drm_dp_mst_branch *mstb; in drm_dp_mst_link_probe_work() local
2661 mstb = mgr->mst_primary; in drm_dp_mst_link_probe_work()
2662 if (mstb) { in drm_dp_mst_link_probe_work()
2663 ret = drm_dp_mst_topology_try_get_mstb(mstb); in drm_dp_mst_link_probe_work()
2665 mstb = NULL; in drm_dp_mst_link_probe_work()
2668 if (!mstb) { in drm_dp_mst_link_probe_work()
2683 drm_dp_send_clear_payload_id_table(mgr, mstb); in drm_dp_mst_link_probe_work()
2686 ret = drm_dp_check_and_send_link_address(mgr, mstb); in drm_dp_mst_link_probe_work()
2687 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_mst_link_probe_work()
2757 struct drm_dp_mst_branch *mstb = txmsg->dst; in set_hdr_from_dst_qlock() local
2772 hdr->lct = mstb->lct; in set_hdr_from_dst_qlock()
2773 hdr->lcr = mstb->lct - 1; in set_hdr_from_dst_qlock()
2776 memcpy(hdr->rad, mstb->rad, hdr->lct / 2); in set_hdr_from_dst_qlock()
2911 struct drm_dp_mst_branch *mstb) in drm_dp_send_link_address() argument
2923 txmsg->dst = mstb; in drm_dp_send_link_address()
2926 mstb->link_address_sent = true; in drm_dp_send_link_address()
2930 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_send_link_address()
2945 ret = drm_dp_check_mstb_guid(mstb, &reply->guid); in drm_dp_send_link_address()
2949 drm_dp_mst_rad_to_str(mstb->rad, mstb->lct, buf, sizeof(buf)); in drm_dp_send_link_address()
2956 ret = drm_dp_mst_handle_link_address_port(mstb, mgr->dev, in drm_dp_send_link_address()
2970 list_for_each_entry_safe(port, tmp, &mstb->ports, next) { in drm_dp_send_link_address()
2984 mstb->link_address_sent = false; in drm_dp_send_link_address()
2991 struct drm_dp_mst_branch *mstb) in drm_dp_send_clear_payload_id_table() argument
3000 txmsg->dst = mstb; in drm_dp_send_clear_payload_id_table()
3005 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_send_clear_payload_id_table()
3014 struct drm_dp_mst_branch *mstb, in drm_dp_send_enum_path_resources() argument
3025 txmsg->dst = mstb; in drm_dp_send_enum_path_resources()
3030 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_send_enum_path_resources()
3063 …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
3065 if (!mstb->port_parent) in drm_dp_get_last_connected_port_to_mstb()
3068 if (mstb->port_parent->mstb != mstb) in drm_dp_get_last_connected_port_to_mstb()
3069 return mstb->port_parent; in drm_dp_get_last_connected_port_to_mstb()
3071 return drm_dp_get_last_connected_port_to_mstb(mstb->port_parent->parent); in drm_dp_get_last_connected_port_to_mstb()
3084 struct drm_dp_mst_branch *mstb, in drm_dp_get_last_connected_port_and_mstb() argument
3095 found_port = drm_dp_get_last_connected_port_to_mstb(mstb); in drm_dp_get_last_connected_port_and_mstb()
3104 mstb = found_port->parent; in drm_dp_get_last_connected_port_and_mstb()
3118 struct drm_dp_mst_branch *mstb; in drm_dp_payload_send_msg() local
3124 mstb = drm_dp_mst_topology_get_mstb_validated(mgr, port->parent); in drm_dp_payload_send_msg()
3125 if (!mstb) { in drm_dp_payload_send_msg()
3126 mstb = drm_dp_get_last_connected_port_and_mstb(mgr, in drm_dp_payload_send_msg()
3130 if (!mstb) in drm_dp_payload_send_msg()
3143 txmsg->dst = mstb; in drm_dp_payload_send_msg()
3158 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_payload_send_msg()
3167 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_payload_send_msg()
3460 struct drm_dp_mst_branch *mstb; in drm_dp_send_dpcd_read() local
3462 mstb = drm_dp_mst_topology_get_mstb_validated(mgr, port->parent); in drm_dp_send_dpcd_read()
3463 if (!mstb) in drm_dp_send_dpcd_read()
3477 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_send_dpcd_read()
3483 mstb, port->port_num, offset, size); in drm_dp_send_dpcd_read()
3500 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_send_dpcd_read()
3511 struct drm_dp_mst_branch *mstb; in drm_dp_send_dpcd_write() local
3513 mstb = drm_dp_mst_topology_get_mstb_validated(mgr, port->parent); in drm_dp_send_dpcd_write()
3514 if (!mstb) in drm_dp_send_dpcd_write()
3524 txmsg->dst = mstb; in drm_dp_send_dpcd_write()
3528 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_send_dpcd_write()
3538 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_send_dpcd_write()
3553 struct drm_dp_mst_branch *mstb, in drm_dp_send_up_ack_reply() argument
3562 txmsg->dst = mstb; in drm_dp_send_up_ack_reply()
3640 struct drm_dp_mst_branch *mstb = NULL; in drm_dp_mst_topology_mgr_set_mst() local
3660 mstb = drm_dp_add_mst_branch_device(1, NULL); in drm_dp_mst_topology_mgr_set_mst()
3661 if (mstb == NULL) { in drm_dp_mst_topology_mgr_set_mst()
3665 mstb->mgr = mgr; in drm_dp_mst_topology_mgr_set_mst()
3668 mgr->mst_primary = mstb; in drm_dp_mst_topology_mgr_set_mst()
3686 mstb = mgr->mst_primary; in drm_dp_mst_topology_mgr_set_mst()
3698 if (mstb) in drm_dp_mst_topology_mgr_set_mst()
3699 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_mst_topology_mgr_set_mst()
3706 drm_dp_mst_topology_mgr_invalidate_mstb(struct drm_dp_mst_branch *mstb) in drm_dp_mst_topology_mgr_invalidate_mstb() argument
3711 mstb->link_address_sent = false; in drm_dp_mst_topology_mgr_invalidate_mstb()
3713 list_for_each_entry(port, &mstb->ports, next) in drm_dp_mst_topology_mgr_invalidate_mstb()
3714 if (port->mstb) in drm_dp_mst_topology_mgr_invalidate_mstb()
3715 drm_dp_mst_topology_mgr_invalidate_mstb(port->mstb); in drm_dp_mst_topology_mgr_invalidate_mstb()
3858 struct drm_dp_mst_branch **mstb) in drm_dp_get_one_sb_msg() argument
3872 *mstb = NULL; in drm_dp_get_one_sb_msg()
3891 *mstb = drm_dp_get_mst_branch_device(mgr, hdr.lct, hdr.rad); in drm_dp_get_one_sb_msg()
3892 if (!*mstb) { in drm_dp_get_one_sb_msg()
3944 const struct drm_dp_mst_branch *mstb = txmsg->dst; in verify_rx_request_type() local
3952 drm_dp_mst_rad_to_str(mstb->rad, mstb->lct, rad_str, sizeof(rad_str)); in verify_rx_request_type()
3955 mstb, hdr->seqno, mstb->lct, rad_str, in verify_rx_request_type()
3965 struct drm_dp_mst_branch *mstb = NULL; in drm_dp_mst_handle_down_rep() local
3968 if (!drm_dp_get_one_sb_msg(mgr, false, &mstb)) in drm_dp_mst_handle_down_rep()
3982 if (!txmsg || txmsg->dst != mstb) { in drm_dp_mst_handle_down_rep()
3987 mstb, hdr->seqno, hdr->lct, hdr->rad[0], msg->msg[0]); in drm_dp_mst_handle_down_rep()
4022 if (mstb) in drm_dp_mst_handle_down_rep()
4023 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_mst_handle_down_rep()
4048 struct drm_dp_mst_branch *mstb = NULL; in drm_dp_mst_process_up_req() local
4062 mstb = drm_dp_get_mst_branch_device_by_guid(mgr, guid); in drm_dp_mst_process_up_req()
4064 mstb = drm_dp_get_mst_branch_device(mgr, hdr->lct, hdr->rad); in drm_dp_mst_process_up_req()
4067 if (!mstb) { in drm_dp_mst_process_up_req()
4077 dowork = drm_dp_mst_handle_conn_stat(mstb, &msg->u.conn_stat); in drm_dp_mst_process_up_req()
4082 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_mst_process_up_req()
4835 struct drm_dp_mst_branch *mstb) in drm_dp_mst_dump_mstb() argument
4838 int tabs = mstb->lct; in drm_dp_mst_dump_mstb()
4846 seq_printf(m, "%smstb - [%p]: num_ports: %d\n", prefix, mstb, mstb->num_ports); in drm_dp_mst_dump_mstb()
4847 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_mst_dump_mstb()
4860 if (port->mstb) in drm_dp_mst_dump_mstb()
4861 drm_dp_mst_dump_mstb(m, port->mstb); in drm_dp_mst_dump_mstb()
5024 drm_dp_delayed_destroy_mstb(struct drm_dp_mst_branch *mstb) in drm_dp_delayed_destroy_mstb() argument
5026 struct drm_dp_mst_topology_mgr *mgr = mstb->mgr; in drm_dp_delayed_destroy_mstb()
5032 list_for_each_entry_safe(port, port_tmp, &mstb->ports, next) { in drm_dp_delayed_destroy_mstb()
5039 mutex_lock(&mstb->mgr->qlock); in drm_dp_delayed_destroy_mstb()
5041 if (txmsg->dst != mstb) in drm_dp_delayed_destroy_mstb()
5048 mutex_unlock(&mstb->mgr->qlock); in drm_dp_delayed_destroy_mstb()
5051 wake_up_all(&mstb->mgr->tx_waitq); in drm_dp_delayed_destroy_mstb()
5053 drm_dp_mst_put_mstb_malloc(mstb); in drm_dp_delayed_destroy_mstb()
5072 struct drm_dp_mst_branch *mstb; in drm_dp_delayed_destroy_work() local
5075 mstb = list_first_entry_or_null(&mgr->destroy_branch_device_list, in drm_dp_delayed_destroy_work()
5078 if (mstb) in drm_dp_delayed_destroy_work()
5079 list_del(&mstb->destroy_next); in drm_dp_delayed_destroy_work()
5082 if (!mstb) in drm_dp_delayed_destroy_work()
5085 drm_dp_delayed_destroy_mstb(mstb); in drm_dp_delayed_destroy_work()
5214 if (!parent->mstb) in drm_dp_mst_port_downstream_of_parent_locked()
5217 return drm_dp_mst_port_downstream_of_branch(port, parent->mstb); in drm_dp_mst_port_downstream_of_parent_locked()
5251 drm_dp_mst_atomic_check_mstb_bw_limit(struct drm_dp_mst_branch *mstb, in drm_dp_mst_atomic_check_mstb_bw_limit() argument
5265 !drm_dp_mst_port_downstream_of_branch(payload->port, mstb)) in drm_dp_mst_atomic_check_mstb_bw_limit()
5274 if (mstb->port_parent) in drm_dp_mst_atomic_check_mstb_bw_limit()
5275 drm_dbg_atomic(mstb->mgr->dev, in drm_dp_mst_atomic_check_mstb_bw_limit()
5277 mstb->port_parent->parent, mstb->port_parent, mstb); in drm_dp_mst_atomic_check_mstb_bw_limit()
5279 drm_dbg_atomic(mstb->mgr->dev, "[MSTB:%p] Checking bandwidth limits\n", mstb); in drm_dp_mst_atomic_check_mstb_bw_limit()
5281 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_mst_atomic_check_mstb_bw_limit()
5322 pbn_used = drm_dp_mst_atomic_check_mstb_bw_limit(port->mstb, in drm_dp_mst_atomic_check_port_bw_limit()
5814 static int drm_dp_mst_i2c_read(struct drm_dp_mst_branch *mstb, in drm_dp_mst_i2c_read() argument
5843 txmsg->dst = mstb; in drm_dp_mst_i2c_read()
5848 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_mst_i2c_read()
5867 static int drm_dp_mst_i2c_write(struct drm_dp_mst_branch *mstb, in drm_dp_mst_i2c_write() argument
5891 txmsg->dst = mstb; in drm_dp_mst_i2c_write()
5896 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_mst_i2c_write()
5919 struct drm_dp_mst_branch *mstb; in drm_dp_mst_i2c_xfer() local
5923 mstb = drm_dp_mst_topology_get_mstb_validated(mgr, port->parent); in drm_dp_mst_i2c_xfer()
5924 if (!mstb) in drm_dp_mst_i2c_xfer()
5928 ret = drm_dp_mst_i2c_read(mstb, port, msgs, num); in drm_dp_mst_i2c_xfer()
5930 ret = drm_dp_mst_i2c_write(mstb, port, msgs, num); in drm_dp_mst_i2c_xfer()
5936 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_mst_i2c_xfer()
6024 port->mstb && in drm_dp_mst_is_virtual_dpcd()
6025 port->mstb->num_ports == 2) { in drm_dp_mst_is_virtual_dpcd()
6026 list_for_each_entry(downstream_port, &port->mstb->ports, next) { in drm_dp_mst_is_virtual_dpcd()