diff --git a/drivers/net/ethernet/mediatek/mtk_eth_reset.c b/drivers/net/ethernet/mediatek/mtk_eth_reset.c
index e0955fc0..cae22260 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_reset.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_reset.c
@@ -613,6 +613,9 @@ static int mtk_eth_netdevice_event(struct notifier_block *unused,
 				   unsigned long event, void *ptr)
 {
 	switch (event) {
+	case MTK_TOPS_DUMP_DONE:
+		complete(&wait_tops_done);
+		break;
 	case MTK_WIFI_RESET_DONE:
 	case MTK_FE_STOP_TRAFFIC_DONE:
 		mtk_rest_cnt--;
diff --git a/drivers/net/ethernet/mediatek/mtk_eth_reset.h b/drivers/net/ethernet/mediatek/mtk_eth_reset.h
index 096331b0..d83e8a30 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_reset.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_reset.h
@@ -13,6 +13,7 @@
 #define MTK_WIFI_RESET_DONE	0x2002
 #define MTK_WIFI_CHIP_ONLINE 	0x2003
 #define MTK_WIFI_CHIP_OFFLINE 	0x2004
+#define MTK_TOPS_DUMP_DONE	0x3001
 #define MTK_FE_RESET_NAT_DONE	0x4001
 
 #define MTK_FE_STOP_TRAFFIC	(0x2005)
@@ -63,6 +64,7 @@ enum mtk_reset_event_id {
 
 extern struct notifier_block mtk_eth_netdevice_nb __read_mostly;
 extern struct completion wait_ser_done;
+extern struct completion wait_tops_done;
 extern char* mtk_reset_event_name[32];
 extern atomic_t reset_lock;
 extern struct completion wait_nat_done;
diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index 7296170245..1b08f5c937 100755
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -43,6 +43,7 @@ atomic_t force = ATOMIC_INIT(0);
 module_param_named(msg_level, mtk_msg_level, int, 0);
 MODULE_PARM_DESC(msg_level, "Message level (-1=defaults,0=none,...,16=all)");
 DECLARE_COMPLETION(wait_ser_done);
+DECLARE_COMPLETION(wait_tops_done);
 
 #define MTK_ETHTOOL_STAT(x) { #x, \
 			      offsetof(struct mtk_hw_stats, x) / sizeof(u64) }
@@ -3986,6 +3987,8 @@ static void mtk_pending_work(struct work_struct *work)
 				}
 			pr_warn("wait for MTK_FE_START_RESET\n");
 		}
+		if (!wait_for_completion_timeout(&wait_tops_done, 3000))
+			pr_warn("wait for MTK_TOPS_DUMP_DONE\n");
 		rtnl_lock();
 		break;
 	}
