Loading drivers/infiniband/hw/hfi1/chip.c +14 −28 Original line number Diff line number Diff line Loading @@ -9185,25 +9185,6 @@ static int do_quick_linkup(struct hfi1_devdata *dd) return 0; /* success */ } /* * Set the SerDes to internal loopback mode. * Returns 0 on success, -errno on error. */ static int set_serdes_loopback_mode(struct hfi1_devdata *dd) { int ret; ret = set_physical_link_state(dd, PLS_INTERNAL_SERDES_LOOPBACK); if (ret == HCMD_SUCCESS) return 0; dd_dev_err(dd, "Set physical link state to SerDes Loopback failed with return %d\n", ret); if (ret >= 0) ret = -EINVAL; return ret; } /* * Do all special steps to set up loopback. */ Loading @@ -9229,13 +9210,11 @@ static int init_loopback(struct hfi1_devdata *dd) return 0; } /* handle serdes loopback */ if (loopback == LOOPBACK_SERDES) { /* internal serdes loopack needs quick linkup on RTL */ if (dd->icode == ICODE_RTL_SILICON) quick_linkup = 1; return set_serdes_loopback_mode(dd); } /* * SerDes loopback init sequence is handled in set_local_link_attributes */ if (loopback == LOOPBACK_SERDES) return 0; /* LCB loopback - handled at poll time */ if (loopback == LOOPBACK_LCB) { Loading Loading @@ -9294,7 +9273,7 @@ static int set_local_link_attributes(struct hfi1_pportdata *ppd) u8 tx_polarity_inversion; u8 rx_polarity_inversion; int ret; u32 misc_bits = 0; /* reset our fabric serdes to clear any lingering problems */ fabric_serdes_reset(dd); Loading Loading @@ -9340,7 +9319,14 @@ static int set_local_link_attributes(struct hfi1_pportdata *ppd) if (ret != HCMD_SUCCESS) goto set_local_link_attributes_fail; ret = write_vc_local_link_width(dd, 0, 0, /* * SerDes loopback init sequence requires * setting bit 0 of MISC_CONFIG_BITS */ if (loopback == LOOPBACK_SERDES) misc_bits |= 1 << LOOPBACK_SERDES_CONFIG_BIT_MASK_SHIFT; ret = write_vc_local_link_width(dd, misc_bits, 0, opa_to_vc_link_widths( ppd->link_width_enabled)); if (ret != HCMD_SUCCESS) Loading drivers/infiniband/hw/hfi1/chip.h +3 −0 Original line number Diff line number Diff line Loading @@ -582,6 +582,9 @@ enum { #define LOOPBACK_LCB 2 #define LOOPBACK_CABLE 3 /* external cable */ /* set up serdes bit in MISC_CONFIG_BITS */ #define LOOPBACK_SERDES_CONFIG_BIT_MASK_SHIFT 0 /* read and write hardware registers */ u64 read_csr(const struct hfi1_devdata *dd, u32 offset); void write_csr(const struct hfi1_devdata *dd, u32 offset, u64 value); Loading drivers/infiniband/hw/hfi1/common.h +1 −0 Original line number Diff line number Diff line Loading @@ -328,6 +328,7 @@ struct diag_pkt { #define SC15_PACKET 0xF #define SIZE_OF_CRC 1 #define SIZE_OF_LT 1 #define MAX_16B_PADDING 12 /* CRC = 4, LT = 1, Pad = 0 to 7 bytes */ #define LIM_MGMT_P_KEY 0x7FFF #define FULL_MGMT_P_KEY 0xFFFF Loading drivers/infiniband/hw/hfi1/firmware.c +18 −3 Original line number Diff line number Diff line Loading @@ -1424,7 +1424,14 @@ int acquire_hw_mutex(struct hfi1_devdata *dd) unsigned long timeout; int try = 0; u8 mask = 1 << dd->hfi1_id; u8 user; u8 user = (u8)read_csr(dd, ASIC_CFG_MUTEX); if (user == mask) { dd_dev_info(dd, "Hardware mutex already acquired, mutex mask %u\n", (u32)mask); return 0; } retry: timeout = msecs_to_jiffies(HM_TIMEOUT) + jiffies; Loading Loading @@ -1455,6 +1462,14 @@ int acquire_hw_mutex(struct hfi1_devdata *dd) void release_hw_mutex(struct hfi1_devdata *dd) { u8 mask = 1 << dd->hfi1_id; u8 user = (u8)read_csr(dd, ASIC_CFG_MUTEX); if (user != mask) dd_dev_warn(dd, "Unable to release hardware mutex, mutex mask %u, my mask %u\n", (u32)user, (u32)mask); else write_csr(dd, ASIC_CFG_MUTEX, 0); } Loading Loading @@ -1770,7 +1785,7 @@ static int check_meta_version(struct hfi1_devdata *dd, u32 *system_table) ver_start /= 8; meta_ver = *((u8 *)system_table + ver_start) & ((1 << ver_len) - 1); if (meta_ver < 5) { if (meta_ver < 4) { dd_dev_info( dd, "%s:Please update platform config\n", __func__); return -EINVAL; Loading drivers/infiniband/hw/hfi1/rc.c +0 −1 Original line number Diff line number Diff line Loading @@ -276,7 +276,6 @@ int hfi1_make_rc_req(struct rvt_qp *qp, struct hfi1_pkt_state *ps) if (IS_ERR(ps->s_txreq)) goto bail_no_tx; ps->s_txreq->phdr.hdr.hdr_type = priv->hdr_type; if (priv->hdr_type == HFI1_PKT_TYPE_9B) { /* header size in 32-bit words LRH+BTH = (8+12)/4. */ hwords = 5; Loading Loading
drivers/infiniband/hw/hfi1/chip.c +14 −28 Original line number Diff line number Diff line Loading @@ -9185,25 +9185,6 @@ static int do_quick_linkup(struct hfi1_devdata *dd) return 0; /* success */ } /* * Set the SerDes to internal loopback mode. * Returns 0 on success, -errno on error. */ static int set_serdes_loopback_mode(struct hfi1_devdata *dd) { int ret; ret = set_physical_link_state(dd, PLS_INTERNAL_SERDES_LOOPBACK); if (ret == HCMD_SUCCESS) return 0; dd_dev_err(dd, "Set physical link state to SerDes Loopback failed with return %d\n", ret); if (ret >= 0) ret = -EINVAL; return ret; } /* * Do all special steps to set up loopback. */ Loading @@ -9229,13 +9210,11 @@ static int init_loopback(struct hfi1_devdata *dd) return 0; } /* handle serdes loopback */ if (loopback == LOOPBACK_SERDES) { /* internal serdes loopack needs quick linkup on RTL */ if (dd->icode == ICODE_RTL_SILICON) quick_linkup = 1; return set_serdes_loopback_mode(dd); } /* * SerDes loopback init sequence is handled in set_local_link_attributes */ if (loopback == LOOPBACK_SERDES) return 0; /* LCB loopback - handled at poll time */ if (loopback == LOOPBACK_LCB) { Loading Loading @@ -9294,7 +9273,7 @@ static int set_local_link_attributes(struct hfi1_pportdata *ppd) u8 tx_polarity_inversion; u8 rx_polarity_inversion; int ret; u32 misc_bits = 0; /* reset our fabric serdes to clear any lingering problems */ fabric_serdes_reset(dd); Loading Loading @@ -9340,7 +9319,14 @@ static int set_local_link_attributes(struct hfi1_pportdata *ppd) if (ret != HCMD_SUCCESS) goto set_local_link_attributes_fail; ret = write_vc_local_link_width(dd, 0, 0, /* * SerDes loopback init sequence requires * setting bit 0 of MISC_CONFIG_BITS */ if (loopback == LOOPBACK_SERDES) misc_bits |= 1 << LOOPBACK_SERDES_CONFIG_BIT_MASK_SHIFT; ret = write_vc_local_link_width(dd, misc_bits, 0, opa_to_vc_link_widths( ppd->link_width_enabled)); if (ret != HCMD_SUCCESS) Loading
drivers/infiniband/hw/hfi1/chip.h +3 −0 Original line number Diff line number Diff line Loading @@ -582,6 +582,9 @@ enum { #define LOOPBACK_LCB 2 #define LOOPBACK_CABLE 3 /* external cable */ /* set up serdes bit in MISC_CONFIG_BITS */ #define LOOPBACK_SERDES_CONFIG_BIT_MASK_SHIFT 0 /* read and write hardware registers */ u64 read_csr(const struct hfi1_devdata *dd, u32 offset); void write_csr(const struct hfi1_devdata *dd, u32 offset, u64 value); Loading
drivers/infiniband/hw/hfi1/common.h +1 −0 Original line number Diff line number Diff line Loading @@ -328,6 +328,7 @@ struct diag_pkt { #define SC15_PACKET 0xF #define SIZE_OF_CRC 1 #define SIZE_OF_LT 1 #define MAX_16B_PADDING 12 /* CRC = 4, LT = 1, Pad = 0 to 7 bytes */ #define LIM_MGMT_P_KEY 0x7FFF #define FULL_MGMT_P_KEY 0xFFFF Loading
drivers/infiniband/hw/hfi1/firmware.c +18 −3 Original line number Diff line number Diff line Loading @@ -1424,7 +1424,14 @@ int acquire_hw_mutex(struct hfi1_devdata *dd) unsigned long timeout; int try = 0; u8 mask = 1 << dd->hfi1_id; u8 user; u8 user = (u8)read_csr(dd, ASIC_CFG_MUTEX); if (user == mask) { dd_dev_info(dd, "Hardware mutex already acquired, mutex mask %u\n", (u32)mask); return 0; } retry: timeout = msecs_to_jiffies(HM_TIMEOUT) + jiffies; Loading Loading @@ -1455,6 +1462,14 @@ int acquire_hw_mutex(struct hfi1_devdata *dd) void release_hw_mutex(struct hfi1_devdata *dd) { u8 mask = 1 << dd->hfi1_id; u8 user = (u8)read_csr(dd, ASIC_CFG_MUTEX); if (user != mask) dd_dev_warn(dd, "Unable to release hardware mutex, mutex mask %u, my mask %u\n", (u32)user, (u32)mask); else write_csr(dd, ASIC_CFG_MUTEX, 0); } Loading Loading @@ -1770,7 +1785,7 @@ static int check_meta_version(struct hfi1_devdata *dd, u32 *system_table) ver_start /= 8; meta_ver = *((u8 *)system_table + ver_start) & ((1 << ver_len) - 1); if (meta_ver < 5) { if (meta_ver < 4) { dd_dev_info( dd, "%s:Please update platform config\n", __func__); return -EINVAL; Loading
drivers/infiniband/hw/hfi1/rc.c +0 −1 Original line number Diff line number Diff line Loading @@ -276,7 +276,6 @@ int hfi1_make_rc_req(struct rvt_qp *qp, struct hfi1_pkt_state *ps) if (IS_ERR(ps->s_txreq)) goto bail_no_tx; ps->s_txreq->phdr.hdr.hdr_type = priv->hdr_type; if (priv->hdr_type == HFI1_PKT_TYPE_9B) { /* header size in 32-bit words LRH+BTH = (8+12)/4. */ hwords = 5; Loading