GNU Linux-libre 4.14.266-gnu1
[releases.git] / drivers / infiniband / hw / qib / qib_iba7220.c
1 /*
2  * Copyright (c) 2011 - 2017 Intel Corporation.  All rights reserved.
3  * Copyright (c) 2006, 2007, 2008, 2009, 2010 QLogic Corporation.
4  * All rights reserved.
5  * Copyright (c) 2003, 2004, 2005, 2006 PathScale, Inc. All rights reserved.
6  *
7  * This software is available to you under a choice of one of two
8  * licenses.  You may choose to be licensed under the terms of the GNU
9  * General Public License (GPL) Version 2, available from the file
10  * COPYING in the main directory of this source tree, or the
11  * OpenIB.org BSD license below:
12  *
13  *     Redistribution and use in source and binary forms, with or
14  *     without modification, are permitted provided that the following
15  *     conditions are met:
16  *
17  *      - Redistributions of source code must retain the above
18  *        copyright notice, this list of conditions and the following
19  *        disclaimer.
20  *
21  *      - Redistributions in binary form must reproduce the above
22  *        copyright notice, this list of conditions and the following
23  *        disclaimer in the documentation and/or other materials
24  *        provided with the distribution.
25  *
26  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
29  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
30  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
31  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
32  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
33  * SOFTWARE.
34  */
35 /*
36  * This file contains all of the code that is specific to the
37  * QLogic_IB 7220 chip (except that specific to the SerDes)
38  */
39
40 #include <linux/interrupt.h>
41 #include <linux/pci.h>
42 #include <linux/delay.h>
43 #include <linux/module.h>
44 #include <linux/io.h>
45 #include <rdma/ib_verbs.h>
46
47 #include "qib.h"
48 #include "qib_7220.h"
49
50 static void qib_setup_7220_setextled(struct qib_pportdata *, u32);
51 static void qib_7220_handle_hwerrors(struct qib_devdata *, char *, size_t);
52 static void sendctrl_7220_mod(struct qib_pportdata *ppd, u32 op);
53 static u32 qib_7220_iblink_state(u64);
54 static u8 qib_7220_phys_portstate(u64);
55 static void qib_sdma_update_7220_tail(struct qib_pportdata *, u16);
56 static void qib_set_ib_7220_lstate(struct qib_pportdata *, u16, u16);
57
58 /*
59  * This file contains almost all the chip-specific register information and
60  * access functions for the QLogic QLogic_IB 7220 PCI-Express chip, with the
61  * exception of SerDes support, which in in qib_sd7220.c.
62  */
63
64 /* Below uses machine-generated qib_chipnum_regs.h file */
65 #define KREG_IDX(regname) (QIB_7220_##regname##_OFFS / sizeof(u64))
66
67 /* Use defines to tie machine-generated names to lower-case names */
68 #define kr_control KREG_IDX(Control)
69 #define kr_counterregbase KREG_IDX(CntrRegBase)
70 #define kr_errclear KREG_IDX(ErrClear)
71 #define kr_errmask KREG_IDX(ErrMask)
72 #define kr_errstatus KREG_IDX(ErrStatus)
73 #define kr_extctrl KREG_IDX(EXTCtrl)
74 #define kr_extstatus KREG_IDX(EXTStatus)
75 #define kr_gpio_clear KREG_IDX(GPIOClear)
76 #define kr_gpio_mask KREG_IDX(GPIOMask)
77 #define kr_gpio_out KREG_IDX(GPIOOut)
78 #define kr_gpio_status KREG_IDX(GPIOStatus)
79 #define kr_hrtbt_guid KREG_IDX(HRTBT_GUID)
80 #define kr_hwdiagctrl KREG_IDX(HwDiagCtrl)
81 #define kr_hwerrclear KREG_IDX(HwErrClear)
82 #define kr_hwerrmask KREG_IDX(HwErrMask)
83 #define kr_hwerrstatus KREG_IDX(HwErrStatus)
84 #define kr_ibcctrl KREG_IDX(IBCCtrl)
85 #define kr_ibcddrctrl KREG_IDX(IBCDDRCtrl)
86 #define kr_ibcddrstatus KREG_IDX(IBCDDRStatus)
87 #define kr_ibcstatus KREG_IDX(IBCStatus)
88 #define kr_ibserdesctrl KREG_IDX(IBSerDesCtrl)
89 #define kr_intclear KREG_IDX(IntClear)
90 #define kr_intmask KREG_IDX(IntMask)
91 #define kr_intstatus KREG_IDX(IntStatus)
92 #define kr_ncmodectrl KREG_IDX(IBNCModeCtrl)
93 #define kr_palign KREG_IDX(PageAlign)
94 #define kr_partitionkey KREG_IDX(RcvPartitionKey)
95 #define kr_portcnt KREG_IDX(PortCnt)
96 #define kr_rcvbthqp KREG_IDX(RcvBTHQP)
97 #define kr_rcvctrl KREG_IDX(RcvCtrl)
98 #define kr_rcvegrbase KREG_IDX(RcvEgrBase)
99 #define kr_rcvegrcnt KREG_IDX(RcvEgrCnt)
100 #define kr_rcvhdrcnt KREG_IDX(RcvHdrCnt)
101 #define kr_rcvhdrentsize KREG_IDX(RcvHdrEntSize)
102 #define kr_rcvhdrsize KREG_IDX(RcvHdrSize)
103 #define kr_rcvpktledcnt KREG_IDX(RcvPktLEDCnt)
104 #define kr_rcvtidbase KREG_IDX(RcvTIDBase)
105 #define kr_rcvtidcnt KREG_IDX(RcvTIDCnt)
106 #define kr_revision KREG_IDX(Revision)
107 #define kr_scratch KREG_IDX(Scratch)
108 #define kr_sendbuffererror KREG_IDX(SendBufErr0)
109 #define kr_sendctrl KREG_IDX(SendCtrl)
110 #define kr_senddmabase KREG_IDX(SendDmaBase)
111 #define kr_senddmabufmask0 KREG_IDX(SendDmaBufMask0)
112 #define kr_senddmabufmask1 (KREG_IDX(SendDmaBufMask0) + 1)
113 #define kr_senddmabufmask2 (KREG_IDX(SendDmaBufMask0) + 2)
114 #define kr_senddmahead KREG_IDX(SendDmaHead)
115 #define kr_senddmaheadaddr KREG_IDX(SendDmaHeadAddr)
116 #define kr_senddmalengen KREG_IDX(SendDmaLenGen)
117 #define kr_senddmastatus KREG_IDX(SendDmaStatus)
118 #define kr_senddmatail KREG_IDX(SendDmaTail)
119 #define kr_sendpioavailaddr KREG_IDX(SendBufAvailAddr)
120 #define kr_sendpiobufbase KREG_IDX(SendBufBase)
121 #define kr_sendpiobufcnt KREG_IDX(SendBufCnt)
122 #define kr_sendpiosize KREG_IDX(SendBufSize)
123 #define kr_sendregbase KREG_IDX(SendRegBase)
124 #define kr_userregbase KREG_IDX(UserRegBase)
125 #define kr_xgxs_cfg KREG_IDX(XGXSCfg)
126
127 /* These must only be written via qib_write_kreg_ctxt() */
128 #define kr_rcvhdraddr KREG_IDX(RcvHdrAddr0)
129 #define kr_rcvhdrtailaddr KREG_IDX(RcvHdrTailAddr0)
130
131
132 #define CREG_IDX(regname) ((QIB_7220_##regname##_OFFS - \
133                         QIB_7220_LBIntCnt_OFFS) / sizeof(u64))
134
135 #define cr_badformat CREG_IDX(RxVersionErrCnt)
136 #define cr_erricrc CREG_IDX(RxICRCErrCnt)
137 #define cr_errlink CREG_IDX(RxLinkMalformCnt)
138 #define cr_errlpcrc CREG_IDX(RxLPCRCErrCnt)
139 #define cr_errpkey CREG_IDX(RxPKeyMismatchCnt)
140 #define cr_rcvflowctrl_err CREG_IDX(RxFlowCtrlViolCnt)
141 #define cr_err_rlen CREG_IDX(RxLenErrCnt)
142 #define cr_errslen CREG_IDX(TxLenErrCnt)
143 #define cr_errtidfull CREG_IDX(RxTIDFullErrCnt)
144 #define cr_errtidvalid CREG_IDX(RxTIDValidErrCnt)
145 #define cr_errvcrc CREG_IDX(RxVCRCErrCnt)
146 #define cr_ibstatuschange CREG_IDX(IBStatusChangeCnt)
147 #define cr_lbint CREG_IDX(LBIntCnt)
148 #define cr_invalidrlen CREG_IDX(RxMaxMinLenErrCnt)
149 #define cr_invalidslen CREG_IDX(TxMaxMinLenErrCnt)
150 #define cr_lbflowstall CREG_IDX(LBFlowStallCnt)
151 #define cr_pktrcv CREG_IDX(RxDataPktCnt)
152 #define cr_pktrcvflowctrl CREG_IDX(RxFlowPktCnt)
153 #define cr_pktsend CREG_IDX(TxDataPktCnt)
154 #define cr_pktsendflow CREG_IDX(TxFlowPktCnt)
155 #define cr_portovfl CREG_IDX(RxP0HdrEgrOvflCnt)
156 #define cr_rcvebp CREG_IDX(RxEBPCnt)
157 #define cr_rcvovfl CREG_IDX(RxBufOvflCnt)
158 #define cr_senddropped CREG_IDX(TxDroppedPktCnt)
159 #define cr_sendstall CREG_IDX(TxFlowStallCnt)
160 #define cr_sendunderrun CREG_IDX(TxUnderrunCnt)
161 #define cr_wordrcv CREG_IDX(RxDwordCnt)
162 #define cr_wordsend CREG_IDX(TxDwordCnt)
163 #define cr_txunsupvl CREG_IDX(TxUnsupVLErrCnt)
164 #define cr_rxdroppkt CREG_IDX(RxDroppedPktCnt)
165 #define cr_iblinkerrrecov CREG_IDX(IBLinkErrRecoveryCnt)
166 #define cr_iblinkdown CREG_IDX(IBLinkDownedCnt)
167 #define cr_ibsymbolerr CREG_IDX(IBSymbolErrCnt)
168 #define cr_vl15droppedpkt CREG_IDX(RxVL15DroppedPktCnt)
169 #define cr_rxotherlocalphyerr CREG_IDX(RxOtherLocalPhyErrCnt)
170 #define cr_excessbufferovfl CREG_IDX(ExcessBufferOvflCnt)
171 #define cr_locallinkintegrityerr CREG_IDX(LocalLinkIntegrityErrCnt)
172 #define cr_rxvlerr CREG_IDX(RxVlErrCnt)
173 #define cr_rxdlidfltr CREG_IDX(RxDlidFltrCnt)
174 #define cr_psstat CREG_IDX(PSStat)
175 #define cr_psstart CREG_IDX(PSStart)
176 #define cr_psinterval CREG_IDX(PSInterval)
177 #define cr_psrcvdatacount CREG_IDX(PSRcvDataCount)
178 #define cr_psrcvpktscount CREG_IDX(PSRcvPktsCount)
179 #define cr_psxmitdatacount CREG_IDX(PSXmitDataCount)
180 #define cr_psxmitpktscount CREG_IDX(PSXmitPktsCount)
181 #define cr_psxmitwaitcount CREG_IDX(PSXmitWaitCount)
182 #define cr_txsdmadesc CREG_IDX(TxSDmaDescCnt)
183 #define cr_pcieretrydiag CREG_IDX(PcieRetryBufDiagQwordCnt)
184
185 #define SYM_RMASK(regname, fldname) ((u64)              \
186         QIB_7220_##regname##_##fldname##_RMASK)
187 #define SYM_MASK(regname, fldname) ((u64)               \
188         QIB_7220_##regname##_##fldname##_RMASK <<       \
189          QIB_7220_##regname##_##fldname##_LSB)
190 #define SYM_LSB(regname, fldname) (QIB_7220_##regname##_##fldname##_LSB)
191 #define SYM_FIELD(value, regname, fldname) ((u64) \
192         (((value) >> SYM_LSB(regname, fldname)) & \
193          SYM_RMASK(regname, fldname)))
194 #define ERR_MASK(fldname) SYM_MASK(ErrMask, fldname##Mask)
195 #define HWE_MASK(fldname) SYM_MASK(HwErrMask, fldname##Mask)
196
197 /* ibcctrl bits */
198 #define QLOGIC_IB_IBCC_LINKINITCMD_DISABLE 1
199 /* cycle through TS1/TS2 till OK */
200 #define QLOGIC_IB_IBCC_LINKINITCMD_POLL 2
201 /* wait for TS1, then go on */
202 #define QLOGIC_IB_IBCC_LINKINITCMD_SLEEP 3
203 #define QLOGIC_IB_IBCC_LINKINITCMD_SHIFT 16
204
205 #define QLOGIC_IB_IBCC_LINKCMD_DOWN 1           /* move to 0x11 */
206 #define QLOGIC_IB_IBCC_LINKCMD_ARMED 2          /* move to 0x21 */
207 #define QLOGIC_IB_IBCC_LINKCMD_ACTIVE 3 /* move to 0x31 */
208
209 #define BLOB_7220_IBCHG 0x81
210
211 /*
212  * We could have a single register get/put routine, that takes a group type,
213  * but this is somewhat clearer and cleaner.  It also gives us some error
214  * checking.  64 bit register reads should always work, but are inefficient
215  * on opteron (the northbridge always generates 2 separate HT 32 bit reads),
216  * so we use kreg32 wherever possible.  User register and counter register
217  * reads are always 32 bit reads, so only one form of those routines.
218  */
219
220 /**
221  * qib_read_ureg32 - read 32-bit virtualized per-context register
222  * @dd: device
223  * @regno: register number
224  * @ctxt: context number
225  *
226  * Return the contents of a register that is virtualized to be per context.
227  * Returns -1 on errors (not distinguishable from valid contents at
228  * runtime; we may add a separate error variable at some point).
229  */
230 static inline u32 qib_read_ureg32(const struct qib_devdata *dd,
231                                   enum qib_ureg regno, int ctxt)
232 {
233         if (!dd->kregbase || !(dd->flags & QIB_PRESENT))
234                 return 0;
235
236         if (dd->userbase)
237                 return readl(regno + (u64 __iomem *)
238                              ((char __iomem *)dd->userbase +
239                               dd->ureg_align * ctxt));
240         else
241                 return readl(regno + (u64 __iomem *)
242                              (dd->uregbase +
243                               (char __iomem *)dd->kregbase +
244                               dd->ureg_align * ctxt));
245 }
246
247 /**
248  * qib_write_ureg - write 32-bit virtualized per-context register
249  * @dd: device
250  * @regno: register number
251  * @value: value
252  * @ctxt: context
253  *
254  * Write the contents of a register that is virtualized to be per context.
255  */
256 static inline void qib_write_ureg(const struct qib_devdata *dd,
257                                   enum qib_ureg regno, u64 value, int ctxt)
258 {
259         u64 __iomem *ubase;
260
261         if (dd->userbase)
262                 ubase = (u64 __iomem *)
263                         ((char __iomem *) dd->userbase +
264                          dd->ureg_align * ctxt);
265         else
266                 ubase = (u64 __iomem *)
267                         (dd->uregbase +
268                          (char __iomem *) dd->kregbase +
269                          dd->ureg_align * ctxt);
270
271         if (dd->kregbase && (dd->flags & QIB_PRESENT))
272                 writeq(value, &ubase[regno]);
273 }
274
275 /**
276  * qib_write_kreg_ctxt - write a device's per-ctxt 64-bit kernel register
277  * @dd: the qlogic_ib device
278  * @regno: the register number to write
279  * @ctxt: the context containing the register
280  * @value: the value to write
281  */
282 static inline void qib_write_kreg_ctxt(const struct qib_devdata *dd,
283                                        const u16 regno, unsigned ctxt,
284                                        u64 value)
285 {
286         qib_write_kreg(dd, regno + ctxt, value);
287 }
288
289 static inline void write_7220_creg(const struct qib_devdata *dd,
290                                    u16 regno, u64 value)
291 {
292         if (dd->cspec->cregbase && (dd->flags & QIB_PRESENT))
293                 writeq(value, &dd->cspec->cregbase[regno]);
294 }
295
296 static inline u64 read_7220_creg(const struct qib_devdata *dd, u16 regno)
297 {
298         if (!dd->cspec->cregbase || !(dd->flags & QIB_PRESENT))
299                 return 0;
300         return readq(&dd->cspec->cregbase[regno]);
301 }
302
303 static inline u32 read_7220_creg32(const struct qib_devdata *dd, u16 regno)
304 {
305         if (!dd->cspec->cregbase || !(dd->flags & QIB_PRESENT))
306                 return 0;
307         return readl(&dd->cspec->cregbase[regno]);
308 }
309
310 /* kr_revision bits */
311 #define QLOGIC_IB_R_EMULATORREV_MASK ((1ULL << 22) - 1)
312 #define QLOGIC_IB_R_EMULATORREV_SHIFT 40
313
314 /* kr_control bits */
315 #define QLOGIC_IB_C_RESET (1U << 7)
316
317 /* kr_intstatus, kr_intclear, kr_intmask bits */
318 #define QLOGIC_IB_I_RCVURG_MASK ((1ULL << 17) - 1)
319 #define QLOGIC_IB_I_RCVURG_SHIFT 32
320 #define QLOGIC_IB_I_RCVAVAIL_MASK ((1ULL << 17) - 1)
321 #define QLOGIC_IB_I_RCVAVAIL_SHIFT 0
322 #define QLOGIC_IB_I_SERDESTRIMDONE (1ULL << 27)
323
324 #define QLOGIC_IB_C_FREEZEMODE 0x00000002
325 #define QLOGIC_IB_C_LINKENABLE 0x00000004
326
327 #define QLOGIC_IB_I_SDMAINT             0x8000000000000000ULL
328 #define QLOGIC_IB_I_SDMADISABLED        0x4000000000000000ULL
329 #define QLOGIC_IB_I_ERROR               0x0000000080000000ULL
330 #define QLOGIC_IB_I_SPIOSENT            0x0000000040000000ULL
331 #define QLOGIC_IB_I_SPIOBUFAVAIL        0x0000000020000000ULL
332 #define QLOGIC_IB_I_GPIO                0x0000000010000000ULL
333
334 /* variables for sanity checking interrupt and errors */
335 #define QLOGIC_IB_I_BITSEXTANT \
336                 (QLOGIC_IB_I_SDMAINT | QLOGIC_IB_I_SDMADISABLED | \
337                 (QLOGIC_IB_I_RCVURG_MASK << QLOGIC_IB_I_RCVURG_SHIFT) | \
338                 (QLOGIC_IB_I_RCVAVAIL_MASK << \
339                  QLOGIC_IB_I_RCVAVAIL_SHIFT) | \
340                 QLOGIC_IB_I_ERROR | QLOGIC_IB_I_SPIOSENT | \
341                 QLOGIC_IB_I_SPIOBUFAVAIL | QLOGIC_IB_I_GPIO | \
342                 QLOGIC_IB_I_SERDESTRIMDONE)
343
344 #define IB_HWE_BITSEXTANT \
345                (HWE_MASK(RXEMemParityErr) | \
346                 HWE_MASK(TXEMemParityErr) | \
347                 (QLOGIC_IB_HWE_PCIEMEMPARITYERR_MASK <<  \
348                  QLOGIC_IB_HWE_PCIEMEMPARITYERR_SHIFT) | \
349                 QLOGIC_IB_HWE_PCIE1PLLFAILED | \
350                 QLOGIC_IB_HWE_PCIE0PLLFAILED | \
351                 QLOGIC_IB_HWE_PCIEPOISONEDTLP | \
352                 QLOGIC_IB_HWE_PCIECPLTIMEOUT | \
353                 QLOGIC_IB_HWE_PCIEBUSPARITYXTLH | \
354                 QLOGIC_IB_HWE_PCIEBUSPARITYXADM | \
355                 QLOGIC_IB_HWE_PCIEBUSPARITYRADM | \
356                 HWE_MASK(PowerOnBISTFailed) |     \
357                 QLOGIC_IB_HWE_COREPLL_FBSLIP | \
358                 QLOGIC_IB_HWE_COREPLL_RFSLIP | \
359                 QLOGIC_IB_HWE_SERDESPLLFAILED | \
360                 HWE_MASK(IBCBusToSPCParityErr) | \
361                 HWE_MASK(IBCBusFromSPCParityErr) | \
362                 QLOGIC_IB_HWE_PCIECPLDATAQUEUEERR | \
363                 QLOGIC_IB_HWE_PCIECPLHDRQUEUEERR | \
364                 QLOGIC_IB_HWE_SDMAMEMREADERR | \
365                 QLOGIC_IB_HWE_CLK_UC_PLLNOTLOCKED | \
366                 QLOGIC_IB_HWE_PCIESERDESQ0PCLKNOTDETECT | \
367                 QLOGIC_IB_HWE_PCIESERDESQ1PCLKNOTDETECT | \
368                 QLOGIC_IB_HWE_PCIESERDESQ2PCLKNOTDETECT | \
369                 QLOGIC_IB_HWE_PCIESERDESQ3PCLKNOTDETECT | \
370                 QLOGIC_IB_HWE_DDSRXEQMEMORYPARITYERR | \
371                 QLOGIC_IB_HWE_IB_UC_MEMORYPARITYERR | \
372                 QLOGIC_IB_HWE_PCIE_UC_OCT0MEMORYPARITYERR | \
373                 QLOGIC_IB_HWE_PCIE_UC_OCT1MEMORYPARITYERR)
374
375 #define IB_E_BITSEXTANT                                                 \
376         (ERR_MASK(RcvFormatErr) | ERR_MASK(RcvVCRCErr) |                \
377          ERR_MASK(RcvICRCErr) | ERR_MASK(RcvMinPktLenErr) |             \
378          ERR_MASK(RcvMaxPktLenErr) | ERR_MASK(RcvLongPktLenErr) |       \
379          ERR_MASK(RcvShortPktLenErr) | ERR_MASK(RcvUnexpectedCharErr) | \
380          ERR_MASK(RcvUnsupportedVLErr) | ERR_MASK(RcvEBPErr) |          \
381          ERR_MASK(RcvIBFlowErr) | ERR_MASK(RcvBadVersionErr) |          \
382          ERR_MASK(RcvEgrFullErr) | ERR_MASK(RcvHdrFullErr) |            \
383          ERR_MASK(RcvBadTidErr) | ERR_MASK(RcvHdrLenErr) |              \
384          ERR_MASK(RcvHdrErr) | ERR_MASK(RcvIBLostLinkErr) |             \
385          ERR_MASK(SendSpecialTriggerErr) |                              \
386          ERR_MASK(SDmaDisabledErr) | ERR_MASK(SendMinPktLenErr) |       \
387          ERR_MASK(SendMaxPktLenErr) | ERR_MASK(SendUnderRunErr) |       \
388          ERR_MASK(SendPktLenErr) | ERR_MASK(SendDroppedSmpPktErr) |     \
389          ERR_MASK(SendDroppedDataPktErr) |                              \
390          ERR_MASK(SendPioArmLaunchErr) |                                \
391          ERR_MASK(SendUnexpectedPktNumErr) |                            \
392          ERR_MASK(SendUnsupportedVLErr) | ERR_MASK(SendBufMisuseErr) |  \
393          ERR_MASK(SDmaGenMismatchErr) | ERR_MASK(SDmaOutOfBoundErr) |   \
394          ERR_MASK(SDmaTailOutOfBoundErr) | ERR_MASK(SDmaBaseErr) |      \
395          ERR_MASK(SDma1stDescErr) | ERR_MASK(SDmaRpyTagErr) |           \
396          ERR_MASK(SDmaDwEnErr) | ERR_MASK(SDmaMissingDwErr) |           \
397          ERR_MASK(SDmaUnexpDataErr) |                                   \
398          ERR_MASK(IBStatusChanged) | ERR_MASK(InvalidAddrErr) |         \
399          ERR_MASK(ResetNegated) | ERR_MASK(HardwareErr) |               \
400          ERR_MASK(SDmaDescAddrMisalignErr) |                            \
401          ERR_MASK(InvalidEEPCmd))
402
403 /* kr_hwerrclear, kr_hwerrmask, kr_hwerrstatus, bits */
404 #define QLOGIC_IB_HWE_PCIEMEMPARITYERR_MASK  0x00000000000000ffULL
405 #define QLOGIC_IB_HWE_PCIEMEMPARITYERR_SHIFT 0
406 #define QLOGIC_IB_HWE_PCIEPOISONEDTLP      0x0000000010000000ULL
407 #define QLOGIC_IB_HWE_PCIECPLTIMEOUT       0x0000000020000000ULL
408 #define QLOGIC_IB_HWE_PCIEBUSPARITYXTLH    0x0000000040000000ULL
409 #define QLOGIC_IB_HWE_PCIEBUSPARITYXADM    0x0000000080000000ULL
410 #define QLOGIC_IB_HWE_PCIEBUSPARITYRADM    0x0000000100000000ULL
411 #define QLOGIC_IB_HWE_COREPLL_FBSLIP       0x0080000000000000ULL
412 #define QLOGIC_IB_HWE_COREPLL_RFSLIP       0x0100000000000000ULL
413 #define QLOGIC_IB_HWE_PCIE1PLLFAILED       0x0400000000000000ULL
414 #define QLOGIC_IB_HWE_PCIE0PLLFAILED       0x0800000000000000ULL
415 #define QLOGIC_IB_HWE_SERDESPLLFAILED      0x1000000000000000ULL
416 /* specific to this chip */
417 #define QLOGIC_IB_HWE_PCIECPLDATAQUEUEERR         0x0000000000000040ULL
418 #define QLOGIC_IB_HWE_PCIECPLHDRQUEUEERR          0x0000000000000080ULL
419 #define QLOGIC_IB_HWE_SDMAMEMREADERR              0x0000000010000000ULL
420 #define QLOGIC_IB_HWE_CLK_UC_PLLNOTLOCKED          0x2000000000000000ULL
421 #define QLOGIC_IB_HWE_PCIESERDESQ0PCLKNOTDETECT   0x0100000000000000ULL
422 #define QLOGIC_IB_HWE_PCIESERDESQ1PCLKNOTDETECT   0x0200000000000000ULL
423 #define QLOGIC_IB_HWE_PCIESERDESQ2PCLKNOTDETECT   0x0400000000000000ULL
424 #define QLOGIC_IB_HWE_PCIESERDESQ3PCLKNOTDETECT   0x0800000000000000ULL
425 #define QLOGIC_IB_HWE_DDSRXEQMEMORYPARITYERR       0x0000008000000000ULL
426 #define QLOGIC_IB_HWE_IB_UC_MEMORYPARITYERR        0x0000004000000000ULL
427 #define QLOGIC_IB_HWE_PCIE_UC_OCT0MEMORYPARITYERR 0x0000001000000000ULL
428 #define QLOGIC_IB_HWE_PCIE_UC_OCT1MEMORYPARITYERR 0x0000002000000000ULL
429
430 #define IBA7220_IBCC_LINKCMD_SHIFT 19
431
432 /* kr_ibcddrctrl bits */
433 #define IBA7220_IBC_DLIDLMC_MASK        0xFFFFFFFFUL
434 #define IBA7220_IBC_DLIDLMC_SHIFT       32
435
436 #define IBA7220_IBC_HRTBT_MASK  (SYM_RMASK(IBCDDRCtrl, HRTBT_AUTO) | \
437                                  SYM_RMASK(IBCDDRCtrl, HRTBT_ENB))
438 #define IBA7220_IBC_HRTBT_SHIFT SYM_LSB(IBCDDRCtrl, HRTBT_ENB)
439
440 #define IBA7220_IBC_LANE_REV_SUPPORTED (1<<8)
441 #define IBA7220_IBC_LREV_MASK   1
442 #define IBA7220_IBC_LREV_SHIFT  8
443 #define IBA7220_IBC_RXPOL_MASK  1
444 #define IBA7220_IBC_RXPOL_SHIFT 7
445 #define IBA7220_IBC_WIDTH_SHIFT 5
446 #define IBA7220_IBC_WIDTH_MASK  0x3
447 #define IBA7220_IBC_WIDTH_1X_ONLY       (0 << IBA7220_IBC_WIDTH_SHIFT)
448 #define IBA7220_IBC_WIDTH_4X_ONLY       (1 << IBA7220_IBC_WIDTH_SHIFT)
449 #define IBA7220_IBC_WIDTH_AUTONEG       (2 << IBA7220_IBC_WIDTH_SHIFT)
450 #define IBA7220_IBC_SPEED_AUTONEG       (1 << 1)
451 #define IBA7220_IBC_SPEED_SDR           (1 << 2)
452 #define IBA7220_IBC_SPEED_DDR           (1 << 3)
453 #define IBA7220_IBC_SPEED_AUTONEG_MASK  (0x7 << 1)
454 #define IBA7220_IBC_IBTA_1_2_MASK       (1)
455
456 /* kr_ibcddrstatus */
457 /* link latency shift is 0, don't bother defining */
458 #define IBA7220_DDRSTAT_LINKLAT_MASK    0x3ffffff
459
460 /* kr_extstatus bits */
461 #define QLOGIC_IB_EXTS_FREQSEL 0x2
462 #define QLOGIC_IB_EXTS_SERDESSEL 0x4
463 #define QLOGIC_IB_EXTS_MEMBIST_ENDTEST     0x0000000000004000
464 #define QLOGIC_IB_EXTS_MEMBIST_DISABLED    0x0000000000008000
465
466 /* kr_xgxsconfig bits */
467 #define QLOGIC_IB_XGXS_RESET          0x5ULL
468 #define QLOGIC_IB_XGXS_FC_SAFE        (1ULL << 63)
469
470 /* kr_rcvpktledcnt */
471 #define IBA7220_LEDBLINK_ON_SHIFT 32 /* 4ns period on after packet */
472 #define IBA7220_LEDBLINK_OFF_SHIFT 0 /* 4ns period off before next on */
473
474 #define _QIB_GPIO_SDA_NUM 1
475 #define _QIB_GPIO_SCL_NUM 0
476 #define QIB_TWSI_EEPROM_DEV 0xA2 /* All Production 7220 cards. */
477 #define QIB_TWSI_TEMP_DEV 0x98
478
479 /* HW counter clock is at 4nsec */
480 #define QIB_7220_PSXMITWAIT_CHECK_RATE 4000
481
482 #define IBA7220_R_INTRAVAIL_SHIFT 17
483 #define IBA7220_R_PKEY_DIS_SHIFT 34
484 #define IBA7220_R_TAILUPD_SHIFT 35
485 #define IBA7220_R_CTXTCFG_SHIFT 36
486
487 #define IBA7220_HDRHEAD_PKTINT_SHIFT 32 /* interrupt cnt in upper 32 bits */
488
489 /*
490  * the size bits give us 2^N, in KB units.  0 marks as invalid,
491  * and 7 is reserved.  We currently use only 2KB and 4KB
492  */
493 #define IBA7220_TID_SZ_SHIFT 37 /* shift to 3bit size selector */
494 #define IBA7220_TID_SZ_2K (1UL << IBA7220_TID_SZ_SHIFT) /* 2KB */
495 #define IBA7220_TID_SZ_4K (2UL << IBA7220_TID_SZ_SHIFT) /* 4KB */
496 #define IBA7220_TID_PA_SHIFT 11U /* TID addr in chip stored w/o low bits */
497 #define PBC_7220_VL15_SEND (1ULL << 63) /* pbc; VL15, no credit check */
498 #define PBC_7220_VL15_SEND_CTRL (1ULL << 31) /* control version of same */
499
500 #define AUTONEG_TRIES 5 /* sequential retries to negotiate DDR */
501
502 /* packet rate matching delay multiplier */
503 static u8 rate_to_delay[2][2] = {
504         /* 1x, 4x */
505         {   8, 2 }, /* SDR */
506         {   4, 1 }  /* DDR */
507 };
508
509 static u8 ib_rate_to_delay[IB_RATE_120_GBPS + 1] = {
510         [IB_RATE_2_5_GBPS] = 8,
511         [IB_RATE_5_GBPS] = 4,
512         [IB_RATE_10_GBPS] = 2,
513         [IB_RATE_20_GBPS] = 1
514 };
515
516 #define IBA7220_LINKSPEED_SHIFT SYM_LSB(IBCStatus, LinkSpeedActive)
517 #define IBA7220_LINKWIDTH_SHIFT SYM_LSB(IBCStatus, LinkWidthActive)
518
519 /* link training states, from IBC */
520 #define IB_7220_LT_STATE_DISABLED        0x00
521 #define IB_7220_LT_STATE_LINKUP          0x01
522 #define IB_7220_LT_STATE_POLLACTIVE      0x02
523 #define IB_7220_LT_STATE_POLLQUIET       0x03
524 #define IB_7220_LT_STATE_SLEEPDELAY      0x04
525 #define IB_7220_LT_STATE_SLEEPQUIET      0x05
526 #define IB_7220_LT_STATE_CFGDEBOUNCE     0x08
527 #define IB_7220_LT_STATE_CFGRCVFCFG      0x09
528 #define IB_7220_LT_STATE_CFGWAITRMT      0x0a
529 #define IB_7220_LT_STATE_CFGIDLE 0x0b
530 #define IB_7220_LT_STATE_RECOVERRETRAIN  0x0c
531 #define IB_7220_LT_STATE_RECOVERWAITRMT  0x0e
532 #define IB_7220_LT_STATE_RECOVERIDLE     0x0f
533
534 /* link state machine states from IBC */
535 #define IB_7220_L_STATE_DOWN             0x0
536 #define IB_7220_L_STATE_INIT             0x1
537 #define IB_7220_L_STATE_ARM              0x2
538 #define IB_7220_L_STATE_ACTIVE           0x3
539 #define IB_7220_L_STATE_ACT_DEFER        0x4
540
541 static const u8 qib_7220_physportstate[0x20] = {
542         [IB_7220_LT_STATE_DISABLED] = IB_PHYSPORTSTATE_DISABLED,
543         [IB_7220_LT_STATE_LINKUP] = IB_PHYSPORTSTATE_LINKUP,
544         [IB_7220_LT_STATE_POLLACTIVE] = IB_PHYSPORTSTATE_POLL,
545         [IB_7220_LT_STATE_POLLQUIET] = IB_PHYSPORTSTATE_POLL,
546         [IB_7220_LT_STATE_SLEEPDELAY] = IB_PHYSPORTSTATE_SLEEP,
547         [IB_7220_LT_STATE_SLEEPQUIET] = IB_PHYSPORTSTATE_SLEEP,
548         [IB_7220_LT_STATE_CFGDEBOUNCE] =
549                 IB_PHYSPORTSTATE_CFG_TRAIN,
550         [IB_7220_LT_STATE_CFGRCVFCFG] =
551                 IB_PHYSPORTSTATE_CFG_TRAIN,
552         [IB_7220_LT_STATE_CFGWAITRMT] =
553                 IB_PHYSPORTSTATE_CFG_TRAIN,
554         [IB_7220_LT_STATE_CFGIDLE] = IB_PHYSPORTSTATE_CFG_TRAIN,
555         [IB_7220_LT_STATE_RECOVERRETRAIN] =
556                 IB_PHYSPORTSTATE_LINK_ERR_RECOVER,
557         [IB_7220_LT_STATE_RECOVERWAITRMT] =
558                 IB_PHYSPORTSTATE_LINK_ERR_RECOVER,
559         [IB_7220_LT_STATE_RECOVERIDLE] =
560                 IB_PHYSPORTSTATE_LINK_ERR_RECOVER,
561         [0x10] = IB_PHYSPORTSTATE_CFG_TRAIN,
562         [0x11] = IB_PHYSPORTSTATE_CFG_TRAIN,
563         [0x12] = IB_PHYSPORTSTATE_CFG_TRAIN,
564         [0x13] = IB_PHYSPORTSTATE_CFG_TRAIN,
565         [0x14] = IB_PHYSPORTSTATE_CFG_TRAIN,
566         [0x15] = IB_PHYSPORTSTATE_CFG_TRAIN,
567         [0x16] = IB_PHYSPORTSTATE_CFG_TRAIN,
568         [0x17] = IB_PHYSPORTSTATE_CFG_TRAIN
569 };
570
571 int qib_special_trigger;
572 module_param_named(special_trigger, qib_special_trigger, int, S_IRUGO);
573 MODULE_PARM_DESC(special_trigger, "Enable SpecialTrigger arm/launch");
574
575 #define IBCBUSFRSPCPARITYERR HWE_MASK(IBCBusFromSPCParityErr)
576 #define IBCBUSTOSPCPARITYERR HWE_MASK(IBCBusToSPCParityErr)
577
578 #define SYM_MASK_BIT(regname, fldname, bit) ((u64) \
579         (1ULL << (SYM_LSB(regname, fldname) + (bit))))
580
581 #define TXEMEMPARITYERR_PIOBUF \
582         SYM_MASK_BIT(HwErrMask, TXEMemParityErrMask, 0)
583 #define TXEMEMPARITYERR_PIOPBC \
584         SYM_MASK_BIT(HwErrMask, TXEMemParityErrMask, 1)
585 #define TXEMEMPARITYERR_PIOLAUNCHFIFO \
586         SYM_MASK_BIT(HwErrMask, TXEMemParityErrMask, 2)
587
588 #define RXEMEMPARITYERR_RCVBUF \
589         SYM_MASK_BIT(HwErrMask, RXEMemParityErrMask, 0)
590 #define RXEMEMPARITYERR_LOOKUPQ \
591         SYM_MASK_BIT(HwErrMask, RXEMemParityErrMask, 1)
592 #define RXEMEMPARITYERR_EXPTID \
593         SYM_MASK_BIT(HwErrMask, RXEMemParityErrMask, 2)
594 #define RXEMEMPARITYERR_EAGERTID \
595         SYM_MASK_BIT(HwErrMask, RXEMemParityErrMask, 3)
596 #define RXEMEMPARITYERR_FLAGBUF \
597         SYM_MASK_BIT(HwErrMask, RXEMemParityErrMask, 4)
598 #define RXEMEMPARITYERR_DATAINFO \
599         SYM_MASK_BIT(HwErrMask, RXEMemParityErrMask, 5)
600 #define RXEMEMPARITYERR_HDRINFO \
601         SYM_MASK_BIT(HwErrMask, RXEMemParityErrMask, 6)
602
603 /* 7220 specific hardware errors... */
604 static const struct qib_hwerror_msgs qib_7220_hwerror_msgs[] = {
605         /* generic hardware errors */
606         QLOGIC_IB_HWE_MSG(IBCBUSFRSPCPARITYERR, "QIB2IB Parity"),
607         QLOGIC_IB_HWE_MSG(IBCBUSTOSPCPARITYERR, "IB2QIB Parity"),
608
609         QLOGIC_IB_HWE_MSG(TXEMEMPARITYERR_PIOBUF,
610                           "TXE PIOBUF Memory Parity"),
611         QLOGIC_IB_HWE_MSG(TXEMEMPARITYERR_PIOPBC,
612                           "TXE PIOPBC Memory Parity"),
613         QLOGIC_IB_HWE_MSG(TXEMEMPARITYERR_PIOLAUNCHFIFO,
614                           "TXE PIOLAUNCHFIFO Memory Parity"),
615
616         QLOGIC_IB_HWE_MSG(RXEMEMPARITYERR_RCVBUF,
617                           "RXE RCVBUF Memory Parity"),
618         QLOGIC_IB_HWE_MSG(RXEMEMPARITYERR_LOOKUPQ,
619                           "RXE LOOKUPQ Memory Parity"),
620         QLOGIC_IB_HWE_MSG(RXEMEMPARITYERR_EAGERTID,
621                           "RXE EAGERTID Memory Parity"),
622         QLOGIC_IB_HWE_MSG(RXEMEMPARITYERR_EXPTID,
623                           "RXE EXPTID Memory Parity"),
624         QLOGIC_IB_HWE_MSG(RXEMEMPARITYERR_FLAGBUF,
625                           "RXE FLAGBUF Memory Parity"),
626         QLOGIC_IB_HWE_MSG(RXEMEMPARITYERR_DATAINFO,
627                           "RXE DATAINFO Memory Parity"),
628         QLOGIC_IB_HWE_MSG(RXEMEMPARITYERR_HDRINFO,
629                           "RXE HDRINFO Memory Parity"),
630
631         /* chip-specific hardware errors */
632         QLOGIC_IB_HWE_MSG(QLOGIC_IB_HWE_PCIEPOISONEDTLP,
633                           "PCIe Poisoned TLP"),
634         QLOGIC_IB_HWE_MSG(QLOGIC_IB_HWE_PCIECPLTIMEOUT,
635                           "PCIe completion timeout"),
636         /*
637          * In practice, it's unlikely wthat we'll see PCIe PLL, or bus
638          * parity or memory parity error failures, because most likely we
639          * won't be able to talk to the core of the chip.  Nonetheless, we
640          * might see them, if they are in parts of the PCIe core that aren't
641          * essential.
642          */
643         QLOGIC_IB_HWE_MSG(QLOGIC_IB_HWE_PCIE1PLLFAILED,
644                           "PCIePLL1"),
645         QLOGIC_IB_HWE_MSG(QLOGIC_IB_HWE_PCIE0PLLFAILED,
646                           "PCIePLL0"),
647         QLOGIC_IB_HWE_MSG(QLOGIC_IB_HWE_PCIEBUSPARITYXTLH,
648                           "PCIe XTLH core parity"),
649         QLOGIC_IB_HWE_MSG(QLOGIC_IB_HWE_PCIEBUSPARITYXADM,
650                           "PCIe ADM TX core parity"),
651         QLOGIC_IB_HWE_MSG(QLOGIC_IB_HWE_PCIEBUSPARITYRADM,
652                           "PCIe ADM RX core parity"),
653         QLOGIC_IB_HWE_MSG(QLOGIC_IB_HWE_SERDESPLLFAILED,
654                           "SerDes PLL"),
655         QLOGIC_IB_HWE_MSG(QLOGIC_IB_HWE_PCIECPLDATAQUEUEERR,
656                           "PCIe cpl header queue"),
657         QLOGIC_IB_HWE_MSG(QLOGIC_IB_HWE_PCIECPLHDRQUEUEERR,
658                           "PCIe cpl data queue"),
659         QLOGIC_IB_HWE_MSG(QLOGIC_IB_HWE_SDMAMEMREADERR,
660                           "Send DMA memory read"),
661         QLOGIC_IB_HWE_MSG(QLOGIC_IB_HWE_CLK_UC_PLLNOTLOCKED,
662                           "uC PLL clock not locked"),
663         QLOGIC_IB_HWE_MSG(QLOGIC_IB_HWE_PCIESERDESQ0PCLKNOTDETECT,
664                           "PCIe serdes Q0 no clock"),
665         QLOGIC_IB_HWE_MSG(QLOGIC_IB_HWE_PCIESERDESQ1PCLKNOTDETECT,
666                           "PCIe serdes Q1 no clock"),
667         QLOGIC_IB_HWE_MSG(QLOGIC_IB_HWE_PCIESERDESQ2PCLKNOTDETECT,
668                           "PCIe serdes Q2 no clock"),
669         QLOGIC_IB_HWE_MSG(QLOGIC_IB_HWE_PCIESERDESQ3PCLKNOTDETECT,
670                           "PCIe serdes Q3 no clock"),
671         QLOGIC_IB_HWE_MSG(QLOGIC_IB_HWE_DDSRXEQMEMORYPARITYERR,
672                           "DDS RXEQ memory parity"),
673         QLOGIC_IB_HWE_MSG(QLOGIC_IB_HWE_IB_UC_MEMORYPARITYERR,
674                           "IB uC memory parity"),
675         QLOGIC_IB_HWE_MSG(QLOGIC_IB_HWE_PCIE_UC_OCT0MEMORYPARITYERR,
676                           "PCIe uC oct0 memory parity"),
677         QLOGIC_IB_HWE_MSG(QLOGIC_IB_HWE_PCIE_UC_OCT1MEMORYPARITYERR,
678                           "PCIe uC oct1 memory parity"),
679 };
680
681 #define RXE_PARITY (RXEMEMPARITYERR_EAGERTID|RXEMEMPARITYERR_EXPTID)
682
683 #define QLOGIC_IB_E_PKTERRS (\
684                 ERR_MASK(SendPktLenErr) |                               \
685                 ERR_MASK(SendDroppedDataPktErr) |                       \
686                 ERR_MASK(RcvVCRCErr) |                                  \
687                 ERR_MASK(RcvICRCErr) |                                  \
688                 ERR_MASK(RcvShortPktLenErr) |                           \
689                 ERR_MASK(RcvEBPErr))
690
691 /* Convenience for decoding Send DMA errors */
692 #define QLOGIC_IB_E_SDMAERRS ( \
693                 ERR_MASK(SDmaGenMismatchErr) |                          \
694                 ERR_MASK(SDmaOutOfBoundErr) |                           \
695                 ERR_MASK(SDmaTailOutOfBoundErr) | ERR_MASK(SDmaBaseErr) | \
696                 ERR_MASK(SDma1stDescErr) | ERR_MASK(SDmaRpyTagErr) |    \
697                 ERR_MASK(SDmaDwEnErr) | ERR_MASK(SDmaMissingDwErr) |    \
698                 ERR_MASK(SDmaUnexpDataErr) |                            \
699                 ERR_MASK(SDmaDescAddrMisalignErr) |                     \
700                 ERR_MASK(SDmaDisabledErr) |                             \
701                 ERR_MASK(SendBufMisuseErr))
702
703 /* These are all rcv-related errors which we want to count for stats */
704 #define E_SUM_PKTERRS \
705         (ERR_MASK(RcvHdrLenErr) | ERR_MASK(RcvBadTidErr) |              \
706          ERR_MASK(RcvBadVersionErr) | ERR_MASK(RcvHdrErr) |             \
707          ERR_MASK(RcvLongPktLenErr) | ERR_MASK(RcvShortPktLenErr) |     \
708          ERR_MASK(RcvMaxPktLenErr) | ERR_MASK(RcvMinPktLenErr) |        \
709          ERR_MASK(RcvFormatErr) | ERR_MASK(RcvUnsupportedVLErr) |       \
710          ERR_MASK(RcvUnexpectedCharErr) | ERR_MASK(RcvEBPErr))
711
712 /* These are all send-related errors which we want to count for stats */
713 #define E_SUM_ERRS \
714         (ERR_MASK(SendPioArmLaunchErr) | ERR_MASK(SendUnexpectedPktNumErr) | \
715          ERR_MASK(SendDroppedDataPktErr) | ERR_MASK(SendDroppedSmpPktErr) | \
716          ERR_MASK(SendMaxPktLenErr) | ERR_MASK(SendUnsupportedVLErr) |  \
717          ERR_MASK(SendMinPktLenErr) | ERR_MASK(SendPktLenErr) |         \
718          ERR_MASK(InvalidAddrErr))
719
720 /*
721  * this is similar to E_SUM_ERRS, but can't ignore armlaunch, don't ignore
722  * errors not related to freeze and cancelling buffers.  Can't ignore
723  * armlaunch because could get more while still cleaning up, and need
724  * to cancel those as they happen.
725  */
726 #define E_SPKT_ERRS_IGNORE \
727         (ERR_MASK(SendDroppedDataPktErr) | ERR_MASK(SendDroppedSmpPktErr) | \
728          ERR_MASK(SendMaxPktLenErr) | ERR_MASK(SendMinPktLenErr) |      \
729          ERR_MASK(SendPktLenErr))
730
731 /*
732  * these are errors that can occur when the link changes state while
733  * a packet is being sent or received.  This doesn't cover things
734  * like EBP or VCRC that can be the result of a sending having the
735  * link change state, so we receive a "known bad" packet.
736  */
737 #define E_SUM_LINK_PKTERRS \
738         (ERR_MASK(SendDroppedDataPktErr) | ERR_MASK(SendDroppedSmpPktErr) | \
739          ERR_MASK(SendMinPktLenErr) | ERR_MASK(SendPktLenErr) |         \
740          ERR_MASK(RcvShortPktLenErr) | ERR_MASK(RcvMinPktLenErr) |      \
741          ERR_MASK(RcvUnexpectedCharErr))
742
743 static void autoneg_7220_work(struct work_struct *);
744 static u32 __iomem *qib_7220_getsendbuf(struct qib_pportdata *, u64, u32 *);
745
746 /*
747  * Called when we might have an error that is specific to a particular
748  * PIO buffer, and may need to cancel that buffer, so it can be re-used.
749  * because we don't need to force the update of pioavail.
750  */
751 static void qib_disarm_7220_senderrbufs(struct qib_pportdata *ppd)
752 {
753         unsigned long sbuf[3];
754         struct qib_devdata *dd = ppd->dd;
755
756         /*
757          * It's possible that sendbuffererror could have bits set; might
758          * have already done this as a result of hardware error handling.
759          */
760         /* read these before writing errorclear */
761         sbuf[0] = qib_read_kreg64(dd, kr_sendbuffererror);
762         sbuf[1] = qib_read_kreg64(dd, kr_sendbuffererror + 1);
763         sbuf[2] = qib_read_kreg64(dd, kr_sendbuffererror + 2);
764
765         if (sbuf[0] || sbuf[1] || sbuf[2])
766                 qib_disarm_piobufs_set(dd, sbuf,
767                                        dd->piobcnt2k + dd->piobcnt4k);
768 }
769
770 static void qib_7220_txe_recover(struct qib_devdata *dd)
771 {
772         qib_devinfo(dd->pcidev, "Recovering from TXE PIO parity error\n");
773         qib_disarm_7220_senderrbufs(dd->pport);
774 }
775
776 /*
777  * This is called with interrupts disabled and sdma_lock held.
778  */
779 static void qib_7220_sdma_sendctrl(struct qib_pportdata *ppd, unsigned op)
780 {
781         struct qib_devdata *dd = ppd->dd;
782         u64 set_sendctrl = 0;
783         u64 clr_sendctrl = 0;
784
785         if (op & QIB_SDMA_SENDCTRL_OP_ENABLE)
786                 set_sendctrl |= SYM_MASK(SendCtrl, SDmaEnable);
787         else
788                 clr_sendctrl |= SYM_MASK(SendCtrl, SDmaEnable);
789
790         if (op & QIB_SDMA_SENDCTRL_OP_INTENABLE)
791                 set_sendctrl |= SYM_MASK(SendCtrl, SDmaIntEnable);
792         else
793                 clr_sendctrl |= SYM_MASK(SendCtrl, SDmaIntEnable);
794
795         if (op & QIB_SDMA_SENDCTRL_OP_HALT)
796                 set_sendctrl |= SYM_MASK(SendCtrl, SDmaHalt);
797         else
798                 clr_sendctrl |= SYM_MASK(SendCtrl, SDmaHalt);
799
800         spin_lock(&dd->sendctrl_lock);
801
802         dd->sendctrl |= set_sendctrl;
803         dd->sendctrl &= ~clr_sendctrl;
804
805         qib_write_kreg(dd, kr_sendctrl, dd->sendctrl);
806         qib_write_kreg(dd, kr_scratch, 0);
807
808         spin_unlock(&dd->sendctrl_lock);
809 }
810
811 static void qib_decode_7220_sdma_errs(struct qib_pportdata *ppd,
812                                       u64 err, char *buf, size_t blen)
813 {
814         static const struct {
815                 u64 err;
816                 const char *msg;
817         } errs[] = {
818                 { ERR_MASK(SDmaGenMismatchErr),
819                   "SDmaGenMismatch" },
820                 { ERR_MASK(SDmaOutOfBoundErr),
821                   "SDmaOutOfBound" },
822                 { ERR_MASK(SDmaTailOutOfBoundErr),
823                   "SDmaTailOutOfBound" },
824                 { ERR_MASK(SDmaBaseErr),
825                   "SDmaBase" },
826                 { ERR_MASK(SDma1stDescErr),
827                   "SDma1stDesc" },
828                 { ERR_MASK(SDmaRpyTagErr),
829                   "SDmaRpyTag" },
830                 { ERR_MASK(SDmaDwEnErr),
831                   "SDmaDwEn" },
832                 { ERR_MASK(SDmaMissingDwErr),
833                   "SDmaMissingDw" },
834                 { ERR_MASK(SDmaUnexpDataErr),
835                   "SDmaUnexpData" },
836                 { ERR_MASK(SDmaDescAddrMisalignErr),
837                   "SDmaDescAddrMisalign" },
838                 { ERR_MASK(SendBufMisuseErr),
839                   "SendBufMisuse" },
840                 { ERR_MASK(SDmaDisabledErr),
841                   "SDmaDisabled" },
842         };
843         int i;
844         size_t bidx = 0;
845
846         for (i = 0; i < ARRAY_SIZE(errs); i++) {
847                 if (err & errs[i].err)
848                         bidx += scnprintf(buf + bidx, blen - bidx,
849                                          "%s ", errs[i].msg);
850         }
851 }
852
853 /*
854  * This is called as part of link down clean up so disarm and flush
855  * all send buffers so that SMP packets can be sent.
856  */
857 static void qib_7220_sdma_hw_clean_up(struct qib_pportdata *ppd)
858 {
859         /* This will trigger the Abort interrupt */
860         sendctrl_7220_mod(ppd, QIB_SENDCTRL_DISARM_ALL | QIB_SENDCTRL_FLUSH |
861                           QIB_SENDCTRL_AVAIL_BLIP);
862         ppd->dd->upd_pio_shadow  = 1; /* update our idea of what's busy */
863 }
864
865 static void qib_sdma_7220_setlengen(struct qib_pportdata *ppd)
866 {
867         /*
868          * Set SendDmaLenGen and clear and set
869          * the MSB of the generation count to enable generation checking
870          * and load the internal generation counter.
871          */
872         qib_write_kreg(ppd->dd, kr_senddmalengen, ppd->sdma_descq_cnt);
873         qib_write_kreg(ppd->dd, kr_senddmalengen,
874                        ppd->sdma_descq_cnt |
875                        (1ULL << QIB_7220_SendDmaLenGen_Generation_MSB));
876 }
877
878 static void qib_7220_sdma_hw_start_up(struct qib_pportdata *ppd)
879 {
880         qib_sdma_7220_setlengen(ppd);
881         qib_sdma_update_7220_tail(ppd, 0); /* Set SendDmaTail */
882         ppd->sdma_head_dma[0] = 0;
883 }
884
885 #define DISABLES_SDMA (                                                 \
886                 ERR_MASK(SDmaDisabledErr) |                             \
887                 ERR_MASK(SDmaBaseErr) |                                 \
888                 ERR_MASK(SDmaTailOutOfBoundErr) |                       \
889                 ERR_MASK(SDmaOutOfBoundErr) |                           \
890                 ERR_MASK(SDma1stDescErr) |                              \
891                 ERR_MASK(SDmaRpyTagErr) |                               \
892                 ERR_MASK(SDmaGenMismatchErr) |                          \
893                 ERR_MASK(SDmaDescAddrMisalignErr) |                     \
894                 ERR_MASK(SDmaMissingDwErr) |                            \
895                 ERR_MASK(SDmaDwEnErr))
896
897 static void sdma_7220_errors(struct qib_pportdata *ppd, u64 errs)
898 {
899         unsigned long flags;
900         struct qib_devdata *dd = ppd->dd;
901         char *msg;
902
903         errs &= QLOGIC_IB_E_SDMAERRS;
904
905         msg = dd->cspec->sdmamsgbuf;
906         qib_decode_7220_sdma_errs(ppd, errs, msg,
907                 sizeof(dd->cspec->sdmamsgbuf));
908         spin_lock_irqsave(&ppd->sdma_lock, flags);
909
910         if (errs & ERR_MASK(SendBufMisuseErr)) {
911                 unsigned long sbuf[3];
912
913                 sbuf[0] = qib_read_kreg64(dd, kr_sendbuffererror);
914                 sbuf[1] = qib_read_kreg64(dd, kr_sendbuffererror + 1);
915                 sbuf[2] = qib_read_kreg64(dd, kr_sendbuffererror + 2);
916
917                 qib_dev_err(ppd->dd,
918                             "IB%u:%u SendBufMisuse: %04lx %016lx %016lx\n",
919                             ppd->dd->unit, ppd->port, sbuf[2], sbuf[1],
920                             sbuf[0]);
921         }
922
923         if (errs & ERR_MASK(SDmaUnexpDataErr))
924                 qib_dev_err(dd, "IB%u:%u SDmaUnexpData\n", ppd->dd->unit,
925                             ppd->port);
926
927         switch (ppd->sdma_state.current_state) {
928         case qib_sdma_state_s00_hw_down:
929                 /* not expecting any interrupts */
930                 break;
931
932         case qib_sdma_state_s10_hw_start_up_wait:
933                 /* handled in intr path */
934                 break;
935
936         case qib_sdma_state_s20_idle:
937                 /* not expecting any interrupts */
938                 break;
939
940         case qib_sdma_state_s30_sw_clean_up_wait:
941                 /* not expecting any interrupts */
942                 break;
943
944         case qib_sdma_state_s40_hw_clean_up_wait:
945                 if (errs & ERR_MASK(SDmaDisabledErr))
946                         __qib_sdma_process_event(ppd,
947                                 qib_sdma_event_e50_hw_cleaned);
948                 break;
949
950         case qib_sdma_state_s50_hw_halt_wait:
951                 /* handled in intr path */
952                 break;
953
954         case qib_sdma_state_s99_running:
955                 if (errs & DISABLES_SDMA)
956                         __qib_sdma_process_event(ppd,
957                                 qib_sdma_event_e7220_err_halted);
958                 break;
959         }
960
961         spin_unlock_irqrestore(&ppd->sdma_lock, flags);
962 }
963
964 /*
965  * Decode the error status into strings, deciding whether to always
966  * print * it or not depending on "normal packet errors" vs everything
967  * else.   Return 1 if "real" errors, otherwise 0 if only packet
968  * errors, so caller can decide what to print with the string.
969  */
970 static int qib_decode_7220_err(struct qib_devdata *dd, char *buf, size_t blen,
971                                u64 err)
972 {
973         int iserr = 1;
974
975         *buf = '\0';
976         if (err & QLOGIC_IB_E_PKTERRS) {
977                 if (!(err & ~QLOGIC_IB_E_PKTERRS))
978                         iserr = 0;
979                 if ((err & ERR_MASK(RcvICRCErr)) &&
980                     !(err & (ERR_MASK(RcvVCRCErr) | ERR_MASK(RcvEBPErr))))
981                         strlcat(buf, "CRC ", blen);
982                 if (!iserr)
983                         goto done;
984         }
985         if (err & ERR_MASK(RcvHdrLenErr))
986                 strlcat(buf, "rhdrlen ", blen);
987         if (err & ERR_MASK(RcvBadTidErr))
988                 strlcat(buf, "rbadtid ", blen);
989         if (err & ERR_MASK(RcvBadVersionErr))
990                 strlcat(buf, "rbadversion ", blen);
991         if (err & ERR_MASK(RcvHdrErr))
992                 strlcat(buf, "rhdr ", blen);
993         if (err & ERR_MASK(SendSpecialTriggerErr))
994                 strlcat(buf, "sendspecialtrigger ", blen);
995         if (err & ERR_MASK(RcvLongPktLenErr))
996                 strlcat(buf, "rlongpktlen ", blen);
997         if (err & ERR_MASK(RcvMaxPktLenErr))
998                 strlcat(buf, "rmaxpktlen ", blen);
999         if (err & ERR_MASK(RcvMinPktLenErr))
1000                 strlcat(buf, "rminpktlen ", blen);
1001         if (err & ERR_MASK(SendMinPktLenErr))
1002                 strlcat(buf, "sminpktlen ", blen);
1003         if (err & ERR_MASK(RcvFormatErr))
1004                 strlcat(buf, "rformaterr ", blen);
1005         if (err & ERR_MASK(RcvUnsupportedVLErr))
1006                 strlcat(buf, "runsupvl ", blen);
1007         if (err & ERR_MASK(RcvUnexpectedCharErr))
1008                 strlcat(buf, "runexpchar ", blen);
1009         if (err & ERR_MASK(RcvIBFlowErr))
1010                 strlcat(buf, "ribflow ", blen);
1011         if (err & ERR_MASK(SendUnderRunErr))
1012                 strlcat(buf, "sunderrun ", blen);
1013         if (err & ERR_MASK(SendPioArmLaunchErr))
1014                 strlcat(buf, "spioarmlaunch ", blen);
1015         if (err & ERR_MASK(SendUnexpectedPktNumErr))
1016                 strlcat(buf, "sunexperrpktnum ", blen);
1017         if (err & ERR_MASK(SendDroppedSmpPktErr))
1018                 strlcat(buf, "sdroppedsmppkt ", blen);
1019         if (err & ERR_MASK(SendMaxPktLenErr))
1020                 strlcat(buf, "smaxpktlen ", blen);
1021         if (err & ERR_MASK(SendUnsupportedVLErr))
1022                 strlcat(buf, "sunsupVL ", blen);
1023         if (err & ERR_MASK(InvalidAddrErr))
1024                 strlcat(buf, "invalidaddr ", blen);
1025         if (err & ERR_MASK(RcvEgrFullErr))
1026                 strlcat(buf, "rcvegrfull ", blen);
1027         if (err & ERR_MASK(RcvHdrFullErr))
1028                 strlcat(buf, "rcvhdrfull ", blen);
1029         if (err & ERR_MASK(IBStatusChanged))
1030                 strlcat(buf, "ibcstatuschg ", blen);
1031         if (err & ERR_MASK(RcvIBLostLinkErr))
1032                 strlcat(buf, "riblostlink ", blen);
1033         if (err & ERR_MASK(HardwareErr))
1034                 strlcat(buf, "hardware ", blen);
1035         if (err & ERR_MASK(ResetNegated))
1036                 strlcat(buf, "reset ", blen);
1037         if (err & QLOGIC_IB_E_SDMAERRS)
1038                 qib_decode_7220_sdma_errs(dd->pport, err, buf, blen);
1039         if (err & ERR_MASK(InvalidEEPCmd))
1040                 strlcat(buf, "invalideepromcmd ", blen);
1041 done:
1042         return iserr;
1043 }
1044
1045 static void reenable_7220_chase(unsigned long opaque)
1046 {
1047         struct qib_pportdata *ppd = (struct qib_pportdata *)opaque;
1048
1049         ppd->cpspec->chase_timer.expires = 0;
1050         qib_set_ib_7220_lstate(ppd, QLOGIC_IB_IBCC_LINKCMD_DOWN,
1051                 QLOGIC_IB_IBCC_LINKINITCMD_POLL);
1052 }
1053
1054 static void handle_7220_chase(struct qib_pportdata *ppd, u64 ibcst)
1055 {
1056         u8 ibclt;
1057         unsigned long tnow;
1058
1059         ibclt = (u8)SYM_FIELD(ibcst, IBCStatus, LinkTrainingState);
1060
1061         /*
1062          * Detect and handle the state chase issue, where we can
1063          * get stuck if we are unlucky on timing on both sides of
1064          * the link.   If we are, we disable, set a timer, and
1065          * then re-enable.
1066          */
1067         switch (ibclt) {
1068         case IB_7220_LT_STATE_CFGRCVFCFG:
1069         case IB_7220_LT_STATE_CFGWAITRMT:
1070         case IB_7220_LT_STATE_TXREVLANES:
1071         case IB_7220_LT_STATE_CFGENH:
1072                 tnow = jiffies;
1073                 if (ppd->cpspec->chase_end &&
1074                     time_after(tnow, ppd->cpspec->chase_end)) {
1075                         ppd->cpspec->chase_end = 0;
1076                         qib_set_ib_7220_lstate(ppd,
1077                                 QLOGIC_IB_IBCC_LINKCMD_DOWN,
1078                                 QLOGIC_IB_IBCC_LINKINITCMD_DISABLE);
1079                         ppd->cpspec->chase_timer.expires = jiffies +
1080                                 QIB_CHASE_DIS_TIME;
1081                         add_timer(&ppd->cpspec->chase_timer);
1082                 } else if (!ppd->cpspec->chase_end)
1083                         ppd->cpspec->chase_end = tnow + QIB_CHASE_TIME;
1084                 break;
1085
1086         default:
1087                 ppd->cpspec->chase_end = 0;
1088                 break;
1089         }
1090 }
1091
1092 static void handle_7220_errors(struct qib_devdata *dd, u64 errs)
1093 {
1094         char *msg;
1095         u64 ignore_this_time = 0;
1096         u64 iserr = 0;
1097         int log_idx;
1098         struct qib_pportdata *ppd = dd->pport;
1099         u64 mask;
1100
1101         /* don't report errors that are masked */
1102         errs &= dd->cspec->errormask;
1103         msg = dd->cspec->emsgbuf;
1104
1105         /* do these first, they are most important */
1106         if (errs & ERR_MASK(HardwareErr))
1107                 qib_7220_handle_hwerrors(dd, msg, sizeof(dd->cspec->emsgbuf));
1108         else
1109                 for (log_idx = 0; log_idx < QIB_EEP_LOG_CNT; ++log_idx)
1110                         if (errs & dd->eep_st_masks[log_idx].errs_to_log)
1111                                 qib_inc_eeprom_err(dd, log_idx, 1);
1112
1113         if (errs & QLOGIC_IB_E_SDMAERRS)
1114                 sdma_7220_errors(ppd, errs);
1115
1116         if (errs & ~IB_E_BITSEXTANT)
1117                 qib_dev_err(dd,
1118                         "error interrupt with unknown errors %llx set\n",
1119                         (unsigned long long) (errs & ~IB_E_BITSEXTANT));
1120
1121         if (errs & E_SUM_ERRS) {
1122                 qib_disarm_7220_senderrbufs(ppd);
1123                 if ((errs & E_SUM_LINK_PKTERRS) &&
1124                     !(ppd->lflags & QIBL_LINKACTIVE)) {
1125                         /*
1126                          * This can happen when trying to bring the link
1127                          * up, but the IB link changes state at the "wrong"
1128                          * time. The IB logic then complains that the packet
1129                          * isn't valid.  We don't want to confuse people, so
1130                          * we just don't print them, except at debug
1131                          */
1132                         ignore_this_time = errs & E_SUM_LINK_PKTERRS;
1133                 }
1134         } else if ((errs & E_SUM_LINK_PKTERRS) &&
1135                    !(ppd->lflags & QIBL_LINKACTIVE)) {
1136                 /*
1137                  * This can happen when SMA is trying to bring the link
1138                  * up, but the IB link changes state at the "wrong" time.
1139                  * The IB logic then complains that the packet isn't
1140                  * valid.  We don't want to confuse people, so we just
1141                  * don't print them, except at debug
1142                  */
1143                 ignore_this_time = errs & E_SUM_LINK_PKTERRS;
1144         }
1145
1146         qib_write_kreg(dd, kr_errclear, errs);
1147
1148         errs &= ~ignore_this_time;
1149         if (!errs)
1150                 goto done;
1151
1152         /*
1153          * The ones we mask off are handled specially below
1154          * or above.  Also mask SDMADISABLED by default as it
1155          * is too chatty.
1156          */
1157         mask = ERR_MASK(IBStatusChanged) |
1158                 ERR_MASK(RcvEgrFullErr) | ERR_MASK(RcvHdrFullErr) |
1159                 ERR_MASK(HardwareErr) | ERR_MASK(SDmaDisabledErr);
1160
1161         qib_decode_7220_err(dd, msg, sizeof(dd->cspec->emsgbuf), errs & ~mask);
1162
1163         if (errs & E_SUM_PKTERRS)
1164                 qib_stats.sps_rcverrs++;
1165         if (errs & E_SUM_ERRS)
1166                 qib_stats.sps_txerrs++;
1167         iserr = errs & ~(E_SUM_PKTERRS | QLOGIC_IB_E_PKTERRS |
1168                          ERR_MASK(SDmaDisabledErr));
1169
1170         if (errs & ERR_MASK(IBStatusChanged)) {
1171                 u64 ibcs;
1172
1173                 ibcs = qib_read_kreg64(dd, kr_ibcstatus);
1174                 if (!(ppd->lflags & QIBL_IB_AUTONEG_INPROG))
1175                         handle_7220_chase(ppd, ibcs);
1176
1177                 /* Update our picture of width and speed from chip */
1178                 ppd->link_width_active =
1179                         ((ibcs >> IBA7220_LINKWIDTH_SHIFT) & 1) ?
1180                             IB_WIDTH_4X : IB_WIDTH_1X;
1181                 ppd->link_speed_active =
1182                         ((ibcs >> IBA7220_LINKSPEED_SHIFT) & 1) ?
1183                             QIB_IB_DDR : QIB_IB_SDR;
1184
1185                 /*
1186                  * Since going into a recovery state causes the link state
1187                  * to go down and since recovery is transitory, it is better
1188                  * if we "miss" ever seeing the link training state go into
1189                  * recovery (i.e., ignore this transition for link state
1190                  * special handling purposes) without updating lastibcstat.
1191                  */
1192                 if (qib_7220_phys_portstate(ibcs) !=
1193                                             IB_PHYSPORTSTATE_LINK_ERR_RECOVER)
1194                         qib_handle_e_ibstatuschanged(ppd, ibcs);
1195         }
1196
1197         if (errs & ERR_MASK(ResetNegated)) {
1198                 qib_dev_err(dd,
1199                         "Got reset, requires re-init (unload and reload driver)\n");
1200                 dd->flags &= ~QIB_INITTED;  /* needs re-init */
1201                 /* mark as having had error */
1202                 *dd->devstatusp |= QIB_STATUS_HWERROR;
1203                 *dd->pport->statusp &= ~QIB_STATUS_IB_CONF;
1204         }
1205
1206         if (*msg && iserr)
1207                 qib_dev_porterr(dd, ppd->port, "%s error\n", msg);
1208
1209         if (ppd->state_wanted & ppd->lflags)
1210                 wake_up_interruptible(&ppd->state_wait);
1211
1212         /*
1213          * If there were hdrq or egrfull errors, wake up any processes
1214          * waiting in poll.  We used to try to check which contexts had
1215          * the overflow, but given the cost of that and the chip reads
1216          * to support it, it's better to just wake everybody up if we
1217          * get an overflow; waiters can poll again if it's not them.
1218          */
1219         if (errs & (ERR_MASK(RcvEgrFullErr) | ERR_MASK(RcvHdrFullErr))) {
1220                 qib_handle_urcv(dd, ~0U);
1221                 if (errs & ERR_MASK(RcvEgrFullErr))
1222                         qib_stats.sps_buffull++;
1223                 else
1224                         qib_stats.sps_hdrfull++;
1225         }
1226 done:
1227         return;
1228 }
1229
1230 /* enable/disable chip from delivering interrupts */
1231 static void qib_7220_set_intr_state(struct qib_devdata *dd, u32 enable)
1232 {
1233         if (enable) {
1234                 if (dd->flags & QIB_BADINTR)
1235                         return;
1236                 qib_write_kreg(dd, kr_intmask, ~0ULL);
1237                 /* force re-interrupt of any pending interrupts. */
1238                 qib_write_kreg(dd, kr_intclear, 0ULL);
1239         } else
1240                 qib_write_kreg(dd, kr_intmask, 0ULL);
1241 }
1242
1243 /*
1244  * Try to cleanup as much as possible for anything that might have gone
1245  * wrong while in freeze mode, such as pio buffers being written by user
1246  * processes (causing armlaunch), send errors due to going into freeze mode,
1247  * etc., and try to avoid causing extra interrupts while doing so.
1248  * Forcibly update the in-memory pioavail register copies after cleanup
1249  * because the chip won't do it while in freeze mode (the register values
1250  * themselves are kept correct).
1251  * Make sure that we don't lose any important interrupts by using the chip
1252  * feature that says that writing 0 to a bit in *clear that is set in
1253  * *status will cause an interrupt to be generated again (if allowed by
1254  * the *mask value).
1255  * This is in chip-specific code because of all of the register accesses,
1256  * even though the details are similar on most chips.
1257  */
1258 static void qib_7220_clear_freeze(struct qib_devdata *dd)
1259 {
1260         /* disable error interrupts, to avoid confusion */
1261         qib_write_kreg(dd, kr_errmask, 0ULL);
1262
1263         /* also disable interrupts; errormask is sometimes overwritten */
1264         qib_7220_set_intr_state(dd, 0);
1265
1266         qib_cancel_sends(dd->pport);
1267
1268         /* clear the freeze, and be sure chip saw it */
1269         qib_write_kreg(dd, kr_control, dd->control);
1270         qib_read_kreg32(dd, kr_scratch);
1271
1272         /* force in-memory update now we are out of freeze */
1273         qib_force_pio_avail_update(dd);
1274
1275         /*
1276          * force new interrupt if any hwerr, error or interrupt bits are
1277          * still set, and clear "safe" send packet errors related to freeze
1278          * and cancelling sends.  Re-enable error interrupts before possible
1279          * force of re-interrupt on pending interrupts.
1280          */
1281         qib_write_kreg(dd, kr_hwerrclear, 0ULL);
1282         qib_write_kreg(dd, kr_errclear, E_SPKT_ERRS_IGNORE);
1283         qib_write_kreg(dd, kr_errmask, dd->cspec->errormask);
1284         qib_7220_set_intr_state(dd, 1);
1285 }
1286
1287 /**
1288  * qib_7220_handle_hwerrors - display hardware errors.
1289  * @dd: the qlogic_ib device
1290  * @msg: the output buffer
1291  * @msgl: the size of the output buffer
1292  *
1293  * Use same msg buffer as regular errors to avoid excessive stack
1294  * use.  Most hardware errors are catastrophic, but for right now,
1295  * we'll print them and continue.  We reuse the same message buffer as
1296  * handle_7220_errors() to avoid excessive stack usage.
1297  */
1298 static void qib_7220_handle_hwerrors(struct qib_devdata *dd, char *msg,
1299                                      size_t msgl)
1300 {
1301         u64 hwerrs;
1302         u32 bits, ctrl;
1303         int isfatal = 0;
1304         char *bitsmsg;
1305         int log_idx;
1306
1307         hwerrs = qib_read_kreg64(dd, kr_hwerrstatus);
1308         if (!hwerrs)
1309                 goto bail;
1310         if (hwerrs == ~0ULL) {
1311                 qib_dev_err(dd,
1312                         "Read of hardware error status failed (all bits set); ignoring\n");
1313                 goto bail;
1314         }
1315         qib_stats.sps_hwerrs++;
1316
1317         /*
1318          * Always clear the error status register, except MEMBISTFAIL,
1319          * regardless of whether we continue or stop using the chip.
1320          * We want that set so we know it failed, even across driver reload.
1321          * We'll still ignore it in the hwerrmask.  We do this partly for
1322          * diagnostics, but also for support.
1323          */
1324         qib_write_kreg(dd, kr_hwerrclear,
1325                        hwerrs & ~HWE_MASK(PowerOnBISTFailed));
1326
1327         hwerrs &= dd->cspec->hwerrmask;
1328
1329         /* We log some errors to EEPROM, check if we have any of those. */
1330         for (log_idx = 0; log_idx < QIB_EEP_LOG_CNT; ++log_idx)
1331                 if (hwerrs & dd->eep_st_masks[log_idx].hwerrs_to_log)
1332                         qib_inc_eeprom_err(dd, log_idx, 1);
1333         if (hwerrs & ~(TXEMEMPARITYERR_PIOBUF | TXEMEMPARITYERR_PIOPBC |
1334                        RXE_PARITY))
1335                 qib_devinfo(dd->pcidev,
1336                         "Hardware error: hwerr=0x%llx (cleared)\n",
1337                         (unsigned long long) hwerrs);
1338
1339         if (hwerrs & ~IB_HWE_BITSEXTANT)
1340                 qib_dev_err(dd,
1341                         "hwerror interrupt with unknown errors %llx set\n",
1342                         (unsigned long long) (hwerrs & ~IB_HWE_BITSEXTANT));
1343
1344         if (hwerrs & QLOGIC_IB_HWE_IB_UC_MEMORYPARITYERR)
1345                 qib_sd7220_clr_ibpar(dd);
1346
1347         ctrl = qib_read_kreg32(dd, kr_control);
1348         if ((ctrl & QLOGIC_IB_C_FREEZEMODE) && !dd->diag_client) {
1349                 /*
1350                  * Parity errors in send memory are recoverable by h/w
1351                  * just do housekeeping, exit freeze mode and continue.
1352                  */
1353                 if (hwerrs & (TXEMEMPARITYERR_PIOBUF |
1354                               TXEMEMPARITYERR_PIOPBC)) {
1355                         qib_7220_txe_recover(dd);
1356                         hwerrs &= ~(TXEMEMPARITYERR_PIOBUF |
1357                                     TXEMEMPARITYERR_PIOPBC);
1358                 }
1359                 if (hwerrs)
1360                         isfatal = 1;
1361                 else
1362                         qib_7220_clear_freeze(dd);
1363         }
1364
1365         *msg = '\0';
1366
1367         if (hwerrs & HWE_MASK(PowerOnBISTFailed)) {
1368                 isfatal = 1;
1369                 strlcat(msg,
1370                         "[Memory BIST test failed, InfiniPath hardware unusable]",
1371                         msgl);
1372                 /* ignore from now on, so disable until driver reloaded */
1373                 dd->cspec->hwerrmask &= ~HWE_MASK(PowerOnBISTFailed);
1374                 qib_write_kreg(dd, kr_hwerrmask, dd->cspec->hwerrmask);
1375         }
1376
1377         qib_format_hwerrors(hwerrs, qib_7220_hwerror_msgs,
1378                             ARRAY_SIZE(qib_7220_hwerror_msgs), msg, msgl);
1379
1380         bitsmsg = dd->cspec->bitsmsgbuf;
1381         if (hwerrs & (QLOGIC_IB_HWE_PCIEMEMPARITYERR_MASK <<
1382                       QLOGIC_IB_HWE_PCIEMEMPARITYERR_SHIFT)) {
1383                 bits = (u32) ((hwerrs >>
1384                                QLOGIC_IB_HWE_PCIEMEMPARITYERR_SHIFT) &
1385                               QLOGIC_IB_HWE_PCIEMEMPARITYERR_MASK);
1386                 snprintf(bitsmsg, sizeof(dd->cspec->bitsmsgbuf),
1387                          "[PCIe Mem Parity Errs %x] ", bits);
1388                 strlcat(msg, bitsmsg, msgl);
1389         }
1390
1391 #define _QIB_PLL_FAIL (QLOGIC_IB_HWE_COREPLL_FBSLIP |   \
1392                          QLOGIC_IB_HWE_COREPLL_RFSLIP)
1393
1394         if (hwerrs & _QIB_PLL_FAIL) {
1395                 isfatal = 1;
1396                 snprintf(bitsmsg, sizeof(dd->cspec->bitsmsgbuf),
1397                          "[PLL failed (%llx), InfiniPath hardware unusable]",
1398                          (unsigned long long) hwerrs & _QIB_PLL_FAIL);
1399                 strlcat(msg, bitsmsg, msgl);
1400                 /* ignore from now on, so disable until driver reloaded */
1401                 dd->cspec->hwerrmask &= ~(hwerrs & _QIB_PLL_FAIL);
1402                 qib_write_kreg(dd, kr_hwerrmask, dd->cspec->hwerrmask);
1403         }
1404
1405         if (hwerrs & QLOGIC_IB_HWE_SERDESPLLFAILED) {
1406                 /*
1407                  * If it occurs, it is left masked since the eternal
1408                  * interface is unused.
1409                  */
1410                 dd->cspec->hwerrmask &= ~QLOGIC_IB_HWE_SERDESPLLFAILED;
1411                 qib_write_kreg(dd, kr_hwerrmask, dd->cspec->hwerrmask);
1412         }
1413
1414         qib_dev_err(dd, "%s hardware error\n", msg);
1415
1416         if (isfatal && !dd->diag_client) {
1417                 qib_dev_err(dd,
1418                         "Fatal Hardware Error, no longer usable, SN %.16s\n",
1419                         dd->serial);
1420                 /*
1421                  * For /sys status file and user programs to print; if no
1422                  * trailing brace is copied, we'll know it was truncated.
1423                  */
1424                 if (dd->freezemsg)
1425                         snprintf(dd->freezemsg, dd->freezelen,
1426                                  "{%s}", msg);
1427                 qib_disable_after_error(dd);
1428         }
1429 bail:;
1430 }
1431
1432 /**
1433  * qib_7220_init_hwerrors - enable hardware errors
1434  * @dd: the qlogic_ib device
1435  *
1436  * now that we have finished initializing everything that might reasonably
1437  * cause a hardware error, and cleared those errors bits as they occur,
1438  * we can enable hardware errors in the mask (potentially enabling
1439  * freeze mode), and enable hardware errors as errors (along with
1440  * everything else) in errormask
1441  */
1442 static void qib_7220_init_hwerrors(struct qib_devdata *dd)
1443 {
1444         u64 val;
1445         u64 extsval;
1446
1447         extsval = qib_read_kreg64(dd, kr_extstatus);
1448
1449         if (!(extsval & (QLOGIC_IB_EXTS_MEMBIST_ENDTEST |
1450                          QLOGIC_IB_EXTS_MEMBIST_DISABLED)))
1451                 qib_dev_err(dd, "MemBIST did not complete!\n");
1452         if (extsval & QLOGIC_IB_EXTS_MEMBIST_DISABLED)
1453                 qib_devinfo(dd->pcidev, "MemBIST is disabled.\n");
1454
1455         val = ~0ULL;    /* default to all hwerrors become interrupts, */
1456
1457         val &= ~QLOGIC_IB_HWE_IB_UC_MEMORYPARITYERR;
1458         dd->cspec->hwerrmask = val;
1459
1460         qib_write_kreg(dd, kr_hwerrclear, ~HWE_MASK(PowerOnBISTFailed));
1461         qib_write_kreg(dd, kr_hwerrmask, dd->cspec->hwerrmask);
1462
1463         /* clear all */
1464         qib_write_kreg(dd, kr_errclear, ~0ULL);
1465         /* enable errors that are masked, at least this first time. */
1466         qib_write_kreg(dd, kr_errmask, ~0ULL);
1467         dd->cspec->errormask = qib_read_kreg64(dd, kr_errmask);
1468         /* clear any interrupts up to this point (ints still not enabled) */
1469         qib_write_kreg(dd, kr_intclear, ~0ULL);
1470 }
1471
1472 /*
1473  * Disable and enable the armlaunch error.  Used for PIO bandwidth testing
1474  * on chips that are count-based, rather than trigger-based.  There is no
1475  * reference counting, but that's also fine, given the intended use.
1476  * Only chip-specific because it's all register accesses
1477  */
1478 static void qib_set_7220_armlaunch(struct qib_devdata *dd, u32 enable)
1479 {
1480         if (enable) {
1481                 qib_write_kreg(dd, kr_errclear, ERR_MASK(SendPioArmLaunchErr));
1482                 dd->cspec->errormask |= ERR_MASK(SendPioArmLaunchErr);
1483         } else
1484                 dd->cspec->errormask &= ~ERR_MASK(SendPioArmLaunchErr);
1485         qib_write_kreg(dd, kr_errmask, dd->cspec->errormask);
1486 }
1487
1488 /*
1489  * Formerly took parameter <which> in pre-shifted,
1490  * pre-merged form with LinkCmd and LinkInitCmd
1491  * together, and assuming the zero was NOP.
1492  */
1493 static void qib_set_ib_7220_lstate(struct qib_pportdata *ppd, u16 linkcmd,
1494                                    u16 linitcmd)
1495 {
1496         u64 mod_wd;
1497         struct qib_devdata *dd = ppd->dd;
1498         unsigned long flags;
1499
1500         if (linitcmd == QLOGIC_IB_IBCC_LINKINITCMD_DISABLE) {
1501                 /*
1502                  * If we are told to disable, note that so link-recovery
1503                  * code does not attempt to bring us back up.
1504                  */
1505                 spin_lock_irqsave(&ppd->lflags_lock, flags);
1506                 ppd->lflags |= QIBL_IB_LINK_DISABLED;
1507                 spin_unlock_irqrestore(&ppd->lflags_lock, flags);
1508         } else if (linitcmd || linkcmd == QLOGIC_IB_IBCC_LINKCMD_DOWN) {
1509                 /*
1510                  * Any other linkinitcmd will lead to LINKDOWN and then
1511                  * to INIT (if all is well), so clear flag to let
1512                  * link-recovery code attempt to bring us back up.
1513                  */
1514                 spin_lock_irqsave(&ppd->lflags_lock, flags);
1515                 ppd->lflags &= ~QIBL_IB_LINK_DISABLED;
1516                 spin_unlock_irqrestore(&ppd->lflags_lock, flags);
1517         }
1518
1519         mod_wd = (linkcmd << IBA7220_IBCC_LINKCMD_SHIFT) |
1520                 (linitcmd << QLOGIC_IB_IBCC_LINKINITCMD_SHIFT);
1521
1522         qib_write_kreg(dd, kr_ibcctrl, ppd->cpspec->ibcctrl | mod_wd);
1523         /* write to chip to prevent back-to-back writes of ibc reg */
1524         qib_write_kreg(dd, kr_scratch, 0);
1525 }
1526
1527 /*
1528  * All detailed interaction with the SerDes has been moved to qib_sd7220.c
1529  *
1530  * The portion of IBA7220-specific bringup_serdes() that actually deals with
1531  * registers and memory within the SerDes itself is qib_sd7220_init().
1532  */
1533
1534 /**
1535  * qib_7220_bringup_serdes - bring up the serdes
1536  * @ppd: physical port on the qlogic_ib device
1537  */
1538 static int qib_7220_bringup_serdes(struct qib_pportdata *ppd)
1539 {
1540         struct qib_devdata *dd = ppd->dd;
1541         u64 val, prev_val, guid, ibc;
1542         int ret = 0;
1543
1544         /* Put IBC in reset, sends disabled */
1545         dd->control &= ~QLOGIC_IB_C_LINKENABLE;
1546         qib_write_kreg(dd, kr_control, 0ULL);
1547
1548         if (qib_compat_ddr_negotiate) {
1549                 ppd->cpspec->ibdeltainprog = 1;
1550                 ppd->cpspec->ibsymsnap = read_7220_creg32(dd, cr_ibsymbolerr);
1551                 ppd->cpspec->iblnkerrsnap =
1552                         read_7220_creg32(dd, cr_iblinkerrrecov);
1553         }
1554
1555         /* flowcontrolwatermark is in units of KBytes */
1556         ibc = 0x5ULL << SYM_LSB(IBCCtrl, FlowCtrlWaterMark);
1557         /*
1558          * How often flowctrl sent.  More or less in usecs; balance against
1559          * watermark value, so that in theory senders always get a flow
1560          * control update in time to not let the IB link go idle.
1561          */
1562         ibc |= 0x3ULL << SYM_LSB(IBCCtrl, FlowCtrlPeriod);
1563         /* max error tolerance */
1564         ibc |= 0xfULL << SYM_LSB(IBCCtrl, PhyerrThreshold);
1565         /* use "real" buffer space for */
1566         ibc |= 4ULL << SYM_LSB(IBCCtrl, CreditScale);
1567         /* IB credit flow control. */
1568         ibc |= 0xfULL << SYM_LSB(IBCCtrl, OverrunThreshold);
1569         /*
1570          * set initial max size pkt IBC will send, including ICRC; it's the
1571          * PIO buffer size in dwords, less 1; also see qib_set_mtu()
1572          */
1573         ibc |= ((u64)(ppd->ibmaxlen >> 2) + 1) << SYM_LSB(IBCCtrl, MaxPktLen);
1574         ppd->cpspec->ibcctrl = ibc; /* without linkcmd or linkinitcmd! */
1575
1576         /* initially come up waiting for TS1, without sending anything. */
1577         val = ppd->cpspec->ibcctrl | (QLOGIC_IB_IBCC_LINKINITCMD_DISABLE <<
1578                 QLOGIC_IB_IBCC_LINKINITCMD_SHIFT);
1579         qib_write_kreg(dd, kr_ibcctrl, val);
1580
1581         if (!ppd->cpspec->ibcddrctrl) {
1582                 /* not on re-init after reset */
1583                 ppd->cpspec->ibcddrctrl = qib_read_kreg64(dd, kr_ibcddrctrl);
1584
1585                 if (ppd->link_speed_enabled == (QIB_IB_SDR | QIB_IB_DDR))
1586                         ppd->cpspec->ibcddrctrl |=
1587                                 IBA7220_IBC_SPEED_AUTONEG_MASK |
1588                                 IBA7220_IBC_IBTA_1_2_MASK;
1589                 else
1590                         ppd->cpspec->ibcddrctrl |=
1591                                 ppd->link_speed_enabled == QIB_IB_DDR ?
1592                                 IBA7220_IBC_SPEED_DDR : IBA7220_IBC_SPEED_SDR;
1593                 if ((ppd->link_width_enabled & (IB_WIDTH_1X | IB_WIDTH_4X)) ==
1594                     (IB_WIDTH_1X | IB_WIDTH_4X))
1595                         ppd->cpspec->ibcddrctrl |= IBA7220_IBC_WIDTH_AUTONEG;
1596                 else
1597                         ppd->cpspec->ibcddrctrl |=
1598                                 ppd->link_width_enabled == IB_WIDTH_4X ?
1599                                 IBA7220_IBC_WIDTH_4X_ONLY :
1600                                 IBA7220_IBC_WIDTH_1X_ONLY;
1601
1602                 /* always enable these on driver reload, not sticky */
1603                 ppd->cpspec->ibcddrctrl |=
1604                         IBA7220_IBC_RXPOL_MASK << IBA7220_IBC_RXPOL_SHIFT;
1605                 ppd->cpspec->ibcddrctrl |=
1606                         IBA7220_IBC_HRTBT_MASK << IBA7220_IBC_HRTBT_SHIFT;
1607
1608                 /* enable automatic lane reversal detection for receive */
1609                 ppd->cpspec->ibcddrctrl |= IBA7220_IBC_LANE_REV_SUPPORTED;
1610         } else
1611                 /* write to chip to prevent back-to-back writes of ibc reg */
1612                 qib_write_kreg(dd, kr_scratch, 0);
1613
1614         qib_write_kreg(dd, kr_ibcddrctrl, ppd->cpspec->ibcddrctrl);
1615         qib_write_kreg(dd, kr_scratch, 0);
1616
1617         qib_write_kreg(dd, kr_ncmodectrl, 0Ull);
1618         qib_write_kreg(dd, kr_scratch, 0);
1619
1620         ret = qib_sd7220_init(dd);
1621
1622         val = qib_read_kreg64(dd, kr_xgxs_cfg);
1623         prev_val = val;
1624         val |= QLOGIC_IB_XGXS_FC_SAFE;
1625         if (val != prev_val) {
1626                 qib_write_kreg(dd, kr_xgxs_cfg, val);
1627                 qib_read_kreg32(dd, kr_scratch);
1628         }
1629         if (val & QLOGIC_IB_XGXS_RESET)
1630                 val &= ~QLOGIC_IB_XGXS_RESET;
1631         if (val != prev_val)
1632                 qib_write_kreg(dd, kr_xgxs_cfg, val);
1633
1634         /* first time through, set port guid */
1635         if (!ppd->guid)
1636                 ppd->guid = dd->base_guid;
1637         guid = be64_to_cpu(ppd->guid);
1638
1639         qib_write_kreg(dd, kr_hrtbt_guid, guid);
1640         if (!ret) {
1641                 dd->control |= QLOGIC_IB_C_LINKENABLE;
1642                 qib_write_kreg(dd, kr_control, dd->control);
1643         } else
1644                 /* write to chip to prevent back-to-back writes of ibc reg */
1645                 qib_write_kreg(dd, kr_scratch, 0);
1646         return ret;
1647 }
1648
1649 /**
1650  * qib_7220_quiet_serdes - set serdes to txidle
1651  * @ppd: physical port of the qlogic_ib device
1652  * Called when driver is being unloaded
1653  */
1654 static void qib_7220_quiet_serdes(struct qib_pportdata *ppd)
1655 {
1656         u64 val;
1657         struct qib_devdata *dd = ppd->dd;
1658         unsigned long flags;
1659
1660         /* disable IBC */
1661         dd->control &= ~QLOGIC_IB_C_LINKENABLE;
1662         qib_write_kreg(dd, kr_control,
1663                        dd->control | QLOGIC_IB_C_FREEZEMODE);
1664
1665         ppd->cpspec->chase_end = 0;
1666         if (ppd->cpspec->chase_timer.data) /* if initted */
1667                 del_timer_sync(&ppd->cpspec->chase_timer);
1668
1669         if (ppd->cpspec->ibsymdelta || ppd->cpspec->iblnkerrdelta ||
1670             ppd->cpspec->ibdeltainprog) {
1671                 u64 diagc;
1672
1673                 /* enable counter writes */
1674                 diagc = qib_read_kreg64(dd, kr_hwdiagctrl);
1675                 qib_write_kreg(dd, kr_hwdiagctrl,
1676                                diagc | SYM_MASK(HwDiagCtrl, CounterWrEnable));
1677
1678                 if (ppd->cpspec->ibsymdelta || ppd->cpspec->ibdeltainprog) {
1679                         val = read_7220_creg32(dd, cr_ibsymbolerr);
1680                         if (ppd->cpspec->ibdeltainprog)
1681                                 val -= val - ppd->cpspec->ibsymsnap;
1682                         val -= ppd->cpspec->ibsymdelta;
1683                         write_7220_creg(dd, cr_ibsymbolerr, val);
1684                 }
1685                 if (ppd->cpspec->iblnkerrdelta || ppd->cpspec->ibdeltainprog) {
1686                         val = read_7220_creg32(dd, cr_iblinkerrrecov);
1687                         if (ppd->cpspec->ibdeltainprog)
1688                                 val -= val - ppd->cpspec->iblnkerrsnap;
1689                         val -= ppd->cpspec->iblnkerrdelta;
1690                         write_7220_creg(dd, cr_iblinkerrrecov, val);
1691                 }
1692
1693                 /* and disable counter writes */
1694                 qib_write_kreg(dd, kr_hwdiagctrl, diagc);
1695         }
1696         qib_set_ib_7220_lstate(ppd, 0, QLOGIC_IB_IBCC_LINKINITCMD_DISABLE);
1697
1698         spin_lock_irqsave(&ppd->lflags_lock, flags);
1699         ppd->lflags &= ~QIBL_IB_AUTONEG_INPROG;
1700         spin_unlock_irqrestore(&ppd->lflags_lock, flags);
1701         wake_up(&ppd->cpspec->autoneg_wait);
1702         cancel_delayed_work_sync(&ppd->cpspec->autoneg_work);
1703
1704         shutdown_7220_relock_poll(ppd->dd);
1705         val = qib_read_kreg64(ppd->dd, kr_xgxs_cfg);
1706         val |= QLOGIC_IB_XGXS_RESET;
1707         qib_write_kreg(ppd->dd, kr_xgxs_cfg, val);
1708 }
1709
1710 /**
1711  * qib_setup_7220_setextled - set the state of the two external LEDs
1712  * @dd: the qlogic_ib device
1713  * @on: whether the link is up or not
1714  *
1715  * The exact combo of LEDs if on is true is determined by looking
1716  * at the ibcstatus.
1717  *
1718  * These LEDs indicate the physical and logical state of IB link.
1719  * For this chip (at least with recommended board pinouts), LED1
1720  * is Yellow (logical state) and LED2 is Green (physical state),
1721  *
1722  * Note:  We try to match the Mellanox HCA LED behavior as best
1723  * we can.  Green indicates physical link state is OK (something is
1724  * plugged in, and we can train).
1725  * Amber indicates the link is logically up (ACTIVE).
1726  * Mellanox further blinks the amber LED to indicate data packet
1727  * activity, but we have no hardware support for that, so it would
1728  * require waking up every 10-20 msecs and checking the counters
1729  * on the chip, and then turning the LED off if appropriate.  That's
1730  * visible overhead, so not something we will do.
1731  *
1732  */
1733 static void qib_setup_7220_setextled(struct qib_pportdata *ppd, u32 on)
1734 {
1735         struct qib_devdata *dd = ppd->dd;
1736         u64 extctl, ledblink = 0, val, lst, ltst;
1737         unsigned long flags;
1738
1739         /*
1740          * The diags use the LED to indicate diag info, so we leave
1741          * the external LED alone when the diags are running.
1742          */
1743         if (dd->diag_client)
1744                 return;
1745
1746         if (ppd->led_override) {
1747                 ltst = (ppd->led_override & QIB_LED_PHYS) ?
1748                         IB_PHYSPORTSTATE_LINKUP : IB_PHYSPORTSTATE_DISABLED,
1749                 lst = (ppd->led_override & QIB_LED_LOG) ?
1750                         IB_PORT_ACTIVE : IB_PORT_DOWN;
1751         } else if (on) {
1752                 val = qib_read_kreg64(dd, kr_ibcstatus);
1753                 ltst = qib_7220_phys_portstate(val);
1754                 lst = qib_7220_iblink_state(val);
1755         } else {
1756                 ltst = 0;
1757                 lst = 0;
1758         }
1759
1760         spin_lock_irqsave(&dd->cspec->gpio_lock, flags);
1761         extctl = dd->cspec->extctrl & ~(SYM_MASK(EXTCtrl, LEDPriPortGreenOn) |
1762                                  SYM_MASK(EXTCtrl, LEDPriPortYellowOn));
1763         if (ltst == IB_PHYSPORTSTATE_LINKUP) {
1764                 extctl |= SYM_MASK(EXTCtrl, LEDPriPortGreenOn);
1765                 /*
1766                  * counts are in chip clock (4ns) periods.
1767                  * This is 1/16 sec (66.6ms) on,
1768                  * 3/16 sec (187.5 ms) off, with packets rcvd
1769                  */
1770                 ledblink = ((66600 * 1000UL / 4) << IBA7220_LEDBLINK_ON_SHIFT)
1771                         | ((187500 * 1000UL / 4) << IBA7220_LEDBLINK_OFF_SHIFT);
1772         }
1773         if (lst == IB_PORT_ACTIVE)
1774                 extctl |= SYM_MASK(EXTCtrl, LEDPriPortYellowOn);
1775         dd->cspec->extctrl = extctl;
1776         qib_write_kreg(dd, kr_extctrl, extctl);
1777         spin_unlock_irqrestore(&dd->cspec->gpio_lock, flags);
1778
1779         if (ledblink) /* blink the LED on packet receive */
1780                 qib_write_kreg(dd, kr_rcvpktledcnt, ledblink);
1781 }
1782
1783 static void qib_7220_free_irq(struct qib_devdata *dd)
1784 {
1785         if (dd->cspec->irq) {
1786                 free_irq(dd->cspec->irq, dd);
1787                 dd->cspec->irq = 0;
1788         }
1789         qib_nomsi(dd);
1790 }
1791
1792 /*
1793  * qib_setup_7220_cleanup - clean up any per-chip chip-specific stuff
1794  * @dd: the qlogic_ib device
1795  *
1796  * This is called during driver unload.
1797  *
1798  */
1799 static void qib_setup_7220_cleanup(struct qib_devdata *dd)
1800 {
1801         qib_7220_free_irq(dd);
1802         kfree(dd->cspec->cntrs);
1803         kfree(dd->cspec->portcntrs);
1804 }
1805
1806 /*
1807  * This is only called for SDmaInt.
1808  * SDmaDisabled is handled on the error path.
1809  */
1810 static void sdma_7220_intr(struct qib_pportdata *ppd, u64 istat)
1811 {
1812         unsigned long flags;
1813
1814         spin_lock_irqsave(&ppd->sdma_lock, flags);
1815
1816         switch (ppd->sdma_state.current_state) {
1817         case qib_sdma_state_s00_hw_down:
1818                 break;
1819
1820         case qib_sdma_state_s10_hw_start_up_wait:
1821                 __qib_sdma_process_event(ppd, qib_sdma_event_e20_hw_started);
1822                 break;
1823
1824         case qib_sdma_state_s20_idle:
1825                 break;
1826
1827         case qib_sdma_state_s30_sw_clean_up_wait:
1828                 break;
1829
1830         case qib_sdma_state_s40_hw_clean_up_wait:
1831                 break;
1832
1833         case qib_sdma_state_s50_hw_halt_wait:
1834                 __qib_sdma_process_event(ppd, qib_sdma_event_e60_hw_halted);
1835                 break;
1836
1837         case qib_sdma_state_s99_running:
1838                 /* too chatty to print here */
1839                 __qib_sdma_intr(ppd);
1840                 break;
1841         }
1842         spin_unlock_irqrestore(&ppd->sdma_lock, flags);
1843 }
1844
1845 static void qib_wantpiobuf_7220_intr(struct qib_devdata *dd, u32 needint)
1846 {
1847         unsigned long flags;
1848
1849         spin_lock_irqsave(&dd->sendctrl_lock, flags);
1850         if (needint) {
1851                 if (!(dd->sendctrl & SYM_MASK(SendCtrl, SendBufAvailUpd)))
1852                         goto done;
1853                 /*
1854                  * blip the availupd off, next write will be on, so
1855                  * we ensure an avail update, regardless of threshold or
1856                  * buffers becoming free, whenever we want an interrupt
1857                  */
1858                 qib_write_kreg(dd, kr_sendctrl, dd->sendctrl &
1859                         ~SYM_MASK(SendCtrl, SendBufAvailUpd));
1860                 qib_write_kreg(dd, kr_scratch, 0ULL);
1861                 dd->sendctrl |= SYM_MASK(SendCtrl, SendIntBufAvail);
1862         } else
1863                 dd->sendctrl &= ~SYM_MASK(SendCtrl, SendIntBufAvail);
1864         qib_write_kreg(dd, kr_sendctrl, dd->sendctrl);
1865         qib_write_kreg(dd, kr_scratch, 0ULL);
1866 done:
1867         spin_unlock_irqrestore(&dd->sendctrl_lock, flags);
1868 }
1869
1870 /*
1871  * Handle errors and unusual events first, separate function
1872  * to improve cache hits for fast path interrupt handling.
1873  */
1874 static noinline void unlikely_7220_intr(struct qib_devdata *dd, u64 istat)
1875 {
1876         if (unlikely(istat & ~QLOGIC_IB_I_BITSEXTANT))
1877                 qib_dev_err(dd,
1878                             "interrupt with unknown interrupts %Lx set\n",
1879                             istat & ~QLOGIC_IB_I_BITSEXTANT);
1880
1881         if (istat & QLOGIC_IB_I_GPIO) {
1882                 u32 gpiostatus;
1883
1884                 /*
1885                  * Boards for this chip currently don't use GPIO interrupts,
1886                  * so clear by writing GPIOstatus to GPIOclear, and complain
1887                  * to alert developer. To avoid endless repeats, clear
1888                  * the bits in the mask, since there is some kind of
1889                  * programming error or chip problem.
1890                  */
1891                 gpiostatus = qib_read_kreg32(dd, kr_gpio_status);
1892                 /*
1893                  * In theory, writing GPIOstatus to GPIOclear could
1894                  * have a bad side-effect on some diagnostic that wanted
1895                  * to poll for a status-change, but the various shadows
1896                  * make that problematic at best. Diags will just suppress
1897                  * all GPIO interrupts during such tests.
1898                  */
1899                 qib_write_kreg(dd, kr_gpio_clear, gpiostatus);
1900
1901                 if (gpiostatus) {
1902                         const u32 mask = qib_read_kreg32(dd, kr_gpio_mask);
1903                         u32 gpio_irq = mask & gpiostatus;
1904
1905                         /*
1906                          * A bit set in status and (chip) Mask register
1907                          * would cause an interrupt. Since we are not
1908                          * expecting any, report it. Also check that the
1909                          * chip reflects our shadow, report issues,
1910                          * and refresh from the shadow.
1911                          */
1912                         /*
1913                          * Clear any troublemakers, and update chip
1914                          * from shadow
1915                          */
1916                         dd->cspec->gpio_mask &= ~gpio_irq;
1917                         qib_write_kreg(dd, kr_gpio_mask, dd->cspec->gpio_mask);
1918                 }
1919         }
1920
1921         if (istat & QLOGIC_IB_I_ERROR) {
1922                 u64 estat;
1923
1924                 qib_stats.sps_errints++;
1925                 estat = qib_read_kreg64(dd, kr_errstatus);
1926                 if (!estat)
1927                         qib_devinfo(dd->pcidev,
1928                                 "error interrupt (%Lx), but no error bits set!\n",
1929                                 istat);
1930                 else
1931                         handle_7220_errors(dd, estat);
1932         }
1933 }
1934
1935 static irqreturn_t qib_7220intr(int irq, void *data)
1936 {
1937         struct qib_devdata *dd = data;
1938         irqreturn_t ret;
1939         u64 istat;
1940         u64 ctxtrbits;
1941         u64 rmask;
1942         unsigned i;
1943
1944         if ((dd->flags & (QIB_PRESENT | QIB_BADINTR)) != QIB_PRESENT) {
1945                 /*
1946                  * This return value is not great, but we do not want the
1947                  * interrupt core code to remove our interrupt handler
1948                  * because we don't appear to be handling an interrupt
1949                  * during a chip reset.
1950                  */
1951                 ret = IRQ_HANDLED;
1952                 goto bail;
1953         }
1954
1955         istat = qib_read_kreg64(dd, kr_intstatus);
1956
1957         if (unlikely(!istat)) {
1958                 ret = IRQ_NONE; /* not our interrupt, or already handled */
1959                 goto bail;
1960         }
1961         if (unlikely(istat == -1)) {
1962                 qib_bad_intrstatus(dd);
1963                 /* don't know if it was our interrupt or not */
1964                 ret = IRQ_NONE;
1965                 goto bail;
1966         }
1967
1968         this_cpu_inc(*dd->int_counter);
1969         if (unlikely(istat & (~QLOGIC_IB_I_BITSEXTANT |
1970                               QLOGIC_IB_I_GPIO | QLOGIC_IB_I_ERROR)))
1971                 unlikely_7220_intr(dd, istat);
1972
1973         /*
1974          * Clear the interrupt bits we found set, relatively early, so we
1975          * "know" know the chip will have seen this by the time we process
1976          * the queue, and will re-interrupt if necessary.  The processor
1977          * itself won't take the interrupt again until we return.
1978          */
1979         qib_write_kreg(dd, kr_intclear, istat);
1980
1981         /*
1982          * Handle kernel receive queues before checking for pio buffers
1983          * available since receives can overflow; piobuf waiters can afford
1984          * a few extra cycles, since they were waiting anyway.
1985          */
1986         ctxtrbits = istat &
1987                 ((QLOGIC_IB_I_RCVAVAIL_MASK << QLOGIC_IB_I_RCVAVAIL_SHIFT) |
1988                  (QLOGIC_IB_I_RCVURG_MASK << QLOGIC_IB_I_RCVURG_SHIFT));
1989         if (ctxtrbits) {
1990                 rmask = (1ULL << QLOGIC_IB_I_RCVAVAIL_SHIFT) |
1991                         (1ULL << QLOGIC_IB_I_RCVURG_SHIFT);
1992                 for (i = 0; i < dd->first_user_ctxt; i++) {
1993                         if (ctxtrbits & rmask) {
1994                                 ctxtrbits &= ~rmask;
1995                                 qib_kreceive(dd->rcd[i], NULL, NULL);
1996                         }
1997                         rmask <<= 1;
1998                 }
1999                 if (ctxtrbits) {
2000                         ctxtrbits =
2001                                 (ctxtrbits >> QLOGIC_IB_I_RCVAVAIL_SHIFT) |
2002                                 (ctxtrbits >> QLOGIC_IB_I_RCVURG_SHIFT);
2003                         qib_handle_urcv(dd, ctxtrbits);
2004                 }
2005         }
2006
2007         /* only call for SDmaInt */
2008         if (istat & QLOGIC_IB_I_SDMAINT)
2009                 sdma_7220_intr(dd->pport, istat);
2010
2011         if ((istat & QLOGIC_IB_I_SPIOBUFAVAIL) && (dd->flags & QIB_INITTED))
2012                 qib_ib_piobufavail(dd);
2013
2014         ret = IRQ_HANDLED;
2015 bail:
2016         return ret;
2017 }
2018
2019 /*
2020  * Set up our chip-specific interrupt handler.
2021  * The interrupt type has already been setup, so
2022  * we just need to do the registration and error checking.
2023  * If we are using MSI interrupts, we may fall back to
2024  * INTx later, if the interrupt handler doesn't get called
2025  * within 1/2 second (see verify_interrupt()).
2026  */
2027 static void qib_setup_7220_interrupt(struct qib_devdata *dd)
2028 {
2029         if (!dd->cspec->irq)
2030                 qib_dev_err(dd,
2031                         "irq is 0, BIOS error?  Interrupts won't work\n");
2032         else {
2033                 int ret = request_irq(dd->cspec->irq, qib_7220intr,
2034                         dd->msi_lo ? 0 : IRQF_SHARED,
2035                         QIB_DRV_NAME, dd);
2036
2037                 if (ret)
2038                         qib_dev_err(dd,
2039                                 "Couldn't setup %s interrupt (irq=%d): %d\n",
2040                                 dd->msi_lo ?  "MSI" : "INTx",
2041                                 dd->cspec->irq, ret);
2042         }
2043 }
2044
2045 /**
2046  * qib_7220_boardname - fill in the board name
2047  * @dd: the qlogic_ib device
2048  *
2049  * info is based on the board revision register
2050  */
2051 static void qib_7220_boardname(struct qib_devdata *dd)
2052 {
2053         u32 boardid;
2054
2055         boardid = SYM_FIELD(dd->revision, Revision,
2056                             BoardID);
2057
2058         switch (boardid) {
2059         case 1:
2060                 dd->boardname = "InfiniPath_QLE7240";
2061                 break;
2062         case 2:
2063                 dd->boardname = "InfiniPath_QLE7280";
2064                 break;
2065         default:
2066                 qib_dev_err(dd, "Unknown 7220 board with ID %u\n", boardid);
2067                 dd->boardname = "Unknown_InfiniPath_7220";
2068                 break;
2069         }
2070
2071         if (dd->majrev != 5 || !dd->minrev || dd->minrev > 2)
2072                 qib_dev_err(dd,
2073                             "Unsupported InfiniPath hardware revision %u.%u!\n",
2074                             dd->majrev, dd->minrev);
2075
2076         snprintf(dd->boardversion, sizeof(dd->boardversion),
2077                  "ChipABI %u.%u, %s, InfiniPath%u %u.%u, SW Compat %u\n",
2078                  QIB_CHIP_VERS_MAJ, QIB_CHIP_VERS_MIN, dd->boardname,
2079                  (unsigned int)SYM_FIELD(dd->revision, Revision_R, Arch),
2080                  dd->majrev, dd->minrev,
2081                  (unsigned int)SYM_FIELD(dd->revision, Revision_R, SW));
2082 }
2083
2084 /*
2085  * This routine sleeps, so it can only be called from user context, not
2086  * from interrupt context.
2087  */
2088 static int qib_setup_7220_reset(struct qib_devdata *dd)
2089 {
2090         u64 val;
2091         int i;
2092         int ret;
2093         u16 cmdval;
2094         u8 int_line, clinesz;
2095         unsigned long flags;
2096
2097         qib_pcie_getcmd(dd, &cmdval, &int_line, &clinesz);
2098
2099         /* Use dev_err so it shows up in logs, etc. */
2100         qib_dev_err(dd, "Resetting InfiniPath unit %u\n", dd->unit);
2101
2102         /* no interrupts till re-initted */
2103         qib_7220_set_intr_state(dd, 0);
2104
2105         dd->pport->cpspec->ibdeltainprog = 0;
2106         dd->pport->cpspec->ibsymdelta = 0;
2107         dd->pport->cpspec->iblnkerrdelta = 0;
2108
2109         /*
2110          * Keep chip from being accessed until we are ready.  Use
2111          * writeq() directly, to allow the write even though QIB_PRESENT
2112          * isn't set.
2113          */
2114         dd->flags &= ~(QIB_INITTED | QIB_PRESENT);
2115         /* so we check interrupts work again */
2116         dd->z_int_counter = qib_int_counter(dd);
2117         val = dd->control | QLOGIC_IB_C_RESET;
2118         writeq(val, &dd->kregbase[kr_control]);
2119         mb(); /* prevent compiler reordering around actual reset */
2120
2121         for (i = 1; i <= 5; i++) {
2122                 /*
2123                  * Allow MBIST, etc. to complete; longer on each retry.
2124                  * We sometimes get machine checks from bus timeout if no
2125                  * response, so for now, make it *really* long.
2126                  */
2127                 msleep(1000 + (1 + i) * 2000);
2128
2129                 qib_pcie_reenable(dd, cmdval, int_line, clinesz);
2130
2131                 /*
2132                  * Use readq directly, so we don't need to mark it as PRESENT
2133                  * until we get a successful indication that all is well.
2134                  */
2135                 val = readq(&dd->kregbase[kr_revision]);
2136                 if (val == dd->revision) {
2137                         dd->flags |= QIB_PRESENT; /* it's back */
2138                         ret = qib_reinit_intr(dd);
2139                         goto bail;
2140                 }
2141         }
2142         ret = 0; /* failed */
2143
2144 bail:
2145         if (ret) {
2146                 if (qib_pcie_params(dd, dd->lbus_width, NULL))
2147                         qib_dev_err(dd,
2148                                 "Reset failed to setup PCIe or interrupts; continuing anyway\n");
2149
2150                 /* hold IBC in reset, no sends, etc till later */
2151                 qib_write_kreg(dd, kr_control, 0ULL);
2152
2153                 /* clear the reset error, init error/hwerror mask */
2154                 qib_7220_init_hwerrors(dd);
2155
2156                 /* do setup similar to speed or link-width changes */
2157                 if (dd->pport->cpspec->ibcddrctrl & IBA7220_IBC_IBTA_1_2_MASK)
2158                         dd->cspec->presets_needed = 1;
2159                 spin_lock_irqsave(&dd->pport->lflags_lock, flags);
2160                 dd->pport->lflags |= QIBL_IB_FORCE_NOTIFY;
2161                 dd->pport->lflags &= ~QIBL_IB_AUTONEG_FAILED;
2162                 spin_unlock_irqrestore(&dd->pport->lflags_lock, flags);
2163         }
2164
2165         return ret;
2166 }
2167
2168 /**
2169  * qib_7220_put_tid - write a TID to the chip
2170  * @dd: the qlogic_ib device
2171  * @tidptr: pointer to the expected TID (in chip) to update
2172  * @tidtype: 0 for eager, 1 for expected
2173  * @pa: physical address of in memory buffer; tidinvalid if freeing
2174  */
2175 static void qib_7220_put_tid(struct qib_devdata *dd, u64 __iomem *tidptr,
2176                              u32 type, unsigned long pa)
2177 {
2178         if (pa != dd->tidinvalid) {
2179                 u64 chippa = pa >> IBA7220_TID_PA_SHIFT;
2180
2181                 /* paranoia checks */
2182                 if (pa != (chippa << IBA7220_TID_PA_SHIFT)) {
2183                         qib_dev_err(dd, "Physaddr %lx not 2KB aligned!\n",
2184                                     pa);
2185                         return;
2186                 }
2187                 if (chippa >= (1UL << IBA7220_TID_SZ_SHIFT)) {
2188                         qib_dev_err(dd,
2189                                 "Physical page address 0x%lx larger than supported\n",
2190                                 pa);
2191                         return;
2192                 }
2193
2194                 if (type == RCVHQ_RCV_TYPE_EAGER)
2195                         chippa |= dd->tidtemplate;
2196                 else /* for now, always full 4KB page */
2197                         chippa |= IBA7220_TID_SZ_4K;
2198                 pa = chippa;
2199         }
2200         writeq(pa, tidptr);
2201         mmiowb();
2202 }
2203
2204 /**
2205  * qib_7220_clear_tids - clear all TID entries for a ctxt, expected and eager
2206  * @dd: the qlogic_ib device
2207  * @ctxt: the ctxt
2208  *
2209  * clear all TID entries for a ctxt, expected and eager.
2210  * Used from qib_close().  On this chip, TIDs are only 32 bits,
2211  * not 64, but they are still on 64 bit boundaries, so tidbase
2212  * is declared as u64 * for the pointer math, even though we write 32 bits
2213  */
2214 static void qib_7220_clear_tids(struct qib_devdata *dd,
2215                                 struct qib_ctxtdata *rcd)
2216 {
2217         u64 __iomem *tidbase;
2218         unsigned long tidinv;
2219         u32 ctxt;
2220         int i;
2221
2222         if (!dd->kregbase || !rcd)
2223                 return;
2224
2225         ctxt = rcd->ctxt;
2226
2227         tidinv = dd->tidinvalid;
2228         tidbase = (u64 __iomem *)
2229                 ((char __iomem *)(dd->kregbase) +
2230                  dd->rcvtidbase +
2231                  ctxt * dd->rcvtidcnt * sizeof(*tidbase));
2232
2233         for (i = 0; i < dd->rcvtidcnt; i++)
2234                 qib_7220_put_tid(dd, &tidbase[i], RCVHQ_RCV_TYPE_EXPECTED,
2235                                  tidinv);
2236
2237         tidbase = (u64 __iomem *)
2238                 ((char __iomem *)(dd->kregbase) +
2239                  dd->rcvegrbase +
2240                  rcd->rcvegr_tid_base * sizeof(*tidbase));
2241
2242         for (i = 0; i < rcd->rcvegrcnt; i++)
2243                 qib_7220_put_tid(dd, &tidbase[i], RCVHQ_RCV_TYPE_EAGER,
2244                                  tidinv);
2245 }
2246
2247 /**
2248  * qib_7220_tidtemplate - setup constants for TID updates
2249  * @dd: the qlogic_ib device
2250  *
2251  * We setup stuff that we use a lot, to avoid calculating each time
2252  */
2253 static void qib_7220_tidtemplate(struct qib_devdata *dd)
2254 {
2255         if (dd->rcvegrbufsize == 2048)
2256                 dd->tidtemplate = IBA7220_TID_SZ_2K;
2257         else if (dd->rcvegrbufsize == 4096)
2258                 dd->tidtemplate = IBA7220_TID_SZ_4K;
2259         dd->tidinvalid = 0;
2260 }
2261
2262 /**
2263  * qib_init_7220_get_base_info - set chip-specific flags for user code
2264  * @rcd: the qlogic_ib ctxt
2265  * @kbase: qib_base_info pointer
2266  *
2267  * We set the PCIE flag because the lower bandwidth on PCIe vs
2268  * HyperTransport can affect some user packet algorithims.
2269  */
2270 static int qib_7220_get_base_info(struct qib_ctxtdata *rcd,
2271                                   struct qib_base_info *kinfo)
2272 {
2273         kinfo->spi_runtime_flags |= QIB_RUNTIME_PCIE |
2274                 QIB_RUNTIME_NODMA_RTAIL | QIB_RUNTIME_SDMA;
2275
2276         if (rcd->dd->flags & QIB_USE_SPCL_TRIG)
2277                 kinfo->spi_runtime_flags |= QIB_RUNTIME_SPECIAL_TRIGGER;
2278
2279         return 0;
2280 }
2281
2282 static struct qib_message_header *
2283 qib_7220_get_msgheader(struct qib_devdata *dd, __le32 *rhf_addr)
2284 {
2285         u32 offset = qib_hdrget_offset(rhf_addr);
2286
2287         return (struct qib_message_header *)
2288                 (rhf_addr - dd->rhf_offset + offset);
2289 }
2290
2291 static void qib_7220_config_ctxts(struct qib_devdata *dd)
2292 {
2293         unsigned long flags;
2294         u32 nchipctxts;
2295
2296         nchipctxts = qib_read_kreg32(dd, kr_portcnt);
2297         dd->cspec->numctxts = nchipctxts;
2298         if (qib_n_krcv_queues > 1) {
2299                 dd->qpn_mask = 0x3e;
2300                 dd->first_user_ctxt = qib_n_krcv_queues * dd->num_pports;
2301                 if (dd->first_user_ctxt > nchipctxts)
2302                         dd->first_user_ctxt = nchipctxts;
2303         } else
2304                 dd->first_user_ctxt = dd->num_pports;
2305         dd->n_krcv_queues = dd->first_user_ctxt;
2306
2307         if (!qib_cfgctxts) {
2308                 int nctxts = dd->first_user_ctxt + num_online_cpus();
2309
2310                 if (nctxts <= 5)
2311                         dd->ctxtcnt = 5;
2312                 else if (nctxts <= 9)
2313                         dd->ctxtcnt = 9;
2314                 else if (nctxts <= nchipctxts)
2315                         dd->ctxtcnt = nchipctxts;
2316         } else if (qib_cfgctxts <= nchipctxts)
2317                 dd->ctxtcnt = qib_cfgctxts;
2318         if (!dd->ctxtcnt) /* none of the above, set to max */
2319                 dd->ctxtcnt = nchipctxts;
2320
2321         /*
2322          * Chip can be configured for 5, 9, or 17 ctxts, and choice
2323          * affects number of eager TIDs per ctxt (1K, 2K, 4K).
2324          * Lock to be paranoid about later motion, etc.
2325          */
2326         spin_lock_irqsave(&dd->cspec->rcvmod_lock, flags);
2327         if (dd->ctxtcnt > 9)
2328                 dd->rcvctrl |= 2ULL << IBA7220_R_CTXTCFG_SHIFT;
2329         else if (dd->ctxtcnt > 5)
2330                 dd->rcvctrl |= 1ULL << IBA7220_R_CTXTCFG_SHIFT;
2331         /* else configure for default 5 receive ctxts */
2332         if (dd->qpn_mask)
2333                 dd->rcvctrl |= 1ULL << QIB_7220_RcvCtrl_RcvQPMapEnable_LSB;
2334         qib_write_kreg(dd, kr_rcvctrl, dd->rcvctrl);
2335         spin_unlock_irqrestore(&dd->cspec->rcvmod_lock, flags);
2336
2337         /* kr_rcvegrcnt changes based on the number of contexts enabled */
2338         dd->cspec->rcvegrcnt = qib_read_kreg32(dd, kr_rcvegrcnt);
2339         dd->rcvhdrcnt = max(dd->cspec->rcvegrcnt, IBA7220_KRCVEGRCNT);
2340 }
2341
2342 static int qib_7220_get_ib_cfg(struct qib_pportdata *ppd, int which)
2343 {
2344         int lsb, ret = 0;
2345         u64 maskr; /* right-justified mask */
2346
2347         switch (which) {
2348         case QIB_IB_CFG_LWID_ENB: /* Get allowed Link-width */
2349                 ret = ppd->link_width_enabled;
2350                 goto done;
2351
2352         case QIB_IB_CFG_LWID: /* Get currently active Link-width */
2353                 ret = ppd->link_width_active;
2354                 goto done;
2355
2356         case QIB_IB_CFG_SPD_ENB: /* Get allowed Link speeds */
2357                 ret = ppd->link_speed_enabled;
2358                 goto done;
2359
2360         case QIB_IB_CFG_SPD: /* Get current Link spd */
2361                 ret = ppd->link_speed_active;
2362                 goto done;
2363
2364         case QIB_IB_CFG_RXPOL_ENB: /* Get Auto-RX-polarity enable */
2365                 lsb = IBA7220_IBC_RXPOL_SHIFT;
2366                 maskr = IBA7220_IBC_RXPOL_MASK;
2367                 break;
2368
2369         case QIB_IB_CFG_LREV_ENB: /* Get Auto-Lane-reversal enable */
2370                 lsb = IBA7220_IBC_LREV_SHIFT;
2371                 maskr = IBA7220_IBC_LREV_MASK;
2372                 break;
2373
2374         case QIB_IB_CFG_LINKLATENCY:
2375                 ret = qib_read_kreg64(ppd->dd, kr_ibcddrstatus)
2376                         & IBA7220_DDRSTAT_LINKLAT_MASK;
2377                 goto done;
2378
2379         case QIB_IB_CFG_OP_VLS:
2380                 ret = ppd->vls_operational;
2381                 goto done;
2382
2383         case QIB_IB_CFG_VL_HIGH_CAP:
2384                 ret = 0;
2385                 goto done;
2386
2387         case QIB_IB_CFG_VL_LOW_CAP:
2388                 ret = 0;
2389                 goto done;
2390
2391         case QIB_IB_CFG_OVERRUN_THRESH: /* IB overrun threshold */
2392                 ret = SYM_FIELD(ppd->cpspec->ibcctrl, IBCCtrl,
2393                                 OverrunThreshold);
2394                 goto done;
2395
2396         case QIB_IB_CFG_PHYERR_THRESH: /* IB PHY error threshold */
2397                 ret = SYM_FIELD(ppd->cpspec->ibcctrl, IBCCtrl,
2398                                 PhyerrThreshold);
2399                 goto done;
2400
2401         case QIB_IB_CFG_LINKDEFAULT: /* IB link default (sleep/poll) */
2402                 /* will only take effect when the link state changes */
2403                 ret = (ppd->cpspec->ibcctrl &
2404                        SYM_MASK(IBCCtrl, LinkDownDefaultState)) ?
2405                         IB_LINKINITCMD_SLEEP : IB_LINKINITCMD_POLL;
2406                 goto done;
2407
2408         case QIB_IB_CFG_HRTBT: /* Get Heartbeat off/enable/auto */
2409                 lsb = IBA7220_IBC_HRTBT_SHIFT;
2410                 maskr = IBA7220_IBC_HRTBT_MASK;
2411                 break;
2412
2413         case QIB_IB_CFG_PMA_TICKS:
2414                 /*
2415                  * 0x00 = 10x link transfer rate or 4 nsec. for 2.5Gbs
2416                  * Since the clock is always 250MHz, the value is 1 or 0.
2417                  */
2418                 ret = (ppd->link_speed_active == QIB_IB_DDR);
2419                 goto done;
2420
2421         default:
2422                 ret = -EINVAL;
2423                 goto done;
2424         }
2425         ret = (int)((ppd->cpspec->ibcddrctrl >> lsb) & maskr);
2426 done:
2427         return ret;
2428 }
2429
2430 static int qib_7220_set_ib_cfg(struct qib_pportdata *ppd, int which, u32 val)
2431 {
2432         struct qib_devdata *dd = ppd->dd;
2433         u64 maskr; /* right-justified mask */
2434         int lsb, ret = 0, setforce = 0;
2435         u16 lcmd, licmd;
2436         unsigned long flags;
2437         u32 tmp = 0;
2438
2439         switch (which) {
2440         case QIB_IB_CFG_LIDLMC:
2441                 /*
2442                  * Set LID and LMC. Combined to avoid possible hazard
2443                  * caller puts LMC in 16MSbits, DLID in 16LSbits of val
2444                  */
2445                 lsb = IBA7220_IBC_DLIDLMC_SHIFT;
2446                 maskr = IBA7220_IBC_DLIDLMC_MASK;
2447                 break;
2448
2449         case QIB_IB_CFG_LWID_ENB: /* set allowed Link-width */
2450                 /*
2451                  * As with speed, only write the actual register if
2452                  * the link is currently down, otherwise takes effect
2453                  * on next link change.
2454                  */
2455                 ppd->link_width_enabled = val;
2456                 if (!(ppd->lflags & QIBL_LINKDOWN))
2457                         goto bail;
2458                 /*
2459                  * We set the QIBL_IB_FORCE_NOTIFY bit so updown
2460                  * will get called because we want update
2461                  * link_width_active, and the change may not take
2462                  * effect for some time (if we are in POLL), so this
2463                  * flag will force the updown routine to be called
2464                  * on the next ibstatuschange down interrupt, even
2465                  * if it's not an down->up transition.
2466                  */
2467                 val--; /* convert from IB to chip */
2468                 maskr = IBA7220_IBC_WIDTH_MASK;
2469                 lsb = IBA7220_IBC_WIDTH_SHIFT;
2470                 setforce = 1;
2471                 break;
2472
2473         case QIB_IB_CFG_SPD_ENB: /* set allowed Link speeds */
2474                 /*
2475                  * If we turn off IB1.2, need to preset SerDes defaults,
2476                  * but not right now. Set a flag for the next time
2477                  * we command the link down.  As with width, only write the
2478                  * actual register if the link is currently down, otherwise
2479                  * takes effect on next link change.  Since setting is being
2480                  * explicitly requested (via MAD or sysfs), clear autoneg
2481                  * failure status if speed autoneg is enabled.
2482                  */
2483                 ppd->link_speed_enabled = val;
2484                 if ((ppd->cpspec->ibcddrctrl & IBA7220_IBC_IBTA_1_2_MASK) &&
2485                     !(val & (val - 1)))
2486                         dd->cspec->presets_needed = 1;
2487                 if (!(ppd->lflags & QIBL_LINKDOWN))
2488                         goto bail;
2489                 /*
2490                  * We set the QIBL_IB_FORCE_NOTIFY bit so updown
2491                  * will get called because we want update
2492                  * link_speed_active, and the change may not take
2493                  * effect for some time (if we are in POLL), so this
2494                  * flag will force the updown routine to be called
2495                  * on the next ibstatuschange down interrupt, even
2496                  * if it's not an down->up transition.
2497                  */
2498                 if (val == (QIB_IB_SDR | QIB_IB_DDR)) {
2499                         val = IBA7220_IBC_SPEED_AUTONEG_MASK |
2500                                 IBA7220_IBC_IBTA_1_2_MASK;
2501                         spin_lock_irqsave(&ppd->lflags_lock, flags);
2502                         ppd->lflags &= ~QIBL_IB_AUTONEG_FAILED;
2503                         spin_unlock_irqrestore(&ppd->lflags_lock, flags);
2504                 } else
2505                         val = val == QIB_IB_DDR ?
2506                                 IBA7220_IBC_SPEED_DDR : IBA7220_IBC_SPEED_SDR;
2507                 maskr = IBA7220_IBC_SPEED_AUTONEG_MASK |
2508                         IBA7220_IBC_IBTA_1_2_MASK;
2509                 /* IBTA 1.2 mode + speed bits are contiguous */
2510                 lsb = SYM_LSB(IBCDDRCtrl, IB_ENHANCED_MODE);
2511                 setforce = 1;
2512                 break;
2513
2514         case QIB_IB_CFG_RXPOL_ENB: /* set Auto-RX-polarity enable */
2515                 lsb = IBA7220_IBC_RXPOL_SHIFT;
2516                 maskr = IBA7220_IBC_RXPOL_MASK;
2517                 break;
2518
2519         case QIB_IB_CFG_LREV_ENB: /* set Auto-Lane-reversal enable */
2520                 lsb = IBA7220_IBC_LREV_SHIFT;
2521                 maskr = IBA7220_IBC_LREV_MASK;
2522                 break;
2523
2524         case QIB_IB_CFG_OVERRUN_THRESH: /* IB overrun threshold */
2525                 maskr = SYM_FIELD(ppd->cpspec->ibcctrl, IBCCtrl,
2526                                   OverrunThreshold);
2527                 if (maskr != val) {
2528                         ppd->cpspec->ibcctrl &=
2529                                 ~SYM_MASK(IBCCtrl, OverrunThreshold);
2530                         ppd->cpspec->ibcctrl |= (u64) val <<
2531                                 SYM_LSB(IBCCtrl, OverrunThreshold);
2532                         qib_write_kreg(dd, kr_ibcctrl, ppd->cpspec->ibcctrl);
2533                         qib_write_kreg(dd, kr_scratch, 0);
2534                 }
2535                 goto bail;
2536
2537         case QIB_IB_CFG_PHYERR_THRESH: /* IB PHY error threshold */
2538                 maskr = SYM_FIELD(ppd->cpspec->ibcctrl, IBCCtrl,
2539                                   PhyerrThreshold);
2540                 if (maskr != val) {
2541                         ppd->cpspec->ibcctrl &=
2542                                 ~SYM_MASK(IBCCtrl, PhyerrThreshold);
2543                         ppd->cpspec->ibcctrl |= (u64) val <<
2544                                 SYM_LSB(IBCCtrl, PhyerrThreshold);
2545                         qib_write_kreg(dd, kr_ibcctrl, ppd->cpspec->ibcctrl);
2546                         qib_write_kreg(dd, kr_scratch, 0);
2547                 }
2548                 goto bail;
2549
2550         case QIB_IB_CFG_PKEYS: /* update pkeys */
2551                 maskr = (u64) ppd->pkeys[0] | ((u64) ppd->pkeys[1] << 16) |
2552                         ((u64) ppd->pkeys[2] << 32) |
2553                         ((u64) ppd->pkeys[3] << 48);
2554                 qib_write_kreg(dd, kr_partitionkey, maskr);
2555                 goto bail;
2556
2557         case QIB_IB_CFG_LINKDEFAULT: /* IB link default (sleep/poll) */
2558                 /* will only take effect when the link state changes */
2559                 if (val == IB_LINKINITCMD_POLL)
2560                         ppd->cpspec->ibcctrl &=
2561                                 ~SYM_MASK(IBCCtrl, LinkDownDefaultState);
2562                 else /* SLEEP */
2563                         ppd->cpspec->ibcctrl |=
2564                                 SYM_MASK(IBCCtrl, LinkDownDefaultState);
2565                 qib_write_kreg(dd, kr_ibcctrl, ppd->cpspec->ibcctrl);
2566                 qib_write_kreg(dd, kr_scratch, 0);
2567                 goto bail;
2568
2569         case QIB_IB_CFG_MTU: /* update the MTU in IBC */
2570                 /*
2571                  * Update our housekeeping variables, and set IBC max
2572                  * size, same as init code; max IBC is max we allow in
2573                  * buffer, less the qword pbc, plus 1 for ICRC, in dwords
2574                  * Set even if it's unchanged, print debug message only
2575                  * on changes.
2576                  */
2577                 val = (ppd->ibmaxlen >> 2) + 1;
2578                 ppd->cpspec->ibcctrl &= ~SYM_MASK(IBCCtrl, MaxPktLen);
2579                 ppd->cpspec->ibcctrl |= (u64)val << SYM_LSB(IBCCtrl, MaxPktLen);
2580                 qib_write_kreg(dd, kr_ibcctrl, ppd->cpspec->ibcctrl);
2581                 qib_write_kreg(dd, kr_scratch, 0);
2582                 goto bail;
2583
2584         case QIB_IB_CFG_LSTATE: /* set the IB link state */
2585                 switch (val & 0xffff0000) {
2586                 case IB_LINKCMD_DOWN:
2587                         lcmd = QLOGIC_IB_IBCC_LINKCMD_DOWN;
2588                         if (!ppd->cpspec->ibdeltainprog &&
2589                             qib_compat_ddr_negotiate) {
2590                                 ppd->cpspec->ibdeltainprog = 1;
2591                                 ppd->cpspec->ibsymsnap =
2592                                         read_7220_creg32(dd, cr_ibsymbolerr);
2593                                 ppd->cpspec->iblnkerrsnap =
2594                                         read_7220_creg32(dd, cr_iblinkerrrecov);
2595                         }
2596                         break;
2597
2598                 case IB_LINKCMD_ARMED:
2599                         lcmd = QLOGIC_IB_IBCC_LINKCMD_ARMED;
2600                         break;
2601
2602                 case IB_LINKCMD_ACTIVE:
2603                         lcmd = QLOGIC_IB_IBCC_LINKCMD_ACTIVE;
2604                         break;
2605
2606                 default:
2607                         ret = -EINVAL;
2608                         qib_dev_err(dd, "bad linkcmd req 0x%x\n", val >> 16);
2609                         goto bail;
2610                 }
2611                 switch (val & 0xffff) {
2612                 case IB_LINKINITCMD_NOP:
2613                         licmd = 0;
2614                         break;
2615
2616                 case IB_LINKINITCMD_POLL:
2617                         licmd = QLOGIC_IB_IBCC_LINKINITCMD_POLL;
2618                         break;
2619
2620                 case IB_LINKINITCMD_SLEEP:
2621                         licmd = QLOGIC_IB_IBCC_LINKINITCMD_SLEEP;
2622                         break;
2623
2624                 case IB_LINKINITCMD_DISABLE:
2625                         licmd = QLOGIC_IB_IBCC_LINKINITCMD_DISABLE;
2626                         ppd->cpspec->chase_end = 0;
2627                         /*
2628                          * stop state chase counter and timer, if running.
2629                          * wait forpending timer, but don't clear .data (ppd)!
2630                          */
2631                         if (ppd->cpspec->chase_timer.expires) {
2632                                 del_timer_sync(&ppd->cpspec->chase_timer);
2633                                 ppd->cpspec->chase_timer.expires = 0;
2634                         }
2635                         break;
2636
2637                 default:
2638                         ret = -EINVAL;
2639                         qib_dev_err(dd, "bad linkinitcmd req 0x%x\n",
2640                                     val & 0xffff);
2641                         goto bail;
2642                 }
2643                 qib_set_ib_7220_lstate(ppd, lcmd, licmd);
2644
2645                 maskr = IBA7220_IBC_WIDTH_MASK;
2646                 lsb = IBA7220_IBC_WIDTH_SHIFT;
2647                 tmp = (ppd->cpspec->ibcddrctrl >> lsb) & maskr;
2648                 /* If the width active on the chip does not match the
2649                  * width in the shadow register, write the new active
2650                  * width to the chip.
2651                  * We don't have to worry about speed as the speed is taken
2652                  * care of by set_7220_ibspeed_fast called by ib_updown.
2653                  */
2654                 if (ppd->link_width_enabled-1 != tmp) {
2655                         ppd->cpspec->ibcddrctrl &= ~(maskr << lsb);
2656                         ppd->cpspec->ibcddrctrl |=
2657                                 (((u64)(ppd->link_width_enabled-1) & maskr) <<
2658                                  lsb);
2659                         qib_write_kreg(dd, kr_ibcddrctrl,
2660                                        ppd->cpspec->ibcddrctrl);
2661                         qib_write_kreg(dd, kr_scratch, 0);
2662                         spin_lock_irqsave(&ppd->lflags_lock, flags);
2663                         ppd->lflags |= QIBL_IB_FORCE_NOTIFY;
2664                         spin_unlock_irqrestore(&ppd->lflags_lock, flags);
2665                 }
2666                 goto bail;
2667
2668         case QIB_IB_CFG_HRTBT: /* set Heartbeat off/enable/auto */
2669                 if (val > IBA7220_IBC_HRTBT_MASK) {
2670                         ret = -EINVAL;
2671                         goto bail;
2672                 }
2673                 lsb = IBA7220_IBC_HRTBT_SHIFT;
2674                 maskr = IBA7220_IBC_HRTBT_MASK;
2675                 break;
2676
2677         default:
2678                 ret = -EINVAL;
2679                 goto bail;
2680         }
2681         ppd->cpspec->ibcddrctrl &= ~(maskr << lsb);
2682         ppd->cpspec->ibcddrctrl |= (((u64) val & maskr) << lsb);
2683         qib_write_kreg(dd, kr_ibcddrctrl, ppd->cpspec->ibcddrctrl);
2684         qib_write_kreg(dd, kr_scratch, 0);
2685         if (setforce) {
2686                 spin_lock_irqsave(&ppd->lflags_lock, flags);
2687                 ppd->lflags |= QIBL_IB_FORCE_NOTIFY;
2688                 spin_unlock_irqrestore(&ppd->lflags_lock, flags);
2689         }
2690 bail:
2691         return ret;
2692 }
2693
2694 static int qib_7220_set_loopback(struct qib_pportdata *ppd, const char *what)
2695 {
2696         int ret = 0;
2697         u64 val, ddr;
2698
2699         if (!strncmp(what, "ibc", 3)) {
2700                 ppd->cpspec->ibcctrl |= SYM_MASK(IBCCtrl, Loopback);
2701                 val = 0; /* disable heart beat, so link will come up */
2702                 qib_devinfo(ppd->dd->pcidev, "Enabling IB%u:%u IBC loopback\n",
2703                          ppd->dd->unit, ppd->port);
2704         } else if (!strncmp(what, "off", 3)) {
2705                 ppd->cpspec->ibcctrl &= ~SYM_MASK(IBCCtrl, Loopback);
2706                 /* enable heart beat again */
2707                 val = IBA7220_IBC_HRTBT_MASK << IBA7220_IBC_HRTBT_SHIFT;
2708                 qib_devinfo(ppd->dd->pcidev,
2709                         "Disabling IB%u:%u IBC loopback (normal)\n",
2710                         ppd->dd->unit, ppd->port);
2711         } else
2712                 ret = -EINVAL;
2713         if (!ret) {
2714                 qib_write_kreg(ppd->dd, kr_ibcctrl, ppd->cpspec->ibcctrl);
2715                 ddr = ppd->cpspec->ibcddrctrl & ~(IBA7220_IBC_HRTBT_MASK
2716                                              << IBA7220_IBC_HRTBT_SHIFT);
2717                 ppd->cpspec->ibcddrctrl = ddr | val;
2718                 qib_write_kreg(ppd->dd, kr_ibcddrctrl,
2719                                ppd->cpspec->ibcddrctrl);
2720                 qib_write_kreg(ppd->dd, kr_scratch, 0);
2721         }
2722         return ret;
2723 }
2724
2725 static void qib_update_7220_usrhead(struct qib_ctxtdata *rcd, u64 hd,
2726                                     u32 updegr, u32 egrhd, u32 npkts)
2727 {
2728         if (updegr)
2729                 qib_write_ureg(rcd->dd, ur_rcvegrindexhead, egrhd, rcd->ctxt);
2730         mmiowb();
2731         qib_write_ureg(rcd->dd, ur_rcvhdrhead, hd, rcd->ctxt);
2732         mmiowb();
2733 }
2734
2735 static u32 qib_7220_hdrqempty(struct qib_ctxtdata *rcd)
2736 {
2737         u32 head, tail;
2738
2739         head = qib_read_ureg32(rcd->dd, ur_rcvhdrhead, rcd->ctxt);
2740         if (rcd->rcvhdrtail_kvaddr)
2741                 tail = qib_get_rcvhdrtail(rcd);
2742         else
2743                 tail = qib_read_ureg32(rcd->dd, ur_rcvhdrtail, rcd->ctxt);
2744         return head == tail;
2745 }
2746
2747 /*
2748  * Modify the RCVCTRL register in chip-specific way. This
2749  * is a function because bit positions and (future) register
2750  * location is chip-specifc, but the needed operations are
2751  * generic. <op> is a bit-mask because we often want to
2752  * do multiple modifications.
2753  */
2754 static void rcvctrl_7220_mod(struct qib_pportdata *ppd, unsigned int op,
2755                              int ctxt)
2756 {
2757         struct qib_devdata *dd = ppd->dd;
2758         u64 mask, val;
2759         unsigned long flags;
2760
2761         spin_lock_irqsave(&dd->cspec->rcvmod_lock, flags);
2762         if (op & QIB_RCVCTRL_TAILUPD_ENB)
2763                 dd->rcvctrl |= (1ULL << IBA7220_R_TAILUPD_SHIFT);
2764         if (op & QIB_RCVCTRL_TAILUPD_DIS)
2765                 dd->rcvctrl &= ~(1ULL << IBA7220_R_TAILUPD_SHIFT);
2766         if (op & QIB_RCVCTRL_PKEY_ENB)
2767                 dd->rcvctrl &= ~(1ULL << IBA7220_R_PKEY_DIS_SHIFT);
2768         if (op & QIB_RCVCTRL_PKEY_DIS)
2769                 dd->rcvctrl |= (1ULL << IBA7220_R_PKEY_DIS_SHIFT);
2770         if (ctxt < 0)
2771                 mask = (1ULL << dd->ctxtcnt) - 1;
2772         else
2773                 mask = (1ULL << ctxt);
2774         if (op & QIB_RCVCTRL_CTXT_ENB) {
2775                 /* always done for specific ctxt */
2776                 dd->rcvctrl |= (mask << SYM_LSB(RcvCtrl, PortEnable));
2777                 if (!(dd->flags & QIB_NODMA_RTAIL))
2778                         dd->rcvctrl |= 1ULL << IBA7220_R_TAILUPD_SHIFT;
2779                 /* Write these registers before the context is enabled. */
2780                 qib_write_kreg_ctxt(dd, kr_rcvhdrtailaddr, ctxt,
2781                         dd->rcd[ctxt]->rcvhdrqtailaddr_phys);
2782                 qib_write_kreg_ctxt(dd, kr_rcvhdraddr, ctxt,
2783                         dd->rcd[ctxt]->rcvhdrq_phys);
2784                 dd->rcd[ctxt]->seq_cnt = 1;
2785         }
2786         if (op & QIB_RCVCTRL_CTXT_DIS)
2787                 dd->rcvctrl &= ~(mask << SYM_LSB(RcvCtrl, PortEnable));
2788         if (op & QIB_RCVCTRL_INTRAVAIL_ENB)
2789                 dd->rcvctrl |= (mask << IBA7220_R_INTRAVAIL_SHIFT);
2790         if (op & QIB_RCVCTRL_INTRAVAIL_DIS)
2791                 dd->rcvctrl &= ~(mask << IBA7220_R_INTRAVAIL_SHIFT);
2792         qib_write_kreg(dd, kr_rcvctrl, dd->rcvctrl);
2793         if ((op & QIB_RCVCTRL_INTRAVAIL_ENB) && dd->rhdrhead_intr_off) {
2794                 /* arm rcv interrupt */
2795                 val = qib_read_ureg32(dd, ur_rcvhdrhead, ctxt) |
2796                         dd->rhdrhead_intr_off;
2797                 qib_write_ureg(dd, ur_rcvhdrhead, val, ctxt);
2798         }
2799         if (op & QIB_RCVCTRL_CTXT_ENB) {
2800                 /*
2801                  * Init the context registers also; if we were
2802                  * disabled, tail and head should both be zero
2803                  * already from the enable, but since we don't
2804                  * know, we have to do it explicitly.
2805                  */
2806                 val = qib_read_ureg32(dd, ur_rcvegrindextail, ctxt);
2807                 qib_write_ureg(dd, ur_rcvegrindexhead, val, ctxt);
2808
2809                 val = qib_read_ureg32(dd, ur_rcvhdrtail, ctxt);
2810                 dd->rcd[ctxt]->head = val;
2811                 /* If kctxt, interrupt on next receive. */
2812                 if (ctxt < dd->first_user_ctxt)
2813                         val |= dd->rhdrhead_intr_off;
2814                 qib_write_ureg(dd, ur_rcvhdrhead, val, ctxt);
2815         }
2816         if (op & QIB_RCVCTRL_CTXT_DIS) {
2817                 if (ctxt >= 0) {
2818                         qib_write_kreg_ctxt(dd, kr_rcvhdrtailaddr, ctxt, 0);
2819                         qib_write_kreg_ctxt(dd, kr_rcvhdraddr, ctxt, 0);
2820                 } else {
2821                         unsigned i;
2822
2823                         for (i = 0; i < dd->cfgctxts; i++) {
2824                                 qib_write_kreg_ctxt(dd, kr_rcvhdrtailaddr,
2825                                                     i, 0);
2826                                 qib_write_kreg_ctxt(dd, kr_rcvhdraddr, i, 0);
2827                         }
2828                 }
2829         }
2830         spin_unlock_irqrestore(&dd->cspec->rcvmod_lock, flags);
2831 }
2832
2833 /*
2834  * Modify the SENDCTRL register in chip-specific way. This
2835  * is a function there may be multiple such registers with
2836  * slightly different layouts. To start, we assume the
2837  * "canonical" register layout of the first chips.
2838  * Chip requires no back-back sendctrl writes, so write
2839  * scratch register after writing sendctrl
2840  */
2841 static void sendctrl_7220_mod(struct qib_pportdata *ppd, u32 op)
2842 {
2843         struct qib_devdata *dd = ppd->dd;
2844         u64 tmp_dd_sendctrl;
2845         unsigned long flags;
2846
2847         spin_lock_irqsave(&dd->sendctrl_lock, flags);
2848
2849         /* First the ones that are "sticky", saved in shadow */
2850         if (op & QIB_SENDCTRL_CLEAR)
2851                 dd->sendctrl = 0;
2852         if (op & QIB_SENDCTRL_SEND_DIS)
2853                 dd->sendctrl &= ~SYM_MASK(SendCtrl, SPioEnable);
2854         else if (op & QIB_SENDCTRL_SEND_ENB) {
2855                 dd->sendctrl |= SYM_MASK(SendCtrl, SPioEnable);
2856                 if (dd->flags & QIB_USE_SPCL_TRIG)
2857                         dd->sendctrl |= SYM_MASK(SendCtrl,
2858                                                  SSpecialTriggerEn);
2859         }
2860         if (op & QIB_SENDCTRL_AVAIL_DIS)
2861                 dd->sendctrl &= ~SYM_MASK(SendCtrl, SendBufAvailUpd);
2862         else if (op & QIB_SENDCTRL_AVAIL_ENB)
2863                 dd->sendctrl |= SYM_MASK(SendCtrl, SendBufAvailUpd);
2864
2865         if (op & QIB_SENDCTRL_DISARM_ALL) {
2866                 u32 i, last;
2867
2868                 tmp_dd_sendctrl = dd->sendctrl;
2869                 /*
2870                  * disarm any that are not yet launched, disabling sends
2871                  * and updates until done.
2872                  */
2873                 last = dd->piobcnt2k + dd->piobcnt4k;
2874                 tmp_dd_sendctrl &=
2875                         ~(SYM_MASK(SendCtrl, SPioEnable) |
2876                           SYM_MASK(SendCtrl, SendBufAvailUpd));
2877                 for (i = 0; i < last; i++) {
2878                         qib_write_kreg(dd, kr_sendctrl,
2879                                        tmp_dd_sendctrl |
2880                                        SYM_MASK(SendCtrl, Disarm) | i);
2881                         qib_write_kreg(dd, kr_scratch, 0);
2882                 }
2883         }
2884
2885         tmp_dd_sendctrl = dd->sendctrl;
2886
2887         if (op & QIB_SENDCTRL_FLUSH)
2888                 tmp_dd_sendctrl |= SYM_MASK(SendCtrl, Abort);
2889         if (op & QIB_SENDCTRL_DISARM)
2890                 tmp_dd_sendctrl |= SYM_MASK(SendCtrl, Disarm) |
2891                         ((op & QIB_7220_SendCtrl_DisarmPIOBuf_RMASK) <<
2892                          SYM_LSB(SendCtrl, DisarmPIOBuf));
2893         if ((op & QIB_SENDCTRL_AVAIL_BLIP) &&
2894             (dd->sendctrl & SYM_MASK(SendCtrl, SendBufAvailUpd)))
2895                 tmp_dd_sendctrl &= ~SYM_MASK(SendCtrl, SendBufAvailUpd);
2896
2897         qib_write_kreg(dd, kr_sendctrl, tmp_dd_sendctrl);
2898         qib_write_kreg(dd, kr_scratch, 0);
2899
2900         if (op & QIB_SENDCTRL_AVAIL_BLIP) {
2901                 qib_write_kreg(dd, kr_sendctrl, dd->sendctrl);
2902                 qib_write_kreg(dd, kr_scratch, 0);
2903         }
2904
2905         spin_unlock_irqrestore(&dd->sendctrl_lock, flags);
2906
2907         if (op & QIB_SENDCTRL_FLUSH) {
2908                 u32 v;
2909                 /*
2910                  * ensure writes have hit chip, then do a few
2911                  * more reads, to allow DMA of pioavail registers
2912                  * to occur, so in-memory copy is in sync with
2913                  * the chip.  Not always safe to sleep.
2914                  */
2915                 v = qib_read_kreg32(dd, kr_scratch);
2916                 qib_write_kreg(dd, kr_scratch, v);
2917                 v = qib_read_kreg32(dd, kr_scratch);
2918                 qib_write_kreg(dd, kr_scratch, v);
2919                 qib_read_kreg32(dd, kr_scratch);
2920         }
2921 }
2922
2923 /**
2924  * qib_portcntr_7220 - read a per-port counter
2925  * @dd: the qlogic_ib device
2926  * @creg: the counter to snapshot
2927  */
2928 static u64 qib_portcntr_7220(struct qib_pportdata *ppd, u32 reg)
2929 {
2930         u64 ret = 0ULL;
2931         struct qib_devdata *dd = ppd->dd;
2932         u16 creg;
2933         /* 0xffff for unimplemented or synthesized counters */
2934         static const u16 xlator[] = {
2935                 [QIBPORTCNTR_PKTSEND] = cr_pktsend,
2936                 [QIBPORTCNTR_WORDSEND] = cr_wordsend,
2937                 [QIBPORTCNTR_PSXMITDATA] = cr_psxmitdatacount,
2938                 [QIBPORTCNTR_PSXMITPKTS] = cr_psxmitpktscount,
2939                 [QIBPORTCNTR_PSXMITWAIT] = cr_psxmitwaitcount,
2940                 [QIBPORTCNTR_SENDSTALL] = cr_sendstall,
2941                 [QIBPORTCNTR_PKTRCV] = cr_pktrcv,
2942                 [QIBPORTCNTR_PSRCVDATA] = cr_psrcvdatacount,
2943                 [QIBPORTCNTR_PSRCVPKTS] = cr_psrcvpktscount,
2944                 [QIBPORTCNTR_RCVEBP] = cr_rcvebp,
2945                 [QIBPORTCNTR_RCVOVFL] = cr_rcvovfl,
2946                 [QIBPORTCNTR_WORDRCV] = cr_wordrcv,
2947                 [QIBPORTCNTR_RXDROPPKT] = cr_rxdroppkt,
2948                 [QIBPORTCNTR_RXLOCALPHYERR] = cr_rxotherlocalphyerr,
2949                 [QIBPORTCNTR_RXVLERR] = cr_rxvlerr,
2950                 [QIBPORTCNTR_ERRICRC] = cr_erricrc,
2951                 [QIBPORTCNTR_ERRVCRC] = cr_errvcrc,
2952                 [QIBPORTCNTR_ERRLPCRC] = cr_errlpcrc,
2953                 [QIBPORTCNTR_BADFORMAT] = cr_badformat,
2954                 [QIBPORTCNTR_ERR_RLEN] = cr_err_rlen,
2955                 [QIBPORTCNTR_IBSYMBOLERR] = cr_ibsymbolerr,
2956                 [QIBPORTCNTR_INVALIDRLEN] = cr_invalidrlen,
2957                 [QIBPORTCNTR_UNSUPVL] = cr_txunsupvl,
2958                 [QIBPORTCNTR_EXCESSBUFOVFL] = cr_excessbufferovfl,
2959                 [QIBPORTCNTR_ERRLINK] = cr_errlink,
2960                 [QIBPORTCNTR_IBLINKDOWN] = cr_iblinkdown,
2961                 [QIBPORTCNTR_IBLINKERRRECOV] = cr_iblinkerrrecov,
2962                 [QIBPORTCNTR_LLI] = cr_locallinkintegrityerr,
2963                 [QIBPORTCNTR_PSINTERVAL] = cr_psinterval,
2964                 [QIBPORTCNTR_PSSTART] = cr_psstart,
2965                 [QIBPORTCNTR_PSSTAT] = cr_psstat,
2966                 [QIBPORTCNTR_VL15PKTDROP] = cr_vl15droppedpkt,
2967                 [QIBPORTCNTR_ERRPKEY] = cr_errpkey,
2968                 [QIBPORTCNTR_KHDROVFL] = 0xffff,
2969         };
2970
2971         if (reg >= ARRAY_SIZE(xlator)) {
2972                 qib_devinfo(ppd->dd->pcidev,
2973                          "Unimplemented portcounter %u\n", reg);
2974                 goto done;
2975         }
2976         creg = xlator[reg];
2977
2978         if (reg == QIBPORTCNTR_KHDROVFL) {
2979                 int i;
2980
2981                 /* sum over all kernel contexts */
2982                 for (i = 0; i < dd->first_user_ctxt; i++)
2983                         ret += read_7220_creg32(dd, cr_portovfl + i);
2984         }
2985         if (creg == 0xffff)
2986                 goto done;
2987
2988         /*
2989          * only fast incrementing counters are 64bit; use 32 bit reads to
2990          * avoid two independent reads when on opteron
2991          */
2992         if ((creg == cr_wordsend || creg == cr_wordrcv ||
2993              creg == cr_pktsend || creg == cr_pktrcv))
2994                 ret = read_7220_creg(dd, creg);
2995         else
2996                 ret = read_7220_creg32(dd, creg);
2997         if (creg == cr_ibsymbolerr) {
2998                 if (dd->pport->cpspec->ibdeltainprog)
2999                         ret -= ret - ppd->cpspec->ibsymsnap;
3000                 ret -= dd->pport->cpspec->ibsymdelta;
3001         } else if (creg == cr_iblinkerrrecov) {
3002                 if (dd->pport->cpspec->ibdeltainprog)
3003                         ret -= ret - ppd->cpspec->iblnkerrsnap;
3004                 ret -= dd->pport->cpspec->iblnkerrdelta;
3005         }
3006 done:
3007         return ret;
3008 }
3009
3010 /*
3011  * Device counter names (not port-specific), one line per stat,
3012  * single string.  Used by utilities like ipathstats to print the stats
3013  * in a way which works for different versions of drivers, without changing
3014  * the utility.  Names need to be 12 chars or less (w/o newline), for proper
3015  * display by utility.
3016  * Non-error counters are first.
3017  * Start of "error" conters is indicated by a leading "E " on the first
3018  * "error" counter, and doesn't count in label length.
3019  * The EgrOvfl list needs to be last so we truncate them at the configured
3020  * context count for the device.
3021  * cntr7220indices contains the corresponding register indices.
3022  */
3023 static const char cntr7220names[] =
3024         "Interrupts\n"
3025         "HostBusStall\n"
3026         "E RxTIDFull\n"
3027         "RxTIDInvalid\n"
3028         "Ctxt0EgrOvfl\n"
3029         "Ctxt1EgrOvfl\n"
3030         "Ctxt2EgrOvfl\n"
3031         "Ctxt3EgrOvfl\n"
3032         "Ctxt4EgrOvfl\n"
3033         "Ctxt5EgrOvfl\n"
3034         "Ctxt6EgrOvfl\n"
3035         "Ctxt7EgrOvfl\n"
3036         "Ctxt8EgrOvfl\n"
3037         "Ctxt9EgrOvfl\n"
3038         "Ctx10EgrOvfl\n"
3039         "Ctx11EgrOvfl\n"
3040         "Ctx12EgrOvfl\n"
3041         "Ctx13EgrOvfl\n"
3042         "Ctx14EgrOvfl\n"
3043         "Ctx15EgrOvfl\n"
3044         "Ctx16EgrOvfl\n";
3045
3046 static const size_t cntr7220indices[] = {
3047         cr_lbint,
3048         cr_lbflowstall,
3049         cr_errtidfull,
3050         cr_errtidvalid,
3051         cr_portovfl + 0,
3052         cr_portovfl + 1,
3053         cr_portovfl + 2,
3054         cr_portovfl + 3,
3055         cr_portovfl + 4,
3056         cr_portovfl + 5,
3057         cr_portovfl + 6,
3058         cr_portovfl + 7,
3059         cr_portovfl + 8,
3060         cr_portovfl + 9,
3061         cr_portovfl + 10,
3062         cr_portovfl + 11,
3063         cr_portovfl + 12,
3064         cr_portovfl + 13,
3065         cr_portovfl + 14,
3066         cr_portovfl + 15,
3067         cr_portovfl + 16,
3068 };
3069
3070 /*
3071  * same as cntr7220names and cntr7220indices, but for port-specific counters.
3072  * portcntr7220indices is somewhat complicated by some registers needing
3073  * adjustments of various kinds, and those are ORed with _PORT_VIRT_FLAG
3074  */
3075 static const char portcntr7220names[] =
3076         "TxPkt\n"
3077         "TxFlowPkt\n"
3078         "TxWords\n"
3079         "RxPkt\n"
3080         "RxFlowPkt\n"
3081         "RxWords\n"
3082         "TxFlowStall\n"
3083         "TxDmaDesc\n"  /* 7220 and 7322-only */
3084         "E RxDlidFltr\n"  /* 7220 and 7322-only */
3085         "IBStatusChng\n"
3086         "IBLinkDown\n"
3087         "IBLnkRecov\n"
3088         "IBRxLinkErr\n"
3089         "IBSymbolErr\n"
3090         "RxLLIErr\n"
3091         "RxBadFormat\n"
3092         "RxBadLen\n"
3093         "RxBufOvrfl\n"
3094         "RxEBP\n"
3095         "RxFlowCtlErr\n"
3096         "RxICRCerr\n"
3097         "RxLPCRCerr\n"
3098         "RxVCRCerr\n"
3099         "RxInvalLen\n"
3100         "RxInvalPKey\n"
3101         "RxPktDropped\n"
3102         "TxBadLength\n"
3103         "TxDropped\n"
3104         "TxInvalLen\n"
3105         "TxUnderrun\n"
3106         "TxUnsupVL\n"
3107         "RxLclPhyErr\n" /* 7220 and 7322-only */
3108         "RxVL15Drop\n" /* 7220 and 7322-only */
3109         "RxVlErr\n" /* 7220 and 7322-only */
3110         "XcessBufOvfl\n" /* 7220 and 7322-only */
3111         ;
3112
3113 #define _PORT_VIRT_FLAG 0x8000 /* "virtual", need adjustments */
3114 static const size_t portcntr7220indices[] = {
3115         QIBPORTCNTR_PKTSEND | _PORT_VIRT_FLAG,
3116         cr_pktsendflow,
3117         QIBPORTCNTR_WORDSEND | _PORT_VIRT_FLAG,
3118         QIBPORTCNTR_PKTRCV | _PORT_VIRT_FLAG,
3119         cr_pktrcvflowctrl,
3120         QIBPORTCNTR_WORDRCV | _PORT_VIRT_FLAG,
3121         QIBPORTCNTR_SENDSTALL | _PORT_VIRT_FLAG,
3122         cr_txsdmadesc,
3123         cr_rxdlidfltr,
3124         cr_ibstatuschange,
3125         QIBPORTCNTR_IBLINKDOWN | _PORT_VIRT_FLAG,
3126         QIBPORTCNTR_IBLINKERRRECOV | _PORT_VIRT_FLAG,
3127         QIBPORTCNTR_ERRLINK | _PORT_VIRT_FLAG,
3128         QIBPORTCNTR_IBSYMBOLERR | _PORT_VIRT_FLAG,
3129         QIBPORTCNTR_LLI | _PORT_VIRT_FLAG,
3130         QIBPORTCNTR_BADFORMAT | _PORT_VIRT_FLAG,
3131         QIBPORTCNTR_ERR_RLEN | _PORT_VIRT_FLAG,
3132         QIBPORTCNTR_RCVOVFL | _PORT_VIRT_FLAG,
3133         QIBPORTCNTR_RCVEBP | _PORT_VIRT_FLAG,
3134         cr_rcvflowctrl_err,
3135         QIBPORTCNTR_ERRICRC | _PORT_VIRT_FLAG,
3136         QIBPORTCNTR_ERRLPCRC | _PORT_VIRT_FLAG,
3137         QIBPORTCNTR_ERRVCRC | _PORT_VIRT_FLAG,
3138         QIBPORTCNTR_INVALIDRLEN | _PORT_VIRT_FLAG,
3139         QIBPORTCNTR_ERRPKEY | _PORT_VIRT_FLAG,
3140         QIBPORTCNTR_RXDROPPKT | _PORT_VIRT_FLAG,
3141         cr_invalidslen,
3142         cr_senddropped,
3143         cr_errslen,
3144         cr_sendunderrun,
3145         cr_txunsupvl,
3146         QIBPORTCNTR_RXLOCALPHYERR | _PORT_VIRT_FLAG,
3147         QIBPORTCNTR_VL15PKTDROP | _PORT_VIRT_FLAG,
3148         QIBPORTCNTR_RXVLERR | _PORT_VIRT_FLAG,
3149         QIBPORTCNTR_EXCESSBUFOVFL | _PORT_VIRT_FLAG,
3150 };
3151
3152 /* do all the setup to make the counter reads efficient later */
3153 static void init_7220_cntrnames(struct qib_devdata *dd)
3154 {
3155         int i, j = 0;
3156         char *s;
3157
3158         for (i = 0, s = (char *)cntr7220names; s && j <= dd->cfgctxts;
3159              i++) {
3160                 /* we always have at least one counter before the egrovfl */
3161                 if (!j && !strncmp("Ctxt0EgrOvfl", s + 1, 12))
3162                         j = 1;
3163                 s = strchr(s + 1, '\n');
3164                 if (s && j)
3165                         j++;
3166         }
3167         dd->cspec->ncntrs = i;
3168         if (!s)
3169                 /* full list; size is without terminating null */
3170                 dd->cspec->cntrnamelen = sizeof(cntr7220names) - 1;
3171         else
3172                 dd->cspec->cntrnamelen = 1 + s - cntr7220names;
3173         dd->cspec->cntrs = kmalloc(dd->cspec->ncntrs
3174                 * sizeof(u64), GFP_KERNEL);
3175
3176         for (i = 0, s = (char *)portcntr7220names; s; i++)
3177                 s = strchr(s + 1, '\n');
3178         dd->cspec->nportcntrs = i - 1;
3179         dd->cspec->portcntrnamelen = sizeof(portcntr7220names) - 1;
3180         dd->cspec->portcntrs = kmalloc(dd->cspec->nportcntrs
3181                 * sizeof(u64), GFP_KERNEL);
3182 }
3183
3184 static u32 qib_read_7220cntrs(struct qib_devdata *dd, loff_t pos, char **namep,
3185                               u64 **cntrp)
3186 {
3187         u32 ret;
3188
3189         if (!dd->cspec->cntrs) {
3190                 ret = 0;
3191                 goto done;
3192         }
3193
3194         if (namep) {
3195                 *namep = (char *)cntr7220names;
3196                 ret = dd->cspec->cntrnamelen;
3197                 if (pos >= ret)
3198                         ret = 0; /* final read after getting everything */
3199         } else {
3200                 u64 *cntr = dd->cspec->cntrs;
3201                 int i;
3202
3203                 ret = dd->cspec->ncntrs * sizeof(u64);
3204                 if (!cntr || pos >= ret) {
3205                         /* everything read, or couldn't get memory */
3206                         ret = 0;
3207                         goto done;
3208                 }
3209
3210                 *cntrp = cntr;
3211                 for (i = 0; i < dd->cspec->ncntrs; i++)
3212                         *cntr++ = read_7220_creg32(dd, cntr7220indices[i]);
3213         }
3214 done:
3215         return ret;
3216 }
3217
3218 static u32 qib_read_7220portcntrs(struct qib_devdata *dd, loff_t pos, u32 port,
3219                                   char **namep, u64 **cntrp)
3220 {
3221         u32 ret;
3222
3223         if (!dd->cspec->portcntrs) {
3224                 ret = 0;
3225                 goto done;
3226         }
3227         if (namep) {
3228                 *namep = (char *)portcntr7220names;
3229                 ret = dd->cspec->portcntrnamelen;
3230                 if (pos >= ret)
3231                         ret = 0; /* final read after getting everything */
3232         } else {
3233                 u64 *cntr = dd->cspec->portcntrs;
3234                 struct qib_pportdata *ppd = &dd->pport[port];
3235                 int i;
3236
3237                 ret = dd->cspec->nportcntrs * sizeof(u64);
3238                 if (!cntr || pos >= ret) {
3239                         /* everything read, or couldn't get memory */
3240                         ret = 0;
3241                         goto done;
3242                 }
3243                 *cntrp = cntr;
3244                 for (i = 0; i < dd->cspec->nportcntrs; i++) {
3245                         if (portcntr7220indices[i] & _PORT_VIRT_FLAG)
3246                                 *cntr++ = qib_portcntr_7220(ppd,
3247                                         portcntr7220indices[i] &
3248                                         ~_PORT_VIRT_FLAG);
3249                         else
3250                                 *cntr++ = read_7220_creg32(dd,
3251                                            portcntr7220indices[i]);
3252                 }
3253         }
3254 done:
3255         return ret;
3256 }
3257
3258 /**
3259  * qib_get_7220_faststats - get word counters from chip before they overflow
3260  * @opaque - contains a pointer to the qlogic_ib device qib_devdata
3261  *
3262  * This needs more work; in particular, decision on whether we really
3263  * need traffic_wds done the way it is
3264  * called from add_timer
3265  */
3266 static void qib_get_7220_faststats(unsigned long opaque)
3267 {
3268         struct qib_devdata *dd = (struct qib_devdata *) opaque;
3269         struct qib_pportdata *ppd = dd->pport;
3270         unsigned long flags;
3271         u64 traffic_wds;
3272
3273         /*
3274          * don't access the chip while running diags, or memory diags can
3275          * fail
3276          */
3277         if (!(dd->flags & QIB_INITTED) || dd->diag_client)
3278                 /* but re-arm the timer, for diags case; won't hurt other */
3279                 goto done;
3280
3281         /*
3282          * We now try to maintain an activity timer, based on traffic
3283          * exceeding a threshold, so we need to check the word-counts
3284          * even if they are 64-bit.
3285          */
3286         traffic_wds = qib_portcntr_7220(ppd, cr_wordsend) +
3287                 qib_portcntr_7220(ppd, cr_wordrcv);
3288         spin_lock_irqsave(&dd->eep_st_lock, flags);
3289         traffic_wds -= dd->traffic_wds;
3290         dd->traffic_wds += traffic_wds;
3291         spin_unlock_irqrestore(&dd->eep_st_lock, flags);
3292 done:
3293         mod_timer(&dd->stats_timer, jiffies + HZ * ACTIVITY_TIMER);
3294 }
3295
3296 /*
3297  * If we are using MSI, try to fallback to INTx.
3298  */
3299 static int qib_7220_intr_fallback(struct qib_devdata *dd)
3300 {
3301         if (!dd->msi_lo)
3302                 return 0;
3303
3304         qib_devinfo(dd->pcidev,
3305                 "MSI interrupt not detected, trying INTx interrupts\n");
3306         qib_7220_free_irq(dd);
3307         qib_enable_intx(dd);
3308         /*
3309          * Some newer kernels require free_irq before disable_msi,
3310          * and irq can be changed during disable and INTx enable
3311          * and we need to therefore use the pcidev->irq value,
3312          * not our saved MSI value.
3313          */
3314         dd->cspec->irq = dd->pcidev->irq;
3315         qib_setup_7220_interrupt(dd);
3316         return 1;
3317 }
3318
3319 /*
3320  * Reset the XGXS (between serdes and IBC).  Slightly less intrusive
3321  * than resetting the IBC or external link state, and useful in some
3322  * cases to cause some retraining.  To do this right, we reset IBC
3323  * as well.
3324  */
3325 static void qib_7220_xgxs_reset(struct qib_pportdata *ppd)
3326 {
3327         u64 val, prev_val;
3328         struct qib_devdata *dd = ppd->dd;
3329
3330         prev_val = qib_read_kreg64(dd, kr_xgxs_cfg);
3331         val = prev_val | QLOGIC_IB_XGXS_RESET;
3332         prev_val &= ~QLOGIC_IB_XGXS_RESET; /* be sure */
3333         qib_write_kreg(dd, kr_control,
3334                        dd->control & ~QLOGIC_IB_C_LINKENABLE);
3335         qib_write_kreg(dd, kr_xgxs_cfg, val);
3336         qib_read_kreg32(dd, kr_scratch);
3337         qib_write_kreg(dd, kr_xgxs_cfg, prev_val);
3338         qib_write_kreg(dd, kr_control, dd->control);
3339 }
3340
3341 /*
3342  * For this chip, we want to use the same buffer every time
3343  * when we are trying to bring the link up (they are always VL15
3344  * packets).  At that link state the packet should always go out immediately
3345  * (or at least be discarded at the tx interface if the link is down).
3346  * If it doesn't, and the buffer isn't available, that means some other
3347  * sender has gotten ahead of us, and is preventing our packet from going
3348  * out.  In that case, we flush all packets, and try again.  If that still
3349  * fails, we fail the request, and hope things work the next time around.
3350  *
3351  * We don't need very complicated heuristics on whether the packet had
3352  * time to go out or not, since even at SDR 1X, it goes out in very short
3353  * time periods, covered by the chip reads done here and as part of the
3354  * flush.
3355  */
3356 static u32 __iomem *get_7220_link_buf(struct qib_pportdata *ppd, u32 *bnum)
3357 {
3358         u32 __iomem *buf;
3359         u32 lbuf = ppd->dd->cspec->lastbuf_for_pio;
3360         int do_cleanup;
3361         unsigned long flags;
3362
3363         /*
3364          * always blip to get avail list updated, since it's almost
3365          * always needed, and is fairly cheap.
3366          */
3367         sendctrl_7220_mod(ppd->dd->pport, QIB_SENDCTRL_AVAIL_BLIP);
3368         qib_read_kreg64(ppd->dd, kr_scratch); /* extra chip flush */
3369         buf = qib_getsendbuf_range(ppd->dd, bnum, lbuf, lbuf);
3370         if (buf)
3371                 goto done;
3372
3373         spin_lock_irqsave(&ppd->sdma_lock, flags);
3374         if (ppd->sdma_state.current_state == qib_sdma_state_s20_idle &&
3375             ppd->sdma_state.current_state != qib_sdma_state_s00_hw_down) {
3376                 __qib_sdma_process_event(ppd, qib_sdma_event_e00_go_hw_down);
3377                 do_cleanup = 0;
3378         } else {
3379                 do_cleanup = 1;
3380                 qib_7220_sdma_hw_clean_up(ppd);
3381         }
3382         spin_unlock_irqrestore(&ppd->sdma_lock, flags);
3383
3384         if (do_cleanup) {
3385                 qib_read_kreg64(ppd->dd, kr_scratch); /* extra chip flush */
3386                 buf = qib_getsendbuf_range(ppd->dd, bnum, lbuf, lbuf);
3387         }
3388 done:
3389         return buf;
3390 }
3391
3392 /*
3393  * This code for non-IBTA-compliant IB speed negotiation is only known to
3394  * work for the SDR to DDR transition, and only between an HCA and a switch
3395  * with recent firmware.  It is based on observed heuristics, rather than
3396  * actual knowledge of the non-compliant speed negotiation.
3397  * It has a number of hard-coded fields, since the hope is to rewrite this
3398  * when a spec is available on how the negoation is intended to work.
3399  */
3400 static void autoneg_7220_sendpkt(struct qib_pportdata *ppd, u32 *hdr,
3401                                  u32 dcnt, u32 *data)
3402 {
3403         int i;
3404         u64 pbc;
3405         u32 __iomem *piobuf;
3406         u32 pnum;
3407         struct qib_devdata *dd = ppd->dd;
3408
3409         i = 0;
3410         pbc = 7 + dcnt + 1; /* 7 dword header, dword data, icrc */
3411         pbc |= PBC_7220_VL15_SEND;
3412         while (!(piobuf = get_7220_link_buf(ppd, &pnum))) {
3413                 if (i++ > 5)
3414                         return;
3415                 udelay(2);
3416         }
3417         sendctrl_7220_mod(dd->pport, QIB_SENDCTRL_DISARM_BUF(pnum));
3418         writeq(pbc, piobuf);
3419         qib_flush_wc();
3420         qib_pio_copy(piobuf + 2, hdr, 7);
3421         qib_pio_copy(piobuf + 9, data, dcnt);
3422         if (dd->flags & QIB_USE_SPCL_TRIG) {
3423                 u32 spcl_off = (pnum >= dd->piobcnt2k) ? 2047 : 1023;
3424
3425                 qib_flush_wc();
3426                 __raw_writel(0xaebecede, piobuf + spcl_off);
3427         }
3428         qib_flush_wc();
3429         qib_sendbuf_done(dd, pnum);
3430 }
3431
3432 /*
3433  * _start packet gets sent twice at start, _done gets sent twice at end
3434  */
3435 static void autoneg_7220_send(struct qib_pportdata *ppd, int which)
3436 {
3437         struct qib_devdata *dd = ppd->dd;
3438         static u32 swapped;
3439         u32 dw, i, hcnt, dcnt, *data;
3440         static u32 hdr[7] = { 0xf002ffff, 0x48ffff, 0x6400abba };
3441         static u32 madpayload_start[0x40] = {
3442                 0x1810103, 0x1, 0x0, 0x0, 0x2c90000, 0x2c9, 0x0, 0x0,
3443                 0xffffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
3444                 0x1, 0x1388, 0x15e, 0x1, /* rest 0's */
3445                 };
3446         static u32 madpayload_done[0x40] = {
3447                 0x1810103, 0x1, 0x0, 0x0, 0x2c90000, 0x2c9, 0x0, 0x0,
3448                 0xffffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
3449                 0x40000001, 0x1388, 0x15e, /* rest 0's */
3450                 };
3451
3452         dcnt = ARRAY_SIZE(madpayload_start);
3453         hcnt = ARRAY_SIZE(hdr);
3454         if (!swapped) {
3455                 /* for maintainability, do it at runtime */
3456                 for (i = 0; i < hcnt; i++) {
3457                         dw = (__force u32) cpu_to_be32(hdr[i]);
3458                         hdr[i] = dw;
3459                 }
3460                 for (i = 0; i < dcnt; i++) {
3461                         dw = (__force u32) cpu_to_be32(madpayload_start[i]);
3462                         madpayload_start[i] = dw;
3463                         dw = (__force u32) cpu_to_be32(madpayload_done[i]);
3464                         madpayload_done[i] = dw;
3465                 }
3466                 swapped = 1;
3467         }
3468
3469         data = which ? madpayload_done : madpayload_start;
3470
3471         autoneg_7220_sendpkt(ppd, hdr, dcnt, data);
3472         qib_read_kreg64(dd, kr_scratch);
3473         udelay(2);
3474         autoneg_7220_sendpkt(ppd, hdr, dcnt, data);
3475         qib_read_kreg64(dd, kr_scratch);
3476         udelay(2);
3477 }
3478
3479 /*
3480  * Do the absolute minimum to cause an IB speed change, and make it
3481  * ready, but don't actually trigger the change.   The caller will
3482  * do that when ready (if link is in Polling training state, it will
3483  * happen immediately, otherwise when link next goes down)
3484  *
3485  * This routine should only be used as part of the DDR autonegotation
3486  * code for devices that are not compliant with IB 1.2 (or code that
3487  * fixes things up for same).
3488  *
3489  * When link has gone down, and autoneg enabled, or autoneg has
3490  * failed and we give up until next time we set both speeds, and
3491  * then we want IBTA enabled as well as "use max enabled speed.
3492  */
3493 static void set_7220_ibspeed_fast(struct qib_pportdata *ppd, u32 speed)
3494 {
3495         ppd->cpspec->ibcddrctrl &= ~(IBA7220_IBC_SPEED_AUTONEG_MASK |
3496                 IBA7220_IBC_IBTA_1_2_MASK);
3497
3498         if (speed == (QIB_IB_SDR | QIB_IB_DDR))
3499                 ppd->cpspec->ibcddrctrl |= IBA7220_IBC_SPEED_AUTONEG_MASK |
3500                         IBA7220_IBC_IBTA_1_2_MASK;
3501         else
3502                 ppd->cpspec->ibcddrctrl |= speed == QIB_IB_DDR ?
3503                         IBA7220_IBC_SPEED_DDR : IBA7220_IBC_SPEED_SDR;
3504
3505         qib_write_kreg(ppd->dd, kr_ibcddrctrl, ppd->cpspec->ibcddrctrl);
3506         qib_write_kreg(ppd->dd, kr_scratch, 0);
3507 }
3508
3509 /*
3510  * This routine is only used when we are not talking to another
3511  * IB 1.2-compliant device that we think can do DDR.
3512  * (This includes all existing switch chips as of Oct 2007.)
3513  * 1.2-compliant devices go directly to DDR prior to reaching INIT
3514  */
3515 static void try_7220_autoneg(struct qib_pportdata *ppd)
3516 {
3517         unsigned long flags;
3518
3519         /*
3520          * Required for older non-IB1.2 DDR switches.  Newer
3521          * non-IB-compliant switches don't need it, but so far,
3522          * aren't bothered by it either.  "Magic constant"
3523          */
3524         qib_write_kreg(ppd->dd, kr_ncmodectrl, 0x3b9dc07);
3525
3526         spin_lock_irqsave(&ppd->lflags_lock, flags);
3527         ppd->lflags |= QIBL_IB_AUTONEG_INPROG;
3528         spin_unlock_irqrestore(&ppd->lflags_lock, flags);
3529         autoneg_7220_send(ppd, 0);
3530         set_7220_ibspeed_fast(ppd, QIB_IB_DDR);
3531
3532         toggle_7220_rclkrls(ppd->dd);
3533         /* 2 msec is minimum length of a poll cycle */
3534         queue_delayed_work(ib_wq, &ppd->cpspec->autoneg_work,
3535                            msecs_to_jiffies(2));
3536 }
3537
3538 /*
3539  * Handle the empirically determined mechanism for auto-negotiation
3540  * of DDR speed with switches.
3541  */
3542 static void autoneg_7220_work(struct work_struct *work)
3543 {
3544         struct qib_pportdata *ppd;
3545         struct qib_devdata *dd;
3546         u64 startms;
3547         u32 i;
3548         unsigned long flags;
3549
3550         ppd = &container_of(work, struct qib_chippport_specific,
3551                             autoneg_work.work)->pportdata;
3552         dd = ppd->dd;
3553
3554         startms = jiffies_to_msecs(jiffies);
3555
3556         /*
3557          * Busy wait for this first part, it should be at most a
3558          * few hundred usec, since we scheduled ourselves for 2msec.
3559          */
3560         for (i = 0; i < 25; i++) {
3561                 if (SYM_FIELD(ppd->lastibcstat, IBCStatus, LinkTrainingState)
3562                      == IB_7220_LT_STATE_POLLQUIET) {
3563                         qib_set_linkstate(ppd, QIB_IB_LINKDOWN_DISABLE);
3564                         break;
3565                 }
3566                 udelay(100);
3567         }
3568
3569         if (!(ppd->lflags & QIBL_IB_AUTONEG_INPROG))
3570                 goto done; /* we got there early or told to stop */
3571
3572         /* we expect this to timeout */
3573         if (wait_event_timeout(ppd->cpspec->autoneg_wait,
3574                                !(ppd->lflags & QIBL_IB_AUTONEG_INPROG),
3575                                msecs_to_jiffies(90)))
3576                 goto done;
3577
3578         toggle_7220_rclkrls(dd);
3579
3580         /* we expect this to timeout */
3581         if (wait_event_timeout(ppd->cpspec->autoneg_wait,
3582                                !(ppd->lflags & QIBL_IB_AUTONEG_INPROG),
3583                                msecs_to_jiffies(1700)))
3584                 goto done;
3585
3586         set_7220_ibspeed_fast(ppd, QIB_IB_SDR);
3587         toggle_7220_rclkrls(dd);
3588
3589         /*
3590          * Wait up to 250 msec for link to train and get to INIT at DDR;
3591          * this should terminate early.
3592          */
3593         wait_event_timeout(ppd->cpspec->autoneg_wait,
3594                 !(ppd->lflags & QIBL_IB_AUTONEG_INPROG),
3595                 msecs_to_jiffies(250));
3596 done:
3597         if (ppd->lflags & QIBL_IB_AUTONEG_INPROG) {
3598                 spin_lock_irqsave(&ppd->lflags_lock, flags);
3599                 ppd->lflags &= ~QIBL_IB_AUTONEG_INPROG;
3600                 if (dd->cspec->autoneg_tries == AUTONEG_TRIES) {
3601                         ppd->lflags |= QIBL_IB_AUTONEG_FAILED;
3602                         dd->cspec->autoneg_tries = 0;
3603                 }
3604                 spin_unlock_irqrestore(&ppd->lflags_lock, flags);
3605                 set_7220_ibspeed_fast(ppd, ppd->link_speed_enabled);
3606         }
3607 }
3608
3609 static u32 qib_7220_iblink_state(u64 ibcs)
3610 {
3611         u32 state = (u32)SYM_FIELD(ibcs, IBCStatus, LinkState);
3612
3613         switch (state) {
3614         case IB_7220_L_STATE_INIT:
3615                 state = IB_PORT_INIT;
3616                 break;
3617         case IB_7220_L_STATE_ARM:
3618                 state = IB_PORT_ARMED;
3619                 break;
3620         case IB_7220_L_STATE_ACTIVE:
3621                 /* fall through */
3622         case IB_7220_L_STATE_ACT_DEFER:
3623                 state = IB_PORT_ACTIVE;
3624                 break;
3625         default: /* fall through */
3626         case IB_7220_L_STATE_DOWN:
3627                 state = IB_PORT_DOWN;
3628                 break;
3629         }
3630         return state;
3631 }
3632
3633 /* returns the IBTA port state, rather than the IBC link training state */
3634 static u8 qib_7220_phys_portstate(u64 ibcs)
3635 {
3636         u8 state = (u8)SYM_FIELD(ibcs, IBCStatus, LinkTrainingState);
3637         return qib_7220_physportstate[state];
3638 }
3639
3640 static int qib_7220_ib_updown(struct qib_pportdata *ppd, int ibup, u64 ibcs)
3641 {
3642         int ret = 0, symadj = 0;
3643         struct qib_devdata *dd = ppd->dd;
3644         unsigned long flags;
3645
3646         spin_lock_irqsave(&ppd->lflags_lock, flags);
3647         ppd->lflags &= ~QIBL_IB_FORCE_NOTIFY;
3648         spin_unlock_irqrestore(&ppd->lflags_lock, flags);
3649
3650         if (!ibup) {
3651                 /*
3652                  * When the link goes down we don't want AEQ running, so it
3653                  * won't interfere with IBC training, etc., and we need
3654                  * to go back to the static SerDes preset values.
3655                  */
3656                 if (!(ppd->lflags & (QIBL_IB_AUTONEG_FAILED |
3657                                      QIBL_IB_AUTONEG_INPROG)))
3658                         set_7220_ibspeed_fast(ppd, ppd->link_speed_enabled);
3659                 if (!(ppd->lflags & QIBL_IB_AUTONEG_INPROG)) {
3660                         qib_sd7220_presets(dd);
3661                         qib_cancel_sends(ppd); /* initial disarm, etc. */
3662                         spin_lock_irqsave(&ppd->sdma_lock, flags);
3663                         if (__qib_sdma_running(ppd))
3664                                 __qib_sdma_process_event(ppd,
3665                                         qib_sdma_event_e70_go_idle);
3666                         spin_unlock_irqrestore(&ppd->sdma_lock, flags);
3667                 }
3668                 /* this might better in qib_sd7220_presets() */
3669                 set_7220_relock_poll(dd, ibup);
3670         } else {
3671                 if (qib_compat_ddr_negotiate &&
3672                     !(ppd->lflags & (QIBL_IB_AUTONEG_FAILED |
3673                                      QIBL_IB_AUTONEG_INPROG)) &&
3674                     ppd->link_speed_active == QIB_IB_SDR &&
3675                     (ppd->link_speed_enabled & (QIB_IB_DDR | QIB_IB_SDR)) ==
3676                     (QIB_IB_DDR | QIB_IB_SDR) &&
3677                     dd->cspec->autoneg_tries < AUTONEG_TRIES) {
3678                         /* we are SDR, and DDR auto-negotiation enabled */
3679                         ++dd->cspec->autoneg_tries;
3680                         if (!ppd->cpspec->ibdeltainprog) {
3681                                 ppd->cpspec->ibdeltainprog = 1;
3682                                 ppd->cpspec->ibsymsnap = read_7220_creg32(dd,
3683                                         cr_ibsymbolerr);
3684                                 ppd->cpspec->iblnkerrsnap = read_7220_creg32(dd,
3685                                         cr_iblinkerrrecov);
3686                         }
3687                         try_7220_autoneg(ppd);
3688                         ret = 1; /* no other IB status change processing */
3689                 } else if ((ppd->lflags & QIBL_IB_AUTONEG_INPROG) &&
3690                            ppd->link_speed_active == QIB_IB_SDR) {
3691                         autoneg_7220_send(ppd, 1);
3692                         set_7220_ibspeed_fast(ppd, QIB_IB_DDR);
3693                         udelay(2);
3694                         toggle_7220_rclkrls(dd);
3695                         ret = 1; /* no other IB status change processing */
3696                 } else {
3697                         if ((ppd->lflags & QIBL_IB_AUTONEG_INPROG) &&
3698                             (ppd->link_speed_active & QIB_IB_DDR)) {
3699                                 spin_lock_irqsave(&ppd->lflags_lock, flags);
3700                                 ppd->lflags &= ~(QIBL_IB_AUTONEG_INPROG |
3701                                                  QIBL_IB_AUTONEG_FAILED);
3702                                 spin_unlock_irqrestore(&ppd->lflags_lock,
3703                                                        flags);
3704                                 dd->cspec->autoneg_tries = 0;
3705                                 /* re-enable SDR, for next link down */
3706                                 set_7220_ibspeed_fast(ppd,
3707                                                       ppd->link_speed_enabled);
3708                                 wake_up(&ppd->cpspec->autoneg_wait);
3709                                 symadj = 1;
3710                         } else if (ppd->lflags & QIBL_IB_AUTONEG_FAILED) {
3711                                 /*
3712                                  * Clear autoneg failure flag, and do setup
3713                                  * so we'll try next time link goes down and
3714                                  * back to INIT (possibly connected to a
3715                                  * different device).
3716                                  */
3717                                 spin_lock_irqsave(&ppd->lflags_lock, flags);
3718                                 ppd->lflags &= ~QIBL_IB_AUTONEG_FAILED;
3719                                 spin_unlock_irqrestore(&ppd->lflags_lock,
3720                                                        flags);
3721                                 ppd->cpspec->ibcddrctrl |=
3722                                         IBA7220_IBC_IBTA_1_2_MASK;
3723                                 qib_write_kreg(dd, kr_ncmodectrl, 0);
3724                                 symadj = 1;
3725                         }
3726                 }
3727
3728                 if (!(ppd->lflags & QIBL_IB_AUTONEG_INPROG))
3729                         symadj = 1;
3730
3731                 if (!ret) {
3732                         ppd->delay_mult = rate_to_delay
3733                             [(ibcs >> IBA7220_LINKSPEED_SHIFT) & 1]
3734                             [(ibcs >> IBA7220_LINKWIDTH_SHIFT) & 1];
3735
3736                         set_7220_relock_poll(dd, ibup);
3737                         spin_lock_irqsave(&ppd->sdma_lock, flags);
3738                         /*
3739                          * Unlike 7322, the 7220 needs this, due to lack of
3740                          * interrupt in some cases when we have sdma active
3741                          * when the link goes down.
3742                          */
3743                         if (ppd->sdma_state.current_state !=
3744                             qib_sdma_state_s20_idle)
3745                                 __qib_sdma_process_event(ppd,
3746                                         qib_sdma_event_e00_go_hw_down);
3747                         spin_unlock_irqrestore(&ppd->sdma_lock, flags);
3748                 }
3749         }
3750
3751         if (symadj) {
3752                 if (ppd->cpspec->ibdeltainprog) {
3753                         ppd->cpspec->ibdeltainprog = 0;
3754                         ppd->cpspec->ibsymdelta += read_7220_creg32(ppd->dd,
3755                                 cr_ibsymbolerr) - ppd->cpspec->ibsymsnap;
3756                         ppd->cpspec->iblnkerrdelta += read_7220_creg32(ppd->dd,
3757                                 cr_iblinkerrrecov) - ppd->cpspec->iblnkerrsnap;
3758                 }
3759         } else if (!ibup && qib_compat_ddr_negotiate &&
3760                    !ppd->cpspec->ibdeltainprog &&
3761                         !(ppd->lflags & QIBL_IB_AUTONEG_INPROG)) {
3762                 ppd->cpspec->ibdeltainprog = 1;
3763                 ppd->cpspec->ibsymsnap = read_7220_creg32(ppd->dd,
3764                                                           cr_ibsymbolerr);
3765                 ppd->cpspec->iblnkerrsnap = read_7220_creg32(ppd->dd,
3766                                                      cr_iblinkerrrecov);
3767         }
3768
3769         if (!ret)
3770                 qib_setup_7220_setextled(ppd, ibup);
3771         return ret;
3772 }
3773
3774 /*
3775  * Does read/modify/write to appropriate registers to
3776  * set output and direction bits selected by mask.
3777  * these are in their canonical postions (e.g. lsb of
3778  * dir will end up in D48 of extctrl on existing chips).
3779  * returns contents of GP Inputs.
3780  */
3781 static int gpio_7220_mod(struct qib_devdata *dd, u32 out, u32 dir, u32 mask)
3782 {
3783         u64 read_val, new_out;
3784         unsigned long flags;
3785
3786         if (mask) {
3787                 /* some bits being written, lock access to GPIO */
3788                 dir &= mask;
3789                 out &= mask;
3790                 spin_lock_irqsave(&dd->cspec->gpio_lock, flags);
3791                 dd->cspec->extctrl &= ~((u64)mask << SYM_LSB(EXTCtrl, GPIOOe));
3792                 dd->cspec->extctrl |= ((u64) dir << SYM_LSB(EXTCtrl, GPIOOe));
3793                 new_out = (dd->cspec->gpio_out & ~mask) | out;
3794
3795                 qib_write_kreg(dd, kr_extctrl, dd->cspec->extctrl);
3796                 qib_write_kreg(dd, kr_gpio_out, new_out);
3797                 dd->cspec->gpio_out = new_out;
3798                 spin_unlock_irqrestore(&dd->cspec->gpio_lock, flags);
3799         }
3800         /*
3801          * It is unlikely that a read at this time would get valid
3802          * data on a pin whose direction line was set in the same
3803          * call to this function. We include the read here because
3804          * that allows us to potentially combine a change on one pin with
3805          * a read on another, and because the old code did something like
3806          * this.
3807          */
3808         read_val = qib_read_kreg64(dd, kr_extstatus);
3809         return SYM_FIELD(read_val, EXTStatus, GPIOIn);
3810 }
3811
3812 /*
3813  * Read fundamental info we need to use the chip.  These are
3814  * the registers that describe chip capabilities, and are
3815  * saved in shadow registers.
3816  */
3817 static void get_7220_chip_params(struct qib_devdata *dd)
3818 {
3819         u64 val;
3820         u32 piobufs;
3821         int mtu;
3822
3823         dd->uregbase = qib_read_kreg32(dd, kr_userregbase);
3824
3825         dd->rcvtidcnt = qib_read_kreg32(dd, kr_rcvtidcnt);
3826         dd->rcvtidbase = qib_read_kreg32(dd, kr_rcvtidbase);
3827         dd->rcvegrbase = qib_read_kreg32(dd, kr_rcvegrbase);
3828         dd->palign = qib_read_kreg32(dd, kr_palign);
3829         dd->piobufbase = qib_read_kreg64(dd, kr_sendpiobufbase);
3830         dd->pio2k_bufbase = dd->piobufbase & 0xffffffff;
3831
3832         val = qib_read_kreg64(dd, kr_sendpiosize);
3833         dd->piosize2k = val & ~0U;
3834         dd->piosize4k = val >> 32;
3835
3836         mtu = ib_mtu_enum_to_int(qib_ibmtu);
3837         if (mtu == -1)
3838                 mtu = QIB_DEFAULT_MTU;
3839         dd->pport->ibmtu = (u32)mtu;
3840
3841         val = qib_read_kreg64(dd, kr_sendpiobufcnt);
3842         dd->piobcnt2k = val & ~0U;
3843         dd->piobcnt4k = val >> 32;
3844         /* these may be adjusted in init_chip_wc_pat() */
3845         dd->pio2kbase = (u32 __iomem *)
3846                 ((char __iomem *) dd->kregbase + dd->pio2k_bufbase);
3847         if (dd->piobcnt4k) {
3848                 dd->pio4kbase = (u32 __iomem *)
3849                         ((char __iomem *) dd->kregbase +
3850                          (dd->piobufbase >> 32));
3851                 /*
3852                  * 4K buffers take 2 pages; we use roundup just to be
3853                  * paranoid; we calculate it once here, rather than on
3854                  * ever buf allocate
3855                  */
3856                 dd->align4k = ALIGN(dd->piosize4k, dd->palign);
3857         }
3858
3859         piobufs = dd->piobcnt4k + dd->piobcnt2k;
3860
3861         dd->pioavregs = ALIGN(piobufs, sizeof(u64) * BITS_PER_BYTE / 2) /
3862                 (sizeof(u64) * BITS_PER_BYTE / 2);
3863 }
3864
3865 /*
3866  * The chip base addresses in cspec and cpspec have to be set
3867  * after possible init_chip_wc_pat(), rather than in
3868  * qib_get_7220_chip_params(), so split out as separate function
3869  */
3870 static void set_7220_baseaddrs(struct qib_devdata *dd)
3871 {
3872         u32 cregbase;
3873         /* init after possible re-map in init_chip_wc_pat() */
3874         cregbase = qib_read_kreg32(dd, kr_counterregbase);
3875         dd->cspec->cregbase = (u64 __iomem *)
3876                 ((char __iomem *) dd->kregbase + cregbase);
3877
3878         dd->egrtidbase = (u64 __iomem *)
3879                 ((char __iomem *) dd->kregbase + dd->rcvegrbase);
3880 }
3881
3882
3883 #define SENDCTRL_SHADOWED (SYM_MASK(SendCtrl, SendIntBufAvail) |        \
3884                            SYM_MASK(SendCtrl, SPioEnable) |             \
3885                            SYM_MASK(SendCtrl, SSpecialTriggerEn) |      \
3886                            SYM_MASK(SendCtrl, SendBufAvailUpd) |        \
3887                            SYM_MASK(SendCtrl, AvailUpdThld) |           \
3888                            SYM_MASK(SendCtrl, SDmaEnable) |             \
3889                            SYM_MASK(SendCtrl, SDmaIntEnable) |          \
3890                            SYM_MASK(SendCtrl, SDmaHalt) |               \
3891                            SYM_MASK(SendCtrl, SDmaSingleDescriptor))
3892
3893 static int sendctrl_hook(struct qib_devdata *dd,
3894                          const struct diag_observer *op,
3895                          u32 offs, u64 *data, u64 mask, int only_32)
3896 {
3897         unsigned long flags;
3898         unsigned idx = offs / sizeof(u64);
3899         u64 local_data, all_bits;
3900
3901         if (idx != kr_sendctrl) {
3902                 qib_dev_err(dd, "SendCtrl Hook called with offs %X, %s-bit\n",
3903                             offs, only_32 ? "32" : "64");
3904                 return 0;
3905         }
3906
3907         all_bits = ~0ULL;
3908         if (only_32)
3909                 all_bits >>= 32;
3910         spin_lock_irqsave(&dd->sendctrl_lock, flags);
3911         if ((mask & all_bits) != all_bits) {
3912                 /*
3913                  * At least some mask bits are zero, so we need
3914                  * to read. The judgement call is whether from
3915                  * reg or shadow. First-cut: read reg, and complain
3916                  * if any bits which should be shadowed are different
3917                  * from their shadowed value.
3918                  */
3919                 if (only_32)
3920                         local_data = (u64)qib_read_kreg32(dd, idx);
3921                 else
3922                         local_data = qib_read_kreg64(dd, idx);
3923                 qib_dev_err(dd, "Sendctrl -> %X, Shad -> %X\n",
3924                             (u32)local_data, (u32)dd->sendctrl);
3925                 if ((local_data & SENDCTRL_SHADOWED) !=
3926                     (dd->sendctrl & SENDCTRL_SHADOWED))
3927                         qib_dev_err(dd, "Sendctrl read: %X shadow is %X\n",
3928                                 (u32)local_data, (u32) dd->sendctrl);
3929                 *data = (local_data & ~mask) | (*data & mask);
3930         }
3931         if (mask) {
3932                 /*
3933                  * At least some mask bits are one, so we need
3934                  * to write, but only shadow some bits.
3935                  */
3936                 u64 sval, tval; /* Shadowed, transient */
3937
3938                 /*
3939                  * New shadow val is bits we don't want to touch,
3940                  * ORed with bits we do, that are intended for shadow.
3941                  */
3942                 sval = (dd->sendctrl & ~mask);
3943                 sval |= *data & SENDCTRL_SHADOWED & mask;
3944                 dd->sendctrl = sval;
3945                 tval = sval | (*data & ~SENDCTRL_SHADOWED & mask);
3946                 qib_dev_err(dd, "Sendctrl <- %X, Shad <- %X\n",
3947                             (u32)tval, (u32)sval);
3948                 qib_write_kreg(dd, kr_sendctrl, tval);
3949                 qib_write_kreg(dd, kr_scratch, 0Ull);
3950         }
3951         spin_unlock_irqrestore(&dd->sendctrl_lock, flags);
3952
3953         return only_32 ? 4 : 8;
3954 }
3955
3956 static const struct diag_observer sendctrl_observer = {
3957         sendctrl_hook, kr_sendctrl * sizeof(u64),
3958         kr_sendctrl * sizeof(u64)
3959 };
3960
3961 /*
3962  * write the final few registers that depend on some of the
3963  * init setup.  Done late in init, just before bringing up
3964  * the serdes.
3965  */
3966 static int qib_late_7220_initreg(struct qib_devdata *dd)
3967 {
3968         int ret = 0;
3969         u64 val;
3970
3971         qib_write_kreg(dd, kr_rcvhdrentsize, dd->rcvhdrentsize);
3972         qib_write_kreg(dd, kr_rcvhdrsize, dd->rcvhdrsize);
3973         qib_write_kreg(dd, kr_rcvhdrcnt, dd->rcvhdrcnt);
3974         qib_write_kreg(dd, kr_sendpioavailaddr, dd->pioavailregs_phys);
3975         val = qib_read_kreg64(dd, kr_sendpioavailaddr);
3976         if (val != dd->pioavailregs_phys) {
3977                 qib_dev_err(dd,
3978                         "Catastrophic software error, SendPIOAvailAddr written as %lx, read back as %llx\n",
3979                         (unsigned long) dd->pioavailregs_phys,
3980                         (unsigned long long) val);
3981                 ret = -EINVAL;
3982         }
3983         qib_register_observer(dd, &sendctrl_observer);
3984         return ret;
3985 }
3986
3987 static int qib_init_7220_variables(struct qib_devdata *dd)
3988 {
3989         struct qib_chippport_specific *cpspec;
3990         struct qib_pportdata *ppd;
3991         int ret = 0;
3992         u32 sbufs, updthresh;
3993
3994         cpspec = (struct qib_chippport_specific *)(dd + 1);
3995         ppd = &cpspec->pportdata;
3996         dd->pport = ppd;
3997         dd->num_pports = 1;
3998
3999         dd->cspec = (struct qib_chip_specific *)(cpspec + dd->num_pports);
4000         ppd->cpspec = cpspec;
4001
4002         spin_lock_init(&dd->cspec->sdepb_lock);
4003         spin_lock_init(&dd->cspec->rcvmod_lock);
4004         spin_lock_init(&dd->cspec->gpio_lock);
4005
4006         /* we haven't yet set QIB_PRESENT, so use read directly */
4007         dd->revision = readq(&dd->kregbase[kr_revision]);
4008
4009         if ((dd->revision & 0xffffffffU) == 0xffffffffU) {
4010                 qib_dev_err(dd,
4011                         "Revision register read failure, giving up initialization\n");
4012                 ret = -ENODEV;
4013                 goto bail;
4014         }
4015         dd->flags |= QIB_PRESENT;  /* now register routines work */
4016
4017         dd->majrev = (u8) SYM_FIELD(dd->revision, Revision_R,
4018                                     ChipRevMajor);
4019         dd->minrev = (u8) SYM_FIELD(dd->revision, Revision_R,
4020                                     ChipRevMinor);
4021
4022         get_7220_chip_params(dd);
4023         qib_7220_boardname(dd);
4024
4025         /*
4026          * GPIO bits for TWSI data and clock,
4027          * used for serial EEPROM.
4028          */
4029         dd->gpio_sda_num = _QIB_GPIO_SDA_NUM;
4030         dd->gpio_scl_num = _QIB_GPIO_SCL_NUM;
4031         dd->twsi_eeprom_dev = QIB_TWSI_EEPROM_DEV;
4032
4033         dd->flags |= QIB_HAS_INTX | QIB_HAS_LINK_LATENCY |
4034                 QIB_NODMA_RTAIL | QIB_HAS_THRESH_UPDATE;
4035         dd->flags |= qib_special_trigger ?
4036                 QIB_USE_SPCL_TRIG : QIB_HAS_SEND_DMA;
4037
4038         /*
4039          * EEPROM error log 0 is TXE Parity errors. 1 is RXE Parity.
4040          * 2 is Some Misc, 3 is reserved for future.
4041          */
4042         dd->eep_st_masks[0].hwerrs_to_log = HWE_MASK(TXEMemParityErr);
4043
4044         dd->eep_st_masks[1].hwerrs_to_log = HWE_MASK(RXEMemParityErr);
4045
4046         dd->eep_st_masks[2].errs_to_log = ERR_MASK(ResetNegated);
4047
4048         init_waitqueue_head(&cpspec->autoneg_wait);
4049         INIT_DELAYED_WORK(&cpspec->autoneg_work, autoneg_7220_work);
4050
4051         ret = qib_init_pportdata(ppd, dd, 0, 1);
4052         if (ret)
4053                 goto bail;
4054         ppd->link_width_supported = IB_WIDTH_1X | IB_WIDTH_4X;
4055         ppd->link_speed_supported = QIB_IB_SDR | QIB_IB_DDR;
4056
4057         ppd->link_width_enabled = ppd->link_width_supported;
4058         ppd->link_speed_enabled = ppd->link_speed_supported;
4059         /*
4060          * Set the initial values to reasonable default, will be set
4061          * for real when link is up.
4062          */
4063         ppd->link_width_active = IB_WIDTH_4X;
4064         ppd->link_speed_active = QIB_IB_SDR;
4065         ppd->delay_mult = rate_to_delay[0][1];
4066         ppd->vls_supported = IB_VL_VL0;
4067         ppd->vls_operational = ppd->vls_supported;
4068
4069         if (!qib_mini_init)
4070                 qib_write_kreg(dd, kr_rcvbthqp, QIB_KD_QP);
4071
4072         setup_timer(&ppd->cpspec->chase_timer, reenable_7220_chase,
4073                     (unsigned long)ppd);
4074
4075         qib_num_cfg_vls = 1; /* if any 7220's, only one VL */
4076
4077         dd->rcvhdrentsize = QIB_RCVHDR_ENTSIZE;
4078         dd->rcvhdrsize = QIB_DFLT_RCVHDRSIZE;
4079         dd->rhf_offset =
4080                 dd->rcvhdrentsize - sizeof(u64) / sizeof(u32);
4081
4082         /* we always allocate at least 2048 bytes for eager buffers */
4083         ret = ib_mtu_enum_to_int(qib_ibmtu);
4084         dd->rcvegrbufsize = ret != -1 ? max(ret, 2048) : QIB_DEFAULT_MTU;
4085         BUG_ON(!is_power_of_2(dd->rcvegrbufsize));
4086         dd->rcvegrbufsize_shift = ilog2(dd->rcvegrbufsize);
4087
4088         qib_7220_tidtemplate(dd);
4089
4090         /*
4091          * We can request a receive interrupt for 1 or
4092          * more packets from current offset.  For now, we set this
4093          * up for a single packet.
4094          */
4095         dd->rhdrhead_intr_off = 1ULL << 32;
4096
4097         /* setup the stats timer; the add_timer is done at end of init */
4098         init_timer(&dd->stats_timer);
4099         dd->stats_timer.function = qib_get_7220_faststats;
4100         dd->stats_timer.data = (unsigned long) dd;
4101         dd->stats_timer.expires = jiffies + ACTIVITY_TIMER * HZ;
4102
4103         /*
4104          * Control[4] has been added to change the arbitration within
4105          * the SDMA engine between favoring data fetches over descriptor
4106          * fetches.  qib_sdma_fetch_arb==0 gives data fetches priority.
4107          */
4108         if (qib_sdma_fetch_arb)
4109                 dd->control |= 1 << 4;
4110
4111         dd->ureg_align = 0x10000;  /* 64KB alignment */
4112
4113         dd->piosize2kmax_dwords = (dd->piosize2k >> 2)-1;
4114         qib_7220_config_ctxts(dd);
4115         qib_set_ctxtcnt(dd);  /* needed for PAT setup */
4116
4117         ret = init_chip_wc_pat(dd, 0);
4118         if (ret)
4119                 goto bail;
4120         set_7220_baseaddrs(dd); /* set chip access pointers now */
4121
4122         ret = 0;
4123         if (qib_mini_init)
4124                 goto bail;
4125
4126         ret = qib_create_ctxts(dd);
4127         init_7220_cntrnames(dd);
4128
4129         /* use all of 4KB buffers for the kernel SDMA, zero if !SDMA.
4130          * reserve the update threshold amount for other kernel use, such
4131          * as sending SMI, MAD, and ACKs, or 3, whichever is greater,
4132          * unless we aren't enabling SDMA, in which case we want to use
4133          * all the 4k bufs for the kernel.
4134          * if this was less than the update threshold, we could wait
4135          * a long time for an update.  Coded this way because we
4136          * sometimes change the update threshold for various reasons,
4137          * and we want this to remain robust.
4138          */
4139         updthresh = 8U; /* update threshold */
4140         if (dd->flags & QIB_HAS_SEND_DMA) {
4141                 dd->cspec->sdmabufcnt =  dd->piobcnt4k;
4142                 sbufs = updthresh > 3 ? updthresh : 3;
4143         } else {
4144                 dd->cspec->sdmabufcnt = 0;
4145                 sbufs = dd->piobcnt4k;
4146         }
4147
4148         dd->cspec->lastbuf_for_pio = dd->piobcnt2k + dd->piobcnt4k -
4149                 dd->cspec->sdmabufcnt;
4150         dd->lastctxt_piobuf = dd->cspec->lastbuf_for_pio - sbufs;
4151         dd->cspec->lastbuf_for_pio--; /* range is <= , not < */
4152         dd->last_pio = dd->cspec->lastbuf_for_pio;
4153         dd->pbufsctxt = dd->lastctxt_piobuf /
4154                 (dd->cfgctxts - dd->first_user_ctxt);
4155
4156         /*
4157          * if we are at 16 user contexts, we will have one 7 sbufs
4158          * per context, so drop the update threshold to match.  We
4159          * want to update before we actually run out, at low pbufs/ctxt
4160          * so give ourselves some margin
4161          */
4162         if ((dd->pbufsctxt - 2) < updthresh)
4163                 updthresh = dd->pbufsctxt - 2;
4164
4165         dd->cspec->updthresh_dflt = updthresh;
4166         dd->cspec->updthresh = updthresh;
4167
4168         /* before full enable, no interrupts, no locking needed */
4169         dd->sendctrl |= (updthresh & SYM_RMASK(SendCtrl, AvailUpdThld))
4170                              << SYM_LSB(SendCtrl, AvailUpdThld);
4171
4172         dd->psxmitwait_supported = 1;
4173         dd->psxmitwait_check_rate = QIB_7220_PSXMITWAIT_CHECK_RATE;
4174 bail:
4175         return ret;
4176 }
4177
4178 static u32 __iomem *qib_7220_getsendbuf(struct qib_pportdata *ppd, u64 pbc,
4179                                         u32 *pbufnum)
4180 {
4181         u32 first, last, plen = pbc & QIB_PBC_LENGTH_MASK;
4182         struct qib_devdata *dd = ppd->dd;
4183         u32 __iomem *buf;
4184
4185         if (((pbc >> 32) & PBC_7220_VL15_SEND_CTRL) &&
4186                 !(ppd->lflags & (QIBL_IB_AUTONEG_INPROG | QIBL_LINKACTIVE)))
4187                 buf = get_7220_link_buf(ppd, pbufnum);
4188         else {
4189                 if ((plen + 1) > dd->piosize2kmax_dwords)
4190                         first = dd->piobcnt2k;
4191                 else
4192                         first = 0;
4193                 /* try 4k if all 2k busy, so same last for both sizes */
4194                 last = dd->cspec->lastbuf_for_pio;
4195                 buf = qib_getsendbuf_range(dd, pbufnum, first, last);
4196         }
4197         return buf;
4198 }
4199
4200 /* these 2 "counters" are really control registers, and are always RW */
4201 static void qib_set_cntr_7220_sample(struct qib_pportdata *ppd, u32 intv,
4202                                      u32 start)
4203 {
4204         write_7220_creg(ppd->dd, cr_psinterval, intv);
4205         write_7220_creg(ppd->dd, cr_psstart, start);
4206 }
4207
4208 /*
4209  * NOTE: no real attempt is made to generalize the SDMA stuff.
4210  * At some point "soon" we will have a new more generalized
4211  * set of sdma interface, and then we'll clean this up.
4212  */
4213
4214 /* Must be called with sdma_lock held, or before init finished */
4215 static void qib_sdma_update_7220_tail(struct qib_pportdata *ppd, u16 tail)
4216 {
4217         /* Commit writes to memory and advance the tail on the chip */
4218         wmb();
4219         ppd->sdma_descq_tail = tail;
4220         qib_write_kreg(ppd->dd, kr_senddmatail, tail);
4221 }
4222
4223 static void qib_sdma_set_7220_desc_cnt(struct qib_pportdata *ppd, unsigned cnt)
4224 {
4225 }
4226
4227 static struct sdma_set_state_action sdma_7220_action_table[] = {
4228         [qib_sdma_state_s00_hw_down] = {
4229                 .op_enable = 0,
4230                 .op_intenable = 0,
4231                 .op_halt = 0,
4232                 .go_s99_running_tofalse = 1,
4233         },
4234         [qib_sdma_state_s10_hw_start_up_wait] = {
4235                 .op_enable = 1,
4236                 .op_intenable = 1,
4237                 .op_halt = 1,
4238         },
4239         [qib_sdma_state_s20_idle] = {
4240                 .op_enable = 1,
4241                 .op_intenable = 1,
4242                 .op_halt = 1,
4243         },
4244         [qib_sdma_state_s30_sw_clean_up_wait] = {
4245                 .op_enable = 0,
4246                 .op_intenable = 1,
4247                 .op_halt = 0,
4248         },
4249         [qib_sdma_state_s40_hw_clean_up_wait] = {
4250                 .op_enable = 1,
4251                 .op_intenable = 1,
4252                 .op_halt = 1,
4253         },
4254         [qib_sdma_state_s50_hw_halt_wait] = {
4255                 .op_enable = 1,
4256                 .op_intenable = 1,
4257                 .op_halt = 1,
4258         },
4259         [qib_sdma_state_s99_running] = {
4260                 .op_enable = 1,
4261                 .op_intenable = 1,
4262                 .op_halt = 0,
4263                 .go_s99_running_totrue = 1,
4264         },
4265 };
4266
4267 static void qib_7220_sdma_init_early(struct qib_pportdata *ppd)
4268 {
4269         ppd->sdma_state.set_state_action = sdma_7220_action_table;
4270 }
4271
4272 static int init_sdma_7220_regs(struct qib_pportdata *ppd)
4273 {
4274         struct qib_devdata *dd = ppd->dd;
4275         unsigned i, n;
4276         u64 senddmabufmask[3] = { 0 };
4277
4278         /* Set SendDmaBase */
4279         qib_write_kreg(dd, kr_senddmabase, ppd->sdma_descq_phys);
4280         qib_sdma_7220_setlengen(ppd);
4281         qib_sdma_update_7220_tail(ppd, 0); /* Set SendDmaTail */
4282         /* Set SendDmaHeadAddr */
4283         qib_write_kreg(dd, kr_senddmaheadaddr, ppd->sdma_head_phys);
4284
4285         /*
4286          * Reserve all the former "kernel" piobufs, using high number range
4287          * so we get as many 4K buffers as possible
4288          */
4289         n = dd->piobcnt2k + dd->piobcnt4k;
4290         i = n - dd->cspec->sdmabufcnt;
4291
4292         for (; i < n; ++i) {
4293                 unsigned word = i / 64;
4294                 unsigned bit = i & 63;
4295
4296                 BUG_ON(word >= 3);
4297                 senddmabufmask[word] |= 1ULL << bit;
4298         }
4299         qib_write_kreg(dd, kr_senddmabufmask0, senddmabufmask[0]);
4300         qib_write_kreg(dd, kr_senddmabufmask1, senddmabufmask[1]);
4301         qib_write_kreg(dd, kr_senddmabufmask2, senddmabufmask[2]);
4302
4303         ppd->sdma_state.first_sendbuf = i;
4304         ppd->sdma_state.last_sendbuf = n;
4305
4306         return 0;
4307 }
4308
4309 /* sdma_lock must be held */
4310 static u16 qib_sdma_7220_gethead(struct qib_pportdata *ppd)
4311 {
4312         struct qib_devdata *dd = ppd->dd;
4313         int sane;
4314         int use_dmahead;
4315         u16 swhead;
4316         u16 swtail;
4317         u16 cnt;
4318         u16 hwhead;
4319
4320         use_dmahead = __qib_sdma_running(ppd) &&
4321                 (dd->flags & QIB_HAS_SDMA_TIMEOUT);
4322 retry:
4323         hwhead = use_dmahead ?
4324                 (u16)le64_to_cpu(*ppd->sdma_head_dma) :
4325                 (u16)qib_read_kreg32(dd, kr_senddmahead);
4326
4327         swhead = ppd->sdma_descq_head;
4328         swtail = ppd->sdma_descq_tail;
4329         cnt = ppd->sdma_descq_cnt;
4330
4331         if (swhead < swtail) {
4332                 /* not wrapped */
4333                 sane = (hwhead >= swhead) & (hwhead <= swtail);
4334         } else if (swhead > swtail) {
4335                 /* wrapped around */
4336                 sane = ((hwhead >= swhead) && (hwhead < cnt)) ||
4337                         (hwhead <= swtail);
4338         } else {
4339                 /* empty */
4340                 sane = (hwhead == swhead);
4341         }
4342
4343         if (unlikely(!sane)) {
4344                 if (use_dmahead) {
4345                         /* try one more time, directly from the register */
4346                         use_dmahead = 0;
4347                         goto retry;
4348                 }
4349                 /* assume no progress */
4350                 hwhead = swhead;
4351         }
4352
4353         return hwhead;
4354 }
4355
4356 static int qib_sdma_7220_busy(struct qib_pportdata *ppd)
4357 {
4358         u64 hwstatus = qib_read_kreg64(ppd->dd, kr_senddmastatus);
4359
4360         return (hwstatus & SYM_MASK(SendDmaStatus, ScoreBoardDrainInProg)) ||
4361                (hwstatus & SYM_MASK(SendDmaStatus, AbortInProg)) ||
4362                (hwstatus & SYM_MASK(SendDmaStatus, InternalSDmaEnable)) ||
4363                !(hwstatus & SYM_MASK(SendDmaStatus, ScbEmpty));
4364 }
4365
4366 /*
4367  * Compute the amount of delay before sending the next packet if the
4368  * port's send rate differs from the static rate set for the QP.
4369  * Since the delay affects this packet but the amount of the delay is
4370  * based on the length of the previous packet, use the last delay computed
4371  * and save the delay count for this packet to be used next time
4372  * we get here.
4373  */
4374 static u32 qib_7220_setpbc_control(struct qib_pportdata *ppd, u32 plen,
4375                                    u8 srate, u8 vl)
4376 {
4377         u8 snd_mult = ppd->delay_mult;
4378         u8 rcv_mult = ib_rate_to_delay[srate];
4379         u32 ret = ppd->cpspec->last_delay_mult;
4380
4381         ppd->cpspec->last_delay_mult = (rcv_mult > snd_mult) ?
4382                 (plen * (rcv_mult - snd_mult) + 1) >> 1 : 0;
4383
4384         /* Indicate VL15, if necessary */
4385         if (vl == 15)
4386                 ret |= PBC_7220_VL15_SEND_CTRL;
4387         return ret;
4388 }
4389
4390 static void qib_7220_initvl15_bufs(struct qib_devdata *dd)
4391 {
4392 }
4393
4394 static void qib_7220_init_ctxt(struct qib_ctxtdata *rcd)
4395 {
4396         if (!rcd->ctxt) {
4397                 rcd->rcvegrcnt = IBA7220_KRCVEGRCNT;
4398                 rcd->rcvegr_tid_base = 0;
4399         } else {
4400                 rcd->rcvegrcnt = rcd->dd->cspec->rcvegrcnt;
4401                 rcd->rcvegr_tid_base = IBA7220_KRCVEGRCNT +
4402                         (rcd->ctxt - 1) * rcd->rcvegrcnt;
4403         }
4404 }
4405
4406 static void qib_7220_txchk_change(struct qib_devdata *dd, u32 start,
4407                                   u32 len, u32 which, struct qib_ctxtdata *rcd)
4408 {
4409         int i;
4410         unsigned long flags;
4411
4412         switch (which) {
4413         case TXCHK_CHG_TYPE_KERN:
4414                 /* see if we need to raise avail update threshold */
4415                 spin_lock_irqsave(&dd->uctxt_lock, flags);
4416                 for (i = dd->first_user_ctxt;
4417                      dd->cspec->updthresh != dd->cspec->updthresh_dflt
4418                      && i < dd->cfgctxts; i++)
4419                         if (dd->rcd[i] && dd->rcd[i]->subctxt_cnt &&
4420                            ((dd->rcd[i]->piocnt / dd->rcd[i]->subctxt_cnt) - 1)
4421                            < dd->cspec->updthresh_dflt)
4422                                 break;
4423                 spin_unlock_irqrestore(&dd->uctxt_lock, flags);
4424                 if (i == dd->cfgctxts) {
4425                         spin_lock_irqsave(&dd->sendctrl_lock, flags);
4426                         dd->cspec->updthresh = dd->cspec->updthresh_dflt;
4427                         dd->sendctrl &= ~SYM_MASK(SendCtrl, AvailUpdThld);
4428                         dd->sendctrl |= (dd->cspec->updthresh &
4429                                          SYM_RMASK(SendCtrl, AvailUpdThld)) <<
4430                                            SYM_LSB(SendCtrl, AvailUpdThld);
4431                         spin_unlock_irqrestore(&dd->sendctrl_lock, flags);
4432                         sendctrl_7220_mod(dd->pport, QIB_SENDCTRL_AVAIL_BLIP);
4433                 }
4434                 break;
4435         case TXCHK_CHG_TYPE_USER:
4436                 spin_lock_irqsave(&dd->sendctrl_lock, flags);
4437                 if (rcd && rcd->subctxt_cnt && ((rcd->piocnt
4438                         / rcd->subctxt_cnt) - 1) < dd->cspec->updthresh) {
4439                         dd->cspec->updthresh = (rcd->piocnt /
4440                                                 rcd->subctxt_cnt) - 1;
4441                         dd->sendctrl &= ~SYM_MASK(SendCtrl, AvailUpdThld);
4442                         dd->sendctrl |= (dd->cspec->updthresh &
4443                                         SYM_RMASK(SendCtrl, AvailUpdThld))
4444                                         << SYM_LSB(SendCtrl, AvailUpdThld);
4445                         spin_unlock_irqrestore(&dd->sendctrl_lock, flags);
4446                         sendctrl_7220_mod(dd->pport, QIB_SENDCTRL_AVAIL_BLIP);
4447                 } else
4448                         spin_unlock_irqrestore(&dd->sendctrl_lock, flags);
4449                 break;
4450         }
4451 }
4452
4453 static void writescratch(struct qib_devdata *dd, u32 val)
4454 {
4455         qib_write_kreg(dd, kr_scratch, val);
4456 }
4457
4458 #define VALID_TS_RD_REG_MASK 0xBF
4459 /**
4460  * qib_7220_tempsense_read - read register of temp sensor via TWSI
4461  * @dd: the qlogic_ib device
4462  * @regnum: register to read from
4463  *
4464  * returns reg contents (0..255) or < 0 for error
4465  */
4466 static int qib_7220_tempsense_rd(struct qib_devdata *dd, int regnum)
4467 {
4468         int ret;
4469         u8 rdata;
4470
4471         if (regnum > 7) {
4472                 ret = -EINVAL;
4473                 goto bail;
4474         }
4475
4476         /* return a bogus value for (the one) register we do not have */
4477         if (!((1 << regnum) & VALID_TS_RD_REG_MASK)) {
4478                 ret = 0;
4479                 goto bail;
4480         }
4481
4482         ret = mutex_lock_interruptible(&dd->eep_lock);
4483         if (ret)
4484                 goto bail;
4485
4486         ret = qib_twsi_blk_rd(dd, QIB_TWSI_TEMP_DEV, regnum, &rdata, 1);
4487         if (!ret)
4488                 ret = rdata;
4489
4490         mutex_unlock(&dd->eep_lock);
4491
4492         /*
4493          * There are three possibilities here:
4494          * ret is actual value (0..255)
4495          * ret is -ENXIO or -EINVAL from twsi code or this file
4496          * ret is -EINTR from mutex_lock_interruptible.
4497          */
4498 bail:
4499         return ret;
4500 }
4501
4502 #ifdef CONFIG_INFINIBAND_QIB_DCA
4503 static int qib_7220_notify_dca(struct qib_devdata *dd, unsigned long event)
4504 {
4505         return 0;
4506 }
4507 #endif
4508
4509 /* Dummy function, as 7220 boards never disable EEPROM Write */
4510 static int qib_7220_eeprom_wen(struct qib_devdata *dd, int wen)
4511 {
4512         return 1;
4513 }
4514
4515 /**
4516  * qib_init_iba7220_funcs - set up the chip-specific function pointers
4517  * @dev: the pci_dev for qlogic_ib device
4518  * @ent: pci_device_id struct for this dev
4519  *
4520  * This is global, and is called directly at init to set up the
4521  * chip-specific function pointers for later use.
4522  */
4523 struct qib_devdata *qib_init_iba7220_funcs(struct pci_dev *pdev,
4524                                            const struct pci_device_id *ent)
4525 {
4526         struct qib_devdata *dd;
4527         int ret;
4528         u32 boardid, minwidth;
4529
4530         dd = qib_alloc_devdata(pdev, sizeof(struct qib_chip_specific) +
4531                 sizeof(struct qib_chippport_specific));
4532         if (IS_ERR(dd))
4533                 goto bail;
4534
4535         dd->f_bringup_serdes    = qib_7220_bringup_serdes;
4536         dd->f_cleanup           = qib_setup_7220_cleanup;
4537         dd->f_clear_tids        = qib_7220_clear_tids;
4538         dd->f_free_irq          = qib_7220_free_irq;
4539         dd->f_get_base_info     = qib_7220_get_base_info;
4540         dd->f_get_msgheader     = qib_7220_get_msgheader;
4541         dd->f_getsendbuf        = qib_7220_getsendbuf;
4542         dd->f_gpio_mod          = gpio_7220_mod;
4543         dd->f_eeprom_wen        = qib_7220_eeprom_wen;
4544         dd->f_hdrqempty         = qib_7220_hdrqempty;
4545         dd->f_ib_updown         = qib_7220_ib_updown;
4546         dd->f_init_ctxt         = qib_7220_init_ctxt;
4547         dd->f_initvl15_bufs     = qib_7220_initvl15_bufs;
4548         dd->f_intr_fallback     = qib_7220_intr_fallback;
4549         dd->f_late_initreg      = qib_late_7220_initreg;
4550         dd->f_setpbc_control    = qib_7220_setpbc_control;
4551         dd->f_portcntr          = qib_portcntr_7220;
4552         dd->f_put_tid           = qib_7220_put_tid;
4553         dd->f_quiet_serdes      = qib_7220_quiet_serdes;
4554         dd->f_rcvctrl           = rcvctrl_7220_mod;
4555         dd->f_read_cntrs        = qib_read_7220cntrs;
4556         dd->f_read_portcntrs    = qib_read_7220portcntrs;
4557         dd->f_reset             = qib_setup_7220_reset;
4558         dd->f_init_sdma_regs    = init_sdma_7220_regs;
4559         dd->f_sdma_busy         = qib_sdma_7220_busy;
4560         dd->f_sdma_gethead      = qib_sdma_7220_gethead;
4561         dd->f_sdma_sendctrl     = qib_7220_sdma_sendctrl;
4562         dd->f_sdma_set_desc_cnt = qib_sdma_set_7220_desc_cnt;
4563         dd->f_sdma_update_tail  = qib_sdma_update_7220_tail;
4564         dd->f_sdma_hw_clean_up  = qib_7220_sdma_hw_clean_up;
4565         dd->f_sdma_hw_start_up  = qib_7220_sdma_hw_start_up;
4566         dd->f_sdma_init_early   = qib_7220_sdma_init_early;
4567         dd->f_sendctrl          = sendctrl_7220_mod;
4568         dd->f_set_armlaunch     = qib_set_7220_armlaunch;
4569         dd->f_set_cntr_sample   = qib_set_cntr_7220_sample;
4570         dd->f_iblink_state      = qib_7220_iblink_state;
4571         dd->f_ibphys_portstate  = qib_7220_phys_portstate;
4572         dd->f_get_ib_cfg        = qib_7220_get_ib_cfg;
4573         dd->f_set_ib_cfg        = qib_7220_set_ib_cfg;
4574         dd->f_set_ib_loopback   = qib_7220_set_loopback;
4575         dd->f_set_intr_state    = qib_7220_set_intr_state;
4576         dd->f_setextled         = qib_setup_7220_setextled;
4577         dd->f_txchk_change      = qib_7220_txchk_change;
4578         dd->f_update_usrhead    = qib_update_7220_usrhead;
4579         dd->f_wantpiobuf_intr   = qib_wantpiobuf_7220_intr;
4580         dd->f_xgxs_reset        = qib_7220_xgxs_reset;
4581         dd->f_writescratch      = writescratch;
4582         dd->f_tempsense_rd      = qib_7220_tempsense_rd;
4583 #ifdef CONFIG_INFINIBAND_QIB_DCA
4584         dd->f_notify_dca = qib_7220_notify_dca;
4585 #endif
4586         /*
4587          * Do remaining pcie setup and save pcie values in dd.
4588          * Any error printing is already done by the init code.
4589          * On return, we have the chip mapped, but chip registers
4590          * are not set up until start of qib_init_7220_variables.
4591          */
4592         ret = qib_pcie_ddinit(dd, pdev, ent);
4593         if (ret < 0)
4594                 goto bail_free;
4595
4596         /* initialize chip-specific variables */
4597         ret = qib_init_7220_variables(dd);
4598         if (ret)
4599                 goto bail_cleanup;
4600
4601         if (qib_mini_init)
4602                 goto bail;
4603
4604         boardid = SYM_FIELD(dd->revision, Revision,
4605                             BoardID);
4606         switch (boardid) {
4607         case 0:
4608         case 2:
4609         case 10:
4610         case 12:
4611                 minwidth = 16; /* x16 capable boards */
4612                 break;
4613         default:
4614                 minwidth = 8; /* x8 capable boards */
4615                 break;
4616         }
4617         if (qib_pcie_params(dd, minwidth, NULL))
4618                 qib_dev_err(dd,
4619                         "Failed to setup PCIe or interrupts; continuing anyway\n");
4620
4621         /* save IRQ for possible later use */
4622         dd->cspec->irq = pdev->irq;
4623
4624         if (qib_read_kreg64(dd, kr_hwerrstatus) &
4625             QLOGIC_IB_HWE_SERDESPLLFAILED)
4626                 qib_write_kreg(dd, kr_hwerrclear,
4627                                QLOGIC_IB_HWE_SERDESPLLFAILED);
4628
4629         /* setup interrupt handler (interrupt type handled above) */
4630         qib_setup_7220_interrupt(dd);
4631         qib_7220_init_hwerrors(dd);
4632
4633         /* clear diagctrl register, in case diags were running and crashed */
4634         qib_write_kreg(dd, kr_hwdiagctrl, 0);
4635
4636         goto bail;
4637
4638 bail_cleanup:
4639         qib_pcie_ddcleanup(dd);
4640 bail_free:
4641         qib_free_devdata(dd);
4642         dd = ERR_PTR(ret);
4643 bail:
4644         return dd;
4645 }