mirror of
https://github.com/torvalds/linux.git
synced 2024-12-29 14:21:47 +00:00
Merge branches 'cxgb4' and 'qib' into for-next
This commit is contained in:
commit
c7d74b0909
@ -469,6 +469,8 @@ static u8 ib_rate_to_delay[IB_RATE_120_GBPS + 1] = {
|
|||||||
#define IB_7322_LT_STATE_RECOVERIDLE 0x0f
|
#define IB_7322_LT_STATE_RECOVERIDLE 0x0f
|
||||||
#define IB_7322_LT_STATE_CFGENH 0x10
|
#define IB_7322_LT_STATE_CFGENH 0x10
|
||||||
#define IB_7322_LT_STATE_CFGTEST 0x11
|
#define IB_7322_LT_STATE_CFGTEST 0x11
|
||||||
|
#define IB_7322_LT_STATE_CFGWAITRMTTEST 0x12
|
||||||
|
#define IB_7322_LT_STATE_CFGWAITENH 0x13
|
||||||
|
|
||||||
/* link state machine states from IBC */
|
/* link state machine states from IBC */
|
||||||
#define IB_7322_L_STATE_DOWN 0x0
|
#define IB_7322_L_STATE_DOWN 0x0
|
||||||
@ -498,8 +500,10 @@ static const u8 qib_7322_physportstate[0x20] = {
|
|||||||
IB_PHYSPORTSTATE_LINK_ERR_RECOVER,
|
IB_PHYSPORTSTATE_LINK_ERR_RECOVER,
|
||||||
[IB_7322_LT_STATE_CFGENH] = IB_PHYSPORTSTATE_CFG_ENH,
|
[IB_7322_LT_STATE_CFGENH] = IB_PHYSPORTSTATE_CFG_ENH,
|
||||||
[IB_7322_LT_STATE_CFGTEST] = IB_PHYSPORTSTATE_CFG_TRAIN,
|
[IB_7322_LT_STATE_CFGTEST] = IB_PHYSPORTSTATE_CFG_TRAIN,
|
||||||
[0x12] = IB_PHYSPORTSTATE_CFG_TRAIN,
|
[IB_7322_LT_STATE_CFGWAITRMTTEST] =
|
||||||
[0x13] = IB_PHYSPORTSTATE_CFG_WAIT_ENH,
|
IB_PHYSPORTSTATE_CFG_TRAIN,
|
||||||
|
[IB_7322_LT_STATE_CFGWAITENH] =
|
||||||
|
IB_PHYSPORTSTATE_CFG_WAIT_ENH,
|
||||||
[0x14] = IB_PHYSPORTSTATE_CFG_TRAIN,
|
[0x14] = IB_PHYSPORTSTATE_CFG_TRAIN,
|
||||||
[0x15] = IB_PHYSPORTSTATE_CFG_TRAIN,
|
[0x15] = IB_PHYSPORTSTATE_CFG_TRAIN,
|
||||||
[0x16] = IB_PHYSPORTSTATE_CFG_TRAIN,
|
[0x16] = IB_PHYSPORTSTATE_CFG_TRAIN,
|
||||||
@ -1692,7 +1696,9 @@ static void handle_serdes_issues(struct qib_pportdata *ppd, u64 ibcst)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ibclt == IB_7322_LT_STATE_CFGTEST &&
|
if (((ibclt >= IB_7322_LT_STATE_CFGTEST &&
|
||||||
|
ibclt <= IB_7322_LT_STATE_CFGWAITENH) ||
|
||||||
|
ibclt == IB_7322_LT_STATE_LINKUP) &&
|
||||||
(ibcst & SYM_MASK(IBCStatusA_0, LinkSpeedQDR))) {
|
(ibcst & SYM_MASK(IBCStatusA_0, LinkSpeedQDR))) {
|
||||||
force_h1(ppd);
|
force_h1(ppd);
|
||||||
ppd->cpspec->qdr_reforce = 1;
|
ppd->cpspec->qdr_reforce = 1;
|
||||||
@ -7301,12 +7307,17 @@ static void ibsd_wr_allchans(struct qib_pportdata *ppd, int addr, unsigned data,
|
|||||||
static void serdes_7322_los_enable(struct qib_pportdata *ppd, int enable)
|
static void serdes_7322_los_enable(struct qib_pportdata *ppd, int enable)
|
||||||
{
|
{
|
||||||
u64 data = qib_read_kreg_port(ppd, krp_serdesctrl);
|
u64 data = qib_read_kreg_port(ppd, krp_serdesctrl);
|
||||||
printk(KERN_INFO QIB_DRV_NAME " IB%u:%u Turning LOS %s\n",
|
u8 state = SYM_FIELD(data, IBSerdesCtrl_0, RXLOSEN);
|
||||||
ppd->dd->unit, ppd->port, (enable ? "on" : "off"));
|
|
||||||
if (enable)
|
if (enable && !state) {
|
||||||
|
printk(KERN_INFO QIB_DRV_NAME " IB%u:%u Turning LOS on\n",
|
||||||
|
ppd->dd->unit, ppd->port);
|
||||||
data |= SYM_MASK(IBSerdesCtrl_0, RXLOSEN);
|
data |= SYM_MASK(IBSerdesCtrl_0, RXLOSEN);
|
||||||
else
|
} else if (!enable && state) {
|
||||||
|
printk(KERN_INFO QIB_DRV_NAME " IB%u:%u Turning LOS off\n",
|
||||||
|
ppd->dd->unit, ppd->port);
|
||||||
data &= ~SYM_MASK(IBSerdesCtrl_0, RXLOSEN);
|
data &= ~SYM_MASK(IBSerdesCtrl_0, RXLOSEN);
|
||||||
|
}
|
||||||
qib_write_kreg_port(ppd, krp_serdesctrl, data);
|
qib_write_kreg_port(ppd, krp_serdesctrl, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,8 +96,12 @@ void qib_handle_e_ibstatuschanged(struct qib_pportdata *ppd, u64 ibcs)
|
|||||||
* states, or if it transitions from any of the up (INIT or better)
|
* states, or if it transitions from any of the up (INIT or better)
|
||||||
* states into any of the down states (except link recovery), then
|
* states into any of the down states (except link recovery), then
|
||||||
* call the chip-specific code to take appropriate actions.
|
* call the chip-specific code to take appropriate actions.
|
||||||
|
*
|
||||||
|
* ppd->lflags could be 0 if this is the first time the interrupt
|
||||||
|
* handlers has been called but the link is already up.
|
||||||
*/
|
*/
|
||||||
if (lstate >= IB_PORT_INIT && (ppd->lflags & QIBL_LINKDOWN) &&
|
if (lstate >= IB_PORT_INIT &&
|
||||||
|
(!ppd->lflags || (ppd->lflags & QIBL_LINKDOWN)) &&
|
||||||
ltstate == IB_PHYSPORTSTATE_LINKUP) {
|
ltstate == IB_PHYSPORTSTATE_LINKUP) {
|
||||||
/* transitioned to UP */
|
/* transitioned to UP */
|
||||||
if (dd->f_ib_updown(ppd, 1, ibcs))
|
if (dd->f_ib_updown(ppd, 1, ibcs))
|
||||||
|
Loading…
Reference in New Issue
Block a user