mirror of
https://github.com/NVIDIA/open-gpu-kernel-modules.git
synced 2026-05-01 19:51:28 +00:00
530.30.02
This commit is contained in:
@@ -113,7 +113,7 @@ _nvswitch_initialize_minion_interrupts
|
||||
intrEn = FLD_SET_DRF_NUM(_MINION, _MINION_INTR_STALL_EN, _LINK,
|
||||
localDiscoveredLinks, intrEn);
|
||||
|
||||
{
|
||||
{
|
||||
// Disable interrupts only if explicitly requested to. Default to enable.
|
||||
if (device->regkeys.minion_intr != NV_SWITCH_REGKEY_MINION_INTERRUPTS_DISABLE)
|
||||
{
|
||||
@@ -358,11 +358,11 @@ _nvswitch_initialize_egress_interrupts
|
||||
DRF_DEF(_EGRESS, _ERR_FATAL_REPORT_EN_1, _MCRSP_RAM_HDR_ECC_DBE_ERR, _ENABLE);
|
||||
|
||||
chip_device->intr_mask.egress[1].nonfatal =
|
||||
DRF_DEF(_EGRESS, _ERR_NON_FATAL_REPORT_EN_1, _NXBAR_REDUCTION_HDR_ECC_LIMIT_ERR, _ENABLE) |
|
||||
DRF_DEF(_EGRESS, _ERR_NON_FATAL_REPORT_EN_1, _MCRSPCTRLSTORE_ECC_LIMIT_ERR, _ENABLE) |
|
||||
DRF_DEF(_EGRESS, _ERR_NON_FATAL_REPORT_EN_1, _RBCTRLSTORE_ECC_LIMIT_ERR, _ENABLE) |
|
||||
DRF_DEF(_EGRESS, _ERR_NON_FATAL_REPORT_EN_1, _MCREDSGT_ECC_LIMIT_ERR, _ENABLE) |
|
||||
DRF_DEF(_EGRESS, _ERR_NON_FATAL_REPORT_EN_1, _MCREDBUF_ECC_LIMIT_ERR, _ENABLE) |
|
||||
DRF_DEF(_EGRESS, _ERR_NON_FATAL_REPORT_EN_1, _NXBAR_REDUCTION_HDR_ECC_LIMIT_ERR, _ENABLE) |
|
||||
DRF_DEF(_EGRESS, _ERR_NON_FATAL_REPORT_EN_1, _MCRSPCTRLSTORE_ECC_LIMIT_ERR, _ENABLE) |
|
||||
DRF_DEF(_EGRESS, _ERR_NON_FATAL_REPORT_EN_1, _RBCTRLSTORE_ECC_LIMIT_ERR, _ENABLE) |
|
||||
DRF_DEF(_EGRESS, _ERR_NON_FATAL_REPORT_EN_1, _MCREDSGT_ECC_LIMIT_ERR, _ENABLE) |
|
||||
DRF_DEF(_EGRESS, _ERR_NON_FATAL_REPORT_EN_1, _MCREDBUF_ECC_LIMIT_ERR, _ENABLE) |
|
||||
DRF_DEF(_EGRESS, _ERR_NON_FATAL_REPORT_EN_1, _MCRSP_RAM_HDR_ECC_LIMIT_ERR, _ENABLE) |
|
||||
DRF_DEF(_EGRESS, _ERR_NON_FATAL_REPORT_EN_1, _NXBAR_REDUCTION_HDR_ECC_DBE_ERR, _ENABLE) |
|
||||
DRF_DEF(_EGRESS, _ERR_NON_FATAL_REPORT_EN_1, _NXBAR_REDUCTION_HDR_PARITY_ERR, _ENABLE) |
|
||||
@@ -4360,12 +4360,16 @@ _nvswitch_service_nvltlc_tx_sys_fatal_ls10
|
||||
{
|
||||
NvU32 pending, bit, unhandled;
|
||||
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
|
||||
INFOROM_NVLINK_ERROR_EVENT error_event = { 0 };
|
||||
|
||||
report.raw_pending = NVSWITCH_LINK_RD32_LS10(device, link, NVLTLC, _NVLTLC_TX_SYS, _ERR_STATUS_0);
|
||||
report.raw_enable = NVSWITCH_LINK_RD32_LS10(device, link, NVLTLC, _NVLTLC_TX_SYS, _ERR_FATAL_REPORT_EN_0);
|
||||
report.mask = report.raw_enable;
|
||||
pending = report.raw_pending & report.mask;
|
||||
|
||||
error_event.nvliptInstance = (NvU8) nvlipt_instance;
|
||||
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LS10(link);
|
||||
|
||||
if (pending == 0)
|
||||
{
|
||||
return -NVL_NOT_FOUND;
|
||||
@@ -4379,6 +4383,10 @@ _nvswitch_service_nvltlc_tx_sys_fatal_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_TX_SYS_NCISOC_PARITY_ERR, "NCISOC Parity Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_TX_NCISOC_PARITY_ERR_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_TX_SYS, _ERR_STATUS_0, _NCISOC_HDR_ECC_DBE_ERR, 1);
|
||||
@@ -4386,6 +4394,10 @@ _nvswitch_service_nvltlc_tx_sys_fatal_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_TX_SYS_NCISOC_HDR_ECC_DBE_ERR, "NCISOC HDR ECC DBE Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_TX_NCISOC_HDR_ECC_DBE_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_TX_SYS, _ERR_STATUS_0, _NCISOC_DAT_ECC_DBE_ERR, 1);
|
||||
@@ -4468,12 +4480,16 @@ _nvswitch_service_nvltlc_rx_sys_fatal_ls10
|
||||
{
|
||||
NvU32 pending, bit, unhandled;
|
||||
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
|
||||
INFOROM_NVLINK_ERROR_EVENT error_event = { 0 };
|
||||
|
||||
report.raw_pending = NVSWITCH_LINK_RD32_LS10(device, link, NVLTLC, _NVLTLC_RX_SYS, _ERR_STATUS_0);
|
||||
report.raw_enable = NVSWITCH_LINK_RD32_LS10(device, link, NVLTLC, _NVLTLC_RX_SYS, _ERR_FATAL_REPORT_EN_0);
|
||||
report.mask = report.raw_enable;
|
||||
pending = report.raw_pending & report.mask;
|
||||
|
||||
error_event.nvliptInstance = (NvU8) nvlipt_instance;
|
||||
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LS10(link);
|
||||
|
||||
if (pending == 0)
|
||||
{
|
||||
return -NVL_NOT_FOUND;
|
||||
@@ -4494,6 +4510,11 @@ _nvswitch_service_nvltlc_rx_sys_fatal_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RX_SYS_HDR_RAM_ECC_DBE_ERR, "HDR RAM ECC DBE Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
// TODO 3014908 log these in the NVL object until we have ECC object support
|
||||
error_event.error = INFOROM_NVLINK_TLC_RX_HDR_RAM_ECC_DBE_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_RX_SYS, _ERR_STATUS_0, _HDR_RAM_ECC_LIMIT_ERR, 1);
|
||||
@@ -4508,6 +4529,11 @@ _nvswitch_service_nvltlc_rx_sys_fatal_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RX_SYS_DAT0_RAM_ECC_DBE_ERR, "DAT0 RAM ECC DBE Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
// TODO 3014908 log these in the NVL object until we have ECC object support
|
||||
error_event.error = INFOROM_NVLINK_TLC_RX_DAT0_RAM_ECC_DBE_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_RX_SYS, _ERR_STATUS_0, _DAT0_RAM_ECC_LIMIT_ERR, 1);
|
||||
@@ -4522,6 +4548,11 @@ _nvswitch_service_nvltlc_rx_sys_fatal_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RX_SYS_DAT1_RAM_ECC_DBE_ERR, "DAT1 RAM ECC DBE Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
// TODO 3014908 log these in the NVL object until we have ECC object support
|
||||
error_event.error = INFOROM_NVLINK_TLC_RX_DAT1_RAM_ECC_DBE_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_RX_SYS, _ERR_STATUS_0, _DAT1_RAM_ECC_LIMIT_ERR, 1);
|
||||
@@ -4569,12 +4600,16 @@ _nvswitch_service_nvltlc_tx_lnk_fatal_0_ls10
|
||||
{
|
||||
NvU32 pending, bit, unhandled;
|
||||
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
|
||||
INFOROM_NVLINK_ERROR_EVENT error_event = { 0 };
|
||||
|
||||
report.raw_pending = NVSWITCH_LINK_RD32_LS10(device, link, NVLTLC, _NVLTLC_TX_LNK, _ERR_STATUS_0);
|
||||
report.raw_enable = NVSWITCH_LINK_RD32_LS10(device, link, NVLTLC, _NVLTLC_TX_LNK, _ERR_FATAL_REPORT_EN_0);
|
||||
report.mask = report.raw_enable;
|
||||
pending = report.raw_pending & report.mask;
|
||||
|
||||
error_event.nvliptInstance = (NvU8) nvlipt_instance;
|
||||
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LS10(link);
|
||||
|
||||
if (pending == 0)
|
||||
{
|
||||
return -NVL_NOT_FOUND;
|
||||
@@ -4588,6 +4623,10 @@ _nvswitch_service_nvltlc_tx_lnk_fatal_0_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_TXDLCREDITPARITYERR, "TX DL Credit Parity Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_TX_DL_CREDIT_PARITY_ERR_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_TX_LNK, _ERR_STATUS_0, _CREQ_RAM_HDR_ECC_DBE_ERR, 1);
|
||||
@@ -4623,6 +4662,11 @@ _nvswitch_service_nvltlc_tx_lnk_fatal_0_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_TX_LNK_RSP1_RAM_DAT_ECC_DBE_ERR, "RSP1 RAM DAT ECC DBE Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
// TODO 3014908 log these in the NVL object until we have ECC object support
|
||||
error_event.error = INFOROM_NVLINK_TLC_TX_RSP1_DAT_RAM_ECC_DBE_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
NVSWITCH_UNHANDLED_CHECK(device, unhandled);
|
||||
@@ -4662,11 +4706,16 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_ls10
|
||||
{
|
||||
NvU32 pending, bit, unhandled;
|
||||
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
|
||||
INFOROM_NVLINK_ERROR_EVENT error_event = { 0 };
|
||||
|
||||
report.raw_pending = NVSWITCH_LINK_RD32_LS10(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_STATUS_0);
|
||||
report.raw_enable = NVSWITCH_LINK_RD32_LS10(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_FATAL_REPORT_EN_0);
|
||||
report.mask = report.raw_enable;
|
||||
pending = report.raw_pending & report.mask;
|
||||
|
||||
error_event.nvliptInstance = (NvU8) nvlipt_instance;
|
||||
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LS10(link);
|
||||
|
||||
if (pending == 0)
|
||||
{
|
||||
return -NVL_NOT_FOUND;
|
||||
@@ -4680,6 +4729,10 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RXDLHDRPARITYERR, "RX DL HDR Parity Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_RX_DL_HDR_PARITY_ERR_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _RXDLDATAPARITYERR, 1);
|
||||
@@ -4687,6 +4740,10 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RXDLDATAPARITYERR, "RX DL Data Parity Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_RX_DL_DATA_PARITY_ERR_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _RXDLCTRLPARITYERR, 1);
|
||||
@@ -4694,6 +4751,10 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RXDLCTRLPARITYERR, "RX DL Ctrl Parity Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_RX_DL_CTRL_PARITY_ERR_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _RXPKTLENERR, 1);
|
||||
@@ -4701,6 +4762,10 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RXPKTLENERR, "RX Packet Length Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_RX_PKTLEN_ERR_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _RSVCACHEATTRPROBEREQERR, 1);
|
||||
@@ -4708,6 +4773,10 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RSVCACHEATTRPROBEREQERR, "RSV Packet Status Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_RX_RSVD_CACHE_ATTR_PROBE_REQ_ERR_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _RSVCACHEATTRPROBERSPERR, 1);
|
||||
@@ -4715,6 +4784,10 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RSVCACHEATTRPROBERSPERR, "RSV CacheAttr Probe Rsp Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_RX_RSVD_CACHE_ATTR_PROBE_RSP_ERR_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _DATLENGTRMWREQMAXERR, 1);
|
||||
@@ -4722,6 +4795,10 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_DATLENGTRMWREQMAXERR, "Data Length RMW Req Max Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_RX_DATLEN_GT_RMW_REQ_MAX_ERR_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _DATLENLTATRRSPMINERR, 1);
|
||||
@@ -4729,6 +4806,10 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_DATLENLTATRRSPMINERR, "Data Len Lt ATR RSP Min Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_RX_DATLEN_LT_ATR_RSP_MIN_ERR_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _INVALIDCACHEATTRPOERR, 1);
|
||||
@@ -4736,6 +4817,10 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_INVALIDCACHEATTRPOERR, "Invalid Cache Attr PO Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_RX_INVALID_PO_FOR_CACHE_ATTR_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _RXRSPSTATUS_HW_ERR, 1);
|
||||
@@ -4743,6 +4828,10 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RX_LNK_RXRSPSTATUS_HW_ERR, "RX Rsp Status HW Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_RX_RSP_STATUS_HW_ERR_NONFATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _RXRSPSTATUS_UR_ERR, 1);
|
||||
@@ -4750,6 +4839,10 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RX_LNK_RXRSPSTATUS_UR_ERR, "RX Rsp Status UR Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_RX_RSP_STATUS_UR_ERR_NONFATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_0, _INVALID_COLLAPSED_RESPONSE_ERR, 1);
|
||||
@@ -4757,6 +4850,10 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_0_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RX_LNK_INVALID_COLLAPSED_RESPONSE_ERR, "Invalid Collapsed Response Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_RX_INVALID_COLLAPSED_RESPONSE_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
NVSWITCH_UNHANDLED_CHECK(device, unhandled);
|
||||
@@ -4796,12 +4893,17 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_1_ls10
|
||||
{
|
||||
NvU32 pending, bit, unhandled;
|
||||
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
|
||||
INFOROM_NVLINK_ERROR_EVENT error_event = { 0 };
|
||||
NvU32 injected;
|
||||
|
||||
report.raw_pending = NVSWITCH_LINK_RD32_LS10(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_STATUS_1);
|
||||
report.raw_enable = NVSWITCH_LINK_RD32_LS10(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_FATAL_REPORT_EN_1);
|
||||
report.mask = report.raw_enable;
|
||||
pending = report.raw_pending & report.mask;
|
||||
|
||||
error_event.nvliptInstance = (NvU8) nvlipt_instance;
|
||||
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LS10(link);
|
||||
|
||||
if (pending == 0)
|
||||
{
|
||||
return -NVL_NOT_FOUND;
|
||||
@@ -4809,12 +4911,19 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_1_ls10
|
||||
|
||||
unhandled = pending;
|
||||
report.raw_first = NVSWITCH_LINK_RD32_LS10(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_FIRST_1);
|
||||
injected = NVSWITCH_LINK_RD32_LS10(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_REPORT_INJECT_1);
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_1, _RXHDROVFERR, 1);
|
||||
if (nvswitch_test_flags(pending, bit))
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RXHDROVFERR, "RX HDR OVF Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
|
||||
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_1, _RXHDROVFERR, 0x0, injected))
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_RX_HDR_OVERFLOW_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_1, _RXDATAOVFERR, 1);
|
||||
@@ -4822,6 +4931,12 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_1_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_RXDATAOVFERR, "RX Data OVF Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
|
||||
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_1, _RXDATAOVFERR, 0x0, injected))
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_RX_DATA_OVERFLOW_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_1, _STOMPDETERR, 1);
|
||||
@@ -4829,6 +4944,12 @@ _nvswitch_service_nvltlc_rx_lnk_fatal_1_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLTLC_STOMPDETERR, "Stomp Det Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
|
||||
if (FLD_TEST_DRF_NUM(_NVLTLC, _RX_LNK_ERR_REPORT_INJECT_1, _STOMPDETERR, 0x0, injected))
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_RX_STOMP_DETECTED_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_1, _RXPOISONERR, 1);
|
||||
@@ -4948,6 +5069,7 @@ _nvswitch_service_nvlipt_common_fatal_ls10
|
||||
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
|
||||
NvU32 pending, bit, contain, unhandled;
|
||||
NvU32 link, local_link_idx;
|
||||
INFOROM_NVLINK_ERROR_EVENT error_event = { 0 };
|
||||
|
||||
report.raw_pending = NVSWITCH_ENG_RD32(device, NVLIPT, , instance, _NVLIPT_COMMON, _ERR_STATUS_0);
|
||||
report.raw_enable = NVSWITCH_ENG_RD32(device, NVLIPT, , instance, _NVLIPT_COMMON, _ERR_FATAL_REPORT_EN_0);
|
||||
@@ -4959,6 +5081,8 @@ _nvswitch_service_nvlipt_common_fatal_ls10
|
||||
return -NVL_NOT_FOUND;
|
||||
}
|
||||
|
||||
error_event.nvliptInstance = (NvU8) instance;
|
||||
|
||||
unhandled = pending;
|
||||
report.raw_first = NVSWITCH_ENG_RD32(device, NVLIPT, , instance, _NVLIPT_COMMON, _ERR_FIRST_0);
|
||||
contain = NVSWITCH_ENG_RD32(device, NVLIPT, , instance, _NVLIPT_COMMON, _ERR_CONTAIN_EN_0);
|
||||
@@ -4976,6 +5100,10 @@ _nvswitch_service_nvlipt_common_fatal_ls10
|
||||
}
|
||||
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_NVLIPT_CLKCTL_ILLEGAL_REQUEST_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
NVSWITCH_UNHANDLED_CHECK(device, unhandled);
|
||||
@@ -5302,6 +5430,7 @@ _nvswitch_emit_link_errors_nvldl_fatal_link_ls10
|
||||
ls10_device *chip_device = NVSWITCH_GET_CHIP_DEVICE_LS10(device);
|
||||
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
|
||||
NvU32 pending, bit;
|
||||
INFOROM_NVLINK_ERROR_EVENT error_event;
|
||||
|
||||
// Only enabled link errors are deffered
|
||||
pending = chip_device->deferredLinkErrors[link].fatalIntrMask.dl;
|
||||
@@ -5309,10 +5438,15 @@ _nvswitch_emit_link_errors_nvldl_fatal_link_ls10
|
||||
report.raw_enable = pending;
|
||||
report.mask = report.raw_enable;
|
||||
|
||||
error_event.nvliptInstance = (NvU8) nvlipt_instance;
|
||||
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LS10(link);
|
||||
|
||||
bit = DRF_NUM(_NVLDL_TOP, _INTR, _LTSSM_FAULT_UP, 1);
|
||||
if (nvswitch_test_flags(pending, bit))
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_DLPL_LTSSM_FAULT_UP, "LTSSM Fault Up", NV_FALSE);
|
||||
error_event.error = INFOROM_NVLINK_DL_LTSSM_FAULT_UP_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5336,10 +5470,6 @@ _nvswitch_emit_link_errors_nvldl_nonfatal_link_ls10
|
||||
bit = DRF_NUM(_NVLDL_TOP, _INTR, _RX_SHORT_ERROR_RATE, 1);
|
||||
if (nvswitch_test_flags(pending, bit))
|
||||
{
|
||||
// Disable further interrupts
|
||||
nvlink_link *nvlink = nvswitch_get_link(device, link);
|
||||
nvlink->errorThreshold.bInterruptTrigerred = NV_TRUE;
|
||||
nvswitch_configure_error_rate_threshold_interrupt_ls10(nvlink, NV_FALSE);
|
||||
NVSWITCH_REPORT_NONFATAL(_HW_DLPL_RX_SHORT_ERROR_RATE, "RX Short Error Rate");
|
||||
}
|
||||
}
|
||||
@@ -5354,7 +5484,9 @@ _nvswitch_emit_link_errors_nvltlc_rx_lnk_nonfatal_1_ls10
|
||||
{
|
||||
ls10_device *chip_device = NVSWITCH_GET_CHIP_DEVICE_LS10(device);
|
||||
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
|
||||
NvU32 pending, bit, injected;
|
||||
NvU32 pending, bit;
|
||||
INFOROM_NVLINK_ERROR_EVENT error_event;
|
||||
NvU32 injected;
|
||||
|
||||
// Only enabled link errors are deffered
|
||||
pending = chip_device->deferredLinkErrors[link].nonFatalIntrMask.tlcRx1;
|
||||
@@ -5363,6 +5495,9 @@ _nvswitch_emit_link_errors_nvltlc_rx_lnk_nonfatal_1_ls10
|
||||
report.raw_enable = pending;
|
||||
report.mask = report.raw_enable;
|
||||
|
||||
error_event.nvliptInstance = (NvU8) nvlipt_instance;
|
||||
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LS10(link);
|
||||
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_RX_LNK, _ERR_STATUS_1, _HEARTBEAT_TIMEOUT_ERR, 1);
|
||||
if (nvswitch_test_flags(pending, bit))
|
||||
@@ -5371,6 +5506,8 @@ _nvswitch_emit_link_errors_nvltlc_rx_lnk_nonfatal_1_ls10
|
||||
|
||||
if (FLD_TEST_DRF_NUM(_NVLTLC_RX_LNK, _ERR_REPORT_INJECT_1, _HEARTBEAT_TIMEOUT_ERR, 0x0, injected))
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_RX_AN1_HEARTBEAT_TIMEOUT_NONFATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5386,6 +5523,7 @@ _nvswitch_emit_link_errors_nvlipt_lnk_nonfatal_ls10
|
||||
ls10_device *chip_device = NVSWITCH_GET_CHIP_DEVICE_LS10(device);
|
||||
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
|
||||
NvU32 pending, bit;
|
||||
INFOROM_NVLINK_ERROR_EVENT error_event;
|
||||
|
||||
// Only enabled link errors are deffered
|
||||
pending = chip_device->deferredLinkErrors[link].nonFatalIntrMask.liptLnk;
|
||||
@@ -5393,11 +5531,18 @@ _nvswitch_emit_link_errors_nvlipt_lnk_nonfatal_ls10
|
||||
report.raw_enable = pending;
|
||||
report.mask = report.raw_enable;
|
||||
|
||||
error_event.nvliptInstance = (NvU8) nvlipt_instance;
|
||||
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LS10(link);
|
||||
|
||||
bit = DRF_NUM(_NVLIPT_LNK, _ERR_STATUS_0, _FAILEDMINIONREQUEST, 1);
|
||||
if (nvswitch_test_flags(pending, bit))
|
||||
{
|
||||
NVSWITCH_REPORT_NONFATAL(_HW_NVLIPT_LNK_FAILEDMINIONREQUEST, "_FAILEDMINIONREQUEST");
|
||||
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_NVLIPT_FAILED_MINION_REQUEST_NONFATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5754,11 +5899,15 @@ _nvswitch_service_nvltlc_rx_lnk_nonfatal_0_ls10
|
||||
{
|
||||
NvU32 pending, bit, unhandled;
|
||||
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
|
||||
INFOROM_NVLINK_ERROR_EVENT error_event;
|
||||
|
||||
report.raw_pending = NVSWITCH_LINK_RD32(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_STATUS_0);
|
||||
report.raw_enable = NVSWITCH_LINK_RD32(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_NON_FATAL_REPORT_EN_0);
|
||||
report.mask = report.raw_enable;
|
||||
|
||||
error_event.nvliptInstance = (NvU8) nvlipt_instance;
|
||||
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LS10(link);
|
||||
|
||||
pending = report.raw_pending & report.mask;
|
||||
if (pending == 0)
|
||||
{
|
||||
@@ -5773,6 +5922,10 @@ _nvswitch_service_nvltlc_rx_lnk_nonfatal_0_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_NONFATAL(_HW_NVLTLC_RX_LNK_RXRSPSTATUS_PRIV_ERR, "RX Rsp Status PRIV Error");
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_RX_RSP_STATUS_PRIV_ERR_NONFATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
NVSWITCH_UNHANDLED_CHECK(device, unhandled);
|
||||
@@ -5805,12 +5958,16 @@ _nvswitch_service_nvltlc_tx_lnk_nonfatal_0_ls10
|
||||
{
|
||||
NvU32 pending, bit, unhandled;
|
||||
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
|
||||
INFOROM_NVLINK_ERROR_EVENT error_event;
|
||||
|
||||
report.raw_pending = NVSWITCH_LINK_RD32(device, link, NVLTLC, _NVLTLC_TX_LNK, _ERR_STATUS_0);
|
||||
report.raw_enable = NVSWITCH_LINK_RD32(device, link, NVLTLC, _NVLTLC_TX_LNK, _ERR_NON_FATAL_REPORT_EN_0);
|
||||
report.mask = report.raw_enable;
|
||||
pending = report.raw_pending & report.mask;
|
||||
|
||||
error_event.nvliptInstance = (NvU8) nvlipt_instance;
|
||||
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LS10(link);
|
||||
|
||||
if (pending == 0)
|
||||
{
|
||||
return -NVL_NOT_FOUND;
|
||||
@@ -5824,6 +5981,11 @@ _nvswitch_service_nvltlc_tx_lnk_nonfatal_0_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_NONFATAL(_HW_NVLTLC_TX_LNK_CREQ_RAM_DAT_ECC_DBE_ERR, "CREQ RAM DAT ECC DBE Error");
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
// TODO 3014908 log these in the NVL object until we have ECC object support
|
||||
error_event.error = INFOROM_NVLINK_TLC_TX_CREQ_DAT_RAM_ECC_DBE_NONFATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_TX_LNK, _ERR_STATUS_0, _CREQ_RAM_ECC_LIMIT_ERR, 1);
|
||||
@@ -5852,6 +6014,11 @@ _nvswitch_service_nvltlc_tx_lnk_nonfatal_0_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_NONFATAL(_HW_NVLTLC_TX_LNK_COM_RAM_DAT_ECC_DBE_ERR, "COM RAM DAT ECC DBE Error");
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
// TODO 3014908 log these in the NVL object until we have ECC object support
|
||||
error_event.error = INFOROM_NVLINK_TLC_TX_COM_DAT_RAM_ECC_DBE_NONFATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_TX_LNK, _ERR_STATUS_0, _COM_RAM_ECC_LIMIT_ERR, 1);
|
||||
@@ -5904,8 +6071,9 @@ _nvswitch_service_nvltlc_rx_lnk_nonfatal_1_ls10
|
||||
)
|
||||
{
|
||||
ls10_device *chip_device = NVSWITCH_GET_CHIP_DEVICE_LS10(device);
|
||||
NvU32 pending, bit, unhandled, injected;
|
||||
NvU32 pending, bit, unhandled;
|
||||
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
|
||||
NvU32 injected;
|
||||
|
||||
report.raw_pending = NVSWITCH_LINK_RD32(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_STATUS_1);
|
||||
report.raw_enable = NVSWITCH_LINK_RD32(device, link, NVLTLC, _NVLTLC_RX_LNK, _ERR_NON_FATAL_REPORT_EN_1);
|
||||
@@ -5983,12 +6151,16 @@ _nvswitch_service_nvltlc_tx_lnk_nonfatal_1_ls10
|
||||
{
|
||||
NvU32 pending, bit, unhandled;
|
||||
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
|
||||
INFOROM_NVLINK_ERROR_EVENT error_event = { 0 };
|
||||
|
||||
report.raw_pending = NVSWITCH_LINK_RD32(device, link, NVLTLC, _NVLTLC_TX_LNK, _ERR_STATUS_1);
|
||||
report.raw_enable = NVSWITCH_LINK_RD32(device, link, NVLTLC, _NVLTLC_TX_LNK, _ERR_NON_FATAL_REPORT_EN_1);
|
||||
report.mask = report.raw_enable;
|
||||
pending = report.raw_pending & report.mask;
|
||||
|
||||
error_event.nvliptInstance = (NvU8) nvlipt_instance;
|
||||
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LS10(link);
|
||||
|
||||
if (pending == 0)
|
||||
{
|
||||
return -NVL_NOT_FOUND;
|
||||
@@ -6002,6 +6174,10 @@ _nvswitch_service_nvltlc_tx_lnk_nonfatal_1_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_NONFATAL(_HW_NVLTLC_TX_LNK_AN1_TIMEOUT_VC0, "AN1 Timeout VC0");
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC0_NONFATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_TX_LNK, _ERR_STATUS_1, _TIMEOUT_VC1, 1);
|
||||
@@ -6009,6 +6185,10 @@ _nvswitch_service_nvltlc_tx_lnk_nonfatal_1_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_NONFATAL(_HW_NVLTLC_TX_LNK_AN1_TIMEOUT_VC1, "AN1 Timeout VC1");
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC1_NONFATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_TX_LNK, _ERR_STATUS_1, _TIMEOUT_VC2, 1);
|
||||
@@ -6016,13 +6196,21 @@ _nvswitch_service_nvltlc_tx_lnk_nonfatal_1_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_NONFATAL(_HW_NVLTLC_TX_LNK_AN1_TIMEOUT_VC2, "AN1 Timeout VC2");
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
}
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC2_NONFATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_TX_LNK, _ERR_STATUS_1, _TIMEOUT_VC3, 1);
|
||||
if (nvswitch_test_flags(pending, bit))
|
||||
{
|
||||
NVSWITCH_REPORT_NONFATAL(_HW_NVLTLC_TX_LNK_AN1_TIMEOUT_VC3, "AN1 Timeout VC3");
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC3_NONFATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_TX_LNK, _ERR_STATUS_1, _TIMEOUT_VC4, 1);
|
||||
@@ -6030,6 +6218,10 @@ _nvswitch_service_nvltlc_tx_lnk_nonfatal_1_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_NONFATAL(_HW_NVLTLC_TX_LNK_AN1_TIMEOUT_VC4, "AN1 Timeout VC4");
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC4_NONFATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_TX_LNK, _ERR_STATUS_1, _TIMEOUT_VC5, 1);
|
||||
@@ -6037,6 +6229,10 @@ _nvswitch_service_nvltlc_tx_lnk_nonfatal_1_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_NONFATAL(_HW_NVLTLC_TX_LNK_AN1_TIMEOUT_VC5, "AN1 Timeout VC5");
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC5_NONFATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_TX_LNK, _ERR_STATUS_1, _TIMEOUT_VC6, 1);
|
||||
@@ -6044,6 +6240,10 @@ _nvswitch_service_nvltlc_tx_lnk_nonfatal_1_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_NONFATAL(_HW_NVLTLC_TX_LNK_AN1_TIMEOUT_VC6, "AN1 Timeout VC6");
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC6_NONFATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLTLC_TX_LNK, _ERR_STATUS_1, _TIMEOUT_VC7, 1);
|
||||
@@ -6051,6 +6251,10 @@ _nvswitch_service_nvltlc_tx_lnk_nonfatal_1_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_NONFATAL(_HW_NVLTLC_TX_LNK_AN1_TIMEOUT_VC7, "AN1 Timeout VC7");
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_TLC_TX_AN1_TIMEOUT_VC7_NONFATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
NVSWITCH_UNHANDLED_CHECK(device, unhandled);
|
||||
@@ -6228,11 +6432,15 @@ _nvswitch_service_nvlipt_lnk_nonfatal_ls10
|
||||
NvU32 lnkStateRequest, lnkStateStatus;
|
||||
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
|
||||
NvU32 pending, bit, unhandled;
|
||||
INFOROM_NVLINK_ERROR_EVENT error_event = { 0 };
|
||||
|
||||
report.raw_pending = NVSWITCH_LINK_RD32(device, link, NVLIPT_LNK, _NVLIPT_LNK, _ERR_STATUS_0);
|
||||
report.raw_enable = NVSWITCH_LINK_RD32(device, link, NVLIPT_LNK, _NVLIPT_LNK, _ERR_NON_FATAL_REPORT_EN_0);
|
||||
report.mask = report.raw_enable;
|
||||
|
||||
error_event.nvliptInstance = (NvU8) nvlipt_instance;
|
||||
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LS10(link);
|
||||
|
||||
pending = report.raw_pending & report.mask;
|
||||
if (pending == 0)
|
||||
{
|
||||
@@ -6247,6 +6455,10 @@ _nvswitch_service_nvlipt_lnk_nonfatal_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_NONFATAL(_HW_NVLIPT_LNK_ILLEGALLINKSTATEREQUEST, "_HW_NVLIPT_LNK_ILLEGALLINKSTATEREQUEST");
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_NVLIPT_ILLEGAL_LINK_STATE_REQUEST_NONFATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLIPT_LNK, _ERR_STATUS_0, _FAILEDMINIONREQUEST, 1);
|
||||
@@ -6288,6 +6500,10 @@ _nvswitch_service_nvlipt_lnk_nonfatal_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_NONFATAL(_HW_NVLIPT_LNK_RESERVEDREQUESTVALUE, "_RESERVEDREQUESTVALUE");
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_NVLIPT_RESERVED_REQUEST_VALUE_NONFATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLIPT_LNK, _ERR_STATUS_0, _LINKSTATEWRITEWHILEBUSY, 1);
|
||||
@@ -6295,6 +6511,10 @@ _nvswitch_service_nvlipt_lnk_nonfatal_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_NONFATAL(_HW_NVLIPT_LNK_LINKSTATEWRITEWHILEBUSY, "_LINKSTATEWRITEWHILEBUSY");
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_NVLIPT_LINK_STATE_WRITE_WHILE_BUSY_NONFATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLIPT_LNK, _ERR_STATUS_0, _LINK_STATE_REQUEST_TIMEOUT, 1);
|
||||
@@ -6302,6 +6522,10 @@ _nvswitch_service_nvlipt_lnk_nonfatal_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_NONFATAL(_HW_NVLIPT_LNK_LINK_STATE_REQUEST_TIMEOUT, "_LINK_STATE_REQUEST_TIMEOUT");
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_NVLIPT_LINK_STATE_REQUEST_TIMEOUT_NONFATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLIPT_LNK, _ERR_STATUS_0, _WRITE_TO_LOCKED_SYSTEM_REG_ERR, 1);
|
||||
@@ -6309,6 +6533,10 @@ _nvswitch_service_nvlipt_lnk_nonfatal_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_NONFATAL(_HW_NVLIPT_LNK_WRITE_TO_LOCKED_SYSTEM_REG_ERR, "_WRITE_TO_LOCKED_SYSTEM_REG_ERR");
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_NVLIPT_WRITE_TO_LOCKED_SYSTEM_REG_NONFATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
NVSWITCH_UNHANDLED_CHECK(device, unhandled);
|
||||
@@ -6521,6 +6749,7 @@ _nvswitch_service_nvlipt_lnk_fatal_ls10
|
||||
{
|
||||
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
|
||||
NvU32 pending, bit, unhandled;
|
||||
INFOROM_NVLINK_ERROR_EVENT error_event = { 0 };
|
||||
|
||||
report.raw_pending = NVSWITCH_LINK_RD32(device, link, NVLIPT_LNK, _NVLIPT_LNK, _ERR_STATUS_0);
|
||||
report.raw_enable = NVSWITCH_LINK_RD32(device, link, NVLIPT_LNK, _NVLIPT_LNK, _ERR_FATAL_REPORT_EN_0);
|
||||
@@ -6532,6 +6761,9 @@ _nvswitch_service_nvlipt_lnk_fatal_ls10
|
||||
return -NVL_NOT_FOUND;
|
||||
}
|
||||
|
||||
error_event.nvliptInstance = (NvU8) nvlipt_instance;
|
||||
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LS10(link);
|
||||
|
||||
unhandled = pending;
|
||||
report.raw_first = NVSWITCH_LINK_RD32(device, link, NVLIPT_LNK, _NVLIPT_LNK, _ERR_FIRST_0);
|
||||
|
||||
@@ -6540,6 +6772,10 @@ _nvswitch_service_nvlipt_lnk_fatal_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLIPT_LNK_SLEEPWHILEACTIVELINK, "No non-empty link is detected", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_NVLIPT_SLEEP_WHILE_ACTIVE_LINK_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLIPT_LNK, _ERR_STATUS_0, _RSTSEQ_PHYCTL_TIMEOUT, 1);
|
||||
@@ -6547,6 +6783,10 @@ _nvswitch_service_nvlipt_lnk_fatal_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLIPT_LNK_RSTSEQ_PHYCTL_TIMEOUT, "Reset sequencer timed out waiting for a handshake from PHYCTL", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_NVLIPT_RSTSEQ_PHYCTL_TIMEOUT_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLIPT_LNK, _ERR_STATUS_0, _RSTSEQ_CLKCTL_TIMEOUT, 1);
|
||||
@@ -6554,6 +6794,10 @@ _nvswitch_service_nvlipt_lnk_fatal_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_NVLIPT_LNK_RSTSEQ_CLKCTL_TIMEOUT, "Reset sequencer timed out waiting for a handshake from CLKCTL", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
{
|
||||
error_event.error = INFOROM_NVLINK_NVLIPT_RSTSEQ_CLKCTL_TIMEOUT_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
}
|
||||
|
||||
NVSWITCH_UNHANDLED_CHECK(device, unhandled);
|
||||
@@ -6646,12 +6890,12 @@ _nvswitch_service_nvlw_fatal_ls10
|
||||
status[5] = _nvswitch_service_nvlipt_link_fatal_ls10(device, instance);
|
||||
|
||||
|
||||
if (status[0] != NVL_SUCCESS && status[0] != -NVL_NOT_FOUND &&
|
||||
status[1] != NVL_SUCCESS && status[1] != -NVL_NOT_FOUND &&
|
||||
status[2] != NVL_SUCCESS && status[2] != -NVL_NOT_FOUND &&
|
||||
status[3] != NVL_SUCCESS && status[3] != -NVL_NOT_FOUND &&
|
||||
status[4] != NVL_SUCCESS && status[4] != -NVL_NOT_FOUND &&
|
||||
status[5] != NVL_SUCCESS && status[5] != -NVL_NOT_FOUND)
|
||||
if (status[0] != NVL_SUCCESS &&
|
||||
status[1] != NVL_SUCCESS &&
|
||||
status[2] != NVL_SUCCESS &&
|
||||
status[3] != NVL_SUCCESS &&
|
||||
status[4] != NVL_SUCCESS &&
|
||||
status[5] != NVL_SUCCESS)
|
||||
{
|
||||
return -NVL_MORE_PROCESSING_REQUIRED;
|
||||
}
|
||||
@@ -7071,12 +7315,16 @@ nvswitch_service_nvldl_fatal_link_ls10
|
||||
NvBool bSkipIntrClear = NV_FALSE;
|
||||
|
||||
NVSWITCH_INTERRUPT_LOG_TYPE report = { 0 };
|
||||
INFOROM_NVLINK_ERROR_EVENT error_event;
|
||||
|
||||
report.raw_pending = NVSWITCH_LINK_RD32(device, link, NVLDL, _NVLDL_TOP, _INTR);
|
||||
report.raw_enable = NVSWITCH_LINK_RD32(device, link, NVLDL, _NVLDL_TOP, _INTR_STALL_EN);
|
||||
report.mask = report.raw_enable;
|
||||
pending = report.raw_pending & report.mask;
|
||||
|
||||
error_event.nvliptInstance = (NvU8) nvlipt_instance;
|
||||
error_event.localLinkIdx = (NvU8) NVSWITCH_NVLIPT_GET_LOCAL_LINK_ID_LS10(link);
|
||||
|
||||
if (pending == 0)
|
||||
{
|
||||
return -NVL_NOT_FOUND;
|
||||
@@ -7089,6 +7337,8 @@ nvswitch_service_nvldl_fatal_link_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_DLPL_TX_FAULT_RAM, "TX Fault Ram", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
error_event.error = INFOROM_NVLINK_DL_TX_FAULT_RAM_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLDL_TOP, _INTR, _TX_FAULT_INTERFACE, 1);
|
||||
@@ -7096,6 +7346,8 @@ nvswitch_service_nvldl_fatal_link_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_DLPL_TX_FAULT_INTERFACE, "TX Fault Interface", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
error_event.error = INFOROM_NVLINK_DL_TX_FAULT_INTERFACE_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLDL_TOP, _INTR, _TX_FAULT_SUBLINK_CHANGE, 1);
|
||||
@@ -7103,6 +7355,8 @@ nvswitch_service_nvldl_fatal_link_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_DLPL_TX_FAULT_SUBLINK_CHANGE, "TX Fault Sublink Change", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
error_event.error = INFOROM_NVLINK_DL_TX_FAULT_SUBLINK_CHANGE_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLDL_TOP, _INTR, _RX_FAULT_SUBLINK_CHANGE, 1);
|
||||
@@ -7110,6 +7364,8 @@ nvswitch_service_nvldl_fatal_link_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_DLPL_RX_FAULT_SUBLINK_CHANGE, "RX Fault Sublink Change", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
error_event.error = INFOROM_NVLINK_DL_RX_FAULT_SUBLINK_CHANGE_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLDL_TOP, _INTR, _RX_FAULT_DL_PROTOCOL, 1);
|
||||
@@ -7117,6 +7373,8 @@ nvswitch_service_nvldl_fatal_link_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_DLPL_RX_FAULT_DL_PROTOCOL, "RX Fault DL Protocol", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
error_event.error = INFOROM_NVLINK_DL_RX_FAULT_DL_PROTOCOL_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLDL_TOP, _INTR, _LTSSM_FAULT_DOWN, 1);
|
||||
@@ -7124,6 +7382,8 @@ nvswitch_service_nvldl_fatal_link_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_DLPL_LTSSM_FAULT_DOWN, "LTSSM Fault Down", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
error_event.error = INFOROM_NVLINK_DL_LTSSM_FAULT_DOWN_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLDL_TOP, _INTR, _LTSSM_PROTOCOL, 1);
|
||||
@@ -7131,6 +7391,8 @@ nvswitch_service_nvldl_fatal_link_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_DLPL_LTSSM_PROTOCOL, "LTSSM Protocol Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
|
||||
// TODO 2827793 this should be logged to the InfoROM as fatal
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLDL_TOP, _INTR, _PHY_A, 1);
|
||||
@@ -7138,6 +7400,8 @@ nvswitch_service_nvldl_fatal_link_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_DLPL_PHY_A, "PHY_A Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
error_event.error = INFOROM_NVLINK_DL_PHY_A_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLDL_TOP, _INTR, _TX_PL_ERROR, 1);
|
||||
@@ -7145,6 +7409,8 @@ nvswitch_service_nvldl_fatal_link_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_DLPL_TX_PL_ERROR, "TX_PL Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
error_event.error = INFOROM_NVLINK_DL_TX_PL_ERROR_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
|
||||
bit = DRF_NUM(_NVLDL_TOP, _INTR, _RX_PL_ERROR, 1);
|
||||
@@ -7152,6 +7418,8 @@ nvswitch_service_nvldl_fatal_link_ls10
|
||||
{
|
||||
NVSWITCH_REPORT_FATAL(_HW_DLPL_RX_PL_ERROR, "RX_PL Error", NV_FALSE);
|
||||
nvswitch_clear_flags(&unhandled, bit);
|
||||
error_event.error = INFOROM_NVLINK_DL_RX_PL_ERROR_FATAL;
|
||||
nvswitch_inforom_nvlink_log_error_event(device, &error_event);
|
||||
}
|
||||
|
||||
//
|
||||
@@ -7192,7 +7460,7 @@ nvswitch_service_nvldl_fatal_link_ls10
|
||||
|
||||
if (!bSkipIntrClear)
|
||||
{
|
||||
NVSWITCH_LINK_WR32(device, link, NVLDL, _NVLDL_TOP, _INTR, pending);
|
||||
NVSWITCH_LINK_WR32(device, link, NVLDL, _NVLDL_TOP, _INTR, pending);
|
||||
}
|
||||
|
||||
if (unhandled != 0)
|
||||
|
||||
Reference in New Issue
Block a user