Skip to content

Commit 68d8c9f

Browse files
committed
drm/dp/mst: update the link_address_sent before sending the link address (v3)
Update the state before sending the msg to close it. v2: reset value if return indicates we haven't send the msg. v3: just clean the code up. Pointed out by Adam J Richter on Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91481 Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Dave Airlie <airlied@redhat.com>
1 parent df4839f commit 68d8c9f

File tree

1 file changed

+12
-13
lines changed

1 file changed

+12
-13
lines changed

drivers/gpu/drm/drm_dp_mst_topology.c

+12-13
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ static int drm_dp_send_dpcd_write(struct drm_dp_mst_topology_mgr *mgr,
5353
struct drm_dp_mst_port *port,
5454
int offset, int size, u8 *bytes);
5555

56-
static int drm_dp_send_link_address(struct drm_dp_mst_topology_mgr *mgr,
57-
struct drm_dp_mst_branch *mstb);
56+
static void drm_dp_send_link_address(struct drm_dp_mst_topology_mgr *mgr,
57+
struct drm_dp_mst_branch *mstb);
5858
static int drm_dp_send_enum_path_resources(struct drm_dp_mst_topology_mgr *mgr,
5959
struct drm_dp_mst_branch *mstb,
6060
struct drm_dp_mst_port *port);
@@ -1109,10 +1109,8 @@ static void drm_dp_add_port(struct drm_dp_mst_branch *mstb,
11091109
drm_dp_port_teardown_pdt(port, old_pdt);
11101110

11111111
ret = drm_dp_port_setup_pdt(port);
1112-
if (ret == true) {
1112+
if (ret == true)
11131113
drm_dp_send_link_address(mstb->mgr, port->mstb);
1114-
port->mstb->link_address_sent = true;
1115-
}
11161114
}
11171115

11181116
if (created && !port->input) {
@@ -1216,10 +1214,9 @@ static void drm_dp_check_and_send_link_address(struct drm_dp_mst_topology_mgr *m
12161214
{
12171215
struct drm_dp_mst_port *port;
12181216
struct drm_dp_mst_branch *mstb_child;
1219-
if (!mstb->link_address_sent) {
1217+
if (!mstb->link_address_sent)
12201218
drm_dp_send_link_address(mgr, mstb);
1221-
mstb->link_address_sent = true;
1222-
}
1219+
12231220
list_for_each_entry(port, &mstb->ports, next) {
12241221
if (port->input)
12251222
continue;
@@ -1472,20 +1469,21 @@ static void drm_dp_queue_down_tx(struct drm_dp_mst_topology_mgr *mgr,
14721469
mutex_unlock(&mgr->qlock);
14731470
}
14741471

1475-
static int drm_dp_send_link_address(struct drm_dp_mst_topology_mgr *mgr,
1476-
struct drm_dp_mst_branch *mstb)
1472+
static void drm_dp_send_link_address(struct drm_dp_mst_topology_mgr *mgr,
1473+
struct drm_dp_mst_branch *mstb)
14771474
{
14781475
int len;
14791476
struct drm_dp_sideband_msg_tx *txmsg;
14801477
int ret;
14811478

14821479
txmsg = kzalloc(sizeof(*txmsg), GFP_KERNEL);
14831480
if (!txmsg)
1484-
return -ENOMEM;
1481+
return;
14851482

14861483
txmsg->dst = mstb;
14871484
len = build_link_address(txmsg);
14881485

1486+
mstb->link_address_sent = true;
14891487
drm_dp_queue_down_tx(mgr, txmsg);
14901488

14911489
ret = drm_dp_mst_wait_tx_reply(mstb, txmsg);
@@ -1513,11 +1511,12 @@ static int drm_dp_send_link_address(struct drm_dp_mst_topology_mgr *mgr,
15131511
}
15141512
(*mgr->cbs->hotplug)(mgr);
15151513
}
1516-
} else
1514+
} else {
1515+
mstb->link_address_sent = false;
15171516
DRM_DEBUG_KMS("link address failed %d\n", ret);
1517+
}
15181518

15191519
kfree(txmsg);
1520-
return 0;
15211520
}
15221521

15231522
static int drm_dp_send_enum_path_resources(struct drm_dp_mst_topology_mgr *mgr,

0 commit comments

Comments
 (0)