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,
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()
1320 struct drm_dp_mst_branch *mstb; in drm_dp_add_mst_branch_device() local
1322 mstb = kzalloc(sizeof(*mstb), GFP_KERNEL); in drm_dp_add_mst_branch_device()
1323 if (!mstb) in drm_dp_add_mst_branch_device()
1326 mstb->lct = lct; in drm_dp_add_mst_branch_device()
1328 memcpy(mstb->rad, rad, lct / 2); in drm_dp_add_mst_branch_device()
1329 INIT_LIST_HEAD(&mstb->ports); in drm_dp_add_mst_branch_device()
1330 kref_init(&mstb->topology_kref); in drm_dp_add_mst_branch_device()
1331 kref_init(&mstb->malloc_kref); in drm_dp_add_mst_branch_device()
1332 return mstb; in drm_dp_add_mst_branch_device()
1337 struct drm_dp_mst_branch *mstb = in drm_dp_free_mst_branch_device() local
1340 if (mstb->port_parent) in drm_dp_free_mst_branch_device()
1341 drm_dp_mst_put_port_malloc(mstb->port_parent); in drm_dp_free_mst_branch_device()
1343 kfree(mstb); in drm_dp_free_mst_branch_device()
1446 drm_dp_mst_get_mstb_malloc(struct drm_dp_mst_branch *mstb) in drm_dp_mst_get_mstb_malloc() argument
1448 kref_get(&mstb->malloc_kref); in drm_dp_mst_get_mstb_malloc()
1449 drm_dbg(mstb->mgr->dev, "mstb %p (%d)\n", mstb, kref_read(&mstb->malloc_kref)); in drm_dp_mst_get_mstb_malloc()
1464 drm_dp_mst_put_mstb_malloc(struct drm_dp_mst_branch *mstb) in drm_dp_mst_put_mstb_malloc() argument
1466 drm_dbg(mstb->mgr->dev, "mstb %p (%d)\n", mstb, kref_read(&mstb->malloc_kref) - 1); in drm_dp_mst_put_mstb_malloc()
1467 kref_put(&mstb->malloc_kref, drm_dp_free_mst_branch_device); in drm_dp_mst_put_mstb_malloc()
1638 drm_dp_mst_dump_mstb_topology_history(struct drm_dp_mst_branch *mstb) in drm_dp_mst_dump_mstb_topology_history() argument
1640 __dump_topology_ref_history(&mstb->topology_ref_history, mstb, in drm_dp_mst_dump_mstb_topology_history()
1652 save_mstb_topology_ref(struct drm_dp_mst_branch *mstb, in save_mstb_topology_ref() argument
1655 __topology_ref_save(mstb->mgr, &mstb->topology_ref_history, type); in save_mstb_topology_ref()
1682 drm_dp_mst_dump_mstb_topology_history(struct drm_dp_mst_branch *mstb) {} in drm_dp_mst_dump_mstb_topology_history() argument
1685 #define save_mstb_topology_ref(mstb, type) argument
1705 struct drm_dp_mst_branch *mstb = in drm_dp_destroy_mst_branch_device() local
1707 struct drm_dp_mst_topology_mgr *mgr = mstb->mgr; in drm_dp_destroy_mst_branch_device()
1709 drm_dp_mst_dump_mstb_topology_history(mstb); in drm_dp_destroy_mst_branch_device()
1711 INIT_LIST_HEAD(&mstb->destroy_next); in drm_dp_destroy_mst_branch_device()
1718 list_add(&mstb->destroy_next, &mgr->destroy_branch_device_list); in drm_dp_destroy_mst_branch_device()
1746 drm_dp_mst_topology_try_get_mstb(struct drm_dp_mst_branch *mstb) in drm_dp_mst_topology_try_get_mstb() argument
1750 topology_ref_history_lock(mstb->mgr); in drm_dp_mst_topology_try_get_mstb()
1751 ret = kref_get_unless_zero(&mstb->topology_kref); in drm_dp_mst_topology_try_get_mstb()
1753 drm_dbg(mstb->mgr->dev, "mstb %p (%d)\n", mstb, kref_read(&mstb->topology_kref)); in drm_dp_mst_topology_try_get_mstb()
1754 save_mstb_topology_ref(mstb, DRM_DP_MST_TOPOLOGY_REF_GET); in drm_dp_mst_topology_try_get_mstb()
1757 topology_ref_history_unlock(mstb->mgr); in drm_dp_mst_topology_try_get_mstb()
1776 static void drm_dp_mst_topology_get_mstb(struct drm_dp_mst_branch *mstb) in drm_dp_mst_topology_get_mstb() argument
1778 topology_ref_history_lock(mstb->mgr); in drm_dp_mst_topology_get_mstb()
1780 save_mstb_topology_ref(mstb, DRM_DP_MST_TOPOLOGY_REF_GET); in drm_dp_mst_topology_get_mstb()
1781 WARN_ON(kref_read(&mstb->topology_kref) == 0); in drm_dp_mst_topology_get_mstb()
1782 kref_get(&mstb->topology_kref); in drm_dp_mst_topology_get_mstb()
1783 drm_dbg(mstb->mgr->dev, "mstb %p (%d)\n", mstb, kref_read(&mstb->topology_kref)); in drm_dp_mst_topology_get_mstb()
1785 topology_ref_history_unlock(mstb->mgr); in drm_dp_mst_topology_get_mstb()
1801 drm_dp_mst_topology_put_mstb(struct drm_dp_mst_branch *mstb) in drm_dp_mst_topology_put_mstb() argument
1803 topology_ref_history_lock(mstb->mgr); in drm_dp_mst_topology_put_mstb()
1805 drm_dbg(mstb->mgr->dev, "mstb %p (%d)\n", mstb, kref_read(&mstb->topology_kref) - 1); in drm_dp_mst_topology_put_mstb()
1806 save_mstb_topology_ref(mstb, DRM_DP_MST_TOPOLOGY_REF_PUT); in drm_dp_mst_topology_put_mstb()
1808 topology_ref_history_unlock(mstb->mgr); in drm_dp_mst_topology_put_mstb()
1809 kref_put(&mstb->topology_kref, drm_dp_destroy_mst_branch_device); in drm_dp_mst_topology_put_mstb()
1924 drm_dp_mst_topology_get_mstb_validated_locked(struct drm_dp_mst_branch *mstb, in drm_dp_mst_topology_get_mstb_validated_locked() argument
1930 if (to_find == mstb) in drm_dp_mst_topology_get_mstb_validated_locked()
1931 return mstb; in drm_dp_mst_topology_get_mstb_validated_locked()
1933 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_mst_topology_get_mstb_validated_locked()
1934 if (port->mstb) { in drm_dp_mst_topology_get_mstb_validated_locked()
1936 port->mstb, to_find); in drm_dp_mst_topology_get_mstb_validated_locked()
1946 struct drm_dp_mst_branch *mstb) in drm_dp_mst_topology_get_mstb_validated() argument
1953 mgr->mst_primary, mstb); in drm_dp_mst_topology_get_mstb_validated()
1963 drm_dp_mst_topology_get_port_validated_locked(struct drm_dp_mst_branch *mstb, in drm_dp_mst_topology_get_port_validated_locked() argument
1968 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_mst_topology_get_port_validated_locked()
1972 if (port->mstb) { in drm_dp_mst_topology_get_port_validated_locked()
1974 port->mstb, to_find); in drm_dp_mst_topology_get_port_validated_locked()
2000 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
2005 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_get_port()
2058 struct drm_dp_mst_branch *mstb; in drm_dp_port_set_pdt() local
2083 drm_dp_mst_topology_put_mstb(port->mstb); in drm_dp_port_set_pdt()
2084 port->mstb = NULL; in drm_dp_port_set_pdt()
2098 mstb = drm_dp_add_mst_branch_device(lct, rad); in drm_dp_port_set_pdt()
2099 if (!mstb) { in drm_dp_port_set_pdt()
2106 port->mstb = mstb; in drm_dp_port_set_pdt()
2107 mstb->mgr = port->mgr; in drm_dp_port_set_pdt()
2108 mstb->port_parent = port; in drm_dp_port_set_pdt()
2174 static int drm_dp_check_mstb_guid(struct drm_dp_mst_branch *mstb, u8 *guid) in drm_dp_check_mstb_guid() argument
2178 memcpy(mstb->guid, guid, 16); in drm_dp_check_mstb_guid()
2180 if (!drm_dp_validate_guid(mstb->mgr, mstb->guid)) { in drm_dp_check_mstb_guid()
2181 if (mstb->port_parent) { in drm_dp_check_mstb_guid()
2182 ret = drm_dp_send_dpcd_write(mstb->mgr, in drm_dp_check_mstb_guid()
2183 mstb->port_parent, in drm_dp_check_mstb_guid()
2184 DP_GUID, 16, mstb->guid); in drm_dp_check_mstb_guid()
2186 ret = drm_dp_dpcd_write(mstb->mgr->aux, in drm_dp_check_mstb_guid()
2187 DP_GUID, mstb->guid, 16); in drm_dp_check_mstb_guid()
2197 static void build_mst_prop_path(const struct drm_dp_mst_branch *mstb, in build_mst_prop_path() argument
2205 snprintf(proppath, proppath_size, "mst:%d", mstb->mgr->conn_base_id); in build_mst_prop_path()
2206 for (i = 0; i < (mstb->lct - 1); i++) { in build_mst_prop_path()
2208 int port_num = (mstb->rad[i / 2] >> shift) & 0xf; in build_mst_prop_path()
2258 drm_dp_mst_port_add_connector(struct drm_dp_mst_branch *mstb, in drm_dp_mst_port_add_connector() argument
2265 build_mst_prop_path(mstb, port->port_num, proppath, sizeof(proppath)); in drm_dp_mst_port_add_connector()
2303 struct drm_dp_mst_branch *mstb, u8 port_number) in drm_dp_mst_add_port() argument
2312 port->parent = mstb; in drm_dp_mst_add_port()
2327 drm_dp_mst_get_mstb_malloc(mstb); in drm_dp_mst_add_port()
2333 drm_dp_mst_handle_link_address_port(struct drm_dp_mst_branch *mstb, in drm_dp_mst_handle_link_address_port() argument
2337 struct drm_dp_mst_topology_mgr *mgr = mstb->mgr; in drm_dp_mst_handle_link_address_port()
2344 port = drm_dp_get_port(mstb, port_msg->port_number); in drm_dp_mst_handle_link_address_port()
2346 port = drm_dp_mst_add_port(dev, mgr, mstb, in drm_dp_mst_handle_link_address_port()
2358 port = drm_dp_mst_add_port(dev, mgr, mstb, in drm_dp_mst_handle_link_address_port()
2398 list_add(&port->next, &mstb->ports); in drm_dp_mst_handle_link_address_port()
2399 mstb->num_ports++; in drm_dp_mst_handle_link_address_port()
2409 ret = drm_dp_send_enum_path_resources(mgr, mstb, in drm_dp_mst_handle_link_address_port()
2438 drm_dp_mst_port_add_connector(mstb, port); in drm_dp_mst_handle_link_address_port()
2440 if (send_link_addr && port->mstb) { in drm_dp_mst_handle_link_address_port()
2441 ret = drm_dp_send_link_address(mgr, port->mstb); in drm_dp_mst_handle_link_address_port()
2462 drm_dp_mst_handle_conn_stat(struct drm_dp_mst_branch *mstb, in drm_dp_mst_handle_conn_stat() argument
2465 struct drm_dp_mst_topology_mgr *mgr = mstb->mgr; in drm_dp_mst_handle_conn_stat()
2472 port = drm_dp_get_port(mstb, conn_stat->port_number); in drm_dp_mst_handle_conn_stat()
2484 mstb->link_address_sent = false; in drm_dp_mst_handle_conn_stat()
2494 mstb->link_address_sent = false; in drm_dp_mst_handle_conn_stat()
2505 drm_dp_send_enum_path_resources(mgr, mstb, port); in drm_dp_mst_handle_conn_stat()
2523 drm_dp_mst_port_add_connector(mstb, port); in drm_dp_mst_handle_conn_stat()
2533 struct drm_dp_mst_branch *mstb; in drm_dp_get_mst_branch_device() local
2539 mstb = mgr->mst_primary; in drm_dp_get_mst_branch_device()
2541 if (!mstb) in drm_dp_get_mst_branch_device()
2548 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_get_mst_branch_device()
2550 mstb = port->mstb; in drm_dp_get_mst_branch_device()
2551 if (!mstb) { in drm_dp_get_mst_branch_device()
2562 ret = drm_dp_mst_topology_try_get_mstb(mstb); in drm_dp_get_mst_branch_device()
2564 mstb = NULL; in drm_dp_get_mst_branch_device()
2567 return mstb; in drm_dp_get_mst_branch_device()
2571 struct drm_dp_mst_branch *mstb, in get_mst_branch_device_by_guid_helper() argument
2577 if (memcmp(mstb->guid, guid, 16) == 0) in get_mst_branch_device_by_guid_helper()
2578 return mstb; in get_mst_branch_device_by_guid_helper()
2581 list_for_each_entry(port, &mstb->ports, next) { in get_mst_branch_device_by_guid_helper()
2582 if (!port->mstb) in get_mst_branch_device_by_guid_helper()
2585 found_mstb = get_mst_branch_device_by_guid_helper(port->mstb, guid); in get_mst_branch_device_by_guid_helper()
2598 struct drm_dp_mst_branch *mstb; in drm_dp_get_mst_branch_device_by_guid() local
2604 mstb = get_mst_branch_device_by_guid_helper(mgr->mst_primary, guid); in drm_dp_get_mst_branch_device_by_guid()
2605 if (mstb) { in drm_dp_get_mst_branch_device_by_guid()
2606 ret = drm_dp_mst_topology_try_get_mstb(mstb); in drm_dp_get_mst_branch_device_by_guid()
2608 mstb = NULL; in drm_dp_get_mst_branch_device_by_guid()
2612 return mstb; in drm_dp_get_mst_branch_device_by_guid()
2616 struct drm_dp_mst_branch *mstb) in drm_dp_check_and_send_link_address() argument
2622 if (!mstb->link_address_sent) { in drm_dp_check_and_send_link_address()
2623 ret = drm_dp_send_link_address(mgr, mstb); in drm_dp_check_and_send_link_address()
2630 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_check_and_send_link_address()
2631 if (port->input || !port->ddps || !port->mstb) in drm_dp_check_and_send_link_address()
2634 ret = drm_dp_check_and_send_link_address(mgr, port->mstb); in drm_dp_check_and_send_link_address()
2649 struct drm_dp_mst_branch *mstb; in drm_dp_mst_link_probe_work() local
2659 mstb = mgr->mst_primary; in drm_dp_mst_link_probe_work()
2660 if (mstb) { in drm_dp_mst_link_probe_work()
2661 ret = drm_dp_mst_topology_try_get_mstb(mstb); in drm_dp_mst_link_probe_work()
2663 mstb = NULL; in drm_dp_mst_link_probe_work()
2666 if (!mstb) { in drm_dp_mst_link_probe_work()
2681 drm_dp_send_clear_payload_id_table(mgr, mstb); in drm_dp_mst_link_probe_work()
2684 ret = drm_dp_check_and_send_link_address(mgr, mstb); in drm_dp_mst_link_probe_work()
2685 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_mst_link_probe_work()
2755 struct drm_dp_mst_branch *mstb = txmsg->dst; in set_hdr_from_dst_qlock() local
2770 hdr->lct = mstb->lct; in set_hdr_from_dst_qlock()
2771 hdr->lcr = mstb->lct - 1; in set_hdr_from_dst_qlock()
2774 memcpy(hdr->rad, mstb->rad, hdr->lct / 2); in set_hdr_from_dst_qlock()
2906 struct drm_dp_mst_branch *mstb) in drm_dp_send_link_address() argument
2918 txmsg->dst = mstb; in drm_dp_send_link_address()
2921 mstb->link_address_sent = true; in drm_dp_send_link_address()
2925 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_send_link_address()
2940 ret = drm_dp_check_mstb_guid(mstb, reply->guid); in drm_dp_send_link_address()
2944 drm_dp_mst_rad_to_str(mstb->rad, mstb->lct, buf, sizeof(buf)); in drm_dp_send_link_address()
2951 ret = drm_dp_mst_handle_link_address_port(mstb, mgr->dev, in drm_dp_send_link_address()
2965 list_for_each_entry_safe(port, tmp, &mstb->ports, next) { in drm_dp_send_link_address()
2979 mstb->link_address_sent = false; in drm_dp_send_link_address()
2986 struct drm_dp_mst_branch *mstb) in drm_dp_send_clear_payload_id_table() argument
2995 txmsg->dst = mstb; in drm_dp_send_clear_payload_id_table()
3000 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_send_clear_payload_id_table()
3009 struct drm_dp_mst_branch *mstb, in drm_dp_send_enum_path_resources() argument
3020 txmsg->dst = mstb; in drm_dp_send_enum_path_resources()
3025 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_send_enum_path_resources()
3058 …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
3060 if (!mstb->port_parent) in drm_dp_get_last_connected_port_to_mstb()
3063 if (mstb->port_parent->mstb != mstb) in drm_dp_get_last_connected_port_to_mstb()
3064 return mstb->port_parent; in drm_dp_get_last_connected_port_to_mstb()
3066 return drm_dp_get_last_connected_port_to_mstb(mstb->port_parent->parent); in drm_dp_get_last_connected_port_to_mstb()
3079 struct drm_dp_mst_branch *mstb, in drm_dp_get_last_connected_port_and_mstb() argument
3090 found_port = drm_dp_get_last_connected_port_to_mstb(mstb); in drm_dp_get_last_connected_port_and_mstb()
3099 mstb = found_port->parent; in drm_dp_get_last_connected_port_and_mstb()
3113 struct drm_dp_mst_branch *mstb; in drm_dp_payload_send_msg() local
3119 mstb = drm_dp_mst_topology_get_mstb_validated(mgr, port->parent); in drm_dp_payload_send_msg()
3120 if (!mstb) { in drm_dp_payload_send_msg()
3121 mstb = drm_dp_get_last_connected_port_and_mstb(mgr, in drm_dp_payload_send_msg()
3125 if (!mstb) in drm_dp_payload_send_msg()
3138 txmsg->dst = mstb; in drm_dp_payload_send_msg()
3153 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_payload_send_msg()
3162 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_payload_send_msg()
3432 struct drm_dp_mst_branch *mstb; in drm_dp_send_dpcd_read() local
3434 mstb = drm_dp_mst_topology_get_mstb_validated(mgr, port->parent); in drm_dp_send_dpcd_read()
3435 if (!mstb) in drm_dp_send_dpcd_read()
3449 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_send_dpcd_read()
3455 mstb, port->port_num, offset, size); in drm_dp_send_dpcd_read()
3472 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_send_dpcd_read()
3483 struct drm_dp_mst_branch *mstb; in drm_dp_send_dpcd_write() local
3485 mstb = drm_dp_mst_topology_get_mstb_validated(mgr, port->parent); in drm_dp_send_dpcd_write()
3486 if (!mstb) in drm_dp_send_dpcd_write()
3496 txmsg->dst = mstb; in drm_dp_send_dpcd_write()
3500 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_send_dpcd_write()
3510 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_send_dpcd_write()
3525 struct drm_dp_mst_branch *mstb, in drm_dp_send_up_ack_reply() argument
3534 txmsg->dst = mstb; in drm_dp_send_up_ack_reply()
3602 struct drm_dp_mst_branch *mstb = NULL; in drm_dp_mst_topology_mgr_set_mst() local
3622 mstb = drm_dp_add_mst_branch_device(1, NULL); in drm_dp_mst_topology_mgr_set_mst()
3623 if (mstb == NULL) { in drm_dp_mst_topology_mgr_set_mst()
3627 mstb->mgr = mgr; in drm_dp_mst_topology_mgr_set_mst()
3630 mgr->mst_primary = mstb; in drm_dp_mst_topology_mgr_set_mst()
3648 mstb = mgr->mst_primary; in drm_dp_mst_topology_mgr_set_mst()
3661 if (mstb) in drm_dp_mst_topology_mgr_set_mst()
3662 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_mst_topology_mgr_set_mst()
3669 drm_dp_mst_topology_mgr_invalidate_mstb(struct drm_dp_mst_branch *mstb) in drm_dp_mst_topology_mgr_invalidate_mstb() argument
3674 mstb->link_address_sent = false; in drm_dp_mst_topology_mgr_invalidate_mstb()
3676 list_for_each_entry(port, &mstb->ports, next) in drm_dp_mst_topology_mgr_invalidate_mstb()
3677 if (port->mstb) in drm_dp_mst_topology_mgr_invalidate_mstb()
3678 drm_dp_mst_topology_mgr_invalidate_mstb(port->mstb); in drm_dp_mst_topology_mgr_invalidate_mstb()
3786 struct drm_dp_mst_branch **mstb) in drm_dp_get_one_sb_msg() argument
3800 *mstb = NULL; in drm_dp_get_one_sb_msg()
3819 *mstb = drm_dp_get_mst_branch_device(mgr, hdr.lct, hdr.rad); in drm_dp_get_one_sb_msg()
3820 if (!*mstb) { in drm_dp_get_one_sb_msg()
3865 struct drm_dp_mst_branch *mstb = NULL; in drm_dp_mst_handle_down_rep() local
3868 if (!drm_dp_get_one_sb_msg(mgr, false, &mstb)) in drm_dp_mst_handle_down_rep()
3882 if (!txmsg || txmsg->dst != mstb) { in drm_dp_mst_handle_down_rep()
3887 mstb, hdr->seqno, hdr->lct, hdr->rad[0], msg->msg[0]); in drm_dp_mst_handle_down_rep()
3904 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_mst_handle_down_rep()
3918 if (mstb) in drm_dp_mst_handle_down_rep()
3919 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_mst_handle_down_rep()
3928 struct drm_dp_mst_branch *mstb = NULL; in drm_dp_mst_process_up_req() local
3942 mstb = drm_dp_get_mst_branch_device_by_guid(mgr, guid); in drm_dp_mst_process_up_req()
3944 mstb = drm_dp_get_mst_branch_device(mgr, hdr->lct, hdr->rad); in drm_dp_mst_process_up_req()
3947 if (!mstb) { in drm_dp_mst_process_up_req()
3954 dowork = drm_dp_mst_handle_conn_stat(mstb, &msg->u.conn_stat); in drm_dp_mst_process_up_req()
3958 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_mst_process_up_req()
4683 struct drm_dp_mst_branch *mstb) in drm_dp_mst_dump_mstb() argument
4686 int tabs = mstb->lct; in drm_dp_mst_dump_mstb()
4694 seq_printf(m, "%smstb - [%p]: num_ports: %d\n", prefix, mstb, mstb->num_ports); in drm_dp_mst_dump_mstb()
4695 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_mst_dump_mstb()
4708 if (port->mstb) in drm_dp_mst_dump_mstb()
4709 drm_dp_mst_dump_mstb(m, port->mstb); in drm_dp_mst_dump_mstb()
4863 drm_dp_delayed_destroy_mstb(struct drm_dp_mst_branch *mstb) in drm_dp_delayed_destroy_mstb() argument
4865 struct drm_dp_mst_topology_mgr *mgr = mstb->mgr; in drm_dp_delayed_destroy_mstb()
4871 list_for_each_entry_safe(port, port_tmp, &mstb->ports, next) { in drm_dp_delayed_destroy_mstb()
4878 mutex_lock(&mstb->mgr->qlock); in drm_dp_delayed_destroy_mstb()
4880 if (txmsg->dst != mstb) in drm_dp_delayed_destroy_mstb()
4887 mutex_unlock(&mstb->mgr->qlock); in drm_dp_delayed_destroy_mstb()
4890 wake_up_all(&mstb->mgr->tx_waitq); in drm_dp_delayed_destroy_mstb()
4892 drm_dp_mst_put_mstb_malloc(mstb); in drm_dp_delayed_destroy_mstb()
4911 struct drm_dp_mst_branch *mstb; in drm_dp_delayed_destroy_work() local
4914 mstb = list_first_entry_or_null(&mgr->destroy_branch_device_list, in drm_dp_delayed_destroy_work()
4917 if (mstb) in drm_dp_delayed_destroy_work()
4918 list_del(&mstb->destroy_next); in drm_dp_delayed_destroy_work()
4921 if (!mstb) in drm_dp_delayed_destroy_work()
4924 drm_dp_delayed_destroy_mstb(mstb); in drm_dp_delayed_destroy_work()
5037 drm_dp_mst_atomic_check_mstb_bw_limit(struct drm_dp_mst_branch *mstb, in drm_dp_mst_atomic_check_mstb_bw_limit() argument
5050 !drm_dp_mst_port_downstream_of_branch(payload->port, mstb)) in drm_dp_mst_atomic_check_mstb_bw_limit()
5059 if (mstb->port_parent) in drm_dp_mst_atomic_check_mstb_bw_limit()
5060 drm_dbg_atomic(mstb->mgr->dev, in drm_dp_mst_atomic_check_mstb_bw_limit()
5062 mstb->port_parent->parent, mstb->port_parent, mstb); in drm_dp_mst_atomic_check_mstb_bw_limit()
5064 drm_dbg_atomic(mstb->mgr->dev, "[MSTB:%p] Checking bandwidth limits\n", mstb); in drm_dp_mst_atomic_check_mstb_bw_limit()
5066 list_for_each_entry(port, &mstb->ports, next) { in drm_dp_mst_atomic_check_mstb_bw_limit()
5105 pbn_used = drm_dp_mst_atomic_check_mstb_bw_limit(port->mstb, in drm_dp_mst_atomic_check_port_bw_limit()
5545 static int drm_dp_mst_i2c_read(struct drm_dp_mst_branch *mstb, in drm_dp_mst_i2c_read() argument
5574 txmsg->dst = mstb; in drm_dp_mst_i2c_read()
5579 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_mst_i2c_read()
5598 static int drm_dp_mst_i2c_write(struct drm_dp_mst_branch *mstb, in drm_dp_mst_i2c_write() argument
5622 txmsg->dst = mstb; in drm_dp_mst_i2c_write()
5627 ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); in drm_dp_mst_i2c_write()
5650 struct drm_dp_mst_branch *mstb; in drm_dp_mst_i2c_xfer() local
5654 mstb = drm_dp_mst_topology_get_mstb_validated(mgr, port->parent); in drm_dp_mst_i2c_xfer()
5655 if (!mstb) in drm_dp_mst_i2c_xfer()
5659 ret = drm_dp_mst_i2c_read(mstb, port, msgs, num); in drm_dp_mst_i2c_xfer()
5661 ret = drm_dp_mst_i2c_write(mstb, port, msgs, num); in drm_dp_mst_i2c_xfer()
5667 drm_dp_mst_topology_put_mstb(mstb); in drm_dp_mst_i2c_xfer()
5756 port->mstb && in drm_dp_mst_is_virtual_dpcd()
5757 port->mstb->num_ports == 2) { in drm_dp_mst_is_virtual_dpcd()
5758 list_for_each_entry(downstream_port, &port->mstb->ports, next) { in drm_dp_mst_is_virtual_dpcd()