[][Refine FE ISR to detect NETSYS error events]
[Description]
Change Panther/Cheetah FE ISR judgement to detect the
FE Error events that might lead to NETSYS Tx/Rx hang.
- EVENT_FQ_EMPTY
- EVENT_TSO_FAIL
- EVENT_TSO_ILLEGAL
- EVENT_TSO_ALIGN
- EVENT_RFIFO_OV
- EVENT_RFIFO_UF
[Release-log]
N/A
Change-Id: I440b23ffe84714be974a480d17cf454c6a3d0c6c
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/5884797
diff --git a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_reset.c b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_reset.c
index 13dbef4..1cd12bf 100644
--- a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_reset.c
+++ b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_reset.c
@@ -93,7 +93,7 @@
}
pr_info("[%s] reset record val1=0x%x, val2=0x%x, val3=0x%x !\n",
- __func__, val1, val2, val3);
+ __func__, val1, val2, val3);
if (!done)
mtk_eth_cold_reset(eth);
@@ -143,9 +143,17 @@
while (status) {
val = ffs((unsigned int)status) - 1;
status &= ~(1 << val);
- pr_info("[%s] Detect reset event: %s !\n", __func__,
- mtk_reset_event_name[val]);
+
+ if ((val == MTK_EVENT_FQ_EMPTY) ||
+ (val == MTK_EVENT_TSO_FAIL) ||
+ (val == MTK_EVENT_TSO_ILLEGAL) ||
+ (val == MTK_EVENT_TSO_ALIGN) ||
+ (val == MTK_EVENT_RFIFO_OV) ||
+ (val == MTK_EVENT_RFIFO_UF))
+ pr_info("[%s] Detect reset event: %s !\n", __func__,
+ mtk_reset_event_name[val]);
}
+ mtk_w32(eth, 0xFFFFFFFF, MTK_FE_INT_STATUS);
return IRQ_HANDLED;
}