mediatek: update patches
[openwrt/staging/mkresin.git] / target / linux / mediatek / patches-4.4 / 0098-net-next-mediatek-only-trigger-the-tx-watchdog-reset.patch
1 From cd1343c14328a5de1a58c47b81b8a2febb31d542 Mon Sep 17 00:00:00 2001
2 From: John Crispin <john@phrozen.org>
3 Date: Tue, 10 May 2016 11:16:30 +0200
4 Subject: [PATCH 098/102] net-next: mediatek: only trigger the tx watchdog
5 reset when all devices are stalled
6
7 Signed-off-by: Sean Wang <keyhaede@gmail.com>
8 Signed-off-by: John Crispin <john@phrozen.org>
9 ---
10 drivers/net/ethernet/mediatek/mtk_eth_soc.c | 14 ++++++++++++--
11 drivers/net/ethernet/mediatek/mtk_eth_soc.h | 1 +
12 2 files changed, 13 insertions(+), 2 deletions(-)
13
14 diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
15 index bced659..70e961c 100644
16 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
17 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
18 @@ -1267,11 +1267,21 @@ static void mtk_tx_timeout(struct net_device *dev)
19 {
20 struct mtk_mac *mac = netdev_priv(dev);
21 struct mtk_eth *eth = mac->hw;
22 + int i, reset = 0;
23
24 eth->netdev[mac->id]->stats.tx_errors++;
25 netif_err(eth, tx_err, dev,
26 "transmit timed out\n");
27 - schedule_work(&eth->pending_work);
28 +
29 + for (i = 0; i < MTK_MAC_COUNT; i++) {
30 + if (!eth->netdev[i] ||
31 + time_after(jiffies, dev_trans_start(eth->netdev[i]) +
32 + MTK_WDT_TIMEOUT))
33 + reset++;
34 + }
35 +
36 + if (reset == MTK_MAC_COUNT)
37 + schedule_work(&eth->pending_work);
38 }
39
40 static irqreturn_t mtk_handle_irq_rx(int irq, void *_eth)
41 @@ -1765,7 +1775,7 @@ static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
42 mac->hw_stats->reg_offset = id * MTK_STAT_OFFSET;
43
44 SET_NETDEV_DEV(eth->netdev[id], eth->dev);
45 - eth->netdev[id]->watchdog_timeo = 5 * HZ;
46 + eth->netdev[id]->watchdog_timeo = MTK_WDT_TIMEOUT;
47 eth->netdev[id]->netdev_ops = &mtk_netdev_ops;
48 eth->netdev[id]->base_addr = (unsigned long)eth->base;
49 eth->netdev[id]->vlan_features = MTK_HW_FEATURES &
50 diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.h b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
51 index f82e3ac..e39da72 100644
52 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
53 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
54 @@ -15,6 +15,7 @@
55 #ifndef MTK_ETH_H
56 #define MTK_ETH_H
57
58 +#define MTK_WDT_TIMEOUT (4 * HZ)
59 #define MTK_QDMA_PAGE_SIZE 2048
60 #define MTK_MAX_RX_LENGTH 1536
61 #define MTK_TX_DMA_BUF_LEN 0x3fff
62 --
63 1.7.10.4
64