1 // SPDX-License-Identifier: GPL-2.0
2 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
4 #include <linux/slab.h>
8 /* Read a NIC register from the alternate function. */
9 static u32
ql_read_other_func_reg(struct ql_adapter
*qdev
,
14 unsigned int status
= 0;
16 register_to_read
= MPI_NIC_REG_BLOCK
18 | (qdev
->alt_func
<< MPI_NIC_FUNCTION_SHIFT
)
20 status
= ql_read_mpi_reg(qdev
, register_to_read
, ®_val
);
27 /* Write a NIC register from the alternate function. */
28 static int ql_write_other_func_reg(struct ql_adapter
*qdev
,
34 register_to_read
= MPI_NIC_REG_BLOCK
36 | (qdev
->alt_func
<< MPI_NIC_FUNCTION_SHIFT
)
38 status
= ql_write_mpi_reg(qdev
, register_to_read
, reg_val
);
43 static int ql_wait_other_func_reg_rdy(struct ql_adapter
*qdev
, u32 reg
,
50 temp
= ql_read_other_func_reg(qdev
, reg
);
52 /* check for errors */
63 static int ql_read_other_func_serdes_reg(struct ql_adapter
*qdev
, u32 reg
,
68 /* wait for reg to come ready */
69 status
= ql_wait_other_func_reg_rdy(qdev
, XG_SERDES_ADDR
/ 4,
70 XG_SERDES_ADDR_RDY
, 0);
74 /* set up for reg read */
75 ql_write_other_func_reg(qdev
, XG_SERDES_ADDR
/4, reg
| PROC_ADDR_R
);
77 /* wait for reg to come ready */
78 status
= ql_wait_other_func_reg_rdy(qdev
, XG_SERDES_ADDR
/ 4,
79 XG_SERDES_ADDR_RDY
, 0);
84 *data
= ql_read_other_func_reg(qdev
, (XG_SERDES_DATA
/ 4));
89 /* Read out the SERDES registers */
90 static int ql_read_serdes_reg(struct ql_adapter
*qdev
, u32 reg
, u32
*data
)
94 /* wait for reg to come ready */
95 status
= ql_wait_reg_rdy(qdev
, XG_SERDES_ADDR
, XG_SERDES_ADDR_RDY
, 0);
99 /* set up for reg read */
100 ql_write32(qdev
, XG_SERDES_ADDR
, reg
| PROC_ADDR_R
);
102 /* wait for reg to come ready */
103 status
= ql_wait_reg_rdy(qdev
, XG_SERDES_ADDR
, XG_SERDES_ADDR_RDY
, 0);
108 *data
= ql_read32(qdev
, XG_SERDES_DATA
);
113 static void ql_get_both_serdes(struct ql_adapter
*qdev
, u32 addr
,
114 u32
*direct_ptr
, u32
*indirect_ptr
,
115 unsigned int direct_valid
, unsigned int indirect_valid
)
121 status
= ql_read_serdes_reg(qdev
, addr
, direct_ptr
);
122 /* Dead fill any failures or invalids. */
124 *direct_ptr
= 0xDEADBEEF;
128 status
= ql_read_other_func_serdes_reg(
129 qdev
, addr
, indirect_ptr
);
130 /* Dead fill any failures or invalids. */
132 *indirect_ptr
= 0xDEADBEEF;
135 static int ql_get_serdes_regs(struct ql_adapter
*qdev
,
136 struct ql_mpi_coredump
*mpi_coredump
)
139 unsigned int xfi_direct_valid
, xfi_indirect_valid
, xaui_direct_valid
;
140 unsigned int xaui_indirect_valid
, i
;
141 u32
*direct_ptr
, temp
;
144 xfi_direct_valid
= xfi_indirect_valid
= 0;
145 xaui_direct_valid
= xaui_indirect_valid
= 1;
147 /* The XAUI needs to be read out per port */
148 status
= ql_read_other_func_serdes_reg(qdev
,
149 XG_SERDES_XAUI_HSS_PCS_START
, &temp
);
151 temp
= XG_SERDES_ADDR_XAUI_PWR_DOWN
;
153 if ((temp
& XG_SERDES_ADDR_XAUI_PWR_DOWN
) ==
154 XG_SERDES_ADDR_XAUI_PWR_DOWN
)
155 xaui_indirect_valid
= 0;
157 status
= ql_read_serdes_reg(qdev
, XG_SERDES_XAUI_HSS_PCS_START
, &temp
);
160 temp
= XG_SERDES_ADDR_XAUI_PWR_DOWN
;
162 if ((temp
& XG_SERDES_ADDR_XAUI_PWR_DOWN
) ==
163 XG_SERDES_ADDR_XAUI_PWR_DOWN
)
164 xaui_direct_valid
= 0;
167 * XFI register is shared so only need to read one
168 * functions and then check the bits.
170 status
= ql_read_serdes_reg(qdev
, XG_SERDES_ADDR_STS
, &temp
);
174 if ((temp
& XG_SERDES_ADDR_XFI1_PWR_UP
) ==
175 XG_SERDES_ADDR_XFI1_PWR_UP
) {
176 /* now see if i'm NIC 1 or NIC 2 */
178 /* I'm NIC 2, so the indirect (NIC1) xfi is up. */
179 xfi_indirect_valid
= 1;
181 xfi_direct_valid
= 1;
183 if ((temp
& XG_SERDES_ADDR_XFI2_PWR_UP
) ==
184 XG_SERDES_ADDR_XFI2_PWR_UP
) {
185 /* now see if i'm NIC 1 or NIC 2 */
187 /* I'm NIC 2, so the indirect (NIC1) xfi is up. */
188 xfi_direct_valid
= 1;
190 xfi_indirect_valid
= 1;
193 /* Get XAUI_AN register block. */
194 if (qdev
->func
& 1) {
195 /* Function 2 is direct */
196 direct_ptr
= mpi_coredump
->serdes2_xaui_an
;
197 indirect_ptr
= mpi_coredump
->serdes_xaui_an
;
199 /* Function 1 is direct */
200 direct_ptr
= mpi_coredump
->serdes_xaui_an
;
201 indirect_ptr
= mpi_coredump
->serdes2_xaui_an
;
204 for (i
= 0; i
<= 0x000000034; i
+= 4, direct_ptr
++, indirect_ptr
++)
205 ql_get_both_serdes(qdev
, i
, direct_ptr
, indirect_ptr
,
206 xaui_direct_valid
, xaui_indirect_valid
);
208 /* Get XAUI_HSS_PCS register block. */
209 if (qdev
->func
& 1) {
211 mpi_coredump
->serdes2_xaui_hss_pcs
;
213 mpi_coredump
->serdes_xaui_hss_pcs
;
216 mpi_coredump
->serdes_xaui_hss_pcs
;
218 mpi_coredump
->serdes2_xaui_hss_pcs
;
221 for (i
= 0x800; i
<= 0x880; i
+= 4, direct_ptr
++, indirect_ptr
++)
222 ql_get_both_serdes(qdev
, i
, direct_ptr
, indirect_ptr
,
223 xaui_direct_valid
, xaui_indirect_valid
);
225 /* Get XAUI_XFI_AN register block. */
226 if (qdev
->func
& 1) {
227 direct_ptr
= mpi_coredump
->serdes2_xfi_an
;
228 indirect_ptr
= mpi_coredump
->serdes_xfi_an
;
230 direct_ptr
= mpi_coredump
->serdes_xfi_an
;
231 indirect_ptr
= mpi_coredump
->serdes2_xfi_an
;
234 for (i
= 0x1000; i
<= 0x1034; i
+= 4, direct_ptr
++, indirect_ptr
++)
235 ql_get_both_serdes(qdev
, i
, direct_ptr
, indirect_ptr
,
236 xfi_direct_valid
, xfi_indirect_valid
);
238 /* Get XAUI_XFI_TRAIN register block. */
239 if (qdev
->func
& 1) {
240 direct_ptr
= mpi_coredump
->serdes2_xfi_train
;
242 mpi_coredump
->serdes_xfi_train
;
244 direct_ptr
= mpi_coredump
->serdes_xfi_train
;
246 mpi_coredump
->serdes2_xfi_train
;
249 for (i
= 0x1050; i
<= 0x107c; i
+= 4, direct_ptr
++, indirect_ptr
++)
250 ql_get_both_serdes(qdev
, i
, direct_ptr
, indirect_ptr
,
251 xfi_direct_valid
, xfi_indirect_valid
);
253 /* Get XAUI_XFI_HSS_PCS register block. */
254 if (qdev
->func
& 1) {
256 mpi_coredump
->serdes2_xfi_hss_pcs
;
258 mpi_coredump
->serdes_xfi_hss_pcs
;
261 mpi_coredump
->serdes_xfi_hss_pcs
;
263 mpi_coredump
->serdes2_xfi_hss_pcs
;
266 for (i
= 0x1800; i
<= 0x1838; i
+= 4, direct_ptr
++, indirect_ptr
++)
267 ql_get_both_serdes(qdev
, i
, direct_ptr
, indirect_ptr
,
268 xfi_direct_valid
, xfi_indirect_valid
);
270 /* Get XAUI_XFI_HSS_TX register block. */
271 if (qdev
->func
& 1) {
273 mpi_coredump
->serdes2_xfi_hss_tx
;
275 mpi_coredump
->serdes_xfi_hss_tx
;
277 direct_ptr
= mpi_coredump
->serdes_xfi_hss_tx
;
279 mpi_coredump
->serdes2_xfi_hss_tx
;
281 for (i
= 0x1c00; i
<= 0x1c1f; i
++, direct_ptr
++, indirect_ptr
++)
282 ql_get_both_serdes(qdev
, i
, direct_ptr
, indirect_ptr
,
283 xfi_direct_valid
, xfi_indirect_valid
);
285 /* Get XAUI_XFI_HSS_RX register block. */
286 if (qdev
->func
& 1) {
288 mpi_coredump
->serdes2_xfi_hss_rx
;
290 mpi_coredump
->serdes_xfi_hss_rx
;
292 direct_ptr
= mpi_coredump
->serdes_xfi_hss_rx
;
294 mpi_coredump
->serdes2_xfi_hss_rx
;
297 for (i
= 0x1c40; i
<= 0x1c5f; i
++, direct_ptr
++, indirect_ptr
++)
298 ql_get_both_serdes(qdev
, i
, direct_ptr
, indirect_ptr
,
299 xfi_direct_valid
, xfi_indirect_valid
);
302 /* Get XAUI_XFI_HSS_PLL register block. */
303 if (qdev
->func
& 1) {
305 mpi_coredump
->serdes2_xfi_hss_pll
;
307 mpi_coredump
->serdes_xfi_hss_pll
;
310 mpi_coredump
->serdes_xfi_hss_pll
;
312 mpi_coredump
->serdes2_xfi_hss_pll
;
314 for (i
= 0x1e00; i
<= 0x1e1f; i
++, direct_ptr
++, indirect_ptr
++)
315 ql_get_both_serdes(qdev
, i
, direct_ptr
, indirect_ptr
,
316 xfi_direct_valid
, xfi_indirect_valid
);
320 static int ql_read_other_func_xgmac_reg(struct ql_adapter
*qdev
, u32 reg
,
325 /* wait for reg to come ready */
326 status
= ql_wait_other_func_reg_rdy(qdev
, XGMAC_ADDR
/ 4,
327 XGMAC_ADDR_RDY
, XGMAC_ADDR_XME
);
331 /* set up for reg read */
332 ql_write_other_func_reg(qdev
, XGMAC_ADDR
/ 4, reg
| XGMAC_ADDR_R
);
334 /* wait for reg to come ready */
335 status
= ql_wait_other_func_reg_rdy(qdev
, XGMAC_ADDR
/ 4,
336 XGMAC_ADDR_RDY
, XGMAC_ADDR_XME
);
341 *data
= ql_read_other_func_reg(qdev
, XGMAC_DATA
/ 4);
346 /* Read the 400 xgmac control/statistics registers
347 * skipping unused locations.
349 static int ql_get_xgmac_regs(struct ql_adapter
*qdev
, u32
*buf
,
350 unsigned int other_function
)
355 for (i
= PAUSE_SRC_LO
; i
< XGMAC_REGISTER_END
; i
+= 4, buf
++) {
356 /* We're reading 400 xgmac registers, but we filter out
357 * serveral locations that are non-responsive to reads.
359 if ((i
== 0x00000114) ||
363 (i
> 0x00000150 && i
< 0x000001fc) ||
364 (i
> 0x00000278 && i
< 0x000002a0) ||
365 (i
> 0x000002c0 && i
< 0x000002cf) ||
366 (i
> 0x000002dc && i
< 0x000002f0) ||
367 (i
> 0x000003c8 && i
< 0x00000400) ||
368 (i
> 0x00000400 && i
< 0x00000410) ||
369 (i
> 0x00000410 && i
< 0x00000420) ||
370 (i
> 0x00000420 && i
< 0x00000430) ||
371 (i
> 0x00000430 && i
< 0x00000440) ||
372 (i
> 0x00000440 && i
< 0x00000450) ||
373 (i
> 0x00000450 && i
< 0x00000500) ||
374 (i
> 0x0000054c && i
< 0x00000568) ||
375 (i
> 0x000005c8 && i
< 0x00000600)) {
378 ql_read_other_func_xgmac_reg(qdev
, i
, buf
);
380 status
= ql_read_xgmac_reg(qdev
, i
, buf
);
390 static int ql_get_ets_regs(struct ql_adapter
*qdev
, u32
*buf
)
395 for (i
= 0; i
< 8; i
++, buf
++) {
396 ql_write32(qdev
, NIC_ETS
, i
<< 29 | 0x08000000);
397 *buf
= ql_read32(qdev
, NIC_ETS
);
400 for (i
= 0; i
< 2; i
++, buf
++) {
401 ql_write32(qdev
, CNA_ETS
, i
<< 29 | 0x08000000);
402 *buf
= ql_read32(qdev
, CNA_ETS
);
408 static void ql_get_intr_states(struct ql_adapter
*qdev
, u32
*buf
)
412 for (i
= 0; i
< qdev
->rx_ring_count
; i
++, buf
++) {
413 ql_write32(qdev
, INTR_EN
,
414 qdev
->intr_context
[i
].intr_read_mask
);
415 *buf
= ql_read32(qdev
, INTR_EN
);
419 static int ql_get_cam_entries(struct ql_adapter
*qdev
, u32
*buf
)
424 status
= ql_sem_spinlock(qdev
, SEM_MAC_ADDR_MASK
);
428 for (i
= 0; i
< 16; i
++) {
429 status
= ql_get_mac_addr_reg(qdev
,
430 MAC_ADDR_TYPE_CAM_MAC
, i
, value
);
432 netif_err(qdev
, drv
, qdev
->ndev
,
433 "Failed read of mac index register\n");
436 *buf
++ = value
[0]; /* lower MAC address */
437 *buf
++ = value
[1]; /* upper MAC address */
438 *buf
++ = value
[2]; /* output */
440 for (i
= 0; i
< 32; i
++) {
441 status
= ql_get_mac_addr_reg(qdev
,
442 MAC_ADDR_TYPE_MULTI_MAC
, i
, value
);
444 netif_err(qdev
, drv
, qdev
->ndev
,
445 "Failed read of mac index register\n");
448 *buf
++ = value
[0]; /* lower Mcast address */
449 *buf
++ = value
[1]; /* upper Mcast address */
452 ql_sem_unlock(qdev
, SEM_MAC_ADDR_MASK
);
456 static int ql_get_routing_entries(struct ql_adapter
*qdev
, u32
*buf
)
461 status
= ql_sem_spinlock(qdev
, SEM_RT_IDX_MASK
);
465 for (i
= 0; i
< 16; i
++) {
466 status
= ql_get_routing_reg(qdev
, i
, &value
);
468 netif_err(qdev
, drv
, qdev
->ndev
,
469 "Failed read of routing index register\n");
476 ql_sem_unlock(qdev
, SEM_RT_IDX_MASK
);
480 /* Read the MPI Processor shadow registers */
481 static int ql_get_mpi_shadow_regs(struct ql_adapter
*qdev
, u32
*buf
)
486 for (i
= 0; i
< MPI_CORE_SH_REGS_CNT
; i
++, buf
++) {
487 status
= ql_write_mpi_reg(qdev
, RISC_124
,
488 (SHADOW_OFFSET
| i
<< SHADOW_REG_SHIFT
));
491 status
= ql_read_mpi_reg(qdev
, RISC_127
, buf
);
499 /* Read the MPI Processor core registers */
500 static int ql_get_mpi_regs(struct ql_adapter
*qdev
, u32
*buf
,
501 u32 offset
, u32 count
)
504 for (i
= 0; i
< count
; i
++, buf
++) {
505 status
= ql_read_mpi_reg(qdev
, offset
+ i
, buf
);
512 /* Read the ASIC probe dump */
513 static unsigned int *ql_get_probe(struct ql_adapter
*qdev
, u32 clock
,
516 u32 module
, mux_sel
, probe
, lo_val
, hi_val
;
518 for (module
= 0; module
< PRB_MX_ADDR_MAX_MODS
; module
++) {
519 if (!((valid
>> module
) & 1))
521 for (mux_sel
= 0; mux_sel
< PRB_MX_ADDR_MAX_MUX
; mux_sel
++) {
525 | (module
<< PRB_MX_ADDR_MOD_SEL_SHIFT
);
526 ql_write32(qdev
, PRB_MX_ADDR
, probe
);
527 lo_val
= ql_read32(qdev
, PRB_MX_DATA
);
532 probe
|= PRB_MX_ADDR_UP
;
533 ql_write32(qdev
, PRB_MX_ADDR
, probe
);
534 hi_val
= ql_read32(qdev
, PRB_MX_DATA
);
544 static int ql_get_probe_dump(struct ql_adapter
*qdev
, unsigned int *buf
)
546 /* First we have to enable the probe mux */
547 ql_write_mpi_reg(qdev
, MPI_TEST_FUNC_PRB_CTL
, MPI_TEST_FUNC_PRB_EN
);
548 buf
= ql_get_probe(qdev
, PRB_MX_ADDR_SYS_CLOCK
,
549 PRB_MX_ADDR_VALID_SYS_MOD
, buf
);
550 buf
= ql_get_probe(qdev
, PRB_MX_ADDR_PCI_CLOCK
,
551 PRB_MX_ADDR_VALID_PCI_MOD
, buf
);
552 buf
= ql_get_probe(qdev
, PRB_MX_ADDR_XGM_CLOCK
,
553 PRB_MX_ADDR_VALID_XGM_MOD
, buf
);
554 buf
= ql_get_probe(qdev
, PRB_MX_ADDR_FC_CLOCK
,
555 PRB_MX_ADDR_VALID_FC_MOD
, buf
);
560 /* Read out the routing index registers */
561 static int ql_get_routing_index_registers(struct ql_adapter
*qdev
, u32
*buf
)
564 u32 type
, index
, index_max
;
569 status
= ql_sem_spinlock(qdev
, SEM_RT_IDX_MASK
);
573 for (type
= 0; type
< 4; type
++) {
578 for (index
= 0; index
< index_max
; index
++) {
580 | (type
<< RT_IDX_TYPE_SHIFT
)
581 | (index
<< RT_IDX_IDX_SHIFT
);
582 ql_write32(qdev
, RT_IDX
, val
);
584 while ((result_index
& RT_IDX_MR
) == 0)
585 result_index
= ql_read32(qdev
, RT_IDX
);
586 result_data
= ql_read32(qdev
, RT_DATA
);
597 ql_sem_unlock(qdev
, SEM_RT_IDX_MASK
);
601 /* Read out the MAC protocol registers */
602 static void ql_get_mac_protocol_registers(struct ql_adapter
*qdev
, u32
*buf
)
604 u32 result_index
, result_data
;
609 u32 initial_val
= MAC_ADDR_RS
;
613 for (type
= 0; type
< MAC_ADDR_TYPE_COUNT
; type
++) {
617 initial_val
|= MAC_ADDR_ADR
;
618 max_index
= MAC_ADDR_MAX_CAM_ENTRIES
;
619 max_offset
= MAC_ADDR_MAX_CAM_WCOUNT
;
621 case 1: /* Multicast MAC Address */
622 max_index
= MAC_ADDR_MAX_CAM_WCOUNT
;
623 max_offset
= MAC_ADDR_MAX_CAM_WCOUNT
;
625 case 2: /* VLAN filter mask */
626 case 3: /* MC filter mask */
627 max_index
= MAC_ADDR_MAX_CAM_WCOUNT
;
628 max_offset
= MAC_ADDR_MAX_CAM_WCOUNT
;
630 case 4: /* FC MAC addresses */
631 max_index
= MAC_ADDR_MAX_FC_MAC_ENTRIES
;
632 max_offset
= MAC_ADDR_MAX_FC_MAC_WCOUNT
;
634 case 5: /* Mgmt MAC addresses */
635 max_index
= MAC_ADDR_MAX_MGMT_MAC_ENTRIES
;
636 max_offset
= MAC_ADDR_MAX_MGMT_MAC_WCOUNT
;
638 case 6: /* Mgmt VLAN addresses */
639 max_index
= MAC_ADDR_MAX_MGMT_VLAN_ENTRIES
;
640 max_offset
= MAC_ADDR_MAX_MGMT_VLAN_WCOUNT
;
642 case 7: /* Mgmt IPv4 address */
643 max_index
= MAC_ADDR_MAX_MGMT_V4_ENTRIES
;
644 max_offset
= MAC_ADDR_MAX_MGMT_V4_WCOUNT
;
646 case 8: /* Mgmt IPv6 address */
647 max_index
= MAC_ADDR_MAX_MGMT_V6_ENTRIES
;
648 max_offset
= MAC_ADDR_MAX_MGMT_V6_WCOUNT
;
650 case 9: /* Mgmt TCP/UDP Dest port */
651 max_index
= MAC_ADDR_MAX_MGMT_TU_DP_ENTRIES
;
652 max_offset
= MAC_ADDR_MAX_MGMT_TU_DP_WCOUNT
;
655 pr_err("Bad type!!! 0x%08x\n", type
);
660 for (index
= 0; index
< max_index
; index
++) {
661 for (offset
= 0; offset
< max_offset
; offset
++) {
663 | (type
<< MAC_ADDR_TYPE_SHIFT
)
664 | (index
<< MAC_ADDR_IDX_SHIFT
)
666 ql_write32(qdev
, MAC_ADDR_IDX
, val
);
668 while ((result_index
& MAC_ADDR_MR
) == 0) {
669 result_index
= ql_read32(qdev
,
672 result_data
= ql_read32(qdev
, MAC_ADDR_DATA
);
682 static void ql_get_sem_registers(struct ql_adapter
*qdev
, u32
*buf
)
684 u32 func_num
, reg
, reg_val
;
687 for (func_num
= 0; func_num
< MAX_SEMAPHORE_FUNCTIONS
; func_num
++) {
688 reg
= MPI_NIC_REG_BLOCK
689 | (func_num
<< MPI_NIC_FUNCTION_SHIFT
)
691 status
= ql_read_mpi_reg(qdev
, reg
, ®_val
);
693 /* if the read failed then dead fill the element. */
700 /* Create a coredump segment header */
701 static void ql_build_coredump_seg_header(
702 struct mpi_coredump_segment_header
*seg_hdr
,
703 u32 seg_number
, u32 seg_size
, u8
*desc
)
705 memset(seg_hdr
, 0, sizeof(struct mpi_coredump_segment_header
));
706 seg_hdr
->cookie
= MPI_COREDUMP_COOKIE
;
707 seg_hdr
->segNum
= seg_number
;
708 seg_hdr
->segSize
= seg_size
;
709 strncpy(seg_hdr
->description
, desc
, (sizeof(seg_hdr
->description
)) - 1);
713 * This function should be called when a coredump / probedump
714 * is to be extracted from the HBA. It is assumed there is a
715 * qdev structure that contains the base address of the register
716 * space for this function as well as a coredump structure that
717 * will contain the dump.
719 int ql_core_dump(struct ql_adapter
*qdev
, struct ql_mpi_coredump
*mpi_coredump
)
725 netif_err(qdev
, drv
, qdev
->ndev
, "No memory allocated\n");
729 /* Try to get the spinlock, but dont worry if
730 * it isn't available. If the firmware died it
731 * might be holding the sem.
733 ql_sem_spinlock(qdev
, SEM_PROC_REG_MASK
);
735 status
= ql_pause_mpi_risc(qdev
);
737 netif_err(qdev
, drv
, qdev
->ndev
,
738 "Failed RISC pause. Status = 0x%.08x\n", status
);
742 /* Insert the global header */
743 memset(&(mpi_coredump
->mpi_global_header
), 0,
744 sizeof(struct mpi_coredump_global_header
));
745 mpi_coredump
->mpi_global_header
.cookie
= MPI_COREDUMP_COOKIE
;
746 mpi_coredump
->mpi_global_header
.headerSize
=
747 sizeof(struct mpi_coredump_global_header
);
748 mpi_coredump
->mpi_global_header
.imageSize
=
749 sizeof(struct ql_mpi_coredump
);
750 strncpy(mpi_coredump
->mpi_global_header
.idString
, "MPI Coredump",
751 sizeof(mpi_coredump
->mpi_global_header
.idString
));
753 /* Get generic NIC reg dump */
754 ql_build_coredump_seg_header(&mpi_coredump
->nic_regs_seg_hdr
,
755 NIC1_CONTROL_SEG_NUM
,
756 sizeof(struct mpi_coredump_segment_header
) +
757 sizeof(mpi_coredump
->nic_regs
), "NIC1 Registers");
759 ql_build_coredump_seg_header(&mpi_coredump
->nic2_regs_seg_hdr
,
760 NIC2_CONTROL_SEG_NUM
,
761 sizeof(struct mpi_coredump_segment_header
) +
762 sizeof(mpi_coredump
->nic2_regs
), "NIC2 Registers");
764 /* Get XGMac registers. (Segment 18, Rev C. step 21) */
765 ql_build_coredump_seg_header(&mpi_coredump
->xgmac1_seg_hdr
,
767 sizeof(struct mpi_coredump_segment_header
) +
768 sizeof(mpi_coredump
->xgmac1
), "NIC1 XGMac Registers");
770 ql_build_coredump_seg_header(&mpi_coredump
->xgmac2_seg_hdr
,
772 sizeof(struct mpi_coredump_segment_header
) +
773 sizeof(mpi_coredump
->xgmac2
), "NIC2 XGMac Registers");
775 if (qdev
->func
& 1) {
776 /* Odd means our function is NIC 2 */
777 for (i
= 0; i
< NIC_REGS_DUMP_WORD_COUNT
; i
++)
778 mpi_coredump
->nic2_regs
[i
] =
779 ql_read32(qdev
, i
* sizeof(u32
));
781 for (i
= 0; i
< NIC_REGS_DUMP_WORD_COUNT
; i
++)
782 mpi_coredump
->nic_regs
[i
] =
783 ql_read_other_func_reg(qdev
, (i
* sizeof(u32
)) / 4);
785 ql_get_xgmac_regs(qdev
, &mpi_coredump
->xgmac2
[0], 0);
786 ql_get_xgmac_regs(qdev
, &mpi_coredump
->xgmac1
[0], 1);
788 /* Even means our function is NIC 1 */
789 for (i
= 0; i
< NIC_REGS_DUMP_WORD_COUNT
; i
++)
790 mpi_coredump
->nic_regs
[i
] =
791 ql_read32(qdev
, i
* sizeof(u32
));
792 for (i
= 0; i
< NIC_REGS_DUMP_WORD_COUNT
; i
++)
793 mpi_coredump
->nic2_regs
[i
] =
794 ql_read_other_func_reg(qdev
, (i
* sizeof(u32
)) / 4);
796 ql_get_xgmac_regs(qdev
, &mpi_coredump
->xgmac1
[0], 0);
797 ql_get_xgmac_regs(qdev
, &mpi_coredump
->xgmac2
[0], 1);
800 /* Rev C. Step 20a */
801 ql_build_coredump_seg_header(&mpi_coredump
->xaui_an_hdr
,
803 sizeof(struct mpi_coredump_segment_header
) +
804 sizeof(mpi_coredump
->serdes_xaui_an
),
805 "XAUI AN Registers");
807 /* Rev C. Step 20b */
808 ql_build_coredump_seg_header(&mpi_coredump
->xaui_hss_pcs_hdr
,
809 XAUI_HSS_PCS_SEG_NUM
,
810 sizeof(struct mpi_coredump_segment_header
) +
811 sizeof(mpi_coredump
->serdes_xaui_hss_pcs
),
812 "XAUI HSS PCS Registers");
814 ql_build_coredump_seg_header(&mpi_coredump
->xfi_an_hdr
, XFI_AN_SEG_NUM
,
815 sizeof(struct mpi_coredump_segment_header
) +
816 sizeof(mpi_coredump
->serdes_xfi_an
),
819 ql_build_coredump_seg_header(&mpi_coredump
->xfi_train_hdr
,
821 sizeof(struct mpi_coredump_segment_header
) +
822 sizeof(mpi_coredump
->serdes_xfi_train
),
823 "XFI TRAIN Registers");
825 ql_build_coredump_seg_header(&mpi_coredump
->xfi_hss_pcs_hdr
,
827 sizeof(struct mpi_coredump_segment_header
) +
828 sizeof(mpi_coredump
->serdes_xfi_hss_pcs
),
829 "XFI HSS PCS Registers");
831 ql_build_coredump_seg_header(&mpi_coredump
->xfi_hss_tx_hdr
,
833 sizeof(struct mpi_coredump_segment_header
) +
834 sizeof(mpi_coredump
->serdes_xfi_hss_tx
),
835 "XFI HSS TX Registers");
837 ql_build_coredump_seg_header(&mpi_coredump
->xfi_hss_rx_hdr
,
839 sizeof(struct mpi_coredump_segment_header
) +
840 sizeof(mpi_coredump
->serdes_xfi_hss_rx
),
841 "XFI HSS RX Registers");
843 ql_build_coredump_seg_header(&mpi_coredump
->xfi_hss_pll_hdr
,
845 sizeof(struct mpi_coredump_segment_header
) +
846 sizeof(mpi_coredump
->serdes_xfi_hss_pll
),
847 "XFI HSS PLL Registers");
849 ql_build_coredump_seg_header(&mpi_coredump
->xaui2_an_hdr
,
851 sizeof(struct mpi_coredump_segment_header
) +
852 sizeof(mpi_coredump
->serdes2_xaui_an
),
853 "XAUI2 AN Registers");
855 ql_build_coredump_seg_header(&mpi_coredump
->xaui2_hss_pcs_hdr
,
856 XAUI2_HSS_PCS_SEG_NUM
,
857 sizeof(struct mpi_coredump_segment_header
) +
858 sizeof(mpi_coredump
->serdes2_xaui_hss_pcs
),
859 "XAUI2 HSS PCS Registers");
861 ql_build_coredump_seg_header(&mpi_coredump
->xfi2_an_hdr
,
863 sizeof(struct mpi_coredump_segment_header
) +
864 sizeof(mpi_coredump
->serdes2_xfi_an
),
865 "XFI2 AN Registers");
867 ql_build_coredump_seg_header(&mpi_coredump
->xfi2_train_hdr
,
869 sizeof(struct mpi_coredump_segment_header
) +
870 sizeof(mpi_coredump
->serdes2_xfi_train
),
871 "XFI2 TRAIN Registers");
873 ql_build_coredump_seg_header(&mpi_coredump
->xfi2_hss_pcs_hdr
,
874 XFI2_HSS_PCS_SEG_NUM
,
875 sizeof(struct mpi_coredump_segment_header
) +
876 sizeof(mpi_coredump
->serdes2_xfi_hss_pcs
),
877 "XFI2 HSS PCS Registers");
879 ql_build_coredump_seg_header(&mpi_coredump
->xfi2_hss_tx_hdr
,
881 sizeof(struct mpi_coredump_segment_header
) +
882 sizeof(mpi_coredump
->serdes2_xfi_hss_tx
),
883 "XFI2 HSS TX Registers");
885 ql_build_coredump_seg_header(&mpi_coredump
->xfi2_hss_rx_hdr
,
887 sizeof(struct mpi_coredump_segment_header
) +
888 sizeof(mpi_coredump
->serdes2_xfi_hss_rx
),
889 "XFI2 HSS RX Registers");
891 ql_build_coredump_seg_header(&mpi_coredump
->xfi2_hss_pll_hdr
,
892 XFI2_HSS_PLL_SEG_NUM
,
893 sizeof(struct mpi_coredump_segment_header
) +
894 sizeof(mpi_coredump
->serdes2_xfi_hss_pll
),
895 "XFI2 HSS PLL Registers");
897 status
= ql_get_serdes_regs(qdev
, mpi_coredump
);
899 netif_err(qdev
, drv
, qdev
->ndev
,
900 "Failed Dump of Serdes Registers. Status = 0x%.08x\n",
905 ql_build_coredump_seg_header(&mpi_coredump
->core_regs_seg_hdr
,
907 sizeof(mpi_coredump
->core_regs_seg_hdr
) +
908 sizeof(mpi_coredump
->mpi_core_regs
) +
909 sizeof(mpi_coredump
->mpi_core_sh_regs
),
912 /* Get the MPI Core Registers */
913 status
= ql_get_mpi_regs(qdev
, &mpi_coredump
->mpi_core_regs
[0],
914 MPI_CORE_REGS_ADDR
, MPI_CORE_REGS_CNT
);
917 /* Get the 16 MPI shadow registers */
918 status
= ql_get_mpi_shadow_regs(qdev
,
919 &mpi_coredump
->mpi_core_sh_regs
[0]);
923 /* Get the Test Logic Registers */
924 ql_build_coredump_seg_header(&mpi_coredump
->test_logic_regs_seg_hdr
,
926 sizeof(struct mpi_coredump_segment_header
)
927 + sizeof(mpi_coredump
->test_logic_regs
),
929 status
= ql_get_mpi_regs(qdev
, &mpi_coredump
->test_logic_regs
[0],
930 TEST_REGS_ADDR
, TEST_REGS_CNT
);
934 /* Get the RMII Registers */
935 ql_build_coredump_seg_header(&mpi_coredump
->rmii_regs_seg_hdr
,
937 sizeof(struct mpi_coredump_segment_header
)
938 + sizeof(mpi_coredump
->rmii_regs
),
940 status
= ql_get_mpi_regs(qdev
, &mpi_coredump
->rmii_regs
[0],
941 RMII_REGS_ADDR
, RMII_REGS_CNT
);
945 /* Get the FCMAC1 Registers */
946 ql_build_coredump_seg_header(&mpi_coredump
->fcmac1_regs_seg_hdr
,
948 sizeof(struct mpi_coredump_segment_header
)
949 + sizeof(mpi_coredump
->fcmac1_regs
),
951 status
= ql_get_mpi_regs(qdev
, &mpi_coredump
->fcmac1_regs
[0],
952 FCMAC1_REGS_ADDR
, FCMAC_REGS_CNT
);
956 /* Get the FCMAC2 Registers */
958 ql_build_coredump_seg_header(&mpi_coredump
->fcmac2_regs_seg_hdr
,
960 sizeof(struct mpi_coredump_segment_header
)
961 + sizeof(mpi_coredump
->fcmac2_regs
),
964 status
= ql_get_mpi_regs(qdev
, &mpi_coredump
->fcmac2_regs
[0],
965 FCMAC2_REGS_ADDR
, FCMAC_REGS_CNT
);
969 /* Get the FC1 MBX Registers */
970 ql_build_coredump_seg_header(&mpi_coredump
->fc1_mbx_regs_seg_hdr
,
972 sizeof(struct mpi_coredump_segment_header
)
973 + sizeof(mpi_coredump
->fc1_mbx_regs
),
975 status
= ql_get_mpi_regs(qdev
, &mpi_coredump
->fc1_mbx_regs
[0],
976 FC1_MBX_REGS_ADDR
, FC_MBX_REGS_CNT
);
980 /* Get the IDE Registers */
981 ql_build_coredump_seg_header(&mpi_coredump
->ide_regs_seg_hdr
,
983 sizeof(struct mpi_coredump_segment_header
)
984 + sizeof(mpi_coredump
->ide_regs
),
986 status
= ql_get_mpi_regs(qdev
, &mpi_coredump
->ide_regs
[0],
987 IDE_REGS_ADDR
, IDE_REGS_CNT
);
991 /* Get the NIC1 MBX Registers */
992 ql_build_coredump_seg_header(&mpi_coredump
->nic1_mbx_regs_seg_hdr
,
994 sizeof(struct mpi_coredump_segment_header
)
995 + sizeof(mpi_coredump
->nic1_mbx_regs
),
997 status
= ql_get_mpi_regs(qdev
, &mpi_coredump
->nic1_mbx_regs
[0],
998 NIC1_MBX_REGS_ADDR
, NIC_MBX_REGS_CNT
);
1002 /* Get the SMBus Registers */
1003 ql_build_coredump_seg_header(&mpi_coredump
->smbus_regs_seg_hdr
,
1005 sizeof(struct mpi_coredump_segment_header
)
1006 + sizeof(mpi_coredump
->smbus_regs
),
1008 status
= ql_get_mpi_regs(qdev
, &mpi_coredump
->smbus_regs
[0],
1009 SMBUS_REGS_ADDR
, SMBUS_REGS_CNT
);
1013 /* Get the FC2 MBX Registers */
1014 ql_build_coredump_seg_header(&mpi_coredump
->fc2_mbx_regs_seg_hdr
,
1016 sizeof(struct mpi_coredump_segment_header
)
1017 + sizeof(mpi_coredump
->fc2_mbx_regs
),
1019 status
= ql_get_mpi_regs(qdev
, &mpi_coredump
->fc2_mbx_regs
[0],
1020 FC2_MBX_REGS_ADDR
, FC_MBX_REGS_CNT
);
1024 /* Get the NIC2 MBX Registers */
1025 ql_build_coredump_seg_header(&mpi_coredump
->nic2_mbx_regs_seg_hdr
,
1027 sizeof(struct mpi_coredump_segment_header
)
1028 + sizeof(mpi_coredump
->nic2_mbx_regs
),
1030 status
= ql_get_mpi_regs(qdev
, &mpi_coredump
->nic2_mbx_regs
[0],
1031 NIC2_MBX_REGS_ADDR
, NIC_MBX_REGS_CNT
);
1035 /* Get the I2C Registers */
1036 ql_build_coredump_seg_header(&mpi_coredump
->i2c_regs_seg_hdr
,
1038 sizeof(struct mpi_coredump_segment_header
)
1039 + sizeof(mpi_coredump
->i2c_regs
),
1041 status
= ql_get_mpi_regs(qdev
, &mpi_coredump
->i2c_regs
[0],
1042 I2C_REGS_ADDR
, I2C_REGS_CNT
);
1046 /* Get the MEMC Registers */
1047 ql_build_coredump_seg_header(&mpi_coredump
->memc_regs_seg_hdr
,
1049 sizeof(struct mpi_coredump_segment_header
)
1050 + sizeof(mpi_coredump
->memc_regs
),
1052 status
= ql_get_mpi_regs(qdev
, &mpi_coredump
->memc_regs
[0],
1053 MEMC_REGS_ADDR
, MEMC_REGS_CNT
);
1057 /* Get the PBus Registers */
1058 ql_build_coredump_seg_header(&mpi_coredump
->pbus_regs_seg_hdr
,
1060 sizeof(struct mpi_coredump_segment_header
)
1061 + sizeof(mpi_coredump
->pbus_regs
),
1063 status
= ql_get_mpi_regs(qdev
, &mpi_coredump
->pbus_regs
[0],
1064 PBUS_REGS_ADDR
, PBUS_REGS_CNT
);
1068 /* Get the MDE Registers */
1069 ql_build_coredump_seg_header(&mpi_coredump
->mde_regs_seg_hdr
,
1071 sizeof(struct mpi_coredump_segment_header
)
1072 + sizeof(mpi_coredump
->mde_regs
),
1074 status
= ql_get_mpi_regs(qdev
, &mpi_coredump
->mde_regs
[0],
1075 MDE_REGS_ADDR
, MDE_REGS_CNT
);
1079 ql_build_coredump_seg_header(&mpi_coredump
->misc_nic_seg_hdr
,
1080 MISC_NIC_INFO_SEG_NUM
,
1081 sizeof(struct mpi_coredump_segment_header
)
1082 + sizeof(mpi_coredump
->misc_nic_info
),
1084 mpi_coredump
->misc_nic_info
.rx_ring_count
= qdev
->rx_ring_count
;
1085 mpi_coredump
->misc_nic_info
.tx_ring_count
= qdev
->tx_ring_count
;
1086 mpi_coredump
->misc_nic_info
.intr_count
= qdev
->intr_count
;
1087 mpi_coredump
->misc_nic_info
.function
= qdev
->func
;
1090 /* Get indexed register values. */
1091 ql_build_coredump_seg_header(&mpi_coredump
->intr_states_seg_hdr
,
1092 INTR_STATES_SEG_NUM
,
1093 sizeof(struct mpi_coredump_segment_header
)
1094 + sizeof(mpi_coredump
->intr_states
),
1096 ql_get_intr_states(qdev
, &mpi_coredump
->intr_states
[0]);
1098 ql_build_coredump_seg_header(&mpi_coredump
->cam_entries_seg_hdr
,
1099 CAM_ENTRIES_SEG_NUM
,
1100 sizeof(struct mpi_coredump_segment_header
)
1101 + sizeof(mpi_coredump
->cam_entries
),
1103 status
= ql_get_cam_entries(qdev
, &mpi_coredump
->cam_entries
[0]);
1107 ql_build_coredump_seg_header(&mpi_coredump
->nic_routing_words_seg_hdr
,
1108 ROUTING_WORDS_SEG_NUM
,
1109 sizeof(struct mpi_coredump_segment_header
)
1110 + sizeof(mpi_coredump
->nic_routing_words
),
1112 status
= ql_get_routing_entries(qdev
,
1113 &mpi_coredump
->nic_routing_words
[0]);
1117 /* Segment 34 (Rev C. step 23) */
1118 ql_build_coredump_seg_header(&mpi_coredump
->ets_seg_hdr
,
1120 sizeof(struct mpi_coredump_segment_header
)
1121 + sizeof(mpi_coredump
->ets
),
1123 status
= ql_get_ets_regs(qdev
, &mpi_coredump
->ets
[0]);
1127 ql_build_coredump_seg_header(&mpi_coredump
->probe_dump_seg_hdr
,
1129 sizeof(struct mpi_coredump_segment_header
)
1130 + sizeof(mpi_coredump
->probe_dump
),
1132 ql_get_probe_dump(qdev
, &mpi_coredump
->probe_dump
[0]);
1134 ql_build_coredump_seg_header(&mpi_coredump
->routing_reg_seg_hdr
,
1135 ROUTING_INDEX_SEG_NUM
,
1136 sizeof(struct mpi_coredump_segment_header
)
1137 + sizeof(mpi_coredump
->routing_regs
),
1139 status
= ql_get_routing_index_registers(qdev
,
1140 &mpi_coredump
->routing_regs
[0]);
1144 ql_build_coredump_seg_header(&mpi_coredump
->mac_prot_reg_seg_hdr
,
1145 MAC_PROTOCOL_SEG_NUM
,
1146 sizeof(struct mpi_coredump_segment_header
)
1147 + sizeof(mpi_coredump
->mac_prot_regs
),
1149 ql_get_mac_protocol_registers(qdev
, &mpi_coredump
->mac_prot_regs
[0]);
1151 /* Get the semaphore registers for all 5 functions */
1152 ql_build_coredump_seg_header(&mpi_coredump
->sem_regs_seg_hdr
,
1154 sizeof(struct mpi_coredump_segment_header
) +
1155 sizeof(mpi_coredump
->sem_regs
), "Sem Registers");
1157 ql_get_sem_registers(qdev
, &mpi_coredump
->sem_regs
[0]);
1159 /* Prevent the mpi restarting while we dump the memory.*/
1160 ql_write_mpi_reg(qdev
, MPI_TEST_FUNC_RST_STS
, MPI_TEST_FUNC_RST_FRC
);
1162 /* clear the pause */
1163 status
= ql_unpause_mpi_risc(qdev
);
1165 netif_err(qdev
, drv
, qdev
->ndev
,
1166 "Failed RISC unpause. Status = 0x%.08x\n", status
);
1170 /* Reset the RISC so we can dump RAM */
1171 status
= ql_hard_reset_mpi_risc(qdev
);
1173 netif_err(qdev
, drv
, qdev
->ndev
,
1174 "Failed RISC reset. Status = 0x%.08x\n", status
);
1178 ql_build_coredump_seg_header(&mpi_coredump
->code_ram_seg_hdr
,
1180 sizeof(struct mpi_coredump_segment_header
)
1181 + sizeof(mpi_coredump
->code_ram
),
1183 status
= ql_dump_risc_ram_area(qdev
, &mpi_coredump
->code_ram
[0],
1184 CODE_RAM_ADDR
, CODE_RAM_CNT
);
1186 netif_err(qdev
, drv
, qdev
->ndev
,
1187 "Failed Dump of CODE RAM. Status = 0x%.08x\n",
1192 /* Insert the segment header */
1193 ql_build_coredump_seg_header(&mpi_coredump
->memc_ram_seg_hdr
,
1195 sizeof(struct mpi_coredump_segment_header
)
1196 + sizeof(mpi_coredump
->memc_ram
),
1198 status
= ql_dump_risc_ram_area(qdev
, &mpi_coredump
->memc_ram
[0],
1199 MEMC_RAM_ADDR
, MEMC_RAM_CNT
);
1201 netif_err(qdev
, drv
, qdev
->ndev
,
1202 "Failed Dump of MEMC RAM. Status = 0x%.08x\n",
1207 ql_sem_unlock(qdev
, SEM_PROC_REG_MASK
); /* does flush too */
1212 static void ql_get_core_dump(struct ql_adapter
*qdev
)
1214 if (!ql_own_firmware(qdev
)) {
1215 netif_err(qdev
, drv
, qdev
->ndev
, "Don't own firmware!\n");
1219 if (!netif_running(qdev
->ndev
)) {
1220 netif_err(qdev
, ifup
, qdev
->ndev
,
1221 "Force Coredump can only be done from interface that is up\n");
1224 ql_queue_fw_error(qdev
);
1227 static void ql_gen_reg_dump(struct ql_adapter
*qdev
,
1228 struct ql_reg_dump
*mpi_coredump
)
1233 memset(&(mpi_coredump
->mpi_global_header
), 0,
1234 sizeof(struct mpi_coredump_global_header
));
1235 mpi_coredump
->mpi_global_header
.cookie
= MPI_COREDUMP_COOKIE
;
1236 mpi_coredump
->mpi_global_header
.headerSize
=
1237 sizeof(struct mpi_coredump_global_header
);
1238 mpi_coredump
->mpi_global_header
.imageSize
=
1239 sizeof(struct ql_reg_dump
);
1240 strncpy(mpi_coredump
->mpi_global_header
.idString
, "MPI Coredump",
1241 sizeof(mpi_coredump
->mpi_global_header
.idString
));
1245 ql_build_coredump_seg_header(&mpi_coredump
->misc_nic_seg_hdr
,
1246 MISC_NIC_INFO_SEG_NUM
,
1247 sizeof(struct mpi_coredump_segment_header
)
1248 + sizeof(mpi_coredump
->misc_nic_info
),
1250 mpi_coredump
->misc_nic_info
.rx_ring_count
= qdev
->rx_ring_count
;
1251 mpi_coredump
->misc_nic_info
.tx_ring_count
= qdev
->tx_ring_count
;
1252 mpi_coredump
->misc_nic_info
.intr_count
= qdev
->intr_count
;
1253 mpi_coredump
->misc_nic_info
.function
= qdev
->func
;
1255 /* Segment 16, Rev C. Step 18 */
1256 ql_build_coredump_seg_header(&mpi_coredump
->nic_regs_seg_hdr
,
1257 NIC1_CONTROL_SEG_NUM
,
1258 sizeof(struct mpi_coredump_segment_header
)
1259 + sizeof(mpi_coredump
->nic_regs
),
1261 /* Get generic reg dump */
1262 for (i
= 0; i
< 64; i
++)
1263 mpi_coredump
->nic_regs
[i
] = ql_read32(qdev
, i
* sizeof(u32
));
1266 /* Get indexed register values. */
1267 ql_build_coredump_seg_header(&mpi_coredump
->intr_states_seg_hdr
,
1268 INTR_STATES_SEG_NUM
,
1269 sizeof(struct mpi_coredump_segment_header
)
1270 + sizeof(mpi_coredump
->intr_states
),
1272 ql_get_intr_states(qdev
, &mpi_coredump
->intr_states
[0]);
1274 ql_build_coredump_seg_header(&mpi_coredump
->cam_entries_seg_hdr
,
1275 CAM_ENTRIES_SEG_NUM
,
1276 sizeof(struct mpi_coredump_segment_header
)
1277 + sizeof(mpi_coredump
->cam_entries
),
1279 status
= ql_get_cam_entries(qdev
, &mpi_coredump
->cam_entries
[0]);
1283 ql_build_coredump_seg_header(&mpi_coredump
->nic_routing_words_seg_hdr
,
1284 ROUTING_WORDS_SEG_NUM
,
1285 sizeof(struct mpi_coredump_segment_header
)
1286 + sizeof(mpi_coredump
->nic_routing_words
),
1288 status
= ql_get_routing_entries(qdev
,
1289 &mpi_coredump
->nic_routing_words
[0]);
1293 /* Segment 34 (Rev C. step 23) */
1294 ql_build_coredump_seg_header(&mpi_coredump
->ets_seg_hdr
,
1296 sizeof(struct mpi_coredump_segment_header
)
1297 + sizeof(mpi_coredump
->ets
),
1299 status
= ql_get_ets_regs(qdev
, &mpi_coredump
->ets
[0]);
1304 void ql_get_dump(struct ql_adapter
*qdev
, void *buff
)
1307 * If the dump has already been taken and is stored
1308 * in our internal buffer and if force dump is set then
1309 * just start the spool to dump it to the log file
1310 * and also, take a snapshot of the general regs to
1311 * to the user's buffer or else take complete dump
1312 * to the user's buffer if force is not set.
1315 if (!test_bit(QL_FRC_COREDUMP
, &qdev
->flags
)) {
1316 if (!ql_core_dump(qdev
, buff
))
1317 ql_soft_reset_mpi_risc(qdev
);
1319 netif_err(qdev
, drv
, qdev
->ndev
, "coredump failed!\n");
1321 ql_gen_reg_dump(qdev
, buff
);
1322 ql_get_core_dump(qdev
);
1326 /* Coredump to messages log file using separate worker thread */
1327 void ql_mpi_core_to_log(struct work_struct
*work
)
1329 struct ql_adapter
*qdev
=
1330 container_of(work
, struct ql_adapter
, mpi_core_to_log
.work
);
1334 count
= sizeof(struct ql_mpi_coredump
) / sizeof(u32
);
1335 tmp
= (u32
*)qdev
->mpi_coredump
;
1336 netif_printk(qdev
, drv
, KERN_DEBUG
, qdev
->ndev
,
1337 "Core is dumping to log file!\n");
1339 for (i
= 0; i
< count
; i
+= 8) {
1340 pr_err("%.08x: %.08x %.08x %.08x %.08x %.08x "
1341 "%.08x %.08x %.08x\n", i
,
1355 static void ql_dump_intr_states(struct ql_adapter
*qdev
)
1359 for (i
= 0; i
< qdev
->intr_count
; i
++) {
1360 ql_write32(qdev
, INTR_EN
, qdev
->intr_context
[i
].intr_read_mask
);
1361 value
= ql_read32(qdev
, INTR_EN
);
1362 pr_err("%s: Interrupt %d is %s\n",
1363 qdev
->ndev
->name
, i
,
1364 (value
& INTR_EN_EN
? "enabled" : "disabled"));
1368 #define DUMP_XGMAC(qdev, reg) \
1371 ql_read_xgmac_reg(qdev, reg, &data); \
1372 pr_err("%s: %s = 0x%.08x\n", qdev->ndev->name, #reg, data); \
1375 void ql_dump_xgmac_control_regs(struct ql_adapter
*qdev
)
1377 if (ql_sem_spinlock(qdev
, qdev
->xg_sem_mask
)) {
1378 pr_err("%s: Couldn't get xgmac sem\n", __func__
);
1381 DUMP_XGMAC(qdev
, PAUSE_SRC_LO
);
1382 DUMP_XGMAC(qdev
, PAUSE_SRC_HI
);
1383 DUMP_XGMAC(qdev
, GLOBAL_CFG
);
1384 DUMP_XGMAC(qdev
, TX_CFG
);
1385 DUMP_XGMAC(qdev
, RX_CFG
);
1386 DUMP_XGMAC(qdev
, FLOW_CTL
);
1387 DUMP_XGMAC(qdev
, PAUSE_OPCODE
);
1388 DUMP_XGMAC(qdev
, PAUSE_TIMER
);
1389 DUMP_XGMAC(qdev
, PAUSE_FRM_DEST_LO
);
1390 DUMP_XGMAC(qdev
, PAUSE_FRM_DEST_HI
);
1391 DUMP_XGMAC(qdev
, MAC_TX_PARAMS
);
1392 DUMP_XGMAC(qdev
, MAC_RX_PARAMS
);
1393 DUMP_XGMAC(qdev
, MAC_SYS_INT
);
1394 DUMP_XGMAC(qdev
, MAC_SYS_INT_MASK
);
1395 DUMP_XGMAC(qdev
, MAC_MGMT_INT
);
1396 DUMP_XGMAC(qdev
, MAC_MGMT_IN_MASK
);
1397 DUMP_XGMAC(qdev
, EXT_ARB_MODE
);
1398 ql_sem_unlock(qdev
, qdev
->xg_sem_mask
);
1401 static void ql_dump_ets_regs(struct ql_adapter
*qdev
)
1405 static void ql_dump_cam_entries(struct ql_adapter
*qdev
)
1410 i
= ql_sem_spinlock(qdev
, SEM_MAC_ADDR_MASK
);
1413 for (i
= 0; i
< 4; i
++) {
1414 if (ql_get_mac_addr_reg(qdev
, MAC_ADDR_TYPE_CAM_MAC
, i
, value
)) {
1415 pr_err("%s: Failed read of mac index register\n",
1420 pr_err("%s: CAM index %d CAM Lookup Lower = 0x%.08x:%.08x, Output = 0x%.08x\n",
1421 qdev
->ndev
->name
, i
, value
[1], value
[0],
1425 for (i
= 0; i
< 32; i
++) {
1426 if (ql_get_mac_addr_reg
1427 (qdev
, MAC_ADDR_TYPE_MULTI_MAC
, i
, value
)) {
1428 pr_err("%s: Failed read of mac index register\n",
1433 pr_err("%s: MCAST index %d CAM Lookup Lower = 0x%.08x:%.08x\n",
1434 qdev
->ndev
->name
, i
, value
[1], value
[0]);
1437 ql_sem_unlock(qdev
, SEM_MAC_ADDR_MASK
);
1440 void ql_dump_routing_entries(struct ql_adapter
*qdev
)
1444 i
= ql_sem_spinlock(qdev
, SEM_RT_IDX_MASK
);
1447 for (i
= 0; i
< 16; i
++) {
1449 if (ql_get_routing_reg(qdev
, i
, &value
)) {
1450 pr_err("%s: Failed read of routing index register\n",
1455 pr_err("%s: Routing Mask %d = 0x%.08x\n",
1456 qdev
->ndev
->name
, i
, value
);
1459 ql_sem_unlock(qdev
, SEM_RT_IDX_MASK
);
1462 #define DUMP_REG(qdev, reg) \
1463 pr_err("%-32s= 0x%x\n", #reg, ql_read32(qdev, reg))
1465 void ql_dump_regs(struct ql_adapter
*qdev
)
1467 pr_err("reg dump for function #%d\n", qdev
->func
);
1468 DUMP_REG(qdev
, SYS
);
1469 DUMP_REG(qdev
, RST_FO
);
1470 DUMP_REG(qdev
, FSC
);
1471 DUMP_REG(qdev
, CSR
);
1472 DUMP_REG(qdev
, ICB_RID
);
1473 DUMP_REG(qdev
, ICB_L
);
1474 DUMP_REG(qdev
, ICB_H
);
1475 DUMP_REG(qdev
, CFG
);
1476 DUMP_REG(qdev
, BIOS_ADDR
);
1477 DUMP_REG(qdev
, STS
);
1478 DUMP_REG(qdev
, INTR_EN
);
1479 DUMP_REG(qdev
, INTR_MASK
);
1480 DUMP_REG(qdev
, ISR1
);
1481 DUMP_REG(qdev
, ISR2
);
1482 DUMP_REG(qdev
, ISR3
);
1483 DUMP_REG(qdev
, ISR4
);
1484 DUMP_REG(qdev
, REV_ID
);
1485 DUMP_REG(qdev
, FRC_ECC_ERR
);
1486 DUMP_REG(qdev
, ERR_STS
);
1487 DUMP_REG(qdev
, RAM_DBG_ADDR
);
1488 DUMP_REG(qdev
, RAM_DBG_DATA
);
1489 DUMP_REG(qdev
, ECC_ERR_CNT
);
1490 DUMP_REG(qdev
, SEM
);
1491 DUMP_REG(qdev
, GPIO_1
);
1492 DUMP_REG(qdev
, GPIO_2
);
1493 DUMP_REG(qdev
, GPIO_3
);
1494 DUMP_REG(qdev
, XGMAC_ADDR
);
1495 DUMP_REG(qdev
, XGMAC_DATA
);
1496 DUMP_REG(qdev
, NIC_ETS
);
1497 DUMP_REG(qdev
, CNA_ETS
);
1498 DUMP_REG(qdev
, FLASH_ADDR
);
1499 DUMP_REG(qdev
, FLASH_DATA
);
1500 DUMP_REG(qdev
, CQ_STOP
);
1501 DUMP_REG(qdev
, PAGE_TBL_RID
);
1502 DUMP_REG(qdev
, WQ_PAGE_TBL_LO
);
1503 DUMP_REG(qdev
, WQ_PAGE_TBL_HI
);
1504 DUMP_REG(qdev
, CQ_PAGE_TBL_LO
);
1505 DUMP_REG(qdev
, CQ_PAGE_TBL_HI
);
1506 DUMP_REG(qdev
, COS_DFLT_CQ1
);
1507 DUMP_REG(qdev
, COS_DFLT_CQ2
);
1508 DUMP_REG(qdev
, SPLT_HDR
);
1509 DUMP_REG(qdev
, FC_PAUSE_THRES
);
1510 DUMP_REG(qdev
, NIC_PAUSE_THRES
);
1511 DUMP_REG(qdev
, FC_ETHERTYPE
);
1512 DUMP_REG(qdev
, FC_RCV_CFG
);
1513 DUMP_REG(qdev
, NIC_RCV_CFG
);
1514 DUMP_REG(qdev
, FC_COS_TAGS
);
1515 DUMP_REG(qdev
, NIC_COS_TAGS
);
1516 DUMP_REG(qdev
, MGMT_RCV_CFG
);
1517 DUMP_REG(qdev
, XG_SERDES_ADDR
);
1518 DUMP_REG(qdev
, XG_SERDES_DATA
);
1519 DUMP_REG(qdev
, PRB_MX_ADDR
);
1520 DUMP_REG(qdev
, PRB_MX_DATA
);
1521 ql_dump_intr_states(qdev
);
1522 ql_dump_xgmac_control_regs(qdev
);
1523 ql_dump_ets_regs(qdev
);
1524 ql_dump_cam_entries(qdev
);
1525 ql_dump_routing_entries(qdev
);
1531 #define DUMP_STAT(qdev, stat) \
1532 pr_err("%s = %ld\n", #stat, (unsigned long)qdev->nic_stats.stat)
1534 void ql_dump_stat(struct ql_adapter
*qdev
)
1536 pr_err("%s: Enter\n", __func__
);
1537 DUMP_STAT(qdev
, tx_pkts
);
1538 DUMP_STAT(qdev
, tx_bytes
);
1539 DUMP_STAT(qdev
, tx_mcast_pkts
);
1540 DUMP_STAT(qdev
, tx_bcast_pkts
);
1541 DUMP_STAT(qdev
, tx_ucast_pkts
);
1542 DUMP_STAT(qdev
, tx_ctl_pkts
);
1543 DUMP_STAT(qdev
, tx_pause_pkts
);
1544 DUMP_STAT(qdev
, tx_64_pkt
);
1545 DUMP_STAT(qdev
, tx_65_to_127_pkt
);
1546 DUMP_STAT(qdev
, tx_128_to_255_pkt
);
1547 DUMP_STAT(qdev
, tx_256_511_pkt
);
1548 DUMP_STAT(qdev
, tx_512_to_1023_pkt
);
1549 DUMP_STAT(qdev
, tx_1024_to_1518_pkt
);
1550 DUMP_STAT(qdev
, tx_1519_to_max_pkt
);
1551 DUMP_STAT(qdev
, tx_undersize_pkt
);
1552 DUMP_STAT(qdev
, tx_oversize_pkt
);
1553 DUMP_STAT(qdev
, rx_bytes
);
1554 DUMP_STAT(qdev
, rx_bytes_ok
);
1555 DUMP_STAT(qdev
, rx_pkts
);
1556 DUMP_STAT(qdev
, rx_pkts_ok
);
1557 DUMP_STAT(qdev
, rx_bcast_pkts
);
1558 DUMP_STAT(qdev
, rx_mcast_pkts
);
1559 DUMP_STAT(qdev
, rx_ucast_pkts
);
1560 DUMP_STAT(qdev
, rx_undersize_pkts
);
1561 DUMP_STAT(qdev
, rx_oversize_pkts
);
1562 DUMP_STAT(qdev
, rx_jabber_pkts
);
1563 DUMP_STAT(qdev
, rx_undersize_fcerr_pkts
);
1564 DUMP_STAT(qdev
, rx_drop_events
);
1565 DUMP_STAT(qdev
, rx_fcerr_pkts
);
1566 DUMP_STAT(qdev
, rx_align_err
);
1567 DUMP_STAT(qdev
, rx_symbol_err
);
1568 DUMP_STAT(qdev
, rx_mac_err
);
1569 DUMP_STAT(qdev
, rx_ctl_pkts
);
1570 DUMP_STAT(qdev
, rx_pause_pkts
);
1571 DUMP_STAT(qdev
, rx_64_pkts
);
1572 DUMP_STAT(qdev
, rx_65_to_127_pkts
);
1573 DUMP_STAT(qdev
, rx_128_255_pkts
);
1574 DUMP_STAT(qdev
, rx_256_511_pkts
);
1575 DUMP_STAT(qdev
, rx_512_to_1023_pkts
);
1576 DUMP_STAT(qdev
, rx_1024_to_1518_pkts
);
1577 DUMP_STAT(qdev
, rx_1519_to_max_pkts
);
1578 DUMP_STAT(qdev
, rx_len_err_pkts
);
1584 #define DUMP_QDEV_FIELD(qdev, type, field) \
1585 pr_err("qdev->%-24s = " type "\n", #field, qdev->field)
1586 #define DUMP_QDEV_DMA_FIELD(qdev, field) \
1587 pr_err("qdev->%-24s = %llx\n", #field, (unsigned long long)qdev->field)
1588 #define DUMP_QDEV_ARRAY(qdev, type, array, index, field) \
1589 pr_err("%s[%d].%s = " type "\n", \
1590 #array, index, #field, qdev->array[index].field);
1591 void ql_dump_qdev(struct ql_adapter
*qdev
)
1594 DUMP_QDEV_FIELD(qdev
, "%lx", flags
);
1595 DUMP_QDEV_FIELD(qdev
, "%p", vlgrp
);
1596 DUMP_QDEV_FIELD(qdev
, "%p", pdev
);
1597 DUMP_QDEV_FIELD(qdev
, "%p", ndev
);
1598 DUMP_QDEV_FIELD(qdev
, "%d", chip_rev_id
);
1599 DUMP_QDEV_FIELD(qdev
, "%p", reg_base
);
1600 DUMP_QDEV_FIELD(qdev
, "%p", doorbell_area
);
1601 DUMP_QDEV_FIELD(qdev
, "%d", doorbell_area_size
);
1602 DUMP_QDEV_FIELD(qdev
, "%x", msg_enable
);
1603 DUMP_QDEV_FIELD(qdev
, "%p", rx_ring_shadow_reg_area
);
1604 DUMP_QDEV_DMA_FIELD(qdev
, rx_ring_shadow_reg_dma
);
1605 DUMP_QDEV_FIELD(qdev
, "%p", tx_ring_shadow_reg_area
);
1606 DUMP_QDEV_DMA_FIELD(qdev
, tx_ring_shadow_reg_dma
);
1607 DUMP_QDEV_FIELD(qdev
, "%d", intr_count
);
1608 if (qdev
->msi_x_entry
)
1609 for (i
= 0; i
< qdev
->intr_count
; i
++) {
1610 DUMP_QDEV_ARRAY(qdev
, "%d", msi_x_entry
, i
, vector
);
1611 DUMP_QDEV_ARRAY(qdev
, "%d", msi_x_entry
, i
, entry
);
1613 for (i
= 0; i
< qdev
->intr_count
; i
++) {
1614 DUMP_QDEV_ARRAY(qdev
, "%p", intr_context
, i
, qdev
);
1615 DUMP_QDEV_ARRAY(qdev
, "%d", intr_context
, i
, intr
);
1616 DUMP_QDEV_ARRAY(qdev
, "%d", intr_context
, i
, hooked
);
1617 DUMP_QDEV_ARRAY(qdev
, "0x%08x", intr_context
, i
, intr_en_mask
);
1618 DUMP_QDEV_ARRAY(qdev
, "0x%08x", intr_context
, i
, intr_dis_mask
);
1619 DUMP_QDEV_ARRAY(qdev
, "0x%08x", intr_context
, i
, intr_read_mask
);
1621 DUMP_QDEV_FIELD(qdev
, "%d", tx_ring_count
);
1622 DUMP_QDEV_FIELD(qdev
, "%d", rx_ring_count
);
1623 DUMP_QDEV_FIELD(qdev
, "%d", ring_mem_size
);
1624 DUMP_QDEV_FIELD(qdev
, "%p", ring_mem
);
1625 DUMP_QDEV_FIELD(qdev
, "%d", intr_count
);
1626 DUMP_QDEV_FIELD(qdev
, "%p", tx_ring
);
1627 DUMP_QDEV_FIELD(qdev
, "%d", rss_ring_count
);
1628 DUMP_QDEV_FIELD(qdev
, "%p", rx_ring
);
1629 DUMP_QDEV_FIELD(qdev
, "%d", default_rx_queue
);
1630 DUMP_QDEV_FIELD(qdev
, "0x%08x", xg_sem_mask
);
1631 DUMP_QDEV_FIELD(qdev
, "0x%08x", port_link_up
);
1632 DUMP_QDEV_FIELD(qdev
, "0x%08x", port_init
);
1637 void ql_dump_wqicb(struct wqicb
*wqicb
)
1639 pr_err("Dumping wqicb stuff...\n");
1640 pr_err("wqicb->len = 0x%x\n", le16_to_cpu(wqicb
->len
));
1641 pr_err("wqicb->flags = %x\n", le16_to_cpu(wqicb
->flags
));
1642 pr_err("wqicb->cq_id_rss = %d\n",
1643 le16_to_cpu(wqicb
->cq_id_rss
));
1644 pr_err("wqicb->rid = 0x%x\n", le16_to_cpu(wqicb
->rid
));
1645 pr_err("wqicb->wq_addr = 0x%llx\n",
1646 (unsigned long long) le64_to_cpu(wqicb
->addr
));
1647 pr_err("wqicb->wq_cnsmr_idx_addr = 0x%llx\n",
1648 (unsigned long long) le64_to_cpu(wqicb
->cnsmr_idx_addr
));
1651 void ql_dump_tx_ring(struct tx_ring
*tx_ring
)
1653 if (tx_ring
== NULL
)
1655 pr_err("===================== Dumping tx_ring %d ===============\n",
1657 pr_err("tx_ring->base = %p\n", tx_ring
->wq_base
);
1658 pr_err("tx_ring->base_dma = 0x%llx\n",
1659 (unsigned long long) tx_ring
->wq_base_dma
);
1660 pr_err("tx_ring->cnsmr_idx_sh_reg, addr = 0x%p, value = %d\n",
1661 tx_ring
->cnsmr_idx_sh_reg
,
1662 tx_ring
->cnsmr_idx_sh_reg
1663 ? ql_read_sh_reg(tx_ring
->cnsmr_idx_sh_reg
) : 0);
1664 pr_err("tx_ring->size = %d\n", tx_ring
->wq_size
);
1665 pr_err("tx_ring->len = %d\n", tx_ring
->wq_len
);
1666 pr_err("tx_ring->prod_idx_db_reg = %p\n", tx_ring
->prod_idx_db_reg
);
1667 pr_err("tx_ring->valid_db_reg = %p\n", tx_ring
->valid_db_reg
);
1668 pr_err("tx_ring->prod_idx = %d\n", tx_ring
->prod_idx
);
1669 pr_err("tx_ring->cq_id = %d\n", tx_ring
->cq_id
);
1670 pr_err("tx_ring->wq_id = %d\n", tx_ring
->wq_id
);
1671 pr_err("tx_ring->q = %p\n", tx_ring
->q
);
1672 pr_err("tx_ring->tx_count = %d\n", atomic_read(&tx_ring
->tx_count
));
1675 void ql_dump_ricb(struct ricb
*ricb
)
1678 pr_err("===================== Dumping ricb ===============\n");
1679 pr_err("Dumping ricb stuff...\n");
1681 pr_err("ricb->base_cq = %d\n", ricb
->base_cq
& 0x1f);
1682 pr_err("ricb->flags = %s%s%s%s%s%s%s%s%s\n",
1683 ricb
->base_cq
& RSS_L4K
? "RSS_L4K " : "",
1684 ricb
->flags
& RSS_L6K
? "RSS_L6K " : "",
1685 ricb
->flags
& RSS_LI
? "RSS_LI " : "",
1686 ricb
->flags
& RSS_LB
? "RSS_LB " : "",
1687 ricb
->flags
& RSS_LM
? "RSS_LM " : "",
1688 ricb
->flags
& RSS_RI4
? "RSS_RI4 " : "",
1689 ricb
->flags
& RSS_RT4
? "RSS_RT4 " : "",
1690 ricb
->flags
& RSS_RI6
? "RSS_RI6 " : "",
1691 ricb
->flags
& RSS_RT6
? "RSS_RT6 " : "");
1692 pr_err("ricb->mask = 0x%.04x\n", le16_to_cpu(ricb
->mask
));
1693 for (i
= 0; i
< 16; i
++)
1694 pr_err("ricb->hash_cq_id[%d] = 0x%.08x\n", i
,
1695 le32_to_cpu(ricb
->hash_cq_id
[i
]));
1696 for (i
= 0; i
< 10; i
++)
1697 pr_err("ricb->ipv6_hash_key[%d] = 0x%.08x\n", i
,
1698 le32_to_cpu(ricb
->ipv6_hash_key
[i
]));
1699 for (i
= 0; i
< 4; i
++)
1700 pr_err("ricb->ipv4_hash_key[%d] = 0x%.08x\n", i
,
1701 le32_to_cpu(ricb
->ipv4_hash_key
[i
]));
1704 void ql_dump_cqicb(struct cqicb
*cqicb
)
1706 pr_err("Dumping cqicb stuff...\n");
1708 pr_err("cqicb->msix_vect = %d\n", cqicb
->msix_vect
);
1709 pr_err("cqicb->flags = %x\n", cqicb
->flags
);
1710 pr_err("cqicb->len = %d\n", le16_to_cpu(cqicb
->len
));
1711 pr_err("cqicb->addr = 0x%llx\n",
1712 (unsigned long long) le64_to_cpu(cqicb
->addr
));
1713 pr_err("cqicb->prod_idx_addr = 0x%llx\n",
1714 (unsigned long long) le64_to_cpu(cqicb
->prod_idx_addr
));
1715 pr_err("cqicb->pkt_delay = 0x%.04x\n",
1716 le16_to_cpu(cqicb
->pkt_delay
));
1717 pr_err("cqicb->irq_delay = 0x%.04x\n",
1718 le16_to_cpu(cqicb
->irq_delay
));
1719 pr_err("cqicb->lbq_addr = 0x%llx\n",
1720 (unsigned long long) le64_to_cpu(cqicb
->lbq_addr
));
1721 pr_err("cqicb->lbq_buf_size = 0x%.04x\n",
1722 le16_to_cpu(cqicb
->lbq_buf_size
));
1723 pr_err("cqicb->lbq_len = 0x%.04x\n",
1724 le16_to_cpu(cqicb
->lbq_len
));
1725 pr_err("cqicb->sbq_addr = 0x%llx\n",
1726 (unsigned long long) le64_to_cpu(cqicb
->sbq_addr
));
1727 pr_err("cqicb->sbq_buf_size = 0x%.04x\n",
1728 le16_to_cpu(cqicb
->sbq_buf_size
));
1729 pr_err("cqicb->sbq_len = 0x%.04x\n",
1730 le16_to_cpu(cqicb
->sbq_len
));
1733 void ql_dump_rx_ring(struct rx_ring
*rx_ring
)
1735 if (rx_ring
== NULL
)
1737 pr_err("===================== Dumping rx_ring %d ===============\n",
1739 pr_err("Dumping rx_ring %d, type = %s%s%s\n",
1740 rx_ring
->cq_id
, rx_ring
->type
== DEFAULT_Q
? "DEFAULT" : "",
1741 rx_ring
->type
== TX_Q
? "OUTBOUND COMPLETIONS" : "",
1742 rx_ring
->type
== RX_Q
? "INBOUND_COMPLETIONS" : "");
1743 pr_err("rx_ring->cqicb = %p\n", &rx_ring
->cqicb
);
1744 pr_err("rx_ring->cq_base = %p\n", rx_ring
->cq_base
);
1745 pr_err("rx_ring->cq_base_dma = %llx\n",
1746 (unsigned long long) rx_ring
->cq_base_dma
);
1747 pr_err("rx_ring->cq_size = %d\n", rx_ring
->cq_size
);
1748 pr_err("rx_ring->cq_len = %d\n", rx_ring
->cq_len
);
1749 pr_err("rx_ring->prod_idx_sh_reg, addr = 0x%p, value = %d\n",
1750 rx_ring
->prod_idx_sh_reg
,
1751 rx_ring
->prod_idx_sh_reg
1752 ? ql_read_sh_reg(rx_ring
->prod_idx_sh_reg
) : 0);
1753 pr_err("rx_ring->prod_idx_sh_reg_dma = %llx\n",
1754 (unsigned long long) rx_ring
->prod_idx_sh_reg_dma
);
1755 pr_err("rx_ring->cnsmr_idx_db_reg = %p\n",
1756 rx_ring
->cnsmr_idx_db_reg
);
1757 pr_err("rx_ring->cnsmr_idx = %d\n", rx_ring
->cnsmr_idx
);
1758 pr_err("rx_ring->curr_entry = %p\n", rx_ring
->curr_entry
);
1759 pr_err("rx_ring->valid_db_reg = %p\n", rx_ring
->valid_db_reg
);
1761 pr_err("rx_ring->lbq_base = %p\n", rx_ring
->lbq_base
);
1762 pr_err("rx_ring->lbq_base_dma = %llx\n",
1763 (unsigned long long) rx_ring
->lbq_base_dma
);
1764 pr_err("rx_ring->lbq_base_indirect = %p\n",
1765 rx_ring
->lbq_base_indirect
);
1766 pr_err("rx_ring->lbq_base_indirect_dma = %llx\n",
1767 (unsigned long long) rx_ring
->lbq_base_indirect_dma
);
1768 pr_err("rx_ring->lbq = %p\n", rx_ring
->lbq
);
1769 pr_err("rx_ring->lbq_len = %d\n", rx_ring
->lbq_len
);
1770 pr_err("rx_ring->lbq_size = %d\n", rx_ring
->lbq_size
);
1771 pr_err("rx_ring->lbq_prod_idx_db_reg = %p\n",
1772 rx_ring
->lbq_prod_idx_db_reg
);
1773 pr_err("rx_ring->lbq_prod_idx = %d\n", rx_ring
->lbq_prod_idx
);
1774 pr_err("rx_ring->lbq_curr_idx = %d\n", rx_ring
->lbq_curr_idx
);
1775 pr_err("rx_ring->lbq_clean_idx = %d\n", rx_ring
->lbq_clean_idx
);
1776 pr_err("rx_ring->lbq_free_cnt = %d\n", rx_ring
->lbq_free_cnt
);
1777 pr_err("rx_ring->lbq_buf_size = %d\n", rx_ring
->lbq_buf_size
);
1779 pr_err("rx_ring->sbq_base = %p\n", rx_ring
->sbq_base
);
1780 pr_err("rx_ring->sbq_base_dma = %llx\n",
1781 (unsigned long long) rx_ring
->sbq_base_dma
);
1782 pr_err("rx_ring->sbq_base_indirect = %p\n",
1783 rx_ring
->sbq_base_indirect
);
1784 pr_err("rx_ring->sbq_base_indirect_dma = %llx\n",
1785 (unsigned long long) rx_ring
->sbq_base_indirect_dma
);
1786 pr_err("rx_ring->sbq = %p\n", rx_ring
->sbq
);
1787 pr_err("rx_ring->sbq_len = %d\n", rx_ring
->sbq_len
);
1788 pr_err("rx_ring->sbq_size = %d\n", rx_ring
->sbq_size
);
1789 pr_err("rx_ring->sbq_prod_idx_db_reg addr = %p\n",
1790 rx_ring
->sbq_prod_idx_db_reg
);
1791 pr_err("rx_ring->sbq_prod_idx = %d\n", rx_ring
->sbq_prod_idx
);
1792 pr_err("rx_ring->sbq_curr_idx = %d\n", rx_ring
->sbq_curr_idx
);
1793 pr_err("rx_ring->sbq_clean_idx = %d\n", rx_ring
->sbq_clean_idx
);
1794 pr_err("rx_ring->sbq_free_cnt = %d\n", rx_ring
->sbq_free_cnt
);
1795 pr_err("rx_ring->sbq_buf_size = %d\n", rx_ring
->sbq_buf_size
);
1796 pr_err("rx_ring->cq_id = %d\n", rx_ring
->cq_id
);
1797 pr_err("rx_ring->irq = %d\n", rx_ring
->irq
);
1798 pr_err("rx_ring->cpu = %d\n", rx_ring
->cpu
);
1799 pr_err("rx_ring->qdev = %p\n", rx_ring
->qdev
);
1802 void ql_dump_hw_cb(struct ql_adapter
*qdev
, int size
, u32 bit
, u16 q_id
)
1806 pr_err("%s: Enter\n", __func__
);
1808 ptr
= kmalloc(size
, GFP_ATOMIC
);
1812 if (ql_write_cfg(qdev
, ptr
, size
, bit
, q_id
)) {
1813 pr_err("%s: Failed to upload control block!\n", __func__
);
1818 ql_dump_wqicb((struct wqicb
*)ptr
);
1821 ql_dump_cqicb((struct cqicb
*)ptr
);
1824 ql_dump_ricb((struct ricb
*)ptr
);
1827 pr_err("%s: Invalid bit value = %x\n", __func__
, bit
);
1836 void ql_dump_tx_desc(struct tx_buf_desc
*tbd
)
1838 pr_err("tbd->addr = 0x%llx\n",
1839 le64_to_cpu((u64
) tbd
->addr
));
1840 pr_err("tbd->len = %d\n",
1841 le32_to_cpu(tbd
->len
& TX_DESC_LEN_MASK
));
1842 pr_err("tbd->flags = %s %s\n",
1843 tbd
->len
& TX_DESC_C
? "C" : ".",
1844 tbd
->len
& TX_DESC_E
? "E" : ".");
1846 pr_err("tbd->addr = 0x%llx\n",
1847 le64_to_cpu((u64
) tbd
->addr
));
1848 pr_err("tbd->len = %d\n",
1849 le32_to_cpu(tbd
->len
& TX_DESC_LEN_MASK
));
1850 pr_err("tbd->flags = %s %s\n",
1851 tbd
->len
& TX_DESC_C
? "C" : ".",
1852 tbd
->len
& TX_DESC_E
? "E" : ".");
1854 pr_err("tbd->addr = 0x%llx\n",
1855 le64_to_cpu((u64
) tbd
->addr
));
1856 pr_err("tbd->len = %d\n",
1857 le32_to_cpu(tbd
->len
& TX_DESC_LEN_MASK
));
1858 pr_err("tbd->flags = %s %s\n",
1859 tbd
->len
& TX_DESC_C
? "C" : ".",
1860 tbd
->len
& TX_DESC_E
? "E" : ".");
1864 void ql_dump_ob_mac_iocb(struct ob_mac_iocb_req
*ob_mac_iocb
)
1866 struct ob_mac_tso_iocb_req
*ob_mac_tso_iocb
=
1867 (struct ob_mac_tso_iocb_req
*)ob_mac_iocb
;
1868 struct tx_buf_desc
*tbd
;
1871 pr_err("%s\n", __func__
);
1872 pr_err("opcode = %s\n",
1873 (ob_mac_iocb
->opcode
== OPCODE_OB_MAC_IOCB
) ? "MAC" : "TSO");
1874 pr_err("flags1 = %s %s %s %s %s\n",
1875 ob_mac_tso_iocb
->flags1
& OB_MAC_TSO_IOCB_OI
? "OI" : "",
1876 ob_mac_tso_iocb
->flags1
& OB_MAC_TSO_IOCB_I
? "I" : "",
1877 ob_mac_tso_iocb
->flags1
& OB_MAC_TSO_IOCB_D
? "D" : "",
1878 ob_mac_tso_iocb
->flags1
& OB_MAC_TSO_IOCB_IP4
? "IP4" : "",
1879 ob_mac_tso_iocb
->flags1
& OB_MAC_TSO_IOCB_IP6
? "IP6" : "");
1880 pr_err("flags2 = %s %s %s\n",
1881 ob_mac_tso_iocb
->flags2
& OB_MAC_TSO_IOCB_LSO
? "LSO" : "",
1882 ob_mac_tso_iocb
->flags2
& OB_MAC_TSO_IOCB_UC
? "UC" : "",
1883 ob_mac_tso_iocb
->flags2
& OB_MAC_TSO_IOCB_TC
? "TC" : "");
1884 pr_err("flags3 = %s %s %s\n",
1885 ob_mac_tso_iocb
->flags3
& OB_MAC_TSO_IOCB_IC
? "IC" : "",
1886 ob_mac_tso_iocb
->flags3
& OB_MAC_TSO_IOCB_DFP
? "DFP" : "",
1887 ob_mac_tso_iocb
->flags3
& OB_MAC_TSO_IOCB_V
? "V" : "");
1888 pr_err("tid = %x\n", ob_mac_iocb
->tid
);
1889 pr_err("txq_idx = %d\n", ob_mac_iocb
->txq_idx
);
1890 pr_err("vlan_tci = %x\n", ob_mac_tso_iocb
->vlan_tci
);
1891 if (ob_mac_iocb
->opcode
== OPCODE_OB_MAC_TSO_IOCB
) {
1892 pr_err("frame_len = %d\n",
1893 le32_to_cpu(ob_mac_tso_iocb
->frame_len
));
1894 pr_err("mss = %d\n",
1895 le16_to_cpu(ob_mac_tso_iocb
->mss
));
1896 pr_err("prot_hdr_len = %d\n",
1897 le16_to_cpu(ob_mac_tso_iocb
->total_hdrs_len
));
1898 pr_err("hdr_offset = 0x%.04x\n",
1899 le16_to_cpu(ob_mac_tso_iocb
->net_trans_offset
));
1900 frame_len
= le32_to_cpu(ob_mac_tso_iocb
->frame_len
);
1902 pr_err("frame_len = %d\n",
1903 le16_to_cpu(ob_mac_iocb
->frame_len
));
1904 frame_len
= le16_to_cpu(ob_mac_iocb
->frame_len
);
1906 tbd
= &ob_mac_iocb
->tbd
[0];
1907 ql_dump_tx_desc(tbd
);
1910 void ql_dump_ob_mac_rsp(struct ob_mac_iocb_rsp
*ob_mac_rsp
)
1912 pr_err("%s\n", __func__
);
1913 pr_err("opcode = %d\n", ob_mac_rsp
->opcode
);
1914 pr_err("flags = %s %s %s %s %s %s %s\n",
1915 ob_mac_rsp
->flags1
& OB_MAC_IOCB_RSP_OI
? "OI" : ".",
1916 ob_mac_rsp
->flags1
& OB_MAC_IOCB_RSP_I
? "I" : ".",
1917 ob_mac_rsp
->flags1
& OB_MAC_IOCB_RSP_E
? "E" : ".",
1918 ob_mac_rsp
->flags1
& OB_MAC_IOCB_RSP_S
? "S" : ".",
1919 ob_mac_rsp
->flags1
& OB_MAC_IOCB_RSP_L
? "L" : ".",
1920 ob_mac_rsp
->flags1
& OB_MAC_IOCB_RSP_P
? "P" : ".",
1921 ob_mac_rsp
->flags2
& OB_MAC_IOCB_RSP_B
? "B" : ".");
1922 pr_err("tid = %x\n", ob_mac_rsp
->tid
);
1927 void ql_dump_ib_mac_rsp(struct ib_mac_iocb_rsp
*ib_mac_rsp
)
1929 pr_err("%s\n", __func__
);
1930 pr_err("opcode = 0x%x\n", ib_mac_rsp
->opcode
);
1931 pr_err("flags1 = %s%s%s%s%s%s\n",
1932 ib_mac_rsp
->flags1
& IB_MAC_IOCB_RSP_OI
? "OI " : "",
1933 ib_mac_rsp
->flags1
& IB_MAC_IOCB_RSP_I
? "I " : "",
1934 ib_mac_rsp
->flags1
& IB_MAC_IOCB_RSP_TE
? "TE " : "",
1935 ib_mac_rsp
->flags1
& IB_MAC_IOCB_RSP_NU
? "NU " : "",
1936 ib_mac_rsp
->flags1
& IB_MAC_IOCB_RSP_IE
? "IE " : "",
1937 ib_mac_rsp
->flags1
& IB_MAC_IOCB_RSP_B
? "B " : "");
1939 if (ib_mac_rsp
->flags1
& IB_MAC_IOCB_RSP_M_MASK
)
1940 pr_err("%s%s%s Multicast\n",
1941 (ib_mac_rsp
->flags1
& IB_MAC_IOCB_RSP_M_MASK
) ==
1942 IB_MAC_IOCB_RSP_M_HASH
? "Hash" : "",
1943 (ib_mac_rsp
->flags1
& IB_MAC_IOCB_RSP_M_MASK
) ==
1944 IB_MAC_IOCB_RSP_M_REG
? "Registered" : "",
1945 (ib_mac_rsp
->flags1
& IB_MAC_IOCB_RSP_M_MASK
) ==
1946 IB_MAC_IOCB_RSP_M_PROM
? "Promiscuous" : "");
1948 pr_err("flags2 = %s%s%s%s%s\n",
1949 (ib_mac_rsp
->flags2
& IB_MAC_IOCB_RSP_P
) ? "P " : "",
1950 (ib_mac_rsp
->flags2
& IB_MAC_IOCB_RSP_V
) ? "V " : "",
1951 (ib_mac_rsp
->flags2
& IB_MAC_IOCB_RSP_U
) ? "U " : "",
1952 (ib_mac_rsp
->flags2
& IB_MAC_IOCB_RSP_T
) ? "T " : "",
1953 (ib_mac_rsp
->flags2
& IB_MAC_IOCB_RSP_FO
) ? "FO " : "");
1955 if (ib_mac_rsp
->flags2
& IB_MAC_IOCB_RSP_ERR_MASK
)
1956 pr_err("%s%s%s%s%s error\n",
1957 (ib_mac_rsp
->flags2
& IB_MAC_IOCB_RSP_ERR_MASK
) ==
1958 IB_MAC_IOCB_RSP_ERR_OVERSIZE
? "oversize" : "",
1959 (ib_mac_rsp
->flags2
& IB_MAC_IOCB_RSP_ERR_MASK
) ==
1960 IB_MAC_IOCB_RSP_ERR_UNDERSIZE
? "undersize" : "",
1961 (ib_mac_rsp
->flags2
& IB_MAC_IOCB_RSP_ERR_MASK
) ==
1962 IB_MAC_IOCB_RSP_ERR_PREAMBLE
? "preamble" : "",
1963 (ib_mac_rsp
->flags2
& IB_MAC_IOCB_RSP_ERR_MASK
) ==
1964 IB_MAC_IOCB_RSP_ERR_FRAME_LEN
? "frame length" : "",
1965 (ib_mac_rsp
->flags2
& IB_MAC_IOCB_RSP_ERR_MASK
) ==
1966 IB_MAC_IOCB_RSP_ERR_CRC
? "CRC" : "");
1968 pr_err("flags3 = %s%s\n",
1969 ib_mac_rsp
->flags3
& IB_MAC_IOCB_RSP_DS
? "DS " : "",
1970 ib_mac_rsp
->flags3
& IB_MAC_IOCB_RSP_DL
? "DL " : "");
1972 if (ib_mac_rsp
->flags3
& IB_MAC_IOCB_RSP_RSS_MASK
)
1973 pr_err("RSS flags = %s%s%s%s\n",
1974 ((ib_mac_rsp
->flags3
& IB_MAC_IOCB_RSP_RSS_MASK
) ==
1975 IB_MAC_IOCB_RSP_M_IPV4
) ? "IPv4 RSS" : "",
1976 ((ib_mac_rsp
->flags3
& IB_MAC_IOCB_RSP_RSS_MASK
) ==
1977 IB_MAC_IOCB_RSP_M_IPV6
) ? "IPv6 RSS " : "",
1978 ((ib_mac_rsp
->flags3
& IB_MAC_IOCB_RSP_RSS_MASK
) ==
1979 IB_MAC_IOCB_RSP_M_TCP_V4
) ? "TCP/IPv4 RSS" : "",
1980 ((ib_mac_rsp
->flags3
& IB_MAC_IOCB_RSP_RSS_MASK
) ==
1981 IB_MAC_IOCB_RSP_M_TCP_V6
) ? "TCP/IPv6 RSS" : "");
1983 pr_err("data_len = %d\n",
1984 le32_to_cpu(ib_mac_rsp
->data_len
));
1985 pr_err("data_addr = 0x%llx\n",
1986 (unsigned long long) le64_to_cpu(ib_mac_rsp
->data_addr
));
1987 if (ib_mac_rsp
->flags3
& IB_MAC_IOCB_RSP_RSS_MASK
)
1988 pr_err("rss = %x\n",
1989 le32_to_cpu(ib_mac_rsp
->rss
));
1990 if (ib_mac_rsp
->flags2
& IB_MAC_IOCB_RSP_V
)
1991 pr_err("vlan_id = %x\n",
1992 le16_to_cpu(ib_mac_rsp
->vlan_id
));
1994 pr_err("flags4 = %s%s%s\n",
1995 ib_mac_rsp
->flags4
& IB_MAC_IOCB_RSP_HV
? "HV " : "",
1996 ib_mac_rsp
->flags4
& IB_MAC_IOCB_RSP_HS
? "HS " : "",
1997 ib_mac_rsp
->flags4
& IB_MAC_IOCB_RSP_HL
? "HL " : "");
1999 if (ib_mac_rsp
->flags4
& IB_MAC_IOCB_RSP_HV
) {
2000 pr_err("hdr length = %d\n",
2001 le32_to_cpu(ib_mac_rsp
->hdr_len
));
2002 pr_err("hdr addr = 0x%llx\n",
2003 (unsigned long long) le64_to_cpu(ib_mac_rsp
->hdr_addr
));
2009 void ql_dump_all(struct ql_adapter
*qdev
)
2015 for (i
= 0; i
< qdev
->tx_ring_count
; i
++) {
2016 QL_DUMP_TX_RING(&qdev
->tx_ring
[i
]);
2017 QL_DUMP_WQICB((struct wqicb
*)&qdev
->tx_ring
[i
]);
2019 for (i
= 0; i
< qdev
->rx_ring_count
; i
++) {
2020 QL_DUMP_RX_RING(&qdev
->rx_ring
[i
]);
2021 QL_DUMP_CQICB((struct cqicb
*)&qdev
->rx_ring
[i
]);