blob: c40395701b05947f35e3b35e13728ec81bfcee4f [file] [log] [blame]
Mike Marciniszyn77241052015-07-30 15:17:43 -04001/*
2 *
3 * This file is provided under a dual BSD/GPLv2 license. When using or
4 * redistributing this file, you may do so under either license.
5 *
6 * GPL LICENSE SUMMARY
7 *
8 * Copyright(c) 2015 Intel Corporation.
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of version 2 of the GNU General Public License as
12 * published by the Free Software Foundation.
13 *
14 * This program is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
18 *
19 * BSD LICENSE
20 *
21 * Copyright(c) 2015 Intel Corporation.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 *
27 * - Redistributions of source code must retain the above copyright
28 * notice, this list of conditions and the following disclaimer.
29 * - Redistributions in binary form must reproduce the above copyright
30 * notice, this list of conditions and the following disclaimer in
31 * the documentation and/or other materials provided with the
32 * distribution.
33 * - Neither the name of Intel Corporation nor the names of its
34 * contributors may be used to endorse or promote products derived
35 * from this software without specific prior written permission.
36 *
37 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
38 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
39 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
40 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
41 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
44 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
45 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
46 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
47 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
48 *
49 */
50
51/*
52 * This file contains all of the code that is specific to the HFI chip
53 */
54
55#include <linux/pci.h>
56#include <linux/delay.h>
57#include <linux/interrupt.h>
58#include <linux/module.h>
59
60#include "hfi.h"
61#include "trace.h"
62#include "mad.h"
63#include "pio.h"
64#include "sdma.h"
65#include "eprom.h"
66
67#define NUM_IB_PORTS 1
68
69uint kdeth_qp;
70module_param_named(kdeth_qp, kdeth_qp, uint, S_IRUGO);
71MODULE_PARM_DESC(kdeth_qp, "Set the KDETH queue pair prefix");
72
73uint num_vls = HFI1_MAX_VLS_SUPPORTED;
74module_param(num_vls, uint, S_IRUGO);
75MODULE_PARM_DESC(num_vls, "Set number of Virtual Lanes to use (1-8)");
76
77/*
78 * Default time to aggregate two 10K packets from the idle state
79 * (timer not running). The timer starts at the end of the first packet,
80 * so only the time for one 10K packet and header plus a bit extra is needed.
81 * 10 * 1024 + 64 header byte = 10304 byte
82 * 10304 byte / 12.5 GB/s = 824.32ns
83 */
84uint rcv_intr_timeout = (824 + 16); /* 16 is for coalescing interrupt */
85module_param(rcv_intr_timeout, uint, S_IRUGO);
86MODULE_PARM_DESC(rcv_intr_timeout, "Receive interrupt mitigation timeout in ns");
87
88uint rcv_intr_count = 16; /* same as qib */
89module_param(rcv_intr_count, uint, S_IRUGO);
90MODULE_PARM_DESC(rcv_intr_count, "Receive interrupt mitigation count");
91
92ushort link_crc_mask = SUPPORTED_CRCS;
93module_param(link_crc_mask, ushort, S_IRUGO);
94MODULE_PARM_DESC(link_crc_mask, "CRCs to use on the link");
95
96uint loopback;
97module_param_named(loopback, loopback, uint, S_IRUGO);
98MODULE_PARM_DESC(loopback, "Put into loopback mode (1 = serdes, 3 = external cable");
99
100/* Other driver tunables */
101uint rcv_intr_dynamic = 1; /* enable dynamic mode for rcv int mitigation*/
102static ushort crc_14b_sideband = 1;
103static uint use_flr = 1;
104uint quick_linkup; /* skip LNI */
105
106struct flag_table {
107 u64 flag; /* the flag */
108 char *str; /* description string */
109 u16 extra; /* extra information */
110 u16 unused0;
111 u32 unused1;
112};
113
114/* str must be a string constant */
115#define FLAG_ENTRY(str, extra, flag) {flag, str, extra}
116#define FLAG_ENTRY0(str, flag) {flag, str, 0}
117
118/* Send Error Consequences */
119#define SEC_WRITE_DROPPED 0x1
120#define SEC_PACKET_DROPPED 0x2
121#define SEC_SC_HALTED 0x4 /* per-context only */
122#define SEC_SPC_FREEZE 0x8 /* per-HFI only */
123
124#define VL15CTXT 1
125#define MIN_KERNEL_KCTXTS 2
126#define NUM_MAP_REGS 32
127
128/* Bit offset into the GUID which carries HFI id information */
129#define GUID_HFI_INDEX_SHIFT 39
130
131/* extract the emulation revision */
132#define emulator_rev(dd) ((dd)->irev >> 8)
133/* parallel and serial emulation versions are 3 and 4 respectively */
134#define is_emulator_p(dd) ((((dd)->irev) & 0xf) == 3)
135#define is_emulator_s(dd) ((((dd)->irev) & 0xf) == 4)
136
137/* RSM fields */
138
139/* packet type */
140#define IB_PACKET_TYPE 2ull
141#define QW_SHIFT 6ull
142/* QPN[7..1] */
143#define QPN_WIDTH 7ull
144
145/* LRH.BTH: QW 0, OFFSET 48 - for match */
146#define LRH_BTH_QW 0ull
147#define LRH_BTH_BIT_OFFSET 48ull
148#define LRH_BTH_OFFSET(off) ((LRH_BTH_QW << QW_SHIFT) | (off))
149#define LRH_BTH_MATCH_OFFSET LRH_BTH_OFFSET(LRH_BTH_BIT_OFFSET)
150#define LRH_BTH_SELECT
151#define LRH_BTH_MASK 3ull
152#define LRH_BTH_VALUE 2ull
153
154/* LRH.SC[3..0] QW 0, OFFSET 56 - for match */
155#define LRH_SC_QW 0ull
156#define LRH_SC_BIT_OFFSET 56ull
157#define LRH_SC_OFFSET(off) ((LRH_SC_QW << QW_SHIFT) | (off))
158#define LRH_SC_MATCH_OFFSET LRH_SC_OFFSET(LRH_SC_BIT_OFFSET)
159#define LRH_SC_MASK 128ull
160#define LRH_SC_VALUE 0ull
161
162/* SC[n..0] QW 0, OFFSET 60 - for select */
163#define LRH_SC_SELECT_OFFSET ((LRH_SC_QW << QW_SHIFT) | (60ull))
164
165/* QPN[m+n:1] QW 1, OFFSET 1 */
166#define QPN_SELECT_OFFSET ((1ull << QW_SHIFT) | (1ull))
167
168/* defines to build power on SC2VL table */
169#define SC2VL_VAL( \
170 num, \
171 sc0, sc0val, \
172 sc1, sc1val, \
173 sc2, sc2val, \
174 sc3, sc3val, \
175 sc4, sc4val, \
176 sc5, sc5val, \
177 sc6, sc6val, \
178 sc7, sc7val) \
179( \
180 ((u64)(sc0val) << SEND_SC2VLT##num##_SC##sc0##_SHIFT) | \
181 ((u64)(sc1val) << SEND_SC2VLT##num##_SC##sc1##_SHIFT) | \
182 ((u64)(sc2val) << SEND_SC2VLT##num##_SC##sc2##_SHIFT) | \
183 ((u64)(sc3val) << SEND_SC2VLT##num##_SC##sc3##_SHIFT) | \
184 ((u64)(sc4val) << SEND_SC2VLT##num##_SC##sc4##_SHIFT) | \
185 ((u64)(sc5val) << SEND_SC2VLT##num##_SC##sc5##_SHIFT) | \
186 ((u64)(sc6val) << SEND_SC2VLT##num##_SC##sc6##_SHIFT) | \
187 ((u64)(sc7val) << SEND_SC2VLT##num##_SC##sc7##_SHIFT) \
188)
189
190#define DC_SC_VL_VAL( \
191 range, \
192 e0, e0val, \
193 e1, e1val, \
194 e2, e2val, \
195 e3, e3val, \
196 e4, e4val, \
197 e5, e5val, \
198 e6, e6val, \
199 e7, e7val, \
200 e8, e8val, \
201 e9, e9val, \
202 e10, e10val, \
203 e11, e11val, \
204 e12, e12val, \
205 e13, e13val, \
206 e14, e14val, \
207 e15, e15val) \
208( \
209 ((u64)(e0val) << DCC_CFG_SC_VL_TABLE_##range##_ENTRY##e0##_SHIFT) | \
210 ((u64)(e1val) << DCC_CFG_SC_VL_TABLE_##range##_ENTRY##e1##_SHIFT) | \
211 ((u64)(e2val) << DCC_CFG_SC_VL_TABLE_##range##_ENTRY##e2##_SHIFT) | \
212 ((u64)(e3val) << DCC_CFG_SC_VL_TABLE_##range##_ENTRY##e3##_SHIFT) | \
213 ((u64)(e4val) << DCC_CFG_SC_VL_TABLE_##range##_ENTRY##e4##_SHIFT) | \
214 ((u64)(e5val) << DCC_CFG_SC_VL_TABLE_##range##_ENTRY##e5##_SHIFT) | \
215 ((u64)(e6val) << DCC_CFG_SC_VL_TABLE_##range##_ENTRY##e6##_SHIFT) | \
216 ((u64)(e7val) << DCC_CFG_SC_VL_TABLE_##range##_ENTRY##e7##_SHIFT) | \
217 ((u64)(e8val) << DCC_CFG_SC_VL_TABLE_##range##_ENTRY##e8##_SHIFT) | \
218 ((u64)(e9val) << DCC_CFG_SC_VL_TABLE_##range##_ENTRY##e9##_SHIFT) | \
219 ((u64)(e10val) << DCC_CFG_SC_VL_TABLE_##range##_ENTRY##e10##_SHIFT) | \
220 ((u64)(e11val) << DCC_CFG_SC_VL_TABLE_##range##_ENTRY##e11##_SHIFT) | \
221 ((u64)(e12val) << DCC_CFG_SC_VL_TABLE_##range##_ENTRY##e12##_SHIFT) | \
222 ((u64)(e13val) << DCC_CFG_SC_VL_TABLE_##range##_ENTRY##e13##_SHIFT) | \
223 ((u64)(e14val) << DCC_CFG_SC_VL_TABLE_##range##_ENTRY##e14##_SHIFT) | \
224 ((u64)(e15val) << DCC_CFG_SC_VL_TABLE_##range##_ENTRY##e15##_SHIFT) \
225)
226
227/* all CceStatus sub-block freeze bits */
228#define ALL_FROZE (CCE_STATUS_SDMA_FROZE_SMASK \
229 | CCE_STATUS_RXE_FROZE_SMASK \
230 | CCE_STATUS_TXE_FROZE_SMASK \
231 | CCE_STATUS_TXE_PIO_FROZE_SMASK)
232/* all CceStatus sub-block TXE pause bits */
233#define ALL_TXE_PAUSE (CCE_STATUS_TXE_PIO_PAUSED_SMASK \
234 | CCE_STATUS_TXE_PAUSED_SMASK \
235 | CCE_STATUS_SDMA_PAUSED_SMASK)
236/* all CceStatus sub-block RXE pause bits */
237#define ALL_RXE_PAUSE CCE_STATUS_RXE_PAUSED_SMASK
238
239/*
240 * CCE Error flags.
241 */
242static struct flag_table cce_err_status_flags[] = {
243/* 0*/ FLAG_ENTRY0("CceCsrParityErr",
244 CCE_ERR_STATUS_CCE_CSR_PARITY_ERR_SMASK),
245/* 1*/ FLAG_ENTRY0("CceCsrReadBadAddrErr",
246 CCE_ERR_STATUS_CCE_CSR_READ_BAD_ADDR_ERR_SMASK),
247/* 2*/ FLAG_ENTRY0("CceCsrWriteBadAddrErr",
248 CCE_ERR_STATUS_CCE_CSR_WRITE_BAD_ADDR_ERR_SMASK),
249/* 3*/ FLAG_ENTRY0("CceTrgtAsyncFifoParityErr",
250 CCE_ERR_STATUS_CCE_TRGT_ASYNC_FIFO_PARITY_ERR_SMASK),
251/* 4*/ FLAG_ENTRY0("CceTrgtAccessErr",
252 CCE_ERR_STATUS_CCE_TRGT_ACCESS_ERR_SMASK),
253/* 5*/ FLAG_ENTRY0("CceRspdDataParityErr",
254 CCE_ERR_STATUS_CCE_RSPD_DATA_PARITY_ERR_SMASK),
255/* 6*/ FLAG_ENTRY0("CceCli0AsyncFifoParityErr",
256 CCE_ERR_STATUS_CCE_CLI0_ASYNC_FIFO_PARITY_ERR_SMASK),
257/* 7*/ FLAG_ENTRY0("CceCsrCfgBusParityErr",
258 CCE_ERR_STATUS_CCE_CSR_CFG_BUS_PARITY_ERR_SMASK),
259/* 8*/ FLAG_ENTRY0("CceCli2AsyncFifoParityErr",
260 CCE_ERR_STATUS_CCE_CLI2_ASYNC_FIFO_PARITY_ERR_SMASK),
261/* 9*/ FLAG_ENTRY0("CceCli1AsyncFifoPioCrdtParityErr",
262 CCE_ERR_STATUS_CCE_CLI1_ASYNC_FIFO_PIO_CRDT_PARITY_ERR_SMASK),
263/*10*/ FLAG_ENTRY0("CceCli1AsyncFifoPioCrdtParityErr",
264 CCE_ERR_STATUS_CCE_CLI1_ASYNC_FIFO_SDMA_HD_PARITY_ERR_SMASK),
265/*11*/ FLAG_ENTRY0("CceCli1AsyncFifoRxdmaParityError",
266 CCE_ERR_STATUS_CCE_CLI1_ASYNC_FIFO_RXDMA_PARITY_ERROR_SMASK),
267/*12*/ FLAG_ENTRY0("CceCli1AsyncFifoDbgParityError",
268 CCE_ERR_STATUS_CCE_CLI1_ASYNC_FIFO_DBG_PARITY_ERROR_SMASK),
269/*13*/ FLAG_ENTRY0("PcicRetryMemCorErr",
270 CCE_ERR_STATUS_PCIC_RETRY_MEM_COR_ERR_SMASK),
271/*14*/ FLAG_ENTRY0("PcicRetryMemCorErr",
272 CCE_ERR_STATUS_PCIC_RETRY_SOT_MEM_COR_ERR_SMASK),
273/*15*/ FLAG_ENTRY0("PcicPostHdQCorErr",
274 CCE_ERR_STATUS_PCIC_POST_HD_QCOR_ERR_SMASK),
275/*16*/ FLAG_ENTRY0("PcicPostHdQCorErr",
276 CCE_ERR_STATUS_PCIC_POST_DAT_QCOR_ERR_SMASK),
277/*17*/ FLAG_ENTRY0("PcicPostHdQCorErr",
278 CCE_ERR_STATUS_PCIC_CPL_HD_QCOR_ERR_SMASK),
279/*18*/ FLAG_ENTRY0("PcicCplDatQCorErr",
280 CCE_ERR_STATUS_PCIC_CPL_DAT_QCOR_ERR_SMASK),
281/*19*/ FLAG_ENTRY0("PcicNPostHQParityErr",
282 CCE_ERR_STATUS_PCIC_NPOST_HQ_PARITY_ERR_SMASK),
283/*20*/ FLAG_ENTRY0("PcicNPostDatQParityErr",
284 CCE_ERR_STATUS_PCIC_NPOST_DAT_QPARITY_ERR_SMASK),
285/*21*/ FLAG_ENTRY0("PcicRetryMemUncErr",
286 CCE_ERR_STATUS_PCIC_RETRY_MEM_UNC_ERR_SMASK),
287/*22*/ FLAG_ENTRY0("PcicRetrySotMemUncErr",
288 CCE_ERR_STATUS_PCIC_RETRY_SOT_MEM_UNC_ERR_SMASK),
289/*23*/ FLAG_ENTRY0("PcicPostHdQUncErr",
290 CCE_ERR_STATUS_PCIC_POST_HD_QUNC_ERR_SMASK),
291/*24*/ FLAG_ENTRY0("PcicPostDatQUncErr",
292 CCE_ERR_STATUS_PCIC_POST_DAT_QUNC_ERR_SMASK),
293/*25*/ FLAG_ENTRY0("PcicCplHdQUncErr",
294 CCE_ERR_STATUS_PCIC_CPL_HD_QUNC_ERR_SMASK),
295/*26*/ FLAG_ENTRY0("PcicCplDatQUncErr",
296 CCE_ERR_STATUS_PCIC_CPL_DAT_QUNC_ERR_SMASK),
297/*27*/ FLAG_ENTRY0("PcicTransmitFrontParityErr",
298 CCE_ERR_STATUS_PCIC_TRANSMIT_FRONT_PARITY_ERR_SMASK),
299/*28*/ FLAG_ENTRY0("PcicTransmitBackParityErr",
300 CCE_ERR_STATUS_PCIC_TRANSMIT_BACK_PARITY_ERR_SMASK),
301/*29*/ FLAG_ENTRY0("PcicReceiveParityErr",
302 CCE_ERR_STATUS_PCIC_RECEIVE_PARITY_ERR_SMASK),
303/*30*/ FLAG_ENTRY0("CceTrgtCplTimeoutErr",
304 CCE_ERR_STATUS_CCE_TRGT_CPL_TIMEOUT_ERR_SMASK),
305/*31*/ FLAG_ENTRY0("LATriggered",
306 CCE_ERR_STATUS_LA_TRIGGERED_SMASK),
307/*32*/ FLAG_ENTRY0("CceSegReadBadAddrErr",
308 CCE_ERR_STATUS_CCE_SEG_READ_BAD_ADDR_ERR_SMASK),
309/*33*/ FLAG_ENTRY0("CceSegWriteBadAddrErr",
310 CCE_ERR_STATUS_CCE_SEG_WRITE_BAD_ADDR_ERR_SMASK),
311/*34*/ FLAG_ENTRY0("CceRcplAsyncFifoParityErr",
312 CCE_ERR_STATUS_CCE_RCPL_ASYNC_FIFO_PARITY_ERR_SMASK),
313/*35*/ FLAG_ENTRY0("CceRxdmaConvFifoParityErr",
314 CCE_ERR_STATUS_CCE_RXDMA_CONV_FIFO_PARITY_ERR_SMASK),
315/*36*/ FLAG_ENTRY0("CceMsixTableCorErr",
316 CCE_ERR_STATUS_CCE_MSIX_TABLE_COR_ERR_SMASK),
317/*37*/ FLAG_ENTRY0("CceMsixTableUncErr",
318 CCE_ERR_STATUS_CCE_MSIX_TABLE_UNC_ERR_SMASK),
319/*38*/ FLAG_ENTRY0("CceIntMapCorErr",
320 CCE_ERR_STATUS_CCE_INT_MAP_COR_ERR_SMASK),
321/*39*/ FLAG_ENTRY0("CceIntMapUncErr",
322 CCE_ERR_STATUS_CCE_INT_MAP_UNC_ERR_SMASK),
323/*40*/ FLAG_ENTRY0("CceMsixCsrParityErr",
324 CCE_ERR_STATUS_CCE_MSIX_CSR_PARITY_ERR_SMASK),
325/*41-63 reserved*/
326};
327
328/*
329 * Misc Error flags
330 */
331#define MES(text) MISC_ERR_STATUS_MISC_##text##_ERR_SMASK
332static struct flag_table misc_err_status_flags[] = {
333/* 0*/ FLAG_ENTRY0("CSR_PARITY", MES(CSR_PARITY)),
334/* 1*/ FLAG_ENTRY0("CSR_READ_BAD_ADDR", MES(CSR_READ_BAD_ADDR)),
335/* 2*/ FLAG_ENTRY0("CSR_WRITE_BAD_ADDR", MES(CSR_WRITE_BAD_ADDR)),
336/* 3*/ FLAG_ENTRY0("SBUS_WRITE_FAILED", MES(SBUS_WRITE_FAILED)),
337/* 4*/ FLAG_ENTRY0("KEY_MISMATCH", MES(KEY_MISMATCH)),
338/* 5*/ FLAG_ENTRY0("FW_AUTH_FAILED", MES(FW_AUTH_FAILED)),
339/* 6*/ FLAG_ENTRY0("EFUSE_CSR_PARITY", MES(EFUSE_CSR_PARITY)),
340/* 7*/ FLAG_ENTRY0("EFUSE_READ_BAD_ADDR", MES(EFUSE_READ_BAD_ADDR)),
341/* 8*/ FLAG_ENTRY0("EFUSE_WRITE", MES(EFUSE_WRITE)),
342/* 9*/ FLAG_ENTRY0("EFUSE_DONE_PARITY", MES(EFUSE_DONE_PARITY)),
343/*10*/ FLAG_ENTRY0("INVALID_EEP_CMD", MES(INVALID_EEP_CMD)),
344/*11*/ FLAG_ENTRY0("MBIST_FAIL", MES(MBIST_FAIL)),
345/*12*/ FLAG_ENTRY0("PLL_LOCK_FAIL", MES(PLL_LOCK_FAIL))
346};
347
348/*
349 * TXE PIO Error flags and consequences
350 */
351static struct flag_table pio_err_status_flags[] = {
352/* 0*/ FLAG_ENTRY("PioWriteBadCtxt",
353 SEC_WRITE_DROPPED,
354 SEND_PIO_ERR_STATUS_PIO_WRITE_BAD_CTXT_ERR_SMASK),
355/* 1*/ FLAG_ENTRY("PioWriteAddrParity",
356 SEC_SPC_FREEZE,
357 SEND_PIO_ERR_STATUS_PIO_WRITE_ADDR_PARITY_ERR_SMASK),
358/* 2*/ FLAG_ENTRY("PioCsrParity",
359 SEC_SPC_FREEZE,
360 SEND_PIO_ERR_STATUS_PIO_CSR_PARITY_ERR_SMASK),
361/* 3*/ FLAG_ENTRY("PioSbMemFifo0",
362 SEC_SPC_FREEZE,
363 SEND_PIO_ERR_STATUS_PIO_SB_MEM_FIFO0_ERR_SMASK),
364/* 4*/ FLAG_ENTRY("PioSbMemFifo1",
365 SEC_SPC_FREEZE,
366 SEND_PIO_ERR_STATUS_PIO_SB_MEM_FIFO1_ERR_SMASK),
367/* 5*/ FLAG_ENTRY("PioPccFifoParity",
368 SEC_SPC_FREEZE,
369 SEND_PIO_ERR_STATUS_PIO_PCC_FIFO_PARITY_ERR_SMASK),
370/* 6*/ FLAG_ENTRY("PioPecFifoParity",
371 SEC_SPC_FREEZE,
372 SEND_PIO_ERR_STATUS_PIO_PEC_FIFO_PARITY_ERR_SMASK),
373/* 7*/ FLAG_ENTRY("PioSbrdctlCrrelParity",
374 SEC_SPC_FREEZE,
375 SEND_PIO_ERR_STATUS_PIO_SBRDCTL_CRREL_PARITY_ERR_SMASK),
376/* 8*/ FLAG_ENTRY("PioSbrdctrlCrrelFifoParity",
377 SEC_SPC_FREEZE,
378 SEND_PIO_ERR_STATUS_PIO_SBRDCTRL_CRREL_FIFO_PARITY_ERR_SMASK),
379/* 9*/ FLAG_ENTRY("PioPktEvictFifoParityErr",
380 SEC_SPC_FREEZE,
381 SEND_PIO_ERR_STATUS_PIO_PKT_EVICT_FIFO_PARITY_ERR_SMASK),
382/*10*/ FLAG_ENTRY("PioSmPktResetParity",
383 SEC_SPC_FREEZE,
384 SEND_PIO_ERR_STATUS_PIO_SM_PKT_RESET_PARITY_ERR_SMASK),
385/*11*/ FLAG_ENTRY("PioVlLenMemBank0Unc",
386 SEC_SPC_FREEZE,
387 SEND_PIO_ERR_STATUS_PIO_VL_LEN_MEM_BANK0_UNC_ERR_SMASK),
388/*12*/ FLAG_ENTRY("PioVlLenMemBank1Unc",
389 SEC_SPC_FREEZE,
390 SEND_PIO_ERR_STATUS_PIO_VL_LEN_MEM_BANK1_UNC_ERR_SMASK),
391/*13*/ FLAG_ENTRY("PioVlLenMemBank0Cor",
392 0,
393 SEND_PIO_ERR_STATUS_PIO_VL_LEN_MEM_BANK0_COR_ERR_SMASK),
394/*14*/ FLAG_ENTRY("PioVlLenMemBank1Cor",
395 0,
396 SEND_PIO_ERR_STATUS_PIO_VL_LEN_MEM_BANK1_COR_ERR_SMASK),
397/*15*/ FLAG_ENTRY("PioCreditRetFifoParity",
398 SEC_SPC_FREEZE,
399 SEND_PIO_ERR_STATUS_PIO_CREDIT_RET_FIFO_PARITY_ERR_SMASK),
400/*16*/ FLAG_ENTRY("PioPpmcPblFifo",
401 SEC_SPC_FREEZE,
402 SEND_PIO_ERR_STATUS_PIO_PPMC_PBL_FIFO_ERR_SMASK),
403/*17*/ FLAG_ENTRY("PioInitSmIn",
404 0,
405 SEND_PIO_ERR_STATUS_PIO_INIT_SM_IN_ERR_SMASK),
406/*18*/ FLAG_ENTRY("PioPktEvictSmOrArbSm",
407 SEC_SPC_FREEZE,
408 SEND_PIO_ERR_STATUS_PIO_PKT_EVICT_SM_OR_ARB_SM_ERR_SMASK),
409/*19*/ FLAG_ENTRY("PioHostAddrMemUnc",
410 SEC_SPC_FREEZE,
411 SEND_PIO_ERR_STATUS_PIO_HOST_ADDR_MEM_UNC_ERR_SMASK),
412/*20*/ FLAG_ENTRY("PioHostAddrMemCor",
413 0,
414 SEND_PIO_ERR_STATUS_PIO_HOST_ADDR_MEM_COR_ERR_SMASK),
415/*21*/ FLAG_ENTRY("PioWriteDataParity",
416 SEC_SPC_FREEZE,
417 SEND_PIO_ERR_STATUS_PIO_WRITE_DATA_PARITY_ERR_SMASK),
418/*22*/ FLAG_ENTRY("PioStateMachine",
419 SEC_SPC_FREEZE,
420 SEND_PIO_ERR_STATUS_PIO_STATE_MACHINE_ERR_SMASK),
421/*23*/ FLAG_ENTRY("PioWriteQwValidParity",
422 SEC_WRITE_DROPPED|SEC_SPC_FREEZE,
423 SEND_PIO_ERR_STATUS_PIO_WRITE_QW_VALID_PARITY_ERR_SMASK),
424/*24*/ FLAG_ENTRY("PioBlockQwCountParity",
425 SEC_WRITE_DROPPED|SEC_SPC_FREEZE,
426 SEND_PIO_ERR_STATUS_PIO_BLOCK_QW_COUNT_PARITY_ERR_SMASK),
427/*25*/ FLAG_ENTRY("PioVlfVlLenParity",
428 SEC_SPC_FREEZE,
429 SEND_PIO_ERR_STATUS_PIO_VLF_VL_LEN_PARITY_ERR_SMASK),
430/*26*/ FLAG_ENTRY("PioVlfSopParity",
431 SEC_SPC_FREEZE,
432 SEND_PIO_ERR_STATUS_PIO_VLF_SOP_PARITY_ERR_SMASK),
433/*27*/ FLAG_ENTRY("PioVlFifoParity",
434 SEC_SPC_FREEZE,
435 SEND_PIO_ERR_STATUS_PIO_VL_FIFO_PARITY_ERR_SMASK),
436/*28*/ FLAG_ENTRY("PioPpmcBqcMemParity",
437 SEC_SPC_FREEZE,
438 SEND_PIO_ERR_STATUS_PIO_PPMC_BQC_MEM_PARITY_ERR_SMASK),
439/*29*/ FLAG_ENTRY("PioPpmcSopLen",
440 SEC_SPC_FREEZE,
441 SEND_PIO_ERR_STATUS_PIO_PPMC_SOP_LEN_ERR_SMASK),
442/*30-31 reserved*/
443/*32*/ FLAG_ENTRY("PioCurrentFreeCntParity",
444 SEC_SPC_FREEZE,
445 SEND_PIO_ERR_STATUS_PIO_CURRENT_FREE_CNT_PARITY_ERR_SMASK),
446/*33*/ FLAG_ENTRY("PioLastReturnedCntParity",
447 SEC_SPC_FREEZE,
448 SEND_PIO_ERR_STATUS_PIO_LAST_RETURNED_CNT_PARITY_ERR_SMASK),
449/*34*/ FLAG_ENTRY("PioPccSopHeadParity",
450 SEC_SPC_FREEZE,
451 SEND_PIO_ERR_STATUS_PIO_PCC_SOP_HEAD_PARITY_ERR_SMASK),
452/*35*/ FLAG_ENTRY("PioPecSopHeadParityErr",
453 SEC_SPC_FREEZE,
454 SEND_PIO_ERR_STATUS_PIO_PEC_SOP_HEAD_PARITY_ERR_SMASK),
455/*36-63 reserved*/
456};
457
458/* TXE PIO errors that cause an SPC freeze */
459#define ALL_PIO_FREEZE_ERR \
460 (SEND_PIO_ERR_STATUS_PIO_WRITE_ADDR_PARITY_ERR_SMASK \
461 | SEND_PIO_ERR_STATUS_PIO_CSR_PARITY_ERR_SMASK \
462 | SEND_PIO_ERR_STATUS_PIO_SB_MEM_FIFO0_ERR_SMASK \
463 | SEND_PIO_ERR_STATUS_PIO_SB_MEM_FIFO1_ERR_SMASK \
464 | SEND_PIO_ERR_STATUS_PIO_PCC_FIFO_PARITY_ERR_SMASK \
465 | SEND_PIO_ERR_STATUS_PIO_PEC_FIFO_PARITY_ERR_SMASK \
466 | SEND_PIO_ERR_STATUS_PIO_SBRDCTL_CRREL_PARITY_ERR_SMASK \
467 | SEND_PIO_ERR_STATUS_PIO_SBRDCTRL_CRREL_FIFO_PARITY_ERR_SMASK \
468 | SEND_PIO_ERR_STATUS_PIO_PKT_EVICT_FIFO_PARITY_ERR_SMASK \
469 | SEND_PIO_ERR_STATUS_PIO_SM_PKT_RESET_PARITY_ERR_SMASK \
470 | SEND_PIO_ERR_STATUS_PIO_VL_LEN_MEM_BANK0_UNC_ERR_SMASK \
471 | SEND_PIO_ERR_STATUS_PIO_VL_LEN_MEM_BANK1_UNC_ERR_SMASK \
472 | SEND_PIO_ERR_STATUS_PIO_CREDIT_RET_FIFO_PARITY_ERR_SMASK \
473 | SEND_PIO_ERR_STATUS_PIO_PPMC_PBL_FIFO_ERR_SMASK \
474 | SEND_PIO_ERR_STATUS_PIO_PKT_EVICT_SM_OR_ARB_SM_ERR_SMASK \
475 | SEND_PIO_ERR_STATUS_PIO_HOST_ADDR_MEM_UNC_ERR_SMASK \
476 | SEND_PIO_ERR_STATUS_PIO_WRITE_DATA_PARITY_ERR_SMASK \
477 | SEND_PIO_ERR_STATUS_PIO_STATE_MACHINE_ERR_SMASK \
478 | SEND_PIO_ERR_STATUS_PIO_WRITE_QW_VALID_PARITY_ERR_SMASK \
479 | SEND_PIO_ERR_STATUS_PIO_BLOCK_QW_COUNT_PARITY_ERR_SMASK \
480 | SEND_PIO_ERR_STATUS_PIO_VLF_VL_LEN_PARITY_ERR_SMASK \
481 | SEND_PIO_ERR_STATUS_PIO_VLF_SOP_PARITY_ERR_SMASK \
482 | SEND_PIO_ERR_STATUS_PIO_VL_FIFO_PARITY_ERR_SMASK \
483 | SEND_PIO_ERR_STATUS_PIO_PPMC_BQC_MEM_PARITY_ERR_SMASK \
484 | SEND_PIO_ERR_STATUS_PIO_PPMC_SOP_LEN_ERR_SMASK \
485 | SEND_PIO_ERR_STATUS_PIO_CURRENT_FREE_CNT_PARITY_ERR_SMASK \
486 | SEND_PIO_ERR_STATUS_PIO_LAST_RETURNED_CNT_PARITY_ERR_SMASK \
487 | SEND_PIO_ERR_STATUS_PIO_PCC_SOP_HEAD_PARITY_ERR_SMASK \
488 | SEND_PIO_ERR_STATUS_PIO_PEC_SOP_HEAD_PARITY_ERR_SMASK)
489
490/*
491 * TXE SDMA Error flags
492 */
493static struct flag_table sdma_err_status_flags[] = {
494/* 0*/ FLAG_ENTRY0("SDmaRpyTagErr",
495 SEND_DMA_ERR_STATUS_SDMA_RPY_TAG_ERR_SMASK),
496/* 1*/ FLAG_ENTRY0("SDmaCsrParityErr",
497 SEND_DMA_ERR_STATUS_SDMA_CSR_PARITY_ERR_SMASK),
498/* 2*/ FLAG_ENTRY0("SDmaPcieReqTrackingUncErr",
499 SEND_DMA_ERR_STATUS_SDMA_PCIE_REQ_TRACKING_UNC_ERR_SMASK),
500/* 3*/ FLAG_ENTRY0("SDmaPcieReqTrackingCorErr",
501 SEND_DMA_ERR_STATUS_SDMA_PCIE_REQ_TRACKING_COR_ERR_SMASK),
502/*04-63 reserved*/
503};
504
505/* TXE SDMA errors that cause an SPC freeze */
506#define ALL_SDMA_FREEZE_ERR \
507 (SEND_DMA_ERR_STATUS_SDMA_RPY_TAG_ERR_SMASK \
508 | SEND_DMA_ERR_STATUS_SDMA_CSR_PARITY_ERR_SMASK \
509 | SEND_DMA_ERR_STATUS_SDMA_PCIE_REQ_TRACKING_UNC_ERR_SMASK)
510
511/*
512 * TXE Egress Error flags
513 */
514#define SEES(text) SEND_EGRESS_ERR_STATUS_##text##_ERR_SMASK
515static struct flag_table egress_err_status_flags[] = {
516/* 0*/ FLAG_ENTRY0("TxPktIntegrityMemCorErr", SEES(TX_PKT_INTEGRITY_MEM_COR)),
517/* 1*/ FLAG_ENTRY0("TxPktIntegrityMemUncErr", SEES(TX_PKT_INTEGRITY_MEM_UNC)),
518/* 2 reserved */
519/* 3*/ FLAG_ENTRY0("TxEgressFifoUnderrunOrParityErr",
520 SEES(TX_EGRESS_FIFO_UNDERRUN_OR_PARITY)),
521/* 4*/ FLAG_ENTRY0("TxLinkdownErr", SEES(TX_LINKDOWN)),
522/* 5*/ FLAG_ENTRY0("TxIncorrectLinkStateErr", SEES(TX_INCORRECT_LINK_STATE)),
523/* 6 reserved */
524/* 7*/ FLAG_ENTRY0("TxPioLaunchIntfParityErr",
525 SEES(TX_PIO_LAUNCH_INTF_PARITY)),
526/* 8*/ FLAG_ENTRY0("TxSdmaLaunchIntfParityErr",
527 SEES(TX_SDMA_LAUNCH_INTF_PARITY)),
528/* 9-10 reserved */
529/*11*/ FLAG_ENTRY0("TxSbrdCtlStateMachineParityErr",
530 SEES(TX_SBRD_CTL_STATE_MACHINE_PARITY)),
531/*12*/ FLAG_ENTRY0("TxIllegalVLErr", SEES(TX_ILLEGAL_VL)),
532/*13*/ FLAG_ENTRY0("TxLaunchCsrParityErr", SEES(TX_LAUNCH_CSR_PARITY)),
533/*14*/ FLAG_ENTRY0("TxSbrdCtlCsrParityErr", SEES(TX_SBRD_CTL_CSR_PARITY)),
534/*15*/ FLAG_ENTRY0("TxConfigParityErr", SEES(TX_CONFIG_PARITY)),
535/*16*/ FLAG_ENTRY0("TxSdma0DisallowedPacketErr",
536 SEES(TX_SDMA0_DISALLOWED_PACKET)),
537/*17*/ FLAG_ENTRY0("TxSdma1DisallowedPacketErr",
538 SEES(TX_SDMA1_DISALLOWED_PACKET)),
539/*18*/ FLAG_ENTRY0("TxSdma2DisallowedPacketErr",
540 SEES(TX_SDMA2_DISALLOWED_PACKET)),
541/*19*/ FLAG_ENTRY0("TxSdma3DisallowedPacketErr",
542 SEES(TX_SDMA3_DISALLOWED_PACKET)),
543/*20*/ FLAG_ENTRY0("TxSdma4DisallowedPacketErr",
544 SEES(TX_SDMA4_DISALLOWED_PACKET)),
545/*21*/ FLAG_ENTRY0("TxSdma5DisallowedPacketErr",
546 SEES(TX_SDMA5_DISALLOWED_PACKET)),
547/*22*/ FLAG_ENTRY0("TxSdma6DisallowedPacketErr",
548 SEES(TX_SDMA6_DISALLOWED_PACKET)),
549/*23*/ FLAG_ENTRY0("TxSdma7DisallowedPacketErr",
550 SEES(TX_SDMA7_DISALLOWED_PACKET)),
551/*24*/ FLAG_ENTRY0("TxSdma8DisallowedPacketErr",
552 SEES(TX_SDMA8_DISALLOWED_PACKET)),
553/*25*/ FLAG_ENTRY0("TxSdma9DisallowedPacketErr",
554 SEES(TX_SDMA9_DISALLOWED_PACKET)),
555/*26*/ FLAG_ENTRY0("TxSdma10DisallowedPacketErr",
556 SEES(TX_SDMA10_DISALLOWED_PACKET)),
557/*27*/ FLAG_ENTRY0("TxSdma11DisallowedPacketErr",
558 SEES(TX_SDMA11_DISALLOWED_PACKET)),
559/*28*/ FLAG_ENTRY0("TxSdma12DisallowedPacketErr",
560 SEES(TX_SDMA12_DISALLOWED_PACKET)),
561/*29*/ FLAG_ENTRY0("TxSdma13DisallowedPacketErr",
562 SEES(TX_SDMA13_DISALLOWED_PACKET)),
563/*30*/ FLAG_ENTRY0("TxSdma14DisallowedPacketErr",
564 SEES(TX_SDMA14_DISALLOWED_PACKET)),
565/*31*/ FLAG_ENTRY0("TxSdma15DisallowedPacketErr",
566 SEES(TX_SDMA15_DISALLOWED_PACKET)),
567/*32*/ FLAG_ENTRY0("TxLaunchFifo0UncOrParityErr",
568 SEES(TX_LAUNCH_FIFO0_UNC_OR_PARITY)),
569/*33*/ FLAG_ENTRY0("TxLaunchFifo1UncOrParityErr",
570 SEES(TX_LAUNCH_FIFO1_UNC_OR_PARITY)),
571/*34*/ FLAG_ENTRY0("TxLaunchFifo2UncOrParityErr",
572 SEES(TX_LAUNCH_FIFO2_UNC_OR_PARITY)),
573/*35*/ FLAG_ENTRY0("TxLaunchFifo3UncOrParityErr",
574 SEES(TX_LAUNCH_FIFO3_UNC_OR_PARITY)),
575/*36*/ FLAG_ENTRY0("TxLaunchFifo4UncOrParityErr",
576 SEES(TX_LAUNCH_FIFO4_UNC_OR_PARITY)),
577/*37*/ FLAG_ENTRY0("TxLaunchFifo5UncOrParityErr",
578 SEES(TX_LAUNCH_FIFO5_UNC_OR_PARITY)),
579/*38*/ FLAG_ENTRY0("TxLaunchFifo6UncOrParityErr",
580 SEES(TX_LAUNCH_FIFO6_UNC_OR_PARITY)),
581/*39*/ FLAG_ENTRY0("TxLaunchFifo7UncOrParityErr",
582 SEES(TX_LAUNCH_FIFO7_UNC_OR_PARITY)),
583/*40*/ FLAG_ENTRY0("TxLaunchFifo8UncOrParityErr",
584 SEES(TX_LAUNCH_FIFO8_UNC_OR_PARITY)),
585/*41*/ FLAG_ENTRY0("TxCreditReturnParityErr", SEES(TX_CREDIT_RETURN_PARITY)),
586/*42*/ FLAG_ENTRY0("TxSbHdrUncErr", SEES(TX_SB_HDR_UNC)),
587/*43*/ FLAG_ENTRY0("TxReadSdmaMemoryUncErr", SEES(TX_READ_SDMA_MEMORY_UNC)),
588/*44*/ FLAG_ENTRY0("TxReadPioMemoryUncErr", SEES(TX_READ_PIO_MEMORY_UNC)),
589/*45*/ FLAG_ENTRY0("TxEgressFifoUncErr", SEES(TX_EGRESS_FIFO_UNC)),
590/*46*/ FLAG_ENTRY0("TxHcrcInsertionErr", SEES(TX_HCRC_INSERTION)),
591/*47*/ FLAG_ENTRY0("TxCreditReturnVLErr", SEES(TX_CREDIT_RETURN_VL)),
592/*48*/ FLAG_ENTRY0("TxLaunchFifo0CorErr", SEES(TX_LAUNCH_FIFO0_COR)),
593/*49*/ FLAG_ENTRY0("TxLaunchFifo1CorErr", SEES(TX_LAUNCH_FIFO1_COR)),
594/*50*/ FLAG_ENTRY0("TxLaunchFifo2CorErr", SEES(TX_LAUNCH_FIFO2_COR)),
595/*51*/ FLAG_ENTRY0("TxLaunchFifo3CorErr", SEES(TX_LAUNCH_FIFO3_COR)),
596/*52*/ FLAG_ENTRY0("TxLaunchFifo4CorErr", SEES(TX_LAUNCH_FIFO4_COR)),
597/*53*/ FLAG_ENTRY0("TxLaunchFifo5CorErr", SEES(TX_LAUNCH_FIFO5_COR)),
598/*54*/ FLAG_ENTRY0("TxLaunchFifo6CorErr", SEES(TX_LAUNCH_FIFO6_COR)),
599/*55*/ FLAG_ENTRY0("TxLaunchFifo7CorErr", SEES(TX_LAUNCH_FIFO7_COR)),
600/*56*/ FLAG_ENTRY0("TxLaunchFifo8CorErr", SEES(TX_LAUNCH_FIFO8_COR)),
601/*57*/ FLAG_ENTRY0("TxCreditOverrunErr", SEES(TX_CREDIT_OVERRUN)),
602/*58*/ FLAG_ENTRY0("TxSbHdrCorErr", SEES(TX_SB_HDR_COR)),
603/*59*/ FLAG_ENTRY0("TxReadSdmaMemoryCorErr", SEES(TX_READ_SDMA_MEMORY_COR)),
604/*60*/ FLAG_ENTRY0("TxReadPioMemoryCorErr", SEES(TX_READ_PIO_MEMORY_COR)),
605/*61*/ FLAG_ENTRY0("TxEgressFifoCorErr", SEES(TX_EGRESS_FIFO_COR)),
606/*62*/ FLAG_ENTRY0("TxReadSdmaMemoryCsrUncErr",
607 SEES(TX_READ_SDMA_MEMORY_CSR_UNC)),
608/*63*/ FLAG_ENTRY0("TxReadPioMemoryCsrUncErr",
609 SEES(TX_READ_PIO_MEMORY_CSR_UNC)),
610};
611
612/*
613 * TXE Egress Error Info flags
614 */
615#define SEEI(text) SEND_EGRESS_ERR_INFO_##text##_ERR_SMASK
616static struct flag_table egress_err_info_flags[] = {
617/* 0*/ FLAG_ENTRY0("Reserved", 0ull),
618/* 1*/ FLAG_ENTRY0("VLErr", SEEI(VL)),
619/* 2*/ FLAG_ENTRY0("JobKeyErr", SEEI(JOB_KEY)),
620/* 3*/ FLAG_ENTRY0("JobKeyErr", SEEI(JOB_KEY)),
621/* 4*/ FLAG_ENTRY0("PartitionKeyErr", SEEI(PARTITION_KEY)),
622/* 5*/ FLAG_ENTRY0("SLIDErr", SEEI(SLID)),
623/* 6*/ FLAG_ENTRY0("OpcodeErr", SEEI(OPCODE)),
624/* 7*/ FLAG_ENTRY0("VLMappingErr", SEEI(VL_MAPPING)),
625/* 8*/ FLAG_ENTRY0("RawErr", SEEI(RAW)),
626/* 9*/ FLAG_ENTRY0("RawIPv6Err", SEEI(RAW_IPV6)),
627/*10*/ FLAG_ENTRY0("GRHErr", SEEI(GRH)),
628/*11*/ FLAG_ENTRY0("BypassErr", SEEI(BYPASS)),
629/*12*/ FLAG_ENTRY0("KDETHPacketsErr", SEEI(KDETH_PACKETS)),
630/*13*/ FLAG_ENTRY0("NonKDETHPacketsErr", SEEI(NON_KDETH_PACKETS)),
631/*14*/ FLAG_ENTRY0("TooSmallIBPacketsErr", SEEI(TOO_SMALL_IB_PACKETS)),
632/*15*/ FLAG_ENTRY0("TooSmallBypassPacketsErr", SEEI(TOO_SMALL_BYPASS_PACKETS)),
633/*16*/ FLAG_ENTRY0("PbcTestErr", SEEI(PBC_TEST)),
634/*17*/ FLAG_ENTRY0("BadPktLenErr", SEEI(BAD_PKT_LEN)),
635/*18*/ FLAG_ENTRY0("TooLongIBPacketErr", SEEI(TOO_LONG_IB_PACKET)),
636/*19*/ FLAG_ENTRY0("TooLongBypassPacketsErr", SEEI(TOO_LONG_BYPASS_PACKETS)),
637/*20*/ FLAG_ENTRY0("PbcStaticRateControlErr", SEEI(PBC_STATIC_RATE_CONTROL)),
638/*21*/ FLAG_ENTRY0("BypassBadPktLenErr", SEEI(BAD_PKT_LEN)),
639};
640
641/* TXE Egress errors that cause an SPC freeze */
642#define ALL_TXE_EGRESS_FREEZE_ERR \
643 (SEES(TX_EGRESS_FIFO_UNDERRUN_OR_PARITY) \
644 | SEES(TX_PIO_LAUNCH_INTF_PARITY) \
645 | SEES(TX_SDMA_LAUNCH_INTF_PARITY) \
646 | SEES(TX_SBRD_CTL_STATE_MACHINE_PARITY) \
647 | SEES(TX_LAUNCH_CSR_PARITY) \
648 | SEES(TX_SBRD_CTL_CSR_PARITY) \
649 | SEES(TX_CONFIG_PARITY) \
650 | SEES(TX_LAUNCH_FIFO0_UNC_OR_PARITY) \
651 | SEES(TX_LAUNCH_FIFO1_UNC_OR_PARITY) \
652 | SEES(TX_LAUNCH_FIFO2_UNC_OR_PARITY) \
653 | SEES(TX_LAUNCH_FIFO3_UNC_OR_PARITY) \
654 | SEES(TX_LAUNCH_FIFO4_UNC_OR_PARITY) \
655 | SEES(TX_LAUNCH_FIFO5_UNC_OR_PARITY) \
656 | SEES(TX_LAUNCH_FIFO6_UNC_OR_PARITY) \
657 | SEES(TX_LAUNCH_FIFO7_UNC_OR_PARITY) \
658 | SEES(TX_LAUNCH_FIFO8_UNC_OR_PARITY) \
659 | SEES(TX_CREDIT_RETURN_PARITY))
660
661/*
662 * TXE Send error flags
663 */
664#define SES(name) SEND_ERR_STATUS_SEND_##name##_ERR_SMASK
665static struct flag_table send_err_status_flags[] = {
666/* 0*/ FLAG_ENTRY0("SDmaRpyTagErr", SES(CSR_PARITY)),
667/* 1*/ FLAG_ENTRY0("SendCsrReadBadAddrErr", SES(CSR_READ_BAD_ADDR)),
668/* 2*/ FLAG_ENTRY0("SendCsrWriteBadAddrErr", SES(CSR_WRITE_BAD_ADDR))
669};
670
671/*
672 * TXE Send Context Error flags and consequences
673 */
674static struct flag_table sc_err_status_flags[] = {
675/* 0*/ FLAG_ENTRY("InconsistentSop",
676 SEC_PACKET_DROPPED | SEC_SC_HALTED,
677 SEND_CTXT_ERR_STATUS_PIO_INCONSISTENT_SOP_ERR_SMASK),
678/* 1*/ FLAG_ENTRY("DisallowedPacket",
679 SEC_PACKET_DROPPED | SEC_SC_HALTED,
680 SEND_CTXT_ERR_STATUS_PIO_DISALLOWED_PACKET_ERR_SMASK),
681/* 2*/ FLAG_ENTRY("WriteCrossesBoundary",
682 SEC_WRITE_DROPPED | SEC_SC_HALTED,
683 SEND_CTXT_ERR_STATUS_PIO_WRITE_CROSSES_BOUNDARY_ERR_SMASK),
684/* 3*/ FLAG_ENTRY("WriteOverflow",
685 SEC_WRITE_DROPPED | SEC_SC_HALTED,
686 SEND_CTXT_ERR_STATUS_PIO_WRITE_OVERFLOW_ERR_SMASK),
687/* 4*/ FLAG_ENTRY("WriteOutOfBounds",
688 SEC_WRITE_DROPPED | SEC_SC_HALTED,
689 SEND_CTXT_ERR_STATUS_PIO_WRITE_OUT_OF_BOUNDS_ERR_SMASK),
690/* 5-63 reserved*/
691};
692
693/*
694 * RXE Receive Error flags
695 */
696#define RXES(name) RCV_ERR_STATUS_RX_##name##_ERR_SMASK
697static struct flag_table rxe_err_status_flags[] = {
698/* 0*/ FLAG_ENTRY0("RxDmaCsrCorErr", RXES(DMA_CSR_COR)),
699/* 1*/ FLAG_ENTRY0("RxDcIntfParityErr", RXES(DC_INTF_PARITY)),
700/* 2*/ FLAG_ENTRY0("RxRcvHdrUncErr", RXES(RCV_HDR_UNC)),
701/* 3*/ FLAG_ENTRY0("RxRcvHdrCorErr", RXES(RCV_HDR_COR)),
702/* 4*/ FLAG_ENTRY0("RxRcvDataUncErr", RXES(RCV_DATA_UNC)),
703/* 5*/ FLAG_ENTRY0("RxRcvDataCorErr", RXES(RCV_DATA_COR)),
704/* 6*/ FLAG_ENTRY0("RxRcvQpMapTableUncErr", RXES(RCV_QP_MAP_TABLE_UNC)),
705/* 7*/ FLAG_ENTRY0("RxRcvQpMapTableCorErr", RXES(RCV_QP_MAP_TABLE_COR)),
706/* 8*/ FLAG_ENTRY0("RxRcvCsrParityErr", RXES(RCV_CSR_PARITY)),
707/* 9*/ FLAG_ENTRY0("RxDcSopEopParityErr", RXES(DC_SOP_EOP_PARITY)),
708/*10*/ FLAG_ENTRY0("RxDmaFlagUncErr", RXES(DMA_FLAG_UNC)),
709/*11*/ FLAG_ENTRY0("RxDmaFlagCorErr", RXES(DMA_FLAG_COR)),
710/*12*/ FLAG_ENTRY0("RxRcvFsmEncodingErr", RXES(RCV_FSM_ENCODING)),
711/*13*/ FLAG_ENTRY0("RxRbufFreeListUncErr", RXES(RBUF_FREE_LIST_UNC)),
712/*14*/ FLAG_ENTRY0("RxRbufFreeListCorErr", RXES(RBUF_FREE_LIST_COR)),
713/*15*/ FLAG_ENTRY0("RxRbufLookupDesRegUncErr", RXES(RBUF_LOOKUP_DES_REG_UNC)),
714/*16*/ FLAG_ENTRY0("RxRbufLookupDesRegUncCorErr",
715 RXES(RBUF_LOOKUP_DES_REG_UNC_COR)),
716/*17*/ FLAG_ENTRY0("RxRbufLookupDesUncErr", RXES(RBUF_LOOKUP_DES_UNC)),
717/*18*/ FLAG_ENTRY0("RxRbufLookupDesCorErr", RXES(RBUF_LOOKUP_DES_COR)),
718/*19*/ FLAG_ENTRY0("RxRbufBlockListReadUncErr",
719 RXES(RBUF_BLOCK_LIST_READ_UNC)),
720/*20*/ FLAG_ENTRY0("RxRbufBlockListReadCorErr",
721 RXES(RBUF_BLOCK_LIST_READ_COR)),
722/*21*/ FLAG_ENTRY0("RxRbufCsrQHeadBufNumParityErr",
723 RXES(RBUF_CSR_QHEAD_BUF_NUM_PARITY)),
724/*22*/ FLAG_ENTRY0("RxRbufCsrQEntCntParityErr",
725 RXES(RBUF_CSR_QENT_CNT_PARITY)),
726/*23*/ FLAG_ENTRY0("RxRbufCsrQNextBufParityErr",
727 RXES(RBUF_CSR_QNEXT_BUF_PARITY)),
728/*24*/ FLAG_ENTRY0("RxRbufCsrQVldBitParityErr",
729 RXES(RBUF_CSR_QVLD_BIT_PARITY)),
730/*25*/ FLAG_ENTRY0("RxRbufCsrQHdPtrParityErr", RXES(RBUF_CSR_QHD_PTR_PARITY)),
731/*26*/ FLAG_ENTRY0("RxRbufCsrQTlPtrParityErr", RXES(RBUF_CSR_QTL_PTR_PARITY)),
732/*27*/ FLAG_ENTRY0("RxRbufCsrQNumOfPktParityErr",
733 RXES(RBUF_CSR_QNUM_OF_PKT_PARITY)),
734/*28*/ FLAG_ENTRY0("RxRbufCsrQEOPDWParityErr", RXES(RBUF_CSR_QEOPDW_PARITY)),
735/*29*/ FLAG_ENTRY0("RxRbufCtxIdParityErr", RXES(RBUF_CTX_ID_PARITY)),
736/*30*/ FLAG_ENTRY0("RxRBufBadLookupErr", RXES(RBUF_BAD_LOOKUP)),
737/*31*/ FLAG_ENTRY0("RxRbufFullErr", RXES(RBUF_FULL)),
738/*32*/ FLAG_ENTRY0("RxRbufEmptyErr", RXES(RBUF_EMPTY)),
739/*33*/ FLAG_ENTRY0("RxRbufFlRdAddrParityErr", RXES(RBUF_FL_RD_ADDR_PARITY)),
740/*34*/ FLAG_ENTRY0("RxRbufFlWrAddrParityErr", RXES(RBUF_FL_WR_ADDR_PARITY)),
741/*35*/ FLAG_ENTRY0("RxRbufFlInitdoneParityErr",
742 RXES(RBUF_FL_INITDONE_PARITY)),
743/*36*/ FLAG_ENTRY0("RxRbufFlInitWrAddrParityErr",
744 RXES(RBUF_FL_INIT_WR_ADDR_PARITY)),
745/*37*/ FLAG_ENTRY0("RxRbufNextFreeBufUncErr", RXES(RBUF_NEXT_FREE_BUF_UNC)),
746/*38*/ FLAG_ENTRY0("RxRbufNextFreeBufCorErr", RXES(RBUF_NEXT_FREE_BUF_COR)),
747/*39*/ FLAG_ENTRY0("RxLookupDesPart1UncErr", RXES(LOOKUP_DES_PART1_UNC)),
748/*40*/ FLAG_ENTRY0("RxLookupDesPart1UncCorErr",
749 RXES(LOOKUP_DES_PART1_UNC_COR)),
750/*41*/ FLAG_ENTRY0("RxLookupDesPart2ParityErr",
751 RXES(LOOKUP_DES_PART2_PARITY)),
752/*42*/ FLAG_ENTRY0("RxLookupRcvArrayUncErr", RXES(LOOKUP_RCV_ARRAY_UNC)),
753/*43*/ FLAG_ENTRY0("RxLookupRcvArrayCorErr", RXES(LOOKUP_RCV_ARRAY_COR)),
754/*44*/ FLAG_ENTRY0("RxLookupCsrParityErr", RXES(LOOKUP_CSR_PARITY)),
755/*45*/ FLAG_ENTRY0("RxHqIntrCsrParityErr", RXES(HQ_INTR_CSR_PARITY)),
756/*46*/ FLAG_ENTRY0("RxHqIntrFsmErr", RXES(HQ_INTR_FSM)),
757/*47*/ FLAG_ENTRY0("RxRbufDescPart1UncErr", RXES(RBUF_DESC_PART1_UNC)),
758/*48*/ FLAG_ENTRY0("RxRbufDescPart1CorErr", RXES(RBUF_DESC_PART1_COR)),
759/*49*/ FLAG_ENTRY0("RxRbufDescPart2UncErr", RXES(RBUF_DESC_PART2_UNC)),
760/*50*/ FLAG_ENTRY0("RxRbufDescPart2CorErr", RXES(RBUF_DESC_PART2_COR)),
761/*51*/ FLAG_ENTRY0("RxDmaHdrFifoRdUncErr", RXES(DMA_HDR_FIFO_RD_UNC)),
762/*52*/ FLAG_ENTRY0("RxDmaHdrFifoRdCorErr", RXES(DMA_HDR_FIFO_RD_COR)),
763/*53*/ FLAG_ENTRY0("RxDmaDataFifoRdUncErr", RXES(DMA_DATA_FIFO_RD_UNC)),
764/*54*/ FLAG_ENTRY0("RxDmaDataFifoRdCorErr", RXES(DMA_DATA_FIFO_RD_COR)),
765/*55*/ FLAG_ENTRY0("RxRbufDataUncErr", RXES(RBUF_DATA_UNC)),
766/*56*/ FLAG_ENTRY0("RxRbufDataCorErr", RXES(RBUF_DATA_COR)),
767/*57*/ FLAG_ENTRY0("RxDmaCsrParityErr", RXES(DMA_CSR_PARITY)),
768/*58*/ FLAG_ENTRY0("RxDmaEqFsmEncodingErr", RXES(DMA_EQ_FSM_ENCODING)),
769/*59*/ FLAG_ENTRY0("RxDmaDqFsmEncodingErr", RXES(DMA_DQ_FSM_ENCODING)),
770/*60*/ FLAG_ENTRY0("RxDmaCsrUncErr", RXES(DMA_CSR_UNC)),
771/*61*/ FLAG_ENTRY0("RxCsrReadBadAddrErr", RXES(CSR_READ_BAD_ADDR)),
772/*62*/ FLAG_ENTRY0("RxCsrWriteBadAddrErr", RXES(CSR_WRITE_BAD_ADDR)),
773/*63*/ FLAG_ENTRY0("RxCsrParityErr", RXES(CSR_PARITY))
774};
775
776/* RXE errors that will trigger an SPC freeze */
777#define ALL_RXE_FREEZE_ERR \
778 (RCV_ERR_STATUS_RX_RCV_QP_MAP_TABLE_UNC_ERR_SMASK \
779 | RCV_ERR_STATUS_RX_RCV_CSR_PARITY_ERR_SMASK \
780 | RCV_ERR_STATUS_RX_DMA_FLAG_UNC_ERR_SMASK \
781 | RCV_ERR_STATUS_RX_RCV_FSM_ENCODING_ERR_SMASK \
782 | RCV_ERR_STATUS_RX_RBUF_FREE_LIST_UNC_ERR_SMASK \
783 | RCV_ERR_STATUS_RX_RBUF_LOOKUP_DES_REG_UNC_ERR_SMASK \
784 | RCV_ERR_STATUS_RX_RBUF_LOOKUP_DES_REG_UNC_COR_ERR_SMASK \
785 | RCV_ERR_STATUS_RX_RBUF_LOOKUP_DES_UNC_ERR_SMASK \
786 | RCV_ERR_STATUS_RX_RBUF_BLOCK_LIST_READ_UNC_ERR_SMASK \
787 | RCV_ERR_STATUS_RX_RBUF_CSR_QHEAD_BUF_NUM_PARITY_ERR_SMASK \
788 | RCV_ERR_STATUS_RX_RBUF_CSR_QENT_CNT_PARITY_ERR_SMASK \
789 | RCV_ERR_STATUS_RX_RBUF_CSR_QNEXT_BUF_PARITY_ERR_SMASK \
790 | RCV_ERR_STATUS_RX_RBUF_CSR_QVLD_BIT_PARITY_ERR_SMASK \
791 | RCV_ERR_STATUS_RX_RBUF_CSR_QHD_PTR_PARITY_ERR_SMASK \
792 | RCV_ERR_STATUS_RX_RBUF_CSR_QTL_PTR_PARITY_ERR_SMASK \
793 | RCV_ERR_STATUS_RX_RBUF_CSR_QNUM_OF_PKT_PARITY_ERR_SMASK \
794 | RCV_ERR_STATUS_RX_RBUF_CSR_QEOPDW_PARITY_ERR_SMASK \
795 | RCV_ERR_STATUS_RX_RBUF_CTX_ID_PARITY_ERR_SMASK \
796 | RCV_ERR_STATUS_RX_RBUF_BAD_LOOKUP_ERR_SMASK \
797 | RCV_ERR_STATUS_RX_RBUF_FULL_ERR_SMASK \
798 | RCV_ERR_STATUS_RX_RBUF_EMPTY_ERR_SMASK \
799 | RCV_ERR_STATUS_RX_RBUF_FL_RD_ADDR_PARITY_ERR_SMASK \
800 | RCV_ERR_STATUS_RX_RBUF_FL_WR_ADDR_PARITY_ERR_SMASK \
801 | RCV_ERR_STATUS_RX_RBUF_FL_INITDONE_PARITY_ERR_SMASK \
802 | RCV_ERR_STATUS_RX_RBUF_FL_INIT_WR_ADDR_PARITY_ERR_SMASK \
803 | RCV_ERR_STATUS_RX_RBUF_NEXT_FREE_BUF_UNC_ERR_SMASK \
804 | RCV_ERR_STATUS_RX_LOOKUP_DES_PART1_UNC_ERR_SMASK \
805 | RCV_ERR_STATUS_RX_LOOKUP_DES_PART1_UNC_COR_ERR_SMASK \
806 | RCV_ERR_STATUS_RX_LOOKUP_DES_PART2_PARITY_ERR_SMASK \
807 | RCV_ERR_STATUS_RX_LOOKUP_RCV_ARRAY_UNC_ERR_SMASK \
808 | RCV_ERR_STATUS_RX_LOOKUP_CSR_PARITY_ERR_SMASK \
809 | RCV_ERR_STATUS_RX_HQ_INTR_CSR_PARITY_ERR_SMASK \
810 | RCV_ERR_STATUS_RX_HQ_INTR_FSM_ERR_SMASK \
811 | RCV_ERR_STATUS_RX_RBUF_DESC_PART1_UNC_ERR_SMASK \
812 | RCV_ERR_STATUS_RX_RBUF_DESC_PART1_COR_ERR_SMASK \
813 | RCV_ERR_STATUS_RX_RBUF_DESC_PART2_UNC_ERR_SMASK \
814 | RCV_ERR_STATUS_RX_DMA_HDR_FIFO_RD_UNC_ERR_SMASK \
815 | RCV_ERR_STATUS_RX_DMA_DATA_FIFO_RD_UNC_ERR_SMASK \
816 | RCV_ERR_STATUS_RX_RBUF_DATA_UNC_ERR_SMASK \
817 | RCV_ERR_STATUS_RX_DMA_CSR_PARITY_ERR_SMASK \
818 | RCV_ERR_STATUS_RX_DMA_EQ_FSM_ENCODING_ERR_SMASK \
819 | RCV_ERR_STATUS_RX_DMA_DQ_FSM_ENCODING_ERR_SMASK \
820 | RCV_ERR_STATUS_RX_DMA_CSR_UNC_ERR_SMASK \
821 | RCV_ERR_STATUS_RX_CSR_PARITY_ERR_SMASK)
822
823#define RXE_FREEZE_ABORT_MASK \
824 (RCV_ERR_STATUS_RX_DMA_CSR_UNC_ERR_SMASK | \
825 RCV_ERR_STATUS_RX_DMA_HDR_FIFO_RD_UNC_ERR_SMASK | \
826 RCV_ERR_STATUS_RX_DMA_DATA_FIFO_RD_UNC_ERR_SMASK)
827
828/*
829 * DCC Error Flags
830 */
831#define DCCE(name) DCC_ERR_FLG_##name##_SMASK
832static struct flag_table dcc_err_flags[] = {
833 FLAG_ENTRY0("bad_l2_err", DCCE(BAD_L2_ERR)),
834 FLAG_ENTRY0("bad_sc_err", DCCE(BAD_SC_ERR)),
835 FLAG_ENTRY0("bad_mid_tail_err", DCCE(BAD_MID_TAIL_ERR)),
836 FLAG_ENTRY0("bad_preemption_err", DCCE(BAD_PREEMPTION_ERR)),
837 FLAG_ENTRY0("preemption_err", DCCE(PREEMPTION_ERR)),
838 FLAG_ENTRY0("preemptionvl15_err", DCCE(PREEMPTIONVL15_ERR)),
839 FLAG_ENTRY0("bad_vl_marker_err", DCCE(BAD_VL_MARKER_ERR)),
840 FLAG_ENTRY0("bad_dlid_target_err", DCCE(BAD_DLID_TARGET_ERR)),
841 FLAG_ENTRY0("bad_lver_err", DCCE(BAD_LVER_ERR)),
842 FLAG_ENTRY0("uncorrectable_err", DCCE(UNCORRECTABLE_ERR)),
843 FLAG_ENTRY0("bad_crdt_ack_err", DCCE(BAD_CRDT_ACK_ERR)),
844 FLAG_ENTRY0("unsup_pkt_type", DCCE(UNSUP_PKT_TYPE)),
845 FLAG_ENTRY0("bad_ctrl_flit_err", DCCE(BAD_CTRL_FLIT_ERR)),
846 FLAG_ENTRY0("event_cntr_parity_err", DCCE(EVENT_CNTR_PARITY_ERR)),
847 FLAG_ENTRY0("event_cntr_rollover_err", DCCE(EVENT_CNTR_ROLLOVER_ERR)),
848 FLAG_ENTRY0("link_err", DCCE(LINK_ERR)),
849 FLAG_ENTRY0("misc_cntr_rollover_err", DCCE(MISC_CNTR_ROLLOVER_ERR)),
850 FLAG_ENTRY0("bad_ctrl_dist_err", DCCE(BAD_CTRL_DIST_ERR)),
851 FLAG_ENTRY0("bad_tail_dist_err", DCCE(BAD_TAIL_DIST_ERR)),
852 FLAG_ENTRY0("bad_head_dist_err", DCCE(BAD_HEAD_DIST_ERR)),
853 FLAG_ENTRY0("nonvl15_state_err", DCCE(NONVL15_STATE_ERR)),
854 FLAG_ENTRY0("vl15_multi_err", DCCE(VL15_MULTI_ERR)),
855 FLAG_ENTRY0("bad_pkt_length_err", DCCE(BAD_PKT_LENGTH_ERR)),
856 FLAG_ENTRY0("unsup_vl_err", DCCE(UNSUP_VL_ERR)),
857 FLAG_ENTRY0("perm_nvl15_err", DCCE(PERM_NVL15_ERR)),
858 FLAG_ENTRY0("slid_zero_err", DCCE(SLID_ZERO_ERR)),
859 FLAG_ENTRY0("dlid_zero_err", DCCE(DLID_ZERO_ERR)),
860 FLAG_ENTRY0("length_mtu_err", DCCE(LENGTH_MTU_ERR)),
861 FLAG_ENTRY0("rx_early_drop_err", DCCE(RX_EARLY_DROP_ERR)),
862 FLAG_ENTRY0("late_short_err", DCCE(LATE_SHORT_ERR)),
863 FLAG_ENTRY0("late_long_err", DCCE(LATE_LONG_ERR)),
864 FLAG_ENTRY0("late_ebp_err", DCCE(LATE_EBP_ERR)),
865 FLAG_ENTRY0("fpe_tx_fifo_ovflw_err", DCCE(FPE_TX_FIFO_OVFLW_ERR)),
866 FLAG_ENTRY0("fpe_tx_fifo_unflw_err", DCCE(FPE_TX_FIFO_UNFLW_ERR)),
867 FLAG_ENTRY0("csr_access_blocked_host", DCCE(CSR_ACCESS_BLOCKED_HOST)),
868 FLAG_ENTRY0("csr_access_blocked_uc", DCCE(CSR_ACCESS_BLOCKED_UC)),
869 FLAG_ENTRY0("tx_ctrl_parity_err", DCCE(TX_CTRL_PARITY_ERR)),
870 FLAG_ENTRY0("tx_ctrl_parity_mbe_err", DCCE(TX_CTRL_PARITY_MBE_ERR)),
871 FLAG_ENTRY0("tx_sc_parity_err", DCCE(TX_SC_PARITY_ERR)),
872 FLAG_ENTRY0("rx_ctrl_parity_mbe_err", DCCE(RX_CTRL_PARITY_MBE_ERR)),
873 FLAG_ENTRY0("csr_parity_err", DCCE(CSR_PARITY_ERR)),
874 FLAG_ENTRY0("csr_inval_addr", DCCE(CSR_INVAL_ADDR)),
875 FLAG_ENTRY0("tx_byte_shft_parity_err", DCCE(TX_BYTE_SHFT_PARITY_ERR)),
876 FLAG_ENTRY0("rx_byte_shft_parity_err", DCCE(RX_BYTE_SHFT_PARITY_ERR)),
877 FLAG_ENTRY0("fmconfig_err", DCCE(FMCONFIG_ERR)),
878 FLAG_ENTRY0("rcvport_err", DCCE(RCVPORT_ERR)),
879};
880
881/*
882 * LCB error flags
883 */
884#define LCBE(name) DC_LCB_ERR_FLG_##name##_SMASK
885static struct flag_table lcb_err_flags[] = {
886/* 0*/ FLAG_ENTRY0("CSR_PARITY_ERR", LCBE(CSR_PARITY_ERR)),
887/* 1*/ FLAG_ENTRY0("INVALID_CSR_ADDR", LCBE(INVALID_CSR_ADDR)),
888/* 2*/ FLAG_ENTRY0("RST_FOR_FAILED_DESKEW", LCBE(RST_FOR_FAILED_DESKEW)),
889/* 3*/ FLAG_ENTRY0("ALL_LNS_FAILED_REINIT_TEST",
890 LCBE(ALL_LNS_FAILED_REINIT_TEST)),
891/* 4*/ FLAG_ENTRY0("LOST_REINIT_STALL_OR_TOS", LCBE(LOST_REINIT_STALL_OR_TOS)),
892/* 5*/ FLAG_ENTRY0("TX_LESS_THAN_FOUR_LNS", LCBE(TX_LESS_THAN_FOUR_LNS)),
893/* 6*/ FLAG_ENTRY0("RX_LESS_THAN_FOUR_LNS", LCBE(RX_LESS_THAN_FOUR_LNS)),
894/* 7*/ FLAG_ENTRY0("SEQ_CRC_ERR", LCBE(SEQ_CRC_ERR)),
895/* 8*/ FLAG_ENTRY0("REINIT_FROM_PEER", LCBE(REINIT_FROM_PEER)),
896/* 9*/ FLAG_ENTRY0("REINIT_FOR_LN_DEGRADE", LCBE(REINIT_FOR_LN_DEGRADE)),
897/*10*/ FLAG_ENTRY0("CRC_ERR_CNT_HIT_LIMIT", LCBE(CRC_ERR_CNT_HIT_LIMIT)),
898/*11*/ FLAG_ENTRY0("RCLK_STOPPED", LCBE(RCLK_STOPPED)),
899/*12*/ FLAG_ENTRY0("UNEXPECTED_REPLAY_MARKER", LCBE(UNEXPECTED_REPLAY_MARKER)),
900/*13*/ FLAG_ENTRY0("UNEXPECTED_ROUND_TRIP_MARKER",
901 LCBE(UNEXPECTED_ROUND_TRIP_MARKER)),
902/*14*/ FLAG_ENTRY0("ILLEGAL_NULL_LTP", LCBE(ILLEGAL_NULL_LTP)),
903/*15*/ FLAG_ENTRY0("ILLEGAL_FLIT_ENCODING", LCBE(ILLEGAL_FLIT_ENCODING)),
904/*16*/ FLAG_ENTRY0("FLIT_INPUT_BUF_OFLW", LCBE(FLIT_INPUT_BUF_OFLW)),
905/*17*/ FLAG_ENTRY0("VL_ACK_INPUT_BUF_OFLW", LCBE(VL_ACK_INPUT_BUF_OFLW)),
906/*18*/ FLAG_ENTRY0("VL_ACK_INPUT_PARITY_ERR", LCBE(VL_ACK_INPUT_PARITY_ERR)),
907/*19*/ FLAG_ENTRY0("VL_ACK_INPUT_WRONG_CRC_MODE",
908 LCBE(VL_ACK_INPUT_WRONG_CRC_MODE)),
909/*20*/ FLAG_ENTRY0("FLIT_INPUT_BUF_MBE", LCBE(FLIT_INPUT_BUF_MBE)),
910/*21*/ FLAG_ENTRY0("FLIT_INPUT_BUF_SBE", LCBE(FLIT_INPUT_BUF_SBE)),
911/*22*/ FLAG_ENTRY0("REPLAY_BUF_MBE", LCBE(REPLAY_BUF_MBE)),
912/*23*/ FLAG_ENTRY0("REPLAY_BUF_SBE", LCBE(REPLAY_BUF_SBE)),
913/*24*/ FLAG_ENTRY0("CREDIT_RETURN_FLIT_MBE", LCBE(CREDIT_RETURN_FLIT_MBE)),
914/*25*/ FLAG_ENTRY0("RST_FOR_LINK_TIMEOUT", LCBE(RST_FOR_LINK_TIMEOUT)),
915/*26*/ FLAG_ENTRY0("RST_FOR_INCOMPLT_RND_TRIP",
916 LCBE(RST_FOR_INCOMPLT_RND_TRIP)),
917/*27*/ FLAG_ENTRY0("HOLD_REINIT", LCBE(HOLD_REINIT)),
918/*28*/ FLAG_ENTRY0("NEG_EDGE_LINK_TRANSFER_ACTIVE",
919 LCBE(NEG_EDGE_LINK_TRANSFER_ACTIVE)),
920/*29*/ FLAG_ENTRY0("REDUNDANT_FLIT_PARITY_ERR",
921 LCBE(REDUNDANT_FLIT_PARITY_ERR))
922};
923
924/*
925 * DC8051 Error Flags
926 */
927#define D8E(name) DC_DC8051_ERR_FLG_##name##_SMASK
928static struct flag_table dc8051_err_flags[] = {
929 FLAG_ENTRY0("SET_BY_8051", D8E(SET_BY_8051)),
930 FLAG_ENTRY0("LOST_8051_HEART_BEAT", D8E(LOST_8051_HEART_BEAT)),
931 FLAG_ENTRY0("CRAM_MBE", D8E(CRAM_MBE)),
932 FLAG_ENTRY0("CRAM_SBE", D8E(CRAM_SBE)),
933 FLAG_ENTRY0("DRAM_MBE", D8E(DRAM_MBE)),
934 FLAG_ENTRY0("DRAM_SBE", D8E(DRAM_SBE)),
935 FLAG_ENTRY0("IRAM_MBE", D8E(IRAM_MBE)),
936 FLAG_ENTRY0("IRAM_SBE", D8E(IRAM_SBE)),
937 FLAG_ENTRY0("UNMATCHED_SECURE_MSG_ACROSS_BCC_LANES",
938 D8E(UNMATCHED_SECURE_MSG_ACROSS_BCC_LANES)),
939 FLAG_ENTRY0("INVALID_CSR_ADDR", D8E(INVALID_CSR_ADDR)),
940};
941
942/*
943 * DC8051 Information Error flags
944 *
945 * Flags in DC8051_DBG_ERR_INFO_SET_BY_8051.ERROR field.
946 */
947static struct flag_table dc8051_info_err_flags[] = {
948 FLAG_ENTRY0("Spico ROM check failed", SPICO_ROM_FAILED),
949 FLAG_ENTRY0("Unknown frame received", UNKNOWN_FRAME),
950 FLAG_ENTRY0("Target BER not met", TARGET_BER_NOT_MET),
951 FLAG_ENTRY0("Serdes internal loopback failure",
952 FAILED_SERDES_INTERNAL_LOOPBACK),
953 FLAG_ENTRY0("Failed SerDes init", FAILED_SERDES_INIT),
954 FLAG_ENTRY0("Failed LNI(Polling)", FAILED_LNI_POLLING),
955 FLAG_ENTRY0("Failed LNI(Debounce)", FAILED_LNI_DEBOUNCE),
956 FLAG_ENTRY0("Failed LNI(EstbComm)", FAILED_LNI_ESTBCOMM),
957 FLAG_ENTRY0("Failed LNI(OptEq)", FAILED_LNI_OPTEQ),
958 FLAG_ENTRY0("Failed LNI(VerifyCap_1)", FAILED_LNI_VERIFY_CAP1),
959 FLAG_ENTRY0("Failed LNI(VerifyCap_2)", FAILED_LNI_VERIFY_CAP2),
960 FLAG_ENTRY0("Failed LNI(ConfigLT)", FAILED_LNI_CONFIGLT)
961};
962
963/*
964 * DC8051 Information Host Information flags
965 *
966 * Flags in DC8051_DBG_ERR_INFO_SET_BY_8051.HOST_MSG field.
967 */
968static struct flag_table dc8051_info_host_msg_flags[] = {
969 FLAG_ENTRY0("Host request done", 0x0001),
970 FLAG_ENTRY0("BC SMA message", 0x0002),
971 FLAG_ENTRY0("BC PWR_MGM message", 0x0004),
972 FLAG_ENTRY0("BC Unknown message (BCC)", 0x0008),
973 FLAG_ENTRY0("BC Unknown message (LCB)", 0x0010),
974 FLAG_ENTRY0("External device config request", 0x0020),
975 FLAG_ENTRY0("VerifyCap all frames received", 0x0040),
976 FLAG_ENTRY0("LinkUp achieved", 0x0080),
977 FLAG_ENTRY0("Link going down", 0x0100),
978};
979
980
981static u32 encoded_size(u32 size);
982static u32 chip_to_opa_lstate(struct hfi1_devdata *dd, u32 chip_lstate);
983static int set_physical_link_state(struct hfi1_devdata *dd, u64 state);
984static void read_vc_remote_phy(struct hfi1_devdata *dd, u8 *power_management,
985 u8 *continuous);
986static void read_vc_remote_fabric(struct hfi1_devdata *dd, u8 *vau, u8 *z,
987 u8 *vcu, u16 *vl15buf, u8 *crc_sizes);
988static void read_vc_remote_link_width(struct hfi1_devdata *dd,
989 u8 *remote_tx_rate, u16 *link_widths);
990static void read_vc_local_link_width(struct hfi1_devdata *dd, u8 *misc_bits,
991 u8 *flag_bits, u16 *link_widths);
992static void read_remote_device_id(struct hfi1_devdata *dd, u16 *device_id,
993 u8 *device_rev);
994static void read_mgmt_allowed(struct hfi1_devdata *dd, u8 *mgmt_allowed);
995static void read_local_lni(struct hfi1_devdata *dd, u8 *enable_lane_rx);
996static int read_tx_settings(struct hfi1_devdata *dd, u8 *enable_lane_tx,
997 u8 *tx_polarity_inversion,
998 u8 *rx_polarity_inversion, u8 *max_rate);
999static void handle_sdma_eng_err(struct hfi1_devdata *dd,
1000 unsigned int context, u64 err_status);
1001static void handle_qsfp_int(struct hfi1_devdata *dd, u32 source, u64 reg);
1002static void handle_dcc_err(struct hfi1_devdata *dd,
1003 unsigned int context, u64 err_status);
1004static void handle_lcb_err(struct hfi1_devdata *dd,
1005 unsigned int context, u64 err_status);
1006static void handle_8051_interrupt(struct hfi1_devdata *dd, u32 unused, u64 reg);
1007static void handle_cce_err(struct hfi1_devdata *dd, u32 unused, u64 reg);
1008static void handle_rxe_err(struct hfi1_devdata *dd, u32 unused, u64 reg);
1009static void handle_misc_err(struct hfi1_devdata *dd, u32 unused, u64 reg);
1010static void handle_pio_err(struct hfi1_devdata *dd, u32 unused, u64 reg);
1011static void handle_sdma_err(struct hfi1_devdata *dd, u32 unused, u64 reg);
1012static void handle_egress_err(struct hfi1_devdata *dd, u32 unused, u64 reg);
1013static void handle_txe_err(struct hfi1_devdata *dd, u32 unused, u64 reg);
1014static void set_partition_keys(struct hfi1_pportdata *);
1015static const char *link_state_name(u32 state);
1016static const char *link_state_reason_name(struct hfi1_pportdata *ppd,
1017 u32 state);
1018static int do_8051_command(struct hfi1_devdata *dd, u32 type, u64 in_data,
1019 u64 *out_data);
1020static int read_idle_sma(struct hfi1_devdata *dd, u64 *data);
1021static int thermal_init(struct hfi1_devdata *dd);
1022
1023static int wait_logical_linkstate(struct hfi1_pportdata *ppd, u32 state,
1024 int msecs);
1025static void read_planned_down_reason_code(struct hfi1_devdata *dd, u8 *pdrrc);
1026static void handle_temp_err(struct hfi1_devdata *);
1027static void dc_shutdown(struct hfi1_devdata *);
1028static void dc_start(struct hfi1_devdata *);
1029
1030/*
1031 * Error interrupt table entry. This is used as input to the interrupt
1032 * "clear down" routine used for all second tier error interrupt register.
1033 * Second tier interrupt registers have a single bit representing them
1034 * in the top-level CceIntStatus.
1035 */
1036struct err_reg_info {
1037 u32 status; /* status CSR offset */
1038 u32 clear; /* clear CSR offset */
1039 u32 mask; /* mask CSR offset */
1040 void (*handler)(struct hfi1_devdata *dd, u32 source, u64 reg);
1041 const char *desc;
1042};
1043
1044#define NUM_MISC_ERRS (IS_GENERAL_ERR_END - IS_GENERAL_ERR_START)
1045#define NUM_DC_ERRS (IS_DC_END - IS_DC_START)
1046#define NUM_VARIOUS (IS_VARIOUS_END - IS_VARIOUS_START)
1047
1048/*
1049 * Helpers for building HFI and DC error interrupt table entries. Different
1050 * helpers are needed because of inconsistent register names.
1051 */
1052#define EE(reg, handler, desc) \
1053 { reg##_STATUS, reg##_CLEAR, reg##_MASK, \
1054 handler, desc }
1055#define DC_EE1(reg, handler, desc) \
1056 { reg##_FLG, reg##_FLG_CLR, reg##_FLG_EN, handler, desc }
1057#define DC_EE2(reg, handler, desc) \
1058 { reg##_FLG, reg##_CLR, reg##_EN, handler, desc }
1059
1060/*
1061 * Table of the "misc" grouping of error interrupts. Each entry refers to
1062 * another register containing more information.
1063 */
1064static const struct err_reg_info misc_errs[NUM_MISC_ERRS] = {
1065/* 0*/ EE(CCE_ERR, handle_cce_err, "CceErr"),
1066/* 1*/ EE(RCV_ERR, handle_rxe_err, "RxeErr"),
1067/* 2*/ EE(MISC_ERR, handle_misc_err, "MiscErr"),
1068/* 3*/ { 0, 0, 0, NULL }, /* reserved */
1069/* 4*/ EE(SEND_PIO_ERR, handle_pio_err, "PioErr"),
1070/* 5*/ EE(SEND_DMA_ERR, handle_sdma_err, "SDmaErr"),
1071/* 6*/ EE(SEND_EGRESS_ERR, handle_egress_err, "EgressErr"),
1072/* 7*/ EE(SEND_ERR, handle_txe_err, "TxeErr")
1073 /* the rest are reserved */
1074};
1075
1076/*
1077 * Index into the Various section of the interrupt sources
1078 * corresponding to the Critical Temperature interrupt.
1079 */
1080#define TCRIT_INT_SOURCE 4
1081
1082/*
1083 * SDMA error interrupt entry - refers to another register containing more
1084 * information.
1085 */
1086static const struct err_reg_info sdma_eng_err =
1087 EE(SEND_DMA_ENG_ERR, handle_sdma_eng_err, "SDmaEngErr");
1088
1089static const struct err_reg_info various_err[NUM_VARIOUS] = {
1090/* 0*/ { 0, 0, 0, NULL }, /* PbcInt */
1091/* 1*/ { 0, 0, 0, NULL }, /* GpioAssertInt */
1092/* 2*/ EE(ASIC_QSFP1, handle_qsfp_int, "QSFP1"),
1093/* 3*/ EE(ASIC_QSFP2, handle_qsfp_int, "QSFP2"),
1094/* 4*/ { 0, 0, 0, NULL }, /* TCritInt */
1095 /* rest are reserved */
1096};
1097
1098/*
1099 * The DC encoding of mtu_cap for 10K MTU in the DCC_CFG_PORT_CONFIG
1100 * register can not be derived from the MTU value because 10K is not
1101 * a power of 2. Therefore, we need a constant. Everything else can
1102 * be calculated.
1103 */
1104#define DCC_CFG_PORT_MTU_CAP_10240 7
1105
1106/*
1107 * Table of the DC grouping of error interrupts. Each entry refers to
1108 * another register containing more information.
1109 */
1110static const struct err_reg_info dc_errs[NUM_DC_ERRS] = {
1111/* 0*/ DC_EE1(DCC_ERR, handle_dcc_err, "DCC Err"),
1112/* 1*/ DC_EE2(DC_LCB_ERR, handle_lcb_err, "LCB Err"),
1113/* 2*/ DC_EE2(DC_DC8051_ERR, handle_8051_interrupt, "DC8051 Interrupt"),
1114/* 3*/ /* dc_lbm_int - special, see is_dc_int() */
1115 /* the rest are reserved */
1116};
1117
1118struct cntr_entry {
1119 /*
1120 * counter name
1121 */
1122 char *name;
1123
1124 /*
1125 * csr to read for name (if applicable)
1126 */
1127 u64 csr;
1128
1129 /*
1130 * offset into dd or ppd to store the counter's value
1131 */
1132 int offset;
1133
1134 /*
1135 * flags
1136 */
1137 u8 flags;
1138
1139 /*
1140 * accessor for stat element, context either dd or ppd
1141 */
1142 u64 (*rw_cntr)(const struct cntr_entry *,
1143 void *context,
1144 int vl,
1145 int mode,
1146 u64 data);
1147};
1148
1149#define C_RCV_HDR_OVF_FIRST C_RCV_HDR_OVF_0
1150#define C_RCV_HDR_OVF_LAST C_RCV_HDR_OVF_159
1151
1152#define CNTR_ELEM(name, csr, offset, flags, accessor) \
1153{ \
1154 name, \
1155 csr, \
1156 offset, \
1157 flags, \
1158 accessor \
1159}
1160
1161/* 32bit RXE */
1162#define RXE32_PORT_CNTR_ELEM(name, counter, flags) \
1163CNTR_ELEM(#name, \
1164 (counter * 8 + RCV_COUNTER_ARRAY32), \
1165 0, flags | CNTR_32BIT, \
1166 port_access_u32_csr)
1167
1168#define RXE32_DEV_CNTR_ELEM(name, counter, flags) \
1169CNTR_ELEM(#name, \
1170 (counter * 8 + RCV_COUNTER_ARRAY32), \
1171 0, flags | CNTR_32BIT, \
1172 dev_access_u32_csr)
1173
1174/* 64bit RXE */
1175#define RXE64_PORT_CNTR_ELEM(name, counter, flags) \
1176CNTR_ELEM(#name, \
1177 (counter * 8 + RCV_COUNTER_ARRAY64), \
1178 0, flags, \
1179 port_access_u64_csr)
1180
1181#define RXE64_DEV_CNTR_ELEM(name, counter, flags) \
1182CNTR_ELEM(#name, \
1183 (counter * 8 + RCV_COUNTER_ARRAY64), \
1184 0, flags, \
1185 dev_access_u64_csr)
1186
1187#define OVR_LBL(ctx) C_RCV_HDR_OVF_ ## ctx
1188#define OVR_ELM(ctx) \
1189CNTR_ELEM("RcvHdrOvr" #ctx, \
1190 (RCV_HDR_OVFL_CNT + ctx*0x100), \
1191 0, CNTR_NORMAL, port_access_u64_csr)
1192
1193/* 32bit TXE */
1194#define TXE32_PORT_CNTR_ELEM(name, counter, flags) \
1195CNTR_ELEM(#name, \
1196 (counter * 8 + SEND_COUNTER_ARRAY32), \
1197 0, flags | CNTR_32BIT, \
1198 port_access_u32_csr)
1199
1200/* 64bit TXE */
1201#define TXE64_PORT_CNTR_ELEM(name, counter, flags) \
1202CNTR_ELEM(#name, \
1203 (counter * 8 + SEND_COUNTER_ARRAY64), \
1204 0, flags, \
1205 port_access_u64_csr)
1206
1207# define TX64_DEV_CNTR_ELEM(name, counter, flags) \
1208CNTR_ELEM(#name,\
1209 counter * 8 + SEND_COUNTER_ARRAY64, \
1210 0, \
1211 flags, \
1212 dev_access_u64_csr)
1213
1214/* CCE */
1215#define CCE_PERF_DEV_CNTR_ELEM(name, counter, flags) \
1216CNTR_ELEM(#name, \
1217 (counter * 8 + CCE_COUNTER_ARRAY32), \
1218 0, flags | CNTR_32BIT, \
1219 dev_access_u32_csr)
1220
1221#define CCE_INT_DEV_CNTR_ELEM(name, counter, flags) \
1222CNTR_ELEM(#name, \
1223 (counter * 8 + CCE_INT_COUNTER_ARRAY32), \
1224 0, flags | CNTR_32BIT, \
1225 dev_access_u32_csr)
1226
1227/* DC */
1228#define DC_PERF_CNTR(name, counter, flags) \
1229CNTR_ELEM(#name, \
1230 counter, \
1231 0, \
1232 flags, \
1233 dev_access_u64_csr)
1234
1235#define DC_PERF_CNTR_LCB(name, counter, flags) \
1236CNTR_ELEM(#name, \
1237 counter, \
1238 0, \
1239 flags, \
1240 dc_access_lcb_cntr)
1241
1242/* ibp counters */
1243#define SW_IBP_CNTR(name, cntr) \
1244CNTR_ELEM(#name, \
1245 0, \
1246 0, \
1247 CNTR_SYNTH, \
1248 access_ibp_##cntr)
1249
1250u64 read_csr(const struct hfi1_devdata *dd, u32 offset)
1251{
1252 u64 val;
1253
1254 if (dd->flags & HFI1_PRESENT) {
1255 val = readq((void __iomem *)dd->kregbase + offset);
1256 return val;
1257 }
1258 return -1;
1259}
1260
1261void write_csr(const struct hfi1_devdata *dd, u32 offset, u64 value)
1262{
1263 if (dd->flags & HFI1_PRESENT)
1264 writeq(value, (void __iomem *)dd->kregbase + offset);
1265}
1266
1267void __iomem *get_csr_addr(
1268 struct hfi1_devdata *dd,
1269 u32 offset)
1270{
1271 return (void __iomem *)dd->kregbase + offset;
1272}
1273
1274static inline u64 read_write_csr(const struct hfi1_devdata *dd, u32 csr,
1275 int mode, u64 value)
1276{
1277 u64 ret;
1278
1279
1280 if (mode == CNTR_MODE_R) {
1281 ret = read_csr(dd, csr);
1282 } else if (mode == CNTR_MODE_W) {
1283 write_csr(dd, csr, value);
1284 ret = value;
1285 } else {
1286 dd_dev_err(dd, "Invalid cntr register access mode");
1287 return 0;
1288 }
1289
1290 hfi1_cdbg(CNTR, "csr 0x%x val 0x%llx mode %d", csr, ret, mode);
1291 return ret;
1292}
1293
1294/* Dev Access */
1295static u64 dev_access_u32_csr(const struct cntr_entry *entry,
1296 void *context, int vl, int mode, u64 data)
1297{
Shraddha Barkea787bde2015-10-15 00:58:29 +05301298 struct hfi1_devdata *dd = context;
Mike Marciniszyn77241052015-07-30 15:17:43 -04001299
1300 if (vl != CNTR_INVALID_VL)
1301 return 0;
1302 return read_write_csr(dd, entry->csr, mode, data);
1303}
1304
1305static u64 dev_access_u64_csr(const struct cntr_entry *entry, void *context,
1306 int vl, int mode, u64 data)
1307{
Shraddha Barkea787bde2015-10-15 00:58:29 +05301308 struct hfi1_devdata *dd = context;
Mike Marciniszyn77241052015-07-30 15:17:43 -04001309
1310 u64 val = 0;
1311 u64 csr = entry->csr;
1312
1313 if (entry->flags & CNTR_VL) {
1314 if (vl == CNTR_INVALID_VL)
1315 return 0;
1316 csr += 8 * vl;
1317 } else {
1318 if (vl != CNTR_INVALID_VL)
1319 return 0;
1320 }
1321
1322 val = read_write_csr(dd, csr, mode, data);
1323 return val;
1324}
1325
1326static u64 dc_access_lcb_cntr(const struct cntr_entry *entry, void *context,
1327 int vl, int mode, u64 data)
1328{
Shraddha Barkea787bde2015-10-15 00:58:29 +05301329 struct hfi1_devdata *dd = context;
Mike Marciniszyn77241052015-07-30 15:17:43 -04001330 u32 csr = entry->csr;
1331 int ret = 0;
1332
1333 if (vl != CNTR_INVALID_VL)
1334 return 0;
1335 if (mode == CNTR_MODE_R)
1336 ret = read_lcb_csr(dd, csr, &data);
1337 else if (mode == CNTR_MODE_W)
1338 ret = write_lcb_csr(dd, csr, data);
1339
1340 if (ret) {
1341 dd_dev_err(dd, "Could not acquire LCB for counter 0x%x", csr);
1342 return 0;
1343 }
1344
1345 hfi1_cdbg(CNTR, "csr 0x%x val 0x%llx mode %d", csr, data, mode);
1346 return data;
1347}
1348
1349/* Port Access */
1350static u64 port_access_u32_csr(const struct cntr_entry *entry, void *context,
1351 int vl, int mode, u64 data)
1352{
Shraddha Barkea787bde2015-10-15 00:58:29 +05301353 struct hfi1_pportdata *ppd = context;
Mike Marciniszyn77241052015-07-30 15:17:43 -04001354
1355 if (vl != CNTR_INVALID_VL)
1356 return 0;
1357 return read_write_csr(ppd->dd, entry->csr, mode, data);
1358}
1359
1360static u64 port_access_u64_csr(const struct cntr_entry *entry,
1361 void *context, int vl, int mode, u64 data)
1362{
Shraddha Barkea787bde2015-10-15 00:58:29 +05301363 struct hfi1_pportdata *ppd = context;
Mike Marciniszyn77241052015-07-30 15:17:43 -04001364 u64 val;
1365 u64 csr = entry->csr;
1366
1367 if (entry->flags & CNTR_VL) {
1368 if (vl == CNTR_INVALID_VL)
1369 return 0;
1370 csr += 8 * vl;
1371 } else {
1372 if (vl != CNTR_INVALID_VL)
1373 return 0;
1374 }
1375 val = read_write_csr(ppd->dd, csr, mode, data);
1376 return val;
1377}
1378
1379/* Software defined */
1380static inline u64 read_write_sw(struct hfi1_devdata *dd, u64 *cntr, int mode,
1381 u64 data)
1382{
1383 u64 ret;
1384
1385 if (mode == CNTR_MODE_R) {
1386 ret = *cntr;
1387 } else if (mode == CNTR_MODE_W) {
1388 *cntr = data;
1389 ret = data;
1390 } else {
1391 dd_dev_err(dd, "Invalid cntr sw access mode");
1392 return 0;
1393 }
1394
1395 hfi1_cdbg(CNTR, "val 0x%llx mode %d", ret, mode);
1396
1397 return ret;
1398}
1399
1400static u64 access_sw_link_dn_cnt(const struct cntr_entry *entry, void *context,
1401 int vl, int mode, u64 data)
1402{
Shraddha Barkea787bde2015-10-15 00:58:29 +05301403 struct hfi1_pportdata *ppd = context;
Mike Marciniszyn77241052015-07-30 15:17:43 -04001404
1405 if (vl != CNTR_INVALID_VL)
1406 return 0;
1407 return read_write_sw(ppd->dd, &ppd->link_downed, mode, data);
1408}
1409
1410static u64 access_sw_link_up_cnt(const struct cntr_entry *entry, void *context,
1411 int vl, int mode, u64 data)
1412{
Shraddha Barkea787bde2015-10-15 00:58:29 +05301413 struct hfi1_pportdata *ppd = context;
Mike Marciniszyn77241052015-07-30 15:17:43 -04001414
1415 if (vl != CNTR_INVALID_VL)
1416 return 0;
1417 return read_write_sw(ppd->dd, &ppd->link_up, mode, data);
1418}
1419
1420static u64 access_sw_xmit_discards(const struct cntr_entry *entry,
1421 void *context, int vl, int mode, u64 data)
1422{
Shraddha Barkea787bde2015-10-15 00:58:29 +05301423 struct hfi1_pportdata *ppd = context;
Mike Marciniszyn77241052015-07-30 15:17:43 -04001424
1425 if (vl != CNTR_INVALID_VL)
1426 return 0;
1427
1428 return read_write_sw(ppd->dd, &ppd->port_xmit_discards, mode, data);
1429}
1430
1431static u64 access_xmit_constraint_errs(const struct cntr_entry *entry,
1432 void *context, int vl, int mode, u64 data)
1433{
Shraddha Barkea787bde2015-10-15 00:58:29 +05301434 struct hfi1_pportdata *ppd = context;
Mike Marciniszyn77241052015-07-30 15:17:43 -04001435
1436 if (vl != CNTR_INVALID_VL)
1437 return 0;
1438
1439 return read_write_sw(ppd->dd, &ppd->port_xmit_constraint_errors,
1440 mode, data);
1441}
1442
1443static u64 access_rcv_constraint_errs(const struct cntr_entry *entry,
1444 void *context, int vl, int mode, u64 data)
1445{
Shraddha Barkea787bde2015-10-15 00:58:29 +05301446 struct hfi1_pportdata *ppd = context;
Mike Marciniszyn77241052015-07-30 15:17:43 -04001447
1448 if (vl != CNTR_INVALID_VL)
1449 return 0;
1450
1451 return read_write_sw(ppd->dd, &ppd->port_rcv_constraint_errors,
1452 mode, data);
1453}
1454
1455u64 get_all_cpu_total(u64 __percpu *cntr)
1456{
1457 int cpu;
1458 u64 counter = 0;
1459
1460 for_each_possible_cpu(cpu)
1461 counter += *per_cpu_ptr(cntr, cpu);
1462 return counter;
1463}
1464
1465static u64 read_write_cpu(struct hfi1_devdata *dd, u64 *z_val,
1466 u64 __percpu *cntr,
1467 int vl, int mode, u64 data)
1468{
1469
1470 u64 ret = 0;
1471
1472 if (vl != CNTR_INVALID_VL)
1473 return 0;
1474
1475 if (mode == CNTR_MODE_R) {
1476 ret = get_all_cpu_total(cntr) - *z_val;
1477 } else if (mode == CNTR_MODE_W) {
1478 /* A write can only zero the counter */
1479 if (data == 0)
1480 *z_val = get_all_cpu_total(cntr);
1481 else
1482 dd_dev_err(dd, "Per CPU cntrs can only be zeroed");
1483 } else {
1484 dd_dev_err(dd, "Invalid cntr sw cpu access mode");
1485 return 0;
1486 }
1487
1488 return ret;
1489}
1490
1491static u64 access_sw_cpu_intr(const struct cntr_entry *entry,
1492 void *context, int vl, int mode, u64 data)
1493{
Shraddha Barkea787bde2015-10-15 00:58:29 +05301494 struct hfi1_devdata *dd = context;
Mike Marciniszyn77241052015-07-30 15:17:43 -04001495
1496 return read_write_cpu(dd, &dd->z_int_counter, dd->int_counter, vl,
1497 mode, data);
1498}
1499
1500static u64 access_sw_cpu_rcv_limit(const struct cntr_entry *entry,
1501 void *context, int vl, int mode, u64 data)
1502{
Shraddha Barkea787bde2015-10-15 00:58:29 +05301503 struct hfi1_devdata *dd = context;
Mike Marciniszyn77241052015-07-30 15:17:43 -04001504
1505 return read_write_cpu(dd, &dd->z_rcv_limit, dd->rcv_limit, vl,
1506 mode, data);
1507}
1508
1509static u64 access_sw_pio_wait(const struct cntr_entry *entry,
1510 void *context, int vl, int mode, u64 data)
1511{
Shraddha Barkea787bde2015-10-15 00:58:29 +05301512 struct hfi1_devdata *dd = context;
Mike Marciniszyn77241052015-07-30 15:17:43 -04001513
1514 return dd->verbs_dev.n_piowait;
1515}
1516
1517static u64 access_sw_vtx_wait(const struct cntr_entry *entry,
1518 void *context, int vl, int mode, u64 data)
1519{
Shraddha Barkea787bde2015-10-15 00:58:29 +05301520 struct hfi1_devdata *dd = context;
Mike Marciniszyn77241052015-07-30 15:17:43 -04001521
1522 return dd->verbs_dev.n_txwait;
1523}
1524
1525static u64 access_sw_kmem_wait(const struct cntr_entry *entry,
1526 void *context, int vl, int mode, u64 data)
1527{
Shraddha Barkea787bde2015-10-15 00:58:29 +05301528 struct hfi1_devdata *dd = context;
Mike Marciniszyn77241052015-07-30 15:17:43 -04001529
1530 return dd->verbs_dev.n_kmem_wait;
1531}
1532
1533#define def_access_sw_cpu(cntr) \
1534static u64 access_sw_cpu_##cntr(const struct cntr_entry *entry, \
1535 void *context, int vl, int mode, u64 data) \
1536{ \
1537 struct hfi1_pportdata *ppd = (struct hfi1_pportdata *)context; \
1538 return read_write_cpu(ppd->dd, &ppd->ibport_data.z_ ##cntr, \
1539 ppd->ibport_data.cntr, vl, \
1540 mode, data); \
1541}
1542
1543def_access_sw_cpu(rc_acks);
1544def_access_sw_cpu(rc_qacks);
1545def_access_sw_cpu(rc_delayed_comp);
1546
1547#define def_access_ibp_counter(cntr) \
1548static u64 access_ibp_##cntr(const struct cntr_entry *entry, \
1549 void *context, int vl, int mode, u64 data) \
1550{ \
1551 struct hfi1_pportdata *ppd = (struct hfi1_pportdata *)context; \
1552 \
1553 if (vl != CNTR_INVALID_VL) \
1554 return 0; \
1555 \
1556 return read_write_sw(ppd->dd, &ppd->ibport_data.n_ ##cntr, \
1557 mode, data); \
1558}
1559
1560def_access_ibp_counter(loop_pkts);
1561def_access_ibp_counter(rc_resends);
1562def_access_ibp_counter(rnr_naks);
1563def_access_ibp_counter(other_naks);
1564def_access_ibp_counter(rc_timeouts);
1565def_access_ibp_counter(pkt_drops);
1566def_access_ibp_counter(dmawait);
1567def_access_ibp_counter(rc_seqnak);
1568def_access_ibp_counter(rc_dupreq);
1569def_access_ibp_counter(rdma_seq);
1570def_access_ibp_counter(unaligned);
1571def_access_ibp_counter(seq_naks);
1572
1573static struct cntr_entry dev_cntrs[DEV_CNTR_LAST] = {
1574[C_RCV_OVF] = RXE32_DEV_CNTR_ELEM(RcvOverflow, RCV_BUF_OVFL_CNT, CNTR_SYNTH),
1575[C_RX_TID_FULL] = RXE32_DEV_CNTR_ELEM(RxTIDFullEr, RCV_TID_FULL_ERR_CNT,
1576 CNTR_NORMAL),
1577[C_RX_TID_INVALID] = RXE32_DEV_CNTR_ELEM(RxTIDInvalid, RCV_TID_VALID_ERR_CNT,
1578 CNTR_NORMAL),
1579[C_RX_TID_FLGMS] = RXE32_DEV_CNTR_ELEM(RxTidFLGMs,
1580 RCV_TID_FLOW_GEN_MISMATCH_CNT,
1581 CNTR_NORMAL),
1582[C_RX_CTX_RHQS] = RXE32_DEV_CNTR_ELEM(RxCtxRHQS, RCV_CONTEXT_RHQ_STALL,
1583 CNTR_NORMAL),
1584[C_RX_CTX_EGRS] = RXE32_DEV_CNTR_ELEM(RxCtxEgrS, RCV_CONTEXT_EGR_STALL,
1585 CNTR_NORMAL),
1586[C_RCV_TID_FLSMS] = RXE32_DEV_CNTR_ELEM(RxTidFLSMs,
1587 RCV_TID_FLOW_SEQ_MISMATCH_CNT, CNTR_NORMAL),
1588[C_CCE_PCI_CR_ST] = CCE_PERF_DEV_CNTR_ELEM(CcePciCrSt,
1589 CCE_PCIE_POSTED_CRDT_STALL_CNT, CNTR_NORMAL),
1590[C_CCE_PCI_TR_ST] = CCE_PERF_DEV_CNTR_ELEM(CcePciTrSt, CCE_PCIE_TRGT_STALL_CNT,
1591 CNTR_NORMAL),
1592[C_CCE_PIO_WR_ST] = CCE_PERF_DEV_CNTR_ELEM(CcePioWrSt, CCE_PIO_WR_STALL_CNT,
1593 CNTR_NORMAL),
1594[C_CCE_ERR_INT] = CCE_INT_DEV_CNTR_ELEM(CceErrInt, CCE_ERR_INT_CNT,
1595 CNTR_NORMAL),
1596[C_CCE_SDMA_INT] = CCE_INT_DEV_CNTR_ELEM(CceSdmaInt, CCE_SDMA_INT_CNT,
1597 CNTR_NORMAL),
1598[C_CCE_MISC_INT] = CCE_INT_DEV_CNTR_ELEM(CceMiscInt, CCE_MISC_INT_CNT,
1599 CNTR_NORMAL),
1600[C_CCE_RCV_AV_INT] = CCE_INT_DEV_CNTR_ELEM(CceRcvAvInt, CCE_RCV_AVAIL_INT_CNT,
1601 CNTR_NORMAL),
1602[C_CCE_RCV_URG_INT] = CCE_INT_DEV_CNTR_ELEM(CceRcvUrgInt,
1603 CCE_RCV_URGENT_INT_CNT, CNTR_NORMAL),
1604[C_CCE_SEND_CR_INT] = CCE_INT_DEV_CNTR_ELEM(CceSndCrInt,
1605 CCE_SEND_CREDIT_INT_CNT, CNTR_NORMAL),
1606[C_DC_UNC_ERR] = DC_PERF_CNTR(DcUnctblErr, DCC_ERR_UNCORRECTABLE_CNT,
1607 CNTR_SYNTH),
1608[C_DC_RCV_ERR] = DC_PERF_CNTR(DcRecvErr, DCC_ERR_PORTRCV_ERR_CNT, CNTR_SYNTH),
1609[C_DC_FM_CFG_ERR] = DC_PERF_CNTR(DcFmCfgErr, DCC_ERR_FMCONFIG_ERR_CNT,
1610 CNTR_SYNTH),
1611[C_DC_RMT_PHY_ERR] = DC_PERF_CNTR(DcRmtPhyErr, DCC_ERR_RCVREMOTE_PHY_ERR_CNT,
1612 CNTR_SYNTH),
1613[C_DC_DROPPED_PKT] = DC_PERF_CNTR(DcDroppedPkt, DCC_ERR_DROPPED_PKT_CNT,
1614 CNTR_SYNTH),
1615[C_DC_MC_XMIT_PKTS] = DC_PERF_CNTR(DcMcXmitPkts,
1616 DCC_PRF_PORT_XMIT_MULTICAST_CNT, CNTR_SYNTH),
1617[C_DC_MC_RCV_PKTS] = DC_PERF_CNTR(DcMcRcvPkts,
1618 DCC_PRF_PORT_RCV_MULTICAST_PKT_CNT,
1619 CNTR_SYNTH),
1620[C_DC_XMIT_CERR] = DC_PERF_CNTR(DcXmitCorr,
1621 DCC_PRF_PORT_XMIT_CORRECTABLE_CNT, CNTR_SYNTH),
1622[C_DC_RCV_CERR] = DC_PERF_CNTR(DcRcvCorrCnt, DCC_PRF_PORT_RCV_CORRECTABLE_CNT,
1623 CNTR_SYNTH),
1624[C_DC_RCV_FCC] = DC_PERF_CNTR(DcRxFCntl, DCC_PRF_RX_FLOW_CRTL_CNT,
1625 CNTR_SYNTH),
1626[C_DC_XMIT_FCC] = DC_PERF_CNTR(DcXmitFCntl, DCC_PRF_TX_FLOW_CRTL_CNT,
1627 CNTR_SYNTH),
1628[C_DC_XMIT_FLITS] = DC_PERF_CNTR(DcXmitFlits, DCC_PRF_PORT_XMIT_DATA_CNT,
1629 CNTR_SYNTH),
1630[C_DC_RCV_FLITS] = DC_PERF_CNTR(DcRcvFlits, DCC_PRF_PORT_RCV_DATA_CNT,
1631 CNTR_SYNTH),
1632[C_DC_XMIT_PKTS] = DC_PERF_CNTR(DcXmitPkts, DCC_PRF_PORT_XMIT_PKTS_CNT,
1633 CNTR_SYNTH),
1634[C_DC_RCV_PKTS] = DC_PERF_CNTR(DcRcvPkts, DCC_PRF_PORT_RCV_PKTS_CNT,
1635 CNTR_SYNTH),
1636[C_DC_RX_FLIT_VL] = DC_PERF_CNTR(DcRxFlitVl, DCC_PRF_PORT_VL_RCV_DATA_CNT,
1637 CNTR_SYNTH | CNTR_VL),
1638[C_DC_RX_PKT_VL] = DC_PERF_CNTR(DcRxPktVl, DCC_PRF_PORT_VL_RCV_PKTS_CNT,
1639 CNTR_SYNTH | CNTR_VL),
1640[C_DC_RCV_FCN] = DC_PERF_CNTR(DcRcvFcn, DCC_PRF_PORT_RCV_FECN_CNT, CNTR_SYNTH),
1641[C_DC_RCV_FCN_VL] = DC_PERF_CNTR(DcRcvFcnVl, DCC_PRF_PORT_VL_RCV_FECN_CNT,
1642 CNTR_SYNTH | CNTR_VL),
1643[C_DC_RCV_BCN] = DC_PERF_CNTR(DcRcvBcn, DCC_PRF_PORT_RCV_BECN_CNT, CNTR_SYNTH),
1644[C_DC_RCV_BCN_VL] = DC_PERF_CNTR(DcRcvBcnVl, DCC_PRF_PORT_VL_RCV_BECN_CNT,
1645 CNTR_SYNTH | CNTR_VL),
1646[C_DC_RCV_BBL] = DC_PERF_CNTR(DcRcvBbl, DCC_PRF_PORT_RCV_BUBBLE_CNT,
1647 CNTR_SYNTH),
1648[C_DC_RCV_BBL_VL] = DC_PERF_CNTR(DcRcvBblVl, DCC_PRF_PORT_VL_RCV_BUBBLE_CNT,
1649 CNTR_SYNTH | CNTR_VL),
1650[C_DC_MARK_FECN] = DC_PERF_CNTR(DcMarkFcn, DCC_PRF_PORT_MARK_FECN_CNT,
1651 CNTR_SYNTH),
1652[C_DC_MARK_FECN_VL] = DC_PERF_CNTR(DcMarkFcnVl, DCC_PRF_PORT_VL_MARK_FECN_CNT,
1653 CNTR_SYNTH | CNTR_VL),
1654[C_DC_TOTAL_CRC] =
1655 DC_PERF_CNTR_LCB(DcTotCrc, DC_LCB_ERR_INFO_TOTAL_CRC_ERR,
1656 CNTR_SYNTH),
1657[C_DC_CRC_LN0] = DC_PERF_CNTR_LCB(DcCrcLn0, DC_LCB_ERR_INFO_CRC_ERR_LN0,
1658 CNTR_SYNTH),
1659[C_DC_CRC_LN1] = DC_PERF_CNTR_LCB(DcCrcLn1, DC_LCB_ERR_INFO_CRC_ERR_LN1,
1660 CNTR_SYNTH),
1661[C_DC_CRC_LN2] = DC_PERF_CNTR_LCB(DcCrcLn2, DC_LCB_ERR_INFO_CRC_ERR_LN2,
1662 CNTR_SYNTH),
1663[C_DC_CRC_LN3] = DC_PERF_CNTR_LCB(DcCrcLn3, DC_LCB_ERR_INFO_CRC_ERR_LN3,
1664 CNTR_SYNTH),
1665[C_DC_CRC_MULT_LN] =
1666 DC_PERF_CNTR_LCB(DcMultLn, DC_LCB_ERR_INFO_CRC_ERR_MULTI_LN,
1667 CNTR_SYNTH),
1668[C_DC_TX_REPLAY] = DC_PERF_CNTR_LCB(DcTxReplay, DC_LCB_ERR_INFO_TX_REPLAY_CNT,
1669 CNTR_SYNTH),
1670[C_DC_RX_REPLAY] = DC_PERF_CNTR_LCB(DcRxReplay, DC_LCB_ERR_INFO_RX_REPLAY_CNT,
1671 CNTR_SYNTH),
1672[C_DC_SEQ_CRC_CNT] =
1673 DC_PERF_CNTR_LCB(DcLinkSeqCrc, DC_LCB_ERR_INFO_SEQ_CRC_CNT,
1674 CNTR_SYNTH),
1675[C_DC_ESC0_ONLY_CNT] =
1676 DC_PERF_CNTR_LCB(DcEsc0, DC_LCB_ERR_INFO_ESCAPE_0_ONLY_CNT,
1677 CNTR_SYNTH),
1678[C_DC_ESC0_PLUS1_CNT] =
1679 DC_PERF_CNTR_LCB(DcEsc1, DC_LCB_ERR_INFO_ESCAPE_0_PLUS1_CNT,
1680 CNTR_SYNTH),
1681[C_DC_ESC0_PLUS2_CNT] =
1682 DC_PERF_CNTR_LCB(DcEsc0Plus2, DC_LCB_ERR_INFO_ESCAPE_0_PLUS2_CNT,
1683 CNTR_SYNTH),
1684[C_DC_REINIT_FROM_PEER_CNT] =
1685 DC_PERF_CNTR_LCB(DcReinitPeer, DC_LCB_ERR_INFO_REINIT_FROM_PEER_CNT,
1686 CNTR_SYNTH),
1687[C_DC_SBE_CNT] = DC_PERF_CNTR_LCB(DcSbe, DC_LCB_ERR_INFO_SBE_CNT,
1688 CNTR_SYNTH),
1689[C_DC_MISC_FLG_CNT] =
1690 DC_PERF_CNTR_LCB(DcMiscFlg, DC_LCB_ERR_INFO_MISC_FLG_CNT,
1691 CNTR_SYNTH),
1692[C_DC_PRF_GOOD_LTP_CNT] =
1693 DC_PERF_CNTR_LCB(DcGoodLTP, DC_LCB_PRF_GOOD_LTP_CNT, CNTR_SYNTH),
1694[C_DC_PRF_ACCEPTED_LTP_CNT] =
1695 DC_PERF_CNTR_LCB(DcAccLTP, DC_LCB_PRF_ACCEPTED_LTP_CNT,
1696 CNTR_SYNTH),
1697[C_DC_PRF_RX_FLIT_CNT] =
1698 DC_PERF_CNTR_LCB(DcPrfRxFlit, DC_LCB_PRF_RX_FLIT_CNT, CNTR_SYNTH),
1699[C_DC_PRF_TX_FLIT_CNT] =
1700 DC_PERF_CNTR_LCB(DcPrfTxFlit, DC_LCB_PRF_TX_FLIT_CNT, CNTR_SYNTH),
1701[C_DC_PRF_CLK_CNTR] =
1702 DC_PERF_CNTR_LCB(DcPrfClk, DC_LCB_PRF_CLK_CNTR, CNTR_SYNTH),
1703[C_DC_PG_DBG_FLIT_CRDTS_CNT] =
1704 DC_PERF_CNTR_LCB(DcFltCrdts, DC_LCB_PG_DBG_FLIT_CRDTS_CNT, CNTR_SYNTH),
1705[C_DC_PG_STS_PAUSE_COMPLETE_CNT] =
1706 DC_PERF_CNTR_LCB(DcPauseComp, DC_LCB_PG_STS_PAUSE_COMPLETE_CNT,
1707 CNTR_SYNTH),
1708[C_DC_PG_STS_TX_SBE_CNT] =
1709 DC_PERF_CNTR_LCB(DcStsTxSbe, DC_LCB_PG_STS_TX_SBE_CNT, CNTR_SYNTH),
1710[C_DC_PG_STS_TX_MBE_CNT] =
1711 DC_PERF_CNTR_LCB(DcStsTxMbe, DC_LCB_PG_STS_TX_MBE_CNT,
1712 CNTR_SYNTH),
1713[C_SW_CPU_INTR] = CNTR_ELEM("Intr", 0, 0, CNTR_NORMAL,
1714 access_sw_cpu_intr),
1715[C_SW_CPU_RCV_LIM] = CNTR_ELEM("RcvLimit", 0, 0, CNTR_NORMAL,
1716 access_sw_cpu_rcv_limit),
1717[C_SW_VTX_WAIT] = CNTR_ELEM("vTxWait", 0, 0, CNTR_NORMAL,
1718 access_sw_vtx_wait),
1719[C_SW_PIO_WAIT] = CNTR_ELEM("PioWait", 0, 0, CNTR_NORMAL,
1720 access_sw_pio_wait),
1721[C_SW_KMEM_WAIT] = CNTR_ELEM("KmemWait", 0, 0, CNTR_NORMAL,
1722 access_sw_kmem_wait),
1723};
1724
1725static struct cntr_entry port_cntrs[PORT_CNTR_LAST] = {
1726[C_TX_UNSUP_VL] = TXE32_PORT_CNTR_ELEM(TxUnVLErr, SEND_UNSUP_VL_ERR_CNT,
1727 CNTR_NORMAL),
1728[C_TX_INVAL_LEN] = TXE32_PORT_CNTR_ELEM(TxInvalLen, SEND_LEN_ERR_CNT,
1729 CNTR_NORMAL),
1730[C_TX_MM_LEN_ERR] = TXE32_PORT_CNTR_ELEM(TxMMLenErr, SEND_MAX_MIN_LEN_ERR_CNT,
1731 CNTR_NORMAL),
1732[C_TX_UNDERRUN] = TXE32_PORT_CNTR_ELEM(TxUnderrun, SEND_UNDERRUN_CNT,
1733 CNTR_NORMAL),
1734[C_TX_FLOW_STALL] = TXE32_PORT_CNTR_ELEM(TxFlowStall, SEND_FLOW_STALL_CNT,
1735 CNTR_NORMAL),
1736[C_TX_DROPPED] = TXE32_PORT_CNTR_ELEM(TxDropped, SEND_DROPPED_PKT_CNT,
1737 CNTR_NORMAL),
1738[C_TX_HDR_ERR] = TXE32_PORT_CNTR_ELEM(TxHdrErr, SEND_HEADERS_ERR_CNT,
1739 CNTR_NORMAL),
1740[C_TX_PKT] = TXE64_PORT_CNTR_ELEM(TxPkt, SEND_DATA_PKT_CNT, CNTR_NORMAL),
1741[C_TX_WORDS] = TXE64_PORT_CNTR_ELEM(TxWords, SEND_DWORD_CNT, CNTR_NORMAL),
1742[C_TX_WAIT] = TXE64_PORT_CNTR_ELEM(TxWait, SEND_WAIT_CNT, CNTR_SYNTH),
1743[C_TX_FLIT_VL] = TXE64_PORT_CNTR_ELEM(TxFlitVL, SEND_DATA_VL0_CNT,
1744 CNTR_SYNTH | CNTR_VL),
1745[C_TX_PKT_VL] = TXE64_PORT_CNTR_ELEM(TxPktVL, SEND_DATA_PKT_VL0_CNT,
1746 CNTR_SYNTH | CNTR_VL),
1747[C_TX_WAIT_VL] = TXE64_PORT_CNTR_ELEM(TxWaitVL, SEND_WAIT_VL0_CNT,
1748 CNTR_SYNTH | CNTR_VL),
1749[C_RX_PKT] = RXE64_PORT_CNTR_ELEM(RxPkt, RCV_DATA_PKT_CNT, CNTR_NORMAL),
1750[C_RX_WORDS] = RXE64_PORT_CNTR_ELEM(RxWords, RCV_DWORD_CNT, CNTR_NORMAL),
1751[C_SW_LINK_DOWN] = CNTR_ELEM("SwLinkDown", 0, 0, CNTR_SYNTH | CNTR_32BIT,
1752 access_sw_link_dn_cnt),
1753[C_SW_LINK_UP] = CNTR_ELEM("SwLinkUp", 0, 0, CNTR_SYNTH | CNTR_32BIT,
1754 access_sw_link_up_cnt),
1755[C_SW_XMIT_DSCD] = CNTR_ELEM("XmitDscd", 0, 0, CNTR_SYNTH | CNTR_32BIT,
1756 access_sw_xmit_discards),
1757[C_SW_XMIT_DSCD_VL] = CNTR_ELEM("XmitDscdVl", 0, 0,
1758 CNTR_SYNTH | CNTR_32BIT | CNTR_VL,
1759 access_sw_xmit_discards),
1760[C_SW_XMIT_CSTR_ERR] = CNTR_ELEM("XmitCstrErr", 0, 0, CNTR_SYNTH,
1761 access_xmit_constraint_errs),
1762[C_SW_RCV_CSTR_ERR] = CNTR_ELEM("RcvCstrErr", 0, 0, CNTR_SYNTH,
1763 access_rcv_constraint_errs),
1764[C_SW_IBP_LOOP_PKTS] = SW_IBP_CNTR(LoopPkts, loop_pkts),
1765[C_SW_IBP_RC_RESENDS] = SW_IBP_CNTR(RcResend, rc_resends),
1766[C_SW_IBP_RNR_NAKS] = SW_IBP_CNTR(RnrNak, rnr_naks),
1767[C_SW_IBP_OTHER_NAKS] = SW_IBP_CNTR(OtherNak, other_naks),
1768[C_SW_IBP_RC_TIMEOUTS] = SW_IBP_CNTR(RcTimeOut, rc_timeouts),
1769[C_SW_IBP_PKT_DROPS] = SW_IBP_CNTR(PktDrop, pkt_drops),
1770[C_SW_IBP_DMA_WAIT] = SW_IBP_CNTR(DmaWait, dmawait),
1771[C_SW_IBP_RC_SEQNAK] = SW_IBP_CNTR(RcSeqNak, rc_seqnak),
1772[C_SW_IBP_RC_DUPREQ] = SW_IBP_CNTR(RcDupRew, rc_dupreq),
1773[C_SW_IBP_RDMA_SEQ] = SW_IBP_CNTR(RdmaSeq, rdma_seq),
1774[C_SW_IBP_UNALIGNED] = SW_IBP_CNTR(Unaligned, unaligned),
1775[C_SW_IBP_SEQ_NAK] = SW_IBP_CNTR(SeqNak, seq_naks),
1776[C_SW_CPU_RC_ACKS] = CNTR_ELEM("RcAcks", 0, 0, CNTR_NORMAL,
1777 access_sw_cpu_rc_acks),
1778[C_SW_CPU_RC_QACKS] = CNTR_ELEM("RcQacks", 0, 0, CNTR_NORMAL,
1779 access_sw_cpu_rc_qacks),
1780[C_SW_CPU_RC_DELAYED_COMP] = CNTR_ELEM("RcDelayComp", 0, 0, CNTR_NORMAL,
1781 access_sw_cpu_rc_delayed_comp),
1782[OVR_LBL(0)] = OVR_ELM(0), [OVR_LBL(1)] = OVR_ELM(1),
1783[OVR_LBL(2)] = OVR_ELM(2), [OVR_LBL(3)] = OVR_ELM(3),
1784[OVR_LBL(4)] = OVR_ELM(4), [OVR_LBL(5)] = OVR_ELM(5),
1785[OVR_LBL(6)] = OVR_ELM(6), [OVR_LBL(7)] = OVR_ELM(7),
1786[OVR_LBL(8)] = OVR_ELM(8), [OVR_LBL(9)] = OVR_ELM(9),
1787[OVR_LBL(10)] = OVR_ELM(10), [OVR_LBL(11)] = OVR_ELM(11),
1788[OVR_LBL(12)] = OVR_ELM(12), [OVR_LBL(13)] = OVR_ELM(13),
1789[OVR_LBL(14)] = OVR_ELM(14), [OVR_LBL(15)] = OVR_ELM(15),
1790[OVR_LBL(16)] = OVR_ELM(16), [OVR_LBL(17)] = OVR_ELM(17),
1791[OVR_LBL(18)] = OVR_ELM(18), [OVR_LBL(19)] = OVR_ELM(19),
1792[OVR_LBL(20)] = OVR_ELM(20), [OVR_LBL(21)] = OVR_ELM(21),
1793[OVR_LBL(22)] = OVR_ELM(22), [OVR_LBL(23)] = OVR_ELM(23),
1794[OVR_LBL(24)] = OVR_ELM(24), [OVR_LBL(25)] = OVR_ELM(25),
1795[OVR_LBL(26)] = OVR_ELM(26), [OVR_LBL(27)] = OVR_ELM(27),
1796[OVR_LBL(28)] = OVR_ELM(28), [OVR_LBL(29)] = OVR_ELM(29),
1797[OVR_LBL(30)] = OVR_ELM(30), [OVR_LBL(31)] = OVR_ELM(31),
1798[OVR_LBL(32)] = OVR_ELM(32), [OVR_LBL(33)] = OVR_ELM(33),
1799[OVR_LBL(34)] = OVR_ELM(34), [OVR_LBL(35)] = OVR_ELM(35),
1800[OVR_LBL(36)] = OVR_ELM(36), [OVR_LBL(37)] = OVR_ELM(37),
1801[OVR_LBL(38)] = OVR_ELM(38), [OVR_LBL(39)] = OVR_ELM(39),
1802[OVR_LBL(40)] = OVR_ELM(40), [OVR_LBL(41)] = OVR_ELM(41),
1803[OVR_LBL(42)] = OVR_ELM(42), [OVR_LBL(43)] = OVR_ELM(43),
1804[OVR_LBL(44)] = OVR_ELM(44), [OVR_LBL(45)] = OVR_ELM(45),
1805[OVR_LBL(46)] = OVR_ELM(46), [OVR_LBL(47)] = OVR_ELM(47),
1806[OVR_LBL(48)] = OVR_ELM(48), [OVR_LBL(49)] = OVR_ELM(49),
1807[OVR_LBL(50)] = OVR_ELM(50), [OVR_LBL(51)] = OVR_ELM(51),
1808[OVR_LBL(52)] = OVR_ELM(52), [OVR_LBL(53)] = OVR_ELM(53),
1809[OVR_LBL(54)] = OVR_ELM(54), [OVR_LBL(55)] = OVR_ELM(55),
1810[OVR_LBL(56)] = OVR_ELM(56), [OVR_LBL(57)] = OVR_ELM(57),
1811[OVR_LBL(58)] = OVR_ELM(58), [OVR_LBL(59)] = OVR_ELM(59),
1812[OVR_LBL(60)] = OVR_ELM(60), [OVR_LBL(61)] = OVR_ELM(61),
1813[OVR_LBL(62)] = OVR_ELM(62), [OVR_LBL(63)] = OVR_ELM(63),
1814[OVR_LBL(64)] = OVR_ELM(64), [OVR_LBL(65)] = OVR_ELM(65),
1815[OVR_LBL(66)] = OVR_ELM(66), [OVR_LBL(67)] = OVR_ELM(67),
1816[OVR_LBL(68)] = OVR_ELM(68), [OVR_LBL(69)] = OVR_ELM(69),
1817[OVR_LBL(70)] = OVR_ELM(70), [OVR_LBL(71)] = OVR_ELM(71),
1818[OVR_LBL(72)] = OVR_ELM(72), [OVR_LBL(73)] = OVR_ELM(73),
1819[OVR_LBL(74)] = OVR_ELM(74), [OVR_LBL(75)] = OVR_ELM(75),
1820[OVR_LBL(76)] = OVR_ELM(76), [OVR_LBL(77)] = OVR_ELM(77),
1821[OVR_LBL(78)] = OVR_ELM(78), [OVR_LBL(79)] = OVR_ELM(79),
1822[OVR_LBL(80)] = OVR_ELM(80), [OVR_LBL(81)] = OVR_ELM(81),
1823[OVR_LBL(82)] = OVR_ELM(82), [OVR_LBL(83)] = OVR_ELM(83),
1824[OVR_LBL(84)] = OVR_ELM(84), [OVR_LBL(85)] = OVR_ELM(85),
1825[OVR_LBL(86)] = OVR_ELM(86), [OVR_LBL(87)] = OVR_ELM(87),
1826[OVR_LBL(88)] = OVR_ELM(88), [OVR_LBL(89)] = OVR_ELM(89),
1827[OVR_LBL(90)] = OVR_ELM(90), [OVR_LBL(91)] = OVR_ELM(91),
1828[OVR_LBL(92)] = OVR_ELM(92), [OVR_LBL(93)] = OVR_ELM(93),
1829[OVR_LBL(94)] = OVR_ELM(94), [OVR_LBL(95)] = OVR_ELM(95),
1830[OVR_LBL(96)] = OVR_ELM(96), [OVR_LBL(97)] = OVR_ELM(97),
1831[OVR_LBL(98)] = OVR_ELM(98), [OVR_LBL(99)] = OVR_ELM(99),
1832[OVR_LBL(100)] = OVR_ELM(100), [OVR_LBL(101)] = OVR_ELM(101),
1833[OVR_LBL(102)] = OVR_ELM(102), [OVR_LBL(103)] = OVR_ELM(103),
1834[OVR_LBL(104)] = OVR_ELM(104), [OVR_LBL(105)] = OVR_ELM(105),
1835[OVR_LBL(106)] = OVR_ELM(106), [OVR_LBL(107)] = OVR_ELM(107),
1836[OVR_LBL(108)] = OVR_ELM(108), [OVR_LBL(109)] = OVR_ELM(109),
1837[OVR_LBL(110)] = OVR_ELM(110), [OVR_LBL(111)] = OVR_ELM(111),
1838[OVR_LBL(112)] = OVR_ELM(112), [OVR_LBL(113)] = OVR_ELM(113),
1839[OVR_LBL(114)] = OVR_ELM(114), [OVR_LBL(115)] = OVR_ELM(115),
1840[OVR_LBL(116)] = OVR_ELM(116), [OVR_LBL(117)] = OVR_ELM(117),
1841[OVR_LBL(118)] = OVR_ELM(118), [OVR_LBL(119)] = OVR_ELM(119),
1842[OVR_LBL(120)] = OVR_ELM(120), [OVR_LBL(121)] = OVR_ELM(121),
1843[OVR_LBL(122)] = OVR_ELM(122), [OVR_LBL(123)] = OVR_ELM(123),
1844[OVR_LBL(124)] = OVR_ELM(124), [OVR_LBL(125)] = OVR_ELM(125),
1845[OVR_LBL(126)] = OVR_ELM(126), [OVR_LBL(127)] = OVR_ELM(127),
1846[OVR_LBL(128)] = OVR_ELM(128), [OVR_LBL(129)] = OVR_ELM(129),
1847[OVR_LBL(130)] = OVR_ELM(130), [OVR_LBL(131)] = OVR_ELM(131),
1848[OVR_LBL(132)] = OVR_ELM(132), [OVR_LBL(133)] = OVR_ELM(133),
1849[OVR_LBL(134)] = OVR_ELM(134), [OVR_LBL(135)] = OVR_ELM(135),
1850[OVR_LBL(136)] = OVR_ELM(136), [OVR_LBL(137)] = OVR_ELM(137),
1851[OVR_LBL(138)] = OVR_ELM(138), [OVR_LBL(139)] = OVR_ELM(139),
1852[OVR_LBL(140)] = OVR_ELM(140), [OVR_LBL(141)] = OVR_ELM(141),
1853[OVR_LBL(142)] = OVR_ELM(142), [OVR_LBL(143)] = OVR_ELM(143),
1854[OVR_LBL(144)] = OVR_ELM(144), [OVR_LBL(145)] = OVR_ELM(145),
1855[OVR_LBL(146)] = OVR_ELM(146), [OVR_LBL(147)] = OVR_ELM(147),
1856[OVR_LBL(148)] = OVR_ELM(148), [OVR_LBL(149)] = OVR_ELM(149),
1857[OVR_LBL(150)] = OVR_ELM(150), [OVR_LBL(151)] = OVR_ELM(151),
1858[OVR_LBL(152)] = OVR_ELM(152), [OVR_LBL(153)] = OVR_ELM(153),
1859[OVR_LBL(154)] = OVR_ELM(154), [OVR_LBL(155)] = OVR_ELM(155),
1860[OVR_LBL(156)] = OVR_ELM(156), [OVR_LBL(157)] = OVR_ELM(157),
1861[OVR_LBL(158)] = OVR_ELM(158), [OVR_LBL(159)] = OVR_ELM(159),
1862};
1863
1864/* ======================================================================== */
1865
1866/* return true if this is chip revision revision a0 */
1867int is_a0(struct hfi1_devdata *dd)
1868{
1869 return ((dd->revision >> CCE_REVISION_CHIP_REV_MINOR_SHIFT)
1870 & CCE_REVISION_CHIP_REV_MINOR_MASK) == 0;
1871}
1872
1873/* return true if this is chip revision revision a */
1874int is_ax(struct hfi1_devdata *dd)
1875{
1876 u8 chip_rev_minor =
1877 dd->revision >> CCE_REVISION_CHIP_REV_MINOR_SHIFT
1878 & CCE_REVISION_CHIP_REV_MINOR_MASK;
1879 return (chip_rev_minor & 0xf0) == 0;
1880}
1881
1882/* return true if this is chip revision revision b */
1883int is_bx(struct hfi1_devdata *dd)
1884{
1885 u8 chip_rev_minor =
1886 dd->revision >> CCE_REVISION_CHIP_REV_MINOR_SHIFT
1887 & CCE_REVISION_CHIP_REV_MINOR_MASK;
1888 return !!(chip_rev_minor & 0x10);
1889}
1890
1891/*
1892 * Append string s to buffer buf. Arguments curp and len are the current
1893 * position and remaining length, respectively.
1894 *
1895 * return 0 on success, 1 on out of room
1896 */
1897static int append_str(char *buf, char **curp, int *lenp, const char *s)
1898{
1899 char *p = *curp;
1900 int len = *lenp;
1901 int result = 0; /* success */
1902 char c;
1903
1904 /* add a comma, if first in the buffer */
1905 if (p != buf) {
1906 if (len == 0) {
1907 result = 1; /* out of room */
1908 goto done;
1909 }
1910 *p++ = ',';
1911 len--;
1912 }
1913
1914 /* copy the string */
1915 while ((c = *s++) != 0) {
1916 if (len == 0) {
1917 result = 1; /* out of room */
1918 goto done;
1919 }
1920 *p++ = c;
1921 len--;
1922 }
1923
1924done:
1925 /* write return values */
1926 *curp = p;
1927 *lenp = len;
1928
1929 return result;
1930}
1931
1932/*
1933 * Using the given flag table, print a comma separated string into
1934 * the buffer. End in '*' if the buffer is too short.
1935 */
1936static char *flag_string(char *buf, int buf_len, u64 flags,
1937 struct flag_table *table, int table_size)
1938{
1939 char extra[32];
1940 char *p = buf;
1941 int len = buf_len;
1942 int no_room = 0;
1943 int i;
1944
1945 /* make sure there is at least 2 so we can form "*" */
1946 if (len < 2)
1947 return "";
1948
1949 len--; /* leave room for a nul */
1950 for (i = 0; i < table_size; i++) {
1951 if (flags & table[i].flag) {
1952 no_room = append_str(buf, &p, &len, table[i].str);
1953 if (no_room)
1954 break;
1955 flags &= ~table[i].flag;
1956 }
1957 }
1958
1959 /* any undocumented bits left? */
1960 if (!no_room && flags) {
1961 snprintf(extra, sizeof(extra), "bits 0x%llx", flags);
1962 no_room = append_str(buf, &p, &len, extra);
1963 }
1964
1965 /* add * if ran out of room */
1966 if (no_room) {
1967 /* may need to back up to add space for a '*' */
1968 if (len == 0)
1969 --p;
1970 *p++ = '*';
1971 }
1972
1973 /* add final nul - space already allocated above */
1974 *p = 0;
1975 return buf;
1976}
1977
1978/* first 8 CCE error interrupt source names */
1979static const char * const cce_misc_names[] = {
1980 "CceErrInt", /* 0 */
1981 "RxeErrInt", /* 1 */
1982 "MiscErrInt", /* 2 */
1983 "Reserved3", /* 3 */
1984 "PioErrInt", /* 4 */
1985 "SDmaErrInt", /* 5 */
1986 "EgressErrInt", /* 6 */
1987 "TxeErrInt" /* 7 */
1988};
1989
1990/*
1991 * Return the miscellaneous error interrupt name.
1992 */
1993static char *is_misc_err_name(char *buf, size_t bsize, unsigned int source)
1994{
1995 if (source < ARRAY_SIZE(cce_misc_names))
1996 strncpy(buf, cce_misc_names[source], bsize);
1997 else
1998 snprintf(buf,
1999 bsize,
2000 "Reserved%u",
2001 source + IS_GENERAL_ERR_START);
2002
2003 return buf;
2004}
2005
2006/*
2007 * Return the SDMA engine error interrupt name.
2008 */
2009static char *is_sdma_eng_err_name(char *buf, size_t bsize, unsigned int source)
2010{
2011 snprintf(buf, bsize, "SDmaEngErrInt%u", source);
2012 return buf;
2013}
2014
2015/*
2016 * Return the send context error interrupt name.
2017 */
2018static char *is_sendctxt_err_name(char *buf, size_t bsize, unsigned int source)
2019{
2020 snprintf(buf, bsize, "SendCtxtErrInt%u", source);
2021 return buf;
2022}
2023
2024static const char * const various_names[] = {
2025 "PbcInt",
2026 "GpioAssertInt",
2027 "Qsfp1Int",
2028 "Qsfp2Int",
2029 "TCritInt"
2030};
2031
2032/*
2033 * Return the various interrupt name.
2034 */
2035static char *is_various_name(char *buf, size_t bsize, unsigned int source)
2036{
2037 if (source < ARRAY_SIZE(various_names))
2038 strncpy(buf, various_names[source], bsize);
2039 else
2040 snprintf(buf, bsize, "Reserved%u", source+IS_VARIOUS_START);
2041 return buf;
2042}
2043
2044/*
2045 * Return the DC interrupt name.
2046 */
2047static char *is_dc_name(char *buf, size_t bsize, unsigned int source)
2048{
2049 static const char * const dc_int_names[] = {
2050 "common",
2051 "lcb",
2052 "8051",
2053 "lbm" /* local block merge */
2054 };
2055
2056 if (source < ARRAY_SIZE(dc_int_names))
2057 snprintf(buf, bsize, "dc_%s_int", dc_int_names[source]);
2058 else
2059 snprintf(buf, bsize, "DCInt%u", source);
2060 return buf;
2061}
2062
2063static const char * const sdma_int_names[] = {
2064 "SDmaInt",
2065 "SdmaIdleInt",
2066 "SdmaProgressInt",
2067};
2068
2069/*
2070 * Return the SDMA engine interrupt name.
2071 */
2072static char *is_sdma_eng_name(char *buf, size_t bsize, unsigned int source)
2073{
2074 /* what interrupt */
2075 unsigned int what = source / TXE_NUM_SDMA_ENGINES;
2076 /* which engine */
2077 unsigned int which = source % TXE_NUM_SDMA_ENGINES;
2078
2079 if (likely(what < 3))
2080 snprintf(buf, bsize, "%s%u", sdma_int_names[what], which);
2081 else
2082 snprintf(buf, bsize, "Invalid SDMA interrupt %u", source);
2083 return buf;
2084}
2085
2086/*
2087 * Return the receive available interrupt name.
2088 */
2089static char *is_rcv_avail_name(char *buf, size_t bsize, unsigned int source)
2090{
2091 snprintf(buf, bsize, "RcvAvailInt%u", source);
2092 return buf;
2093}
2094
2095/*
2096 * Return the receive urgent interrupt name.
2097 */
2098static char *is_rcv_urgent_name(char *buf, size_t bsize, unsigned int source)
2099{
2100 snprintf(buf, bsize, "RcvUrgentInt%u", source);
2101 return buf;
2102}
2103
2104/*
2105 * Return the send credit interrupt name.
2106 */
2107static char *is_send_credit_name(char *buf, size_t bsize, unsigned int source)
2108{
2109 snprintf(buf, bsize, "SendCreditInt%u", source);
2110 return buf;
2111}
2112
2113/*
2114 * Return the reserved interrupt name.
2115 */
2116static char *is_reserved_name(char *buf, size_t bsize, unsigned int source)
2117{
2118 snprintf(buf, bsize, "Reserved%u", source + IS_RESERVED_START);
2119 return buf;
2120}
2121
2122static char *cce_err_status_string(char *buf, int buf_len, u64 flags)
2123{
2124 return flag_string(buf, buf_len, flags,
2125 cce_err_status_flags, ARRAY_SIZE(cce_err_status_flags));
2126}
2127
2128static char *rxe_err_status_string(char *buf, int buf_len, u64 flags)
2129{
2130 return flag_string(buf, buf_len, flags,
2131 rxe_err_status_flags, ARRAY_SIZE(rxe_err_status_flags));
2132}
2133
2134static char *misc_err_status_string(char *buf, int buf_len, u64 flags)
2135{
2136 return flag_string(buf, buf_len, flags, misc_err_status_flags,
2137 ARRAY_SIZE(misc_err_status_flags));
2138}
2139
2140static char *pio_err_status_string(char *buf, int buf_len, u64 flags)
2141{
2142 return flag_string(buf, buf_len, flags,
2143 pio_err_status_flags, ARRAY_SIZE(pio_err_status_flags));
2144}
2145
2146static char *sdma_err_status_string(char *buf, int buf_len, u64 flags)
2147{
2148 return flag_string(buf, buf_len, flags,
2149 sdma_err_status_flags,
2150 ARRAY_SIZE(sdma_err_status_flags));
2151}
2152
2153static char *egress_err_status_string(char *buf, int buf_len, u64 flags)
2154{
2155 return flag_string(buf, buf_len, flags,
2156 egress_err_status_flags, ARRAY_SIZE(egress_err_status_flags));
2157}
2158
2159static char *egress_err_info_string(char *buf, int buf_len, u64 flags)
2160{
2161 return flag_string(buf, buf_len, flags,
2162 egress_err_info_flags, ARRAY_SIZE(egress_err_info_flags));
2163}
2164
2165static char *send_err_status_string(char *buf, int buf_len, u64 flags)
2166{
2167 return flag_string(buf, buf_len, flags,
2168 send_err_status_flags,
2169 ARRAY_SIZE(send_err_status_flags));
2170}
2171
2172static void handle_cce_err(struct hfi1_devdata *dd, u32 unused, u64 reg)
2173{
2174 char buf[96];
2175
2176 /*
2177 * For most these errors, there is nothing that can be done except
2178 * report or record it.
2179 */
2180 dd_dev_info(dd, "CCE Error: %s\n",
2181 cce_err_status_string(buf, sizeof(buf), reg));
2182
2183 if ((reg & CCE_ERR_STATUS_CCE_CLI2_ASYNC_FIFO_PARITY_ERR_SMASK)
2184 && is_a0(dd)
2185 && (dd->icode != ICODE_FUNCTIONAL_SIMULATOR)) {
2186 /* this error requires a manual drop into SPC freeze mode */
2187 /* then a fix up */
2188 start_freeze_handling(dd->pport, FREEZE_SELF);
2189 }
2190}
2191
2192/*
2193 * Check counters for receive errors that do not have an interrupt
2194 * associated with them.
2195 */
2196#define RCVERR_CHECK_TIME 10
2197static void update_rcverr_timer(unsigned long opaque)
2198{
2199 struct hfi1_devdata *dd = (struct hfi1_devdata *)opaque;
2200 struct hfi1_pportdata *ppd = dd->pport;
2201 u32 cur_ovfl_cnt = read_dev_cntr(dd, C_RCV_OVF, CNTR_INVALID_VL);
2202
2203 if (dd->rcv_ovfl_cnt < cur_ovfl_cnt &&
2204 ppd->port_error_action & OPA_PI_MASK_EX_BUFFER_OVERRUN) {
2205 dd_dev_info(dd, "%s: PortErrorAction bounce\n", __func__);
2206 set_link_down_reason(ppd,
2207 OPA_LINKDOWN_REASON_EXCESSIVE_BUFFER_OVERRUN, 0,
2208 OPA_LINKDOWN_REASON_EXCESSIVE_BUFFER_OVERRUN);
2209 queue_work(ppd->hfi1_wq, &ppd->link_bounce_work);
2210 }
2211 dd->rcv_ovfl_cnt = (u32) cur_ovfl_cnt;
2212
2213 mod_timer(&dd->rcverr_timer, jiffies + HZ * RCVERR_CHECK_TIME);
2214}
2215
2216static int init_rcverr(struct hfi1_devdata *dd)
2217{
Muhammad Falak R Wani24523a92015-10-25 16:13:23 +05302218 setup_timer(&dd->rcverr_timer, update_rcverr_timer, (unsigned long)dd);
Mike Marciniszyn77241052015-07-30 15:17:43 -04002219 /* Assume the hardware counter has been reset */
2220 dd->rcv_ovfl_cnt = 0;
2221 return mod_timer(&dd->rcverr_timer, jiffies + HZ * RCVERR_CHECK_TIME);
2222}
2223
2224static void free_rcverr(struct hfi1_devdata *dd)
2225{
2226 if (dd->rcverr_timer.data)
2227 del_timer_sync(&dd->rcverr_timer);
2228 dd->rcverr_timer.data = 0;
2229}
2230
2231static void handle_rxe_err(struct hfi1_devdata *dd, u32 unused, u64 reg)
2232{
2233 char buf[96];
2234
2235 dd_dev_info(dd, "Receive Error: %s\n",
2236 rxe_err_status_string(buf, sizeof(buf), reg));
2237
2238 if (reg & ALL_RXE_FREEZE_ERR) {
2239 int flags = 0;
2240
2241 /*
2242 * Freeze mode recovery is disabled for the errors
2243 * in RXE_FREEZE_ABORT_MASK
2244 */
2245 if (is_a0(dd) && (reg & RXE_FREEZE_ABORT_MASK))
2246 flags = FREEZE_ABORT;
2247
2248 start_freeze_handling(dd->pport, flags);
2249 }
2250}
2251
2252static void handle_misc_err(struct hfi1_devdata *dd, u32 unused, u64 reg)
2253{
2254 char buf[96];
2255
2256 dd_dev_info(dd, "Misc Error: %s",
2257 misc_err_status_string(buf, sizeof(buf), reg));
2258}
2259
2260static void handle_pio_err(struct hfi1_devdata *dd, u32 unused, u64 reg)
2261{
2262 char buf[96];
2263
2264 dd_dev_info(dd, "PIO Error: %s\n",
2265 pio_err_status_string(buf, sizeof(buf), reg));
2266
2267 if (reg & ALL_PIO_FREEZE_ERR)
2268 start_freeze_handling(dd->pport, 0);
2269}
2270
2271static void handle_sdma_err(struct hfi1_devdata *dd, u32 unused, u64 reg)
2272{
2273 char buf[96];
2274
2275 dd_dev_info(dd, "SDMA Error: %s\n",
2276 sdma_err_status_string(buf, sizeof(buf), reg));
2277
2278 if (reg & ALL_SDMA_FREEZE_ERR)
2279 start_freeze_handling(dd->pport, 0);
2280}
2281
2282static void count_port_inactive(struct hfi1_devdata *dd)
2283{
2284 struct hfi1_pportdata *ppd = dd->pport;
2285
2286 if (ppd->port_xmit_discards < ~(u64)0)
2287 ppd->port_xmit_discards++;
2288}
2289
2290/*
2291 * We have had a "disallowed packet" error during egress. Determine the
2292 * integrity check which failed, and update relevant error counter, etc.
2293 *
2294 * Note that the SEND_EGRESS_ERR_INFO register has only a single
2295 * bit of state per integrity check, and so we can miss the reason for an
2296 * egress error if more than one packet fails the same integrity check
2297 * since we cleared the corresponding bit in SEND_EGRESS_ERR_INFO.
2298 */
2299static void handle_send_egress_err_info(struct hfi1_devdata *dd)
2300{
2301 struct hfi1_pportdata *ppd = dd->pport;
2302 u64 src = read_csr(dd, SEND_EGRESS_ERR_SOURCE); /* read first */
2303 u64 info = read_csr(dd, SEND_EGRESS_ERR_INFO);
2304 char buf[96];
2305
2306 /* clear down all observed info as quickly as possible after read */
2307 write_csr(dd, SEND_EGRESS_ERR_INFO, info);
2308
2309 dd_dev_info(dd,
2310 "Egress Error Info: 0x%llx, %s Egress Error Src 0x%llx\n",
2311 info, egress_err_info_string(buf, sizeof(buf), info), src);
2312
2313 /* Eventually add other counters for each bit */
2314
2315 if (info & SEND_EGRESS_ERR_INFO_TOO_LONG_IB_PACKET_ERR_SMASK) {
2316 if (ppd->port_xmit_discards < ~(u64)0)
2317 ppd->port_xmit_discards++;
2318 }
2319}
2320
2321/*
2322 * Input value is a bit position within the SEND_EGRESS_ERR_STATUS
2323 * register. Does it represent a 'port inactive' error?
2324 */
2325static inline int port_inactive_err(u64 posn)
2326{
2327 return (posn >= SEES(TX_LINKDOWN) &&
2328 posn <= SEES(TX_INCORRECT_LINK_STATE));
2329}
2330
2331/*
2332 * Input value is a bit position within the SEND_EGRESS_ERR_STATUS
2333 * register. Does it represent a 'disallowed packet' error?
2334 */
2335static inline int disallowed_pkt_err(u64 posn)
2336{
2337 return (posn >= SEES(TX_SDMA0_DISALLOWED_PACKET) &&
2338 posn <= SEES(TX_SDMA15_DISALLOWED_PACKET));
2339}
2340
2341static void handle_egress_err(struct hfi1_devdata *dd, u32 unused, u64 reg)
2342{
2343 u64 reg_copy = reg, handled = 0;
2344 char buf[96];
2345
2346 if (reg & ALL_TXE_EGRESS_FREEZE_ERR)
2347 start_freeze_handling(dd->pport, 0);
2348 if (is_a0(dd) && (reg &
2349 SEND_EGRESS_ERR_STATUS_TX_CREDIT_RETURN_VL_ERR_SMASK)
2350 && (dd->icode != ICODE_FUNCTIONAL_SIMULATOR))
2351 start_freeze_handling(dd->pport, 0);
2352
2353 while (reg_copy) {
2354 int posn = fls64(reg_copy);
2355 /*
2356 * fls64() returns a 1-based offset, but we generally
2357 * want 0-based offsets.
2358 */
2359 int shift = posn - 1;
2360
2361 if (port_inactive_err(shift)) {
2362 count_port_inactive(dd);
2363 handled |= (1ULL << shift);
2364 } else if (disallowed_pkt_err(shift)) {
2365 handle_send_egress_err_info(dd);
2366 handled |= (1ULL << shift);
2367 }
2368 clear_bit(shift, (unsigned long *)&reg_copy);
2369 }
2370
2371 reg &= ~handled;
2372
2373 if (reg)
2374 dd_dev_info(dd, "Egress Error: %s\n",
2375 egress_err_status_string(buf, sizeof(buf), reg));
2376}
2377
2378static void handle_txe_err(struct hfi1_devdata *dd, u32 unused, u64 reg)
2379{
2380 char buf[96];
2381
2382 dd_dev_info(dd, "Send Error: %s\n",
2383 send_err_status_string(buf, sizeof(buf), reg));
2384
2385}
2386
2387/*
2388 * The maximum number of times the error clear down will loop before
2389 * blocking a repeating error. This value is arbitrary.
2390 */
2391#define MAX_CLEAR_COUNT 20
2392
2393/*
2394 * Clear and handle an error register. All error interrupts are funneled
2395 * through here to have a central location to correctly handle single-
2396 * or multi-shot errors.
2397 *
2398 * For non per-context registers, call this routine with a context value
2399 * of 0 so the per-context offset is zero.
2400 *
2401 * If the handler loops too many times, assume that something is wrong
2402 * and can't be fixed, so mask the error bits.
2403 */
2404static void interrupt_clear_down(struct hfi1_devdata *dd,
2405 u32 context,
2406 const struct err_reg_info *eri)
2407{
2408 u64 reg;
2409 u32 count;
2410
2411 /* read in a loop until no more errors are seen */
2412 count = 0;
2413 while (1) {
2414 reg = read_kctxt_csr(dd, context, eri->status);
2415 if (reg == 0)
2416 break;
2417 write_kctxt_csr(dd, context, eri->clear, reg);
2418 if (likely(eri->handler))
2419 eri->handler(dd, context, reg);
2420 count++;
2421 if (count > MAX_CLEAR_COUNT) {
2422 u64 mask;
2423
2424 dd_dev_err(dd, "Repeating %s bits 0x%llx - masking\n",
2425 eri->desc, reg);
2426 /*
2427 * Read-modify-write so any other masked bits
2428 * remain masked.
2429 */
2430 mask = read_kctxt_csr(dd, context, eri->mask);
2431 mask &= ~reg;
2432 write_kctxt_csr(dd, context, eri->mask, mask);
2433 break;
2434 }
2435 }
2436}
2437
2438/*
2439 * CCE block "misc" interrupt. Source is < 16.
2440 */
2441static void is_misc_err_int(struct hfi1_devdata *dd, unsigned int source)
2442{
2443 const struct err_reg_info *eri = &misc_errs[source];
2444
2445 if (eri->handler) {
2446 interrupt_clear_down(dd, 0, eri);
2447 } else {
2448 dd_dev_err(dd, "Unexpected misc interrupt (%u) - reserved\n",
2449 source);
2450 }
2451}
2452
2453static char *send_context_err_status_string(char *buf, int buf_len, u64 flags)
2454{
2455 return flag_string(buf, buf_len, flags,
2456 sc_err_status_flags, ARRAY_SIZE(sc_err_status_flags));
2457}
2458
2459/*
2460 * Send context error interrupt. Source (hw_context) is < 160.
2461 *
2462 * All send context errors cause the send context to halt. The normal
2463 * clear-down mechanism cannot be used because we cannot clear the
2464 * error bits until several other long-running items are done first.
2465 * This is OK because with the context halted, nothing else is going
2466 * to happen on it anyway.
2467 */
2468static void is_sendctxt_err_int(struct hfi1_devdata *dd,
2469 unsigned int hw_context)
2470{
2471 struct send_context_info *sci;
2472 struct send_context *sc;
2473 char flags[96];
2474 u64 status;
2475 u32 sw_index;
2476
2477 sw_index = dd->hw_to_sw[hw_context];
2478 if (sw_index >= dd->num_send_contexts) {
2479 dd_dev_err(dd,
2480 "out of range sw index %u for send context %u\n",
2481 sw_index, hw_context);
2482 return;
2483 }
2484 sci = &dd->send_contexts[sw_index];
2485 sc = sci->sc;
2486 if (!sc) {
2487 dd_dev_err(dd, "%s: context %u(%u): no sc?\n", __func__,
2488 sw_index, hw_context);
2489 return;
2490 }
2491
2492 /* tell the software that a halt has begun */
2493 sc_stop(sc, SCF_HALTED);
2494
2495 status = read_kctxt_csr(dd, hw_context, SEND_CTXT_ERR_STATUS);
2496
2497 dd_dev_info(dd, "Send Context %u(%u) Error: %s\n", sw_index, hw_context,
2498 send_context_err_status_string(flags, sizeof(flags), status));
2499
2500 if (status & SEND_CTXT_ERR_STATUS_PIO_DISALLOWED_PACKET_ERR_SMASK)
2501 handle_send_egress_err_info(dd);
2502
2503 /*
2504 * Automatically restart halted kernel contexts out of interrupt
2505 * context. User contexts must ask the driver to restart the context.
2506 */
2507 if (sc->type != SC_USER)
2508 queue_work(dd->pport->hfi1_wq, &sc->halt_work);
2509}
2510
2511static void handle_sdma_eng_err(struct hfi1_devdata *dd,
2512 unsigned int source, u64 status)
2513{
2514 struct sdma_engine *sde;
2515
2516 sde = &dd->per_sdma[source];
2517#ifdef CONFIG_SDMA_VERBOSITY
2518 dd_dev_err(sde->dd, "CONFIG SDMA(%u) %s:%d %s()\n", sde->this_idx,
2519 slashstrip(__FILE__), __LINE__, __func__);
2520 dd_dev_err(sde->dd, "CONFIG SDMA(%u) source: %u status 0x%llx\n",
2521 sde->this_idx, source, (unsigned long long)status);
2522#endif
2523 sdma_engine_error(sde, status);
2524}
2525
2526/*
2527 * CCE block SDMA error interrupt. Source is < 16.
2528 */
2529static void is_sdma_eng_err_int(struct hfi1_devdata *dd, unsigned int source)
2530{
2531#ifdef CONFIG_SDMA_VERBOSITY
2532 struct sdma_engine *sde = &dd->per_sdma[source];
2533
2534 dd_dev_err(dd, "CONFIG SDMA(%u) %s:%d %s()\n", sde->this_idx,
2535 slashstrip(__FILE__), __LINE__, __func__);
2536 dd_dev_err(dd, "CONFIG SDMA(%u) source: %u\n", sde->this_idx,
2537 source);
2538 sdma_dumpstate(sde);
2539#endif
2540 interrupt_clear_down(dd, source, &sdma_eng_err);
2541}
2542
2543/*
2544 * CCE block "various" interrupt. Source is < 8.
2545 */
2546static void is_various_int(struct hfi1_devdata *dd, unsigned int source)
2547{
2548 const struct err_reg_info *eri = &various_err[source];
2549
2550 /*
2551 * TCritInt cannot go through interrupt_clear_down()
2552 * because it is not a second tier interrupt. The handler
2553 * should be called directly.
2554 */
2555 if (source == TCRIT_INT_SOURCE)
2556 handle_temp_err(dd);
2557 else if (eri->handler)
2558 interrupt_clear_down(dd, 0, eri);
2559 else
2560 dd_dev_info(dd,
2561 "%s: Unimplemented/reserved interrupt %d\n",
2562 __func__, source);
2563}
2564
2565static void handle_qsfp_int(struct hfi1_devdata *dd, u32 src_ctx, u64 reg)
2566{
2567 /* source is always zero */
2568 struct hfi1_pportdata *ppd = dd->pport;
2569 unsigned long flags;
2570 u64 qsfp_int_mgmt = (u64)(QSFP_HFI0_INT_N | QSFP_HFI0_MODPRST_N);
2571
2572 if (reg & QSFP_HFI0_MODPRST_N) {
2573
2574 dd_dev_info(dd, "%s: ModPresent triggered QSFP interrupt\n",
2575 __func__);
2576
2577 if (!qsfp_mod_present(ppd)) {
2578 ppd->driver_link_ready = 0;
2579 /*
2580 * Cable removed, reset all our information about the
2581 * cache and cable capabilities
2582 */
2583
2584 spin_lock_irqsave(&ppd->qsfp_info.qsfp_lock, flags);
2585 /*
2586 * We don't set cache_refresh_required here as we expect
2587 * an interrupt when a cable is inserted
2588 */
2589 ppd->qsfp_info.cache_valid = 0;
2590 ppd->qsfp_info.qsfp_interrupt_functional = 0;
2591 spin_unlock_irqrestore(&ppd->qsfp_info.qsfp_lock,
2592 flags);
2593 write_csr(dd,
2594 dd->hfi1_id ?
2595 ASIC_QSFP2_INVERT :
2596 ASIC_QSFP1_INVERT,
2597 qsfp_int_mgmt);
2598 if (ppd->host_link_state == HLS_DN_POLL) {
2599 /*
2600 * The link is still in POLL. This means
2601 * that the normal link down processing
2602 * will not happen. We have to do it here
2603 * before turning the DC off.
2604 */
2605 queue_work(ppd->hfi1_wq, &ppd->link_down_work);
2606 }
2607 } else {
2608 spin_lock_irqsave(&ppd->qsfp_info.qsfp_lock, flags);
2609 ppd->qsfp_info.cache_valid = 0;
2610 ppd->qsfp_info.cache_refresh_required = 1;
2611 spin_unlock_irqrestore(&ppd->qsfp_info.qsfp_lock,
2612 flags);
2613
2614 qsfp_int_mgmt &= ~(u64)QSFP_HFI0_MODPRST_N;
2615 write_csr(dd,
2616 dd->hfi1_id ?
2617 ASIC_QSFP2_INVERT :
2618 ASIC_QSFP1_INVERT,
2619 qsfp_int_mgmt);
2620 }
2621 }
2622
2623 if (reg & QSFP_HFI0_INT_N) {
2624
2625 dd_dev_info(dd, "%s: IntN triggered QSFP interrupt\n",
2626 __func__);
2627 spin_lock_irqsave(&ppd->qsfp_info.qsfp_lock, flags);
2628 ppd->qsfp_info.check_interrupt_flags = 1;
2629 ppd->qsfp_info.qsfp_interrupt_functional = 1;
2630 spin_unlock_irqrestore(&ppd->qsfp_info.qsfp_lock, flags);
2631 }
2632
2633 /* Schedule the QSFP work only if there is a cable attached. */
2634 if (qsfp_mod_present(ppd))
2635 queue_work(ppd->hfi1_wq, &ppd->qsfp_info.qsfp_work);
2636}
2637
2638static int request_host_lcb_access(struct hfi1_devdata *dd)
2639{
2640 int ret;
2641
2642 ret = do_8051_command(dd, HCMD_MISC,
2643 (u64)HCMD_MISC_REQUEST_LCB_ACCESS << LOAD_DATA_FIELD_ID_SHIFT,
2644 NULL);
2645 if (ret != HCMD_SUCCESS) {
2646 dd_dev_err(dd, "%s: command failed with error %d\n",
2647 __func__, ret);
2648 }
2649 return ret == HCMD_SUCCESS ? 0 : -EBUSY;
2650}
2651
2652static int request_8051_lcb_access(struct hfi1_devdata *dd)
2653{
2654 int ret;
2655
2656 ret = do_8051_command(dd, HCMD_MISC,
2657 (u64)HCMD_MISC_GRANT_LCB_ACCESS << LOAD_DATA_FIELD_ID_SHIFT,
2658 NULL);
2659 if (ret != HCMD_SUCCESS) {
2660 dd_dev_err(dd, "%s: command failed with error %d\n",
2661 __func__, ret);
2662 }
2663 return ret == HCMD_SUCCESS ? 0 : -EBUSY;
2664}
2665
2666/*
2667 * Set the LCB selector - allow host access. The DCC selector always
2668 * points to the host.
2669 */
2670static inline void set_host_lcb_access(struct hfi1_devdata *dd)
2671{
2672 write_csr(dd, DC_DC8051_CFG_CSR_ACCESS_SEL,
2673 DC_DC8051_CFG_CSR_ACCESS_SEL_DCC_SMASK
2674 | DC_DC8051_CFG_CSR_ACCESS_SEL_LCB_SMASK);
2675}
2676
2677/*
2678 * Clear the LCB selector - allow 8051 access. The DCC selector always
2679 * points to the host.
2680 */
2681static inline void set_8051_lcb_access(struct hfi1_devdata *dd)
2682{
2683 write_csr(dd, DC_DC8051_CFG_CSR_ACCESS_SEL,
2684 DC_DC8051_CFG_CSR_ACCESS_SEL_DCC_SMASK);
2685}
2686
2687/*
2688 * Acquire LCB access from the 8051. If the host already has access,
2689 * just increment a counter. Otherwise, inform the 8051 that the
2690 * host is taking access.
2691 *
2692 * Returns:
2693 * 0 on success
2694 * -EBUSY if the 8051 has control and cannot be disturbed
2695 * -errno if unable to acquire access from the 8051
2696 */
2697int acquire_lcb_access(struct hfi1_devdata *dd, int sleep_ok)
2698{
2699 struct hfi1_pportdata *ppd = dd->pport;
2700 int ret = 0;
2701
2702 /*
2703 * Use the host link state lock so the operation of this routine
2704 * { link state check, selector change, count increment } can occur
2705 * as a unit against a link state change. Otherwise there is a
2706 * race between the state change and the count increment.
2707 */
2708 if (sleep_ok) {
2709 mutex_lock(&ppd->hls_lock);
2710 } else {
Dan Carpenter951842b2015-09-16 09:22:51 +03002711 while (!mutex_trylock(&ppd->hls_lock))
Mike Marciniszyn77241052015-07-30 15:17:43 -04002712 udelay(1);
2713 }
2714
2715 /* this access is valid only when the link is up */
2716 if ((ppd->host_link_state & HLS_UP) == 0) {
2717 dd_dev_info(dd, "%s: link state %s not up\n",
2718 __func__, link_state_name(ppd->host_link_state));
2719 ret = -EBUSY;
2720 goto done;
2721 }
2722
2723 if (dd->lcb_access_count == 0) {
2724 ret = request_host_lcb_access(dd);
2725 if (ret) {
2726 dd_dev_err(dd,
2727 "%s: unable to acquire LCB access, err %d\n",
2728 __func__, ret);
2729 goto done;
2730 }
2731 set_host_lcb_access(dd);
2732 }
2733 dd->lcb_access_count++;
2734done:
2735 mutex_unlock(&ppd->hls_lock);
2736 return ret;
2737}
2738
2739/*
2740 * Release LCB access by decrementing the use count. If the count is moving
2741 * from 1 to 0, inform 8051 that it has control back.
2742 *
2743 * Returns:
2744 * 0 on success
2745 * -errno if unable to release access to the 8051
2746 */
2747int release_lcb_access(struct hfi1_devdata *dd, int sleep_ok)
2748{
2749 int ret = 0;
2750
2751 /*
2752 * Use the host link state lock because the acquire needed it.
2753 * Here, we only need to keep { selector change, count decrement }
2754 * as a unit.
2755 */
2756 if (sleep_ok) {
2757 mutex_lock(&dd->pport->hls_lock);
2758 } else {
Dan Carpenter951842b2015-09-16 09:22:51 +03002759 while (!mutex_trylock(&dd->pport->hls_lock))
Mike Marciniszyn77241052015-07-30 15:17:43 -04002760 udelay(1);
2761 }
2762
2763 if (dd->lcb_access_count == 0) {
2764 dd_dev_err(dd, "%s: LCB access count is zero. Skipping.\n",
2765 __func__);
2766 goto done;
2767 }
2768
2769 if (dd->lcb_access_count == 1) {
2770 set_8051_lcb_access(dd);
2771 ret = request_8051_lcb_access(dd);
2772 if (ret) {
2773 dd_dev_err(dd,
2774 "%s: unable to release LCB access, err %d\n",
2775 __func__, ret);
2776 /* restore host access if the grant didn't work */
2777 set_host_lcb_access(dd);
2778 goto done;
2779 }
2780 }
2781 dd->lcb_access_count--;
2782done:
2783 mutex_unlock(&dd->pport->hls_lock);
2784 return ret;
2785}
2786
2787/*
2788 * Initialize LCB access variables and state. Called during driver load,
2789 * after most of the initialization is finished.
2790 *
2791 * The DC default is LCB access on for the host. The driver defaults to
2792 * leaving access to the 8051. Assign access now - this constrains the call
2793 * to this routine to be after all LCB set-up is done. In particular, after
2794 * hf1_init_dd() -> set_up_interrupts() -> clear_all_interrupts()
2795 */
2796static void init_lcb_access(struct hfi1_devdata *dd)
2797{
2798 dd->lcb_access_count = 0;
2799}
2800
2801/*
2802 * Write a response back to a 8051 request.
2803 */
2804static void hreq_response(struct hfi1_devdata *dd, u8 return_code, u16 rsp_data)
2805{
2806 write_csr(dd, DC_DC8051_CFG_EXT_DEV_0,
2807 DC_DC8051_CFG_EXT_DEV_0_COMPLETED_SMASK
2808 | (u64)return_code << DC_DC8051_CFG_EXT_DEV_0_RETURN_CODE_SHIFT
2809 | (u64)rsp_data << DC_DC8051_CFG_EXT_DEV_0_RSP_DATA_SHIFT);
2810}
2811
2812/*
2813 * Handle requests from the 8051.
2814 */
2815static void handle_8051_request(struct hfi1_devdata *dd)
2816{
2817 u64 reg;
2818 u16 data;
2819 u8 type;
2820
2821 reg = read_csr(dd, DC_DC8051_CFG_EXT_DEV_1);
2822 if ((reg & DC_DC8051_CFG_EXT_DEV_1_REQ_NEW_SMASK) == 0)
2823 return; /* no request */
2824
2825 /* zero out COMPLETED so the response is seen */
2826 write_csr(dd, DC_DC8051_CFG_EXT_DEV_0, 0);
2827
2828 /* extract request details */
2829 type = (reg >> DC_DC8051_CFG_EXT_DEV_1_REQ_TYPE_SHIFT)
2830 & DC_DC8051_CFG_EXT_DEV_1_REQ_TYPE_MASK;
2831 data = (reg >> DC_DC8051_CFG_EXT_DEV_1_REQ_DATA_SHIFT)
2832 & DC_DC8051_CFG_EXT_DEV_1_REQ_DATA_MASK;
2833
2834 switch (type) {
2835 case HREQ_LOAD_CONFIG:
2836 case HREQ_SAVE_CONFIG:
2837 case HREQ_READ_CONFIG:
2838 case HREQ_SET_TX_EQ_ABS:
2839 case HREQ_SET_TX_EQ_REL:
2840 case HREQ_ENABLE:
2841 dd_dev_info(dd, "8051 request: request 0x%x not supported\n",
2842 type);
2843 hreq_response(dd, HREQ_NOT_SUPPORTED, 0);
2844 break;
2845
2846 case HREQ_CONFIG_DONE:
2847 hreq_response(dd, HREQ_SUCCESS, 0);
2848 break;
2849
2850 case HREQ_INTERFACE_TEST:
2851 hreq_response(dd, HREQ_SUCCESS, data);
2852 break;
2853
2854 default:
2855 dd_dev_err(dd, "8051 request: unknown request 0x%x\n", type);
2856 hreq_response(dd, HREQ_NOT_SUPPORTED, 0);
2857 break;
2858 }
2859}
2860
2861static void write_global_credit(struct hfi1_devdata *dd,
2862 u8 vau, u16 total, u16 shared)
2863{
2864 write_csr(dd, SEND_CM_GLOBAL_CREDIT,
2865 ((u64)total
2866 << SEND_CM_GLOBAL_CREDIT_TOTAL_CREDIT_LIMIT_SHIFT)
2867 | ((u64)shared
2868 << SEND_CM_GLOBAL_CREDIT_SHARED_LIMIT_SHIFT)
2869 | ((u64)vau << SEND_CM_GLOBAL_CREDIT_AU_SHIFT));
2870}
2871
2872/*
2873 * Set up initial VL15 credits of the remote. Assumes the rest of
2874 * the CM credit registers are zero from a previous global or credit reset .
2875 */
2876void set_up_vl15(struct hfi1_devdata *dd, u8 vau, u16 vl15buf)
2877{
2878 /* leave shared count at zero for both global and VL15 */
2879 write_global_credit(dd, vau, vl15buf, 0);
2880
2881 /* We may need some credits for another VL when sending packets
2882 * with the snoop interface. Dividing it down the middle for VL15
2883 * and VL0 should suffice.
2884 */
2885 if (unlikely(dd->hfi1_snoop.mode_flag == HFI1_PORT_SNOOP_MODE)) {
2886 write_csr(dd, SEND_CM_CREDIT_VL15, (u64)(vl15buf >> 1)
2887 << SEND_CM_CREDIT_VL15_DEDICATED_LIMIT_VL_SHIFT);
2888 write_csr(dd, SEND_CM_CREDIT_VL, (u64)(vl15buf >> 1)
2889 << SEND_CM_CREDIT_VL_DEDICATED_LIMIT_VL_SHIFT);
2890 } else {
2891 write_csr(dd, SEND_CM_CREDIT_VL15, (u64)vl15buf
2892 << SEND_CM_CREDIT_VL15_DEDICATED_LIMIT_VL_SHIFT);
2893 }
2894}
2895
2896/*
2897 * Zero all credit details from the previous connection and
2898 * reset the CM manager's internal counters.
2899 */
2900void reset_link_credits(struct hfi1_devdata *dd)
2901{
2902 int i;
2903
2904 /* remove all previous VL credit limits */
2905 for (i = 0; i < TXE_NUM_DATA_VL; i++)
2906 write_csr(dd, SEND_CM_CREDIT_VL + (8*i), 0);
2907 write_csr(dd, SEND_CM_CREDIT_VL15, 0);
2908 write_global_credit(dd, 0, 0, 0);
2909 /* reset the CM block */
2910 pio_send_control(dd, PSC_CM_RESET);
2911}
2912
2913/* convert a vCU to a CU */
2914static u32 vcu_to_cu(u8 vcu)
2915{
2916 return 1 << vcu;
2917}
2918
2919/* convert a CU to a vCU */
2920static u8 cu_to_vcu(u32 cu)
2921{
2922 return ilog2(cu);
2923}
2924
2925/* convert a vAU to an AU */
2926static u32 vau_to_au(u8 vau)
2927{
2928 return 8 * (1 << vau);
2929}
2930
2931static void set_linkup_defaults(struct hfi1_pportdata *ppd)
2932{
2933 ppd->sm_trap_qp = 0x0;
2934 ppd->sa_qp = 0x1;
2935}
2936
2937/*
2938 * Graceful LCB shutdown. This leaves the LCB FIFOs in reset.
2939 */
2940static void lcb_shutdown(struct hfi1_devdata *dd, int abort)
2941{
2942 u64 reg;
2943
2944 /* clear lcb run: LCB_CFG_RUN.EN = 0 */
2945 write_csr(dd, DC_LCB_CFG_RUN, 0);
2946 /* set tx fifo reset: LCB_CFG_TX_FIFOS_RESET.VAL = 1 */
2947 write_csr(dd, DC_LCB_CFG_TX_FIFOS_RESET,
2948 1ull << DC_LCB_CFG_TX_FIFOS_RESET_VAL_SHIFT);
2949 /* set dcc reset csr: DCC_CFG_RESET.{reset_lcb,reset_rx_fpe} = 1 */
2950 dd->lcb_err_en = read_csr(dd, DC_LCB_ERR_EN);
2951 reg = read_csr(dd, DCC_CFG_RESET);
2952 write_csr(dd, DCC_CFG_RESET,
2953 reg
2954 | (1ull << DCC_CFG_RESET_RESET_LCB_SHIFT)
2955 | (1ull << DCC_CFG_RESET_RESET_RX_FPE_SHIFT));
2956 (void) read_csr(dd, DCC_CFG_RESET); /* make sure the write completed */
2957 if (!abort) {
2958 udelay(1); /* must hold for the longer of 16cclks or 20ns */
2959 write_csr(dd, DCC_CFG_RESET, reg);
2960 write_csr(dd, DC_LCB_ERR_EN, dd->lcb_err_en);
2961 }
2962}
2963
2964/*
2965 * This routine should be called after the link has been transitioned to
2966 * OFFLINE (OFFLINE state has the side effect of putting the SerDes into
2967 * reset).
2968 *
2969 * The expectation is that the caller of this routine would have taken
2970 * care of properly transitioning the link into the correct state.
2971 */
2972static void dc_shutdown(struct hfi1_devdata *dd)
2973{
2974 unsigned long flags;
2975
2976 spin_lock_irqsave(&dd->dc8051_lock, flags);
2977 if (dd->dc_shutdown) {
2978 spin_unlock_irqrestore(&dd->dc8051_lock, flags);
2979 return;
2980 }
2981 dd->dc_shutdown = 1;
2982 spin_unlock_irqrestore(&dd->dc8051_lock, flags);
2983 /* Shutdown the LCB */
2984 lcb_shutdown(dd, 1);
2985 /* Going to OFFLINE would have causes the 8051 to put the
2986 * SerDes into reset already. Just need to shut down the 8051,
2987 * itself. */
2988 write_csr(dd, DC_DC8051_CFG_RST, 0x1);
2989}
2990
2991/* Calling this after the DC has been brought out of reset should not
2992 * do any damage. */
2993static void dc_start(struct hfi1_devdata *dd)
2994{
2995 unsigned long flags;
2996 int ret;
2997
2998 spin_lock_irqsave(&dd->dc8051_lock, flags);
2999 if (!dd->dc_shutdown)
3000 goto done;
3001 spin_unlock_irqrestore(&dd->dc8051_lock, flags);
3002 /* Take the 8051 out of reset */
3003 write_csr(dd, DC_DC8051_CFG_RST, 0ull);
3004 /* Wait until 8051 is ready */
3005 ret = wait_fm_ready(dd, TIMEOUT_8051_START);
3006 if (ret) {
3007 dd_dev_err(dd, "%s: timeout starting 8051 firmware\n",
3008 __func__);
3009 }
3010 /* Take away reset for LCB and RX FPE (set in lcb_shutdown). */
3011 write_csr(dd, DCC_CFG_RESET, 0x10);
3012 /* lcb_shutdown() with abort=1 does not restore these */
3013 write_csr(dd, DC_LCB_ERR_EN, dd->lcb_err_en);
3014 spin_lock_irqsave(&dd->dc8051_lock, flags);
3015 dd->dc_shutdown = 0;
3016done:
3017 spin_unlock_irqrestore(&dd->dc8051_lock, flags);
3018}
3019
3020/*
3021 * These LCB adjustments are for the Aurora SerDes core in the FPGA.
3022 */
3023static void adjust_lcb_for_fpga_serdes(struct hfi1_devdata *dd)
3024{
3025 u64 rx_radr, tx_radr;
3026 u32 version;
3027
3028 if (dd->icode != ICODE_FPGA_EMULATION)
3029 return;
3030
3031 /*
3032 * These LCB defaults on emulator _s are good, nothing to do here:
3033 * LCB_CFG_TX_FIFOS_RADR
3034 * LCB_CFG_RX_FIFOS_RADR
3035 * LCB_CFG_LN_DCLK
3036 * LCB_CFG_IGNORE_LOST_RCLK
3037 */
3038 if (is_emulator_s(dd))
3039 return;
3040 /* else this is _p */
3041
3042 version = emulator_rev(dd);
3043 if (!is_a0(dd))
3044 version = 0x2d; /* all B0 use 0x2d or higher settings */
3045
3046 if (version <= 0x12) {
3047 /* release 0x12 and below */
3048
3049 /*
3050 * LCB_CFG_RX_FIFOS_RADR.RST_VAL = 0x9
3051 * LCB_CFG_RX_FIFOS_RADR.OK_TO_JUMP_VAL = 0x9
3052 * LCB_CFG_RX_FIFOS_RADR.DO_NOT_JUMP_VAL = 0xa
3053 */
3054 rx_radr =
3055 0xaull << DC_LCB_CFG_RX_FIFOS_RADR_DO_NOT_JUMP_VAL_SHIFT
3056 | 0x9ull << DC_LCB_CFG_RX_FIFOS_RADR_OK_TO_JUMP_VAL_SHIFT
3057 | 0x9ull << DC_LCB_CFG_RX_FIFOS_RADR_RST_VAL_SHIFT;
3058 /*
3059 * LCB_CFG_TX_FIFOS_RADR.ON_REINIT = 0 (default)
3060 * LCB_CFG_TX_FIFOS_RADR.RST_VAL = 6
3061 */
3062 tx_radr = 6ull << DC_LCB_CFG_TX_FIFOS_RADR_RST_VAL_SHIFT;
3063 } else if (version <= 0x18) {
3064 /* release 0x13 up to 0x18 */
3065 /* LCB_CFG_RX_FIFOS_RADR = 0x988 */
3066 rx_radr =
3067 0x9ull << DC_LCB_CFG_RX_FIFOS_RADR_DO_NOT_JUMP_VAL_SHIFT
3068 | 0x8ull << DC_LCB_CFG_RX_FIFOS_RADR_OK_TO_JUMP_VAL_SHIFT
3069 | 0x8ull << DC_LCB_CFG_RX_FIFOS_RADR_RST_VAL_SHIFT;
3070 tx_radr = 7ull << DC_LCB_CFG_TX_FIFOS_RADR_RST_VAL_SHIFT;
3071 } else if (version == 0x19) {
3072 /* release 0x19 */
3073 /* LCB_CFG_RX_FIFOS_RADR = 0xa99 */
3074 rx_radr =
3075 0xAull << DC_LCB_CFG_RX_FIFOS_RADR_DO_NOT_JUMP_VAL_SHIFT
3076 | 0x9ull << DC_LCB_CFG_RX_FIFOS_RADR_OK_TO_JUMP_VAL_SHIFT
3077 | 0x9ull << DC_LCB_CFG_RX_FIFOS_RADR_RST_VAL_SHIFT;
3078 tx_radr = 3ull << DC_LCB_CFG_TX_FIFOS_RADR_RST_VAL_SHIFT;
3079 } else if (version == 0x1a) {
3080 /* release 0x1a */
3081 /* LCB_CFG_RX_FIFOS_RADR = 0x988 */
3082 rx_radr =
3083 0x9ull << DC_LCB_CFG_RX_FIFOS_RADR_DO_NOT_JUMP_VAL_SHIFT
3084 | 0x8ull << DC_LCB_CFG_RX_FIFOS_RADR_OK_TO_JUMP_VAL_SHIFT
3085 | 0x8ull << DC_LCB_CFG_RX_FIFOS_RADR_RST_VAL_SHIFT;
3086 tx_radr = 7ull << DC_LCB_CFG_TX_FIFOS_RADR_RST_VAL_SHIFT;
3087 write_csr(dd, DC_LCB_CFG_LN_DCLK, 1ull);
3088 } else {
3089 /* release 0x1b and higher */
3090 /* LCB_CFG_RX_FIFOS_RADR = 0x877 */
3091 rx_radr =
3092 0x8ull << DC_LCB_CFG_RX_FIFOS_RADR_DO_NOT_JUMP_VAL_SHIFT
3093 | 0x7ull << DC_LCB_CFG_RX_FIFOS_RADR_OK_TO_JUMP_VAL_SHIFT
3094 | 0x7ull << DC_LCB_CFG_RX_FIFOS_RADR_RST_VAL_SHIFT;
3095 tx_radr = 3ull << DC_LCB_CFG_TX_FIFOS_RADR_RST_VAL_SHIFT;
3096 }
3097
3098 write_csr(dd, DC_LCB_CFG_RX_FIFOS_RADR, rx_radr);
3099 /* LCB_CFG_IGNORE_LOST_RCLK.EN = 1 */
3100 write_csr(dd, DC_LCB_CFG_IGNORE_LOST_RCLK,
3101 DC_LCB_CFG_IGNORE_LOST_RCLK_EN_SMASK);
3102 write_csr(dd, DC_LCB_CFG_TX_FIFOS_RADR, tx_radr);
3103}
3104
3105/*
3106 * Handle a SMA idle message
3107 *
3108 * This is a work-queue function outside of the interrupt.
3109 */
3110void handle_sma_message(struct work_struct *work)
3111{
3112 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata,
3113 sma_message_work);
3114 struct hfi1_devdata *dd = ppd->dd;
3115 u64 msg;
3116 int ret;
3117
3118 /* msg is bytes 1-4 of the 40-bit idle message - the command code
3119 is stripped off */
3120 ret = read_idle_sma(dd, &msg);
3121 if (ret)
3122 return;
3123 dd_dev_info(dd, "%s: SMA message 0x%llx\n", __func__, msg);
3124 /*
3125 * React to the SMA message. Byte[1] (0 for us) is the command.
3126 */
3127 switch (msg & 0xff) {
3128 case SMA_IDLE_ARM:
3129 /*
3130 * See OPAv1 table 9-14 - HFI and External Switch Ports Key
3131 * State Transitions
3132 *
3133 * Only expected in INIT or ARMED, discard otherwise.
3134 */
3135 if (ppd->host_link_state & (HLS_UP_INIT | HLS_UP_ARMED))
3136 ppd->neighbor_normal = 1;
3137 break;
3138 case SMA_IDLE_ACTIVE:
3139 /*
3140 * See OPAv1 table 9-14 - HFI and External Switch Ports Key
3141 * State Transitions
3142 *
3143 * Can activate the node. Discard otherwise.
3144 */
3145 if (ppd->host_link_state == HLS_UP_ARMED
3146 && ppd->is_active_optimize_enabled) {
3147 ppd->neighbor_normal = 1;
3148 ret = set_link_state(ppd, HLS_UP_ACTIVE);
3149 if (ret)
3150 dd_dev_err(
3151 dd,
3152 "%s: received Active SMA idle message, couldn't set link to Active\n",
3153 __func__);
3154 }
3155 break;
3156 default:
3157 dd_dev_err(dd,
3158 "%s: received unexpected SMA idle message 0x%llx\n",
3159 __func__, msg);
3160 break;
3161 }
3162}
3163
3164static void adjust_rcvctrl(struct hfi1_devdata *dd, u64 add, u64 clear)
3165{
3166 u64 rcvctrl;
3167 unsigned long flags;
3168
3169 spin_lock_irqsave(&dd->rcvctrl_lock, flags);
3170 rcvctrl = read_csr(dd, RCV_CTRL);
3171 rcvctrl |= add;
3172 rcvctrl &= ~clear;
3173 write_csr(dd, RCV_CTRL, rcvctrl);
3174 spin_unlock_irqrestore(&dd->rcvctrl_lock, flags);
3175}
3176
3177static inline void add_rcvctrl(struct hfi1_devdata *dd, u64 add)
3178{
3179 adjust_rcvctrl(dd, add, 0);
3180}
3181
3182static inline void clear_rcvctrl(struct hfi1_devdata *dd, u64 clear)
3183{
3184 adjust_rcvctrl(dd, 0, clear);
3185}
3186
3187/*
3188 * Called from all interrupt handlers to start handling an SPC freeze.
3189 */
3190void start_freeze_handling(struct hfi1_pportdata *ppd, int flags)
3191{
3192 struct hfi1_devdata *dd = ppd->dd;
3193 struct send_context *sc;
3194 int i;
3195
3196 if (flags & FREEZE_SELF)
3197 write_csr(dd, CCE_CTRL, CCE_CTRL_SPC_FREEZE_SMASK);
3198
3199 /* enter frozen mode */
3200 dd->flags |= HFI1_FROZEN;
3201
3202 /* notify all SDMA engines that they are going into a freeze */
3203 sdma_freeze_notify(dd, !!(flags & FREEZE_LINK_DOWN));
3204
3205 /* do halt pre-handling on all enabled send contexts */
3206 for (i = 0; i < dd->num_send_contexts; i++) {
3207 sc = dd->send_contexts[i].sc;
3208 if (sc && (sc->flags & SCF_ENABLED))
3209 sc_stop(sc, SCF_FROZEN | SCF_HALTED);
3210 }
3211
3212 /* Send context are frozen. Notify user space */
3213 hfi1_set_uevent_bits(ppd, _HFI1_EVENT_FROZEN_BIT);
3214
3215 if (flags & FREEZE_ABORT) {
3216 dd_dev_err(dd,
3217 "Aborted freeze recovery. Please REBOOT system\n");
3218 return;
3219 }
3220 /* queue non-interrupt handler */
3221 queue_work(ppd->hfi1_wq, &ppd->freeze_work);
3222}
3223
3224/*
3225 * Wait until all 4 sub-blocks indicate that they have frozen or unfrozen,
3226 * depending on the "freeze" parameter.
3227 *
3228 * No need to return an error if it times out, our only option
3229 * is to proceed anyway.
3230 */
3231static void wait_for_freeze_status(struct hfi1_devdata *dd, int freeze)
3232{
3233 unsigned long timeout;
3234 u64 reg;
3235
3236 timeout = jiffies + msecs_to_jiffies(FREEZE_STATUS_TIMEOUT);
3237 while (1) {
3238 reg = read_csr(dd, CCE_STATUS);
3239 if (freeze) {
3240 /* waiting until all indicators are set */
3241 if ((reg & ALL_FROZE) == ALL_FROZE)
3242 return; /* all done */
3243 } else {
3244 /* waiting until all indicators are clear */
3245 if ((reg & ALL_FROZE) == 0)
3246 return; /* all done */
3247 }
3248
3249 if (time_after(jiffies, timeout)) {
3250 dd_dev_err(dd,
3251 "Time out waiting for SPC %sfreeze, bits 0x%llx, expecting 0x%llx, continuing",
3252 freeze ? "" : "un",
3253 reg & ALL_FROZE,
3254 freeze ? ALL_FROZE : 0ull);
3255 return;
3256 }
3257 usleep_range(80, 120);
3258 }
3259}
3260
3261/*
3262 * Do all freeze handling for the RXE block.
3263 */
3264static void rxe_freeze(struct hfi1_devdata *dd)
3265{
3266 int i;
3267
3268 /* disable port */
3269 clear_rcvctrl(dd, RCV_CTRL_RCV_PORT_ENABLE_SMASK);
3270
3271 /* disable all receive contexts */
3272 for (i = 0; i < dd->num_rcv_contexts; i++)
3273 hfi1_rcvctrl(dd, HFI1_RCVCTRL_CTXT_DIS, i);
3274}
3275
3276/*
3277 * Unfreeze handling for the RXE block - kernel contexts only.
3278 * This will also enable the port. User contexts will do unfreeze
3279 * handling on a per-context basis as they call into the driver.
3280 *
3281 */
3282static void rxe_kernel_unfreeze(struct hfi1_devdata *dd)
3283{
3284 int i;
3285
3286 /* enable all kernel contexts */
3287 for (i = 0; i < dd->n_krcv_queues; i++)
3288 hfi1_rcvctrl(dd, HFI1_RCVCTRL_CTXT_ENB, i);
3289
3290 /* enable port */
3291 add_rcvctrl(dd, RCV_CTRL_RCV_PORT_ENABLE_SMASK);
3292}
3293
3294/*
3295 * Non-interrupt SPC freeze handling.
3296 *
3297 * This is a work-queue function outside of the triggering interrupt.
3298 */
3299void handle_freeze(struct work_struct *work)
3300{
3301 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata,
3302 freeze_work);
3303 struct hfi1_devdata *dd = ppd->dd;
3304
3305 /* wait for freeze indicators on all affected blocks */
3306 dd_dev_info(dd, "Entering SPC freeze\n");
3307 wait_for_freeze_status(dd, 1);
3308
3309 /* SPC is now frozen */
3310
3311 /* do send PIO freeze steps */
3312 pio_freeze(dd);
3313
3314 /* do send DMA freeze steps */
3315 sdma_freeze(dd);
3316
3317 /* do send egress freeze steps - nothing to do */
3318
3319 /* do receive freeze steps */
3320 rxe_freeze(dd);
3321
3322 /*
3323 * Unfreeze the hardware - clear the freeze, wait for each
3324 * block's frozen bit to clear, then clear the frozen flag.
3325 */
3326 write_csr(dd, CCE_CTRL, CCE_CTRL_SPC_UNFREEZE_SMASK);
3327 wait_for_freeze_status(dd, 0);
3328
3329 if (is_a0(dd)) {
3330 write_csr(dd, CCE_CTRL, CCE_CTRL_SPC_FREEZE_SMASK);
3331 wait_for_freeze_status(dd, 1);
3332 write_csr(dd, CCE_CTRL, CCE_CTRL_SPC_UNFREEZE_SMASK);
3333 wait_for_freeze_status(dd, 0);
3334 }
3335
3336 /* do send PIO unfreeze steps for kernel contexts */
3337 pio_kernel_unfreeze(dd);
3338
3339 /* do send DMA unfreeze steps */
3340 sdma_unfreeze(dd);
3341
3342 /* do send egress unfreeze steps - nothing to do */
3343
3344 /* do receive unfreeze steps for kernel contexts */
3345 rxe_kernel_unfreeze(dd);
3346
3347 /*
3348 * The unfreeze procedure touches global device registers when
3349 * it disables and re-enables RXE. Mark the device unfrozen
3350 * after all that is done so other parts of the driver waiting
3351 * for the device to unfreeze don't do things out of order.
3352 *
3353 * The above implies that the meaning of HFI1_FROZEN flag is
3354 * "Device has gone into freeze mode and freeze mode handling
3355 * is still in progress."
3356 *
3357 * The flag will be removed when freeze mode processing has
3358 * completed.
3359 */
3360 dd->flags &= ~HFI1_FROZEN;
3361 wake_up(&dd->event_queue);
3362
3363 /* no longer frozen */
3364 dd_dev_err(dd, "Exiting SPC freeze\n");
3365}
3366
3367/*
3368 * Handle a link up interrupt from the 8051.
3369 *
3370 * This is a work-queue function outside of the interrupt.
3371 */
3372void handle_link_up(struct work_struct *work)
3373{
3374 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata,
3375 link_up_work);
3376 set_link_state(ppd, HLS_UP_INIT);
3377
3378 /* cache the read of DC_LCB_STS_ROUND_TRIP_LTP_CNT */
3379 read_ltp_rtt(ppd->dd);
3380 /*
3381 * OPA specifies that certain counters are cleared on a transition
3382 * to link up, so do that.
3383 */
3384 clear_linkup_counters(ppd->dd);
3385 /*
3386 * And (re)set link up default values.
3387 */
3388 set_linkup_defaults(ppd);
3389
3390 /* enforce link speed enabled */
3391 if ((ppd->link_speed_active & ppd->link_speed_enabled) == 0) {
3392 /* oops - current speed is not enabled, bounce */
3393 dd_dev_err(ppd->dd,
3394 "Link speed active 0x%x is outside enabled 0x%x, downing link\n",
3395 ppd->link_speed_active, ppd->link_speed_enabled);
3396 set_link_down_reason(ppd, OPA_LINKDOWN_REASON_SPEED_POLICY, 0,
3397 OPA_LINKDOWN_REASON_SPEED_POLICY);
3398 set_link_state(ppd, HLS_DN_OFFLINE);
3399 start_link(ppd);
3400 }
3401}
3402
3403/* Several pieces of LNI information were cached for SMA in ppd.
3404 * Reset these on link down */
3405static void reset_neighbor_info(struct hfi1_pportdata *ppd)
3406{
3407 ppd->neighbor_guid = 0;
3408 ppd->neighbor_port_number = 0;
3409 ppd->neighbor_type = 0;
3410 ppd->neighbor_fm_security = 0;
3411}
3412
3413/*
3414 * Handle a link down interrupt from the 8051.
3415 *
3416 * This is a work-queue function outside of the interrupt.
3417 */
3418void handle_link_down(struct work_struct *work)
3419{
3420 u8 lcl_reason, neigh_reason = 0;
3421 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata,
3422 link_down_work);
3423
3424 /* go offline first, then deal with reasons */
3425 set_link_state(ppd, HLS_DN_OFFLINE);
3426
3427 lcl_reason = 0;
3428 read_planned_down_reason_code(ppd->dd, &neigh_reason);
3429
3430 /*
3431 * If no reason, assume peer-initiated but missed
3432 * LinkGoingDown idle flits.
3433 */
3434 if (neigh_reason == 0)
3435 lcl_reason = OPA_LINKDOWN_REASON_NEIGHBOR_UNKNOWN;
3436
3437 set_link_down_reason(ppd, lcl_reason, neigh_reason, 0);
3438
3439 reset_neighbor_info(ppd);
3440
3441 /* disable the port */
3442 clear_rcvctrl(ppd->dd, RCV_CTRL_RCV_PORT_ENABLE_SMASK);
3443
3444 /* If there is no cable attached, turn the DC off. Otherwise,
3445 * start the link bring up. */
3446 if (!qsfp_mod_present(ppd))
3447 dc_shutdown(ppd->dd);
3448 else
3449 start_link(ppd);
3450}
3451
3452void handle_link_bounce(struct work_struct *work)
3453{
3454 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata,
3455 link_bounce_work);
3456
3457 /*
3458 * Only do something if the link is currently up.
3459 */
3460 if (ppd->host_link_state & HLS_UP) {
3461 set_link_state(ppd, HLS_DN_OFFLINE);
3462 start_link(ppd);
3463 } else {
3464 dd_dev_info(ppd->dd, "%s: link not up (%s), nothing to do\n",
3465 __func__, link_state_name(ppd->host_link_state));
3466 }
3467}
3468
3469/*
3470 * Mask conversion: Capability exchange to Port LTP. The capability
3471 * exchange has an implicit 16b CRC that is mandatory.
3472 */
3473static int cap_to_port_ltp(int cap)
3474{
3475 int port_ltp = PORT_LTP_CRC_MODE_16; /* this mode is mandatory */
3476
3477 if (cap & CAP_CRC_14B)
3478 port_ltp |= PORT_LTP_CRC_MODE_14;
3479 if (cap & CAP_CRC_48B)
3480 port_ltp |= PORT_LTP_CRC_MODE_48;
3481 if (cap & CAP_CRC_12B_16B_PER_LANE)
3482 port_ltp |= PORT_LTP_CRC_MODE_PER_LANE;
3483
3484 return port_ltp;
3485}
3486
3487/*
3488 * Convert an OPA Port LTP mask to capability mask
3489 */
3490int port_ltp_to_cap(int port_ltp)
3491{
3492 int cap_mask = 0;
3493
3494 if (port_ltp & PORT_LTP_CRC_MODE_14)
3495 cap_mask |= CAP_CRC_14B;
3496 if (port_ltp & PORT_LTP_CRC_MODE_48)
3497 cap_mask |= CAP_CRC_48B;
3498 if (port_ltp & PORT_LTP_CRC_MODE_PER_LANE)
3499 cap_mask |= CAP_CRC_12B_16B_PER_LANE;
3500
3501 return cap_mask;
3502}
3503
3504/*
3505 * Convert a single DC LCB CRC mode to an OPA Port LTP mask.
3506 */
3507static int lcb_to_port_ltp(int lcb_crc)
3508{
3509 int port_ltp = 0;
3510
3511 if (lcb_crc == LCB_CRC_12B_16B_PER_LANE)
3512 port_ltp = PORT_LTP_CRC_MODE_PER_LANE;
3513 else if (lcb_crc == LCB_CRC_48B)
3514 port_ltp = PORT_LTP_CRC_MODE_48;
3515 else if (lcb_crc == LCB_CRC_14B)
3516 port_ltp = PORT_LTP_CRC_MODE_14;
3517 else
3518 port_ltp = PORT_LTP_CRC_MODE_16;
3519
3520 return port_ltp;
3521}
3522
3523/*
3524 * Our neighbor has indicated that we are allowed to act as a fabric
3525 * manager, so place the full management partition key in the second
3526 * (0-based) pkey array position (see OPAv1, section 20.2.2.6.8). Note
3527 * that we should already have the limited management partition key in
3528 * array element 1, and also that the port is not yet up when
3529 * add_full_mgmt_pkey() is invoked.
3530 */
3531static void add_full_mgmt_pkey(struct hfi1_pportdata *ppd)
3532{
3533 struct hfi1_devdata *dd = ppd->dd;
3534
3535 /* Sanity check - ppd->pkeys[2] should be 0 */
3536 if (ppd->pkeys[2] != 0)
3537 dd_dev_err(dd, "%s pkey[2] already set to 0x%x, resetting it to 0x%x\n",
3538 __func__, ppd->pkeys[2], FULL_MGMT_P_KEY);
3539 ppd->pkeys[2] = FULL_MGMT_P_KEY;
3540 (void)hfi1_set_ib_cfg(ppd, HFI1_IB_CFG_PKEYS, 0);
3541}
3542
3543/*
3544 * Convert the given link width to the OPA link width bitmask.
3545 */
3546static u16 link_width_to_bits(struct hfi1_devdata *dd, u16 width)
3547{
3548 switch (width) {
3549 case 0:
3550 /*
3551 * Simulator and quick linkup do not set the width.
3552 * Just set it to 4x without complaint.
3553 */
3554 if (dd->icode == ICODE_FUNCTIONAL_SIMULATOR || quick_linkup)
3555 return OPA_LINK_WIDTH_4X;
3556 return 0; /* no lanes up */
3557 case 1: return OPA_LINK_WIDTH_1X;
3558 case 2: return OPA_LINK_WIDTH_2X;
3559 case 3: return OPA_LINK_WIDTH_3X;
3560 default:
3561 dd_dev_info(dd, "%s: invalid width %d, using 4\n",
3562 __func__, width);
3563 /* fall through */
3564 case 4: return OPA_LINK_WIDTH_4X;
3565 }
3566}
3567
3568/*
3569 * Do a population count on the bottom nibble.
3570 */
3571static const u8 bit_counts[16] = {
3572 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4
3573};
3574static inline u8 nibble_to_count(u8 nibble)
3575{
3576 return bit_counts[nibble & 0xf];
3577}
3578
3579/*
3580 * Read the active lane information from the 8051 registers and return
3581 * their widths.
3582 *
3583 * Active lane information is found in these 8051 registers:
3584 * enable_lane_tx
3585 * enable_lane_rx
3586 */
3587static void get_link_widths(struct hfi1_devdata *dd, u16 *tx_width,
3588 u16 *rx_width)
3589{
3590 u16 tx, rx;
3591 u8 enable_lane_rx;
3592 u8 enable_lane_tx;
3593 u8 tx_polarity_inversion;
3594 u8 rx_polarity_inversion;
3595 u8 max_rate;
3596
3597 /* read the active lanes */
3598 read_tx_settings(dd, &enable_lane_tx, &tx_polarity_inversion,
3599 &rx_polarity_inversion, &max_rate);
3600 read_local_lni(dd, &enable_lane_rx);
3601
3602 /* convert to counts */
3603 tx = nibble_to_count(enable_lane_tx);
3604 rx = nibble_to_count(enable_lane_rx);
3605
3606 /*
3607 * Set link_speed_active here, overriding what was set in
3608 * handle_verify_cap(). The ASIC 8051 firmware does not correctly
3609 * set the max_rate field in handle_verify_cap until v0.19.
3610 */
3611 if ((dd->icode == ICODE_RTL_SILICON)
3612 && (dd->dc8051_ver < dc8051_ver(0, 19))) {
3613 /* max_rate: 0 = 12.5G, 1 = 25G */
3614 switch (max_rate) {
3615 case 0:
3616 dd->pport[0].link_speed_active = OPA_LINK_SPEED_12_5G;
3617 break;
3618 default:
3619 dd_dev_err(dd,
3620 "%s: unexpected max rate %d, using 25Gb\n",
3621 __func__, (int)max_rate);
3622 /* fall through */
3623 case 1:
3624 dd->pport[0].link_speed_active = OPA_LINK_SPEED_25G;
3625 break;
3626 }
3627 }
3628
3629 dd_dev_info(dd,
3630 "Fabric active lanes (width): tx 0x%x (%d), rx 0x%x (%d)\n",
3631 enable_lane_tx, tx, enable_lane_rx, rx);
3632 *tx_width = link_width_to_bits(dd, tx);
3633 *rx_width = link_width_to_bits(dd, rx);
3634}
3635
3636/*
3637 * Read verify_cap_local_fm_link_width[1] to obtain the link widths.
3638 * Valid after the end of VerifyCap and during LinkUp. Does not change
3639 * after link up. I.e. look elsewhere for downgrade information.
3640 *
3641 * Bits are:
3642 * + bits [7:4] contain the number of active transmitters
3643 * + bits [3:0] contain the number of active receivers
3644 * These are numbers 1 through 4 and can be different values if the
3645 * link is asymmetric.
3646 *
3647 * verify_cap_local_fm_link_width[0] retains its original value.
3648 */
3649static void get_linkup_widths(struct hfi1_devdata *dd, u16 *tx_width,
3650 u16 *rx_width)
3651{
3652 u16 widths, tx, rx;
3653 u8 misc_bits, local_flags;
3654 u16 active_tx, active_rx;
3655
3656 read_vc_local_link_width(dd, &misc_bits, &local_flags, &widths);
3657 tx = widths >> 12;
3658 rx = (widths >> 8) & 0xf;
3659
3660 *tx_width = link_width_to_bits(dd, tx);
3661 *rx_width = link_width_to_bits(dd, rx);
3662
3663 /* print the active widths */
3664 get_link_widths(dd, &active_tx, &active_rx);
3665}
3666
3667/*
3668 * Set ppd->link_width_active and ppd->link_width_downgrade_active using
3669 * hardware information when the link first comes up.
3670 *
3671 * The link width is not available until after VerifyCap.AllFramesReceived
3672 * (the trigger for handle_verify_cap), so this is outside that routine
3673 * and should be called when the 8051 signals linkup.
3674 */
3675void get_linkup_link_widths(struct hfi1_pportdata *ppd)
3676{
3677 u16 tx_width, rx_width;
3678
3679 /* get end-of-LNI link widths */
3680 get_linkup_widths(ppd->dd, &tx_width, &rx_width);
3681
3682 /* use tx_width as the link is supposed to be symmetric on link up */
3683 ppd->link_width_active = tx_width;
3684 /* link width downgrade active (LWD.A) starts out matching LW.A */
3685 ppd->link_width_downgrade_tx_active = ppd->link_width_active;
3686 ppd->link_width_downgrade_rx_active = ppd->link_width_active;
3687 /* per OPA spec, on link up LWD.E resets to LWD.S */
3688 ppd->link_width_downgrade_enabled = ppd->link_width_downgrade_supported;
3689 /* cache the active egress rate (units {10^6 bits/sec]) */
3690 ppd->current_egress_rate = active_egress_rate(ppd);
3691}
3692
3693/*
3694 * Handle a verify capabilities interrupt from the 8051.
3695 *
3696 * This is a work-queue function outside of the interrupt.
3697 */
3698void handle_verify_cap(struct work_struct *work)
3699{
3700 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata,
3701 link_vc_work);
3702 struct hfi1_devdata *dd = ppd->dd;
3703 u64 reg;
3704 u8 power_management;
3705 u8 continious;
3706 u8 vcu;
3707 u8 vau;
3708 u8 z;
3709 u16 vl15buf;
3710 u16 link_widths;
3711 u16 crc_mask;
3712 u16 crc_val;
3713 u16 device_id;
3714 u16 active_tx, active_rx;
3715 u8 partner_supported_crc;
3716 u8 remote_tx_rate;
3717 u8 device_rev;
3718
3719 set_link_state(ppd, HLS_VERIFY_CAP);
3720
3721 lcb_shutdown(dd, 0);
3722 adjust_lcb_for_fpga_serdes(dd);
3723
3724 /*
3725 * These are now valid:
3726 * remote VerifyCap fields in the general LNI config
3727 * CSR DC8051_STS_REMOTE_GUID
3728 * CSR DC8051_STS_REMOTE_NODE_TYPE
3729 * CSR DC8051_STS_REMOTE_FM_SECURITY
3730 * CSR DC8051_STS_REMOTE_PORT_NO
3731 */
3732
3733 read_vc_remote_phy(dd, &power_management, &continious);
3734 read_vc_remote_fabric(
3735 dd,
3736 &vau,
3737 &z,
3738 &vcu,
3739 &vl15buf,
3740 &partner_supported_crc);
3741 read_vc_remote_link_width(dd, &remote_tx_rate, &link_widths);
3742 read_remote_device_id(dd, &device_id, &device_rev);
3743 /*
3744 * And the 'MgmtAllowed' information, which is exchanged during
3745 * LNI, is also be available at this point.
3746 */
3747 read_mgmt_allowed(dd, &ppd->mgmt_allowed);
3748 /* print the active widths */
3749 get_link_widths(dd, &active_tx, &active_rx);
3750 dd_dev_info(dd,
3751 "Peer PHY: power management 0x%x, continuous updates 0x%x\n",
3752 (int)power_management, (int)continious);
3753 dd_dev_info(dd,
3754 "Peer Fabric: vAU %d, Z %d, vCU %d, vl15 credits 0x%x, CRC sizes 0x%x\n",
3755 (int)vau,
3756 (int)z,
3757 (int)vcu,
3758 (int)vl15buf,
3759 (int)partner_supported_crc);
3760 dd_dev_info(dd, "Peer Link Width: tx rate 0x%x, widths 0x%x\n",
3761 (u32)remote_tx_rate, (u32)link_widths);
3762 dd_dev_info(dd, "Peer Device ID: 0x%04x, Revision 0x%02x\n",
3763 (u32)device_id, (u32)device_rev);
3764 /*
3765 * The peer vAU value just read is the peer receiver value. HFI does
3766 * not support a transmit vAU of 0 (AU == 8). We advertised that
3767 * with Z=1 in the fabric capabilities sent to the peer. The peer
3768 * will see our Z=1, and, if it advertised a vAU of 0, will move its
3769 * receive to vAU of 1 (AU == 16). Do the same here. We do not care
3770 * about the peer Z value - our sent vAU is 3 (hardwired) and is not
3771 * subject to the Z value exception.
3772 */
3773 if (vau == 0)
3774 vau = 1;
3775 set_up_vl15(dd, vau, vl15buf);
3776
3777 /* set up the LCB CRC mode */
3778 crc_mask = ppd->port_crc_mode_enabled & partner_supported_crc;
3779
3780 /* order is important: use the lowest bit in common */
3781 if (crc_mask & CAP_CRC_14B)
3782 crc_val = LCB_CRC_14B;
3783 else if (crc_mask & CAP_CRC_48B)
3784 crc_val = LCB_CRC_48B;
3785 else if (crc_mask & CAP_CRC_12B_16B_PER_LANE)
3786 crc_val = LCB_CRC_12B_16B_PER_LANE;
3787 else
3788 crc_val = LCB_CRC_16B;
3789
3790 dd_dev_info(dd, "Final LCB CRC mode: %d\n", (int)crc_val);
3791 write_csr(dd, DC_LCB_CFG_CRC_MODE,
3792 (u64)crc_val << DC_LCB_CFG_CRC_MODE_TX_VAL_SHIFT);
3793
3794 /* set (14b only) or clear sideband credit */
3795 reg = read_csr(dd, SEND_CM_CTRL);
3796 if (crc_val == LCB_CRC_14B && crc_14b_sideband) {
3797 write_csr(dd, SEND_CM_CTRL,
3798 reg | SEND_CM_CTRL_FORCE_CREDIT_MODE_SMASK);
3799 } else {
3800 write_csr(dd, SEND_CM_CTRL,
3801 reg & ~SEND_CM_CTRL_FORCE_CREDIT_MODE_SMASK);
3802 }
3803
3804 ppd->link_speed_active = 0; /* invalid value */
3805 if (dd->dc8051_ver < dc8051_ver(0, 20)) {
3806 /* remote_tx_rate: 0 = 12.5G, 1 = 25G */
3807 switch (remote_tx_rate) {
3808 case 0:
3809 ppd->link_speed_active = OPA_LINK_SPEED_12_5G;
3810 break;
3811 case 1:
3812 ppd->link_speed_active = OPA_LINK_SPEED_25G;
3813 break;
3814 }
3815 } else {
3816 /* actual rate is highest bit of the ANDed rates */
3817 u8 rate = remote_tx_rate & ppd->local_tx_rate;
3818
3819 if (rate & 2)
3820 ppd->link_speed_active = OPA_LINK_SPEED_25G;
3821 else if (rate & 1)
3822 ppd->link_speed_active = OPA_LINK_SPEED_12_5G;
3823 }
3824 if (ppd->link_speed_active == 0) {
3825 dd_dev_err(dd, "%s: unexpected remote tx rate %d, using 25Gb\n",
3826 __func__, (int)remote_tx_rate);
3827 ppd->link_speed_active = OPA_LINK_SPEED_25G;
3828 }
3829
3830 /*
3831 * Cache the values of the supported, enabled, and active
3832 * LTP CRC modes to return in 'portinfo' queries. But the bit
3833 * flags that are returned in the portinfo query differ from
3834 * what's in the link_crc_mask, crc_sizes, and crc_val
3835 * variables. Convert these here.
3836 */
3837 ppd->port_ltp_crc_mode = cap_to_port_ltp(link_crc_mask) << 8;
3838 /* supported crc modes */
3839 ppd->port_ltp_crc_mode |=
3840 cap_to_port_ltp(ppd->port_crc_mode_enabled) << 4;
3841 /* enabled crc modes */
3842 ppd->port_ltp_crc_mode |= lcb_to_port_ltp(crc_val);
3843 /* active crc mode */
3844
3845 /* set up the remote credit return table */
3846 assign_remote_cm_au_table(dd, vcu);
3847
3848 /*
3849 * The LCB is reset on entry to handle_verify_cap(), so this must
3850 * be applied on every link up.
3851 *
3852 * Adjust LCB error kill enable to kill the link if
3853 * these RBUF errors are seen:
3854 * REPLAY_BUF_MBE_SMASK
3855 * FLIT_INPUT_BUF_MBE_SMASK
3856 */
3857 if (is_a0(dd)) { /* fixed in B0 */
3858 reg = read_csr(dd, DC_LCB_CFG_LINK_KILL_EN);
3859 reg |= DC_LCB_CFG_LINK_KILL_EN_REPLAY_BUF_MBE_SMASK
3860 | DC_LCB_CFG_LINK_KILL_EN_FLIT_INPUT_BUF_MBE_SMASK;
3861 write_csr(dd, DC_LCB_CFG_LINK_KILL_EN, reg);
3862 }
3863
3864 /* pull LCB fifos out of reset - all fifo clocks must be stable */
3865 write_csr(dd, DC_LCB_CFG_TX_FIFOS_RESET, 0);
3866
3867 /* give 8051 access to the LCB CSRs */
3868 write_csr(dd, DC_LCB_ERR_EN, 0); /* mask LCB errors */
3869 set_8051_lcb_access(dd);
3870
3871 ppd->neighbor_guid =
3872 read_csr(dd, DC_DC8051_STS_REMOTE_GUID);
3873 ppd->neighbor_port_number = read_csr(dd, DC_DC8051_STS_REMOTE_PORT_NO) &
3874 DC_DC8051_STS_REMOTE_PORT_NO_VAL_SMASK;
3875 ppd->neighbor_type =
3876 read_csr(dd, DC_DC8051_STS_REMOTE_NODE_TYPE) &
3877 DC_DC8051_STS_REMOTE_NODE_TYPE_VAL_MASK;
3878 ppd->neighbor_fm_security =
3879 read_csr(dd, DC_DC8051_STS_REMOTE_FM_SECURITY) &
3880 DC_DC8051_STS_LOCAL_FM_SECURITY_DISABLED_MASK;
3881 dd_dev_info(dd,
3882 "Neighbor Guid: %llx Neighbor type %d MgmtAllowed %d FM security bypass %d\n",
3883 ppd->neighbor_guid, ppd->neighbor_type,
3884 ppd->mgmt_allowed, ppd->neighbor_fm_security);
3885 if (ppd->mgmt_allowed)
3886 add_full_mgmt_pkey(ppd);
3887
3888 /* tell the 8051 to go to LinkUp */
3889 set_link_state(ppd, HLS_GOING_UP);
3890}
3891
3892/*
3893 * Apply the link width downgrade enabled policy against the current active
3894 * link widths.
3895 *
3896 * Called when the enabled policy changes or the active link widths change.
3897 */
3898void apply_link_downgrade_policy(struct hfi1_pportdata *ppd, int refresh_widths)
3899{
3900 int skip = 1;
3901 int do_bounce = 0;
3902 u16 lwde = ppd->link_width_downgrade_enabled;
3903 u16 tx, rx;
3904
3905 mutex_lock(&ppd->hls_lock);
3906 /* only apply if the link is up */
3907 if (ppd->host_link_state & HLS_UP)
3908 skip = 0;
3909 mutex_unlock(&ppd->hls_lock);
3910 if (skip)
3911 return;
3912
3913 if (refresh_widths) {
3914 get_link_widths(ppd->dd, &tx, &rx);
3915 ppd->link_width_downgrade_tx_active = tx;
3916 ppd->link_width_downgrade_rx_active = rx;
3917 }
3918
3919 if (lwde == 0) {
3920 /* downgrade is disabled */
3921
3922 /* bounce if not at starting active width */
3923 if ((ppd->link_width_active !=
3924 ppd->link_width_downgrade_tx_active)
3925 || (ppd->link_width_active !=
3926 ppd->link_width_downgrade_rx_active)) {
3927 dd_dev_err(ppd->dd,
3928 "Link downgrade is disabled and link has downgraded, downing link\n");
3929 dd_dev_err(ppd->dd,
3930 " original 0x%x, tx active 0x%x, rx active 0x%x\n",
3931 ppd->link_width_active,
3932 ppd->link_width_downgrade_tx_active,
3933 ppd->link_width_downgrade_rx_active);
3934 do_bounce = 1;
3935 }
3936 } else if ((lwde & ppd->link_width_downgrade_tx_active) == 0
3937 || (lwde & ppd->link_width_downgrade_rx_active) == 0) {
3938 /* Tx or Rx is outside the enabled policy */
3939 dd_dev_err(ppd->dd,
3940 "Link is outside of downgrade allowed, downing link\n");
3941 dd_dev_err(ppd->dd,
3942 " enabled 0x%x, tx active 0x%x, rx active 0x%x\n",
3943 lwde,
3944 ppd->link_width_downgrade_tx_active,
3945 ppd->link_width_downgrade_rx_active);
3946 do_bounce = 1;
3947 }
3948
3949 if (do_bounce) {
3950 set_link_down_reason(ppd, OPA_LINKDOWN_REASON_WIDTH_POLICY, 0,
3951 OPA_LINKDOWN_REASON_WIDTH_POLICY);
3952 set_link_state(ppd, HLS_DN_OFFLINE);
3953 start_link(ppd);
3954 }
3955}
3956
3957/*
3958 * Handle a link downgrade interrupt from the 8051.
3959 *
3960 * This is a work-queue function outside of the interrupt.
3961 */
3962void handle_link_downgrade(struct work_struct *work)
3963{
3964 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata,
3965 link_downgrade_work);
3966
3967 dd_dev_info(ppd->dd, "8051: Link width downgrade\n");
3968 apply_link_downgrade_policy(ppd, 1);
3969}
3970
3971static char *dcc_err_string(char *buf, int buf_len, u64 flags)
3972{
3973 return flag_string(buf, buf_len, flags, dcc_err_flags,
3974 ARRAY_SIZE(dcc_err_flags));
3975}
3976
3977static char *lcb_err_string(char *buf, int buf_len, u64 flags)
3978{
3979 return flag_string(buf, buf_len, flags, lcb_err_flags,
3980 ARRAY_SIZE(lcb_err_flags));
3981}
3982
3983static char *dc8051_err_string(char *buf, int buf_len, u64 flags)
3984{
3985 return flag_string(buf, buf_len, flags, dc8051_err_flags,
3986 ARRAY_SIZE(dc8051_err_flags));
3987}
3988
3989static char *dc8051_info_err_string(char *buf, int buf_len, u64 flags)
3990{
3991 return flag_string(buf, buf_len, flags, dc8051_info_err_flags,
3992 ARRAY_SIZE(dc8051_info_err_flags));
3993}
3994
3995static char *dc8051_info_host_msg_string(char *buf, int buf_len, u64 flags)
3996{
3997 return flag_string(buf, buf_len, flags, dc8051_info_host_msg_flags,
3998 ARRAY_SIZE(dc8051_info_host_msg_flags));
3999}
4000
4001static void handle_8051_interrupt(struct hfi1_devdata *dd, u32 unused, u64 reg)
4002{
4003 struct hfi1_pportdata *ppd = dd->pport;
4004 u64 info, err, host_msg;
4005 int queue_link_down = 0;
4006 char buf[96];
4007
4008 /* look at the flags */
4009 if (reg & DC_DC8051_ERR_FLG_SET_BY_8051_SMASK) {
4010 /* 8051 information set by firmware */
4011 /* read DC8051_DBG_ERR_INFO_SET_BY_8051 for details */
4012 info = read_csr(dd, DC_DC8051_DBG_ERR_INFO_SET_BY_8051);
4013 err = (info >> DC_DC8051_DBG_ERR_INFO_SET_BY_8051_ERROR_SHIFT)
4014 & DC_DC8051_DBG_ERR_INFO_SET_BY_8051_ERROR_MASK;
4015 host_msg = (info >>
4016 DC_DC8051_DBG_ERR_INFO_SET_BY_8051_HOST_MSG_SHIFT)
4017 & DC_DC8051_DBG_ERR_INFO_SET_BY_8051_HOST_MSG_MASK;
4018
4019 /*
4020 * Handle error flags.
4021 */
4022 if (err & FAILED_LNI) {
4023 /*
4024 * LNI error indications are cleared by the 8051
4025 * only when starting polling. Only pay attention
4026 * to them when in the states that occur during
4027 * LNI.
4028 */
4029 if (ppd->host_link_state
4030 & (HLS_DN_POLL | HLS_VERIFY_CAP | HLS_GOING_UP)) {
4031 queue_link_down = 1;
4032 dd_dev_info(dd, "Link error: %s\n",
4033 dc8051_info_err_string(buf,
4034 sizeof(buf),
4035 err & FAILED_LNI));
4036 }
4037 err &= ~(u64)FAILED_LNI;
4038 }
4039 if (err) {
4040 /* report remaining errors, but do not do anything */
4041 dd_dev_err(dd, "8051 info error: %s\n",
4042 dc8051_info_err_string(buf, sizeof(buf), err));
4043 }
4044
4045 /*
4046 * Handle host message flags.
4047 */
4048 if (host_msg & HOST_REQ_DONE) {
4049 /*
4050 * Presently, the driver does a busy wait for
4051 * host requests to complete. This is only an
4052 * informational message.
4053 * NOTE: The 8051 clears the host message
4054 * information *on the next 8051 command*.
4055 * Therefore, when linkup is achieved,
4056 * this flag will still be set.
4057 */
4058 host_msg &= ~(u64)HOST_REQ_DONE;
4059 }
4060 if (host_msg & BC_SMA_MSG) {
4061 queue_work(ppd->hfi1_wq, &ppd->sma_message_work);
4062 host_msg &= ~(u64)BC_SMA_MSG;
4063 }
4064 if (host_msg & LINKUP_ACHIEVED) {
4065 dd_dev_info(dd, "8051: Link up\n");
4066 queue_work(ppd->hfi1_wq, &ppd->link_up_work);
4067 host_msg &= ~(u64)LINKUP_ACHIEVED;
4068 }
4069 if (host_msg & EXT_DEVICE_CFG_REQ) {
4070 handle_8051_request(dd);
4071 host_msg &= ~(u64)EXT_DEVICE_CFG_REQ;
4072 }
4073 if (host_msg & VERIFY_CAP_FRAME) {
4074 queue_work(ppd->hfi1_wq, &ppd->link_vc_work);
4075 host_msg &= ~(u64)VERIFY_CAP_FRAME;
4076 }
4077 if (host_msg & LINK_GOING_DOWN) {
4078 const char *extra = "";
4079 /* no downgrade action needed if going down */
4080 if (host_msg & LINK_WIDTH_DOWNGRADED) {
4081 host_msg &= ~(u64)LINK_WIDTH_DOWNGRADED;
4082 extra = " (ignoring downgrade)";
4083 }
4084 dd_dev_info(dd, "8051: Link down%s\n", extra);
4085 queue_link_down = 1;
4086 host_msg &= ~(u64)LINK_GOING_DOWN;
4087 }
4088 if (host_msg & LINK_WIDTH_DOWNGRADED) {
4089 queue_work(ppd->hfi1_wq, &ppd->link_downgrade_work);
4090 host_msg &= ~(u64)LINK_WIDTH_DOWNGRADED;
4091 }
4092 if (host_msg) {
4093 /* report remaining messages, but do not do anything */
4094 dd_dev_info(dd, "8051 info host message: %s\n",
4095 dc8051_info_host_msg_string(buf, sizeof(buf),
4096 host_msg));
4097 }
4098
4099 reg &= ~DC_DC8051_ERR_FLG_SET_BY_8051_SMASK;
4100 }
4101 if (reg & DC_DC8051_ERR_FLG_LOST_8051_HEART_BEAT_SMASK) {
4102 /*
4103 * Lost the 8051 heartbeat. If this happens, we
4104 * receive constant interrupts about it. Disable
4105 * the interrupt after the first.
4106 */
4107 dd_dev_err(dd, "Lost 8051 heartbeat\n");
4108 write_csr(dd, DC_DC8051_ERR_EN,
4109 read_csr(dd, DC_DC8051_ERR_EN)
4110 & ~DC_DC8051_ERR_EN_LOST_8051_HEART_BEAT_SMASK);
4111
4112 reg &= ~DC_DC8051_ERR_FLG_LOST_8051_HEART_BEAT_SMASK;
4113 }
4114 if (reg) {
4115 /* report the error, but do not do anything */
4116 dd_dev_err(dd, "8051 error: %s\n",
4117 dc8051_err_string(buf, sizeof(buf), reg));
4118 }
4119
4120 if (queue_link_down) {
4121 /* if the link is already going down or disabled, do not
4122 * queue another */
4123 if ((ppd->host_link_state
4124 & (HLS_GOING_OFFLINE|HLS_LINK_COOLDOWN))
4125 || ppd->link_enabled == 0) {
4126 dd_dev_info(dd, "%s: not queuing link down\n",
4127 __func__);
4128 } else {
4129 queue_work(ppd->hfi1_wq, &ppd->link_down_work);
4130 }
4131 }
4132}
4133
4134static const char * const fm_config_txt[] = {
4135[0] =
4136 "BadHeadDist: Distance violation between two head flits",
4137[1] =
4138 "BadTailDist: Distance violation between two tail flits",
4139[2] =
4140 "BadCtrlDist: Distance violation between two credit control flits",
4141[3] =
4142 "BadCrdAck: Credits return for unsupported VL",
4143[4] =
4144 "UnsupportedVLMarker: Received VL Marker",
4145[5] =
4146 "BadPreempt: Exceeded the preemption nesting level",
4147[6] =
4148 "BadControlFlit: Received unsupported control flit",
4149/* no 7 */
4150[8] =
4151 "UnsupportedVLMarker: Received VL Marker for unconfigured or disabled VL",
4152};
4153
4154static const char * const port_rcv_txt[] = {
4155[1] =
4156 "BadPktLen: Illegal PktLen",
4157[2] =
4158 "PktLenTooLong: Packet longer than PktLen",
4159[3] =
4160 "PktLenTooShort: Packet shorter than PktLen",
4161[4] =
4162 "BadSLID: Illegal SLID (0, using multicast as SLID, does not include security validation of SLID)",
4163[5] =
4164 "BadDLID: Illegal DLID (0, doesn't match HFI)",
4165[6] =
4166 "BadL2: Illegal L2 opcode",
4167[7] =
4168 "BadSC: Unsupported SC",
4169[9] =
4170 "BadRC: Illegal RC",
4171[11] =
4172 "PreemptError: Preempting with same VL",
4173[12] =
4174 "PreemptVL15: Preempting a VL15 packet",
4175};
4176
4177#define OPA_LDR_FMCONFIG_OFFSET 16
4178#define OPA_LDR_PORTRCV_OFFSET 0
4179static void handle_dcc_err(struct hfi1_devdata *dd, u32 unused, u64 reg)
4180{
4181 u64 info, hdr0, hdr1;
4182 const char *extra;
4183 char buf[96];
4184 struct hfi1_pportdata *ppd = dd->pport;
4185 u8 lcl_reason = 0;
4186 int do_bounce = 0;
4187
4188 if (reg & DCC_ERR_FLG_UNCORRECTABLE_ERR_SMASK) {
4189 if (!(dd->err_info_uncorrectable & OPA_EI_STATUS_SMASK)) {
4190 info = read_csr(dd, DCC_ERR_INFO_UNCORRECTABLE);
4191 dd->err_info_uncorrectable = info & OPA_EI_CODE_SMASK;
4192 /* set status bit */
4193 dd->err_info_uncorrectable |= OPA_EI_STATUS_SMASK;
4194 }
4195 reg &= ~DCC_ERR_FLG_UNCORRECTABLE_ERR_SMASK;
4196 }
4197
4198 if (reg & DCC_ERR_FLG_LINK_ERR_SMASK) {
4199 struct hfi1_pportdata *ppd = dd->pport;
4200 /* this counter saturates at (2^32) - 1 */
4201 if (ppd->link_downed < (u32)UINT_MAX)
4202 ppd->link_downed++;
4203 reg &= ~DCC_ERR_FLG_LINK_ERR_SMASK;
4204 }
4205
4206 if (reg & DCC_ERR_FLG_FMCONFIG_ERR_SMASK) {
4207 u8 reason_valid = 1;
4208
4209 info = read_csr(dd, DCC_ERR_INFO_FMCONFIG);
4210 if (!(dd->err_info_fmconfig & OPA_EI_STATUS_SMASK)) {
4211 dd->err_info_fmconfig = info & OPA_EI_CODE_SMASK;
4212 /* set status bit */
4213 dd->err_info_fmconfig |= OPA_EI_STATUS_SMASK;
4214 }
4215 switch (info) {
4216 case 0:
4217 case 1:
4218 case 2:
4219 case 3:
4220 case 4:
4221 case 5:
4222 case 6:
4223 extra = fm_config_txt[info];
4224 break;
4225 case 8:
4226 extra = fm_config_txt[info];
4227 if (ppd->port_error_action &
4228 OPA_PI_MASK_FM_CFG_UNSUPPORTED_VL_MARKER) {
4229 do_bounce = 1;
4230 /*
4231 * lcl_reason cannot be derived from info
4232 * for this error
4233 */
4234 lcl_reason =
4235 OPA_LINKDOWN_REASON_UNSUPPORTED_VL_MARKER;
4236 }
4237 break;
4238 default:
4239 reason_valid = 0;
4240 snprintf(buf, sizeof(buf), "reserved%lld", info);
4241 extra = buf;
4242 break;
4243 }
4244
4245 if (reason_valid && !do_bounce) {
4246 do_bounce = ppd->port_error_action &
4247 (1 << (OPA_LDR_FMCONFIG_OFFSET + info));
4248 lcl_reason = info + OPA_LINKDOWN_REASON_BAD_HEAD_DIST;
4249 }
4250
4251 /* just report this */
4252 dd_dev_info(dd, "DCC Error: fmconfig error: %s\n", extra);
4253 reg &= ~DCC_ERR_FLG_FMCONFIG_ERR_SMASK;
4254 }
4255
4256 if (reg & DCC_ERR_FLG_RCVPORT_ERR_SMASK) {
4257 u8 reason_valid = 1;
4258
4259 info = read_csr(dd, DCC_ERR_INFO_PORTRCV);
4260 hdr0 = read_csr(dd, DCC_ERR_INFO_PORTRCV_HDR0);
4261 hdr1 = read_csr(dd, DCC_ERR_INFO_PORTRCV_HDR1);
4262 if (!(dd->err_info_rcvport.status_and_code &
4263 OPA_EI_STATUS_SMASK)) {
4264 dd->err_info_rcvport.status_and_code =
4265 info & OPA_EI_CODE_SMASK;
4266 /* set status bit */
4267 dd->err_info_rcvport.status_and_code |=
4268 OPA_EI_STATUS_SMASK;
4269 /* save first 2 flits in the packet that caused
4270 * the error */
4271 dd->err_info_rcvport.packet_flit1 = hdr0;
4272 dd->err_info_rcvport.packet_flit2 = hdr1;
4273 }
4274 switch (info) {
4275 case 1:
4276 case 2:
4277 case 3:
4278 case 4:
4279 case 5:
4280 case 6:
4281 case 7:
4282 case 9:
4283 case 11:
4284 case 12:
4285 extra = port_rcv_txt[info];
4286 break;
4287 default:
4288 reason_valid = 0;
4289 snprintf(buf, sizeof(buf), "reserved%lld", info);
4290 extra = buf;
4291 break;
4292 }
4293
4294 if (reason_valid && !do_bounce) {
4295 do_bounce = ppd->port_error_action &
4296 (1 << (OPA_LDR_PORTRCV_OFFSET + info));
4297 lcl_reason = info + OPA_LINKDOWN_REASON_RCV_ERROR_0;
4298 }
4299
4300 /* just report this */
4301 dd_dev_info(dd, "DCC Error: PortRcv error: %s\n", extra);
4302 dd_dev_info(dd, " hdr0 0x%llx, hdr1 0x%llx\n",
4303 hdr0, hdr1);
4304
4305 reg &= ~DCC_ERR_FLG_RCVPORT_ERR_SMASK;
4306 }
4307
4308 if (reg & DCC_ERR_FLG_EN_CSR_ACCESS_BLOCKED_UC_SMASK) {
4309 /* informative only */
4310 dd_dev_info(dd, "8051 access to LCB blocked\n");
4311 reg &= ~DCC_ERR_FLG_EN_CSR_ACCESS_BLOCKED_UC_SMASK;
4312 }
4313 if (reg & DCC_ERR_FLG_EN_CSR_ACCESS_BLOCKED_HOST_SMASK) {
4314 /* informative only */
4315 dd_dev_info(dd, "host access to LCB blocked\n");
4316 reg &= ~DCC_ERR_FLG_EN_CSR_ACCESS_BLOCKED_HOST_SMASK;
4317 }
4318
4319 /* report any remaining errors */
4320 if (reg)
4321 dd_dev_info(dd, "DCC Error: %s\n",
4322 dcc_err_string(buf, sizeof(buf), reg));
4323
4324 if (lcl_reason == 0)
4325 lcl_reason = OPA_LINKDOWN_REASON_UNKNOWN;
4326
4327 if (do_bounce) {
4328 dd_dev_info(dd, "%s: PortErrorAction bounce\n", __func__);
4329 set_link_down_reason(ppd, lcl_reason, 0, lcl_reason);
4330 queue_work(ppd->hfi1_wq, &ppd->link_bounce_work);
4331 }
4332}
4333
4334static void handle_lcb_err(struct hfi1_devdata *dd, u32 unused, u64 reg)
4335{
4336 char buf[96];
4337
4338 dd_dev_info(dd, "LCB Error: %s\n",
4339 lcb_err_string(buf, sizeof(buf), reg));
4340}
4341
4342/*
4343 * CCE block DC interrupt. Source is < 8.
4344 */
4345static void is_dc_int(struct hfi1_devdata *dd, unsigned int source)
4346{
4347 const struct err_reg_info *eri = &dc_errs[source];
4348
4349 if (eri->handler) {
4350 interrupt_clear_down(dd, 0, eri);
4351 } else if (source == 3 /* dc_lbm_int */) {
4352 /*
4353 * This indicates that a parity error has occurred on the
4354 * address/control lines presented to the LBM. The error
4355 * is a single pulse, there is no associated error flag,
4356 * and it is non-maskable. This is because if a parity
4357 * error occurs on the request the request is dropped.
4358 * This should never occur, but it is nice to know if it
4359 * ever does.
4360 */
4361 dd_dev_err(dd, "Parity error in DC LBM block\n");
4362 } else {
4363 dd_dev_err(dd, "Invalid DC interrupt %u\n", source);
4364 }
4365}
4366
4367/*
4368 * TX block send credit interrupt. Source is < 160.
4369 */
4370static void is_send_credit_int(struct hfi1_devdata *dd, unsigned int source)
4371{
4372 sc_group_release_update(dd, source);
4373}
4374
4375/*
4376 * TX block SDMA interrupt. Source is < 48.
4377 *
4378 * SDMA interrupts are grouped by type:
4379 *
4380 * 0 - N-1 = SDma
4381 * N - 2N-1 = SDmaProgress
4382 * 2N - 3N-1 = SDmaIdle
4383 */
4384static void is_sdma_eng_int(struct hfi1_devdata *dd, unsigned int source)
4385{
4386 /* what interrupt */
4387 unsigned int what = source / TXE_NUM_SDMA_ENGINES;
4388 /* which engine */
4389 unsigned int which = source % TXE_NUM_SDMA_ENGINES;
4390
4391#ifdef CONFIG_SDMA_VERBOSITY
4392 dd_dev_err(dd, "CONFIG SDMA(%u) %s:%d %s()\n", which,
4393 slashstrip(__FILE__), __LINE__, __func__);
4394 sdma_dumpstate(&dd->per_sdma[which]);
4395#endif
4396
4397 if (likely(what < 3 && which < dd->num_sdma)) {
4398 sdma_engine_interrupt(&dd->per_sdma[which], 1ull << source);
4399 } else {
4400 /* should not happen */
4401 dd_dev_err(dd, "Invalid SDMA interrupt 0x%x\n", source);
4402 }
4403}
4404
4405/*
4406 * RX block receive available interrupt. Source is < 160.
4407 */
4408static void is_rcv_avail_int(struct hfi1_devdata *dd, unsigned int source)
4409{
4410 struct hfi1_ctxtdata *rcd;
4411 char *err_detail;
4412
4413 if (likely(source < dd->num_rcv_contexts)) {
4414 rcd = dd->rcd[source];
4415 if (rcd) {
4416 if (source < dd->first_user_ctxt)
4417 rcd->do_interrupt(rcd);
4418 else
4419 handle_user_interrupt(rcd);
4420 return; /* OK */
4421 }
4422 /* received an interrupt, but no rcd */
4423 err_detail = "dataless";
4424 } else {
4425 /* received an interrupt, but are not using that context */
4426 err_detail = "out of range";
4427 }
4428 dd_dev_err(dd, "unexpected %s receive available context interrupt %u\n",
4429 err_detail, source);
4430}
4431
4432/*
4433 * RX block receive urgent interrupt. Source is < 160.
4434 */
4435static void is_rcv_urgent_int(struct hfi1_devdata *dd, unsigned int source)
4436{
4437 struct hfi1_ctxtdata *rcd;
4438 char *err_detail;
4439
4440 if (likely(source < dd->num_rcv_contexts)) {
4441 rcd = dd->rcd[source];
4442 if (rcd) {
4443 /* only pay attention to user urgent interrupts */
4444 if (source >= dd->first_user_ctxt)
4445 handle_user_interrupt(rcd);
4446 return; /* OK */
4447 }
4448 /* received an interrupt, but no rcd */
4449 err_detail = "dataless";
4450 } else {
4451 /* received an interrupt, but are not using that context */
4452 err_detail = "out of range";
4453 }
4454 dd_dev_err(dd, "unexpected %s receive urgent context interrupt %u\n",
4455 err_detail, source);
4456}
4457
4458/*
4459 * Reserved range interrupt. Should not be called in normal operation.
4460 */
4461static void is_reserved_int(struct hfi1_devdata *dd, unsigned int source)
4462{
4463 char name[64];
4464
4465 dd_dev_err(dd, "unexpected %s interrupt\n",
4466 is_reserved_name(name, sizeof(name), source));
4467}
4468
4469static const struct is_table is_table[] = {
4470/* start end
4471 name func interrupt func */
4472{ IS_GENERAL_ERR_START, IS_GENERAL_ERR_END,
4473 is_misc_err_name, is_misc_err_int },
4474{ IS_SDMAENG_ERR_START, IS_SDMAENG_ERR_END,
4475 is_sdma_eng_err_name, is_sdma_eng_err_int },
4476{ IS_SENDCTXT_ERR_START, IS_SENDCTXT_ERR_END,
4477 is_sendctxt_err_name, is_sendctxt_err_int },
4478{ IS_SDMA_START, IS_SDMA_END,
4479 is_sdma_eng_name, is_sdma_eng_int },
4480{ IS_VARIOUS_START, IS_VARIOUS_END,
4481 is_various_name, is_various_int },
4482{ IS_DC_START, IS_DC_END,
4483 is_dc_name, is_dc_int },
4484{ IS_RCVAVAIL_START, IS_RCVAVAIL_END,
4485 is_rcv_avail_name, is_rcv_avail_int },
4486{ IS_RCVURGENT_START, IS_RCVURGENT_END,
4487 is_rcv_urgent_name, is_rcv_urgent_int },
4488{ IS_SENDCREDIT_START, IS_SENDCREDIT_END,
4489 is_send_credit_name, is_send_credit_int},
4490{ IS_RESERVED_START, IS_RESERVED_END,
4491 is_reserved_name, is_reserved_int},
4492};
4493
4494/*
4495 * Interrupt source interrupt - called when the given source has an interrupt.
4496 * Source is a bit index into an array of 64-bit integers.
4497 */
4498static void is_interrupt(struct hfi1_devdata *dd, unsigned int source)
4499{
4500 const struct is_table *entry;
4501
4502 /* avoids a double compare by walking the table in-order */
4503 for (entry = &is_table[0]; entry->is_name; entry++) {
4504 if (source < entry->end) {
4505 trace_hfi1_interrupt(dd, entry, source);
4506 entry->is_int(dd, source - entry->start);
4507 return;
4508 }
4509 }
4510 /* fell off the end */
4511 dd_dev_err(dd, "invalid interrupt source %u\n", source);
4512}
4513
4514/*
4515 * General interrupt handler. This is able to correctly handle
4516 * all interrupts in case INTx is used.
4517 */
4518static irqreturn_t general_interrupt(int irq, void *data)
4519{
4520 struct hfi1_devdata *dd = data;
4521 u64 regs[CCE_NUM_INT_CSRS];
4522 u32 bit;
4523 int i;
4524
4525 this_cpu_inc(*dd->int_counter);
4526
4527 /* phase 1: scan and clear all handled interrupts */
4528 for (i = 0; i < CCE_NUM_INT_CSRS; i++) {
4529 if (dd->gi_mask[i] == 0) {
4530 regs[i] = 0; /* used later */
4531 continue;
4532 }
4533 regs[i] = read_csr(dd, CCE_INT_STATUS + (8 * i)) &
4534 dd->gi_mask[i];
4535 /* only clear if anything is set */
4536 if (regs[i])
4537 write_csr(dd, CCE_INT_CLEAR + (8 * i), regs[i]);
4538 }
4539
4540 /* phase 2: call the appropriate handler */
4541 for_each_set_bit(bit, (unsigned long *)&regs[0],
4542 CCE_NUM_INT_CSRS*64) {
4543 is_interrupt(dd, bit);
4544 }
4545
4546 return IRQ_HANDLED;
4547}
4548
4549static irqreturn_t sdma_interrupt(int irq, void *data)
4550{
4551 struct sdma_engine *sde = data;
4552 struct hfi1_devdata *dd = sde->dd;
4553 u64 status;
4554
4555#ifdef CONFIG_SDMA_VERBOSITY
4556 dd_dev_err(dd, "CONFIG SDMA(%u) %s:%d %s()\n", sde->this_idx,
4557 slashstrip(__FILE__), __LINE__, __func__);
4558 sdma_dumpstate(sde);
4559#endif
4560
4561 this_cpu_inc(*dd->int_counter);
4562
4563 /* This read_csr is really bad in the hot path */
4564 status = read_csr(dd,
4565 CCE_INT_STATUS + (8*(IS_SDMA_START/64)))
4566 & sde->imask;
4567 if (likely(status)) {
4568 /* clear the interrupt(s) */
4569 write_csr(dd,
4570 CCE_INT_CLEAR + (8*(IS_SDMA_START/64)),
4571 status);
4572
4573 /* handle the interrupt(s) */
4574 sdma_engine_interrupt(sde, status);
4575 } else
4576 dd_dev_err(dd, "SDMA engine %u interrupt, but no status bits set\n",
4577 sde->this_idx);
4578
4579 return IRQ_HANDLED;
4580}
4581
4582/*
4583 * NOTE: this routine expects to be on its own MSI-X interrupt. If
4584 * multiple receive contexts share the same MSI-X interrupt, then this
4585 * routine must check for who received it.
4586 */
4587static irqreturn_t receive_context_interrupt(int irq, void *data)
4588{
4589 struct hfi1_ctxtdata *rcd = data;
4590 struct hfi1_devdata *dd = rcd->dd;
4591
4592 trace_hfi1_receive_interrupt(dd, rcd->ctxt);
4593 this_cpu_inc(*dd->int_counter);
4594
4595 /* clear the interrupt */
4596 write_csr(rcd->dd, CCE_INT_CLEAR + (8*rcd->ireg), rcd->imask);
4597
4598 /* handle the interrupt */
4599 rcd->do_interrupt(rcd);
4600
4601 return IRQ_HANDLED;
4602}
4603
4604/* ========================================================================= */
4605
4606u32 read_physical_state(struct hfi1_devdata *dd)
4607{
4608 u64 reg;
4609
4610 reg = read_csr(dd, DC_DC8051_STS_CUR_STATE);
4611 return (reg >> DC_DC8051_STS_CUR_STATE_PORT_SHIFT)
4612 & DC_DC8051_STS_CUR_STATE_PORT_MASK;
4613}
4614
4615static u32 read_logical_state(struct hfi1_devdata *dd)
4616{
4617 u64 reg;
4618
4619 reg = read_csr(dd, DCC_CFG_PORT_CONFIG);
4620 return (reg >> DCC_CFG_PORT_CONFIG_LINK_STATE_SHIFT)
4621 & DCC_CFG_PORT_CONFIG_LINK_STATE_MASK;
4622}
4623
4624static void set_logical_state(struct hfi1_devdata *dd, u32 chip_lstate)
4625{
4626 u64 reg;
4627
4628 reg = read_csr(dd, DCC_CFG_PORT_CONFIG);
4629 /* clear current state, set new state */
4630 reg &= ~DCC_CFG_PORT_CONFIG_LINK_STATE_SMASK;
4631 reg |= (u64)chip_lstate << DCC_CFG_PORT_CONFIG_LINK_STATE_SHIFT;
4632 write_csr(dd, DCC_CFG_PORT_CONFIG, reg);
4633}
4634
4635/*
4636 * Use the 8051 to read a LCB CSR.
4637 */
4638static int read_lcb_via_8051(struct hfi1_devdata *dd, u32 addr, u64 *data)
4639{
4640 u32 regno;
4641 int ret;
4642
4643 if (dd->icode == ICODE_FUNCTIONAL_SIMULATOR) {
4644 if (acquire_lcb_access(dd, 0) == 0) {
4645 *data = read_csr(dd, addr);
4646 release_lcb_access(dd, 0);
4647 return 0;
4648 }
4649 return -EBUSY;
4650 }
4651
4652 /* register is an index of LCB registers: (offset - base) / 8 */
4653 regno = (addr - DC_LCB_CFG_RUN) >> 3;
4654 ret = do_8051_command(dd, HCMD_READ_LCB_CSR, regno, data);
4655 if (ret != HCMD_SUCCESS)
4656 return -EBUSY;
4657 return 0;
4658}
4659
4660/*
4661 * Read an LCB CSR. Access may not be in host control, so check.
4662 * Return 0 on success, -EBUSY on failure.
4663 */
4664int read_lcb_csr(struct hfi1_devdata *dd, u32 addr, u64 *data)
4665{
4666 struct hfi1_pportdata *ppd = dd->pport;
4667
4668 /* if up, go through the 8051 for the value */
4669 if (ppd->host_link_state & HLS_UP)
4670 return read_lcb_via_8051(dd, addr, data);
4671 /* if going up or down, no access */
4672 if (ppd->host_link_state & (HLS_GOING_UP | HLS_GOING_OFFLINE))
4673 return -EBUSY;
4674 /* otherwise, host has access */
4675 *data = read_csr(dd, addr);
4676 return 0;
4677}
4678
4679/*
4680 * Use the 8051 to write a LCB CSR.
4681 */
4682static int write_lcb_via_8051(struct hfi1_devdata *dd, u32 addr, u64 data)
4683{
4684
4685 if (acquire_lcb_access(dd, 0) == 0) {
4686 write_csr(dd, addr, data);
4687 release_lcb_access(dd, 0);
4688 return 0;
4689 }
4690 return -EBUSY;
4691}
4692
4693/*
4694 * Write an LCB CSR. Access may not be in host control, so check.
4695 * Return 0 on success, -EBUSY on failure.
4696 */
4697int write_lcb_csr(struct hfi1_devdata *dd, u32 addr, u64 data)
4698{
4699 struct hfi1_pportdata *ppd = dd->pport;
4700
4701 /* if up, go through the 8051 for the value */
4702 if (ppd->host_link_state & HLS_UP)
4703 return write_lcb_via_8051(dd, addr, data);
4704 /* if going up or down, no access */
4705 if (ppd->host_link_state & (HLS_GOING_UP | HLS_GOING_OFFLINE))
4706 return -EBUSY;
4707 /* otherwise, host has access */
4708 write_csr(dd, addr, data);
4709 return 0;
4710}
4711
4712/*
4713 * Returns:
4714 * < 0 = Linux error, not able to get access
4715 * > 0 = 8051 command RETURN_CODE
4716 */
4717static int do_8051_command(
4718 struct hfi1_devdata *dd,
4719 u32 type,
4720 u64 in_data,
4721 u64 *out_data)
4722{
4723 u64 reg, completed;
4724 int return_code;
4725 unsigned long flags;
4726 unsigned long timeout;
4727
4728 hfi1_cdbg(DC8051, "type %d, data 0x%012llx", type, in_data);
4729
4730 /*
4731 * Alternative to holding the lock for a long time:
4732 * - keep busy wait - have other users bounce off
4733 */
4734 spin_lock_irqsave(&dd->dc8051_lock, flags);
4735
4736 /* We can't send any commands to the 8051 if it's in reset */
4737 if (dd->dc_shutdown) {
4738 return_code = -ENODEV;
4739 goto fail;
4740 }
4741
4742 /*
4743 * If an 8051 host command timed out previously, then the 8051 is
4744 * stuck.
4745 *
4746 * On first timeout, attempt to reset and restart the entire DC
4747 * block (including 8051). (Is this too big of a hammer?)
4748 *
4749 * If the 8051 times out a second time, the reset did not bring it
4750 * back to healthy life. In that case, fail any subsequent commands.
4751 */
4752 if (dd->dc8051_timed_out) {
4753 if (dd->dc8051_timed_out > 1) {
4754 dd_dev_err(dd,
4755 "Previous 8051 host command timed out, skipping command %u\n",
4756 type);
4757 return_code = -ENXIO;
4758 goto fail;
4759 }
4760 spin_unlock_irqrestore(&dd->dc8051_lock, flags);
4761 dc_shutdown(dd);
4762 dc_start(dd);
4763 spin_lock_irqsave(&dd->dc8051_lock, flags);
4764 }
4765
4766 /*
4767 * If there is no timeout, then the 8051 command interface is
4768 * waiting for a command.
4769 */
4770
4771 /*
4772 * Do two writes: the first to stabilize the type and req_data, the
4773 * second to activate.
4774 */
4775 reg = ((u64)type & DC_DC8051_CFG_HOST_CMD_0_REQ_TYPE_MASK)
4776 << DC_DC8051_CFG_HOST_CMD_0_REQ_TYPE_SHIFT
4777 | (in_data & DC_DC8051_CFG_HOST_CMD_0_REQ_DATA_MASK)
4778 << DC_DC8051_CFG_HOST_CMD_0_REQ_DATA_SHIFT;
4779 write_csr(dd, DC_DC8051_CFG_HOST_CMD_0, reg);
4780 reg |= DC_DC8051_CFG_HOST_CMD_0_REQ_NEW_SMASK;
4781 write_csr(dd, DC_DC8051_CFG_HOST_CMD_0, reg);
4782
4783 /* wait for completion, alternate: interrupt */
4784 timeout = jiffies + msecs_to_jiffies(DC8051_COMMAND_TIMEOUT);
4785 while (1) {
4786 reg = read_csr(dd, DC_DC8051_CFG_HOST_CMD_1);
4787 completed = reg & DC_DC8051_CFG_HOST_CMD_1_COMPLETED_SMASK;
4788 if (completed)
4789 break;
4790 if (time_after(jiffies, timeout)) {
4791 dd->dc8051_timed_out++;
4792 dd_dev_err(dd, "8051 host command %u timeout\n", type);
4793 if (out_data)
4794 *out_data = 0;
4795 return_code = -ETIMEDOUT;
4796 goto fail;
4797 }
4798 udelay(2);
4799 }
4800
4801 if (out_data) {
4802 *out_data = (reg >> DC_DC8051_CFG_HOST_CMD_1_RSP_DATA_SHIFT)
4803 & DC_DC8051_CFG_HOST_CMD_1_RSP_DATA_MASK;
4804 if (type == HCMD_READ_LCB_CSR) {
4805 /* top 16 bits are in a different register */
4806 *out_data |= (read_csr(dd, DC_DC8051_CFG_EXT_DEV_1)
4807 & DC_DC8051_CFG_EXT_DEV_1_REQ_DATA_SMASK)
4808 << (48
4809 - DC_DC8051_CFG_EXT_DEV_1_REQ_DATA_SHIFT);
4810 }
4811 }
4812 return_code = (reg >> DC_DC8051_CFG_HOST_CMD_1_RETURN_CODE_SHIFT)
4813 & DC_DC8051_CFG_HOST_CMD_1_RETURN_CODE_MASK;
4814 dd->dc8051_timed_out = 0;
4815 /*
4816 * Clear command for next user.
4817 */
4818 write_csr(dd, DC_DC8051_CFG_HOST_CMD_0, 0);
4819
4820fail:
4821 spin_unlock_irqrestore(&dd->dc8051_lock, flags);
4822
4823 return return_code;
4824}
4825
4826static int set_physical_link_state(struct hfi1_devdata *dd, u64 state)
4827{
4828 return do_8051_command(dd, HCMD_CHANGE_PHY_STATE, state, NULL);
4829}
4830
4831static int load_8051_config(struct hfi1_devdata *dd, u8 field_id,
4832 u8 lane_id, u32 config_data)
4833{
4834 u64 data;
4835 int ret;
4836
4837 data = (u64)field_id << LOAD_DATA_FIELD_ID_SHIFT
4838 | (u64)lane_id << LOAD_DATA_LANE_ID_SHIFT
4839 | (u64)config_data << LOAD_DATA_DATA_SHIFT;
4840 ret = do_8051_command(dd, HCMD_LOAD_CONFIG_DATA, data, NULL);
4841 if (ret != HCMD_SUCCESS) {
4842 dd_dev_err(dd,
4843 "load 8051 config: field id %d, lane %d, err %d\n",
4844 (int)field_id, (int)lane_id, ret);
4845 }
4846 return ret;
4847}
4848
4849/*
4850 * Read the 8051 firmware "registers". Use the RAM directly. Always
4851 * set the result, even on error.
4852 * Return 0 on success, -errno on failure
4853 */
4854static int read_8051_config(struct hfi1_devdata *dd, u8 field_id, u8 lane_id,
4855 u32 *result)
4856{
4857 u64 big_data;
4858 u32 addr;
4859 int ret;
4860
4861 /* address start depends on the lane_id */
4862 if (lane_id < 4)
4863 addr = (4 * NUM_GENERAL_FIELDS)
4864 + (lane_id * 4 * NUM_LANE_FIELDS);
4865 else
4866 addr = 0;
4867 addr += field_id * 4;
4868
4869 /* read is in 8-byte chunks, hardware will truncate the address down */
4870 ret = read_8051_data(dd, addr, 8, &big_data);
4871
4872 if (ret == 0) {
4873 /* extract the 4 bytes we want */
4874 if (addr & 0x4)
4875 *result = (u32)(big_data >> 32);
4876 else
4877 *result = (u32)big_data;
4878 } else {
4879 *result = 0;
4880 dd_dev_err(dd, "%s: direct read failed, lane %d, field %d!\n",
4881 __func__, lane_id, field_id);
4882 }
4883
4884 return ret;
4885}
4886
4887static int write_vc_local_phy(struct hfi1_devdata *dd, u8 power_management,
4888 u8 continuous)
4889{
4890 u32 frame;
4891
4892 frame = continuous << CONTINIOUS_REMOTE_UPDATE_SUPPORT_SHIFT
4893 | power_management << POWER_MANAGEMENT_SHIFT;
4894 return load_8051_config(dd, VERIFY_CAP_LOCAL_PHY,
4895 GENERAL_CONFIG, frame);
4896}
4897
4898static int write_vc_local_fabric(struct hfi1_devdata *dd, u8 vau, u8 z, u8 vcu,
4899 u16 vl15buf, u8 crc_sizes)
4900{
4901 u32 frame;
4902
4903 frame = (u32)vau << VAU_SHIFT
4904 | (u32)z << Z_SHIFT
4905 | (u32)vcu << VCU_SHIFT
4906 | (u32)vl15buf << VL15BUF_SHIFT
4907 | (u32)crc_sizes << CRC_SIZES_SHIFT;
4908 return load_8051_config(dd, VERIFY_CAP_LOCAL_FABRIC,
4909 GENERAL_CONFIG, frame);
4910}
4911
4912static void read_vc_local_link_width(struct hfi1_devdata *dd, u8 *misc_bits,
4913 u8 *flag_bits, u16 *link_widths)
4914{
4915 u32 frame;
4916
4917 read_8051_config(dd, VERIFY_CAP_LOCAL_LINK_WIDTH, GENERAL_CONFIG,
4918 &frame);
4919 *misc_bits = (frame >> MISC_CONFIG_BITS_SHIFT) & MISC_CONFIG_BITS_MASK;
4920 *flag_bits = (frame >> LOCAL_FLAG_BITS_SHIFT) & LOCAL_FLAG_BITS_MASK;
4921 *link_widths = (frame >> LINK_WIDTH_SHIFT) & LINK_WIDTH_MASK;
4922}
4923
4924static int write_vc_local_link_width(struct hfi1_devdata *dd,
4925 u8 misc_bits,
4926 u8 flag_bits,
4927 u16 link_widths)
4928{
4929 u32 frame;
4930
4931 frame = (u32)misc_bits << MISC_CONFIG_BITS_SHIFT
4932 | (u32)flag_bits << LOCAL_FLAG_BITS_SHIFT
4933 | (u32)link_widths << LINK_WIDTH_SHIFT;
4934 return load_8051_config(dd, VERIFY_CAP_LOCAL_LINK_WIDTH, GENERAL_CONFIG,
4935 frame);
4936}
4937
4938static int write_local_device_id(struct hfi1_devdata *dd, u16 device_id,
4939 u8 device_rev)
4940{
4941 u32 frame;
4942
4943 frame = ((u32)device_id << LOCAL_DEVICE_ID_SHIFT)
4944 | ((u32)device_rev << LOCAL_DEVICE_REV_SHIFT);
4945 return load_8051_config(dd, LOCAL_DEVICE_ID, GENERAL_CONFIG, frame);
4946}
4947
4948static void read_remote_device_id(struct hfi1_devdata *dd, u16 *device_id,
4949 u8 *device_rev)
4950{
4951 u32 frame;
4952
4953 read_8051_config(dd, REMOTE_DEVICE_ID, GENERAL_CONFIG, &frame);
4954 *device_id = (frame >> REMOTE_DEVICE_ID_SHIFT) & REMOTE_DEVICE_ID_MASK;
4955 *device_rev = (frame >> REMOTE_DEVICE_REV_SHIFT)
4956 & REMOTE_DEVICE_REV_MASK;
4957}
4958
4959void read_misc_status(struct hfi1_devdata *dd, u8 *ver_a, u8 *ver_b)
4960{
4961 u32 frame;
4962
4963 read_8051_config(dd, MISC_STATUS, GENERAL_CONFIG, &frame);
4964 *ver_a = (frame >> STS_FM_VERSION_A_SHIFT) & STS_FM_VERSION_A_MASK;
4965 *ver_b = (frame >> STS_FM_VERSION_B_SHIFT) & STS_FM_VERSION_B_MASK;
4966}
4967
4968static void read_vc_remote_phy(struct hfi1_devdata *dd, u8 *power_management,
4969 u8 *continuous)
4970{
4971 u32 frame;
4972
4973 read_8051_config(dd, VERIFY_CAP_REMOTE_PHY, GENERAL_CONFIG, &frame);
4974 *power_management = (frame >> POWER_MANAGEMENT_SHIFT)
4975 & POWER_MANAGEMENT_MASK;
4976 *continuous = (frame >> CONTINIOUS_REMOTE_UPDATE_SUPPORT_SHIFT)
4977 & CONTINIOUS_REMOTE_UPDATE_SUPPORT_MASK;
4978}
4979
4980static void read_vc_remote_fabric(struct hfi1_devdata *dd, u8 *vau, u8 *z,
4981 u8 *vcu, u16 *vl15buf, u8 *crc_sizes)
4982{
4983 u32 frame;
4984
4985 read_8051_config(dd, VERIFY_CAP_REMOTE_FABRIC, GENERAL_CONFIG, &frame);
4986 *vau = (frame >> VAU_SHIFT) & VAU_MASK;
4987 *z = (frame >> Z_SHIFT) & Z_MASK;
4988 *vcu = (frame >> VCU_SHIFT) & VCU_MASK;
4989 *vl15buf = (frame >> VL15BUF_SHIFT) & VL15BUF_MASK;
4990 *crc_sizes = (frame >> CRC_SIZES_SHIFT) & CRC_SIZES_MASK;
4991}
4992
4993static void read_vc_remote_link_width(struct hfi1_devdata *dd,
4994 u8 *remote_tx_rate,
4995 u16 *link_widths)
4996{
4997 u32 frame;
4998
4999 read_8051_config(dd, VERIFY_CAP_REMOTE_LINK_WIDTH, GENERAL_CONFIG,
5000 &frame);
5001 *remote_tx_rate = (frame >> REMOTE_TX_RATE_SHIFT)
5002 & REMOTE_TX_RATE_MASK;
5003 *link_widths = (frame >> LINK_WIDTH_SHIFT) & LINK_WIDTH_MASK;
5004}
5005
5006static void read_local_lni(struct hfi1_devdata *dd, u8 *enable_lane_rx)
5007{
5008 u32 frame;
5009
5010 read_8051_config(dd, LOCAL_LNI_INFO, GENERAL_CONFIG, &frame);
5011 *enable_lane_rx = (frame >> ENABLE_LANE_RX_SHIFT) & ENABLE_LANE_RX_MASK;
5012}
5013
5014static void read_mgmt_allowed(struct hfi1_devdata *dd, u8 *mgmt_allowed)
5015{
5016 u32 frame;
5017
5018 read_8051_config(dd, REMOTE_LNI_INFO, GENERAL_CONFIG, &frame);
5019 *mgmt_allowed = (frame >> MGMT_ALLOWED_SHIFT) & MGMT_ALLOWED_MASK;
5020}
5021
5022static void read_last_local_state(struct hfi1_devdata *dd, u32 *lls)
5023{
5024 read_8051_config(dd, LAST_LOCAL_STATE_COMPLETE, GENERAL_CONFIG, lls);
5025}
5026
5027static void read_last_remote_state(struct hfi1_devdata *dd, u32 *lrs)
5028{
5029 read_8051_config(dd, LAST_REMOTE_STATE_COMPLETE, GENERAL_CONFIG, lrs);
5030}
5031
5032void hfi1_read_link_quality(struct hfi1_devdata *dd, u8 *link_quality)
5033{
5034 u32 frame;
5035 int ret;
5036
5037 *link_quality = 0;
5038 if (dd->pport->host_link_state & HLS_UP) {
5039 ret = read_8051_config(dd, LINK_QUALITY_INFO, GENERAL_CONFIG,
5040 &frame);
5041 if (ret == 0)
5042 *link_quality = (frame >> LINK_QUALITY_SHIFT)
5043 & LINK_QUALITY_MASK;
5044 }
5045}
5046
5047static void read_planned_down_reason_code(struct hfi1_devdata *dd, u8 *pdrrc)
5048{
5049 u32 frame;
5050
5051 read_8051_config(dd, LINK_QUALITY_INFO, GENERAL_CONFIG, &frame);
5052 *pdrrc = (frame >> DOWN_REMOTE_REASON_SHIFT) & DOWN_REMOTE_REASON_MASK;
5053}
5054
5055static int read_tx_settings(struct hfi1_devdata *dd,
5056 u8 *enable_lane_tx,
5057 u8 *tx_polarity_inversion,
5058 u8 *rx_polarity_inversion,
5059 u8 *max_rate)
5060{
5061 u32 frame;
5062 int ret;
5063
5064 ret = read_8051_config(dd, TX_SETTINGS, GENERAL_CONFIG, &frame);
5065 *enable_lane_tx = (frame >> ENABLE_LANE_TX_SHIFT)
5066 & ENABLE_LANE_TX_MASK;
5067 *tx_polarity_inversion = (frame >> TX_POLARITY_INVERSION_SHIFT)
5068 & TX_POLARITY_INVERSION_MASK;
5069 *rx_polarity_inversion = (frame >> RX_POLARITY_INVERSION_SHIFT)
5070 & RX_POLARITY_INVERSION_MASK;
5071 *max_rate = (frame >> MAX_RATE_SHIFT) & MAX_RATE_MASK;
5072 return ret;
5073}
5074
5075static int write_tx_settings(struct hfi1_devdata *dd,
5076 u8 enable_lane_tx,
5077 u8 tx_polarity_inversion,
5078 u8 rx_polarity_inversion,
5079 u8 max_rate)
5080{
5081 u32 frame;
5082
5083 /* no need to mask, all variable sizes match field widths */
5084 frame = enable_lane_tx << ENABLE_LANE_TX_SHIFT
5085 | tx_polarity_inversion << TX_POLARITY_INVERSION_SHIFT
5086 | rx_polarity_inversion << RX_POLARITY_INVERSION_SHIFT
5087 | max_rate << MAX_RATE_SHIFT;
5088 return load_8051_config(dd, TX_SETTINGS, GENERAL_CONFIG, frame);
5089}
5090
5091static void check_fabric_firmware_versions(struct hfi1_devdata *dd)
5092{
5093 u32 frame, version, prod_id;
5094 int ret, lane;
5095
5096 /* 4 lanes */
5097 for (lane = 0; lane < 4; lane++) {
5098 ret = read_8051_config(dd, SPICO_FW_VERSION, lane, &frame);
5099 if (ret) {
5100 dd_dev_err(
5101 dd,
5102 "Unable to read lane %d firmware details\n",
5103 lane);
5104 continue;
5105 }
5106 version = (frame >> SPICO_ROM_VERSION_SHIFT)
5107 & SPICO_ROM_VERSION_MASK;
5108 prod_id = (frame >> SPICO_ROM_PROD_ID_SHIFT)
5109 & SPICO_ROM_PROD_ID_MASK;
5110 dd_dev_info(dd,
5111 "Lane %d firmware: version 0x%04x, prod_id 0x%04x\n",
5112 lane, version, prod_id);
5113 }
5114}
5115
5116/*
5117 * Read an idle LCB message.
5118 *
5119 * Returns 0 on success, -EINVAL on error
5120 */
5121static int read_idle_message(struct hfi1_devdata *dd, u64 type, u64 *data_out)
5122{
5123 int ret;
5124
5125 ret = do_8051_command(dd, HCMD_READ_LCB_IDLE_MSG,
5126 type, data_out);
5127 if (ret != HCMD_SUCCESS) {
5128 dd_dev_err(dd, "read idle message: type %d, err %d\n",
5129 (u32)type, ret);
5130 return -EINVAL;
5131 }
5132 dd_dev_info(dd, "%s: read idle message 0x%llx\n", __func__, *data_out);
5133 /* return only the payload as we already know the type */
5134 *data_out >>= IDLE_PAYLOAD_SHIFT;
5135 return 0;
5136}
5137
5138/*
5139 * Read an idle SMA message. To be done in response to a notification from
5140 * the 8051.
5141 *
5142 * Returns 0 on success, -EINVAL on error
5143 */
5144static int read_idle_sma(struct hfi1_devdata *dd, u64 *data)
5145{
5146 return read_idle_message(dd,
5147 (u64)IDLE_SMA << IDLE_MSG_TYPE_SHIFT, data);
5148}
5149
5150/*
5151 * Send an idle LCB message.
5152 *
5153 * Returns 0 on success, -EINVAL on error
5154 */
5155static int send_idle_message(struct hfi1_devdata *dd, u64 data)
5156{
5157 int ret;
5158
5159 dd_dev_info(dd, "%s: sending idle message 0x%llx\n", __func__, data);
5160 ret = do_8051_command(dd, HCMD_SEND_LCB_IDLE_MSG, data, NULL);
5161 if (ret != HCMD_SUCCESS) {
5162 dd_dev_err(dd, "send idle message: data 0x%llx, err %d\n",
5163 data, ret);
5164 return -EINVAL;
5165 }
5166 return 0;
5167}
5168
5169/*
5170 * Send an idle SMA message.
5171 *
5172 * Returns 0 on success, -EINVAL on error
5173 */
5174int send_idle_sma(struct hfi1_devdata *dd, u64 message)
5175{
5176 u64 data;
5177
5178 data = ((message & IDLE_PAYLOAD_MASK) << IDLE_PAYLOAD_SHIFT)
5179 | ((u64)IDLE_SMA << IDLE_MSG_TYPE_SHIFT);
5180 return send_idle_message(dd, data);
5181}
5182
5183/*
5184 * Initialize the LCB then do a quick link up. This may or may not be
5185 * in loopback.
5186 *
5187 * return 0 on success, -errno on error
5188 */
5189static int do_quick_linkup(struct hfi1_devdata *dd)
5190{
5191 u64 reg;
5192 unsigned long timeout;
5193 int ret;
5194
5195 lcb_shutdown(dd, 0);
5196
5197 if (loopback) {
5198 /* LCB_CFG_LOOPBACK.VAL = 2 */
5199 /* LCB_CFG_LANE_WIDTH.VAL = 0 */
5200 write_csr(dd, DC_LCB_CFG_LOOPBACK,
5201 IB_PACKET_TYPE << DC_LCB_CFG_LOOPBACK_VAL_SHIFT);
5202 write_csr(dd, DC_LCB_CFG_LANE_WIDTH, 0);
5203 }
5204
5205 /* start the LCBs */
5206 /* LCB_CFG_TX_FIFOS_RESET.VAL = 0 */
5207 write_csr(dd, DC_LCB_CFG_TX_FIFOS_RESET, 0);
5208
5209 /* simulator only loopback steps */
5210 if (loopback && dd->icode == ICODE_FUNCTIONAL_SIMULATOR) {
5211 /* LCB_CFG_RUN.EN = 1 */
5212 write_csr(dd, DC_LCB_CFG_RUN,
5213 1ull << DC_LCB_CFG_RUN_EN_SHIFT);
5214
5215 /* watch LCB_STS_LINK_TRANSFER_ACTIVE */
5216 timeout = jiffies + msecs_to_jiffies(10);
5217 while (1) {
5218 reg = read_csr(dd,
5219 DC_LCB_STS_LINK_TRANSFER_ACTIVE);
5220 if (reg)
5221 break;
5222 if (time_after(jiffies, timeout)) {
5223 dd_dev_err(dd,
5224 "timeout waiting for LINK_TRANSFER_ACTIVE\n");
5225 return -ETIMEDOUT;
5226 }
5227 udelay(2);
5228 }
5229
5230 write_csr(dd, DC_LCB_CFG_ALLOW_LINK_UP,
5231 1ull << DC_LCB_CFG_ALLOW_LINK_UP_VAL_SHIFT);
5232 }
5233
5234 if (!loopback) {
5235 /*
5236 * When doing quick linkup and not in loopback, both
5237 * sides must be done with LCB set-up before either
5238 * starts the quick linkup. Put a delay here so that
5239 * both sides can be started and have a chance to be
5240 * done with LCB set up before resuming.
5241 */
5242 dd_dev_err(dd,
5243 "Pausing for peer to be finished with LCB set up\n");
5244 msleep(5000);
5245 dd_dev_err(dd,
5246 "Continuing with quick linkup\n");
5247 }
5248
5249 write_csr(dd, DC_LCB_ERR_EN, 0); /* mask LCB errors */
5250 set_8051_lcb_access(dd);
5251
5252 /*
5253 * State "quick" LinkUp request sets the physical link state to
5254 * LinkUp without a verify capability sequence.
5255 * This state is in simulator v37 and later.
5256 */
5257 ret = set_physical_link_state(dd, PLS_QUICK_LINKUP);
5258 if (ret != HCMD_SUCCESS) {
5259 dd_dev_err(dd,
5260 "%s: set physical link state to quick LinkUp failed with return %d\n",
5261 __func__, ret);
5262
5263 set_host_lcb_access(dd);
5264 write_csr(dd, DC_LCB_ERR_EN, ~0ull); /* watch LCB errors */
5265
5266 if (ret >= 0)
5267 ret = -EINVAL;
5268 return ret;
5269 }
5270
5271 return 0; /* success */
5272}
5273
5274/*
5275 * Set the SerDes to internal loopback mode.
5276 * Returns 0 on success, -errno on error.
5277 */
5278static int set_serdes_loopback_mode(struct hfi1_devdata *dd)
5279{
5280 int ret;
5281
5282 ret = set_physical_link_state(dd, PLS_INTERNAL_SERDES_LOOPBACK);
5283 if (ret == HCMD_SUCCESS)
5284 return 0;
5285 dd_dev_err(dd,
5286 "Set physical link state to SerDes Loopback failed with return %d\n",
5287 ret);
5288 if (ret >= 0)
5289 ret = -EINVAL;
5290 return ret;
5291}
5292
5293/*
5294 * Do all special steps to set up loopback.
5295 */
5296static int init_loopback(struct hfi1_devdata *dd)
5297{
5298 dd_dev_info(dd, "Entering loopback mode\n");
5299
5300 /* all loopbacks should disable self GUID check */
5301 write_csr(dd, DC_DC8051_CFG_MODE,
5302 (read_csr(dd, DC_DC8051_CFG_MODE) | DISABLE_SELF_GUID_CHECK));
5303
5304 /*
5305 * The simulator has only one loopback option - LCB. Switch
5306 * to that option, which includes quick link up.
5307 *
5308 * Accept all valid loopback values.
5309 */
5310 if ((dd->icode == ICODE_FUNCTIONAL_SIMULATOR)
5311 && (loopback == LOOPBACK_SERDES
5312 || loopback == LOOPBACK_LCB
5313 || loopback == LOOPBACK_CABLE)) {
5314 loopback = LOOPBACK_LCB;
5315 quick_linkup = 1;
5316 return 0;
5317 }
5318
5319 /* handle serdes loopback */
5320 if (loopback == LOOPBACK_SERDES) {
5321 /* internal serdes loopack needs quick linkup on RTL */
5322 if (dd->icode == ICODE_RTL_SILICON)
5323 quick_linkup = 1;
5324 return set_serdes_loopback_mode(dd);
5325 }
5326
5327 /* LCB loopback - handled at poll time */
5328 if (loopback == LOOPBACK_LCB) {
5329 quick_linkup = 1; /* LCB is always quick linkup */
5330
5331 /* not supported in emulation due to emulation RTL changes */
5332 if (dd->icode == ICODE_FPGA_EMULATION) {
5333 dd_dev_err(dd,
5334 "LCB loopback not supported in emulation\n");
5335 return -EINVAL;
5336 }
5337 return 0;
5338 }
5339
5340 /* external cable loopback requires no extra steps */
5341 if (loopback == LOOPBACK_CABLE)
5342 return 0;
5343
5344 dd_dev_err(dd, "Invalid loopback mode %d\n", loopback);
5345 return -EINVAL;
5346}
5347
5348/*
5349 * Translate from the OPA_LINK_WIDTH handed to us by the FM to bits
5350 * used in the Verify Capability link width attribute.
5351 */
5352static u16 opa_to_vc_link_widths(u16 opa_widths)
5353{
5354 int i;
5355 u16 result = 0;
5356
5357 static const struct link_bits {
5358 u16 from;
5359 u16 to;
5360 } opa_link_xlate[] = {
5361 { OPA_LINK_WIDTH_1X, 1 << (1-1) },
5362 { OPA_LINK_WIDTH_2X, 1 << (2-1) },
5363 { OPA_LINK_WIDTH_3X, 1 << (3-1) },
5364 { OPA_LINK_WIDTH_4X, 1 << (4-1) },
5365 };
5366
5367 for (i = 0; i < ARRAY_SIZE(opa_link_xlate); i++) {
5368 if (opa_widths & opa_link_xlate[i].from)
5369 result |= opa_link_xlate[i].to;
5370 }
5371 return result;
5372}
5373
5374/*
5375 * Set link attributes before moving to polling.
5376 */
5377static int set_local_link_attributes(struct hfi1_pportdata *ppd)
5378{
5379 struct hfi1_devdata *dd = ppd->dd;
5380 u8 enable_lane_tx;
5381 u8 tx_polarity_inversion;
5382 u8 rx_polarity_inversion;
5383 int ret;
5384
5385 /* reset our fabric serdes to clear any lingering problems */
5386 fabric_serdes_reset(dd);
5387
5388 /* set the local tx rate - need to read-modify-write */
5389 ret = read_tx_settings(dd, &enable_lane_tx, &tx_polarity_inversion,
5390 &rx_polarity_inversion, &ppd->local_tx_rate);
5391 if (ret)
5392 goto set_local_link_attributes_fail;
5393
5394 if (dd->dc8051_ver < dc8051_ver(0, 20)) {
5395 /* set the tx rate to the fastest enabled */
5396 if (ppd->link_speed_enabled & OPA_LINK_SPEED_25G)
5397 ppd->local_tx_rate = 1;
5398 else
5399 ppd->local_tx_rate = 0;
5400 } else {
5401 /* set the tx rate to all enabled */
5402 ppd->local_tx_rate = 0;
5403 if (ppd->link_speed_enabled & OPA_LINK_SPEED_25G)
5404 ppd->local_tx_rate |= 2;
5405 if (ppd->link_speed_enabled & OPA_LINK_SPEED_12_5G)
5406 ppd->local_tx_rate |= 1;
5407 }
5408 ret = write_tx_settings(dd, enable_lane_tx, tx_polarity_inversion,
5409 rx_polarity_inversion, ppd->local_tx_rate);
5410 if (ret != HCMD_SUCCESS)
5411 goto set_local_link_attributes_fail;
5412
5413 /*
5414 * DC supports continuous updates.
5415 */
5416 ret = write_vc_local_phy(dd, 0 /* no power management */,
5417 1 /* continuous updates */);
5418 if (ret != HCMD_SUCCESS)
5419 goto set_local_link_attributes_fail;
5420
5421 /* z=1 in the next call: AU of 0 is not supported by the hardware */
5422 ret = write_vc_local_fabric(dd, dd->vau, 1, dd->vcu, dd->vl15_init,
5423 ppd->port_crc_mode_enabled);
5424 if (ret != HCMD_SUCCESS)
5425 goto set_local_link_attributes_fail;
5426
5427 ret = write_vc_local_link_width(dd, 0, 0,
5428 opa_to_vc_link_widths(ppd->link_width_enabled));
5429 if (ret != HCMD_SUCCESS)
5430 goto set_local_link_attributes_fail;
5431
5432 /* let peer know who we are */
5433 ret = write_local_device_id(dd, dd->pcidev->device, dd->minrev);
5434 if (ret == HCMD_SUCCESS)
5435 return 0;
5436
5437set_local_link_attributes_fail:
5438 dd_dev_err(dd,
5439 "Failed to set local link attributes, return 0x%x\n",
5440 ret);
5441 return ret;
5442}
5443
5444/*
5445 * Call this to start the link. Schedule a retry if the cable is not
5446 * present or if unable to start polling. Do not do anything if the
5447 * link is disabled. Returns 0 if link is disabled or moved to polling
5448 */
5449int start_link(struct hfi1_pportdata *ppd)
5450{
5451 if (!ppd->link_enabled) {
5452 dd_dev_info(ppd->dd,
5453 "%s: stopping link start because link is disabled\n",
5454 __func__);
5455 return 0;
5456 }
5457 if (!ppd->driver_link_ready) {
5458 dd_dev_info(ppd->dd,
5459 "%s: stopping link start because driver is not ready\n",
5460 __func__);
5461 return 0;
5462 }
5463
5464 if (qsfp_mod_present(ppd) || loopback == LOOPBACK_SERDES ||
5465 loopback == LOOPBACK_LCB ||
5466 ppd->dd->icode == ICODE_FUNCTIONAL_SIMULATOR)
5467 return set_link_state(ppd, HLS_DN_POLL);
5468
5469 dd_dev_info(ppd->dd,
5470 "%s: stopping link start because no cable is present\n",
5471 __func__);
5472 return -EAGAIN;
5473}
5474
5475static void reset_qsfp(struct hfi1_pportdata *ppd)
5476{
5477 struct hfi1_devdata *dd = ppd->dd;
5478 u64 mask, qsfp_mask;
5479
5480 mask = (u64)QSFP_HFI0_RESET_N;
5481 qsfp_mask = read_csr(dd,
5482 dd->hfi1_id ? ASIC_QSFP2_OE : ASIC_QSFP1_OE);
5483 qsfp_mask |= mask;
5484 write_csr(dd,
5485 dd->hfi1_id ? ASIC_QSFP2_OE : ASIC_QSFP1_OE,
5486 qsfp_mask);
5487
5488 qsfp_mask = read_csr(dd,
5489 dd->hfi1_id ? ASIC_QSFP2_OUT : ASIC_QSFP1_OUT);
5490 qsfp_mask &= ~mask;
5491 write_csr(dd,
5492 dd->hfi1_id ? ASIC_QSFP2_OUT : ASIC_QSFP1_OUT,
5493 qsfp_mask);
5494
5495 udelay(10);
5496
5497 qsfp_mask |= mask;
5498 write_csr(dd,
5499 dd->hfi1_id ? ASIC_QSFP2_OUT : ASIC_QSFP1_OUT,
5500 qsfp_mask);
5501}
5502
5503static int handle_qsfp_error_conditions(struct hfi1_pportdata *ppd,
5504 u8 *qsfp_interrupt_status)
5505{
5506 struct hfi1_devdata *dd = ppd->dd;
5507
5508 if ((qsfp_interrupt_status[0] & QSFP_HIGH_TEMP_ALARM) ||
5509 (qsfp_interrupt_status[0] & QSFP_HIGH_TEMP_WARNING))
5510 dd_dev_info(dd,
5511 "%s: QSFP cable on fire\n",
5512 __func__);
5513
5514 if ((qsfp_interrupt_status[0] & QSFP_LOW_TEMP_ALARM) ||
5515 (qsfp_interrupt_status[0] & QSFP_LOW_TEMP_WARNING))
5516 dd_dev_info(dd,
5517 "%s: QSFP cable temperature too low\n",
5518 __func__);
5519
5520 if ((qsfp_interrupt_status[1] & QSFP_HIGH_VCC_ALARM) ||
5521 (qsfp_interrupt_status[1] & QSFP_HIGH_VCC_WARNING))
5522 dd_dev_info(dd,
5523 "%s: QSFP supply voltage too high\n",
5524 __func__);
5525
5526 if ((qsfp_interrupt_status[1] & QSFP_LOW_VCC_ALARM) ||
5527 (qsfp_interrupt_status[1] & QSFP_LOW_VCC_WARNING))
5528 dd_dev_info(dd,
5529 "%s: QSFP supply voltage too low\n",
5530 __func__);
5531
5532 /* Byte 2 is vendor specific */
5533
5534 if ((qsfp_interrupt_status[3] & QSFP_HIGH_POWER_ALARM) ||
5535 (qsfp_interrupt_status[3] & QSFP_HIGH_POWER_WARNING))
5536 dd_dev_info(dd,
5537 "%s: Cable RX channel 1/2 power too high\n",
5538 __func__);
5539
5540 if ((qsfp_interrupt_status[3] & QSFP_LOW_POWER_ALARM) ||
5541 (qsfp_interrupt_status[3] & QSFP_LOW_POWER_WARNING))
5542 dd_dev_info(dd,
5543 "%s: Cable RX channel 1/2 power too low\n",
5544 __func__);
5545
5546 if ((qsfp_interrupt_status[4] & QSFP_HIGH_POWER_ALARM) ||
5547 (qsfp_interrupt_status[4] & QSFP_HIGH_POWER_WARNING))
5548 dd_dev_info(dd,
5549 "%s: Cable RX channel 3/4 power too high\n",
5550 __func__);
5551
5552 if ((qsfp_interrupt_status[4] & QSFP_LOW_POWER_ALARM) ||
5553 (qsfp_interrupt_status[4] & QSFP_LOW_POWER_WARNING))
5554 dd_dev_info(dd,
5555 "%s: Cable RX channel 3/4 power too low\n",
5556 __func__);
5557
5558 if ((qsfp_interrupt_status[5] & QSFP_HIGH_BIAS_ALARM) ||
5559 (qsfp_interrupt_status[5] & QSFP_HIGH_BIAS_WARNING))
5560 dd_dev_info(dd,
5561 "%s: Cable TX channel 1/2 bias too high\n",
5562 __func__);
5563
5564 if ((qsfp_interrupt_status[5] & QSFP_LOW_BIAS_ALARM) ||
5565 (qsfp_interrupt_status[5] & QSFP_LOW_BIAS_WARNING))
5566 dd_dev_info(dd,
5567 "%s: Cable TX channel 1/2 bias too low\n",
5568 __func__);
5569
5570 if ((qsfp_interrupt_status[6] & QSFP_HIGH_BIAS_ALARM) ||
5571 (qsfp_interrupt_status[6] & QSFP_HIGH_BIAS_WARNING))
5572 dd_dev_info(dd,
5573 "%s: Cable TX channel 3/4 bias too high\n",
5574 __func__);
5575
5576 if ((qsfp_interrupt_status[6] & QSFP_LOW_BIAS_ALARM) ||
5577 (qsfp_interrupt_status[6] & QSFP_LOW_BIAS_WARNING))
5578 dd_dev_info(dd,
5579 "%s: Cable TX channel 3/4 bias too low\n",
5580 __func__);
5581
5582 if ((qsfp_interrupt_status[7] & QSFP_HIGH_POWER_ALARM) ||
5583 (qsfp_interrupt_status[7] & QSFP_HIGH_POWER_WARNING))
5584 dd_dev_info(dd,
5585 "%s: Cable TX channel 1/2 power too high\n",
5586 __func__);
5587
5588 if ((qsfp_interrupt_status[7] & QSFP_LOW_POWER_ALARM) ||
5589 (qsfp_interrupt_status[7] & QSFP_LOW_POWER_WARNING))
5590 dd_dev_info(dd,
5591 "%s: Cable TX channel 1/2 power too low\n",
5592 __func__);
5593
5594 if ((qsfp_interrupt_status[8] & QSFP_HIGH_POWER_ALARM) ||
5595 (qsfp_interrupt_status[8] & QSFP_HIGH_POWER_WARNING))
5596 dd_dev_info(dd,
5597 "%s: Cable TX channel 3/4 power too high\n",
5598 __func__);
5599
5600 if ((qsfp_interrupt_status[8] & QSFP_LOW_POWER_ALARM) ||
5601 (qsfp_interrupt_status[8] & QSFP_LOW_POWER_WARNING))
5602 dd_dev_info(dd,
5603 "%s: Cable TX channel 3/4 power too low\n",
5604 __func__);
5605
5606 /* Bytes 9-10 and 11-12 are reserved */
5607 /* Bytes 13-15 are vendor specific */
5608
5609 return 0;
5610}
5611
5612static int do_pre_lni_host_behaviors(struct hfi1_pportdata *ppd)
5613{
5614 refresh_qsfp_cache(ppd, &ppd->qsfp_info);
5615
5616 return 0;
5617}
5618
5619static int do_qsfp_intr_fallback(struct hfi1_pportdata *ppd)
5620{
5621 struct hfi1_devdata *dd = ppd->dd;
5622 u8 qsfp_interrupt_status = 0;
5623
5624 if (qsfp_read(ppd, dd->hfi1_id, 2, &qsfp_interrupt_status, 1)
5625 != 1) {
5626 dd_dev_info(dd,
5627 "%s: Failed to read status of QSFP module\n",
5628 __func__);
5629 return -EIO;
5630 }
5631
5632 /* We don't care about alarms & warnings with a non-functional INT_N */
5633 if (!(qsfp_interrupt_status & QSFP_DATA_NOT_READY))
5634 do_pre_lni_host_behaviors(ppd);
5635
5636 return 0;
5637}
5638
5639/* This routine will only be scheduled if the QSFP module is present */
5640static void qsfp_event(struct work_struct *work)
5641{
5642 struct qsfp_data *qd;
5643 struct hfi1_pportdata *ppd;
5644 struct hfi1_devdata *dd;
5645
5646 qd = container_of(work, struct qsfp_data, qsfp_work);
5647 ppd = qd->ppd;
5648 dd = ppd->dd;
5649
5650 /* Sanity check */
5651 if (!qsfp_mod_present(ppd))
5652 return;
5653
5654 /*
5655 * Turn DC back on after cables has been
5656 * re-inserted. Up until now, the DC has been in
5657 * reset to save power.
5658 */
5659 dc_start(dd);
5660
5661 if (qd->cache_refresh_required) {
5662 msleep(3000);
5663 reset_qsfp(ppd);
5664
5665 /* Check for QSFP interrupt after t_init (SFF 8679)
5666 * + extra
5667 */
5668 msleep(3000);
5669 if (!qd->qsfp_interrupt_functional) {
5670 if (do_qsfp_intr_fallback(ppd) < 0)
5671 dd_dev_info(dd, "%s: QSFP fallback failed\n",
5672 __func__);
5673 ppd->driver_link_ready = 1;
5674 start_link(ppd);
5675 }
5676 }
5677
5678 if (qd->check_interrupt_flags) {
5679 u8 qsfp_interrupt_status[16] = {0,};
5680
5681 if (qsfp_read(ppd, dd->hfi1_id, 6,
5682 &qsfp_interrupt_status[0], 16) != 16) {
5683 dd_dev_info(dd,
5684 "%s: Failed to read status of QSFP module\n",
5685 __func__);
5686 } else {
5687 unsigned long flags;
5688 u8 data_status;
5689
5690 spin_lock_irqsave(&ppd->qsfp_info.qsfp_lock, flags);
5691 ppd->qsfp_info.check_interrupt_flags = 0;
5692 spin_unlock_irqrestore(&ppd->qsfp_info.qsfp_lock,
5693 flags);
5694
5695 if (qsfp_read(ppd, dd->hfi1_id, 2, &data_status, 1)
5696 != 1) {
5697 dd_dev_info(dd,
5698 "%s: Failed to read status of QSFP module\n",
5699 __func__);
5700 }
5701 if (!(data_status & QSFP_DATA_NOT_READY)) {
5702 do_pre_lni_host_behaviors(ppd);
5703 start_link(ppd);
5704 } else
5705 handle_qsfp_error_conditions(ppd,
5706 qsfp_interrupt_status);
5707 }
5708 }
5709}
5710
5711void init_qsfp(struct hfi1_pportdata *ppd)
5712{
5713 struct hfi1_devdata *dd = ppd->dd;
5714 u64 qsfp_mask;
5715
5716 if (loopback == LOOPBACK_SERDES || loopback == LOOPBACK_LCB ||
5717 ppd->dd->icode == ICODE_FUNCTIONAL_SIMULATOR ||
5718 !HFI1_CAP_IS_KSET(QSFP_ENABLED)) {
5719 ppd->driver_link_ready = 1;
5720 return;
5721 }
5722
5723 ppd->qsfp_info.ppd = ppd;
5724 INIT_WORK(&ppd->qsfp_info.qsfp_work, qsfp_event);
5725
5726 qsfp_mask = (u64)(QSFP_HFI0_INT_N | QSFP_HFI0_MODPRST_N);
5727 /* Clear current status to avoid spurious interrupts */
5728 write_csr(dd,
5729 dd->hfi1_id ?
5730 ASIC_QSFP2_CLEAR :
5731 ASIC_QSFP1_CLEAR,
5732 qsfp_mask);
5733
5734 /* Handle active low nature of INT_N and MODPRST_N pins */
5735 if (qsfp_mod_present(ppd))
5736 qsfp_mask &= ~(u64)QSFP_HFI0_MODPRST_N;
5737 write_csr(dd,
5738 dd->hfi1_id ? ASIC_QSFP2_INVERT : ASIC_QSFP1_INVERT,
5739 qsfp_mask);
5740
5741 /* Allow only INT_N and MODPRST_N to trigger QSFP interrupts */
5742 qsfp_mask |= (u64)QSFP_HFI0_MODPRST_N;
5743 write_csr(dd,
5744 dd->hfi1_id ? ASIC_QSFP2_MASK : ASIC_QSFP1_MASK,
5745 qsfp_mask);
5746
5747 if (qsfp_mod_present(ppd)) {
5748 msleep(3000);
5749 reset_qsfp(ppd);
5750
5751 /* Check for QSFP interrupt after t_init (SFF 8679)
5752 * + extra
5753 */
5754 msleep(3000);
5755 if (!ppd->qsfp_info.qsfp_interrupt_functional) {
5756 if (do_qsfp_intr_fallback(ppd) < 0)
5757 dd_dev_info(dd,
5758 "%s: QSFP fallback failed\n",
5759 __func__);
5760 ppd->driver_link_ready = 1;
5761 }
5762 }
5763}
5764
5765int bringup_serdes(struct hfi1_pportdata *ppd)
5766{
5767 struct hfi1_devdata *dd = ppd->dd;
5768 u64 guid;
5769 int ret;
5770
5771 if (HFI1_CAP_IS_KSET(EXTENDED_PSN))
5772 add_rcvctrl(dd, RCV_CTRL_RCV_EXTENDED_PSN_ENABLE_SMASK);
5773
5774 guid = ppd->guid;
5775 if (!guid) {
5776 if (dd->base_guid)
5777 guid = dd->base_guid + ppd->port - 1;
5778 ppd->guid = guid;
5779 }
5780
5781 /* the link defaults to enabled */
5782 ppd->link_enabled = 1;
5783 /* Set linkinit_reason on power up per OPA spec */
5784 ppd->linkinit_reason = OPA_LINKINIT_REASON_LINKUP;
5785
5786 if (loopback) {
5787 ret = init_loopback(dd);
5788 if (ret < 0)
5789 return ret;
5790 }
5791
5792 return start_link(ppd);
5793}
5794
5795void hfi1_quiet_serdes(struct hfi1_pportdata *ppd)
5796{
5797 struct hfi1_devdata *dd = ppd->dd;
5798
5799 /*
5800 * Shut down the link and keep it down. First turn off that the
5801 * driver wants to allow the link to be up (driver_link_ready).
5802 * Then make sure the link is not automatically restarted
5803 * (link_enabled). Cancel any pending restart. And finally
5804 * go offline.
5805 */
5806 ppd->driver_link_ready = 0;
5807 ppd->link_enabled = 0;
5808
5809 set_link_down_reason(ppd, OPA_LINKDOWN_REASON_SMA_DISABLED, 0,
5810 OPA_LINKDOWN_REASON_SMA_DISABLED);
5811 set_link_state(ppd, HLS_DN_OFFLINE);
5812
5813 /* disable the port */
5814 clear_rcvctrl(dd, RCV_CTRL_RCV_PORT_ENABLE_SMASK);
5815}
5816
5817static inline int init_cpu_counters(struct hfi1_devdata *dd)
5818{
5819 struct hfi1_pportdata *ppd;
5820 int i;
5821
5822 ppd = (struct hfi1_pportdata *)(dd + 1);
5823 for (i = 0; i < dd->num_pports; i++, ppd++) {
5824 ppd->ibport_data.rc_acks = NULL;
5825 ppd->ibport_data.rc_qacks = NULL;
5826 ppd->ibport_data.rc_acks = alloc_percpu(u64);
5827 ppd->ibport_data.rc_qacks = alloc_percpu(u64);
5828 ppd->ibport_data.rc_delayed_comp = alloc_percpu(u64);
5829 if ((ppd->ibport_data.rc_acks == NULL) ||
5830 (ppd->ibport_data.rc_delayed_comp == NULL) ||
5831 (ppd->ibport_data.rc_qacks == NULL))
5832 return -ENOMEM;
5833 }
5834
5835 return 0;
5836}
5837
5838static const char * const pt_names[] = {
5839 "expected",
5840 "eager",
5841 "invalid"
5842};
5843
5844static const char *pt_name(u32 type)
5845{
5846 return type >= ARRAY_SIZE(pt_names) ? "unknown" : pt_names[type];
5847}
5848
5849/*
5850 * index is the index into the receive array
5851 */
5852void hfi1_put_tid(struct hfi1_devdata *dd, u32 index,
5853 u32 type, unsigned long pa, u16 order)
5854{
5855 u64 reg;
5856 void __iomem *base = (dd->rcvarray_wc ? dd->rcvarray_wc :
5857 (dd->kregbase + RCV_ARRAY));
5858
5859 if (!(dd->flags & HFI1_PRESENT))
5860 goto done;
5861
5862 if (type == PT_INVALID) {
5863 pa = 0;
5864 } else if (type > PT_INVALID) {
5865 dd_dev_err(dd,
5866 "unexpected receive array type %u for index %u, not handled\n",
5867 type, index);
5868 goto done;
5869 }
5870
5871 hfi1_cdbg(TID, "type %s, index 0x%x, pa 0x%lx, bsize 0x%lx",
5872 pt_name(type), index, pa, (unsigned long)order);
5873
5874#define RT_ADDR_SHIFT 12 /* 4KB kernel address boundary */
5875 reg = RCV_ARRAY_RT_WRITE_ENABLE_SMASK
5876 | (u64)order << RCV_ARRAY_RT_BUF_SIZE_SHIFT
5877 | ((pa >> RT_ADDR_SHIFT) & RCV_ARRAY_RT_ADDR_MASK)
5878 << RCV_ARRAY_RT_ADDR_SHIFT;
5879 writeq(reg, base + (index * 8));
5880
5881 if (type == PT_EAGER)
5882 /*
5883 * Eager entries are written one-by-one so we have to push them
5884 * after we write the entry.
5885 */
5886 flush_wc();
5887done:
5888 return;
5889}
5890
5891void hfi1_clear_tids(struct hfi1_ctxtdata *rcd)
5892{
5893 struct hfi1_devdata *dd = rcd->dd;
5894 u32 i;
5895
5896 /* this could be optimized */
5897 for (i = rcd->eager_base; i < rcd->eager_base +
5898 rcd->egrbufs.alloced; i++)
5899 hfi1_put_tid(dd, i, PT_INVALID, 0, 0);
5900
5901 for (i = rcd->expected_base;
5902 i < rcd->expected_base + rcd->expected_count; i++)
5903 hfi1_put_tid(dd, i, PT_INVALID, 0, 0);
5904}
5905
5906int hfi1_get_base_kinfo(struct hfi1_ctxtdata *rcd,
5907 struct hfi1_ctxt_info *kinfo)
5908{
5909 kinfo->runtime_flags = (HFI1_MISC_GET() << HFI1_CAP_USER_SHIFT) |
5910 HFI1_CAP_UGET(MASK) | HFI1_CAP_KGET(K2U);
5911 return 0;
5912}
5913
5914struct hfi1_message_header *hfi1_get_msgheader(
5915 struct hfi1_devdata *dd, __le32 *rhf_addr)
5916{
5917 u32 offset = rhf_hdrq_offset(rhf_to_cpu(rhf_addr));
5918
5919 return (struct hfi1_message_header *)
5920 (rhf_addr - dd->rhf_offset + offset);
5921}
5922
5923static const char * const ib_cfg_name_strings[] = {
5924 "HFI1_IB_CFG_LIDLMC",
5925 "HFI1_IB_CFG_LWID_DG_ENB",
5926 "HFI1_IB_CFG_LWID_ENB",
5927 "HFI1_IB_CFG_LWID",
5928 "HFI1_IB_CFG_SPD_ENB",
5929 "HFI1_IB_CFG_SPD",
5930 "HFI1_IB_CFG_RXPOL_ENB",
5931 "HFI1_IB_CFG_LREV_ENB",
5932 "HFI1_IB_CFG_LINKLATENCY",
5933 "HFI1_IB_CFG_HRTBT",
5934 "HFI1_IB_CFG_OP_VLS",
5935 "HFI1_IB_CFG_VL_HIGH_CAP",
5936 "HFI1_IB_CFG_VL_LOW_CAP",
5937 "HFI1_IB_CFG_OVERRUN_THRESH",
5938 "HFI1_IB_CFG_PHYERR_THRESH",
5939 "HFI1_IB_CFG_LINKDEFAULT",
5940 "HFI1_IB_CFG_PKEYS",
5941 "HFI1_IB_CFG_MTU",
5942 "HFI1_IB_CFG_LSTATE",
5943 "HFI1_IB_CFG_VL_HIGH_LIMIT",
5944 "HFI1_IB_CFG_PMA_TICKS",
5945 "HFI1_IB_CFG_PORT"
5946};
5947
5948static const char *ib_cfg_name(int which)
5949{
5950 if (which < 0 || which >= ARRAY_SIZE(ib_cfg_name_strings))
5951 return "invalid";
5952 return ib_cfg_name_strings[which];
5953}
5954
5955int hfi1_get_ib_cfg(struct hfi1_pportdata *ppd, int which)
5956{
5957 struct hfi1_devdata *dd = ppd->dd;
5958 int val = 0;
5959
5960 switch (which) {
5961 case HFI1_IB_CFG_LWID_ENB: /* allowed Link-width */
5962 val = ppd->link_width_enabled;
5963 break;
5964 case HFI1_IB_CFG_LWID: /* currently active Link-width */
5965 val = ppd->link_width_active;
5966 break;
5967 case HFI1_IB_CFG_SPD_ENB: /* allowed Link speeds */
5968 val = ppd->link_speed_enabled;
5969 break;
5970 case HFI1_IB_CFG_SPD: /* current Link speed */
5971 val = ppd->link_speed_active;
5972 break;
5973
5974 case HFI1_IB_CFG_RXPOL_ENB: /* Auto-RX-polarity enable */
5975 case HFI1_IB_CFG_LREV_ENB: /* Auto-Lane-reversal enable */
5976 case HFI1_IB_CFG_LINKLATENCY:
5977 goto unimplemented;
5978
5979 case HFI1_IB_CFG_OP_VLS:
5980 val = ppd->vls_operational;
5981 break;
5982 case HFI1_IB_CFG_VL_HIGH_CAP: /* VL arb high priority table size */
5983 val = VL_ARB_HIGH_PRIO_TABLE_SIZE;
5984 break;
5985 case HFI1_IB_CFG_VL_LOW_CAP: /* VL arb low priority table size */
5986 val = VL_ARB_LOW_PRIO_TABLE_SIZE;
5987 break;
5988 case HFI1_IB_CFG_OVERRUN_THRESH: /* IB overrun threshold */
5989 val = ppd->overrun_threshold;
5990 break;
5991 case HFI1_IB_CFG_PHYERR_THRESH: /* IB PHY error threshold */
5992 val = ppd->phy_error_threshold;
5993 break;
5994 case HFI1_IB_CFG_LINKDEFAULT: /* IB link default (sleep/poll) */
5995 val = dd->link_default;
5996 break;
5997
5998 case HFI1_IB_CFG_HRTBT: /* Heartbeat off/enable/auto */
5999 case HFI1_IB_CFG_PMA_TICKS:
6000 default:
6001unimplemented:
6002 if (HFI1_CAP_IS_KSET(PRINT_UNIMPL))
6003 dd_dev_info(
6004 dd,
6005 "%s: which %s: not implemented\n",
6006 __func__,
6007 ib_cfg_name(which));
6008 break;
6009 }
6010
6011 return val;
6012}
6013
6014/*
6015 * The largest MAD packet size.
6016 */
6017#define MAX_MAD_PACKET 2048
6018
6019/*
6020 * Return the maximum header bytes that can go on the _wire_
6021 * for this device. This count includes the ICRC which is
6022 * not part of the packet held in memory but it is appended
6023 * by the HW.
6024 * This is dependent on the device's receive header entry size.
6025 * HFI allows this to be set per-receive context, but the
6026 * driver presently enforces a global value.
6027 */
6028u32 lrh_max_header_bytes(struct hfi1_devdata *dd)
6029{
6030 /*
6031 * The maximum non-payload (MTU) bytes in LRH.PktLen are
6032 * the Receive Header Entry Size minus the PBC (or RHF) size
6033 * plus one DW for the ICRC appended by HW.
6034 *
6035 * dd->rcd[0].rcvhdrqentsize is in DW.
6036 * We use rcd[0] as all context will have the same value. Also,
6037 * the first kernel context would have been allocated by now so
6038 * we are guaranteed a valid value.
6039 */
6040 return (dd->rcd[0]->rcvhdrqentsize - 2/*PBC/RHF*/ + 1/*ICRC*/) << 2;
6041}
6042
6043/*
6044 * Set Send Length
6045 * @ppd - per port data
6046 *
6047 * Set the MTU by limiting how many DWs may be sent. The SendLenCheck*
6048 * registers compare against LRH.PktLen, so use the max bytes included
6049 * in the LRH.
6050 *
6051 * This routine changes all VL values except VL15, which it maintains at
6052 * the same value.
6053 */
6054static void set_send_length(struct hfi1_pportdata *ppd)
6055{
6056 struct hfi1_devdata *dd = ppd->dd;
6057 u32 max_hb = lrh_max_header_bytes(dd), maxvlmtu = 0, dcmtu;
6058 u64 len1 = 0, len2 = (((dd->vld[15].mtu + max_hb) >> 2)
6059 & SEND_LEN_CHECK1_LEN_VL15_MASK) <<
6060 SEND_LEN_CHECK1_LEN_VL15_SHIFT;
6061 int i;
6062
6063 for (i = 0; i < ppd->vls_supported; i++) {
6064 if (dd->vld[i].mtu > maxvlmtu)
6065 maxvlmtu = dd->vld[i].mtu;
6066 if (i <= 3)
6067 len1 |= (((dd->vld[i].mtu + max_hb) >> 2)
6068 & SEND_LEN_CHECK0_LEN_VL0_MASK) <<
6069 ((i % 4) * SEND_LEN_CHECK0_LEN_VL1_SHIFT);
6070 else
6071 len2 |= (((dd->vld[i].mtu + max_hb) >> 2)
6072 & SEND_LEN_CHECK1_LEN_VL4_MASK) <<
6073 ((i % 4) * SEND_LEN_CHECK1_LEN_VL5_SHIFT);
6074 }
6075 write_csr(dd, SEND_LEN_CHECK0, len1);
6076 write_csr(dd, SEND_LEN_CHECK1, len2);
6077 /* adjust kernel credit return thresholds based on new MTUs */
6078 /* all kernel receive contexts have the same hdrqentsize */
6079 for (i = 0; i < ppd->vls_supported; i++) {
6080 sc_set_cr_threshold(dd->vld[i].sc,
6081 sc_mtu_to_threshold(dd->vld[i].sc, dd->vld[i].mtu,
6082 dd->rcd[0]->rcvhdrqentsize));
6083 }
6084 sc_set_cr_threshold(dd->vld[15].sc,
6085 sc_mtu_to_threshold(dd->vld[15].sc, dd->vld[15].mtu,
6086 dd->rcd[0]->rcvhdrqentsize));
6087
6088 /* Adjust maximum MTU for the port in DC */
6089 dcmtu = maxvlmtu == 10240 ? DCC_CFG_PORT_MTU_CAP_10240 :
6090 (ilog2(maxvlmtu >> 8) + 1);
6091 len1 = read_csr(ppd->dd, DCC_CFG_PORT_CONFIG);
6092 len1 &= ~DCC_CFG_PORT_CONFIG_MTU_CAP_SMASK;
6093 len1 |= ((u64)dcmtu & DCC_CFG_PORT_CONFIG_MTU_CAP_MASK) <<
6094 DCC_CFG_PORT_CONFIG_MTU_CAP_SHIFT;
6095 write_csr(ppd->dd, DCC_CFG_PORT_CONFIG, len1);
6096}
6097
6098static void set_lidlmc(struct hfi1_pportdata *ppd)
6099{
6100 int i;
6101 u64 sreg = 0;
6102 struct hfi1_devdata *dd = ppd->dd;
6103 u32 mask = ~((1U << ppd->lmc) - 1);
6104 u64 c1 = read_csr(ppd->dd, DCC_CFG_PORT_CONFIG1);
6105
6106 if (dd->hfi1_snoop.mode_flag)
6107 dd_dev_info(dd, "Set lid/lmc while snooping");
6108
6109 c1 &= ~(DCC_CFG_PORT_CONFIG1_TARGET_DLID_SMASK
6110 | DCC_CFG_PORT_CONFIG1_DLID_MASK_SMASK);
6111 c1 |= ((ppd->lid & DCC_CFG_PORT_CONFIG1_TARGET_DLID_MASK)
6112 << DCC_CFG_PORT_CONFIG1_TARGET_DLID_SHIFT)|
6113 ((mask & DCC_CFG_PORT_CONFIG1_DLID_MASK_MASK)
6114 << DCC_CFG_PORT_CONFIG1_DLID_MASK_SHIFT);
6115 write_csr(ppd->dd, DCC_CFG_PORT_CONFIG1, c1);
6116
6117 /*
6118 * Iterate over all the send contexts and set their SLID check
6119 */
6120 sreg = ((mask & SEND_CTXT_CHECK_SLID_MASK_MASK) <<
6121 SEND_CTXT_CHECK_SLID_MASK_SHIFT) |
6122 (((ppd->lid & mask) & SEND_CTXT_CHECK_SLID_VALUE_MASK) <<
6123 SEND_CTXT_CHECK_SLID_VALUE_SHIFT);
6124
6125 for (i = 0; i < dd->chip_send_contexts; i++) {
6126 hfi1_cdbg(LINKVERB, "SendContext[%d].SLID_CHECK = 0x%x",
6127 i, (u32)sreg);
6128 write_kctxt_csr(dd, i, SEND_CTXT_CHECK_SLID, sreg);
6129 }
6130
6131 /* Now we have to do the same thing for the sdma engines */
6132 sdma_update_lmc(dd, mask, ppd->lid);
6133}
6134
6135static int wait_phy_linkstate(struct hfi1_devdata *dd, u32 state, u32 msecs)
6136{
6137 unsigned long timeout;
6138 u32 curr_state;
6139
6140 timeout = jiffies + msecs_to_jiffies(msecs);
6141 while (1) {
6142 curr_state = read_physical_state(dd);
6143 if (curr_state == state)
6144 break;
6145 if (time_after(jiffies, timeout)) {
6146 dd_dev_err(dd,
6147 "timeout waiting for phy link state 0x%x, current state is 0x%x\n",
6148 state, curr_state);
6149 return -ETIMEDOUT;
6150 }
6151 usleep_range(1950, 2050); /* sleep 2ms-ish */
6152 }
6153
6154 return 0;
6155}
6156
6157/*
6158 * Helper for set_link_state(). Do not call except from that routine.
6159 * Expects ppd->hls_mutex to be held.
6160 *
6161 * @rem_reason value to be sent to the neighbor
6162 *
6163 * LinkDownReasons only set if transition succeeds.
6164 */
6165static int goto_offline(struct hfi1_pportdata *ppd, u8 rem_reason)
6166{
6167 struct hfi1_devdata *dd = ppd->dd;
6168 u32 pstate, previous_state;
6169 u32 last_local_state;
6170 u32 last_remote_state;
6171 int ret;
6172 int do_transition;
6173 int do_wait;
6174
6175 previous_state = ppd->host_link_state;
6176 ppd->host_link_state = HLS_GOING_OFFLINE;
6177 pstate = read_physical_state(dd);
6178 if (pstate == PLS_OFFLINE) {
6179 do_transition = 0; /* in right state */
6180 do_wait = 0; /* ...no need to wait */
6181 } else if ((pstate & 0xff) == PLS_OFFLINE) {
6182 do_transition = 0; /* in an offline transient state */
6183 do_wait = 1; /* ...wait for it to settle */
6184 } else {
6185 do_transition = 1; /* need to move to offline */
6186 do_wait = 1; /* ...will need to wait */
6187 }
6188
6189 if (do_transition) {
6190 ret = set_physical_link_state(dd,
6191 PLS_OFFLINE | (rem_reason << 8));
6192
6193 if (ret != HCMD_SUCCESS) {
6194 dd_dev_err(dd,
6195 "Failed to transition to Offline link state, return %d\n",
6196 ret);
6197 return -EINVAL;
6198 }
6199 if (ppd->offline_disabled_reason == OPA_LINKDOWN_REASON_NONE)
6200 ppd->offline_disabled_reason =
6201 OPA_LINKDOWN_REASON_TRANSIENT;
6202 }
6203
6204 if (do_wait) {
6205 /* it can take a while for the link to go down */
6206 ret = wait_phy_linkstate(dd, PLS_OFFLINE, 5000);
6207 if (ret < 0)
6208 return ret;
6209 }
6210
6211 /* make sure the logical state is also down */
6212 wait_logical_linkstate(ppd, IB_PORT_DOWN, 1000);
6213
6214 /*
6215 * Now in charge of LCB - must be after the physical state is
6216 * offline.quiet and before host_link_state is changed.
6217 */
6218 set_host_lcb_access(dd);
6219 write_csr(dd, DC_LCB_ERR_EN, ~0ull); /* watch LCB errors */
6220 ppd->host_link_state = HLS_LINK_COOLDOWN; /* LCB access allowed */
6221
6222 /*
6223 * The LNI has a mandatory wait time after the physical state
6224 * moves to Offline.Quiet. The wait time may be different
6225 * depending on how the link went down. The 8051 firmware
6226 * will observe the needed wait time and only move to ready
6227 * when that is completed. The largest of the quiet timeouts
6228 * is 2.5s, so wait that long and then a bit more.
6229 */
6230 ret = wait_fm_ready(dd, 3000);
6231 if (ret) {
6232 dd_dev_err(dd,
6233 "After going offline, timed out waiting for the 8051 to become ready to accept host requests\n");
6234 /* state is really offline, so make it so */
6235 ppd->host_link_state = HLS_DN_OFFLINE;
6236 return ret;
6237 }
6238
6239 /*
6240 * The state is now offline and the 8051 is ready to accept host
6241 * requests.
6242 * - change our state
6243 * - notify others if we were previously in a linkup state
6244 */
6245 ppd->host_link_state = HLS_DN_OFFLINE;
6246 if (previous_state & HLS_UP) {
6247 /* went down while link was up */
6248 handle_linkup_change(dd, 0);
6249 } else if (previous_state
6250 & (HLS_DN_POLL | HLS_VERIFY_CAP | HLS_GOING_UP)) {
6251 /* went down while attempting link up */
6252 /* byte 1 of last_*_state is the failure reason */
6253 read_last_local_state(dd, &last_local_state);
6254 read_last_remote_state(dd, &last_remote_state);
6255 dd_dev_err(dd,
6256 "LNI failure last states: local 0x%08x, remote 0x%08x\n",
6257 last_local_state, last_remote_state);
6258 }
6259
6260 /* the active link width (downgrade) is 0 on link down */
6261 ppd->link_width_active = 0;
6262 ppd->link_width_downgrade_tx_active = 0;
6263 ppd->link_width_downgrade_rx_active = 0;
6264 ppd->current_egress_rate = 0;
6265 return 0;
6266}
6267
6268/* return the link state name */
6269static const char *link_state_name(u32 state)
6270{
6271 const char *name;
6272 int n = ilog2(state);
6273 static const char * const names[] = {
6274 [__HLS_UP_INIT_BP] = "INIT",
6275 [__HLS_UP_ARMED_BP] = "ARMED",
6276 [__HLS_UP_ACTIVE_BP] = "ACTIVE",
6277 [__HLS_DN_DOWNDEF_BP] = "DOWNDEF",
6278 [__HLS_DN_POLL_BP] = "POLL",
6279 [__HLS_DN_DISABLE_BP] = "DISABLE",
6280 [__HLS_DN_OFFLINE_BP] = "OFFLINE",
6281 [__HLS_VERIFY_CAP_BP] = "VERIFY_CAP",
6282 [__HLS_GOING_UP_BP] = "GOING_UP",
6283 [__HLS_GOING_OFFLINE_BP] = "GOING_OFFLINE",
6284 [__HLS_LINK_COOLDOWN_BP] = "LINK_COOLDOWN"
6285 };
6286
6287 name = n < ARRAY_SIZE(names) ? names[n] : NULL;
6288 return name ? name : "unknown";
6289}
6290
6291/* return the link state reason name */
6292static const char *link_state_reason_name(struct hfi1_pportdata *ppd, u32 state)
6293{
6294 if (state == HLS_UP_INIT) {
6295 switch (ppd->linkinit_reason) {
6296 case OPA_LINKINIT_REASON_LINKUP:
6297 return "(LINKUP)";
6298 case OPA_LINKINIT_REASON_FLAPPING:
6299 return "(FLAPPING)";
6300 case OPA_LINKINIT_OUTSIDE_POLICY:
6301 return "(OUTSIDE_POLICY)";
6302 case OPA_LINKINIT_QUARANTINED:
6303 return "(QUARANTINED)";
6304 case OPA_LINKINIT_INSUFIC_CAPABILITY:
6305 return "(INSUFIC_CAPABILITY)";
6306 default:
6307 break;
6308 }
6309 }
6310 return "";
6311}
6312
6313/*
6314 * driver_physical_state - convert the driver's notion of a port's
6315 * state (an HLS_*) into a physical state (a {IB,OPA}_PORTPHYSSTATE_*).
6316 * Return -1 (converted to a u32) to indicate error.
6317 */
6318u32 driver_physical_state(struct hfi1_pportdata *ppd)
6319{
6320 switch (ppd->host_link_state) {
6321 case HLS_UP_INIT:
6322 case HLS_UP_ARMED:
6323 case HLS_UP_ACTIVE:
6324 return IB_PORTPHYSSTATE_LINKUP;
6325 case HLS_DN_POLL:
6326 return IB_PORTPHYSSTATE_POLLING;
6327 case HLS_DN_DISABLE:
6328 return IB_PORTPHYSSTATE_DISABLED;
6329 case HLS_DN_OFFLINE:
6330 return OPA_PORTPHYSSTATE_OFFLINE;
6331 case HLS_VERIFY_CAP:
6332 return IB_PORTPHYSSTATE_POLLING;
6333 case HLS_GOING_UP:
6334 return IB_PORTPHYSSTATE_POLLING;
6335 case HLS_GOING_OFFLINE:
6336 return OPA_PORTPHYSSTATE_OFFLINE;
6337 case HLS_LINK_COOLDOWN:
6338 return OPA_PORTPHYSSTATE_OFFLINE;
6339 case HLS_DN_DOWNDEF:
6340 default:
6341 dd_dev_err(ppd->dd, "invalid host_link_state 0x%x\n",
6342 ppd->host_link_state);
6343 return -1;
6344 }
6345}
6346
6347/*
6348 * driver_logical_state - convert the driver's notion of a port's
6349 * state (an HLS_*) into a logical state (a IB_PORT_*). Return -1
6350 * (converted to a u32) to indicate error.
6351 */
6352u32 driver_logical_state(struct hfi1_pportdata *ppd)
6353{
6354 if (ppd->host_link_state && !(ppd->host_link_state & HLS_UP))
6355 return IB_PORT_DOWN;
6356
6357 switch (ppd->host_link_state & HLS_UP) {
6358 case HLS_UP_INIT:
6359 return IB_PORT_INIT;
6360 case HLS_UP_ARMED:
6361 return IB_PORT_ARMED;
6362 case HLS_UP_ACTIVE:
6363 return IB_PORT_ACTIVE;
6364 default:
6365 dd_dev_err(ppd->dd, "invalid host_link_state 0x%x\n",
6366 ppd->host_link_state);
6367 return -1;
6368 }
6369}
6370
6371void set_link_down_reason(struct hfi1_pportdata *ppd, u8 lcl_reason,
6372 u8 neigh_reason, u8 rem_reason)
6373{
6374 if (ppd->local_link_down_reason.latest == 0 &&
6375 ppd->neigh_link_down_reason.latest == 0) {
6376 ppd->local_link_down_reason.latest = lcl_reason;
6377 ppd->neigh_link_down_reason.latest = neigh_reason;
6378 ppd->remote_link_down_reason = rem_reason;
6379 }
6380}
6381
6382/*
6383 * Change the physical and/or logical link state.
6384 *
6385 * Do not call this routine while inside an interrupt. It contains
6386 * calls to routines that can take multiple seconds to finish.
6387 *
6388 * Returns 0 on success, -errno on failure.
6389 */
6390int set_link_state(struct hfi1_pportdata *ppd, u32 state)
6391{
6392 struct hfi1_devdata *dd = ppd->dd;
6393 struct ib_event event = {.device = NULL};
6394 int ret1, ret = 0;
6395 int was_up, is_down;
6396 int orig_new_state, poll_bounce;
6397
6398 mutex_lock(&ppd->hls_lock);
6399
6400 orig_new_state = state;
6401 if (state == HLS_DN_DOWNDEF)
6402 state = dd->link_default;
6403
6404 /* interpret poll -> poll as a link bounce */
6405 poll_bounce = ppd->host_link_state == HLS_DN_POLL
6406 && state == HLS_DN_POLL;
6407
6408 dd_dev_info(dd, "%s: current %s, new %s %s%s\n", __func__,
6409 link_state_name(ppd->host_link_state),
6410 link_state_name(orig_new_state),
6411 poll_bounce ? "(bounce) " : "",
6412 link_state_reason_name(ppd, state));
6413
6414 was_up = !!(ppd->host_link_state & HLS_UP);
6415
6416 /*
6417 * If we're going to a (HLS_*) link state that implies the logical
6418 * link state is neither of (IB_PORT_ARMED, IB_PORT_ACTIVE), then
6419 * reset is_sm_config_started to 0.
6420 */
6421 if (!(state & (HLS_UP_ARMED | HLS_UP_ACTIVE)))
6422 ppd->is_sm_config_started = 0;
6423
6424 /*
6425 * Do nothing if the states match. Let a poll to poll link bounce
6426 * go through.
6427 */
6428 if (ppd->host_link_state == state && !poll_bounce)
6429 goto done;
6430
6431 switch (state) {
6432 case HLS_UP_INIT:
6433 if (ppd->host_link_state == HLS_DN_POLL && (quick_linkup
6434 || dd->icode == ICODE_FUNCTIONAL_SIMULATOR)) {
6435 /*
6436 * Quick link up jumps from polling to here.
6437 *
6438 * Whether in normal or loopback mode, the
6439 * simulator jumps from polling to link up.
6440 * Accept that here.
6441 */
6442 /* OK */;
6443 } else if (ppd->host_link_state != HLS_GOING_UP) {
6444 goto unexpected;
6445 }
6446
6447 ppd->host_link_state = HLS_UP_INIT;
6448 ret = wait_logical_linkstate(ppd, IB_PORT_INIT, 1000);
6449 if (ret) {
6450 /* logical state didn't change, stay at going_up */
6451 ppd->host_link_state = HLS_GOING_UP;
6452 dd_dev_err(dd,
6453 "%s: logical state did not change to INIT\n",
6454 __func__);
6455 } else {
6456 /* clear old transient LINKINIT_REASON code */
6457 if (ppd->linkinit_reason >= OPA_LINKINIT_REASON_CLEAR)
6458 ppd->linkinit_reason =
6459 OPA_LINKINIT_REASON_LINKUP;
6460
6461 /* enable the port */
6462 add_rcvctrl(dd, RCV_CTRL_RCV_PORT_ENABLE_SMASK);
6463
6464 handle_linkup_change(dd, 1);
6465 }
6466 break;
6467 case HLS_UP_ARMED:
6468 if (ppd->host_link_state != HLS_UP_INIT)
6469 goto unexpected;
6470
6471 ppd->host_link_state = HLS_UP_ARMED;
6472 set_logical_state(dd, LSTATE_ARMED);
6473 ret = wait_logical_linkstate(ppd, IB_PORT_ARMED, 1000);
6474 if (ret) {
6475 /* logical state didn't change, stay at init */
6476 ppd->host_link_state = HLS_UP_INIT;
6477 dd_dev_err(dd,
6478 "%s: logical state did not change to ARMED\n",
6479 __func__);
6480 }
6481 /*
6482 * The simulator does not currently implement SMA messages,
6483 * so neighbor_normal is not set. Set it here when we first
6484 * move to Armed.
6485 */
6486 if (dd->icode == ICODE_FUNCTIONAL_SIMULATOR)
6487 ppd->neighbor_normal = 1;
6488 break;
6489 case HLS_UP_ACTIVE:
6490 if (ppd->host_link_state != HLS_UP_ARMED)
6491 goto unexpected;
6492
6493 ppd->host_link_state = HLS_UP_ACTIVE;
6494 set_logical_state(dd, LSTATE_ACTIVE);
6495 ret = wait_logical_linkstate(ppd, IB_PORT_ACTIVE, 1000);
6496 if (ret) {
6497 /* logical state didn't change, stay at armed */
6498 ppd->host_link_state = HLS_UP_ARMED;
6499 dd_dev_err(dd,
6500 "%s: logical state did not change to ACTIVE\n",
6501 __func__);
6502 } else {
6503
6504 /* tell all engines to go running */
6505 sdma_all_running(dd);
6506
6507 /* Signal the IB layer that the port has went active */
6508 event.device = &dd->verbs_dev.ibdev;
6509 event.element.port_num = ppd->port;
6510 event.event = IB_EVENT_PORT_ACTIVE;
6511 }
6512 break;
6513 case HLS_DN_POLL:
6514 if ((ppd->host_link_state == HLS_DN_DISABLE ||
6515 ppd->host_link_state == HLS_DN_OFFLINE) &&
6516 dd->dc_shutdown)
6517 dc_start(dd);
6518 /* Hand LED control to the DC */
6519 write_csr(dd, DCC_CFG_LED_CNTRL, 0);
6520
6521 if (ppd->host_link_state != HLS_DN_OFFLINE) {
6522 u8 tmp = ppd->link_enabled;
6523
6524 ret = goto_offline(ppd, ppd->remote_link_down_reason);
6525 if (ret) {
6526 ppd->link_enabled = tmp;
6527 break;
6528 }
6529 ppd->remote_link_down_reason = 0;
6530
6531 if (ppd->driver_link_ready)
6532 ppd->link_enabled = 1;
6533 }
6534
6535 ret = set_local_link_attributes(ppd);
6536 if (ret)
6537 break;
6538
6539 ppd->port_error_action = 0;
6540 ppd->host_link_state = HLS_DN_POLL;
6541
6542 if (quick_linkup) {
6543 /* quick linkup does not go into polling */
6544 ret = do_quick_linkup(dd);
6545 } else {
6546 ret1 = set_physical_link_state(dd, PLS_POLLING);
6547 if (ret1 != HCMD_SUCCESS) {
6548 dd_dev_err(dd,
6549 "Failed to transition to Polling link state, return 0x%x\n",
6550 ret1);
6551 ret = -EINVAL;
6552 }
6553 }
6554 ppd->offline_disabled_reason = OPA_LINKDOWN_REASON_NONE;
6555 /*
6556 * If an error occurred above, go back to offline. The
6557 * caller may reschedule another attempt.
6558 */
6559 if (ret)
6560 goto_offline(ppd, 0);
6561 break;
6562 case HLS_DN_DISABLE:
6563 /* link is disabled */
6564 ppd->link_enabled = 0;
6565
6566 /* allow any state to transition to disabled */
6567
6568 /* must transition to offline first */
6569 if (ppd->host_link_state != HLS_DN_OFFLINE) {
6570 ret = goto_offline(ppd, ppd->remote_link_down_reason);
6571 if (ret)
6572 break;
6573 ppd->remote_link_down_reason = 0;
6574 }
6575
6576 ret1 = set_physical_link_state(dd, PLS_DISABLED);
6577 if (ret1 != HCMD_SUCCESS) {
6578 dd_dev_err(dd,
6579 "Failed to transition to Disabled link state, return 0x%x\n",
6580 ret1);
6581 ret = -EINVAL;
6582 break;
6583 }
6584 ppd->host_link_state = HLS_DN_DISABLE;
6585 dc_shutdown(dd);
6586 break;
6587 case HLS_DN_OFFLINE:
6588 if (ppd->host_link_state == HLS_DN_DISABLE)
6589 dc_start(dd);
6590
6591 /* allow any state to transition to offline */
6592 ret = goto_offline(ppd, ppd->remote_link_down_reason);
6593 if (!ret)
6594 ppd->remote_link_down_reason = 0;
6595 break;
6596 case HLS_VERIFY_CAP:
6597 if (ppd->host_link_state != HLS_DN_POLL)
6598 goto unexpected;
6599 ppd->host_link_state = HLS_VERIFY_CAP;
6600 break;
6601 case HLS_GOING_UP:
6602 if (ppd->host_link_state != HLS_VERIFY_CAP)
6603 goto unexpected;
6604
6605 ret1 = set_physical_link_state(dd, PLS_LINKUP);
6606 if (ret1 != HCMD_SUCCESS) {
6607 dd_dev_err(dd,
6608 "Failed to transition to link up state, return 0x%x\n",
6609 ret1);
6610 ret = -EINVAL;
6611 break;
6612 }
6613 ppd->host_link_state = HLS_GOING_UP;
6614 break;
6615
6616 case HLS_GOING_OFFLINE: /* transient within goto_offline() */
6617 case HLS_LINK_COOLDOWN: /* transient within goto_offline() */
6618 default:
6619 dd_dev_info(dd, "%s: state 0x%x: not supported\n",
6620 __func__, state);
6621 ret = -EINVAL;
6622 break;
6623 }
6624
6625 is_down = !!(ppd->host_link_state & (HLS_DN_POLL |
6626 HLS_DN_DISABLE | HLS_DN_OFFLINE));
6627
6628 if (was_up && is_down && ppd->local_link_down_reason.sma == 0 &&
6629 ppd->neigh_link_down_reason.sma == 0) {
6630 ppd->local_link_down_reason.sma =
6631 ppd->local_link_down_reason.latest;
6632 ppd->neigh_link_down_reason.sma =
6633 ppd->neigh_link_down_reason.latest;
6634 }
6635
6636 goto done;
6637
6638unexpected:
6639 dd_dev_err(dd, "%s: unexpected state transition from %s to %s\n",
6640 __func__, link_state_name(ppd->host_link_state),
6641 link_state_name(state));
6642 ret = -EINVAL;
6643
6644done:
6645 mutex_unlock(&ppd->hls_lock);
6646
6647 if (event.device)
6648 ib_dispatch_event(&event);
6649
6650 return ret;
6651}
6652
6653int hfi1_set_ib_cfg(struct hfi1_pportdata *ppd, int which, u32 val)
6654{
6655 u64 reg;
6656 int ret = 0;
6657
6658 switch (which) {
6659 case HFI1_IB_CFG_LIDLMC:
6660 set_lidlmc(ppd);
6661 break;
6662 case HFI1_IB_CFG_VL_HIGH_LIMIT:
6663 /*
6664 * The VL Arbitrator high limit is sent in units of 4k
6665 * bytes, while HFI stores it in units of 64 bytes.
6666 */
6667 val *= 4096/64;
6668 reg = ((u64)val & SEND_HIGH_PRIORITY_LIMIT_LIMIT_MASK)
6669 << SEND_HIGH_PRIORITY_LIMIT_LIMIT_SHIFT;
6670 write_csr(ppd->dd, SEND_HIGH_PRIORITY_LIMIT, reg);
6671 break;
6672 case HFI1_IB_CFG_LINKDEFAULT: /* IB link default (sleep/poll) */
6673 /* HFI only supports POLL as the default link down state */
6674 if (val != HLS_DN_POLL)
6675 ret = -EINVAL;
6676 break;
6677 case HFI1_IB_CFG_OP_VLS:
6678 if (ppd->vls_operational != val) {
6679 ppd->vls_operational = val;
6680 if (!ppd->port)
6681 ret = -EINVAL;
6682 else
6683 ret = sdma_map_init(
6684 ppd->dd,
6685 ppd->port - 1,
6686 val,
6687 NULL);
6688 }
6689 break;
6690 /*
6691 * For link width, link width downgrade, and speed enable, always AND
6692 * the setting with what is actually supported. This has two benefits.
6693 * First, enabled can't have unsupported values, no matter what the
6694 * SM or FM might want. Second, the ALL_SUPPORTED wildcards that mean
6695 * "fill in with your supported value" have all the bits in the
6696 * field set, so simply ANDing with supported has the desired result.
6697 */
6698 case HFI1_IB_CFG_LWID_ENB: /* set allowed Link-width */
6699 ppd->link_width_enabled = val & ppd->link_width_supported;
6700 break;
6701 case HFI1_IB_CFG_LWID_DG_ENB: /* set allowed link width downgrade */
6702 ppd->link_width_downgrade_enabled =
6703 val & ppd->link_width_downgrade_supported;
6704 break;
6705 case HFI1_IB_CFG_SPD_ENB: /* allowed Link speeds */
6706 ppd->link_speed_enabled = val & ppd->link_speed_supported;
6707 break;
6708 case HFI1_IB_CFG_OVERRUN_THRESH: /* IB overrun threshold */
6709 /*
6710 * HFI does not follow IB specs, save this value
6711 * so we can report it, if asked.
6712 */
6713 ppd->overrun_threshold = val;
6714 break;
6715 case HFI1_IB_CFG_PHYERR_THRESH: /* IB PHY error threshold */
6716 /*
6717 * HFI does not follow IB specs, save this value
6718 * so we can report it, if asked.
6719 */
6720 ppd->phy_error_threshold = val;
6721 break;
6722
6723 case HFI1_IB_CFG_MTU:
6724 set_send_length(ppd);
6725 break;
6726
6727 case HFI1_IB_CFG_PKEYS:
6728 if (HFI1_CAP_IS_KSET(PKEY_CHECK))
6729 set_partition_keys(ppd);
6730 break;
6731
6732 default:
6733 if (HFI1_CAP_IS_KSET(PRINT_UNIMPL))
6734 dd_dev_info(ppd->dd,
6735 "%s: which %s, val 0x%x: not implemented\n",
6736 __func__, ib_cfg_name(which), val);
6737 break;
6738 }
6739 return ret;
6740}
6741
6742/* begin functions related to vl arbitration table caching */
6743static void init_vl_arb_caches(struct hfi1_pportdata *ppd)
6744{
6745 int i;
6746
6747 BUILD_BUG_ON(VL_ARB_TABLE_SIZE !=
6748 VL_ARB_LOW_PRIO_TABLE_SIZE);
6749 BUILD_BUG_ON(VL_ARB_TABLE_SIZE !=
6750 VL_ARB_HIGH_PRIO_TABLE_SIZE);
6751
6752 /*
6753 * Note that we always return values directly from the
6754 * 'vl_arb_cache' (and do no CSR reads) in response to a
6755 * 'Get(VLArbTable)'. This is obviously correct after a
6756 * 'Set(VLArbTable)', since the cache will then be up to
6757 * date. But it's also correct prior to any 'Set(VLArbTable)'
6758 * since then both the cache, and the relevant h/w registers
6759 * will be zeroed.
6760 */
6761
6762 for (i = 0; i < MAX_PRIO_TABLE; i++)
6763 spin_lock_init(&ppd->vl_arb_cache[i].lock);
6764}
6765
6766/*
6767 * vl_arb_lock_cache
6768 *
6769 * All other vl_arb_* functions should be called only after locking
6770 * the cache.
6771 */
6772static inline struct vl_arb_cache *
6773vl_arb_lock_cache(struct hfi1_pportdata *ppd, int idx)
6774{
6775 if (idx != LO_PRIO_TABLE && idx != HI_PRIO_TABLE)
6776 return NULL;
6777 spin_lock(&ppd->vl_arb_cache[idx].lock);
6778 return &ppd->vl_arb_cache[idx];
6779}
6780
6781static inline void vl_arb_unlock_cache(struct hfi1_pportdata *ppd, int idx)
6782{
6783 spin_unlock(&ppd->vl_arb_cache[idx].lock);
6784}
6785
6786static void vl_arb_get_cache(struct vl_arb_cache *cache,
6787 struct ib_vl_weight_elem *vl)
6788{
6789 memcpy(vl, cache->table, VL_ARB_TABLE_SIZE * sizeof(*vl));
6790}
6791
6792static void vl_arb_set_cache(struct vl_arb_cache *cache,
6793 struct ib_vl_weight_elem *vl)
6794{
6795 memcpy(cache->table, vl, VL_ARB_TABLE_SIZE * sizeof(*vl));
6796}
6797
6798static int vl_arb_match_cache(struct vl_arb_cache *cache,
6799 struct ib_vl_weight_elem *vl)
6800{
6801 return !memcmp(cache->table, vl, VL_ARB_TABLE_SIZE * sizeof(*vl));
6802}
6803/* end functions related to vl arbitration table caching */
6804
6805static int set_vl_weights(struct hfi1_pportdata *ppd, u32 target,
6806 u32 size, struct ib_vl_weight_elem *vl)
6807{
6808 struct hfi1_devdata *dd = ppd->dd;
6809 u64 reg;
6810 unsigned int i, is_up = 0;
6811 int drain, ret = 0;
6812
6813 mutex_lock(&ppd->hls_lock);
6814
6815 if (ppd->host_link_state & HLS_UP)
6816 is_up = 1;
6817
6818 drain = !is_ax(dd) && is_up;
6819
6820 if (drain)
6821 /*
6822 * Before adjusting VL arbitration weights, empty per-VL
6823 * FIFOs, otherwise a packet whose VL weight is being
6824 * set to 0 could get stuck in a FIFO with no chance to
6825 * egress.
6826 */
6827 ret = stop_drain_data_vls(dd);
6828
6829 if (ret) {
6830 dd_dev_err(
6831 dd,
6832 "%s: cannot stop/drain VLs - refusing to change VL arbitration weights\n",
6833 __func__);
6834 goto err;
6835 }
6836
6837 for (i = 0; i < size; i++, vl++) {
6838 /*
6839 * NOTE: The low priority shift and mask are used here, but
6840 * they are the same for both the low and high registers.
6841 */
6842 reg = (((u64)vl->vl & SEND_LOW_PRIORITY_LIST_VL_MASK)
6843 << SEND_LOW_PRIORITY_LIST_VL_SHIFT)
6844 | (((u64)vl->weight
6845 & SEND_LOW_PRIORITY_LIST_WEIGHT_MASK)
6846 << SEND_LOW_PRIORITY_LIST_WEIGHT_SHIFT);
6847 write_csr(dd, target + (i * 8), reg);
6848 }
6849 pio_send_control(dd, PSC_GLOBAL_VLARB_ENABLE);
6850
6851 if (drain)
6852 open_fill_data_vls(dd); /* reopen all VLs */
6853
6854err:
6855 mutex_unlock(&ppd->hls_lock);
6856
6857 return ret;
6858}
6859
6860/*
6861 * Read one credit merge VL register.
6862 */
6863static void read_one_cm_vl(struct hfi1_devdata *dd, u32 csr,
6864 struct vl_limit *vll)
6865{
6866 u64 reg = read_csr(dd, csr);
6867
6868 vll->dedicated = cpu_to_be16(
6869 (reg >> SEND_CM_CREDIT_VL_DEDICATED_LIMIT_VL_SHIFT)
6870 & SEND_CM_CREDIT_VL_DEDICATED_LIMIT_VL_MASK);
6871 vll->shared = cpu_to_be16(
6872 (reg >> SEND_CM_CREDIT_VL_SHARED_LIMIT_VL_SHIFT)
6873 & SEND_CM_CREDIT_VL_SHARED_LIMIT_VL_MASK);
6874}
6875
6876/*
6877 * Read the current credit merge limits.
6878 */
6879static int get_buffer_control(struct hfi1_devdata *dd,
6880 struct buffer_control *bc, u16 *overall_limit)
6881{
6882 u64 reg;
6883 int i;
6884
6885 /* not all entries are filled in */
6886 memset(bc, 0, sizeof(*bc));
6887
6888 /* OPA and HFI have a 1-1 mapping */
6889 for (i = 0; i < TXE_NUM_DATA_VL; i++)
6890 read_one_cm_vl(dd, SEND_CM_CREDIT_VL + (8*i), &bc->vl[i]);
6891
6892 /* NOTE: assumes that VL* and VL15 CSRs are bit-wise identical */
6893 read_one_cm_vl(dd, SEND_CM_CREDIT_VL15, &bc->vl[15]);
6894
6895 reg = read_csr(dd, SEND_CM_GLOBAL_CREDIT);
6896 bc->overall_shared_limit = cpu_to_be16(
6897 (reg >> SEND_CM_GLOBAL_CREDIT_SHARED_LIMIT_SHIFT)
6898 & SEND_CM_GLOBAL_CREDIT_SHARED_LIMIT_MASK);
6899 if (overall_limit)
6900 *overall_limit = (reg
6901 >> SEND_CM_GLOBAL_CREDIT_TOTAL_CREDIT_LIMIT_SHIFT)
6902 & SEND_CM_GLOBAL_CREDIT_TOTAL_CREDIT_LIMIT_MASK;
6903 return sizeof(struct buffer_control);
6904}
6905
6906static int get_sc2vlnt(struct hfi1_devdata *dd, struct sc2vlnt *dp)
6907{
6908 u64 reg;
6909 int i;
6910
6911 /* each register contains 16 SC->VLnt mappings, 4 bits each */
6912 reg = read_csr(dd, DCC_CFG_SC_VL_TABLE_15_0);
6913 for (i = 0; i < sizeof(u64); i++) {
6914 u8 byte = *(((u8 *)&reg) + i);
6915
6916 dp->vlnt[2 * i] = byte & 0xf;
6917 dp->vlnt[(2 * i) + 1] = (byte & 0xf0) >> 4;
6918 }
6919
6920 reg = read_csr(dd, DCC_CFG_SC_VL_TABLE_31_16);
6921 for (i = 0; i < sizeof(u64); i++) {
6922 u8 byte = *(((u8 *)&reg) + i);
6923
6924 dp->vlnt[16 + (2 * i)] = byte & 0xf;
6925 dp->vlnt[16 + (2 * i) + 1] = (byte & 0xf0) >> 4;
6926 }
6927 return sizeof(struct sc2vlnt);
6928}
6929
6930static void get_vlarb_preempt(struct hfi1_devdata *dd, u32 nelems,
6931 struct ib_vl_weight_elem *vl)
6932{
6933 unsigned int i;
6934
6935 for (i = 0; i < nelems; i++, vl++) {
6936 vl->vl = 0xf;
6937 vl->weight = 0;
6938 }
6939}
6940
6941static void set_sc2vlnt(struct hfi1_devdata *dd, struct sc2vlnt *dp)
6942{
6943 write_csr(dd, DCC_CFG_SC_VL_TABLE_15_0,
6944 DC_SC_VL_VAL(15_0,
6945 0, dp->vlnt[0] & 0xf,
6946 1, dp->vlnt[1] & 0xf,
6947 2, dp->vlnt[2] & 0xf,
6948 3, dp->vlnt[3] & 0xf,
6949 4, dp->vlnt[4] & 0xf,
6950 5, dp->vlnt[5] & 0xf,
6951 6, dp->vlnt[6] & 0xf,
6952 7, dp->vlnt[7] & 0xf,
6953 8, dp->vlnt[8] & 0xf,
6954 9, dp->vlnt[9] & 0xf,
6955 10, dp->vlnt[10] & 0xf,
6956 11, dp->vlnt[11] & 0xf,
6957 12, dp->vlnt[12] & 0xf,
6958 13, dp->vlnt[13] & 0xf,
6959 14, dp->vlnt[14] & 0xf,
6960 15, dp->vlnt[15] & 0xf));
6961 write_csr(dd, DCC_CFG_SC_VL_TABLE_31_16,
6962 DC_SC_VL_VAL(31_16,
6963 16, dp->vlnt[16] & 0xf,
6964 17, dp->vlnt[17] & 0xf,
6965 18, dp->vlnt[18] & 0xf,
6966 19, dp->vlnt[19] & 0xf,
6967 20, dp->vlnt[20] & 0xf,
6968 21, dp->vlnt[21] & 0xf,
6969 22, dp->vlnt[22] & 0xf,
6970 23, dp->vlnt[23] & 0xf,
6971 24, dp->vlnt[24] & 0xf,
6972 25, dp->vlnt[25] & 0xf,
6973 26, dp->vlnt[26] & 0xf,
6974 27, dp->vlnt[27] & 0xf,
6975 28, dp->vlnt[28] & 0xf,
6976 29, dp->vlnt[29] & 0xf,
6977 30, dp->vlnt[30] & 0xf,
6978 31, dp->vlnt[31] & 0xf));
6979}
6980
6981static void nonzero_msg(struct hfi1_devdata *dd, int idx, const char *what,
6982 u16 limit)
6983{
6984 if (limit != 0)
6985 dd_dev_info(dd, "Invalid %s limit %d on VL %d, ignoring\n",
6986 what, (int)limit, idx);
6987}
6988
6989/* change only the shared limit portion of SendCmGLobalCredit */
6990static void set_global_shared(struct hfi1_devdata *dd, u16 limit)
6991{
6992 u64 reg;
6993
6994 reg = read_csr(dd, SEND_CM_GLOBAL_CREDIT);
6995 reg &= ~SEND_CM_GLOBAL_CREDIT_SHARED_LIMIT_SMASK;
6996 reg |= (u64)limit << SEND_CM_GLOBAL_CREDIT_SHARED_LIMIT_SHIFT;
6997 write_csr(dd, SEND_CM_GLOBAL_CREDIT, reg);
6998}
6999
7000/* change only the total credit limit portion of SendCmGLobalCredit */
7001static void set_global_limit(struct hfi1_devdata *dd, u16 limit)
7002{
7003 u64 reg;
7004
7005 reg = read_csr(dd, SEND_CM_GLOBAL_CREDIT);
7006 reg &= ~SEND_CM_GLOBAL_CREDIT_TOTAL_CREDIT_LIMIT_SMASK;
7007 reg |= (u64)limit << SEND_CM_GLOBAL_CREDIT_TOTAL_CREDIT_LIMIT_SHIFT;
7008 write_csr(dd, SEND_CM_GLOBAL_CREDIT, reg);
7009}
7010
7011/* set the given per-VL shared limit */
7012static void set_vl_shared(struct hfi1_devdata *dd, int vl, u16 limit)
7013{
7014 u64 reg;
7015 u32 addr;
7016
7017 if (vl < TXE_NUM_DATA_VL)
7018 addr = SEND_CM_CREDIT_VL + (8 * vl);
7019 else
7020 addr = SEND_CM_CREDIT_VL15;
7021
7022 reg = read_csr(dd, addr);
7023 reg &= ~SEND_CM_CREDIT_VL_SHARED_LIMIT_VL_SMASK;
7024 reg |= (u64)limit << SEND_CM_CREDIT_VL_SHARED_LIMIT_VL_SHIFT;
7025 write_csr(dd, addr, reg);
7026}
7027
7028/* set the given per-VL dedicated limit */
7029static void set_vl_dedicated(struct hfi1_devdata *dd, int vl, u16 limit)
7030{
7031 u64 reg;
7032 u32 addr;
7033
7034 if (vl < TXE_NUM_DATA_VL)
7035 addr = SEND_CM_CREDIT_VL + (8 * vl);
7036 else
7037 addr = SEND_CM_CREDIT_VL15;
7038
7039 reg = read_csr(dd, addr);
7040 reg &= ~SEND_CM_CREDIT_VL_DEDICATED_LIMIT_VL_SMASK;
7041 reg |= (u64)limit << SEND_CM_CREDIT_VL_DEDICATED_LIMIT_VL_SHIFT;
7042 write_csr(dd, addr, reg);
7043}
7044
7045/* spin until the given per-VL status mask bits clear */
7046static void wait_for_vl_status_clear(struct hfi1_devdata *dd, u64 mask,
7047 const char *which)
7048{
7049 unsigned long timeout;
7050 u64 reg;
7051
7052 timeout = jiffies + msecs_to_jiffies(VL_STATUS_CLEAR_TIMEOUT);
7053 while (1) {
7054 reg = read_csr(dd, SEND_CM_CREDIT_USED_STATUS) & mask;
7055
7056 if (reg == 0)
7057 return; /* success */
7058 if (time_after(jiffies, timeout))
7059 break; /* timed out */
7060 udelay(1);
7061 }
7062
7063 dd_dev_err(dd,
7064 "%s credit change status not clearing after %dms, mask 0x%llx, not clear 0x%llx\n",
7065 which, VL_STATUS_CLEAR_TIMEOUT, mask, reg);
7066 /*
7067 * If this occurs, it is likely there was a credit loss on the link.
7068 * The only recovery from that is a link bounce.
7069 */
7070 dd_dev_err(dd,
7071 "Continuing anyway. A credit loss may occur. Suggest a link bounce\n");
7072}
7073
7074/*
7075 * The number of credits on the VLs may be changed while everything
7076 * is "live", but the following algorithm must be followed due to
7077 * how the hardware is actually implemented. In particular,
7078 * Return_Credit_Status[] is the only correct status check.
7079 *
7080 * if (reducing Global_Shared_Credit_Limit or any shared limit changing)
7081 * set Global_Shared_Credit_Limit = 0
7082 * use_all_vl = 1
7083 * mask0 = all VLs that are changing either dedicated or shared limits
7084 * set Shared_Limit[mask0] = 0
7085 * spin until Return_Credit_Status[use_all_vl ? all VL : mask0] == 0
7086 * if (changing any dedicated limit)
7087 * mask1 = all VLs that are lowering dedicated limits
7088 * lower Dedicated_Limit[mask1]
7089 * spin until Return_Credit_Status[mask1] == 0
7090 * raise Dedicated_Limits
7091 * raise Shared_Limits
7092 * raise Global_Shared_Credit_Limit
7093 *
7094 * lower = if the new limit is lower, set the limit to the new value
7095 * raise = if the new limit is higher than the current value (may be changed
7096 * earlier in the algorithm), set the new limit to the new value
7097 */
7098static int set_buffer_control(struct hfi1_devdata *dd,
7099 struct buffer_control *new_bc)
7100{
7101 u64 changing_mask, ld_mask, stat_mask;
7102 int change_count;
7103 int i, use_all_mask;
7104 int this_shared_changing;
7105 /*
7106 * A0: add the variable any_shared_limit_changing below and in the
7107 * algorithm above. If removing A0 support, it can be removed.
7108 */
7109 int any_shared_limit_changing;
7110 struct buffer_control cur_bc;
7111 u8 changing[OPA_MAX_VLS];
7112 u8 lowering_dedicated[OPA_MAX_VLS];
7113 u16 cur_total;
7114 u32 new_total = 0;
7115 const u64 all_mask =
7116 SEND_CM_CREDIT_USED_STATUS_VL0_RETURN_CREDIT_STATUS_SMASK
7117 | SEND_CM_CREDIT_USED_STATUS_VL1_RETURN_CREDIT_STATUS_SMASK
7118 | SEND_CM_CREDIT_USED_STATUS_VL2_RETURN_CREDIT_STATUS_SMASK
7119 | SEND_CM_CREDIT_USED_STATUS_VL3_RETURN_CREDIT_STATUS_SMASK
7120 | SEND_CM_CREDIT_USED_STATUS_VL4_RETURN_CREDIT_STATUS_SMASK
7121 | SEND_CM_CREDIT_USED_STATUS_VL5_RETURN_CREDIT_STATUS_SMASK
7122 | SEND_CM_CREDIT_USED_STATUS_VL6_RETURN_CREDIT_STATUS_SMASK
7123 | SEND_CM_CREDIT_USED_STATUS_VL7_RETURN_CREDIT_STATUS_SMASK
7124 | SEND_CM_CREDIT_USED_STATUS_VL15_RETURN_CREDIT_STATUS_SMASK;
7125
7126#define valid_vl(idx) ((idx) < TXE_NUM_DATA_VL || (idx) == 15)
7127#define NUM_USABLE_VLS 16 /* look at VL15 and less */
7128
7129
7130 /* find the new total credits, do sanity check on unused VLs */
7131 for (i = 0; i < OPA_MAX_VLS; i++) {
7132 if (valid_vl(i)) {
7133 new_total += be16_to_cpu(new_bc->vl[i].dedicated);
7134 continue;
7135 }
7136 nonzero_msg(dd, i, "dedicated",
7137 be16_to_cpu(new_bc->vl[i].dedicated));
7138 nonzero_msg(dd, i, "shared",
7139 be16_to_cpu(new_bc->vl[i].shared));
7140 new_bc->vl[i].dedicated = 0;
7141 new_bc->vl[i].shared = 0;
7142 }
7143 new_total += be16_to_cpu(new_bc->overall_shared_limit);
7144 if (new_total > (u32)dd->link_credits)
7145 return -EINVAL;
7146 /* fetch the current values */
7147 get_buffer_control(dd, &cur_bc, &cur_total);
7148
7149 /*
7150 * Create the masks we will use.
7151 */
7152 memset(changing, 0, sizeof(changing));
7153 memset(lowering_dedicated, 0, sizeof(lowering_dedicated));
7154 /* NOTE: Assumes that the individual VL bits are adjacent and in
7155 increasing order */
7156 stat_mask =
7157 SEND_CM_CREDIT_USED_STATUS_VL0_RETURN_CREDIT_STATUS_SMASK;
7158 changing_mask = 0;
7159 ld_mask = 0;
7160 change_count = 0;
7161 any_shared_limit_changing = 0;
7162 for (i = 0; i < NUM_USABLE_VLS; i++, stat_mask <<= 1) {
7163 if (!valid_vl(i))
7164 continue;
7165 this_shared_changing = new_bc->vl[i].shared
7166 != cur_bc.vl[i].shared;
7167 if (this_shared_changing)
7168 any_shared_limit_changing = 1;
7169 if (new_bc->vl[i].dedicated != cur_bc.vl[i].dedicated
7170 || this_shared_changing) {
7171 changing[i] = 1;
7172 changing_mask |= stat_mask;
7173 change_count++;
7174 }
7175 if (be16_to_cpu(new_bc->vl[i].dedicated) <
7176 be16_to_cpu(cur_bc.vl[i].dedicated)) {
7177 lowering_dedicated[i] = 1;
7178 ld_mask |= stat_mask;
7179 }
7180 }
7181
7182 /* bracket the credit change with a total adjustment */
7183 if (new_total > cur_total)
7184 set_global_limit(dd, new_total);
7185
7186 /*
7187 * Start the credit change algorithm.
7188 */
7189 use_all_mask = 0;
7190 if ((be16_to_cpu(new_bc->overall_shared_limit) <
7191 be16_to_cpu(cur_bc.overall_shared_limit))
7192 || (is_a0(dd) && any_shared_limit_changing)) {
7193 set_global_shared(dd, 0);
7194 cur_bc.overall_shared_limit = 0;
7195 use_all_mask = 1;
7196 }
7197
7198 for (i = 0; i < NUM_USABLE_VLS; i++) {
7199 if (!valid_vl(i))
7200 continue;
7201
7202 if (changing[i]) {
7203 set_vl_shared(dd, i, 0);
7204 cur_bc.vl[i].shared = 0;
7205 }
7206 }
7207
7208 wait_for_vl_status_clear(dd, use_all_mask ? all_mask : changing_mask,
7209 "shared");
7210
7211 if (change_count > 0) {
7212 for (i = 0; i < NUM_USABLE_VLS; i++) {
7213 if (!valid_vl(i))
7214 continue;
7215
7216 if (lowering_dedicated[i]) {
7217 set_vl_dedicated(dd, i,
7218 be16_to_cpu(new_bc->vl[i].dedicated));
7219 cur_bc.vl[i].dedicated =
7220 new_bc->vl[i].dedicated;
7221 }
7222 }
7223
7224 wait_for_vl_status_clear(dd, ld_mask, "dedicated");
7225
7226 /* now raise all dedicated that are going up */
7227 for (i = 0; i < NUM_USABLE_VLS; i++) {
7228 if (!valid_vl(i))
7229 continue;
7230
7231 if (be16_to_cpu(new_bc->vl[i].dedicated) >
7232 be16_to_cpu(cur_bc.vl[i].dedicated))
7233 set_vl_dedicated(dd, i,
7234 be16_to_cpu(new_bc->vl[i].dedicated));
7235 }
7236 }
7237
7238 /* next raise all shared that are going up */
7239 for (i = 0; i < NUM_USABLE_VLS; i++) {
7240 if (!valid_vl(i))
7241 continue;
7242
7243 if (be16_to_cpu(new_bc->vl[i].shared) >
7244 be16_to_cpu(cur_bc.vl[i].shared))
7245 set_vl_shared(dd, i, be16_to_cpu(new_bc->vl[i].shared));
7246 }
7247
7248 /* finally raise the global shared */
7249 if (be16_to_cpu(new_bc->overall_shared_limit) >
7250 be16_to_cpu(cur_bc.overall_shared_limit))
7251 set_global_shared(dd,
7252 be16_to_cpu(new_bc->overall_shared_limit));
7253
7254 /* bracket the credit change with a total adjustment */
7255 if (new_total < cur_total)
7256 set_global_limit(dd, new_total);
7257 return 0;
7258}
7259
7260/*
7261 * Read the given fabric manager table. Return the size of the
7262 * table (in bytes) on success, and a negative error code on
7263 * failure.
7264 */
7265int fm_get_table(struct hfi1_pportdata *ppd, int which, void *t)
7266
7267{
7268 int size;
7269 struct vl_arb_cache *vlc;
7270
7271 switch (which) {
7272 case FM_TBL_VL_HIGH_ARB:
7273 size = 256;
7274 /*
7275 * OPA specifies 128 elements (of 2 bytes each), though
7276 * HFI supports only 16 elements in h/w.
7277 */
7278 vlc = vl_arb_lock_cache(ppd, HI_PRIO_TABLE);
7279 vl_arb_get_cache(vlc, t);
7280 vl_arb_unlock_cache(ppd, HI_PRIO_TABLE);
7281 break;
7282 case FM_TBL_VL_LOW_ARB:
7283 size = 256;
7284 /*
7285 * OPA specifies 128 elements (of 2 bytes each), though
7286 * HFI supports only 16 elements in h/w.
7287 */
7288 vlc = vl_arb_lock_cache(ppd, LO_PRIO_TABLE);
7289 vl_arb_get_cache(vlc, t);
7290 vl_arb_unlock_cache(ppd, LO_PRIO_TABLE);
7291 break;
7292 case FM_TBL_BUFFER_CONTROL:
7293 size = get_buffer_control(ppd->dd, t, NULL);
7294 break;
7295 case FM_TBL_SC2VLNT:
7296 size = get_sc2vlnt(ppd->dd, t);
7297 break;
7298 case FM_TBL_VL_PREEMPT_ELEMS:
7299 size = 256;
7300 /* OPA specifies 128 elements, of 2 bytes each */
7301 get_vlarb_preempt(ppd->dd, OPA_MAX_VLS, t);
7302 break;
7303 case FM_TBL_VL_PREEMPT_MATRIX:
7304 size = 256;
7305 /*
7306 * OPA specifies that this is the same size as the VL
7307 * arbitration tables (i.e., 256 bytes).
7308 */
7309 break;
7310 default:
7311 return -EINVAL;
7312 }
7313 return size;
7314}
7315
7316/*
7317 * Write the given fabric manager table.
7318 */
7319int fm_set_table(struct hfi1_pportdata *ppd, int which, void *t)
7320{
7321 int ret = 0;
7322 struct vl_arb_cache *vlc;
7323
7324 switch (which) {
7325 case FM_TBL_VL_HIGH_ARB:
7326 vlc = vl_arb_lock_cache(ppd, HI_PRIO_TABLE);
7327 if (vl_arb_match_cache(vlc, t)) {
7328 vl_arb_unlock_cache(ppd, HI_PRIO_TABLE);
7329 break;
7330 }
7331 vl_arb_set_cache(vlc, t);
7332 vl_arb_unlock_cache(ppd, HI_PRIO_TABLE);
7333 ret = set_vl_weights(ppd, SEND_HIGH_PRIORITY_LIST,
7334 VL_ARB_HIGH_PRIO_TABLE_SIZE, t);
7335 break;
7336 case FM_TBL_VL_LOW_ARB:
7337 vlc = vl_arb_lock_cache(ppd, LO_PRIO_TABLE);
7338 if (vl_arb_match_cache(vlc, t)) {
7339 vl_arb_unlock_cache(ppd, LO_PRIO_TABLE);
7340 break;
7341 }
7342 vl_arb_set_cache(vlc, t);
7343 vl_arb_unlock_cache(ppd, LO_PRIO_TABLE);
7344 ret = set_vl_weights(ppd, SEND_LOW_PRIORITY_LIST,
7345 VL_ARB_LOW_PRIO_TABLE_SIZE, t);
7346 break;
7347 case FM_TBL_BUFFER_CONTROL:
7348 ret = set_buffer_control(ppd->dd, t);
7349 break;
7350 case FM_TBL_SC2VLNT:
7351 set_sc2vlnt(ppd->dd, t);
7352 break;
7353 default:
7354 ret = -EINVAL;
7355 }
7356 return ret;
7357}
7358
7359/*
7360 * Disable all data VLs.
7361 *
7362 * Return 0 if disabled, non-zero if the VLs cannot be disabled.
7363 */
7364static int disable_data_vls(struct hfi1_devdata *dd)
7365{
7366 if (is_a0(dd))
7367 return 1;
7368
7369 pio_send_control(dd, PSC_DATA_VL_DISABLE);
7370
7371 return 0;
7372}
7373
7374/*
7375 * open_fill_data_vls() - the counterpart to stop_drain_data_vls().
7376 * Just re-enables all data VLs (the "fill" part happens
7377 * automatically - the name was chosen for symmetry with
7378 * stop_drain_data_vls()).
7379 *
7380 * Return 0 if successful, non-zero if the VLs cannot be enabled.
7381 */
7382int open_fill_data_vls(struct hfi1_devdata *dd)
7383{
7384 if (is_a0(dd))
7385 return 1;
7386
7387 pio_send_control(dd, PSC_DATA_VL_ENABLE);
7388
7389 return 0;
7390}
7391
7392/*
7393 * drain_data_vls() - assumes that disable_data_vls() has been called,
7394 * wait for occupancy (of per-VL FIFOs) for all contexts, and SDMA
7395 * engines to drop to 0.
7396 */
7397static void drain_data_vls(struct hfi1_devdata *dd)
7398{
7399 sc_wait(dd);
7400 sdma_wait(dd);
7401 pause_for_credit_return(dd);
7402}
7403
7404/*
7405 * stop_drain_data_vls() - disable, then drain all per-VL fifos.
7406 *
7407 * Use open_fill_data_vls() to resume using data VLs. This pair is
7408 * meant to be used like this:
7409 *
7410 * stop_drain_data_vls(dd);
7411 * // do things with per-VL resources
7412 * open_fill_data_vls(dd);
7413 */
7414int stop_drain_data_vls(struct hfi1_devdata *dd)
7415{
7416 int ret;
7417
7418 ret = disable_data_vls(dd);
7419 if (ret == 0)
7420 drain_data_vls(dd);
7421
7422 return ret;
7423}
7424
7425/*
7426 * Convert a nanosecond time to a cclock count. No matter how slow
7427 * the cclock, a non-zero ns will always have a non-zero result.
7428 */
7429u32 ns_to_cclock(struct hfi1_devdata *dd, u32 ns)
7430{
7431 u32 cclocks;
7432
7433 if (dd->icode == ICODE_FPGA_EMULATION)
7434 cclocks = (ns * 1000) / FPGA_CCLOCK_PS;
7435 else /* simulation pretends to be ASIC */
7436 cclocks = (ns * 1000) / ASIC_CCLOCK_PS;
7437 if (ns && !cclocks) /* if ns nonzero, must be at least 1 */
7438 cclocks = 1;
7439 return cclocks;
7440}
7441
7442/*
7443 * Convert a cclock count to nanoseconds. Not matter how slow
7444 * the cclock, a non-zero cclocks will always have a non-zero result.
7445 */
7446u32 cclock_to_ns(struct hfi1_devdata *dd, u32 cclocks)
7447{
7448 u32 ns;
7449
7450 if (dd->icode == ICODE_FPGA_EMULATION)
7451 ns = (cclocks * FPGA_CCLOCK_PS) / 1000;
7452 else /* simulation pretends to be ASIC */
7453 ns = (cclocks * ASIC_CCLOCK_PS) / 1000;
7454 if (cclocks && !ns)
7455 ns = 1;
7456 return ns;
7457}
7458
7459/*
7460 * Dynamically adjust the receive interrupt timeout for a context based on
7461 * incoming packet rate.
7462 *
7463 * NOTE: Dynamic adjustment does not allow rcv_intr_count to be zero.
7464 */
7465static void adjust_rcv_timeout(struct hfi1_ctxtdata *rcd, u32 npkts)
7466{
7467 struct hfi1_devdata *dd = rcd->dd;
7468 u32 timeout = rcd->rcvavail_timeout;
7469
7470 /*
7471 * This algorithm doubles or halves the timeout depending on whether
7472 * the number of packets received in this interrupt were less than or
7473 * greater equal the interrupt count.
7474 *
7475 * The calculations below do not allow a steady state to be achieved.
7476 * Only at the endpoints it is possible to have an unchanging
7477 * timeout.
7478 */
7479 if (npkts < rcv_intr_count) {
7480 /*
7481 * Not enough packets arrived before the timeout, adjust
7482 * timeout downward.
7483 */
7484 if (timeout < 2) /* already at minimum? */
7485 return;
7486 timeout >>= 1;
7487 } else {
7488 /*
7489 * More than enough packets arrived before the timeout, adjust
7490 * timeout upward.
7491 */
7492 if (timeout >= dd->rcv_intr_timeout_csr) /* already at max? */
7493 return;
7494 timeout = min(timeout << 1, dd->rcv_intr_timeout_csr);
7495 }
7496
7497 rcd->rcvavail_timeout = timeout;
7498 /* timeout cannot be larger than rcv_intr_timeout_csr which has already
7499 been verified to be in range */
7500 write_kctxt_csr(dd, rcd->ctxt, RCV_AVAIL_TIME_OUT,
7501 (u64)timeout << RCV_AVAIL_TIME_OUT_TIME_OUT_RELOAD_SHIFT);
7502}
7503
7504void update_usrhead(struct hfi1_ctxtdata *rcd, u32 hd, u32 updegr, u32 egrhd,
7505 u32 intr_adjust, u32 npkts)
7506{
7507 struct hfi1_devdata *dd = rcd->dd;
7508 u64 reg;
7509 u32 ctxt = rcd->ctxt;
7510
7511 /*
7512 * Need to write timeout register before updating RcvHdrHead to ensure
7513 * that a new value is used when the HW decides to restart counting.
7514 */
7515 if (intr_adjust)
7516 adjust_rcv_timeout(rcd, npkts);
7517 if (updegr) {
7518 reg = (egrhd & RCV_EGR_INDEX_HEAD_HEAD_MASK)
7519 << RCV_EGR_INDEX_HEAD_HEAD_SHIFT;
7520 write_uctxt_csr(dd, ctxt, RCV_EGR_INDEX_HEAD, reg);
7521 }
7522 mmiowb();
7523 reg = ((u64)rcv_intr_count << RCV_HDR_HEAD_COUNTER_SHIFT) |
7524 (((u64)hd & RCV_HDR_HEAD_HEAD_MASK)
7525 << RCV_HDR_HEAD_HEAD_SHIFT);
7526 write_uctxt_csr(dd, ctxt, RCV_HDR_HEAD, reg);
7527 mmiowb();
7528}
7529
7530u32 hdrqempty(struct hfi1_ctxtdata *rcd)
7531{
7532 u32 head, tail;
7533
7534 head = (read_uctxt_csr(rcd->dd, rcd->ctxt, RCV_HDR_HEAD)
7535 & RCV_HDR_HEAD_HEAD_SMASK) >> RCV_HDR_HEAD_HEAD_SHIFT;
7536
7537 if (rcd->rcvhdrtail_kvaddr)
7538 tail = get_rcvhdrtail(rcd);
7539 else
7540 tail = read_uctxt_csr(rcd->dd, rcd->ctxt, RCV_HDR_TAIL);
7541
7542 return head == tail;
7543}
7544
7545/*
7546 * Context Control and Receive Array encoding for buffer size:
7547 * 0x0 invalid
7548 * 0x1 4 KB
7549 * 0x2 8 KB
7550 * 0x3 16 KB
7551 * 0x4 32 KB
7552 * 0x5 64 KB
7553 * 0x6 128 KB
7554 * 0x7 256 KB
7555 * 0x8 512 KB (Receive Array only)
7556 * 0x9 1 MB (Receive Array only)
7557 * 0xa 2 MB (Receive Array only)
7558 *
7559 * 0xB-0xF - reserved (Receive Array only)
7560 *
7561 *
7562 * This routine assumes that the value has already been sanity checked.
7563 */
7564static u32 encoded_size(u32 size)
7565{
7566 switch (size) {
7567 case 4*1024: return 0x1;
7568 case 8*1024: return 0x2;
7569 case 16*1024: return 0x3;
7570 case 32*1024: return 0x4;
7571 case 64*1024: return 0x5;
7572 case 128*1024: return 0x6;
7573 case 256*1024: return 0x7;
7574 case 512*1024: return 0x8;
7575 case 1*1024*1024: return 0x9;
7576 case 2*1024*1024: return 0xa;
7577 }
7578 return 0x1; /* if invalid, go with the minimum size */
7579}
7580
7581void hfi1_rcvctrl(struct hfi1_devdata *dd, unsigned int op, int ctxt)
7582{
7583 struct hfi1_ctxtdata *rcd;
7584 u64 rcvctrl, reg;
7585 int did_enable = 0;
7586
7587 rcd = dd->rcd[ctxt];
7588 if (!rcd)
7589 return;
7590
7591 hfi1_cdbg(RCVCTRL, "ctxt %d op 0x%x", ctxt, op);
7592
7593 rcvctrl = read_kctxt_csr(dd, ctxt, RCV_CTXT_CTRL);
7594 /* if the context already enabled, don't do the extra steps */
7595 if ((op & HFI1_RCVCTRL_CTXT_ENB)
7596 && !(rcvctrl & RCV_CTXT_CTRL_ENABLE_SMASK)) {
7597 /* reset the tail and hdr addresses, and sequence count */
7598 write_kctxt_csr(dd, ctxt, RCV_HDR_ADDR,
7599 rcd->rcvhdrq_phys);
7600 if (HFI1_CAP_KGET_MASK(rcd->flags, DMA_RTAIL))
7601 write_kctxt_csr(dd, ctxt, RCV_HDR_TAIL_ADDR,
7602 rcd->rcvhdrqtailaddr_phys);
7603 rcd->seq_cnt = 1;
7604
7605 /* reset the cached receive header queue head value */
7606 rcd->head = 0;
7607
7608 /*
7609 * Zero the receive header queue so we don't get false
7610 * positives when checking the sequence number. The
7611 * sequence numbers could land exactly on the same spot.
7612 * E.g. a rcd restart before the receive header wrapped.
7613 */
7614 memset(rcd->rcvhdrq, 0, rcd->rcvhdrq_size);
7615
7616 /* starting timeout */
7617 rcd->rcvavail_timeout = dd->rcv_intr_timeout_csr;
7618
7619 /* enable the context */
7620 rcvctrl |= RCV_CTXT_CTRL_ENABLE_SMASK;
7621
7622 /* clean the egr buffer size first */
7623 rcvctrl &= ~RCV_CTXT_CTRL_EGR_BUF_SIZE_SMASK;
7624 rcvctrl |= ((u64)encoded_size(rcd->egrbufs.rcvtid_size)
7625 & RCV_CTXT_CTRL_EGR_BUF_SIZE_MASK)
7626 << RCV_CTXT_CTRL_EGR_BUF_SIZE_SHIFT;
7627
7628 /* zero RcvHdrHead - set RcvHdrHead.Counter after enable */
7629 write_uctxt_csr(dd, ctxt, RCV_HDR_HEAD, 0);
7630 did_enable = 1;
7631
7632 /* zero RcvEgrIndexHead */
7633 write_uctxt_csr(dd, ctxt, RCV_EGR_INDEX_HEAD, 0);
7634
7635 /* set eager count and base index */
7636 reg = (((u64)(rcd->egrbufs.alloced >> RCV_SHIFT)
7637 & RCV_EGR_CTRL_EGR_CNT_MASK)
7638 << RCV_EGR_CTRL_EGR_CNT_SHIFT) |
7639 (((rcd->eager_base >> RCV_SHIFT)
7640 & RCV_EGR_CTRL_EGR_BASE_INDEX_MASK)
7641 << RCV_EGR_CTRL_EGR_BASE_INDEX_SHIFT);
7642 write_kctxt_csr(dd, ctxt, RCV_EGR_CTRL, reg);
7643
7644 /*
7645 * Set TID (expected) count and base index.
7646 * rcd->expected_count is set to individual RcvArray entries,
7647 * not pairs, and the CSR takes a pair-count in groups of
7648 * four, so divide by 8.
7649 */
7650 reg = (((rcd->expected_count >> RCV_SHIFT)
7651 & RCV_TID_CTRL_TID_PAIR_CNT_MASK)
7652 << RCV_TID_CTRL_TID_PAIR_CNT_SHIFT) |
7653 (((rcd->expected_base >> RCV_SHIFT)
7654 & RCV_TID_CTRL_TID_BASE_INDEX_MASK)
7655 << RCV_TID_CTRL_TID_BASE_INDEX_SHIFT);
7656 write_kctxt_csr(dd, ctxt, RCV_TID_CTRL, reg);
7657 if (ctxt == VL15CTXT)
7658 write_csr(dd, RCV_VL15, VL15CTXT);
7659 }
7660 if (op & HFI1_RCVCTRL_CTXT_DIS) {
7661 write_csr(dd, RCV_VL15, 0);
7662 rcvctrl &= ~RCV_CTXT_CTRL_ENABLE_SMASK;
7663 }
7664 if (op & HFI1_RCVCTRL_INTRAVAIL_ENB)
7665 rcvctrl |= RCV_CTXT_CTRL_INTR_AVAIL_SMASK;
7666 if (op & HFI1_RCVCTRL_INTRAVAIL_DIS)
7667 rcvctrl &= ~RCV_CTXT_CTRL_INTR_AVAIL_SMASK;
7668 if (op & HFI1_RCVCTRL_TAILUPD_ENB && rcd->rcvhdrqtailaddr_phys)
7669 rcvctrl |= RCV_CTXT_CTRL_TAIL_UPD_SMASK;
7670 if (op & HFI1_RCVCTRL_TAILUPD_DIS)
7671 rcvctrl &= ~RCV_CTXT_CTRL_TAIL_UPD_SMASK;
7672 if (op & HFI1_RCVCTRL_TIDFLOW_ENB)
7673 rcvctrl |= RCV_CTXT_CTRL_TID_FLOW_ENABLE_SMASK;
7674 if (op & HFI1_RCVCTRL_TIDFLOW_DIS)
7675 rcvctrl &= ~RCV_CTXT_CTRL_TID_FLOW_ENABLE_SMASK;
7676 if (op & HFI1_RCVCTRL_ONE_PKT_EGR_ENB) {
7677 /* In one-packet-per-eager mode, the size comes from
7678 the RcvArray entry. */
7679 rcvctrl &= ~RCV_CTXT_CTRL_EGR_BUF_SIZE_SMASK;
7680 rcvctrl |= RCV_CTXT_CTRL_ONE_PACKET_PER_EGR_BUFFER_SMASK;
7681 }
7682 if (op & HFI1_RCVCTRL_ONE_PKT_EGR_DIS)
7683 rcvctrl &= ~RCV_CTXT_CTRL_ONE_PACKET_PER_EGR_BUFFER_SMASK;
7684 if (op & HFI1_RCVCTRL_NO_RHQ_DROP_ENB)
7685 rcvctrl |= RCV_CTXT_CTRL_DONT_DROP_RHQ_FULL_SMASK;
7686 if (op & HFI1_RCVCTRL_NO_RHQ_DROP_DIS)
7687 rcvctrl &= ~RCV_CTXT_CTRL_DONT_DROP_RHQ_FULL_SMASK;
7688 if (op & HFI1_RCVCTRL_NO_EGR_DROP_ENB)
7689 rcvctrl |= RCV_CTXT_CTRL_DONT_DROP_EGR_FULL_SMASK;
7690 if (op & HFI1_RCVCTRL_NO_EGR_DROP_DIS)
7691 rcvctrl &= ~RCV_CTXT_CTRL_DONT_DROP_EGR_FULL_SMASK;
7692 rcd->rcvctrl = rcvctrl;
7693 hfi1_cdbg(RCVCTRL, "ctxt %d rcvctrl 0x%llx\n", ctxt, rcvctrl);
7694 write_kctxt_csr(dd, ctxt, RCV_CTXT_CTRL, rcd->rcvctrl);
7695
7696 /* work around sticky RcvCtxtStatus.BlockedRHQFull */
7697 if (did_enable
7698 && (rcvctrl & RCV_CTXT_CTRL_DONT_DROP_RHQ_FULL_SMASK)) {
7699 reg = read_kctxt_csr(dd, ctxt, RCV_CTXT_STATUS);
7700 if (reg != 0) {
7701 dd_dev_info(dd, "ctxt %d status %lld (blocked)\n",
7702 ctxt, reg);
7703 read_uctxt_csr(dd, ctxt, RCV_HDR_HEAD);
7704 write_uctxt_csr(dd, ctxt, RCV_HDR_HEAD, 0x10);
7705 write_uctxt_csr(dd, ctxt, RCV_HDR_HEAD, 0x00);
7706 read_uctxt_csr(dd, ctxt, RCV_HDR_HEAD);
7707 reg = read_kctxt_csr(dd, ctxt, RCV_CTXT_STATUS);
7708 dd_dev_info(dd, "ctxt %d status %lld (%s blocked)\n",
7709 ctxt, reg, reg == 0 ? "not" : "still");
7710 }
7711 }
7712
7713 if (did_enable) {
7714 /*
7715 * The interrupt timeout and count must be set after
7716 * the context is enabled to take effect.
7717 */
7718 /* set interrupt timeout */
7719 write_kctxt_csr(dd, ctxt, RCV_AVAIL_TIME_OUT,
7720 (u64)rcd->rcvavail_timeout <<
7721 RCV_AVAIL_TIME_OUT_TIME_OUT_RELOAD_SHIFT);
7722
7723 /* set RcvHdrHead.Counter, zero RcvHdrHead.Head (again) */
7724 reg = (u64)rcv_intr_count << RCV_HDR_HEAD_COUNTER_SHIFT;
7725 write_uctxt_csr(dd, ctxt, RCV_HDR_HEAD, reg);
7726 }
7727
7728 if (op & (HFI1_RCVCTRL_TAILUPD_DIS | HFI1_RCVCTRL_CTXT_DIS))
7729 /*
7730 * If the context has been disabled and the Tail Update has
7731 * been cleared, clear the RCV_HDR_TAIL_ADDR CSR so
7732 * it doesn't contain an address that is invalid.
7733 */
7734 write_kctxt_csr(dd, ctxt, RCV_HDR_TAIL_ADDR, 0);
7735}
7736
7737u32 hfi1_read_cntrs(struct hfi1_devdata *dd, loff_t pos, char **namep,
7738 u64 **cntrp)
7739{
7740 int ret;
7741 u64 val = 0;
7742
7743 if (namep) {
7744 ret = dd->cntrnameslen;
7745 if (pos != 0) {
7746 dd_dev_err(dd, "read_cntrs does not support indexing");
7747 return 0;
7748 }
7749 *namep = dd->cntrnames;
7750 } else {
7751 const struct cntr_entry *entry;
7752 int i, j;
7753
7754 ret = (dd->ndevcntrs) * sizeof(u64);
7755 if (pos != 0) {
7756 dd_dev_err(dd, "read_cntrs does not support indexing");
7757 return 0;
7758 }
7759
7760 /* Get the start of the block of counters */
7761 *cntrp = dd->cntrs;
7762
7763 /*
7764 * Now go and fill in each counter in the block.
7765 */
7766 for (i = 0; i < DEV_CNTR_LAST; i++) {
7767 entry = &dev_cntrs[i];
7768 hfi1_cdbg(CNTR, "reading %s", entry->name);
7769 if (entry->flags & CNTR_DISABLED) {
7770 /* Nothing */
7771 hfi1_cdbg(CNTR, "\tDisabled\n");
7772 } else {
7773 if (entry->flags & CNTR_VL) {
7774 hfi1_cdbg(CNTR, "\tPer VL\n");
7775 for (j = 0; j < C_VL_COUNT; j++) {
7776 val = entry->rw_cntr(entry,
7777 dd, j,
7778 CNTR_MODE_R,
7779 0);
7780 hfi1_cdbg(
7781 CNTR,
7782 "\t\tRead 0x%llx for %d\n",
7783 val, j);
7784 dd->cntrs[entry->offset + j] =
7785 val;
7786 }
7787 } else {
7788 val = entry->rw_cntr(entry, dd,
7789 CNTR_INVALID_VL,
7790 CNTR_MODE_R, 0);
7791 dd->cntrs[entry->offset] = val;
7792 hfi1_cdbg(CNTR, "\tRead 0x%llx", val);
7793 }
7794 }
7795 }
7796 }
7797 return ret;
7798}
7799
7800/*
7801 * Used by sysfs to create files for hfi stats to read
7802 */
7803u32 hfi1_read_portcntrs(struct hfi1_devdata *dd, loff_t pos, u32 port,
7804 char **namep, u64 **cntrp)
7805{
7806 int ret;
7807 u64 val = 0;
7808
7809 if (namep) {
7810 ret = dd->portcntrnameslen;
7811 if (pos != 0) {
7812 dd_dev_err(dd, "index not supported");
7813 return 0;
7814 }
7815 *namep = dd->portcntrnames;
7816 } else {
7817 const struct cntr_entry *entry;
7818 struct hfi1_pportdata *ppd;
7819 int i, j;
7820
7821 ret = (dd->nportcntrs) * sizeof(u64);
7822 if (pos != 0) {
7823 dd_dev_err(dd, "indexing not supported");
7824 return 0;
7825 }
7826 ppd = (struct hfi1_pportdata *)(dd + 1 + port);
7827 *cntrp = ppd->cntrs;
7828
7829 for (i = 0; i < PORT_CNTR_LAST; i++) {
7830 entry = &port_cntrs[i];
7831 hfi1_cdbg(CNTR, "reading %s", entry->name);
7832 if (entry->flags & CNTR_DISABLED) {
7833 /* Nothing */
7834 hfi1_cdbg(CNTR, "\tDisabled\n");
7835 continue;
7836 }
7837
7838 if (entry->flags & CNTR_VL) {
7839 hfi1_cdbg(CNTR, "\tPer VL");
7840 for (j = 0; j < C_VL_COUNT; j++) {
7841 val = entry->rw_cntr(entry, ppd, j,
7842 CNTR_MODE_R,
7843 0);
7844 hfi1_cdbg(
7845 CNTR,
7846 "\t\tRead 0x%llx for %d",
7847 val, j);
7848 ppd->cntrs[entry->offset + j] = val;
7849 }
7850 } else {
7851 val = entry->rw_cntr(entry, ppd,
7852 CNTR_INVALID_VL,
7853 CNTR_MODE_R,
7854 0);
7855 ppd->cntrs[entry->offset] = val;
7856 hfi1_cdbg(CNTR, "\tRead 0x%llx", val);
7857 }
7858 }
7859 }
7860 return ret;
7861}
7862
7863static void free_cntrs(struct hfi1_devdata *dd)
7864{
7865 struct hfi1_pportdata *ppd;
7866 int i;
7867
7868 if (dd->synth_stats_timer.data)
7869 del_timer_sync(&dd->synth_stats_timer);
7870 dd->synth_stats_timer.data = 0;
7871 ppd = (struct hfi1_pportdata *)(dd + 1);
7872 for (i = 0; i < dd->num_pports; i++, ppd++) {
7873 kfree(ppd->cntrs);
7874 kfree(ppd->scntrs);
7875 free_percpu(ppd->ibport_data.rc_acks);
7876 free_percpu(ppd->ibport_data.rc_qacks);
7877 free_percpu(ppd->ibport_data.rc_delayed_comp);
7878 ppd->cntrs = NULL;
7879 ppd->scntrs = NULL;
7880 ppd->ibport_data.rc_acks = NULL;
7881 ppd->ibport_data.rc_qacks = NULL;
7882 ppd->ibport_data.rc_delayed_comp = NULL;
7883 }
7884 kfree(dd->portcntrnames);
7885 dd->portcntrnames = NULL;
7886 kfree(dd->cntrs);
7887 dd->cntrs = NULL;
7888 kfree(dd->scntrs);
7889 dd->scntrs = NULL;
7890 kfree(dd->cntrnames);
7891 dd->cntrnames = NULL;
7892}
7893
7894#define CNTR_MAX 0xFFFFFFFFFFFFFFFFULL
7895#define CNTR_32BIT_MAX 0x00000000FFFFFFFF
7896
7897static u64 read_dev_port_cntr(struct hfi1_devdata *dd, struct cntr_entry *entry,
7898 u64 *psval, void *context, int vl)
7899{
7900 u64 val;
7901 u64 sval = *psval;
7902
7903 if (entry->flags & CNTR_DISABLED) {
7904 dd_dev_err(dd, "Counter %s not enabled", entry->name);
7905 return 0;
7906 }
7907
7908 hfi1_cdbg(CNTR, "cntr: %s vl %d psval 0x%llx", entry->name, vl, *psval);
7909
7910 val = entry->rw_cntr(entry, context, vl, CNTR_MODE_R, 0);
7911
7912 /* If its a synthetic counter there is more work we need to do */
7913 if (entry->flags & CNTR_SYNTH) {
7914 if (sval == CNTR_MAX) {
7915 /* No need to read already saturated */
7916 return CNTR_MAX;
7917 }
7918
7919 if (entry->flags & CNTR_32BIT) {
7920 /* 32bit counters can wrap multiple times */
7921 u64 upper = sval >> 32;
7922 u64 lower = (sval << 32) >> 32;
7923
7924 if (lower > val) { /* hw wrapped */
7925 if (upper == CNTR_32BIT_MAX)
7926 val = CNTR_MAX;
7927 else
7928 upper++;
7929 }
7930
7931 if (val != CNTR_MAX)
7932 val = (upper << 32) | val;
7933
7934 } else {
7935 /* If we rolled we are saturated */
7936 if ((val < sval) || (val > CNTR_MAX))
7937 val = CNTR_MAX;
7938 }
7939 }
7940
7941 *psval = val;
7942
7943 hfi1_cdbg(CNTR, "\tNew val=0x%llx", val);
7944
7945 return val;
7946}
7947
7948static u64 write_dev_port_cntr(struct hfi1_devdata *dd,
7949 struct cntr_entry *entry,
7950 u64 *psval, void *context, int vl, u64 data)
7951{
7952 u64 val;
7953
7954 if (entry->flags & CNTR_DISABLED) {
7955 dd_dev_err(dd, "Counter %s not enabled", entry->name);
7956 return 0;
7957 }
7958
7959 hfi1_cdbg(CNTR, "cntr: %s vl %d psval 0x%llx", entry->name, vl, *psval);
7960
7961 if (entry->flags & CNTR_SYNTH) {
7962 *psval = data;
7963 if (entry->flags & CNTR_32BIT) {
7964 val = entry->rw_cntr(entry, context, vl, CNTR_MODE_W,
7965 (data << 32) >> 32);
7966 val = data; /* return the full 64bit value */
7967 } else {
7968 val = entry->rw_cntr(entry, context, vl, CNTR_MODE_W,
7969 data);
7970 }
7971 } else {
7972 val = entry->rw_cntr(entry, context, vl, CNTR_MODE_W, data);
7973 }
7974
7975 *psval = val;
7976
7977 hfi1_cdbg(CNTR, "\tNew val=0x%llx", val);
7978
7979 return val;
7980}
7981
7982u64 read_dev_cntr(struct hfi1_devdata *dd, int index, int vl)
7983{
7984 struct cntr_entry *entry;
7985 u64 *sval;
7986
7987 entry = &dev_cntrs[index];
7988 sval = dd->scntrs + entry->offset;
7989
7990 if (vl != CNTR_INVALID_VL)
7991 sval += vl;
7992
7993 return read_dev_port_cntr(dd, entry, sval, dd, vl);
7994}
7995
7996u64 write_dev_cntr(struct hfi1_devdata *dd, int index, int vl, u64 data)
7997{
7998 struct cntr_entry *entry;
7999 u64 *sval;
8000
8001 entry = &dev_cntrs[index];
8002 sval = dd->scntrs + entry->offset;
8003
8004 if (vl != CNTR_INVALID_VL)
8005 sval += vl;
8006
8007 return write_dev_port_cntr(dd, entry, sval, dd, vl, data);
8008}
8009
8010u64 read_port_cntr(struct hfi1_pportdata *ppd, int index, int vl)
8011{
8012 struct cntr_entry *entry;
8013 u64 *sval;
8014
8015 entry = &port_cntrs[index];
8016 sval = ppd->scntrs + entry->offset;
8017
8018 if (vl != CNTR_INVALID_VL)
8019 sval += vl;
8020
8021 if ((index >= C_RCV_HDR_OVF_FIRST + ppd->dd->num_rcv_contexts) &&
8022 (index <= C_RCV_HDR_OVF_LAST)) {
8023 /* We do not want to bother for disabled contexts */
8024 return 0;
8025 }
8026
8027 return read_dev_port_cntr(ppd->dd, entry, sval, ppd, vl);
8028}
8029
8030u64 write_port_cntr(struct hfi1_pportdata *ppd, int index, int vl, u64 data)
8031{
8032 struct cntr_entry *entry;
8033 u64 *sval;
8034
8035 entry = &port_cntrs[index];
8036 sval = ppd->scntrs + entry->offset;
8037
8038 if (vl != CNTR_INVALID_VL)
8039 sval += vl;
8040
8041 if ((index >= C_RCV_HDR_OVF_FIRST + ppd->dd->num_rcv_contexts) &&
8042 (index <= C_RCV_HDR_OVF_LAST)) {
8043 /* We do not want to bother for disabled contexts */
8044 return 0;
8045 }
8046
8047 return write_dev_port_cntr(ppd->dd, entry, sval, ppd, vl, data);
8048}
8049
8050static void update_synth_timer(unsigned long opaque)
8051{
8052 u64 cur_tx;
8053 u64 cur_rx;
8054 u64 total_flits;
8055 u8 update = 0;
8056 int i, j, vl;
8057 struct hfi1_pportdata *ppd;
8058 struct cntr_entry *entry;
8059
8060 struct hfi1_devdata *dd = (struct hfi1_devdata *)opaque;
8061
8062 /*
8063 * Rather than keep beating on the CSRs pick a minimal set that we can
8064 * check to watch for potential roll over. We can do this by looking at
8065 * the number of flits sent/recv. If the total flits exceeds 32bits then
8066 * we have to iterate all the counters and update.
8067 */
8068 entry = &dev_cntrs[C_DC_RCV_FLITS];
8069 cur_rx = entry->rw_cntr(entry, dd, CNTR_INVALID_VL, CNTR_MODE_R, 0);
8070
8071 entry = &dev_cntrs[C_DC_XMIT_FLITS];
8072 cur_tx = entry->rw_cntr(entry, dd, CNTR_INVALID_VL, CNTR_MODE_R, 0);
8073
8074 hfi1_cdbg(
8075 CNTR,
8076 "[%d] curr tx=0x%llx rx=0x%llx :: last tx=0x%llx rx=0x%llx\n",
8077 dd->unit, cur_tx, cur_rx, dd->last_tx, dd->last_rx);
8078
8079 if ((cur_tx < dd->last_tx) || (cur_rx < dd->last_rx)) {
8080 /*
8081 * May not be strictly necessary to update but it won't hurt and
8082 * simplifies the logic here.
8083 */
8084 update = 1;
8085 hfi1_cdbg(CNTR, "[%d] Tripwire counter rolled, updating",
8086 dd->unit);
8087 } else {
8088 total_flits = (cur_tx - dd->last_tx) + (cur_rx - dd->last_rx);
8089 hfi1_cdbg(CNTR,
8090 "[%d] total flits 0x%llx limit 0x%llx\n", dd->unit,
8091 total_flits, (u64)CNTR_32BIT_MAX);
8092 if (total_flits >= CNTR_32BIT_MAX) {
8093 hfi1_cdbg(CNTR, "[%d] 32bit limit hit, updating",
8094 dd->unit);
8095 update = 1;
8096 }
8097 }
8098
8099 if (update) {
8100 hfi1_cdbg(CNTR, "[%d] Updating dd and ppd counters", dd->unit);
8101 for (i = 0; i < DEV_CNTR_LAST; i++) {
8102 entry = &dev_cntrs[i];
8103 if (entry->flags & CNTR_VL) {
8104 for (vl = 0; vl < C_VL_COUNT; vl++)
8105 read_dev_cntr(dd, i, vl);
8106 } else {
8107 read_dev_cntr(dd, i, CNTR_INVALID_VL);
8108 }
8109 }
8110 ppd = (struct hfi1_pportdata *)(dd + 1);
8111 for (i = 0; i < dd->num_pports; i++, ppd++) {
8112 for (j = 0; j < PORT_CNTR_LAST; j++) {
8113 entry = &port_cntrs[j];
8114 if (entry->flags & CNTR_VL) {
8115 for (vl = 0; vl < C_VL_COUNT; vl++)
8116 read_port_cntr(ppd, j, vl);
8117 } else {
8118 read_port_cntr(ppd, j, CNTR_INVALID_VL);
8119 }
8120 }
8121 }
8122
8123 /*
8124 * We want the value in the register. The goal is to keep track
8125 * of the number of "ticks" not the counter value. In other
8126 * words if the register rolls we want to notice it and go ahead
8127 * and force an update.
8128 */
8129 entry = &dev_cntrs[C_DC_XMIT_FLITS];
8130 dd->last_tx = entry->rw_cntr(entry, dd, CNTR_INVALID_VL,
8131 CNTR_MODE_R, 0);
8132
8133 entry = &dev_cntrs[C_DC_RCV_FLITS];
8134 dd->last_rx = entry->rw_cntr(entry, dd, CNTR_INVALID_VL,
8135 CNTR_MODE_R, 0);
8136
8137 hfi1_cdbg(CNTR, "[%d] setting last tx/rx to 0x%llx 0x%llx",
8138 dd->unit, dd->last_tx, dd->last_rx);
8139
8140 } else {
8141 hfi1_cdbg(CNTR, "[%d] No update necessary", dd->unit);
8142 }
8143
8144mod_timer(&dd->synth_stats_timer, jiffies + HZ * SYNTH_CNT_TIME);
8145}
8146
8147#define C_MAX_NAME 13 /* 12 chars + one for /0 */
8148static int init_cntrs(struct hfi1_devdata *dd)
8149{
8150 int i, rcv_ctxts, index, j;
8151 size_t sz;
8152 char *p;
8153 char name[C_MAX_NAME];
8154 struct hfi1_pportdata *ppd;
8155
8156 /* set up the stats timer; the add_timer is done at the end */
Muhammad Falak R Wani24523a92015-10-25 16:13:23 +05308157 setup_timer(&dd->synth_stats_timer, update_synth_timer,
8158 (unsigned long)dd);
Mike Marciniszyn77241052015-07-30 15:17:43 -04008159
8160 /***********************/
8161 /* per device counters */
8162 /***********************/
8163
8164 /* size names and determine how many we have*/
8165 dd->ndevcntrs = 0;
8166 sz = 0;
8167 index = 0;
8168
8169 for (i = 0; i < DEV_CNTR_LAST; i++) {
8170 hfi1_dbg_early("Init cntr %s\n", dev_cntrs[i].name);
8171 if (dev_cntrs[i].flags & CNTR_DISABLED) {
8172 hfi1_dbg_early("\tSkipping %s\n", dev_cntrs[i].name);
8173 continue;
8174 }
8175
8176 if (dev_cntrs[i].flags & CNTR_VL) {
8177 hfi1_dbg_early("\tProcessing VL cntr\n");
8178 dev_cntrs[i].offset = index;
8179 for (j = 0; j < C_VL_COUNT; j++) {
8180 memset(name, '\0', C_MAX_NAME);
8181 snprintf(name, C_MAX_NAME, "%s%d",
8182 dev_cntrs[i].name,
8183 vl_from_idx(j));
8184 sz += strlen(name);
8185 sz++;
8186 hfi1_dbg_early("\t\t%s\n", name);
8187 dd->ndevcntrs++;
8188 index++;
8189 }
8190 } else {
8191 /* +1 for newline */
8192 sz += strlen(dev_cntrs[i].name) + 1;
8193 dd->ndevcntrs++;
8194 dev_cntrs[i].offset = index;
8195 index++;
8196 hfi1_dbg_early("\tAdding %s\n", dev_cntrs[i].name);
8197 }
8198 }
8199
8200 /* allocate space for the counter values */
8201 dd->cntrs = kcalloc(index, sizeof(u64), GFP_KERNEL);
8202 if (!dd->cntrs)
8203 goto bail;
8204
8205 dd->scntrs = kcalloc(index, sizeof(u64), GFP_KERNEL);
8206 if (!dd->scntrs)
8207 goto bail;
8208
8209
8210 /* allocate space for the counter names */
8211 dd->cntrnameslen = sz;
8212 dd->cntrnames = kmalloc(sz, GFP_KERNEL);
8213 if (!dd->cntrnames)
8214 goto bail;
8215
8216 /* fill in the names */
8217 for (p = dd->cntrnames, i = 0, index = 0; i < DEV_CNTR_LAST; i++) {
8218 if (dev_cntrs[i].flags & CNTR_DISABLED) {
8219 /* Nothing */
8220 } else {
8221 if (dev_cntrs[i].flags & CNTR_VL) {
8222 for (j = 0; j < C_VL_COUNT; j++) {
8223 memset(name, '\0', C_MAX_NAME);
8224 snprintf(name, C_MAX_NAME, "%s%d",
8225 dev_cntrs[i].name,
8226 vl_from_idx(j));
8227 memcpy(p, name, strlen(name));
8228 p += strlen(name);
8229 *p++ = '\n';
8230 }
8231 } else {
8232 memcpy(p, dev_cntrs[i].name,
8233 strlen(dev_cntrs[i].name));
8234 p += strlen(dev_cntrs[i].name);
8235 *p++ = '\n';
8236 }
8237 index++;
8238 }
8239 }
8240
8241 /*********************/
8242 /* per port counters */
8243 /*********************/
8244
8245 /*
8246 * Go through the counters for the overflows and disable the ones we
8247 * don't need. This varies based on platform so we need to do it
8248 * dynamically here.
8249 */
8250 rcv_ctxts = dd->num_rcv_contexts;
8251 for (i = C_RCV_HDR_OVF_FIRST + rcv_ctxts;
8252 i <= C_RCV_HDR_OVF_LAST; i++) {
8253 port_cntrs[i].flags |= CNTR_DISABLED;
8254 }
8255
8256 /* size port counter names and determine how many we have*/
8257 sz = 0;
8258 dd->nportcntrs = 0;
8259 for (i = 0; i < PORT_CNTR_LAST; i++) {
8260 hfi1_dbg_early("Init pcntr %s\n", port_cntrs[i].name);
8261 if (port_cntrs[i].flags & CNTR_DISABLED) {
8262 hfi1_dbg_early("\tSkipping %s\n", port_cntrs[i].name);
8263 continue;
8264 }
8265
8266 if (port_cntrs[i].flags & CNTR_VL) {
8267 hfi1_dbg_early("\tProcessing VL cntr\n");
8268 port_cntrs[i].offset = dd->nportcntrs;
8269 for (j = 0; j < C_VL_COUNT; j++) {
8270 memset(name, '\0', C_MAX_NAME);
8271 snprintf(name, C_MAX_NAME, "%s%d",
8272 port_cntrs[i].name,
8273 vl_from_idx(j));
8274 sz += strlen(name);
8275 sz++;
8276 hfi1_dbg_early("\t\t%s\n", name);
8277 dd->nportcntrs++;
8278 }
8279 } else {
8280 /* +1 for newline */
8281 sz += strlen(port_cntrs[i].name) + 1;
8282 port_cntrs[i].offset = dd->nportcntrs;
8283 dd->nportcntrs++;
8284 hfi1_dbg_early("\tAdding %s\n", port_cntrs[i].name);
8285 }
8286 }
8287
8288 /* allocate space for the counter names */
8289 dd->portcntrnameslen = sz;
8290 dd->portcntrnames = kmalloc(sz, GFP_KERNEL);
8291 if (!dd->portcntrnames)
8292 goto bail;
8293
8294 /* fill in port cntr names */
8295 for (p = dd->portcntrnames, i = 0; i < PORT_CNTR_LAST; i++) {
8296 if (port_cntrs[i].flags & CNTR_DISABLED)
8297 continue;
8298
8299 if (port_cntrs[i].flags & CNTR_VL) {
8300 for (j = 0; j < C_VL_COUNT; j++) {
8301 memset(name, '\0', C_MAX_NAME);
8302 snprintf(name, C_MAX_NAME, "%s%d",
8303 port_cntrs[i].name,
8304 vl_from_idx(j));
8305 memcpy(p, name, strlen(name));
8306 p += strlen(name);
8307 *p++ = '\n';
8308 }
8309 } else {
8310 memcpy(p, port_cntrs[i].name,
8311 strlen(port_cntrs[i].name));
8312 p += strlen(port_cntrs[i].name);
8313 *p++ = '\n';
8314 }
8315 }
8316
8317 /* allocate per port storage for counter values */
8318 ppd = (struct hfi1_pportdata *)(dd + 1);
8319 for (i = 0; i < dd->num_pports; i++, ppd++) {
8320 ppd->cntrs = kcalloc(dd->nportcntrs, sizeof(u64), GFP_KERNEL);
8321 if (!ppd->cntrs)
8322 goto bail;
8323
8324 ppd->scntrs = kcalloc(dd->nportcntrs, sizeof(u64), GFP_KERNEL);
8325 if (!ppd->scntrs)
8326 goto bail;
8327 }
8328
8329 /* CPU counters need to be allocated and zeroed */
8330 if (init_cpu_counters(dd))
8331 goto bail;
8332
8333 mod_timer(&dd->synth_stats_timer, jiffies + HZ * SYNTH_CNT_TIME);
8334 return 0;
8335bail:
8336 free_cntrs(dd);
8337 return -ENOMEM;
8338}
8339
8340
8341static u32 chip_to_opa_lstate(struct hfi1_devdata *dd, u32 chip_lstate)
8342{
8343 switch (chip_lstate) {
8344 default:
8345 dd_dev_err(dd,
8346 "Unknown logical state 0x%x, reporting IB_PORT_DOWN\n",
8347 chip_lstate);
8348 /* fall through */
8349 case LSTATE_DOWN:
8350 return IB_PORT_DOWN;
8351 case LSTATE_INIT:
8352 return IB_PORT_INIT;
8353 case LSTATE_ARMED:
8354 return IB_PORT_ARMED;
8355 case LSTATE_ACTIVE:
8356 return IB_PORT_ACTIVE;
8357 }
8358}
8359
8360u32 chip_to_opa_pstate(struct hfi1_devdata *dd, u32 chip_pstate)
8361{
8362 /* look at the HFI meta-states only */
8363 switch (chip_pstate & 0xf0) {
8364 default:
8365 dd_dev_err(dd, "Unexpected chip physical state of 0x%x\n",
8366 chip_pstate);
8367 /* fall through */
8368 case PLS_DISABLED:
8369 return IB_PORTPHYSSTATE_DISABLED;
8370 case PLS_OFFLINE:
8371 return OPA_PORTPHYSSTATE_OFFLINE;
8372 case PLS_POLLING:
8373 return IB_PORTPHYSSTATE_POLLING;
8374 case PLS_CONFIGPHY:
8375 return IB_PORTPHYSSTATE_TRAINING;
8376 case PLS_LINKUP:
8377 return IB_PORTPHYSSTATE_LINKUP;
8378 case PLS_PHYTEST:
8379 return IB_PORTPHYSSTATE_PHY_TEST;
8380 }
8381}
8382
8383/* return the OPA port logical state name */
8384const char *opa_lstate_name(u32 lstate)
8385{
8386 static const char * const port_logical_names[] = {
8387 "PORT_NOP",
8388 "PORT_DOWN",
8389 "PORT_INIT",
8390 "PORT_ARMED",
8391 "PORT_ACTIVE",
8392 "PORT_ACTIVE_DEFER",
8393 };
8394 if (lstate < ARRAY_SIZE(port_logical_names))
8395 return port_logical_names[lstate];
8396 return "unknown";
8397}
8398
8399/* return the OPA port physical state name */
8400const char *opa_pstate_name(u32 pstate)
8401{
8402 static const char * const port_physical_names[] = {
8403 "PHYS_NOP",
8404 "reserved1",
8405 "PHYS_POLL",
8406 "PHYS_DISABLED",
8407 "PHYS_TRAINING",
8408 "PHYS_LINKUP",
8409 "PHYS_LINK_ERR_RECOVER",
8410 "PHYS_PHY_TEST",
8411 "reserved8",
8412 "PHYS_OFFLINE",
8413 "PHYS_GANGED",
8414 "PHYS_TEST",
8415 };
8416 if (pstate < ARRAY_SIZE(port_physical_names))
8417 return port_physical_names[pstate];
8418 return "unknown";
8419}
8420
8421/*
8422 * Read the hardware link state and set the driver's cached value of it.
8423 * Return the (new) current value.
8424 */
8425u32 get_logical_state(struct hfi1_pportdata *ppd)
8426{
8427 u32 new_state;
8428
8429 new_state = chip_to_opa_lstate(ppd->dd, read_logical_state(ppd->dd));
8430 if (new_state != ppd->lstate) {
8431 dd_dev_info(ppd->dd, "logical state changed to %s (0x%x)\n",
8432 opa_lstate_name(new_state), new_state);
8433 ppd->lstate = new_state;
8434 }
8435 /*
8436 * Set port status flags in the page mapped into userspace
8437 * memory. Do it here to ensure a reliable state - this is
8438 * the only function called by all state handling code.
8439 * Always set the flags due to the fact that the cache value
8440 * might have been changed explicitly outside of this
8441 * function.
8442 */
8443 if (ppd->statusp) {
8444 switch (ppd->lstate) {
8445 case IB_PORT_DOWN:
8446 case IB_PORT_INIT:
8447 *ppd->statusp &= ~(HFI1_STATUS_IB_CONF |
8448 HFI1_STATUS_IB_READY);
8449 break;
8450 case IB_PORT_ARMED:
8451 *ppd->statusp |= HFI1_STATUS_IB_CONF;
8452 break;
8453 case IB_PORT_ACTIVE:
8454 *ppd->statusp |= HFI1_STATUS_IB_READY;
8455 break;
8456 }
8457 }
8458 return ppd->lstate;
8459}
8460
8461/**
8462 * wait_logical_linkstate - wait for an IB link state change to occur
8463 * @ppd: port device
8464 * @state: the state to wait for
8465 * @msecs: the number of milliseconds to wait
8466 *
8467 * Wait up to msecs milliseconds for IB link state change to occur.
8468 * For now, take the easy polling route.
8469 * Returns 0 if state reached, otherwise -ETIMEDOUT.
8470 */
8471static int wait_logical_linkstate(struct hfi1_pportdata *ppd, u32 state,
8472 int msecs)
8473{
8474 unsigned long timeout;
8475
8476 timeout = jiffies + msecs_to_jiffies(msecs);
8477 while (1) {
8478 if (get_logical_state(ppd) == state)
8479 return 0;
8480 if (time_after(jiffies, timeout))
8481 break;
8482 msleep(20);
8483 }
8484 dd_dev_err(ppd->dd, "timeout waiting for link state 0x%x\n", state);
8485
8486 return -ETIMEDOUT;
8487}
8488
8489u8 hfi1_ibphys_portstate(struct hfi1_pportdata *ppd)
8490{
8491 static u32 remembered_state = 0xff;
8492 u32 pstate;
8493 u32 ib_pstate;
8494
8495 pstate = read_physical_state(ppd->dd);
8496 ib_pstate = chip_to_opa_pstate(ppd->dd, pstate);
8497 if (remembered_state != ib_pstate) {
8498 dd_dev_info(ppd->dd,
8499 "%s: physical state changed to %s (0x%x), phy 0x%x\n",
8500 __func__, opa_pstate_name(ib_pstate), ib_pstate,
8501 pstate);
8502 remembered_state = ib_pstate;
8503 }
8504 return ib_pstate;
8505}
8506
8507/*
8508 * Read/modify/write ASIC_QSFP register bits as selected by mask
8509 * data: 0 or 1 in the positions depending on what needs to be written
8510 * dir: 0 for read, 1 for write
8511 * mask: select by setting
8512 * I2CCLK (bit 0)
8513 * I2CDATA (bit 1)
8514 */
8515u64 hfi1_gpio_mod(struct hfi1_devdata *dd, u32 target, u32 data, u32 dir,
8516 u32 mask)
8517{
8518 u64 qsfp_oe, target_oe;
8519
8520 target_oe = target ? ASIC_QSFP2_OE : ASIC_QSFP1_OE;
8521 if (mask) {
8522 /* We are writing register bits, so lock access */
8523 dir &= mask;
8524 data &= mask;
8525
8526 qsfp_oe = read_csr(dd, target_oe);
8527 qsfp_oe = (qsfp_oe & ~(u64)mask) | (u64)dir;
8528 write_csr(dd, target_oe, qsfp_oe);
8529 }
8530 /* We are exclusively reading bits here, but it is unlikely
8531 * we'll get valid data when we set the direction of the pin
8532 * in the same call, so read should call this function again
8533 * to get valid data
8534 */
8535 return read_csr(dd, target ? ASIC_QSFP2_IN : ASIC_QSFP1_IN);
8536}
8537
8538#define CLEAR_STATIC_RATE_CONTROL_SMASK(r) \
8539(r &= ~SEND_CTXT_CHECK_ENABLE_DISALLOW_PBC_STATIC_RATE_CONTROL_SMASK)
8540
8541#define SET_STATIC_RATE_CONTROL_SMASK(r) \
8542(r |= SEND_CTXT_CHECK_ENABLE_DISALLOW_PBC_STATIC_RATE_CONTROL_SMASK)
8543
8544int hfi1_init_ctxt(struct send_context *sc)
8545{
8546 if (sc != NULL) {
8547 struct hfi1_devdata *dd = sc->dd;
8548 u64 reg;
8549 u8 set = (sc->type == SC_USER ?
8550 HFI1_CAP_IS_USET(STATIC_RATE_CTRL) :
8551 HFI1_CAP_IS_KSET(STATIC_RATE_CTRL));
8552 reg = read_kctxt_csr(dd, sc->hw_context,
8553 SEND_CTXT_CHECK_ENABLE);
8554 if (set)
8555 CLEAR_STATIC_RATE_CONTROL_SMASK(reg);
8556 else
8557 SET_STATIC_RATE_CONTROL_SMASK(reg);
8558 write_kctxt_csr(dd, sc->hw_context,
8559 SEND_CTXT_CHECK_ENABLE, reg);
8560 }
8561 return 0;
8562}
8563
8564int hfi1_tempsense_rd(struct hfi1_devdata *dd, struct hfi1_temp *temp)
8565{
8566 int ret = 0;
8567 u64 reg;
8568
8569 if (dd->icode != ICODE_RTL_SILICON) {
8570 if (HFI1_CAP_IS_KSET(PRINT_UNIMPL))
8571 dd_dev_info(dd, "%s: tempsense not supported by HW\n",
8572 __func__);
8573 return -EINVAL;
8574 }
8575 reg = read_csr(dd, ASIC_STS_THERM);
8576 temp->curr = ((reg >> ASIC_STS_THERM_CURR_TEMP_SHIFT) &
8577 ASIC_STS_THERM_CURR_TEMP_MASK);
8578 temp->lo_lim = ((reg >> ASIC_STS_THERM_LO_TEMP_SHIFT) &
8579 ASIC_STS_THERM_LO_TEMP_MASK);
8580 temp->hi_lim = ((reg >> ASIC_STS_THERM_HI_TEMP_SHIFT) &
8581 ASIC_STS_THERM_HI_TEMP_MASK);
8582 temp->crit_lim = ((reg >> ASIC_STS_THERM_CRIT_TEMP_SHIFT) &
8583 ASIC_STS_THERM_CRIT_TEMP_MASK);
8584 /* triggers is a 3-bit value - 1 bit per trigger. */
8585 temp->triggers = (u8)((reg >> ASIC_STS_THERM_LOW_SHIFT) & 0x7);
8586
8587 return ret;
8588}
8589
8590/* ========================================================================= */
8591
8592/*
8593 * Enable/disable chip from delivering interrupts.
8594 */
8595void set_intr_state(struct hfi1_devdata *dd, u32 enable)
8596{
8597 int i;
8598
8599 /*
8600 * In HFI, the mask needs to be 1 to allow interrupts.
8601 */
8602 if (enable) {
8603 u64 cce_int_mask;
8604 const int qsfp1_int_smask = QSFP1_INT % 64;
8605 const int qsfp2_int_smask = QSFP2_INT % 64;
8606
8607 /* enable all interrupts */
8608 for (i = 0; i < CCE_NUM_INT_CSRS; i++)
8609 write_csr(dd, CCE_INT_MASK + (8*i), ~(u64)0);
8610
8611 /*
8612 * disable QSFP1 interrupts for HFI1, QSFP2 interrupts for HFI0
8613 * Qsfp1Int and Qsfp2Int are adjacent bits in the same CSR,
8614 * therefore just one of QSFP1_INT/QSFP2_INT can be used to find
8615 * the index of the appropriate CSR in the CCEIntMask CSR array
8616 */
8617 cce_int_mask = read_csr(dd, CCE_INT_MASK +
8618 (8*(QSFP1_INT/64)));
8619 if (dd->hfi1_id) {
8620 cce_int_mask &= ~((u64)1 << qsfp1_int_smask);
8621 write_csr(dd, CCE_INT_MASK + (8*(QSFP1_INT/64)),
8622 cce_int_mask);
8623 } else {
8624 cce_int_mask &= ~((u64)1 << qsfp2_int_smask);
8625 write_csr(dd, CCE_INT_MASK + (8*(QSFP2_INT/64)),
8626 cce_int_mask);
8627 }
8628 } else {
8629 for (i = 0; i < CCE_NUM_INT_CSRS; i++)
8630 write_csr(dd, CCE_INT_MASK + (8*i), 0ull);
8631 }
8632}
8633
8634/*
8635 * Clear all interrupt sources on the chip.
8636 */
8637static void clear_all_interrupts(struct hfi1_devdata *dd)
8638{
8639 int i;
8640
8641 for (i = 0; i < CCE_NUM_INT_CSRS; i++)
8642 write_csr(dd, CCE_INT_CLEAR + (8*i), ~(u64)0);
8643
8644 write_csr(dd, CCE_ERR_CLEAR, ~(u64)0);
8645 write_csr(dd, MISC_ERR_CLEAR, ~(u64)0);
8646 write_csr(dd, RCV_ERR_CLEAR, ~(u64)0);
8647 write_csr(dd, SEND_ERR_CLEAR, ~(u64)0);
8648 write_csr(dd, SEND_PIO_ERR_CLEAR, ~(u64)0);
8649 write_csr(dd, SEND_DMA_ERR_CLEAR, ~(u64)0);
8650 write_csr(dd, SEND_EGRESS_ERR_CLEAR, ~(u64)0);
8651 for (i = 0; i < dd->chip_send_contexts; i++)
8652 write_kctxt_csr(dd, i, SEND_CTXT_ERR_CLEAR, ~(u64)0);
8653 for (i = 0; i < dd->chip_sdma_engines; i++)
8654 write_kctxt_csr(dd, i, SEND_DMA_ENG_ERR_CLEAR, ~(u64)0);
8655
8656 write_csr(dd, DCC_ERR_FLG_CLR, ~(u64)0);
8657 write_csr(dd, DC_LCB_ERR_CLR, ~(u64)0);
8658 write_csr(dd, DC_DC8051_ERR_CLR, ~(u64)0);
8659}
8660
8661/* Move to pcie.c? */
8662static void disable_intx(struct pci_dev *pdev)
8663{
8664 pci_intx(pdev, 0);
8665}
8666
8667static void clean_up_interrupts(struct hfi1_devdata *dd)
8668{
8669 int i;
8670
8671 /* remove irqs - must happen before disabling/turning off */
8672 if (dd->num_msix_entries) {
8673 /* MSI-X */
8674 struct hfi1_msix_entry *me = dd->msix_entries;
8675
8676 for (i = 0; i < dd->num_msix_entries; i++, me++) {
8677 if (me->arg == NULL) /* => no irq, no affinity */
8678 break;
8679 irq_set_affinity_hint(dd->msix_entries[i].msix.vector,
8680 NULL);
8681 free_irq(me->msix.vector, me->arg);
8682 }
8683 } else {
8684 /* INTx */
8685 if (dd->requested_intx_irq) {
8686 free_irq(dd->pcidev->irq, dd);
8687 dd->requested_intx_irq = 0;
8688 }
8689 }
8690
8691 /* turn off interrupts */
8692 if (dd->num_msix_entries) {
8693 /* MSI-X */
8694 hfi1_nomsix(dd);
8695 } else {
8696 /* INTx */
8697 disable_intx(dd->pcidev);
8698 }
8699
8700 /* clean structures */
8701 for (i = 0; i < dd->num_msix_entries; i++)
8702 free_cpumask_var(dd->msix_entries[i].mask);
8703 kfree(dd->msix_entries);
8704 dd->msix_entries = NULL;
8705 dd->num_msix_entries = 0;
8706}
8707
8708/*
8709 * Remap the interrupt source from the general handler to the given MSI-X
8710 * interrupt.
8711 */
8712static void remap_intr(struct hfi1_devdata *dd, int isrc, int msix_intr)
8713{
8714 u64 reg;
8715 int m, n;
8716
8717 /* clear from the handled mask of the general interrupt */
8718 m = isrc / 64;
8719 n = isrc % 64;
8720 dd->gi_mask[m] &= ~((u64)1 << n);
8721
8722 /* direct the chip source to the given MSI-X interrupt */
8723 m = isrc / 8;
8724 n = isrc % 8;
8725 reg = read_csr(dd, CCE_INT_MAP + (8*m));
8726 reg &= ~((u64)0xff << (8*n));
8727 reg |= ((u64)msix_intr & 0xff) << (8*n);
8728 write_csr(dd, CCE_INT_MAP + (8*m), reg);
8729}
8730
8731static void remap_sdma_interrupts(struct hfi1_devdata *dd,
8732 int engine, int msix_intr)
8733{
8734 /*
8735 * SDMA engine interrupt sources grouped by type, rather than
8736 * engine. Per-engine interrupts are as follows:
8737 * SDMA
8738 * SDMAProgress
8739 * SDMAIdle
8740 */
8741 remap_intr(dd, IS_SDMA_START + 0*TXE_NUM_SDMA_ENGINES + engine,
8742 msix_intr);
8743 remap_intr(dd, IS_SDMA_START + 1*TXE_NUM_SDMA_ENGINES + engine,
8744 msix_intr);
8745 remap_intr(dd, IS_SDMA_START + 2*TXE_NUM_SDMA_ENGINES + engine,
8746 msix_intr);
8747}
8748
8749static void remap_receive_available_interrupt(struct hfi1_devdata *dd,
8750 int rx, int msix_intr)
8751{
8752 remap_intr(dd, IS_RCVAVAIL_START + rx, msix_intr);
8753}
8754
8755static int request_intx_irq(struct hfi1_devdata *dd)
8756{
8757 int ret;
8758
8759 snprintf(dd->intx_name, sizeof(dd->intx_name), DRIVER_NAME"_%d",
8760 dd->unit);
8761 ret = request_irq(dd->pcidev->irq, general_interrupt,
8762 IRQF_SHARED, dd->intx_name, dd);
8763 if (ret)
8764 dd_dev_err(dd, "unable to request INTx interrupt, err %d\n",
8765 ret);
8766 else
8767 dd->requested_intx_irq = 1;
8768 return ret;
8769}
8770
8771static int request_msix_irqs(struct hfi1_devdata *dd)
8772{
8773 const struct cpumask *local_mask;
8774 cpumask_var_t def, rcv;
8775 bool def_ret, rcv_ret;
8776 int first_general, last_general;
8777 int first_sdma, last_sdma;
8778 int first_rx, last_rx;
8779 int first_cpu, restart_cpu, curr_cpu;
8780 int rcv_cpu, sdma_cpu;
8781 int i, ret = 0, possible;
8782 int ht;
8783
8784 /* calculate the ranges we are going to use */
8785 first_general = 0;
8786 first_sdma = last_general = first_general + 1;
8787 first_rx = last_sdma = first_sdma + dd->num_sdma;
8788 last_rx = first_rx + dd->n_krcv_queues;
8789
8790 /*
8791 * Interrupt affinity.
8792 *
8793 * non-rcv avail gets a default mask that
8794 * starts as possible cpus with threads reset
8795 * and each rcv avail reset.
8796 *
8797 * rcv avail gets node relative 1 wrapping back
8798 * to the node relative 1 as necessary.
8799 *
8800 */
8801 local_mask = cpumask_of_pcibus(dd->pcidev->bus);
8802 /* if first cpu is invalid, use NUMA 0 */
8803 if (cpumask_first(local_mask) >= nr_cpu_ids)
8804 local_mask = topology_core_cpumask(0);
8805
8806 def_ret = zalloc_cpumask_var(&def, GFP_KERNEL);
8807 rcv_ret = zalloc_cpumask_var(&rcv, GFP_KERNEL);
8808 if (!def_ret || !rcv_ret)
8809 goto bail;
8810 /* use local mask as default */
8811 cpumask_copy(def, local_mask);
8812 possible = cpumask_weight(def);
8813 /* disarm threads from default */
8814 ht = cpumask_weight(
8815 topology_sibling_cpumask(cpumask_first(local_mask)));
8816 for (i = possible/ht; i < possible; i++)
8817 cpumask_clear_cpu(i, def);
8818 /* reset possible */
8819 possible = cpumask_weight(def);
8820 /* def now has full cores on chosen node*/
8821 first_cpu = cpumask_first(def);
8822 if (nr_cpu_ids >= first_cpu)
8823 first_cpu++;
8824 restart_cpu = first_cpu;
8825 curr_cpu = restart_cpu;
8826
8827 for (i = first_cpu; i < dd->n_krcv_queues + first_cpu; i++) {
8828 cpumask_clear_cpu(curr_cpu, def);
8829 cpumask_set_cpu(curr_cpu, rcv);
8830 if (curr_cpu >= possible)
8831 curr_cpu = restart_cpu;
8832 else
8833 curr_cpu++;
8834 }
8835 /* def mask has non-rcv, rcv has recv mask */
8836 rcv_cpu = cpumask_first(rcv);
8837 sdma_cpu = cpumask_first(def);
8838
8839 /*
8840 * Sanity check - the code expects all SDMA chip source
8841 * interrupts to be in the same CSR, starting at bit 0. Verify
8842 * that this is true by checking the bit location of the start.
8843 */
8844 BUILD_BUG_ON(IS_SDMA_START % 64);
8845
8846 for (i = 0; i < dd->num_msix_entries; i++) {
8847 struct hfi1_msix_entry *me = &dd->msix_entries[i];
8848 const char *err_info;
8849 irq_handler_t handler;
8850 void *arg;
8851 int idx;
8852 struct hfi1_ctxtdata *rcd = NULL;
8853 struct sdma_engine *sde = NULL;
8854
8855 /* obtain the arguments to request_irq */
8856 if (first_general <= i && i < last_general) {
8857 idx = i - first_general;
8858 handler = general_interrupt;
8859 arg = dd;
8860 snprintf(me->name, sizeof(me->name),
8861 DRIVER_NAME"_%d", dd->unit);
8862 err_info = "general";
8863 } else if (first_sdma <= i && i < last_sdma) {
8864 idx = i - first_sdma;
8865 sde = &dd->per_sdma[idx];
8866 handler = sdma_interrupt;
8867 arg = sde;
8868 snprintf(me->name, sizeof(me->name),
8869 DRIVER_NAME"_%d sdma%d", dd->unit, idx);
8870 err_info = "sdma";
8871 remap_sdma_interrupts(dd, idx, i);
8872 } else if (first_rx <= i && i < last_rx) {
8873 idx = i - first_rx;
8874 rcd = dd->rcd[idx];
8875 /* no interrupt if no rcd */
8876 if (!rcd)
8877 continue;
8878 /*
8879 * Set the interrupt register and mask for this
8880 * context's interrupt.
8881 */
8882 rcd->ireg = (IS_RCVAVAIL_START+idx) / 64;
8883 rcd->imask = ((u64)1) <<
8884 ((IS_RCVAVAIL_START+idx) % 64);
8885 handler = receive_context_interrupt;
8886 arg = rcd;
8887 snprintf(me->name, sizeof(me->name),
8888 DRIVER_NAME"_%d kctxt%d", dd->unit, idx);
8889 err_info = "receive context";
8890 remap_receive_available_interrupt(dd, idx, i);
8891 } else {
8892 /* not in our expected range - complain, then
8893 ignore it */
8894 dd_dev_err(dd,
8895 "Unexpected extra MSI-X interrupt %d\n", i);
8896 continue;
8897 }
8898 /* no argument, no interrupt */
8899 if (arg == NULL)
8900 continue;
8901 /* make sure the name is terminated */
8902 me->name[sizeof(me->name)-1] = 0;
8903
8904 ret = request_irq(me->msix.vector, handler, 0, me->name, arg);
8905 if (ret) {
8906 dd_dev_err(dd,
8907 "unable to allocate %s interrupt, vector %d, index %d, err %d\n",
8908 err_info, me->msix.vector, idx, ret);
8909 return ret;
8910 }
8911 /*
8912 * assign arg after request_irq call, so it will be
8913 * cleaned up
8914 */
8915 me->arg = arg;
8916
8917 if (!zalloc_cpumask_var(
8918 &dd->msix_entries[i].mask,
8919 GFP_KERNEL))
8920 goto bail;
8921 if (handler == sdma_interrupt) {
8922 dd_dev_info(dd, "sdma engine %d cpu %d\n",
8923 sde->this_idx, sdma_cpu);
8924 cpumask_set_cpu(sdma_cpu, dd->msix_entries[i].mask);
8925 sdma_cpu = cpumask_next(sdma_cpu, def);
8926 if (sdma_cpu >= nr_cpu_ids)
8927 sdma_cpu = cpumask_first(def);
8928 } else if (handler == receive_context_interrupt) {
8929 dd_dev_info(dd, "rcv ctxt %d cpu %d\n",
8930 rcd->ctxt, rcv_cpu);
8931 cpumask_set_cpu(rcv_cpu, dd->msix_entries[i].mask);
8932 rcv_cpu = cpumask_next(rcv_cpu, rcv);
8933 if (rcv_cpu >= nr_cpu_ids)
8934 rcv_cpu = cpumask_first(rcv);
8935 } else {
8936 /* otherwise first def */
8937 dd_dev_info(dd, "%s cpu %d\n",
8938 err_info, cpumask_first(def));
8939 cpumask_set_cpu(
8940 cpumask_first(def), dd->msix_entries[i].mask);
8941 }
8942 irq_set_affinity_hint(
8943 dd->msix_entries[i].msix.vector,
8944 dd->msix_entries[i].mask);
8945 }
8946
8947out:
8948 free_cpumask_var(def);
8949 free_cpumask_var(rcv);
8950 return ret;
8951bail:
8952 ret = -ENOMEM;
8953 goto out;
8954}
8955
8956/*
8957 * Set the general handler to accept all interrupts, remap all
8958 * chip interrupts back to MSI-X 0.
8959 */
8960static void reset_interrupts(struct hfi1_devdata *dd)
8961{
8962 int i;
8963
8964 /* all interrupts handled by the general handler */
8965 for (i = 0; i < CCE_NUM_INT_CSRS; i++)
8966 dd->gi_mask[i] = ~(u64)0;
8967
8968 /* all chip interrupts map to MSI-X 0 */
8969 for (i = 0; i < CCE_NUM_INT_MAP_CSRS; i++)
8970 write_csr(dd, CCE_INT_MAP + (8*i), 0);
8971}
8972
8973static int set_up_interrupts(struct hfi1_devdata *dd)
8974{
8975 struct hfi1_msix_entry *entries;
8976 u32 total, request;
8977 int i, ret;
8978 int single_interrupt = 0; /* we expect to have all the interrupts */
8979
8980 /*
8981 * Interrupt count:
8982 * 1 general, "slow path" interrupt (includes the SDMA engines
8983 * slow source, SDMACleanupDone)
8984 * N interrupts - one per used SDMA engine
8985 * M interrupt - one per kernel receive context
8986 */
8987 total = 1 + dd->num_sdma + dd->n_krcv_queues;
8988
8989 entries = kcalloc(total, sizeof(*entries), GFP_KERNEL);
8990 if (!entries) {
Mike Marciniszyn77241052015-07-30 15:17:43 -04008991 ret = -ENOMEM;
8992 goto fail;
8993 }
8994 /* 1-1 MSI-X entry assignment */
8995 for (i = 0; i < total; i++)
8996 entries[i].msix.entry = i;
8997
8998 /* ask for MSI-X interrupts */
8999 request = total;
9000 request_msix(dd, &request, entries);
9001
9002 if (request == 0) {
9003 /* using INTx */
9004 /* dd->num_msix_entries already zero */
9005 kfree(entries);
9006 single_interrupt = 1;
9007 dd_dev_err(dd, "MSI-X failed, using INTx interrupts\n");
9008 } else {
9009 /* using MSI-X */
9010 dd->num_msix_entries = request;
9011 dd->msix_entries = entries;
9012
9013 if (request != total) {
9014 /* using MSI-X, with reduced interrupts */
9015 dd_dev_err(
9016 dd,
9017 "cannot handle reduced interrupt case, want %u, got %u\n",
9018 total, request);
9019 ret = -EINVAL;
9020 goto fail;
9021 }
9022 dd_dev_info(dd, "%u MSI-X interrupts allocated\n", total);
9023 }
9024
9025 /* mask all interrupts */
9026 set_intr_state(dd, 0);
9027 /* clear all pending interrupts */
9028 clear_all_interrupts(dd);
9029
9030 /* reset general handler mask, chip MSI-X mappings */
9031 reset_interrupts(dd);
9032
9033 if (single_interrupt)
9034 ret = request_intx_irq(dd);
9035 else
9036 ret = request_msix_irqs(dd);
9037 if (ret)
9038 goto fail;
9039
9040 return 0;
9041
9042fail:
9043 clean_up_interrupts(dd);
9044 return ret;
9045}
9046
9047/*
9048 * Set up context values in dd. Sets:
9049 *
9050 * num_rcv_contexts - number of contexts being used
9051 * n_krcv_queues - number of kernel contexts
9052 * first_user_ctxt - first non-kernel context in array of contexts
9053 * freectxts - number of free user contexts
9054 * num_send_contexts - number of PIO send contexts being used
9055 */
9056static int set_up_context_variables(struct hfi1_devdata *dd)
9057{
9058 int num_kernel_contexts;
9059 int num_user_contexts;
9060 int total_contexts;
9061 int ret;
9062 unsigned ngroups;
9063
9064 /*
9065 * Kernel contexts: (to be fixed later):
9066 * - min or 2 or 1 context/numa
9067 * - Context 0 - default/errors
9068 * - Context 1 - VL15
9069 */
9070 if (n_krcvqs)
9071 num_kernel_contexts = n_krcvqs + MIN_KERNEL_KCTXTS;
9072 else
9073 num_kernel_contexts = num_online_nodes();
9074 num_kernel_contexts =
9075 max_t(int, MIN_KERNEL_KCTXTS, num_kernel_contexts);
9076 /*
9077 * Every kernel receive context needs an ACK send context.
9078 * one send context is allocated for each VL{0-7} and VL15
9079 */
9080 if (num_kernel_contexts > (dd->chip_send_contexts - num_vls - 1)) {
9081 dd_dev_err(dd,
9082 "Reducing # kernel rcv contexts to: %d, from %d\n",
9083 (int)(dd->chip_send_contexts - num_vls - 1),
9084 (int)num_kernel_contexts);
9085 num_kernel_contexts = dd->chip_send_contexts - num_vls - 1;
9086 }
9087 /*
9088 * User contexts: (to be fixed later)
9089 * - set to num_rcv_contexts if non-zero
9090 * - default to 1 user context per CPU
9091 */
9092 if (num_rcv_contexts)
9093 num_user_contexts = num_rcv_contexts;
9094 else
9095 num_user_contexts = num_online_cpus();
9096
9097 total_contexts = num_kernel_contexts + num_user_contexts;
9098
9099 /*
9100 * Adjust the counts given a global max.
9101 */
9102 if (total_contexts > dd->chip_rcv_contexts) {
9103 dd_dev_err(dd,
9104 "Reducing # user receive contexts to: %d, from %d\n",
9105 (int)(dd->chip_rcv_contexts - num_kernel_contexts),
9106 (int)num_user_contexts);
9107 num_user_contexts = dd->chip_rcv_contexts - num_kernel_contexts;
9108 /* recalculate */
9109 total_contexts = num_kernel_contexts + num_user_contexts;
9110 }
9111
9112 /* the first N are kernel contexts, the rest are user contexts */
9113 dd->num_rcv_contexts = total_contexts;
9114 dd->n_krcv_queues = num_kernel_contexts;
9115 dd->first_user_ctxt = num_kernel_contexts;
9116 dd->freectxts = num_user_contexts;
9117 dd_dev_info(dd,
9118 "rcv contexts: chip %d, used %d (kernel %d, user %d)\n",
9119 (int)dd->chip_rcv_contexts,
9120 (int)dd->num_rcv_contexts,
9121 (int)dd->n_krcv_queues,
9122 (int)dd->num_rcv_contexts - dd->n_krcv_queues);
9123
9124 /*
9125 * Receive array allocation:
9126 * All RcvArray entries are divided into groups of 8. This
9127 * is required by the hardware and will speed up writes to
9128 * consecutive entries by using write-combining of the entire
9129 * cacheline.
9130 *
9131 * The number of groups are evenly divided among all contexts.
9132 * any left over groups will be given to the first N user
9133 * contexts.
9134 */
9135 dd->rcv_entries.group_size = RCV_INCREMENT;
9136 ngroups = dd->chip_rcv_array_count / dd->rcv_entries.group_size;
9137 dd->rcv_entries.ngroups = ngroups / dd->num_rcv_contexts;
9138 dd->rcv_entries.nctxt_extra = ngroups -
9139 (dd->num_rcv_contexts * dd->rcv_entries.ngroups);
9140 dd_dev_info(dd, "RcvArray groups %u, ctxts extra %u\n",
9141 dd->rcv_entries.ngroups,
9142 dd->rcv_entries.nctxt_extra);
9143 if (dd->rcv_entries.ngroups * dd->rcv_entries.group_size >
9144 MAX_EAGER_ENTRIES * 2) {
9145 dd->rcv_entries.ngroups = (MAX_EAGER_ENTRIES * 2) /
9146 dd->rcv_entries.group_size;
9147 dd_dev_info(dd,
9148 "RcvArray group count too high, change to %u\n",
9149 dd->rcv_entries.ngroups);
9150 dd->rcv_entries.nctxt_extra = 0;
9151 }
9152 /*
9153 * PIO send contexts
9154 */
9155 ret = init_sc_pools_and_sizes(dd);
9156 if (ret >= 0) { /* success */
9157 dd->num_send_contexts = ret;
9158 dd_dev_info(
9159 dd,
9160 "send contexts: chip %d, used %d (kernel %d, ack %d, user %d)\n",
9161 dd->chip_send_contexts,
9162 dd->num_send_contexts,
9163 dd->sc_sizes[SC_KERNEL].count,
9164 dd->sc_sizes[SC_ACK].count,
9165 dd->sc_sizes[SC_USER].count);
9166 ret = 0; /* success */
9167 }
9168
9169 return ret;
9170}
9171
9172/*
9173 * Set the device/port partition key table. The MAD code
9174 * will ensure that, at least, the partial management
9175 * partition key is present in the table.
9176 */
9177static void set_partition_keys(struct hfi1_pportdata *ppd)
9178{
9179 struct hfi1_devdata *dd = ppd->dd;
9180 u64 reg = 0;
9181 int i;
9182
9183 dd_dev_info(dd, "Setting partition keys\n");
9184 for (i = 0; i < hfi1_get_npkeys(dd); i++) {
9185 reg |= (ppd->pkeys[i] &
9186 RCV_PARTITION_KEY_PARTITION_KEY_A_MASK) <<
9187 ((i % 4) *
9188 RCV_PARTITION_KEY_PARTITION_KEY_B_SHIFT);
9189 /* Each register holds 4 PKey values. */
9190 if ((i % 4) == 3) {
9191 write_csr(dd, RCV_PARTITION_KEY +
9192 ((i - 3) * 2), reg);
9193 reg = 0;
9194 }
9195 }
9196
9197 /* Always enable HW pkeys check when pkeys table is set */
9198 add_rcvctrl(dd, RCV_CTRL_RCV_PARTITION_KEY_ENABLE_SMASK);
9199}
9200
9201/*
9202 * These CSRs and memories are uninitialized on reset and must be
9203 * written before reading to set the ECC/parity bits.
9204 *
9205 * NOTE: All user context CSRs that are not mmaped write-only
9206 * (e.g. the TID flows) must be initialized even if the driver never
9207 * reads them.
9208 */
9209static void write_uninitialized_csrs_and_memories(struct hfi1_devdata *dd)
9210{
9211 int i, j;
9212
9213 /* CceIntMap */
9214 for (i = 0; i < CCE_NUM_INT_MAP_CSRS; i++)
9215 write_csr(dd, CCE_INT_MAP+(8*i), 0);
9216
9217 /* SendCtxtCreditReturnAddr */
9218 for (i = 0; i < dd->chip_send_contexts; i++)
9219 write_kctxt_csr(dd, i, SEND_CTXT_CREDIT_RETURN_ADDR, 0);
9220
9221 /* PIO Send buffers */
9222 /* SDMA Send buffers */
9223 /* These are not normally read, and (presently) have no method
9224 to be read, so are not pre-initialized */
9225
9226 /* RcvHdrAddr */
9227 /* RcvHdrTailAddr */
9228 /* RcvTidFlowTable */
9229 for (i = 0; i < dd->chip_rcv_contexts; i++) {
9230 write_kctxt_csr(dd, i, RCV_HDR_ADDR, 0);
9231 write_kctxt_csr(dd, i, RCV_HDR_TAIL_ADDR, 0);
9232 for (j = 0; j < RXE_NUM_TID_FLOWS; j++)
9233 write_uctxt_csr(dd, i, RCV_TID_FLOW_TABLE+(8*j), 0);
9234 }
9235
9236 /* RcvArray */
9237 for (i = 0; i < dd->chip_rcv_array_count; i++)
9238 write_csr(dd, RCV_ARRAY + (8*i),
9239 RCV_ARRAY_RT_WRITE_ENABLE_SMASK);
9240
9241 /* RcvQPMapTable */
9242 for (i = 0; i < 32; i++)
9243 write_csr(dd, RCV_QP_MAP_TABLE + (8 * i), 0);
9244}
9245
9246/*
9247 * Use the ctrl_bits in CceCtrl to clear the status_bits in CceStatus.
9248 */
9249static void clear_cce_status(struct hfi1_devdata *dd, u64 status_bits,
9250 u64 ctrl_bits)
9251{
9252 unsigned long timeout;
9253 u64 reg;
9254
9255 /* is the condition present? */
9256 reg = read_csr(dd, CCE_STATUS);
9257 if ((reg & status_bits) == 0)
9258 return;
9259
9260 /* clear the condition */
9261 write_csr(dd, CCE_CTRL, ctrl_bits);
9262
9263 /* wait for the condition to clear */
9264 timeout = jiffies + msecs_to_jiffies(CCE_STATUS_TIMEOUT);
9265 while (1) {
9266 reg = read_csr(dd, CCE_STATUS);
9267 if ((reg & status_bits) == 0)
9268 return;
9269 if (time_after(jiffies, timeout)) {
9270 dd_dev_err(dd,
9271 "Timeout waiting for CceStatus to clear bits 0x%llx, remaining 0x%llx\n",
9272 status_bits, reg & status_bits);
9273 return;
9274 }
9275 udelay(1);
9276 }
9277}
9278
9279/* set CCE CSRs to chip reset defaults */
9280static void reset_cce_csrs(struct hfi1_devdata *dd)
9281{
9282 int i;
9283
9284 /* CCE_REVISION read-only */
9285 /* CCE_REVISION2 read-only */
9286 /* CCE_CTRL - bits clear automatically */
9287 /* CCE_STATUS read-only, use CceCtrl to clear */
9288 clear_cce_status(dd, ALL_FROZE, CCE_CTRL_SPC_UNFREEZE_SMASK);
9289 clear_cce_status(dd, ALL_TXE_PAUSE, CCE_CTRL_TXE_RESUME_SMASK);
9290 clear_cce_status(dd, ALL_RXE_PAUSE, CCE_CTRL_RXE_RESUME_SMASK);
9291 for (i = 0; i < CCE_NUM_SCRATCH; i++)
9292 write_csr(dd, CCE_SCRATCH + (8 * i), 0);
9293 /* CCE_ERR_STATUS read-only */
9294 write_csr(dd, CCE_ERR_MASK, 0);
9295 write_csr(dd, CCE_ERR_CLEAR, ~0ull);
9296 /* CCE_ERR_FORCE leave alone */
9297 for (i = 0; i < CCE_NUM_32_BIT_COUNTERS; i++)
9298 write_csr(dd, CCE_COUNTER_ARRAY32 + (8 * i), 0);
9299 write_csr(dd, CCE_DC_CTRL, CCE_DC_CTRL_RESETCSR);
9300 /* CCE_PCIE_CTRL leave alone */
9301 for (i = 0; i < CCE_NUM_MSIX_VECTORS; i++) {
9302 write_csr(dd, CCE_MSIX_TABLE_LOWER + (8 * i), 0);
9303 write_csr(dd, CCE_MSIX_TABLE_UPPER + (8 * i),
9304 CCE_MSIX_TABLE_UPPER_RESETCSR);
9305 }
9306 for (i = 0; i < CCE_NUM_MSIX_PBAS; i++) {
9307 /* CCE_MSIX_PBA read-only */
9308 write_csr(dd, CCE_MSIX_INT_GRANTED, ~0ull);
9309 write_csr(dd, CCE_MSIX_VEC_CLR_WITHOUT_INT, ~0ull);
9310 }
9311 for (i = 0; i < CCE_NUM_INT_MAP_CSRS; i++)
9312 write_csr(dd, CCE_INT_MAP, 0);
9313 for (i = 0; i < CCE_NUM_INT_CSRS; i++) {
9314 /* CCE_INT_STATUS read-only */
9315 write_csr(dd, CCE_INT_MASK + (8 * i), 0);
9316 write_csr(dd, CCE_INT_CLEAR + (8 * i), ~0ull);
9317 /* CCE_INT_FORCE leave alone */
9318 /* CCE_INT_BLOCKED read-only */
9319 }
9320 for (i = 0; i < CCE_NUM_32_BIT_INT_COUNTERS; i++)
9321 write_csr(dd, CCE_INT_COUNTER_ARRAY32 + (8 * i), 0);
9322}
9323
9324/* set ASIC CSRs to chip reset defaults */
9325static void reset_asic_csrs(struct hfi1_devdata *dd)
9326{
9327 static DEFINE_MUTEX(asic_mutex);
9328 static int called;
9329 int i;
9330
9331 /*
9332 * If the HFIs are shared between separate nodes or VMs,
9333 * then more will need to be done here. One idea is a module
9334 * parameter that returns early, letting the first power-on or
9335 * a known first load do the reset and blocking all others.
9336 */
9337
9338 /*
9339 * These CSRs should only be reset once - the first one here will
9340 * do the work. Use a mutex so that a non-first caller waits until
9341 * the first is finished before it can proceed.
9342 */
9343 mutex_lock(&asic_mutex);
9344 if (called)
9345 goto done;
9346 called = 1;
9347
9348 if (dd->icode != ICODE_FPGA_EMULATION) {
9349 /* emulation does not have an SBus - leave these alone */
9350 /*
9351 * All writes to ASIC_CFG_SBUS_REQUEST do something.
9352 * Notes:
9353 * o The reset is not zero if aimed at the core. See the
9354 * SBus documentation for details.
9355 * o If the SBus firmware has been updated (e.g. by the BIOS),
9356 * will the reset revert that?
9357 */
9358 /* ASIC_CFG_SBUS_REQUEST leave alone */
9359 write_csr(dd, ASIC_CFG_SBUS_EXECUTE, 0);
9360 }
9361 /* ASIC_SBUS_RESULT read-only */
9362 write_csr(dd, ASIC_STS_SBUS_COUNTERS, 0);
9363 for (i = 0; i < ASIC_NUM_SCRATCH; i++)
9364 write_csr(dd, ASIC_CFG_SCRATCH + (8 * i), 0);
9365 write_csr(dd, ASIC_CFG_MUTEX, 0); /* this will clear it */
9366 write_csr(dd, ASIC_CFG_DRV_STR, 0);
9367 write_csr(dd, ASIC_CFG_THERM_POLL_EN, 0);
9368 /* ASIC_STS_THERM read-only */
9369 /* ASIC_CFG_RESET leave alone */
9370
9371 write_csr(dd, ASIC_PCIE_SD_HOST_CMD, 0);
9372 /* ASIC_PCIE_SD_HOST_STATUS read-only */
9373 write_csr(dd, ASIC_PCIE_SD_INTRPT_DATA_CODE, 0);
9374 write_csr(dd, ASIC_PCIE_SD_INTRPT_ENABLE, 0);
9375 /* ASIC_PCIE_SD_INTRPT_PROGRESS read-only */
9376 write_csr(dd, ASIC_PCIE_SD_INTRPT_STATUS, ~0ull); /* clear */
9377 /* ASIC_HFI0_PCIE_SD_INTRPT_RSPD_DATA read-only */
9378 /* ASIC_HFI1_PCIE_SD_INTRPT_RSPD_DATA read-only */
9379 for (i = 0; i < 16; i++)
9380 write_csr(dd, ASIC_PCIE_SD_INTRPT_LIST + (8 * i), 0);
9381
9382 /* ASIC_GPIO_IN read-only */
9383 write_csr(dd, ASIC_GPIO_OE, 0);
9384 write_csr(dd, ASIC_GPIO_INVERT, 0);
9385 write_csr(dd, ASIC_GPIO_OUT, 0);
9386 write_csr(dd, ASIC_GPIO_MASK, 0);
9387 /* ASIC_GPIO_STATUS read-only */
9388 write_csr(dd, ASIC_GPIO_CLEAR, ~0ull);
9389 /* ASIC_GPIO_FORCE leave alone */
9390
9391 /* ASIC_QSFP1_IN read-only */
9392 write_csr(dd, ASIC_QSFP1_OE, 0);
9393 write_csr(dd, ASIC_QSFP1_INVERT, 0);
9394 write_csr(dd, ASIC_QSFP1_OUT, 0);
9395 write_csr(dd, ASIC_QSFP1_MASK, 0);
9396 /* ASIC_QSFP1_STATUS read-only */
9397 write_csr(dd, ASIC_QSFP1_CLEAR, ~0ull);
9398 /* ASIC_QSFP1_FORCE leave alone */
9399
9400 /* ASIC_QSFP2_IN read-only */
9401 write_csr(dd, ASIC_QSFP2_OE, 0);
9402 write_csr(dd, ASIC_QSFP2_INVERT, 0);
9403 write_csr(dd, ASIC_QSFP2_OUT, 0);
9404 write_csr(dd, ASIC_QSFP2_MASK, 0);
9405 /* ASIC_QSFP2_STATUS read-only */
9406 write_csr(dd, ASIC_QSFP2_CLEAR, ~0ull);
9407 /* ASIC_QSFP2_FORCE leave alone */
9408
9409 write_csr(dd, ASIC_EEP_CTL_STAT, ASIC_EEP_CTL_STAT_RESETCSR);
9410 /* this also writes a NOP command, clearing paging mode */
9411 write_csr(dd, ASIC_EEP_ADDR_CMD, 0);
9412 write_csr(dd, ASIC_EEP_DATA, 0);
9413
9414done:
9415 mutex_unlock(&asic_mutex);
9416}
9417
9418/* set MISC CSRs to chip reset defaults */
9419static void reset_misc_csrs(struct hfi1_devdata *dd)
9420{
9421 int i;
9422
9423 for (i = 0; i < 32; i++) {
9424 write_csr(dd, MISC_CFG_RSA_R2 + (8 * i), 0);
9425 write_csr(dd, MISC_CFG_RSA_SIGNATURE + (8 * i), 0);
9426 write_csr(dd, MISC_CFG_RSA_MODULUS + (8 * i), 0);
9427 }
9428 /* MISC_CFG_SHA_PRELOAD leave alone - always reads 0 and can
9429 only be written 128-byte chunks */
9430 /* init RSA engine to clear lingering errors */
9431 write_csr(dd, MISC_CFG_RSA_CMD, 1);
9432 write_csr(dd, MISC_CFG_RSA_MU, 0);
9433 write_csr(dd, MISC_CFG_FW_CTRL, 0);
9434 /* MISC_STS_8051_DIGEST read-only */
9435 /* MISC_STS_SBM_DIGEST read-only */
9436 /* MISC_STS_PCIE_DIGEST read-only */
9437 /* MISC_STS_FAB_DIGEST read-only */
9438 /* MISC_ERR_STATUS read-only */
9439 write_csr(dd, MISC_ERR_MASK, 0);
9440 write_csr(dd, MISC_ERR_CLEAR, ~0ull);
9441 /* MISC_ERR_FORCE leave alone */
9442}
9443
9444/* set TXE CSRs to chip reset defaults */
9445static void reset_txe_csrs(struct hfi1_devdata *dd)
9446{
9447 int i;
9448
9449 /*
9450 * TXE Kernel CSRs
9451 */
9452 write_csr(dd, SEND_CTRL, 0);
9453 __cm_reset(dd, 0); /* reset CM internal state */
9454 /* SEND_CONTEXTS read-only */
9455 /* SEND_DMA_ENGINES read-only */
9456 /* SEND_PIO_MEM_SIZE read-only */
9457 /* SEND_DMA_MEM_SIZE read-only */
9458 write_csr(dd, SEND_HIGH_PRIORITY_LIMIT, 0);
9459 pio_reset_all(dd); /* SEND_PIO_INIT_CTXT */
9460 /* SEND_PIO_ERR_STATUS read-only */
9461 write_csr(dd, SEND_PIO_ERR_MASK, 0);
9462 write_csr(dd, SEND_PIO_ERR_CLEAR, ~0ull);
9463 /* SEND_PIO_ERR_FORCE leave alone */
9464 /* SEND_DMA_ERR_STATUS read-only */
9465 write_csr(dd, SEND_DMA_ERR_MASK, 0);
9466 write_csr(dd, SEND_DMA_ERR_CLEAR, ~0ull);
9467 /* SEND_DMA_ERR_FORCE leave alone */
9468 /* SEND_EGRESS_ERR_STATUS read-only */
9469 write_csr(dd, SEND_EGRESS_ERR_MASK, 0);
9470 write_csr(dd, SEND_EGRESS_ERR_CLEAR, ~0ull);
9471 /* SEND_EGRESS_ERR_FORCE leave alone */
9472 write_csr(dd, SEND_BTH_QP, 0);
9473 write_csr(dd, SEND_STATIC_RATE_CONTROL, 0);
9474 write_csr(dd, SEND_SC2VLT0, 0);
9475 write_csr(dd, SEND_SC2VLT1, 0);
9476 write_csr(dd, SEND_SC2VLT2, 0);
9477 write_csr(dd, SEND_SC2VLT3, 0);
9478 write_csr(dd, SEND_LEN_CHECK0, 0);
9479 write_csr(dd, SEND_LEN_CHECK1, 0);
9480 /* SEND_ERR_STATUS read-only */
9481 write_csr(dd, SEND_ERR_MASK, 0);
9482 write_csr(dd, SEND_ERR_CLEAR, ~0ull);
9483 /* SEND_ERR_FORCE read-only */
9484 for (i = 0; i < VL_ARB_LOW_PRIO_TABLE_SIZE; i++)
9485 write_csr(dd, SEND_LOW_PRIORITY_LIST + (8*i), 0);
9486 for (i = 0; i < VL_ARB_HIGH_PRIO_TABLE_SIZE; i++)
9487 write_csr(dd, SEND_HIGH_PRIORITY_LIST + (8*i), 0);
9488 for (i = 0; i < dd->chip_send_contexts/NUM_CONTEXTS_PER_SET; i++)
9489 write_csr(dd, SEND_CONTEXT_SET_CTRL + (8*i), 0);
9490 for (i = 0; i < TXE_NUM_32_BIT_COUNTER; i++)
9491 write_csr(dd, SEND_COUNTER_ARRAY32 + (8*i), 0);
9492 for (i = 0; i < TXE_NUM_64_BIT_COUNTER; i++)
9493 write_csr(dd, SEND_COUNTER_ARRAY64 + (8*i), 0);
9494 write_csr(dd, SEND_CM_CTRL, SEND_CM_CTRL_RESETCSR);
9495 write_csr(dd, SEND_CM_GLOBAL_CREDIT,
9496 SEND_CM_GLOBAL_CREDIT_RESETCSR);
9497 /* SEND_CM_CREDIT_USED_STATUS read-only */
9498 write_csr(dd, SEND_CM_TIMER_CTRL, 0);
9499 write_csr(dd, SEND_CM_LOCAL_AU_TABLE0_TO3, 0);
9500 write_csr(dd, SEND_CM_LOCAL_AU_TABLE4_TO7, 0);
9501 write_csr(dd, SEND_CM_REMOTE_AU_TABLE0_TO3, 0);
9502 write_csr(dd, SEND_CM_REMOTE_AU_TABLE4_TO7, 0);
9503 for (i = 0; i < TXE_NUM_DATA_VL; i++)
9504 write_csr(dd, SEND_CM_CREDIT_VL + (8*i), 0);
9505 write_csr(dd, SEND_CM_CREDIT_VL15, 0);
9506 /* SEND_CM_CREDIT_USED_VL read-only */
9507 /* SEND_CM_CREDIT_USED_VL15 read-only */
9508 /* SEND_EGRESS_CTXT_STATUS read-only */
9509 /* SEND_EGRESS_SEND_DMA_STATUS read-only */
9510 write_csr(dd, SEND_EGRESS_ERR_INFO, ~0ull);
9511 /* SEND_EGRESS_ERR_INFO read-only */
9512 /* SEND_EGRESS_ERR_SOURCE read-only */
9513
9514 /*
9515 * TXE Per-Context CSRs
9516 */
9517 for (i = 0; i < dd->chip_send_contexts; i++) {
9518 write_kctxt_csr(dd, i, SEND_CTXT_CTRL, 0);
9519 write_kctxt_csr(dd, i, SEND_CTXT_CREDIT_CTRL, 0);
9520 write_kctxt_csr(dd, i, SEND_CTXT_CREDIT_RETURN_ADDR, 0);
9521 write_kctxt_csr(dd, i, SEND_CTXT_CREDIT_FORCE, 0);
9522 write_kctxt_csr(dd, i, SEND_CTXT_ERR_MASK, 0);
9523 write_kctxt_csr(dd, i, SEND_CTXT_ERR_CLEAR, ~0ull);
9524 write_kctxt_csr(dd, i, SEND_CTXT_CHECK_ENABLE, 0);
9525 write_kctxt_csr(dd, i, SEND_CTXT_CHECK_VL, 0);
9526 write_kctxt_csr(dd, i, SEND_CTXT_CHECK_JOB_KEY, 0);
9527 write_kctxt_csr(dd, i, SEND_CTXT_CHECK_PARTITION_KEY, 0);
9528 write_kctxt_csr(dd, i, SEND_CTXT_CHECK_SLID, 0);
9529 write_kctxt_csr(dd, i, SEND_CTXT_CHECK_OPCODE, 0);
9530 }
9531
9532 /*
9533 * TXE Per-SDMA CSRs
9534 */
9535 for (i = 0; i < dd->chip_sdma_engines; i++) {
9536 write_kctxt_csr(dd, i, SEND_DMA_CTRL, 0);
9537 /* SEND_DMA_STATUS read-only */
9538 write_kctxt_csr(dd, i, SEND_DMA_BASE_ADDR, 0);
9539 write_kctxt_csr(dd, i, SEND_DMA_LEN_GEN, 0);
9540 write_kctxt_csr(dd, i, SEND_DMA_TAIL, 0);
9541 /* SEND_DMA_HEAD read-only */
9542 write_kctxt_csr(dd, i, SEND_DMA_HEAD_ADDR, 0);
9543 write_kctxt_csr(dd, i, SEND_DMA_PRIORITY_THLD, 0);
9544 /* SEND_DMA_IDLE_CNT read-only */
9545 write_kctxt_csr(dd, i, SEND_DMA_RELOAD_CNT, 0);
9546 write_kctxt_csr(dd, i, SEND_DMA_DESC_CNT, 0);
9547 /* SEND_DMA_DESC_FETCHED_CNT read-only */
9548 /* SEND_DMA_ENG_ERR_STATUS read-only */
9549 write_kctxt_csr(dd, i, SEND_DMA_ENG_ERR_MASK, 0);
9550 write_kctxt_csr(dd, i, SEND_DMA_ENG_ERR_CLEAR, ~0ull);
9551 /* SEND_DMA_ENG_ERR_FORCE leave alone */
9552 write_kctxt_csr(dd, i, SEND_DMA_CHECK_ENABLE, 0);
9553 write_kctxt_csr(dd, i, SEND_DMA_CHECK_VL, 0);
9554 write_kctxt_csr(dd, i, SEND_DMA_CHECK_JOB_KEY, 0);
9555 write_kctxt_csr(dd, i, SEND_DMA_CHECK_PARTITION_KEY, 0);
9556 write_kctxt_csr(dd, i, SEND_DMA_CHECK_SLID, 0);
9557 write_kctxt_csr(dd, i, SEND_DMA_CHECK_OPCODE, 0);
9558 write_kctxt_csr(dd, i, SEND_DMA_MEMORY, 0);
9559 }
9560}
9561
9562/*
9563 * Expect on entry:
9564 * o Packet ingress is disabled, i.e. RcvCtrl.RcvPortEnable == 0
9565 */
9566static void init_rbufs(struct hfi1_devdata *dd)
9567{
9568 u64 reg;
9569 int count;
9570
9571 /*
9572 * Wait for DMA to stop: RxRbufPktPending and RxPktInProgress are
9573 * clear.
9574 */
9575 count = 0;
9576 while (1) {
9577 reg = read_csr(dd, RCV_STATUS);
9578 if ((reg & (RCV_STATUS_RX_RBUF_PKT_PENDING_SMASK
9579 | RCV_STATUS_RX_PKT_IN_PROGRESS_SMASK)) == 0)
9580 break;
9581 /*
9582 * Give up after 1ms - maximum wait time.
9583 *
9584 * RBuf size is 148KiB. Slowest possible is PCIe Gen1 x1 at
9585 * 250MB/s bandwidth. Lower rate to 66% for overhead to get:
9586 * 148 KB / (66% * 250MB/s) = 920us
9587 */
9588 if (count++ > 500) {
9589 dd_dev_err(dd,
9590 "%s: in-progress DMA not clearing: RcvStatus 0x%llx, continuing\n",
9591 __func__, reg);
9592 break;
9593 }
9594 udelay(2); /* do not busy-wait the CSR */
9595 }
9596
9597 /* start the init - expect RcvCtrl to be 0 */
9598 write_csr(dd, RCV_CTRL, RCV_CTRL_RX_RBUF_INIT_SMASK);
9599
9600 /*
9601 * Read to force the write of Rcvtrl.RxRbufInit. There is a brief
9602 * period after the write before RcvStatus.RxRbufInitDone is valid.
9603 * The delay in the first run through the loop below is sufficient and
9604 * required before the first read of RcvStatus.RxRbufInintDone.
9605 */
9606 read_csr(dd, RCV_CTRL);
9607
9608 /* wait for the init to finish */
9609 count = 0;
9610 while (1) {
9611 /* delay is required first time through - see above */
9612 udelay(2); /* do not busy-wait the CSR */
9613 reg = read_csr(dd, RCV_STATUS);
9614 if (reg & (RCV_STATUS_RX_RBUF_INIT_DONE_SMASK))
9615 break;
9616
9617 /* give up after 100us - slowest possible at 33MHz is 73us */
9618 if (count++ > 50) {
9619 dd_dev_err(dd,
9620 "%s: RcvStatus.RxRbufInit not set, continuing\n",
9621 __func__);
9622 break;
9623 }
9624 }
9625}
9626
9627/* set RXE CSRs to chip reset defaults */
9628static void reset_rxe_csrs(struct hfi1_devdata *dd)
9629{
9630 int i, j;
9631
9632 /*
9633 * RXE Kernel CSRs
9634 */
9635 write_csr(dd, RCV_CTRL, 0);
9636 init_rbufs(dd);
9637 /* RCV_STATUS read-only */
9638 /* RCV_CONTEXTS read-only */
9639 /* RCV_ARRAY_CNT read-only */
9640 /* RCV_BUF_SIZE read-only */
9641 write_csr(dd, RCV_BTH_QP, 0);
9642 write_csr(dd, RCV_MULTICAST, 0);
9643 write_csr(dd, RCV_BYPASS, 0);
9644 write_csr(dd, RCV_VL15, 0);
9645 /* this is a clear-down */
9646 write_csr(dd, RCV_ERR_INFO,
9647 RCV_ERR_INFO_RCV_EXCESS_BUFFER_OVERRUN_SMASK);
9648 /* RCV_ERR_STATUS read-only */
9649 write_csr(dd, RCV_ERR_MASK, 0);
9650 write_csr(dd, RCV_ERR_CLEAR, ~0ull);
9651 /* RCV_ERR_FORCE leave alone */
9652 for (i = 0; i < 32; i++)
9653 write_csr(dd, RCV_QP_MAP_TABLE + (8 * i), 0);
9654 for (i = 0; i < 4; i++)
9655 write_csr(dd, RCV_PARTITION_KEY + (8 * i), 0);
9656 for (i = 0; i < RXE_NUM_32_BIT_COUNTERS; i++)
9657 write_csr(dd, RCV_COUNTER_ARRAY32 + (8 * i), 0);
9658 for (i = 0; i < RXE_NUM_64_BIT_COUNTERS; i++)
9659 write_csr(dd, RCV_COUNTER_ARRAY64 + (8 * i), 0);
9660 for (i = 0; i < RXE_NUM_RSM_INSTANCES; i++) {
9661 write_csr(dd, RCV_RSM_CFG + (8 * i), 0);
9662 write_csr(dd, RCV_RSM_SELECT + (8 * i), 0);
9663 write_csr(dd, RCV_RSM_MATCH + (8 * i), 0);
9664 }
9665 for (i = 0; i < 32; i++)
9666 write_csr(dd, RCV_RSM_MAP_TABLE + (8 * i), 0);
9667
9668 /*
9669 * RXE Kernel and User Per-Context CSRs
9670 */
9671 for (i = 0; i < dd->chip_rcv_contexts; i++) {
9672 /* kernel */
9673 write_kctxt_csr(dd, i, RCV_CTXT_CTRL, 0);
9674 /* RCV_CTXT_STATUS read-only */
9675 write_kctxt_csr(dd, i, RCV_EGR_CTRL, 0);
9676 write_kctxt_csr(dd, i, RCV_TID_CTRL, 0);
9677 write_kctxt_csr(dd, i, RCV_KEY_CTRL, 0);
9678 write_kctxt_csr(dd, i, RCV_HDR_ADDR, 0);
9679 write_kctxt_csr(dd, i, RCV_HDR_CNT, 0);
9680 write_kctxt_csr(dd, i, RCV_HDR_ENT_SIZE, 0);
9681 write_kctxt_csr(dd, i, RCV_HDR_SIZE, 0);
9682 write_kctxt_csr(dd, i, RCV_HDR_TAIL_ADDR, 0);
9683 write_kctxt_csr(dd, i, RCV_AVAIL_TIME_OUT, 0);
9684 write_kctxt_csr(dd, i, RCV_HDR_OVFL_CNT, 0);
9685
9686 /* user */
9687 /* RCV_HDR_TAIL read-only */
9688 write_uctxt_csr(dd, i, RCV_HDR_HEAD, 0);
9689 /* RCV_EGR_INDEX_TAIL read-only */
9690 write_uctxt_csr(dd, i, RCV_EGR_INDEX_HEAD, 0);
9691 /* RCV_EGR_OFFSET_TAIL read-only */
9692 for (j = 0; j < RXE_NUM_TID_FLOWS; j++) {
9693 write_uctxt_csr(dd, i, RCV_TID_FLOW_TABLE + (8 * j),
9694 0);
9695 }
9696 }
9697}
9698
9699/*
9700 * Set sc2vl tables.
9701 *
9702 * They power on to zeros, so to avoid send context errors
9703 * they need to be set:
9704 *
9705 * SC 0-7 -> VL 0-7 (respectively)
9706 * SC 15 -> VL 15
9707 * otherwise
9708 * -> VL 0
9709 */
9710static void init_sc2vl_tables(struct hfi1_devdata *dd)
9711{
9712 int i;
9713 /* init per architecture spec, constrained by hardware capability */
9714
9715 /* HFI maps sent packets */
9716 write_csr(dd, SEND_SC2VLT0, SC2VL_VAL(
9717 0,
9718 0, 0, 1, 1,
9719 2, 2, 3, 3,
9720 4, 4, 5, 5,
9721 6, 6, 7, 7));
9722 write_csr(dd, SEND_SC2VLT1, SC2VL_VAL(
9723 1,
9724 8, 0, 9, 0,
9725 10, 0, 11, 0,
9726 12, 0, 13, 0,
9727 14, 0, 15, 15));
9728 write_csr(dd, SEND_SC2VLT2, SC2VL_VAL(
9729 2,
9730 16, 0, 17, 0,
9731 18, 0, 19, 0,
9732 20, 0, 21, 0,
9733 22, 0, 23, 0));
9734 write_csr(dd, SEND_SC2VLT3, SC2VL_VAL(
9735 3,
9736 24, 0, 25, 0,
9737 26, 0, 27, 0,
9738 28, 0, 29, 0,
9739 30, 0, 31, 0));
9740
9741 /* DC maps received packets */
9742 write_csr(dd, DCC_CFG_SC_VL_TABLE_15_0, DC_SC_VL_VAL(
9743 15_0,
9744 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7,
9745 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 13, 0, 14, 0, 15, 15));
9746 write_csr(dd, DCC_CFG_SC_VL_TABLE_31_16, DC_SC_VL_VAL(
9747 31_16,
9748 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0,
9749 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0));
9750
9751 /* initialize the cached sc2vl values consistently with h/w */
9752 for (i = 0; i < 32; i++) {
9753 if (i < 8 || i == 15)
9754 *((u8 *)(dd->sc2vl) + i) = (u8)i;
9755 else
9756 *((u8 *)(dd->sc2vl) + i) = 0;
9757 }
9758}
9759
9760/*
9761 * Read chip sizes and then reset parts to sane, disabled, values. We cannot
9762 * depend on the chip going through a power-on reset - a driver may be loaded
9763 * and unloaded many times.
9764 *
9765 * Do not write any CSR values to the chip in this routine - there may be
9766 * a reset following the (possible) FLR in this routine.
9767 *
9768 */
9769static void init_chip(struct hfi1_devdata *dd)
9770{
9771 int i;
9772
9773 /*
9774 * Put the HFI CSRs in a known state.
9775 * Combine this with a DC reset.
9776 *
9777 * Stop the device from doing anything while we do a
9778 * reset. We know there are no other active users of
9779 * the device since we are now in charge. Turn off
9780 * off all outbound and inbound traffic and make sure
9781 * the device does not generate any interrupts.
9782 */
9783
9784 /* disable send contexts and SDMA engines */
9785 write_csr(dd, SEND_CTRL, 0);
9786 for (i = 0; i < dd->chip_send_contexts; i++)
9787 write_kctxt_csr(dd, i, SEND_CTXT_CTRL, 0);
9788 for (i = 0; i < dd->chip_sdma_engines; i++)
9789 write_kctxt_csr(dd, i, SEND_DMA_CTRL, 0);
9790 /* disable port (turn off RXE inbound traffic) and contexts */
9791 write_csr(dd, RCV_CTRL, 0);
9792 for (i = 0; i < dd->chip_rcv_contexts; i++)
9793 write_csr(dd, RCV_CTXT_CTRL, 0);
9794 /* mask all interrupt sources */
9795 for (i = 0; i < CCE_NUM_INT_CSRS; i++)
9796 write_csr(dd, CCE_INT_MASK + (8*i), 0ull);
9797
9798 /*
9799 * DC Reset: do a full DC reset before the register clear.
9800 * A recommended length of time to hold is one CSR read,
9801 * so reread the CceDcCtrl. Then, hold the DC in reset
9802 * across the clear.
9803 */
9804 write_csr(dd, CCE_DC_CTRL, CCE_DC_CTRL_DC_RESET_SMASK);
9805 (void) read_csr(dd, CCE_DC_CTRL);
9806
9807 if (use_flr) {
9808 /*
9809 * A FLR will reset the SPC core and part of the PCIe.
9810 * The parts that need to be restored have already been
9811 * saved.
9812 */
9813 dd_dev_info(dd, "Resetting CSRs with FLR\n");
9814
9815 /* do the FLR, the DC reset will remain */
9816 hfi1_pcie_flr(dd);
9817
9818 /* restore command and BARs */
9819 restore_pci_variables(dd);
9820
9821 if (is_a0(dd)) {
9822 dd_dev_info(dd, "Resetting CSRs with FLR\n");
9823 hfi1_pcie_flr(dd);
9824 restore_pci_variables(dd);
9825 }
9826
9827 } else {
9828 dd_dev_info(dd, "Resetting CSRs with writes\n");
9829 reset_cce_csrs(dd);
9830 reset_txe_csrs(dd);
9831 reset_rxe_csrs(dd);
9832 reset_asic_csrs(dd);
9833 reset_misc_csrs(dd);
9834 }
9835 /* clear the DC reset */
9836 write_csr(dd, CCE_DC_CTRL, 0);
9837 /* Set the LED off */
9838 if (is_a0(dd))
9839 setextled(dd, 0);
9840 /*
9841 * Clear the QSFP reset.
9842 * A0 leaves the out lines floating on power on, then on an FLR
9843 * enforces a 0 on all out pins. The driver does not touch
9844 * ASIC_QSFPn_OUT otherwise. This leaves RESET_N low and
9845 * anything plugged constantly in reset, if it pays attention
9846 * to RESET_N.
9847 * A prime example of this is SiPh. For now, set all pins high.
9848 * I2CCLK and I2CDAT will change per direction, and INT_N and
9849 * MODPRS_N are input only and their value is ignored.
9850 */
9851 if (is_a0(dd)) {
9852 write_csr(dd, ASIC_QSFP1_OUT, 0x1f);
9853 write_csr(dd, ASIC_QSFP2_OUT, 0x1f);
9854 }
9855}
9856
9857static void init_early_variables(struct hfi1_devdata *dd)
9858{
9859 int i;
9860
9861 /* assign link credit variables */
9862 dd->vau = CM_VAU;
9863 dd->link_credits = CM_GLOBAL_CREDITS;
9864 if (is_a0(dd))
9865 dd->link_credits--;
9866 dd->vcu = cu_to_vcu(hfi1_cu);
9867 /* enough room for 8 MAD packets plus header - 17K */
9868 dd->vl15_init = (8 * (2048 + 128)) / vau_to_au(dd->vau);
9869 if (dd->vl15_init > dd->link_credits)
9870 dd->vl15_init = dd->link_credits;
9871
9872 write_uninitialized_csrs_and_memories(dd);
9873
9874 if (HFI1_CAP_IS_KSET(PKEY_CHECK))
9875 for (i = 0; i < dd->num_pports; i++) {
9876 struct hfi1_pportdata *ppd = &dd->pport[i];
9877
9878 set_partition_keys(ppd);
9879 }
9880 init_sc2vl_tables(dd);
9881}
9882
9883static void init_kdeth_qp(struct hfi1_devdata *dd)
9884{
9885 /* user changed the KDETH_QP */
9886 if (kdeth_qp != 0 && kdeth_qp >= 0xff) {
9887 /* out of range or illegal value */
9888 dd_dev_err(dd, "Invalid KDETH queue pair prefix, ignoring");
9889 kdeth_qp = 0;
9890 }
9891 if (kdeth_qp == 0) /* not set, or failed range check */
9892 kdeth_qp = DEFAULT_KDETH_QP;
9893
9894 write_csr(dd, SEND_BTH_QP,
9895 (kdeth_qp & SEND_BTH_QP_KDETH_QP_MASK)
9896 << SEND_BTH_QP_KDETH_QP_SHIFT);
9897
9898 write_csr(dd, RCV_BTH_QP,
9899 (kdeth_qp & RCV_BTH_QP_KDETH_QP_MASK)
9900 << RCV_BTH_QP_KDETH_QP_SHIFT);
9901}
9902
9903/**
9904 * init_qpmap_table
9905 * @dd - device data
9906 * @first_ctxt - first context
9907 * @last_ctxt - first context
9908 *
9909 * This return sets the qpn mapping table that
9910 * is indexed by qpn[8:1].
9911 *
9912 * The routine will round robin the 256 settings
9913 * from first_ctxt to last_ctxt.
9914 *
9915 * The first/last looks ahead to having specialized
9916 * receive contexts for mgmt and bypass. Normal
9917 * verbs traffic will assumed to be on a range
9918 * of receive contexts.
9919 */
9920static void init_qpmap_table(struct hfi1_devdata *dd,
9921 u32 first_ctxt,
9922 u32 last_ctxt)
9923{
9924 u64 reg = 0;
9925 u64 regno = RCV_QP_MAP_TABLE;
9926 int i;
9927 u64 ctxt = first_ctxt;
9928
9929 for (i = 0; i < 256;) {
9930 if (ctxt == VL15CTXT) {
9931 ctxt++;
9932 if (ctxt > last_ctxt)
9933 ctxt = first_ctxt;
9934 continue;
9935 }
9936 reg |= ctxt << (8 * (i % 8));
9937 i++;
9938 ctxt++;
9939 if (ctxt > last_ctxt)
9940 ctxt = first_ctxt;
9941 if (i % 8 == 0) {
9942 write_csr(dd, regno, reg);
9943 reg = 0;
9944 regno += 8;
9945 }
9946 }
9947 if (i % 8)
9948 write_csr(dd, regno, reg);
9949
9950 add_rcvctrl(dd, RCV_CTRL_RCV_QP_MAP_ENABLE_SMASK
9951 | RCV_CTRL_RCV_BYPASS_ENABLE_SMASK);
9952}
9953
9954/**
9955 * init_qos - init RX qos
9956 * @dd - device data
9957 * @first_context
9958 *
9959 * This routine initializes Rule 0 and the
9960 * RSM map table to implement qos.
9961 *
9962 * If all of the limit tests succeed,
9963 * qos is applied based on the array
9964 * interpretation of krcvqs where
9965 * entry 0 is VL0.
9966 *
9967 * The number of vl bits (n) and the number of qpn
9968 * bits (m) are computed to feed both the RSM map table
9969 * and the single rule.
9970 *
9971 */
9972static void init_qos(struct hfi1_devdata *dd, u32 first_ctxt)
9973{
9974 u8 max_by_vl = 0;
9975 unsigned qpns_per_vl, ctxt, i, qpn, n = 1, m;
9976 u64 *rsmmap;
9977 u64 reg;
9978 u8 rxcontext = is_a0(dd) ? 0 : 0xff; /* 0 is default if a0 ver. */
9979
9980 /* validate */
9981 if (dd->n_krcv_queues <= MIN_KERNEL_KCTXTS ||
9982 num_vls == 1 ||
9983 krcvqsset <= 1)
9984 goto bail;
9985 for (i = 0; i < min_t(unsigned, num_vls, krcvqsset); i++)
9986 if (krcvqs[i] > max_by_vl)
9987 max_by_vl = krcvqs[i];
9988 if (max_by_vl > 32)
9989 goto bail;
9990 qpns_per_vl = __roundup_pow_of_two(max_by_vl);
9991 /* determine bits vl */
9992 n = ilog2(num_vls);
9993 /* determine bits for qpn */
9994 m = ilog2(qpns_per_vl);
9995 if ((m + n) > 7)
9996 goto bail;
9997 if (num_vls * qpns_per_vl > dd->chip_rcv_contexts)
9998 goto bail;
9999 rsmmap = kmalloc_array(NUM_MAP_REGS, sizeof(u64), GFP_KERNEL);
10000 memset(rsmmap, rxcontext, NUM_MAP_REGS * sizeof(u64));
10001 /* init the local copy of the table */
10002 for (i = 0, ctxt = first_ctxt; i < num_vls; i++) {
10003 unsigned tctxt;
10004
10005 for (qpn = 0, tctxt = ctxt;
10006 krcvqs[i] && qpn < qpns_per_vl; qpn++) {
10007 unsigned idx, regoff, regidx;
10008
10009 /* generate index <= 128 */
10010 idx = (qpn << n) ^ i;
10011 regoff = (idx % 8) * 8;
10012 regidx = idx / 8;
10013 reg = rsmmap[regidx];
10014 /* replace 0xff with context number */
10015 reg &= ~(RCV_RSM_MAP_TABLE_RCV_CONTEXT_A_MASK
10016 << regoff);
10017 reg |= (u64)(tctxt++) << regoff;
10018 rsmmap[regidx] = reg;
10019 if (tctxt == ctxt + krcvqs[i])
10020 tctxt = ctxt;
10021 }
10022 ctxt += krcvqs[i];
10023 }
10024 /* flush cached copies to chip */
10025 for (i = 0; i < NUM_MAP_REGS; i++)
10026 write_csr(dd, RCV_RSM_MAP_TABLE + (8 * i), rsmmap[i]);
10027 /* add rule0 */
10028 write_csr(dd, RCV_RSM_CFG /* + (8 * 0) */,
10029 RCV_RSM_CFG_ENABLE_OR_CHAIN_RSM0_MASK
10030 << RCV_RSM_CFG_ENABLE_OR_CHAIN_RSM0_SHIFT |
10031 2ull << RCV_RSM_CFG_PACKET_TYPE_SHIFT);
10032 write_csr(dd, RCV_RSM_SELECT /* + (8 * 0) */,
10033 LRH_BTH_MATCH_OFFSET
10034 << RCV_RSM_SELECT_FIELD1_OFFSET_SHIFT |
10035 LRH_SC_MATCH_OFFSET << RCV_RSM_SELECT_FIELD2_OFFSET_SHIFT |
10036 LRH_SC_SELECT_OFFSET << RCV_RSM_SELECT_INDEX1_OFFSET_SHIFT |
10037 ((u64)n) << RCV_RSM_SELECT_INDEX1_WIDTH_SHIFT |
10038 QPN_SELECT_OFFSET << RCV_RSM_SELECT_INDEX2_OFFSET_SHIFT |
10039 ((u64)m + (u64)n) << RCV_RSM_SELECT_INDEX2_WIDTH_SHIFT);
10040 write_csr(dd, RCV_RSM_MATCH /* + (8 * 0) */,
10041 LRH_BTH_MASK << RCV_RSM_MATCH_MASK1_SHIFT |
10042 LRH_BTH_VALUE << RCV_RSM_MATCH_VALUE1_SHIFT |
10043 LRH_SC_MASK << RCV_RSM_MATCH_MASK2_SHIFT |
10044 LRH_SC_VALUE << RCV_RSM_MATCH_VALUE2_SHIFT);
10045 /* Enable RSM */
10046 add_rcvctrl(dd, RCV_CTRL_RCV_RSM_ENABLE_SMASK);
10047 kfree(rsmmap);
10048 /* map everything else (non-VL15) to context 0 */
10049 init_qpmap_table(
10050 dd,
10051 0,
10052 0);
10053 dd->qos_shift = n + 1;
10054 return;
10055bail:
10056 dd->qos_shift = 1;
10057 init_qpmap_table(
10058 dd,
10059 dd->n_krcv_queues > MIN_KERNEL_KCTXTS ? MIN_KERNEL_KCTXTS : 0,
10060 dd->n_krcv_queues - 1);
10061}
10062
10063static void init_rxe(struct hfi1_devdata *dd)
10064{
10065 /* enable all receive errors */
10066 write_csr(dd, RCV_ERR_MASK, ~0ull);
10067 /* setup QPN map table - start where VL15 context leaves off */
10068 init_qos(
10069 dd,
10070 dd->n_krcv_queues > MIN_KERNEL_KCTXTS ? MIN_KERNEL_KCTXTS : 0);
10071 /*
10072 * make sure RcvCtrl.RcvWcb <= PCIe Device Control
10073 * Register Max_Payload_Size (PCI_EXP_DEVCTL in Linux PCIe config
10074 * space, PciCfgCap2.MaxPayloadSize in HFI). There is only one
10075 * invalid configuration: RcvCtrl.RcvWcb set to its max of 256 and
10076 * Max_PayLoad_Size set to its minimum of 128.
10077 *
10078 * Presently, RcvCtrl.RcvWcb is not modified from its default of 0
10079 * (64 bytes). Max_Payload_Size is possibly modified upward in
10080 * tune_pcie_caps() which is called after this routine.
10081 */
10082}
10083
10084static void init_other(struct hfi1_devdata *dd)
10085{
10086 /* enable all CCE errors */
10087 write_csr(dd, CCE_ERR_MASK, ~0ull);
10088 /* enable *some* Misc errors */
10089 write_csr(dd, MISC_ERR_MASK, DRIVER_MISC_MASK);
10090 /* enable all DC errors, except LCB */
10091 write_csr(dd, DCC_ERR_FLG_EN, ~0ull);
10092 write_csr(dd, DC_DC8051_ERR_EN, ~0ull);
10093}
10094
10095/*
10096 * Fill out the given AU table using the given CU. A CU is defined in terms
10097 * AUs. The table is a an encoding: given the index, how many AUs does that
10098 * represent?
10099 *
10100 * NOTE: Assumes that the register layout is the same for the
10101 * local and remote tables.
10102 */
10103static void assign_cm_au_table(struct hfi1_devdata *dd, u32 cu,
10104 u32 csr0to3, u32 csr4to7)
10105{
10106 write_csr(dd, csr0to3,
10107 0ull <<
10108 SEND_CM_LOCAL_AU_TABLE0_TO3_LOCAL_AU_TABLE0_SHIFT
10109 | 1ull <<
10110 SEND_CM_LOCAL_AU_TABLE0_TO3_LOCAL_AU_TABLE1_SHIFT
10111 | 2ull * cu <<
10112 SEND_CM_LOCAL_AU_TABLE0_TO3_LOCAL_AU_TABLE2_SHIFT
10113 | 4ull * cu <<
10114 SEND_CM_LOCAL_AU_TABLE0_TO3_LOCAL_AU_TABLE3_SHIFT);
10115 write_csr(dd, csr4to7,
10116 8ull * cu <<
10117 SEND_CM_LOCAL_AU_TABLE4_TO7_LOCAL_AU_TABLE4_SHIFT
10118 | 16ull * cu <<
10119 SEND_CM_LOCAL_AU_TABLE4_TO7_LOCAL_AU_TABLE5_SHIFT
10120 | 32ull * cu <<
10121 SEND_CM_LOCAL_AU_TABLE4_TO7_LOCAL_AU_TABLE6_SHIFT
10122 | 64ull * cu <<
10123 SEND_CM_LOCAL_AU_TABLE4_TO7_LOCAL_AU_TABLE7_SHIFT);
10124
10125}
10126
10127static void assign_local_cm_au_table(struct hfi1_devdata *dd, u8 vcu)
10128{
10129 assign_cm_au_table(dd, vcu_to_cu(vcu), SEND_CM_LOCAL_AU_TABLE0_TO3,
10130 SEND_CM_LOCAL_AU_TABLE4_TO7);
10131}
10132
10133void assign_remote_cm_au_table(struct hfi1_devdata *dd, u8 vcu)
10134{
10135 assign_cm_au_table(dd, vcu_to_cu(vcu), SEND_CM_REMOTE_AU_TABLE0_TO3,
10136 SEND_CM_REMOTE_AU_TABLE4_TO7);
10137}
10138
10139static void init_txe(struct hfi1_devdata *dd)
10140{
10141 int i;
10142
10143 /* enable all PIO, SDMA, general, and Egress errors */
10144 write_csr(dd, SEND_PIO_ERR_MASK, ~0ull);
10145 write_csr(dd, SEND_DMA_ERR_MASK, ~0ull);
10146 write_csr(dd, SEND_ERR_MASK, ~0ull);
10147 write_csr(dd, SEND_EGRESS_ERR_MASK, ~0ull);
10148
10149 /* enable all per-context and per-SDMA engine errors */
10150 for (i = 0; i < dd->chip_send_contexts; i++)
10151 write_kctxt_csr(dd, i, SEND_CTXT_ERR_MASK, ~0ull);
10152 for (i = 0; i < dd->chip_sdma_engines; i++)
10153 write_kctxt_csr(dd, i, SEND_DMA_ENG_ERR_MASK, ~0ull);
10154
10155 /* set the local CU to AU mapping */
10156 assign_local_cm_au_table(dd, dd->vcu);
10157
10158 /*
10159 * Set reasonable default for Credit Return Timer
10160 * Don't set on Simulator - causes it to choke.
10161 */
10162 if (dd->icode != ICODE_FUNCTIONAL_SIMULATOR)
10163 write_csr(dd, SEND_CM_TIMER_CTRL, HFI1_CREDIT_RETURN_RATE);
10164}
10165
10166int hfi1_set_ctxt_jkey(struct hfi1_devdata *dd, unsigned ctxt, u16 jkey)
10167{
10168 struct hfi1_ctxtdata *rcd = dd->rcd[ctxt];
10169 unsigned sctxt;
10170 int ret = 0;
10171 u64 reg;
10172
10173 if (!rcd || !rcd->sc) {
10174 ret = -EINVAL;
10175 goto done;
10176 }
10177 sctxt = rcd->sc->hw_context;
10178 reg = SEND_CTXT_CHECK_JOB_KEY_MASK_SMASK | /* mask is always 1's */
10179 ((jkey & SEND_CTXT_CHECK_JOB_KEY_VALUE_MASK) <<
10180 SEND_CTXT_CHECK_JOB_KEY_VALUE_SHIFT);
10181 /* JOB_KEY_ALLOW_PERMISSIVE is not allowed by default */
10182 if (HFI1_CAP_KGET_MASK(rcd->flags, ALLOW_PERM_JKEY))
10183 reg |= SEND_CTXT_CHECK_JOB_KEY_ALLOW_PERMISSIVE_SMASK;
10184 write_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_JOB_KEY, reg);
10185 /*
10186 * Enable send-side J_KEY integrity check, unless this is A0 h/w
10187 * (due to A0 erratum).
10188 */
10189 if (!is_a0(dd)) {
10190 reg = read_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_ENABLE);
10191 reg |= SEND_CTXT_CHECK_ENABLE_CHECK_JOB_KEY_SMASK;
10192 write_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_ENABLE, reg);
10193 }
10194
10195 /* Enable J_KEY check on receive context. */
10196 reg = RCV_KEY_CTRL_JOB_KEY_ENABLE_SMASK |
10197 ((jkey & RCV_KEY_CTRL_JOB_KEY_VALUE_MASK) <<
10198 RCV_KEY_CTRL_JOB_KEY_VALUE_SHIFT);
10199 write_kctxt_csr(dd, ctxt, RCV_KEY_CTRL, reg);
10200done:
10201 return ret;
10202}
10203
10204int hfi1_clear_ctxt_jkey(struct hfi1_devdata *dd, unsigned ctxt)
10205{
10206 struct hfi1_ctxtdata *rcd = dd->rcd[ctxt];
10207 unsigned sctxt;
10208 int ret = 0;
10209 u64 reg;
10210
10211 if (!rcd || !rcd->sc) {
10212 ret = -EINVAL;
10213 goto done;
10214 }
10215 sctxt = rcd->sc->hw_context;
10216 write_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_JOB_KEY, 0);
10217 /*
10218 * Disable send-side J_KEY integrity check, unless this is A0 h/w.
10219 * This check would not have been enabled for A0 h/w, see
10220 * set_ctxt_jkey().
10221 */
10222 if (!is_a0(dd)) {
10223 reg = read_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_ENABLE);
10224 reg &= ~SEND_CTXT_CHECK_ENABLE_CHECK_JOB_KEY_SMASK;
10225 write_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_ENABLE, reg);
10226 }
10227 /* Turn off the J_KEY on the receive side */
10228 write_kctxt_csr(dd, ctxt, RCV_KEY_CTRL, 0);
10229done:
10230 return ret;
10231}
10232
10233int hfi1_set_ctxt_pkey(struct hfi1_devdata *dd, unsigned ctxt, u16 pkey)
10234{
10235 struct hfi1_ctxtdata *rcd;
10236 unsigned sctxt;
10237 int ret = 0;
10238 u64 reg;
10239
10240 if (ctxt < dd->num_rcv_contexts)
10241 rcd = dd->rcd[ctxt];
10242 else {
10243 ret = -EINVAL;
10244 goto done;
10245 }
10246 if (!rcd || !rcd->sc) {
10247 ret = -EINVAL;
10248 goto done;
10249 }
10250 sctxt = rcd->sc->hw_context;
10251 reg = ((u64)pkey & SEND_CTXT_CHECK_PARTITION_KEY_VALUE_MASK) <<
10252 SEND_CTXT_CHECK_PARTITION_KEY_VALUE_SHIFT;
10253 write_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_PARTITION_KEY, reg);
10254 reg = read_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_ENABLE);
10255 reg |= SEND_CTXT_CHECK_ENABLE_CHECK_PARTITION_KEY_SMASK;
10256 write_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_ENABLE, reg);
10257done:
10258 return ret;
10259}
10260
10261int hfi1_clear_ctxt_pkey(struct hfi1_devdata *dd, unsigned ctxt)
10262{
10263 struct hfi1_ctxtdata *rcd;
10264 unsigned sctxt;
10265 int ret = 0;
10266 u64 reg;
10267
10268 if (ctxt < dd->num_rcv_contexts)
10269 rcd = dd->rcd[ctxt];
10270 else {
10271 ret = -EINVAL;
10272 goto done;
10273 }
10274 if (!rcd || !rcd->sc) {
10275 ret = -EINVAL;
10276 goto done;
10277 }
10278 sctxt = rcd->sc->hw_context;
10279 reg = read_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_ENABLE);
10280 reg &= ~SEND_CTXT_CHECK_ENABLE_CHECK_PARTITION_KEY_SMASK;
10281 write_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_ENABLE, reg);
10282 write_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_PARTITION_KEY, 0);
10283done:
10284 return ret;
10285}
10286
10287/*
10288 * Start doing the clean up the the chip. Our clean up happens in multiple
10289 * stages and this is just the first.
10290 */
10291void hfi1_start_cleanup(struct hfi1_devdata *dd)
10292{
10293 free_cntrs(dd);
10294 free_rcverr(dd);
10295 clean_up_interrupts(dd);
10296}
10297
10298#define HFI_BASE_GUID(dev) \
10299 ((dev)->base_guid & ~(1ULL << GUID_HFI_INDEX_SHIFT))
10300
10301/*
10302 * Certain chip functions need to be initialized only once per asic
10303 * instead of per-device. This function finds the peer device and
10304 * checks whether that chip initialization needs to be done by this
10305 * device.
10306 */
10307static void asic_should_init(struct hfi1_devdata *dd)
10308{
10309 unsigned long flags;
10310 struct hfi1_devdata *tmp, *peer = NULL;
10311
10312 spin_lock_irqsave(&hfi1_devs_lock, flags);
10313 /* Find our peer device */
10314 list_for_each_entry(tmp, &hfi1_dev_list, list) {
10315 if ((HFI_BASE_GUID(dd) == HFI_BASE_GUID(tmp)) &&
10316 dd->unit != tmp->unit) {
10317 peer = tmp;
10318 break;
10319 }
10320 }
10321
10322 /*
10323 * "Claim" the ASIC for initialization if it hasn't been
10324 " "claimed" yet.
10325 */
10326 if (!peer || !(peer->flags & HFI1_DO_INIT_ASIC))
10327 dd->flags |= HFI1_DO_INIT_ASIC;
10328 spin_unlock_irqrestore(&hfi1_devs_lock, flags);
10329}
10330
10331/**
10332 * Allocate an initialize the device structure for the hfi.
10333 * @dev: the pci_dev for hfi1_ib device
10334 * @ent: pci_device_id struct for this dev
10335 *
10336 * Also allocates, initializes, and returns the devdata struct for this
10337 * device instance
10338 *
10339 * This is global, and is called directly at init to set up the
10340 * chip-specific function pointers for later use.
10341 */
10342struct hfi1_devdata *hfi1_init_dd(struct pci_dev *pdev,
10343 const struct pci_device_id *ent)
10344{
10345 struct hfi1_devdata *dd;
10346 struct hfi1_pportdata *ppd;
10347 u64 reg;
10348 int i, ret;
10349 static const char * const inames[] = { /* implementation names */
10350 "RTL silicon",
10351 "RTL VCS simulation",
10352 "RTL FPGA emulation",
10353 "Functional simulator"
10354 };
10355
10356 dd = hfi1_alloc_devdata(pdev,
10357 NUM_IB_PORTS * sizeof(struct hfi1_pportdata));
10358 if (IS_ERR(dd))
10359 goto bail;
10360 ppd = dd->pport;
10361 for (i = 0; i < dd->num_pports; i++, ppd++) {
10362 int vl;
10363 /* init common fields */
10364 hfi1_init_pportdata(pdev, ppd, dd, 0, 1);
10365 /* DC supports 4 link widths */
10366 ppd->link_width_supported =
10367 OPA_LINK_WIDTH_1X | OPA_LINK_WIDTH_2X |
10368 OPA_LINK_WIDTH_3X | OPA_LINK_WIDTH_4X;
10369 ppd->link_width_downgrade_supported =
10370 ppd->link_width_supported;
10371 /* start out enabling only 4X */
10372 ppd->link_width_enabled = OPA_LINK_WIDTH_4X;
10373 ppd->link_width_downgrade_enabled =
10374 ppd->link_width_downgrade_supported;
10375 /* link width active is 0 when link is down */
10376 /* link width downgrade active is 0 when link is down */
10377
10378 if (num_vls < HFI1_MIN_VLS_SUPPORTED
10379 || num_vls > HFI1_MAX_VLS_SUPPORTED) {
10380 hfi1_early_err(&pdev->dev,
10381 "Invalid num_vls %u, using %u VLs\n",
10382 num_vls, HFI1_MAX_VLS_SUPPORTED);
10383 num_vls = HFI1_MAX_VLS_SUPPORTED;
10384 }
10385 ppd->vls_supported = num_vls;
10386 ppd->vls_operational = ppd->vls_supported;
10387 /* Set the default MTU. */
10388 for (vl = 0; vl < num_vls; vl++)
10389 dd->vld[vl].mtu = hfi1_max_mtu;
10390 dd->vld[15].mtu = MAX_MAD_PACKET;
10391 /*
10392 * Set the initial values to reasonable default, will be set
10393 * for real when link is up.
10394 */
10395 ppd->lstate = IB_PORT_DOWN;
10396 ppd->overrun_threshold = 0x4;
10397 ppd->phy_error_threshold = 0xf;
10398 ppd->port_crc_mode_enabled = link_crc_mask;
10399 /* initialize supported LTP CRC mode */
10400 ppd->port_ltp_crc_mode = cap_to_port_ltp(link_crc_mask) << 8;
10401 /* initialize enabled LTP CRC mode */
10402 ppd->port_ltp_crc_mode |= cap_to_port_ltp(link_crc_mask) << 4;
10403 /* start in offline */
10404 ppd->host_link_state = HLS_DN_OFFLINE;
10405 init_vl_arb_caches(ppd);
10406 }
10407
10408 dd->link_default = HLS_DN_POLL;
10409
10410 /*
10411 * Do remaining PCIe setup and save PCIe values in dd.
10412 * Any error printing is already done by the init code.
10413 * On return, we have the chip mapped.
10414 */
10415 ret = hfi1_pcie_ddinit(dd, pdev, ent);
10416 if (ret < 0)
10417 goto bail_free;
10418
10419 /* verify that reads actually work, save revision for reset check */
10420 dd->revision = read_csr(dd, CCE_REVISION);
10421 if (dd->revision == ~(u64)0) {
10422 dd_dev_err(dd, "cannot read chip CSRs\n");
10423 ret = -EINVAL;
10424 goto bail_cleanup;
10425 }
10426 dd->majrev = (dd->revision >> CCE_REVISION_CHIP_REV_MAJOR_SHIFT)
10427 & CCE_REVISION_CHIP_REV_MAJOR_MASK;
10428 dd->minrev = (dd->revision >> CCE_REVISION_CHIP_REV_MINOR_SHIFT)
10429 & CCE_REVISION_CHIP_REV_MINOR_MASK;
10430
10431 /* obtain the hardware ID - NOT related to unit, which is a
10432 software enumeration */
10433 reg = read_csr(dd, CCE_REVISION2);
10434 dd->hfi1_id = (reg >> CCE_REVISION2_HFI_ID_SHIFT)
10435 & CCE_REVISION2_HFI_ID_MASK;
10436 /* the variable size will remove unwanted bits */
10437 dd->icode = reg >> CCE_REVISION2_IMPL_CODE_SHIFT;
10438 dd->irev = reg >> CCE_REVISION2_IMPL_REVISION_SHIFT;
10439 dd_dev_info(dd, "Implementation: %s, revision 0x%x\n",
10440 dd->icode < ARRAY_SIZE(inames) ? inames[dd->icode] : "unknown",
10441 (int)dd->irev);
10442
10443 /* speeds the hardware can support */
10444 dd->pport->link_speed_supported = OPA_LINK_SPEED_25G;
10445 /* speeds allowed to run at */
10446 dd->pport->link_speed_enabled = dd->pport->link_speed_supported;
10447 /* give a reasonable active value, will be set on link up */
10448 dd->pport->link_speed_active = OPA_LINK_SPEED_25G;
10449
10450 dd->chip_rcv_contexts = read_csr(dd, RCV_CONTEXTS);
10451 dd->chip_send_contexts = read_csr(dd, SEND_CONTEXTS);
10452 dd->chip_sdma_engines = read_csr(dd, SEND_DMA_ENGINES);
10453 dd->chip_pio_mem_size = read_csr(dd, SEND_PIO_MEM_SIZE);
10454 dd->chip_sdma_mem_size = read_csr(dd, SEND_DMA_MEM_SIZE);
10455 /* fix up link widths for emulation _p */
10456 ppd = dd->pport;
10457 if (dd->icode == ICODE_FPGA_EMULATION && is_emulator_p(dd)) {
10458 ppd->link_width_supported =
10459 ppd->link_width_enabled =
10460 ppd->link_width_downgrade_supported =
10461 ppd->link_width_downgrade_enabled =
10462 OPA_LINK_WIDTH_1X;
10463 }
10464 /* insure num_vls isn't larger than number of sdma engines */
10465 if (HFI1_CAP_IS_KSET(SDMA) && num_vls > dd->chip_sdma_engines) {
10466 dd_dev_err(dd, "num_vls %u too large, using %u VLs\n",
10467 num_vls, HFI1_MAX_VLS_SUPPORTED);
10468 ppd->vls_supported = num_vls = HFI1_MAX_VLS_SUPPORTED;
10469 ppd->vls_operational = ppd->vls_supported;
10470 }
10471
10472 /*
10473 * Convert the ns parameter to the 64 * cclocks used in the CSR.
10474 * Limit the max if larger than the field holds. If timeout is
10475 * non-zero, then the calculated field will be at least 1.
10476 *
10477 * Must be after icode is set up - the cclock rate depends
10478 * on knowing the hardware being used.
10479 */
10480 dd->rcv_intr_timeout_csr = ns_to_cclock(dd, rcv_intr_timeout) / 64;
10481 if (dd->rcv_intr_timeout_csr >
10482 RCV_AVAIL_TIME_OUT_TIME_OUT_RELOAD_MASK)
10483 dd->rcv_intr_timeout_csr =
10484 RCV_AVAIL_TIME_OUT_TIME_OUT_RELOAD_MASK;
10485 else if (dd->rcv_intr_timeout_csr == 0 && rcv_intr_timeout)
10486 dd->rcv_intr_timeout_csr = 1;
10487
10488 /* obtain chip sizes, reset chip CSRs */
10489 init_chip(dd);
10490
10491 /* read in the PCIe link speed information */
10492 ret = pcie_speeds(dd);
10493 if (ret)
10494 goto bail_cleanup;
10495
10496 /* needs to be done before we look for the peer device */
10497 read_guid(dd);
10498
10499 asic_should_init(dd);
10500
10501 /* read in firmware */
10502 ret = hfi1_firmware_init(dd);
10503 if (ret)
10504 goto bail_cleanup;
10505
10506 /*
10507 * In general, the PCIe Gen3 transition must occur after the
10508 * chip has been idled (so it won't initiate any PCIe transactions
10509 * e.g. an interrupt) and before the driver changes any registers
10510 * (the transition will reset the registers).
10511 *
10512 * In particular, place this call after:
10513 * - init_chip() - the chip will not initiate any PCIe transactions
10514 * - pcie_speeds() - reads the current link speed
10515 * - hfi1_firmware_init() - the needed firmware is ready to be
10516 * downloaded
10517 */
10518 ret = do_pcie_gen3_transition(dd);
10519 if (ret)
10520 goto bail_cleanup;
10521
10522 /* start setting dd values and adjusting CSRs */
10523 init_early_variables(dd);
10524
10525 parse_platform_config(dd);
10526
10527 /* add board names as they are defined */
10528 dd->boardname = kmalloc(64, GFP_KERNEL);
10529 if (!dd->boardname)
10530 goto bail_cleanup;
10531 snprintf(dd->boardname, 64, "Board ID 0x%llx",
10532 dd->revision >> CCE_REVISION_BOARD_ID_LOWER_NIBBLE_SHIFT
10533 & CCE_REVISION_BOARD_ID_LOWER_NIBBLE_MASK);
10534
10535 snprintf(dd->boardversion, BOARD_VERS_MAX,
10536 "ChipABI %u.%u, %s, ChipRev %u.%u, SW Compat %llu\n",
10537 HFI1_CHIP_VERS_MAJ, HFI1_CHIP_VERS_MIN,
10538 dd->boardname,
10539 (u32)dd->majrev,
10540 (u32)dd->minrev,
10541 (dd->revision >> CCE_REVISION_SW_SHIFT)
10542 & CCE_REVISION_SW_MASK);
10543
10544 ret = set_up_context_variables(dd);
10545 if (ret)
10546 goto bail_cleanup;
10547
10548 /* set initial RXE CSRs */
10549 init_rxe(dd);
10550 /* set initial TXE CSRs */
10551 init_txe(dd);
10552 /* set initial non-RXE, non-TXE CSRs */
10553 init_other(dd);
10554 /* set up KDETH QP prefix in both RX and TX CSRs */
10555 init_kdeth_qp(dd);
10556
10557 /* send contexts must be set up before receive contexts */
10558 ret = init_send_contexts(dd);
10559 if (ret)
10560 goto bail_cleanup;
10561
10562 ret = hfi1_create_ctxts(dd);
10563 if (ret)
10564 goto bail_cleanup;
10565
10566 dd->rcvhdrsize = DEFAULT_RCVHDRSIZE;
10567 /*
10568 * rcd[0] is guaranteed to be valid by this point. Also, all
10569 * context are using the same value, as per the module parameter.
10570 */
10571 dd->rhf_offset = dd->rcd[0]->rcvhdrqentsize - sizeof(u64) / sizeof(u32);
10572
10573 ret = init_pervl_scs(dd);
10574 if (ret)
10575 goto bail_cleanup;
10576
10577 /* sdma init */
10578 for (i = 0; i < dd->num_pports; ++i) {
10579 ret = sdma_init(dd, i);
10580 if (ret)
10581 goto bail_cleanup;
10582 }
10583
10584 /* use contexts created by hfi1_create_ctxts */
10585 ret = set_up_interrupts(dd);
10586 if (ret)
10587 goto bail_cleanup;
10588
10589 /* set up LCB access - must be after set_up_interrupts() */
10590 init_lcb_access(dd);
10591
10592 snprintf(dd->serial, SERIAL_MAX, "0x%08llx\n",
10593 dd->base_guid & 0xFFFFFF);
10594
10595 dd->oui1 = dd->base_guid >> 56 & 0xFF;
10596 dd->oui2 = dd->base_guid >> 48 & 0xFF;
10597 dd->oui3 = dd->base_guid >> 40 & 0xFF;
10598
10599 ret = load_firmware(dd); /* asymmetric with dispose_firmware() */
10600 if (ret)
10601 goto bail_clear_intr;
10602 check_fabric_firmware_versions(dd);
10603
10604 thermal_init(dd);
10605
10606 ret = init_cntrs(dd);
10607 if (ret)
10608 goto bail_clear_intr;
10609
10610 ret = init_rcverr(dd);
10611 if (ret)
10612 goto bail_free_cntrs;
10613
10614 ret = eprom_init(dd);
10615 if (ret)
10616 goto bail_free_rcverr;
10617
10618 goto bail;
10619
10620bail_free_rcverr:
10621 free_rcverr(dd);
10622bail_free_cntrs:
10623 free_cntrs(dd);
10624bail_clear_intr:
10625 clean_up_interrupts(dd);
10626bail_cleanup:
10627 hfi1_pcie_ddcleanup(dd);
10628bail_free:
10629 hfi1_free_devdata(dd);
10630 dd = ERR_PTR(ret);
10631bail:
10632 return dd;
10633}
10634
10635static u16 delay_cycles(struct hfi1_pportdata *ppd, u32 desired_egress_rate,
10636 u32 dw_len)
10637{
10638 u32 delta_cycles;
10639 u32 current_egress_rate = ppd->current_egress_rate;
10640 /* rates here are in units of 10^6 bits/sec */
10641
10642 if (desired_egress_rate == -1)
10643 return 0; /* shouldn't happen */
10644
10645 if (desired_egress_rate >= current_egress_rate)
10646 return 0; /* we can't help go faster, only slower */
10647
10648 delta_cycles = egress_cycles(dw_len * 4, desired_egress_rate) -
10649 egress_cycles(dw_len * 4, current_egress_rate);
10650
10651 return (u16)delta_cycles;
10652}
10653
10654
10655/**
10656 * create_pbc - build a pbc for transmission
10657 * @flags: special case flags or-ed in built pbc
10658 * @srate: static rate
10659 * @vl: vl
10660 * @dwlen: dword length (header words + data words + pbc words)
10661 *
10662 * Create a PBC with the given flags, rate, VL, and length.
10663 *
10664 * NOTE: The PBC created will not insert any HCRC - all callers but one are
10665 * for verbs, which does not use this PSM feature. The lone other caller
10666 * is for the diagnostic interface which calls this if the user does not
10667 * supply their own PBC.
10668 */
10669u64 create_pbc(struct hfi1_pportdata *ppd, u64 flags, int srate_mbs, u32 vl,
10670 u32 dw_len)
10671{
10672 u64 pbc, delay = 0;
10673
10674 if (unlikely(srate_mbs))
10675 delay = delay_cycles(ppd, srate_mbs, dw_len);
10676
10677 pbc = flags
10678 | (delay << PBC_STATIC_RATE_CONTROL_COUNT_SHIFT)
10679 | ((u64)PBC_IHCRC_NONE << PBC_INSERT_HCRC_SHIFT)
10680 | (vl & PBC_VL_MASK) << PBC_VL_SHIFT
10681 | (dw_len & PBC_LENGTH_DWS_MASK)
10682 << PBC_LENGTH_DWS_SHIFT;
10683
10684 return pbc;
10685}
10686
10687#define SBUS_THERMAL 0x4f
10688#define SBUS_THERM_MONITOR_MODE 0x1
10689
10690#define THERM_FAILURE(dev, ret, reason) \
10691 dd_dev_err((dd), \
10692 "Thermal sensor initialization failed: %s (%d)\n", \
10693 (reason), (ret))
10694
10695/*
10696 * Initialize the Avago Thermal sensor.
10697 *
10698 * After initialization, enable polling of thermal sensor through
10699 * SBus interface. In order for this to work, the SBus Master
10700 * firmware has to be loaded due to the fact that the HW polling
10701 * logic uses SBus interrupts, which are not supported with
10702 * default firmware. Otherwise, no data will be returned through
10703 * the ASIC_STS_THERM CSR.
10704 */
10705static int thermal_init(struct hfi1_devdata *dd)
10706{
10707 int ret = 0;
10708
10709 if (dd->icode != ICODE_RTL_SILICON ||
10710 !(dd->flags & HFI1_DO_INIT_ASIC))
10711 return ret;
10712
10713 acquire_hw_mutex(dd);
10714 dd_dev_info(dd, "Initializing thermal sensor\n");
10715 /* Thermal Sensor Initialization */
10716 /* Step 1: Reset the Thermal SBus Receiver */
10717 ret = sbus_request_slow(dd, SBUS_THERMAL, 0x0,
10718 RESET_SBUS_RECEIVER, 0);
10719 if (ret) {
10720 THERM_FAILURE(dd, ret, "Bus Reset");
10721 goto done;
10722 }
10723 /* Step 2: Set Reset bit in Thermal block */
10724 ret = sbus_request_slow(dd, SBUS_THERMAL, 0x0,
10725 WRITE_SBUS_RECEIVER, 0x1);
10726 if (ret) {
10727 THERM_FAILURE(dd, ret, "Therm Block Reset");
10728 goto done;
10729 }
10730 /* Step 3: Write clock divider value (100MHz -> 2MHz) */
10731 ret = sbus_request_slow(dd, SBUS_THERMAL, 0x1,
10732 WRITE_SBUS_RECEIVER, 0x32);
10733 if (ret) {
10734 THERM_FAILURE(dd, ret, "Write Clock Div");
10735 goto done;
10736 }
10737 /* Step 4: Select temperature mode */
10738 ret = sbus_request_slow(dd, SBUS_THERMAL, 0x3,
10739 WRITE_SBUS_RECEIVER,
10740 SBUS_THERM_MONITOR_MODE);
10741 if (ret) {
10742 THERM_FAILURE(dd, ret, "Write Mode Sel");
10743 goto done;
10744 }
10745 /* Step 5: De-assert block reset and start conversion */
10746 ret = sbus_request_slow(dd, SBUS_THERMAL, 0x0,
10747 WRITE_SBUS_RECEIVER, 0x2);
10748 if (ret) {
10749 THERM_FAILURE(dd, ret, "Write Reset Deassert");
10750 goto done;
10751 }
10752 /* Step 5.1: Wait for first conversion (21.5ms per spec) */
10753 msleep(22);
10754
10755 /* Enable polling of thermal readings */
10756 write_csr(dd, ASIC_CFG_THERM_POLL_EN, 0x1);
10757done:
10758 release_hw_mutex(dd);
10759 return ret;
10760}
10761
10762static void handle_temp_err(struct hfi1_devdata *dd)
10763{
10764 struct hfi1_pportdata *ppd = &dd->pport[0];
10765 /*
10766 * Thermal Critical Interrupt
10767 * Put the device into forced freeze mode, take link down to
10768 * offline, and put DC into reset.
10769 */
10770 dd_dev_emerg(dd,
10771 "Critical temperature reached! Forcing device into freeze mode!\n");
10772 dd->flags |= HFI1_FORCED_FREEZE;
10773 start_freeze_handling(ppd, FREEZE_SELF|FREEZE_ABORT);
10774 /*
10775 * Shut DC down as much and as quickly as possible.
10776 *
10777 * Step 1: Take the link down to OFFLINE. This will cause the
10778 * 8051 to put the Serdes in reset. However, we don't want to
10779 * go through the entire link state machine since we want to
10780 * shutdown ASAP. Furthermore, this is not a graceful shutdown
10781 * but rather an attempt to save the chip.
10782 * Code below is almost the same as quiet_serdes() but avoids
10783 * all the extra work and the sleeps.
10784 */
10785 ppd->driver_link_ready = 0;
10786 ppd->link_enabled = 0;
10787 set_physical_link_state(dd, PLS_OFFLINE |
10788 (OPA_LINKDOWN_REASON_SMA_DISABLED << 8));
10789 /*
10790 * Step 2: Shutdown LCB and 8051
10791 * After shutdown, do not restore DC_CFG_RESET value.
10792 */
10793 dc_shutdown(dd);
10794}