Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d70585f7 authored by Mitko Haralanov's avatar Mitko Haralanov Committed by Roland Dreier
Browse files

IB/qib: Hold link for TX SERDES settings



Hold the IB link at DISABLED until we get the correct TX settings
on mezz boards.

Signed-off-by: default avatarMike Marciniszyn <mike.marciniszyn@qlogic.com>
Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
parent a25cecce
Loading
Loading
Loading
Loading
+11 −19
Original line number Diff line number Diff line
@@ -623,7 +623,6 @@ struct qib_chippport_specific {
	u8 ibmalfusesnap;
	struct qib_qsfp_data qsfp_data;
	char epmsgbuf[192]; /* for port error interrupt msg buffer */
	u8 bounced;
};

static struct {
@@ -1881,23 +1880,7 @@ static noinline void handle_7322_p_errors(struct qib_pportdata *ppd)
		    IB_PHYSPORTSTATE_DISABLED)
			qib_set_ib_7322_lstate(ppd, 0,
			       QLOGIC_IB_IBCC_LINKINITCMD_DISABLE);
		else {
			u32 lstate;
			/*
			 * We need the current logical link state before
			 * lflags are set in handle_e_ibstatuschanged.
			 */
			lstate = qib_7322_iblink_state(ibcs);

			if (IS_QMH(dd) && !ppd->cpspec->bounced &&
			    ltstate == IB_PHYSPORTSTATE_LINKUP &&
			    (lstate >= IB_PORT_INIT &&
				lstate <= IB_PORT_ACTIVE)) {
				ppd->cpspec->bounced = 1;
				qib_7322_set_ib_cfg(ppd, QIB_IB_CFG_LSTATE,
					IB_LINKCMD_DOWN | IB_LINKINITCMD_POLL);
			}

		else
			/*
			 * Since going into a recovery state causes the link
			 * state to go down and since recovery is transitory,
@@ -1912,7 +1895,6 @@ static noinline void handle_7322_p_errors(struct qib_pportdata *ppd)
			    ltstate != IB_PHYSPORTSTATE_RECOVERY_IDLE)
				qib_handle_e_ibstatuschanged(ppd, ibcs);
	}
	}
	if (*msg && iserr)
		qib_dev_porterr(dd, ppd->port, "%s error\n", msg);

@@ -2381,6 +2363,11 @@ static int qib_7322_bringup_serdes(struct qib_pportdata *ppd)
	qib_write_kreg_port(ppd, krp_rcvctrl, ppd->p_rcvctrl);
	spin_unlock_irqrestore(&dd->cspec->rcvmod_lock, flags);

	/* Hold the link state machine for mezz boards */
	if (IS_QMH(dd) || IS_QME(dd))
		qib_set_ib_7322_lstate(ppd, 0,
				       QLOGIC_IB_IBCC_LINKINITCMD_DISABLE);

	/* Also enable IBSTATUSCHG interrupt.  */
	val = qib_read_kreg_port(ppd, krp_errmask);
	qib_write_kreg_port(ppd, krp_errmask,
@@ -5702,6 +5689,11 @@ static void set_no_qsfp_atten(struct qib_devdata *dd, int change)
				ppd->cpspec->h1_val = h1;
			/* now change the IBC and serdes, overriding generic */
			init_txdds_table(ppd, 1);
			/* Re-enable the physical state machine on mezz boards
			 * now that the correct settings have been set. */
			if (IS_QMH(dd) || IS_QME(dd))
				qib_set_ib_7322_lstate(ppd, 0,
					    QLOGIC_IB_IBCC_LINKINITCMD_SLEEP);
			any++;
		}
		if (*nxt == '\n')