mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-23 00:00:15 +07:00
drm/dp_mst: Refactor drm_dp_mst_handle_down_rep()
* Remove the big ugly have_eomt conditional * Store &mgr->down_rep_recv.initial_hdr in a var to make line wrapping easier * Remove duplicate memset() calls * Actually wrap lines Cc: Juston Li <juston.li@intel.com> Cc: Imre Deak <imre.deak@intel.com> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Cc: Harry Wentland <hwentlan@amd.com> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Lyude Paul <lyude@redhat.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190903204645.25487-14-lyude@redhat.com
This commit is contained in:
parent
a29d881875
commit
8b1e589d13
@ -3205,68 +3205,66 @@ static bool drm_dp_get_one_sb_msg(struct drm_dp_mst_topology_mgr *mgr, bool up)
|
||||
|
||||
static int drm_dp_mst_handle_down_rep(struct drm_dp_mst_topology_mgr *mgr)
|
||||
{
|
||||
int ret = 0;
|
||||
struct drm_dp_sideband_msg_tx *txmsg;
|
||||
struct drm_dp_mst_branch *mstb;
|
||||
struct drm_dp_sideband_msg_hdr *hdr = &mgr->down_rep_recv.initial_hdr;
|
||||
int slot = -1;
|
||||
|
||||
if (!drm_dp_get_one_sb_msg(mgr, false)) {
|
||||
memset(&mgr->down_rep_recv, 0,
|
||||
sizeof(struct drm_dp_sideband_msg_rx));
|
||||
if (!drm_dp_get_one_sb_msg(mgr, false))
|
||||
goto clear_down_rep_recv;
|
||||
|
||||
if (!mgr->down_rep_recv.have_eomt)
|
||||
return 0;
|
||||
|
||||
mstb = drm_dp_get_mst_branch_device(mgr, hdr->lct, hdr->rad);
|
||||
if (!mstb) {
|
||||
DRM_DEBUG_KMS("Got MST reply from unknown device %d\n",
|
||||
hdr->lct);
|
||||
goto clear_down_rep_recv;
|
||||
}
|
||||
|
||||
if (mgr->down_rep_recv.have_eomt) {
|
||||
struct drm_dp_sideband_msg_tx *txmsg;
|
||||
struct drm_dp_mst_branch *mstb;
|
||||
int slot = -1;
|
||||
mstb = drm_dp_get_mst_branch_device(mgr,
|
||||
mgr->down_rep_recv.initial_hdr.lct,
|
||||
mgr->down_rep_recv.initial_hdr.rad);
|
||||
/* find the message */
|
||||
slot = hdr->seqno;
|
||||
mutex_lock(&mgr->qlock);
|
||||
txmsg = mstb->tx_slots[slot];
|
||||
/* remove from slots */
|
||||
mutex_unlock(&mgr->qlock);
|
||||
|
||||
if (!mstb) {
|
||||
DRM_DEBUG_KMS("Got MST reply from unknown device %d\n", mgr->down_rep_recv.initial_hdr.lct);
|
||||
memset(&mgr->down_rep_recv, 0, sizeof(struct drm_dp_sideband_msg_rx));
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* find the message */
|
||||
slot = mgr->down_rep_recv.initial_hdr.seqno;
|
||||
mutex_lock(&mgr->qlock);
|
||||
txmsg = mstb->tx_slots[slot];
|
||||
/* remove from slots */
|
||||
mutex_unlock(&mgr->qlock);
|
||||
|
||||
if (!txmsg) {
|
||||
DRM_DEBUG_KMS("Got MST reply with no msg %p %d %d %02x %02x\n",
|
||||
mstb,
|
||||
mgr->down_rep_recv.initial_hdr.seqno,
|
||||
mgr->down_rep_recv.initial_hdr.lct,
|
||||
mgr->down_rep_recv.initial_hdr.rad[0],
|
||||
mgr->down_rep_recv.msg[0]);
|
||||
drm_dp_mst_topology_put_mstb(mstb);
|
||||
memset(&mgr->down_rep_recv, 0, sizeof(struct drm_dp_sideband_msg_rx));
|
||||
return 0;
|
||||
}
|
||||
|
||||
drm_dp_sideband_parse_reply(&mgr->down_rep_recv, &txmsg->reply);
|
||||
|
||||
if (txmsg->reply.reply_type == DP_SIDEBAND_REPLY_NAK)
|
||||
DRM_DEBUG_KMS("Got NAK reply: req 0x%02x (%s), reason 0x%02x (%s), nak data 0x%02x\n",
|
||||
txmsg->reply.req_type,
|
||||
drm_dp_mst_req_type_str(txmsg->reply.req_type),
|
||||
txmsg->reply.u.nak.reason,
|
||||
drm_dp_mst_nak_reason_str(txmsg->reply.u.nak.reason),
|
||||
txmsg->reply.u.nak.nak_data);
|
||||
|
||||
memset(&mgr->down_rep_recv, 0, sizeof(struct drm_dp_sideband_msg_rx));
|
||||
drm_dp_mst_topology_put_mstb(mstb);
|
||||
|
||||
mutex_lock(&mgr->qlock);
|
||||
txmsg->state = DRM_DP_SIDEBAND_TX_RX;
|
||||
mstb->tx_slots[slot] = NULL;
|
||||
mutex_unlock(&mgr->qlock);
|
||||
|
||||
wake_up_all(&mgr->tx_waitq);
|
||||
if (!txmsg) {
|
||||
DRM_DEBUG_KMS("Got MST reply with no msg %p %d %d %02x %02x\n",
|
||||
mstb, hdr->seqno, hdr->lct, hdr->rad[0],
|
||||
mgr->down_rep_recv.msg[0]);
|
||||
goto no_msg;
|
||||
}
|
||||
return ret;
|
||||
|
||||
drm_dp_sideband_parse_reply(&mgr->down_rep_recv, &txmsg->reply);
|
||||
|
||||
if (txmsg->reply.reply_type == DP_SIDEBAND_REPLY_NAK)
|
||||
DRM_DEBUG_KMS("Got NAK reply: req 0x%02x (%s), reason 0x%02x (%s), nak data 0x%02x\n",
|
||||
txmsg->reply.req_type,
|
||||
drm_dp_mst_req_type_str(txmsg->reply.req_type),
|
||||
txmsg->reply.u.nak.reason,
|
||||
drm_dp_mst_nak_reason_str(txmsg->reply.u.nak.reason),
|
||||
txmsg->reply.u.nak.nak_data);
|
||||
|
||||
memset(&mgr->down_rep_recv, 0, sizeof(struct drm_dp_sideband_msg_rx));
|
||||
drm_dp_mst_topology_put_mstb(mstb);
|
||||
|
||||
mutex_lock(&mgr->qlock);
|
||||
txmsg->state = DRM_DP_SIDEBAND_TX_RX;
|
||||
mstb->tx_slots[slot] = NULL;
|
||||
mutex_unlock(&mgr->qlock);
|
||||
|
||||
wake_up_all(&mgr->tx_waitq);
|
||||
|
||||
return 0;
|
||||
|
||||
no_msg:
|
||||
drm_dp_mst_topology_put_mstb(mstb);
|
||||
clear_down_rep_recv:
|
||||
memset(&mgr->down_rep_recv, 0, sizeof(struct drm_dp_sideband_msg_rx));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int drm_dp_mst_handle_up_req(struct drm_dp_mst_topology_mgr *mgr)
|
||||
|
Loading…
Reference in New Issue
Block a user