From 41ba4b04c84a80a441b30e167eab0d45d3b6c009 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Fri, 1 Apr 2016 07:11:18 +0000 Subject: mediatek: update patches add fixes for * ethernet * cpufreq * nand * a7-timer Signed-off-by: John Crispin SVN-Revision: 49098 --- ...k-move-the-pending_work-struct-to-the-dev.patch | 109 +++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 target/linux/mediatek/patches-4.4/0072-net-mediatek-move-the-pending_work-struct-to-the-dev.patch (limited to 'target/linux/mediatek/patches-4.4/0072-net-mediatek-move-the-pending_work-struct-to-the-dev.patch') diff --git a/target/linux/mediatek/patches-4.4/0072-net-mediatek-move-the-pending_work-struct-to-the-dev.patch b/target/linux/mediatek/patches-4.4/0072-net-mediatek-move-the-pending_work-struct-to-the-dev.patch new file mode 100644 index 0000000000..1b9f221588 --- /dev/null +++ b/target/linux/mediatek/patches-4.4/0072-net-mediatek-move-the-pending_work-struct-to-the-dev.patch @@ -0,0 +1,109 @@ +From 147dab4408adcccf702f8c5143e9c6b91f746790 Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Tue, 29 Mar 2016 17:24:24 +0200 +Subject: [PATCH 72/78] net: mediatek: move the pending_work struct to the + device generic struct + +The worker always touches both netdevs. It is ethernet core and not MAC +specific. We only need one worker, which belongs into the ethernets core struct. + +Signed-off-by: John Crispin +--- + drivers/net/ethernet/mediatek/mtk_eth_soc.c | 10 ++++------ + drivers/net/ethernet/mediatek/mtk_eth_soc.h | 4 ++-- + 2 files changed, 6 insertions(+), 8 deletions(-) + +diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c +index 67b18f9..bbcd607 100644 +--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c ++++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c +@@ -1193,7 +1193,7 @@ static void mtk_tx_timeout(struct net_device *dev) + eth->netdev[mac->id]->stats.tx_errors++; + netif_err(eth, tx_err, dev, + "transmit timed out\n"); +- schedule_work(&mac->pending_work); ++ schedule_work(ð->pending_work); + } + + static irqreturn_t mtk_handle_irq(int irq, void *_eth) +@@ -1438,7 +1438,7 @@ static void mtk_pending_work(struct work_struct *work) + + /* stop all devices to make sure that dma is properly shut down */ + for (i = 0; i < MTK_MAC_COUNT; i++) { +- if (!netif_oper_up(eth->netdev[i])) ++ if (!eth->netdev[i]) + continue; + mtk_stop(eth->netdev[i]); + __set_bit(i, &restart); +@@ -1464,15 +1464,13 @@ static int mtk_cleanup(struct mtk_eth *eth) + int i; + + for (i = 0; i < MTK_MAC_COUNT; i++) { +- struct mtk_mac *mac = netdev_priv(eth->netdev[i]); +- + if (!eth->netdev[i]) + continue; + + unregister_netdev(eth->netdev[i]); + free_netdev(eth->netdev[i]); +- cancel_work_sync(&mac->pending_work); + } ++ cancel_work_sync(ð->pending_work); + + return 0; + } +@@ -1660,7 +1658,6 @@ static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np) + mac->id = id; + mac->hw = eth; + mac->of_node = np; +- INIT_WORK(&mac->pending_work, mtk_pending_work); + + mac->hw_stats = devm_kzalloc(eth->dev, + sizeof(*mac->hw_stats), +@@ -1762,6 +1759,7 @@ static int mtk_probe(struct platform_device *pdev) + + eth->dev = &pdev->dev; + eth->msg_enable = netif_msg_init(mtk_msg_level, MTK_DEFAULT_MSG_ENABLE); ++ INIT_WORK(ð->pending_work, mtk_pending_work); + + err = mtk_hw_init(eth); + if (err) +diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.h b/drivers/net/ethernet/mediatek/mtk_eth_soc.h +index 48a5292..eed626d 100644 +--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h ++++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h +@@ -363,6 +363,7 @@ struct mtk_rx_ring { + * @clk_gp1: The gmac1 clock + * @clk_gp2: The gmac2 clock + * @mii_bus: If there is a bus we need to create an instance for it ++ * @pending_work: The workqueue used to reset the dma ring + */ + + struct mtk_eth { +@@ -389,6 +390,7 @@ struct mtk_eth { + struct clk *clk_gp1; + struct clk *clk_gp2; + struct mii_bus *mii_bus; ++ struct work_struct pending_work; + }; + + /* struct mtk_mac - the structure that holds the info about the MACs of the +@@ -398,7 +400,6 @@ struct mtk_eth { + * @hw: Backpointer to our main datastruture + * @hw_stats: Packet statistics counter + * @phy_dev: The attached PHY if available +- * @pending_work: The workqueue used to reset the dma ring + */ + struct mtk_mac { + int id; +@@ -406,7 +407,6 @@ struct mtk_mac { + struct mtk_eth *hw; + struct mtk_hw_stats *hw_stats; + struct phy_device *phy_dev; +- struct work_struct pending_work; + }; + + /* the struct describing the SoC. these are declared in the soc_xyz.c files */ +-- +1.7.10.4 + -- cgit v1.2.3