[][update netsys reset condition for ax7800 and ax8400]
[Description]
Add netsys reset flow for ax7800 and ax8400
-- ax7800 and ax8400 need reset two wifi chip
- wifi notify eth when wifi chip online/offline
- eth record wifi number by detect online/offline
- eth need wait all wifi reset done before hw reset
-- remove pse free empty detction
- free empty trigger by chip when pse buffer less than drop threshold
- pse is active when trigger free emptry
- too much logs of free empty event may affect wifi packet handle
[Release-log]
N/A
Change-Id: I8fa47be45a3d2783cc7217e0130b10bce03d77a7
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/6016967
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 a8aeccc..4df1892 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
@@ -22,6 +22,9 @@
[MTK_EVENT_RFIFO_UF] = "RFIFO UF",
};
+static int mtk_wifi_num = 0;
+static int mtk_rest_cnt = 0;
+
void mtk_reset_event_update(struct mtk_eth *eth, u32 id)
{
struct mtk_reset_event *reset_event = ð->reset_event;
@@ -144,8 +147,7 @@
val = ffs((unsigned int)status) - 1;
status &= ~(1 << val);
- if ((val == MTK_EVENT_FQ_EMPTY) ||
- (val == MTK_EVENT_TSO_FAIL) ||
+ if ((val == MTK_EVENT_TSO_FAIL) ||
(val == MTK_EVENT_TSO_ILLEGAL) ||
(val == MTK_EVENT_TSO_ALIGN) ||
(val == MTK_EVENT_RFIFO_OV) ||
@@ -391,7 +393,19 @@
{
switch (event) {
case MTK_WIFI_RESET_DONE:
- complete(&wait_ser_done);
+ mtk_rest_cnt--;
+ if(!mtk_rest_cnt) {
+ complete(&wait_ser_done);
+ mtk_rest_cnt = mtk_wifi_num;
+ }
+ break;
+ case MTK_WIFI_CHIP_ONLINE:
+ mtk_wifi_num++;
+ mtk_rest_cnt = mtk_wifi_num;
+ break;
+ case MTK_WIFI_CHIP_OFFLINE:
+ mtk_wifi_num--;
+ mtk_rest_cnt = mtk_wifi_num;
break;
default:
break;
diff --git a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_reset.h b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_reset.h
index 9abd2f5..547d48f 100644
--- a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_reset.h
+++ b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_reset.h
@@ -11,7 +11,8 @@
#define MTK_FE_START_RESET 0x2000
#define MTK_FE_RESET_DONE 0x2001
#define MTK_WIFI_RESET_DONE 0x2002
-#define MTK_NAT_DISABLE 0x3000
+#define MTK_WIFI_CHIP_ONLINE 0x2003
+#define MTK_WIFI_CHIP_OFFLINE 0x2004
#define MTK_FE_RESET_NAT_DONE 0x4001
/* ADMA Rx Debug Monitor */
diff --git a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index 7149a69..13b5369 100755
--- a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -2927,7 +2927,7 @@
mtk_w32(eth, MTK_TX_DONE_INT, MTK_QDMA_INT_GRP1);
mtk_w32(eth, MTK_RX_DONE_INT(0), MTK_QDMA_INT_GRP2);
mtk_w32(eth, 0x21021003, MTK_FE_INT_GRP);
- mtk_w32(eth, MTK_FE_INT_FQ_EMPTY | MTK_FE_INT_TSO_FAIL |
+ mtk_w32(eth, MTK_FE_INT_TSO_FAIL |
MTK_FE_INT_TSO_ILLEGAL | MTK_FE_INT_TSO_ALIGN |
MTK_FE_INT_RFIFO_OV | MTK_FE_INT_RFIFO_UF, MTK_FE_INT_ENABLE);