diff options
Diffstat (limited to 'drivers/infiniband/hw/ipath/ipath_verbs.c')
-rw-r--r-- | drivers/infiniband/hw/ipath/ipath_verbs.c | 55 |
1 files changed, 37 insertions, 18 deletions
diff --git a/drivers/infiniband/hw/ipath/ipath_verbs.c b/drivers/infiniband/hw/ipath/ipath_verbs.c index c4c998446c7b..32d8f882e56c 100644 --- a/drivers/infiniband/hw/ipath/ipath_verbs.c +++ b/drivers/infiniband/hw/ipath/ipath_verbs.c | |||
@@ -943,7 +943,7 @@ bail: | |||
943 | * ipath_verbs_send - send a packet | 943 | * ipath_verbs_send - send a packet |
944 | * @qp: the QP to send on | 944 | * @qp: the QP to send on |
945 | * @hdr: the packet header | 945 | * @hdr: the packet header |
946 | * @hdrwords: the number of words in the header | 946 | * @hdrwords: the number of 32-bit words in the header |
947 | * @ss: the SGE to send | 947 | * @ss: the SGE to send |
948 | * @len: the length of the packet in bytes | 948 | * @len: the length of the packet in bytes |
949 | */ | 949 | */ |
@@ -955,7 +955,10 @@ int ipath_verbs_send(struct ipath_qp *qp, struct ipath_ib_header *hdr, | |||
955 | int ret; | 955 | int ret; |
956 | u32 dwords = (len + 3) >> 2; | 956 | u32 dwords = (len + 3) >> 2; |
957 | 957 | ||
958 | /* +1 is for the qword padding of pbc */ | 958 | /* |
959 | * Calculate the send buffer trigger address. | ||
960 | * The +1 counts for the pbc control dword following the pbc length. | ||
961 | */ | ||
959 | plen = hdrwords + dwords + 1; | 962 | plen = hdrwords + dwords + 1; |
960 | 963 | ||
961 | /* Drop non-VL15 packets if we are not in the active state */ | 964 | /* Drop non-VL15 packets if we are not in the active state */ |
@@ -1130,20 +1133,34 @@ static int ipath_query_device(struct ib_device *ibdev, | |||
1130 | return 0; | 1133 | return 0; |
1131 | } | 1134 | } |
1132 | 1135 | ||
1133 | const u8 ipath_cvt_physportstate[16] = { | 1136 | const u8 ipath_cvt_physportstate[32] = { |
1134 | [INFINIPATH_IBCS_LT_STATE_DISABLED] = 3, | 1137 | [INFINIPATH_IBCS_LT_STATE_DISABLED] = IB_PHYSPORTSTATE_DISABLED, |
1135 | [INFINIPATH_IBCS_LT_STATE_LINKUP] = 5, | 1138 | [INFINIPATH_IBCS_LT_STATE_LINKUP] = IB_PHYSPORTSTATE_LINKUP, |
1136 | [INFINIPATH_IBCS_LT_STATE_POLLACTIVE] = 2, | 1139 | [INFINIPATH_IBCS_LT_STATE_POLLACTIVE] = IB_PHYSPORTSTATE_POLL, |
1137 | [INFINIPATH_IBCS_LT_STATE_POLLQUIET] = 2, | 1140 | [INFINIPATH_IBCS_LT_STATE_POLLQUIET] = IB_PHYSPORTSTATE_POLL, |
1138 | [INFINIPATH_IBCS_LT_STATE_SLEEPDELAY] = 1, | 1141 | [INFINIPATH_IBCS_LT_STATE_SLEEPDELAY] = IB_PHYSPORTSTATE_SLEEP, |
1139 | [INFINIPATH_IBCS_LT_STATE_SLEEPQUIET] = 1, | 1142 | [INFINIPATH_IBCS_LT_STATE_SLEEPQUIET] = IB_PHYSPORTSTATE_SLEEP, |
1140 | [INFINIPATH_IBCS_LT_STATE_CFGDEBOUNCE] = 4, | 1143 | [INFINIPATH_IBCS_LT_STATE_CFGDEBOUNCE] = |
1141 | [INFINIPATH_IBCS_LT_STATE_CFGRCVFCFG] = 4, | 1144 | IB_PHYSPORTSTATE_CFG_TRAIN, |
1142 | [INFINIPATH_IBCS_LT_STATE_CFGWAITRMT] = 4, | 1145 | [INFINIPATH_IBCS_LT_STATE_CFGRCVFCFG] = |
1143 | [INFINIPATH_IBCS_LT_STATE_CFGIDLE] = 4, | 1146 | IB_PHYSPORTSTATE_CFG_TRAIN, |
1144 | [INFINIPATH_IBCS_LT_STATE_RECOVERRETRAIN] = 6, | 1147 | [INFINIPATH_IBCS_LT_STATE_CFGWAITRMT] = |
1145 | [INFINIPATH_IBCS_LT_STATE_RECOVERWAITRMT] = 6, | 1148 | IB_PHYSPORTSTATE_CFG_TRAIN, |
1146 | [INFINIPATH_IBCS_LT_STATE_RECOVERIDLE] = 6, | 1149 | [INFINIPATH_IBCS_LT_STATE_CFGIDLE] = IB_PHYSPORTSTATE_CFG_TRAIN, |
1150 | [INFINIPATH_IBCS_LT_STATE_RECOVERRETRAIN] = | ||
1151 | IB_PHYSPORTSTATE_LINK_ERR_RECOVER, | ||
1152 | [INFINIPATH_IBCS_LT_STATE_RECOVERWAITRMT] = | ||
1153 | IB_PHYSPORTSTATE_LINK_ERR_RECOVER, | ||
1154 | [INFINIPATH_IBCS_LT_STATE_RECOVERIDLE] = | ||
1155 | IB_PHYSPORTSTATE_LINK_ERR_RECOVER, | ||
1156 | [0x10] = IB_PHYSPORTSTATE_CFG_TRAIN, | ||
1157 | [0x11] = IB_PHYSPORTSTATE_CFG_TRAIN, | ||
1158 | [0x12] = IB_PHYSPORTSTATE_CFG_TRAIN, | ||
1159 | [0x13] = IB_PHYSPORTSTATE_CFG_TRAIN, | ||
1160 | [0x14] = IB_PHYSPORTSTATE_CFG_TRAIN, | ||
1161 | [0x15] = IB_PHYSPORTSTATE_CFG_TRAIN, | ||
1162 | [0x16] = IB_PHYSPORTSTATE_CFG_TRAIN, | ||
1163 | [0x17] = IB_PHYSPORTSTATE_CFG_TRAIN | ||
1147 | }; | 1164 | }; |
1148 | 1165 | ||
1149 | u32 ipath_get_cr_errpkey(struct ipath_devdata *dd) | 1166 | u32 ipath_get_cr_errpkey(struct ipath_devdata *dd) |
@@ -1168,8 +1185,9 @@ static int ipath_query_port(struct ib_device *ibdev, | |||
1168 | ibcstat = dd->ipath_lastibcstat; | 1185 | ibcstat = dd->ipath_lastibcstat; |
1169 | props->state = ((ibcstat >> 4) & 0x3) + 1; | 1186 | props->state = ((ibcstat >> 4) & 0x3) + 1; |
1170 | /* See phys_state_show() */ | 1187 | /* See phys_state_show() */ |
1171 | props->phys_state = ipath_cvt_physportstate[ | 1188 | props->phys_state = /* MEA: assumes shift == 0 */ |
1172 | dd->ipath_lastibcstat & 0xf]; | 1189 | ipath_cvt_physportstate[dd->ipath_lastibcstat & |
1190 | dd->ibcs_lts_mask]; | ||
1173 | props->port_cap_flags = dev->port_cap_flags; | 1191 | props->port_cap_flags = dev->port_cap_flags; |
1174 | props->gid_tbl_len = 1; | 1192 | props->gid_tbl_len = 1; |
1175 | props->max_msg_sz = 0x80000000; | 1193 | props->max_msg_sz = 0x80000000; |
@@ -1641,6 +1659,7 @@ int ipath_register_ib_device(struct ipath_devdata *dd) | |||
1641 | cntrs.local_link_integrity_errors; | 1659 | cntrs.local_link_integrity_errors; |
1642 | idev->z_excessive_buffer_overrun_errors = | 1660 | idev->z_excessive_buffer_overrun_errors = |
1643 | cntrs.excessive_buffer_overrun_errors; | 1661 | cntrs.excessive_buffer_overrun_errors; |
1662 | idev->z_vl15_dropped = cntrs.vl15_dropped; | ||
1644 | 1663 | ||
1645 | /* | 1664 | /* |
1646 | * The system image GUID is supposed to be the same for all | 1665 | * The system image GUID is supposed to be the same for all |