Commit b3e8f541 authored by Dave Olson's avatar Dave Olson Committed by Roland Dreier

IB/ipath: Add support for IBTA 1.2 Heartbeat

This patch adds code to enable/disable the IBTA 1.2 heartbeat for testing
if the HCA supports it.
Signed-off-by: default avatarDave Olson <dave.olson@qlogic.com>
Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
parent 555b203e
...@@ -80,6 +80,8 @@ ...@@ -80,6 +80,8 @@
#define IPATH_IB_LINKDOWN_DISABLE 5 #define IPATH_IB_LINKDOWN_DISABLE 5
#define IPATH_IB_LINK_LOOPBACK 6 /* enable local loopback */ #define IPATH_IB_LINK_LOOPBACK 6 /* enable local loopback */
#define IPATH_IB_LINK_EXTERNAL 7 /* normal, disable local loopback */ #define IPATH_IB_LINK_EXTERNAL 7 /* normal, disable local loopback */
#define IPATH_IB_LINK_NO_HRTBT 8 /* disable Heartbeat, e.g. for loopback */
#define IPATH_IB_LINK_HRTBT 9 /* enable heartbeat, normal, non-loopback */
/* /*
* These 3 values (SDR and DDR may be ORed for auto-speed * These 3 values (SDR and DDR may be ORed for auto-speed
......
...@@ -1880,16 +1880,41 @@ int ipath_set_linkstate(struct ipath_devdata *dd, u8 newstate) ...@@ -1880,16 +1880,41 @@ int ipath_set_linkstate(struct ipath_devdata *dd, u8 newstate)
dd->ipath_ibcctrl |= INFINIPATH_IBCC_LOOPBACK; dd->ipath_ibcctrl |= INFINIPATH_IBCC_LOOPBACK;
ipath_write_kreg(dd, dd->ipath_kregs->kr_ibcctrl, ipath_write_kreg(dd, dd->ipath_kregs->kr_ibcctrl,
dd->ipath_ibcctrl); dd->ipath_ibcctrl);
/* turn heartbeat off, as it causes loopback to fail */
dd->ipath_f_set_ib_cfg(dd, IPATH_IB_CFG_HRTBT,
IPATH_IB_HRTBT_OFF);
/* don't wait */
ret = 0; ret = 0;
goto bail; // no state change to wait for goto bail;
case IPATH_IB_LINK_EXTERNAL: case IPATH_IB_LINK_EXTERNAL:
dev_info(&dd->pcidev->dev, "Disabling IB local loopback (normal)\n"); dev_info(&dd->pcidev->dev,
"Disabling IB local loopback (normal)\n");
dd->ipath_f_set_ib_cfg(dd, IPATH_IB_CFG_HRTBT,
IPATH_IB_HRTBT_ON);
dd->ipath_ibcctrl &= ~INFINIPATH_IBCC_LOOPBACK; dd->ipath_ibcctrl &= ~INFINIPATH_IBCC_LOOPBACK;
ipath_write_kreg(dd, dd->ipath_kregs->kr_ibcctrl, ipath_write_kreg(dd, dd->ipath_kregs->kr_ibcctrl,
dd->ipath_ibcctrl); dd->ipath_ibcctrl);
/* don't wait */
ret = 0; ret = 0;
goto bail; // no state change to wait for goto bail;
/*
* Heartbeat can be explicitly enabled by the user via
* "hrtbt_enable" "file", and if disabled, trying to enable here
* will have no effect. Implicit changes (heartbeat off when
* loopback on, and vice versa) are included to ease testing.
*/
case IPATH_IB_LINK_HRTBT:
ret = dd->ipath_f_set_ib_cfg(dd, IPATH_IB_CFG_HRTBT,
IPATH_IB_HRTBT_ON);
goto bail;
case IPATH_IB_LINK_NO_HRTBT:
ret = dd->ipath_f_set_ib_cfg(dd, IPATH_IB_CFG_HRTBT,
IPATH_IB_HRTBT_OFF);
goto bail;
default: default:
ipath_dbg("Invalid linkstate 0x%x requested\n", newstate); ipath_dbg("Invalid linkstate 0x%x requested\n", newstate);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment