Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

cxgb4: Add support to catch bits set in INT_CAUSE5

This commit adds support to catch any bits set in SGE_INT_CAUSE5 for Parity Errors.
F_ERR_T_RXCRC flag is used to ignore that particular bit as it is not considered as fatal.
So, we clear out the bit before looking for error.
This patch now read and report separately all three registers(Cause1, Cause2, Cause5).
Also, checks for errors if any.

Signed-off-by: Raju Rangoju <rajur@chelsio.com>
Signed-off-by: Rahul Kundu <rahul.kundu@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Rahul Kundu and committed by
David S. Miller
1f074e67 6e22c604

+30 -8
+24 -8
drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
··· 4474 4474 */ 4475 4475 static void sge_intr_handler(struct adapter *adapter) 4476 4476 { 4477 - u64 v; 4477 + u32 v = 0, perr; 4478 4478 u32 err; 4479 4479 4480 4480 static const struct intr_info sge_intr_info[] = { ··· 4509 4509 { 0 } 4510 4510 }; 4511 4511 4512 - v = (u64)t4_read_reg(adapter, SGE_INT_CAUSE1_A) | 4513 - ((u64)t4_read_reg(adapter, SGE_INT_CAUSE2_A) << 32); 4514 - if (v) { 4515 - dev_alert(adapter->pdev_dev, "SGE parity error (%#llx)\n", 4516 - (unsigned long long)v); 4517 - t4_write_reg(adapter, SGE_INT_CAUSE1_A, v); 4518 - t4_write_reg(adapter, SGE_INT_CAUSE2_A, v >> 32); 4512 + perr = t4_read_reg(adapter, SGE_INT_CAUSE1_A); 4513 + if (perr) { 4514 + v |= perr; 4515 + dev_alert(adapter->pdev_dev, "SGE Cause1 Parity Error %#x\n", 4516 + perr); 4517 + } 4518 + 4519 + perr = t4_read_reg(adapter, SGE_INT_CAUSE2_A); 4520 + if (perr) { 4521 + v |= perr; 4522 + dev_alert(adapter->pdev_dev, "SGE Cause2 Parity Error %#x\n", 4523 + perr); 4524 + } 4525 + 4526 + if (CHELSIO_CHIP_VERSION(adapter->params.chip) >= CHELSIO_T5) { 4527 + perr = t4_read_reg(adapter, SGE_INT_CAUSE5_A); 4528 + /* Parity error (CRC) for err_T_RxCRC is trivial, ignore it */ 4529 + perr &= ~ERR_T_RXCRC_F; 4530 + if (perr) { 4531 + v |= perr; 4532 + dev_alert(adapter->pdev_dev, 4533 + "SGE Cause5 Parity Error %#x\n", perr); 4534 + } 4519 4535 } 4520 4536 4521 4537 v |= t4_handle_intr_status(adapter, SGE_INT_CAUSE3_A, sge_intr_info);
+6
drivers/net/ethernet/chelsio/cxgb4/t4_regs.h
··· 487 487 #define ERROR_QID_M 0x1ffffU 488 488 #define ERROR_QID_G(x) (((x) >> ERROR_QID_S) & ERROR_QID_M) 489 489 490 + #define SGE_INT_CAUSE5_A 0x110c 491 + 492 + #define ERR_T_RXCRC_S 31 493 + #define ERR_T_RXCRC_V(x) ((x) << ERR_T_RXCRC_S) 494 + #define ERR_T_RXCRC_F ERR_T_RXCRC_V(1U) 495 + 490 496 #define HP_INT_THRESH_S 28 491 497 #define HP_INT_THRESH_M 0xfU 492 498 #define HP_INT_THRESH_V(x) ((x) << HP_INT_THRESH_S)