mirror of
https://github.com/openwrt/openwrt.git
synced 2025-01-19 03:06:35 +00:00
bcm63xx: update ethernet kernel panics fix
Use new patch from Sieng Piaw Liew. Signed-off-by: Sieng Piaw Liew <liew.s.piaw@gmail.com> Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
This commit is contained in:
parent
7febba3e50
commit
31a06f8fcc
@ -1,15 +1,23 @@
|
||||
From ca6be00ca1d3a2f5b8794894e2dae175e63768f5 Mon Sep 17 00:00:00 2001
|
||||
From: Sieng Piaw Liew <liew.s.piaw@gmail.com>
|
||||
Date: Tue, 16 Feb 2021 16:23:08 +0800
|
||||
Subject: [PATCH] bcm63xx_enet: Fix sporadic kernel panic
|
||||
|
||||
In ndo_stop functions, netdev_completed_queue() is called during forced
|
||||
tx reclaim, after netdev_reset_queue(). This may trigger kernel panic if
|
||||
there is any tx skb left.
|
||||
|
||||
This patch moves netdev_reset_queue() to after tx reclaim, so BQL can
|
||||
complete successfully then reset.
|
||||
|
||||
Signed-off-by: Sieng Piaw Liew <liew.s.piaw@gmail.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bcm63xx_enet.c | 8 ++++++--
|
||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c
|
||||
+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
|
||||
@@ -1104,6 +1104,8 @@ static int bcm_enet_open(struct net_devi
|
||||
else
|
||||
bcm_enet_adjust_link(dev);
|
||||
|
||||
+ netdev_reset_queue(dev);
|
||||
+
|
||||
netif_start_queue(dev);
|
||||
return 0;
|
||||
|
||||
@@ -1192,7 +1194,6 @@ static int bcm_enet_stop(struct net_devi
|
||||
@@ -1192,7 +1192,6 @@ static int bcm_enet_stop(struct net_devi
|
||||
kdev = &priv->pdev->dev;
|
||||
|
||||
netif_stop_queue(dev);
|
||||
@ -17,13 +25,15 @@
|
||||
napi_disable(&priv->napi);
|
||||
if (priv->has_phy)
|
||||
phy_stop(dev->phydev);
|
||||
@@ -2262,6 +2263,7 @@ static int bcm_enetsw_open(struct net_de
|
||||
enet_dmac_writel(priv, ENETDMAC_IR_PKTDONE_MASK,
|
||||
ENETDMAC_IRMASK, priv->tx_chan);
|
||||
@@ -1231,6 +1230,9 @@ static int bcm_enet_stop(struct net_devi
|
||||
if (priv->has_phy)
|
||||
phy_disconnect(dev->phydev);
|
||||
|
||||
+ /* reset BQL after forced tx reclaim to not kernel panic */
|
||||
+ netdev_reset_queue(dev);
|
||||
netif_carrier_on(dev);
|
||||
netif_start_queue(dev);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2343,7 +2345,6 @@ static int bcm_enetsw_stop(struct net_de
|
||||
|
||||
@ -33,3 +43,13 @@
|
||||
napi_disable(&priv->napi);
|
||||
del_timer_sync(&priv->rx_timeout);
|
||||
|
||||
@@ -2371,6 +2372,9 @@ static int bcm_enetsw_stop(struct net_de
|
||||
free_irq(priv->irq_tx, dev);
|
||||
free_irq(priv->irq_rx, dev);
|
||||
|
||||
+ /* reset BQL after forced tx reclaim to not kernel panic */
|
||||
+ netdev_reset_queue(dev);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c
|
||||
+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
|
||||
@@ -1626,7 +1626,7 @@ static int bcm_enet_change_mtu(struct ne
|
||||
@@ -1627,7 +1627,7 @@ static int bcm_enet_change_mtu(struct ne
|
||||
return -EBUSY;
|
||||
|
||||
/* add ethernet header + vlan tag size */
|
||||
|
@ -79,7 +79,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
|
||||
else
|
||||
bcm_enet_adjust_link(dev);
|
||||
|
||||
@@ -1132,10 +1109,6 @@ out_freeirq_rx:
|
||||
@@ -1130,10 +1107,6 @@ out_freeirq_rx:
|
||||
out_freeirq:
|
||||
free_irq(dev->irq, dev);
|
||||
|
||||
@ -90,7 +90,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1228,10 +1201,6 @@ static int bcm_enet_stop(struct net_devi
|
||||
@@ -1226,10 +1199,6 @@ static int bcm_enet_stop(struct net_devi
|
||||
free_irq(priv->irq_rx, dev);
|
||||
free_irq(dev->irq, dev);
|
||||
|
||||
@ -98,10 +98,10 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
|
||||
- if (priv->has_phy)
|
||||
- phy_disconnect(dev->phydev);
|
||||
-
|
||||
return 0;
|
||||
}
|
||||
/* reset BQL after forced tx reclaim to not kernel panic */
|
||||
netdev_reset_queue(dev);
|
||||
|
||||
@@ -1796,14 +1765,47 @@ static int bcm_enet_probe(struct platfor
|
||||
@@ -1797,14 +1766,47 @@ static int bcm_enet_probe(struct platfor
|
||||
|
||||
/* do minimal hardware init to be able to probe mii bus */
|
||||
bcm_enet_hw_preinit(priv);
|
||||
@ -150,7 +150,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
|
||||
}
|
||||
|
||||
bus = priv->mii_bus;
|
||||
@@ -1827,6 +1829,26 @@ static int bcm_enet_probe(struct platfor
|
||||
@@ -1828,6 +1830,26 @@ static int bcm_enet_probe(struct platfor
|
||||
dev_err(&pdev->dev, "unable to register mdio bus\n");
|
||||
goto out_free_mdio;
|
||||
}
|
||||
@ -177,7 +177,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
|
||||
} else {
|
||||
|
||||
/* run platform code to initialize PHY device */
|
||||
@@ -1834,45 +1856,16 @@ static int bcm_enet_probe(struct platfor
|
||||
@@ -1835,45 +1857,16 @@ static int bcm_enet_probe(struct platfor
|
||||
pd->mii_config(dev, 1, bcm_enet_mdio_read_mii,
|
||||
bcm_enet_mdio_write_mii)) {
|
||||
dev_err(&pdev->dev, "unable to configure mdio bus\n");
|
||||
@ -227,7 +227,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
|
||||
if (priv->mii_bus)
|
||||
mdiobus_unregister(priv->mii_bus);
|
||||
|
||||
@@ -1880,6 +1873,9 @@ out_free_mdio:
|
||||
@@ -1881,6 +1874,9 @@ out_free_mdio:
|
||||
if (priv->mii_bus)
|
||||
mdiobus_free(priv->mii_bus);
|
||||
|
||||
@ -237,7 +237,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
|
||||
out_uninit_hw:
|
||||
/* turn off mdc clock */
|
||||
enet_writel(priv, 0, ENET_MIISC_REG);
|
||||
@@ -1910,6 +1906,7 @@ static int bcm_enet_remove(struct platfo
|
||||
@@ -1911,6 +1907,7 @@ static int bcm_enet_remove(struct platfo
|
||||
enet_writel(priv, 0, ENET_MIISC_REG);
|
||||
|
||||
if (priv->has_phy) {
|
||||
|
@ -32,7 +32,7 @@ Subject: [PATCH 54/81] bcm63xx_enet: enable rgmii clock on external ports
|
||||
#define ENETSW_MDIOC_EXT_MASK (1 << 16)
|
||||
--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c
|
||||
+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
|
||||
@@ -2179,6 +2179,18 @@ static int bcm_enetsw_open(struct net_de
|
||||
@@ -2180,6 +2180,18 @@ static int bcm_enetsw_open(struct net_de
|
||||
priv->sw_port_link[i] = 0;
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
|
||||
#include <bcm63xx_dev_enet.h>
|
||||
#include "bcm63xx_enet.h"
|
||||
@@ -1926,7 +1927,8 @@ static int bcm_enet_remove(struct platfo
|
||||
@@ -1927,7 +1928,8 @@ static int bcm_enet_remove(struct platfo
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -30,7 +30,7 @@
|
||||
.probe = bcm_enet_probe,
|
||||
.remove = bcm_enet_remove,
|
||||
.driver = {
|
||||
@@ -1935,6 +1937,42 @@ struct platform_driver bcm63xx_enet_driv
|
||||
@@ -1936,6 +1938,42 @@ struct platform_driver bcm63xx_enet_driv
|
||||
},
|
||||
};
|
||||
|
||||
@ -73,7 +73,7 @@
|
||||
/*
|
||||
* switch mii access callbacks
|
||||
*/
|
||||
@@ -2191,29 +2229,6 @@ static int bcm_enetsw_open(struct net_de
|
||||
@@ -2192,29 +2230,6 @@ static int bcm_enetsw_open(struct net_de
|
||||
enetsw_writeb(priv, rgmii_ctrl, ENETSW_RGMII_CTRL_REG(i));
|
||||
}
|
||||
|
||||
@ -103,7 +103,7 @@
|
||||
/* initialize flow control buffer allocation */
|
||||
enet_dma_writel(priv, ENETDMA_BUFALLOC_FORCE_MASK | 0,
|
||||
ENETDMA_BUFALLOC_REG(priv->rx_chan));
|
||||
@@ -2645,6 +2660,9 @@ static int bcm_enetsw_probe(struct platf
|
||||
@@ -2648,6 +2663,9 @@ static int bcm_enetsw_probe(struct platf
|
||||
struct bcm63xx_enetsw_platform_data *pd;
|
||||
struct resource *res_mem;
|
||||
int ret, irq_rx, irq_tx;
|
||||
@ -113,7 +113,7 @@
|
||||
|
||||
if (!bcm_enet_shared_base[0])
|
||||
return -EPROBE_DEFER;
|
||||
@@ -2725,6 +2743,43 @@ static int bcm_enetsw_probe(struct platf
|
||||
@@ -2728,6 +2746,43 @@ static int bcm_enetsw_probe(struct platf
|
||||
priv->pdev = pdev;
|
||||
priv->net_dev = dev;
|
||||
|
||||
@ -157,7 +157,7 @@
|
||||
return 0;
|
||||
|
||||
out_disable_clk:
|
||||
@@ -2746,6 +2801,9 @@ static int bcm_enetsw_remove(struct plat
|
||||
@@ -2749,6 +2804,9 @@ static int bcm_enetsw_remove(struct plat
|
||||
priv = netdev_priv(dev);
|
||||
unregister_netdev(dev);
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c
|
||||
+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
|
||||
@@ -2704,9 +2704,9 @@ static int bcm_enetsw_probe(struct platf
|
||||
@@ -2707,9 +2707,9 @@ static int bcm_enetsw_probe(struct platf
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
|
@ -12,7 +12,7 @@
|
||||
|
||||
--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c
|
||||
+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
|
||||
@@ -2226,6 +2226,10 @@ static int bcm_enetsw_open(struct net_de
|
||||
@@ -2227,6 +2227,10 @@ static int bcm_enetsw_open(struct net_de
|
||||
|
||||
rgmii_ctrl = enetsw_readb(priv, ENETSW_RGMII_CTRL_REG(i));
|
||||
rgmii_ctrl |= ENETSW_RGMII_CTRL_GMII_CLK_EN;
|
||||
|
@ -1,15 +1,23 @@
|
||||
From ca6be00ca1d3a2f5b8794894e2dae175e63768f5 Mon Sep 17 00:00:00 2001
|
||||
From: Sieng Piaw Liew <liew.s.piaw@gmail.com>
|
||||
Date: Tue, 16 Feb 2021 16:23:08 +0800
|
||||
Subject: [PATCH] bcm63xx_enet: Fix sporadic kernel panic
|
||||
|
||||
In ndo_stop functions, netdev_completed_queue() is called during forced
|
||||
tx reclaim, after netdev_reset_queue(). This may trigger kernel panic if
|
||||
there is any tx skb left.
|
||||
|
||||
This patch moves netdev_reset_queue() to after tx reclaim, so BQL can
|
||||
complete successfully then reset.
|
||||
|
||||
Signed-off-by: Sieng Piaw Liew <liew.s.piaw@gmail.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bcm63xx_enet.c | 8 ++++++--
|
||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c
|
||||
+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
|
||||
@@ -1105,6 +1105,8 @@ static int bcm_enet_open(struct net_devi
|
||||
else
|
||||
bcm_enet_adjust_link(dev);
|
||||
|
||||
+ netdev_reset_queue(dev);
|
||||
+
|
||||
netif_start_queue(dev);
|
||||
return 0;
|
||||
|
||||
@@ -1193,7 +1195,6 @@ static int bcm_enet_stop(struct net_devi
|
||||
@@ -1193,7 +1193,6 @@ static int bcm_enet_stop(struct net_devi
|
||||
kdev = &priv->pdev->dev;
|
||||
|
||||
netif_stop_queue(dev);
|
||||
@ -17,13 +25,15 @@
|
||||
napi_disable(&priv->napi);
|
||||
if (priv->has_phy)
|
||||
phy_stop(dev->phydev);
|
||||
@@ -2267,6 +2268,7 @@ static int bcm_enetsw_open(struct net_de
|
||||
enet_dmac_writel(priv, ENETDMAC_IR_PKTDONE_MASK,
|
||||
ENETDMAC_IRMASK, priv->tx_chan);
|
||||
@@ -1232,6 +1231,9 @@ static int bcm_enet_stop(struct net_devi
|
||||
if (priv->has_phy)
|
||||
phy_disconnect(dev->phydev);
|
||||
|
||||
+ /* reset BQL after forced tx reclaim to not kernel panic */
|
||||
+ netdev_reset_queue(dev);
|
||||
netif_carrier_on(dev);
|
||||
netif_start_queue(dev);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2348,7 +2350,6 @@ static int bcm_enetsw_stop(struct net_de
|
||||
|
||||
@ -33,3 +43,13 @@
|
||||
napi_disable(&priv->napi);
|
||||
del_timer_sync(&priv->rx_timeout);
|
||||
|
||||
@@ -2376,6 +2377,9 @@ static int bcm_enetsw_stop(struct net_de
|
||||
free_irq(priv->irq_tx, dev);
|
||||
free_irq(priv->irq_rx, dev);
|
||||
|
||||
+ /* reset BQL after forced tx reclaim to not kernel panic */
|
||||
+ netdev_reset_queue(dev);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c
|
||||
+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
|
||||
@@ -1630,7 +1630,7 @@ static int bcm_enet_change_mtu(struct ne
|
||||
@@ -1631,7 +1631,7 @@ static int bcm_enet_change_mtu(struct ne
|
||||
return -EBUSY;
|
||||
|
||||
/* add ethernet header + vlan tag size */
|
||||
|
@ -79,7 +79,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
|
||||
else
|
||||
bcm_enet_adjust_link(dev);
|
||||
|
||||
@@ -1133,10 +1110,6 @@ out_freeirq_rx:
|
||||
@@ -1131,10 +1108,6 @@ out_freeirq_rx:
|
||||
out_freeirq:
|
||||
free_irq(dev->irq, dev);
|
||||
|
||||
@ -90,7 +90,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1229,10 +1202,6 @@ static int bcm_enet_stop(struct net_devi
|
||||
@@ -1227,10 +1200,6 @@ static int bcm_enet_stop(struct net_devi
|
||||
free_irq(priv->irq_rx, dev);
|
||||
free_irq(dev->irq, dev);
|
||||
|
||||
@ -98,10 +98,10 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
|
||||
- if (priv->has_phy)
|
||||
- phy_disconnect(dev->phydev);
|
||||
-
|
||||
return 0;
|
||||
}
|
||||
/* reset BQL after forced tx reclaim to not kernel panic */
|
||||
netdev_reset_queue(dev);
|
||||
|
||||
@@ -1801,14 +1770,47 @@ static int bcm_enet_probe(struct platfor
|
||||
@@ -1802,14 +1771,47 @@ static int bcm_enet_probe(struct platfor
|
||||
|
||||
/* do minimal hardware init to be able to probe mii bus */
|
||||
bcm_enet_hw_preinit(priv);
|
||||
@ -150,7 +150,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
|
||||
}
|
||||
|
||||
bus = priv->mii_bus;
|
||||
@@ -1832,6 +1834,26 @@ static int bcm_enet_probe(struct platfor
|
||||
@@ -1833,6 +1835,26 @@ static int bcm_enet_probe(struct platfor
|
||||
dev_err(&pdev->dev, "unable to register mdio bus\n");
|
||||
goto out_free_mdio;
|
||||
}
|
||||
@ -177,7 +177,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
|
||||
} else {
|
||||
|
||||
/* run platform code to initialize PHY device */
|
||||
@@ -1839,45 +1861,16 @@ static int bcm_enet_probe(struct platfor
|
||||
@@ -1840,45 +1862,16 @@ static int bcm_enet_probe(struct platfor
|
||||
pd->mii_config(dev, 1, bcm_enet_mdio_read_mii,
|
||||
bcm_enet_mdio_write_mii)) {
|
||||
dev_err(&pdev->dev, "unable to configure mdio bus\n");
|
||||
@ -227,7 +227,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
|
||||
if (priv->mii_bus)
|
||||
mdiobus_unregister(priv->mii_bus);
|
||||
|
||||
@@ -1885,6 +1878,9 @@ out_free_mdio:
|
||||
@@ -1886,6 +1879,9 @@ out_free_mdio:
|
||||
if (priv->mii_bus)
|
||||
mdiobus_free(priv->mii_bus);
|
||||
|
||||
@ -237,7 +237,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
|
||||
out_uninit_hw:
|
||||
/* turn off mdc clock */
|
||||
enet_writel(priv, 0, ENET_MIISC_REG);
|
||||
@@ -1915,6 +1911,7 @@ static int bcm_enet_remove(struct platfo
|
||||
@@ -1916,6 +1912,7 @@ static int bcm_enet_remove(struct platfo
|
||||
enet_writel(priv, 0, ENET_MIISC_REG);
|
||||
|
||||
if (priv->has_phy) {
|
||||
|
@ -32,7 +32,7 @@ Subject: [PATCH 54/81] bcm63xx_enet: enable rgmii clock on external ports
|
||||
#define ENETSW_MDIOC_EXT_MASK (1 << 16)
|
||||
--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c
|
||||
+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
|
||||
@@ -2184,6 +2184,18 @@ static int bcm_enetsw_open(struct net_de
|
||||
@@ -2185,6 +2185,18 @@ static int bcm_enetsw_open(struct net_de
|
||||
priv->sw_port_link[i] = 0;
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
|
||||
#include <bcm63xx_dev_enet.h>
|
||||
#include "bcm63xx_enet.h"
|
||||
@@ -1931,7 +1932,8 @@ static int bcm_enet_remove(struct platfo
|
||||
@@ -1932,7 +1933,8 @@ static int bcm_enet_remove(struct platfo
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -30,7 +30,7 @@
|
||||
.probe = bcm_enet_probe,
|
||||
.remove = bcm_enet_remove,
|
||||
.driver = {
|
||||
@@ -1940,6 +1942,42 @@ struct platform_driver bcm63xx_enet_driv
|
||||
@@ -1941,6 +1943,42 @@ struct platform_driver bcm63xx_enet_driv
|
||||
},
|
||||
};
|
||||
|
||||
@ -73,7 +73,7 @@
|
||||
/*
|
||||
* switch mii access callbacks
|
||||
*/
|
||||
@@ -2196,29 +2234,6 @@ static int bcm_enetsw_open(struct net_de
|
||||
@@ -2197,29 +2235,6 @@ static int bcm_enetsw_open(struct net_de
|
||||
enetsw_writeb(priv, rgmii_ctrl, ENETSW_RGMII_CTRL_REG(i));
|
||||
}
|
||||
|
||||
@ -103,7 +103,7 @@
|
||||
/* initialize flow control buffer allocation */
|
||||
enet_dma_writel(priv, ENETDMA_BUFALLOC_FORCE_MASK | 0,
|
||||
ENETDMA_BUFALLOC_REG(priv->rx_chan));
|
||||
@@ -2652,6 +2667,9 @@ static int bcm_enetsw_probe(struct platf
|
||||
@@ -2655,6 +2670,9 @@ static int bcm_enetsw_probe(struct platf
|
||||
struct bcm63xx_enetsw_platform_data *pd;
|
||||
struct resource *res_mem;
|
||||
int ret, irq_rx, irq_tx;
|
||||
@ -113,7 +113,7 @@
|
||||
|
||||
if (!bcm_enet_shared_base[0])
|
||||
return -EPROBE_DEFER;
|
||||
@@ -2732,6 +2750,43 @@ static int bcm_enetsw_probe(struct platf
|
||||
@@ -2735,6 +2753,43 @@ static int bcm_enetsw_probe(struct platf
|
||||
priv->pdev = pdev;
|
||||
priv->net_dev = dev;
|
||||
|
||||
@ -157,7 +157,7 @@
|
||||
return 0;
|
||||
|
||||
out_disable_clk:
|
||||
@@ -2753,6 +2808,9 @@ static int bcm_enetsw_remove(struct plat
|
||||
@@ -2756,6 +2811,9 @@ static int bcm_enetsw_remove(struct plat
|
||||
priv = netdev_priv(dev);
|
||||
unregister_netdev(dev);
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c
|
||||
+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
|
||||
@@ -2711,9 +2711,9 @@ static int bcm_enetsw_probe(struct platf
|
||||
@@ -2714,9 +2714,9 @@ static int bcm_enetsw_probe(struct platf
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
|
@ -12,7 +12,7 @@
|
||||
|
||||
--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c
|
||||
+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
|
||||
@@ -2231,6 +2231,10 @@ static int bcm_enetsw_open(struct net_de
|
||||
@@ -2232,6 +2232,10 @@ static int bcm_enetsw_open(struct net_de
|
||||
|
||||
rgmii_ctrl = enetsw_readb(priv, ENETSW_RGMII_CTRL_REG(i));
|
||||
rgmii_ctrl |= ENETSW_RGMII_CTRL_GMII_CLK_EN;
|
||||
|
Loading…
Reference in New Issue
Block a user