--- linux-4.2-rc4/drivers/gpu/drm/drm_dp_mst_topology.c.orig 2015-07-27 20:57:48.998541059 -0700 +++ linux-4.2-rc4/drivers/gpu/drm/drm_dp_mst_topology.c 2015-07-27 21:18:36.578989127 -0700 @@ -1104,10 +1104,8 @@ static void drm_dp_add_port(struct drm_d drm_dp_port_teardown_pdt(port, old_pdt); ret = drm_dp_port_setup_pdt(port); - if (ret == true) { + if (ret == true) drm_dp_send_link_address(mstb->mgr, port->mstb); - port->mstb->link_address_sent = true; - } } if (created && !port->input) { @@ -1201,10 +1199,10 @@ static void drm_dp_check_and_send_link_a { struct drm_dp_mst_port *port; struct drm_dp_mst_branch *mstb_child; - if (!mstb->link_address_sent) { + + if (!mstb->link_address_sent) drm_dp_send_link_address(mgr, mstb); - mstb->link_address_sent = true; - } + list_for_each_entry(port, &mstb->ports, next) { if (port->input) continue; @@ -1474,6 +1472,8 @@ static int drm_dp_send_link_address(stru drm_dp_queue_down_tx(mgr, txmsg); + mstb->link_address_sent = true; + ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); if (ret > 0) { int i;