Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7c78b4ad authored by John Crispin's avatar John Crispin Committed by David S. Miller
Browse files

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: default avatarJohn Crispin <blogic@openwrt.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e7d425dc
Loading
Loading
Loading
Loading
+5 −8
Original line number Diff line number Diff line
@@ -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(&eth->pending_work);
}

static irqreturn_t mtk_handle_irq(int irq, void *_eth)
@@ -1430,8 +1430,7 @@ static int mtk_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)

static void mtk_pending_work(struct work_struct *work)
{
	struct mtk_mac *mac = container_of(work, struct mtk_mac, pending_work);
	struct mtk_eth *eth = mac->hw;
	struct mtk_eth *eth = container_of(work, struct mtk_eth, pending_work);
	int err, i;
	unsigned long restart = 0;

@@ -1439,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 +1463,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(&eth->pending_work);

	return 0;
}
@@ -1660,7 +1657,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 +1758,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(&eth->pending_work, mtk_pending_work);

	err = mtk_hw_init(eth);
	if (err)
+2 −2
Original line number Diff line number Diff line
@@ -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 */