Commit 8b1e589d authored by Lyude Paul's avatar Lyude Paul
Browse files

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: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190903204645.25487-14-lyude@redhat.com
parent a29d8818
Loading
Loading
Loading
Loading
+50 −52
Original line number Diff line number Diff line
@@ -3205,30 +3205,26 @@ 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;

	if (!drm_dp_get_one_sb_msg(mgr, false)) {
		memset(&mgr->down_rep_recv, 0,
		       sizeof(struct drm_dp_sideband_msg_rx));
		return 0;
	}

	if (mgr->down_rep_recv.have_eomt) {
	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;
		mstb = drm_dp_get_mst_branch_device(mgr,
						    mgr->down_rep_recv.initial_hdr.lct,
						    mgr->down_rep_recv.initial_hdr.rad);

		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));
	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;
	}

	/* find the message */
		slot = mgr->down_rep_recv.initial_hdr.seqno;
	slot = hdr->seqno;
	mutex_lock(&mgr->qlock);
	txmsg = mstb->tx_slots[slot];
	/* remove from slots */
@@ -3236,14 +3232,9 @@ static int drm_dp_mst_handle_down_rep(struct drm_dp_mst_topology_mgr *mgr)

	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],
			      mstb, hdr->seqno, hdr->lct, 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;
		goto no_msg;
	}

	drm_dp_sideband_parse_reply(&mgr->down_rep_recv, &txmsg->reply);
@@ -3265,8 +3256,15 @@ static int drm_dp_mst_handle_down_rep(struct drm_dp_mst_topology_mgr *mgr)
	mutex_unlock(&mgr->qlock);

	wake_up_all(&mgr->tx_waitq);
	}
	return ret;

	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)