blob: 9f9e26a5f562c22ef0c44afdaebb94c6ef11f89e [file] [log] [blame]
developere5e687d2023-08-08 16:05:33 +08001--- a/drivers/net/ethernet/mediatek/mtk_eth_reset.c
2+++ b/drivers/net/ethernet/mediatek/mtk_eth_reset.c
3@@ -635,6 +635,9 @@ static int mtk_eth_netdevice_event(struc
4 unsigned long event, void *ptr)
5 {
6 switch (event) {
7+ case MTK_TOPS_DUMP_DONE:
8+ complete(&wait_tops_done);
9+ break;
10 case MTK_WIFI_RESET_DONE:
11 case MTK_FE_STOP_TRAFFIC_DONE:
12 pr_info("%s rcv done event:%lx\n", __func__, event);
13--- a/drivers/net/ethernet/mediatek/mtk_eth_reset.h
14+++ b/drivers/net/ethernet/mediatek/mtk_eth_reset.h
15@@ -13,6 +13,7 @@
16 #define MTK_WIFI_RESET_DONE 0x2002
17 #define MTK_WIFI_CHIP_ONLINE 0x2003
18 #define MTK_WIFI_CHIP_OFFLINE 0x2004
19+#define MTK_TOPS_DUMP_DONE 0x3001
20 #define MTK_FE_RESET_NAT_DONE 0x4001
21
22 #define MTK_FE_STOP_TRAFFIC (0x2005)
23@@ -67,6 +68,7 @@ enum mtk_reset_event_id {
24
25 extern struct notifier_block mtk_eth_netdevice_nb __read_mostly;
26 extern struct completion wait_ser_done;
27+extern struct completion wait_tops_done;
28 extern char* mtk_reset_event_name[32];
29 extern atomic_t reset_lock;
30 extern struct completion wait_nat_done;
31--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
32+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
33@@ -38,6 +38,7 @@ atomic_t force = ATOMIC_INIT(0);
34 module_param_named(msg_level, mtk_msg_level, int, 0);
35 MODULE_PARM_DESC(msg_level, "Message level (-1=defaults,0=none,...,16=all)");
36 DECLARE_COMPLETION(wait_ser_done);
37+DECLARE_COMPLETION(wait_tops_done);
38
39 #define MTK_ETHTOOL_STAT(x) { #x, \
40 offsetof(struct mtk_hw_stats, x) / sizeof(u64) }
developer84f378f2023-08-24 18:26:50 +080041@@ -4141,6 +4142,8 @@ static void mtk_pending_work(struct work
developere5e687d2023-08-08 16:05:33 +080042 }
43 pr_warn("wait for MTK_FE_START_RESET\n");
44 }
45+ if (!try_wait_for_completion(&wait_tops_done))
46+ pr_warn("wait for MTK_TOPS_DUMP_DONE\n");
47 rtnl_lock();
48 break;
49 }