IB/ipath: Add ability to set and clear IB local loopback
This is a sticky state. It is useful for diagnosing problems with boards versus cable/switch problems. Signed-off-by: Dave Olson <dave.olson@qlogic.com> Signed-off-by: Bryan O'Sullivan <bryan.osullivan@qlogic.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
Родитель
a89875fc7e
Коммит
946db67fbf
|
@ -78,6 +78,8 @@
|
|||
#define IPATH_IB_LINKINIT 3
|
||||
#define IPATH_IB_LINKDOWN_SLEEP 4
|
||||
#define IPATH_IB_LINKDOWN_DISABLE 5
|
||||
#define IPATH_IB_LINK_LOOPBACK 6 /* enable local loopback */
|
||||
#define IPATH_IB_LINK_EXTERNAL 7 /* normal, disable local loopback */
|
||||
|
||||
/*
|
||||
* stats maintained by the driver. For now, at least, this is global
|
||||
|
|
|
@ -1662,6 +1662,22 @@ int ipath_set_linkstate(struct ipath_devdata *dd, u8 newstate)
|
|||
lstate = IPATH_LINKACTIVE;
|
||||
break;
|
||||
|
||||
case IPATH_IB_LINK_LOOPBACK:
|
||||
dev_info(&dd->pcidev->dev, "Enabling IB local loopback\n");
|
||||
dd->ipath_ibcctrl |= INFINIPATH_IBCC_LOOPBACK;
|
||||
ipath_write_kreg(dd, dd->ipath_kregs->kr_ibcctrl,
|
||||
dd->ipath_ibcctrl);
|
||||
ret = 0;
|
||||
goto bail; // no state change to wait for
|
||||
|
||||
case IPATH_IB_LINK_EXTERNAL:
|
||||
dev_info(&dd->pcidev->dev, "Disabling IB local loopback (normal)\n");
|
||||
dd->ipath_ibcctrl &= ~INFINIPATH_IBCC_LOOPBACK;
|
||||
ipath_write_kreg(dd, dd->ipath_kregs->kr_ibcctrl,
|
||||
dd->ipath_ibcctrl);
|
||||
ret = 0;
|
||||
goto bail; // no state change to wait for
|
||||
|
||||
default:
|
||||
ipath_dbg("Invalid linkstate 0x%x requested\n", newstate);
|
||||
ret = -EINVAL;
|
||||
|
|
Загрузка…
Ссылка в новой задаче