forked from lede-project/source
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
brcm63xx: backport enet cleanup patches
Align with upstream version, mostly non-fixes and small clean ups. Signed-off-by: Jonas Gorski <[email protected]>
- Loading branch information
1 parent
aba4e29
commit 49c3b1c
Showing
14 changed files
with
415 additions
and
36 deletions.
There are no files selected for viewing
101 changes: 101 additions & 0 deletions
101
target/linux/brcm63xx/patches-4.4/001-4.15-08-bcm63xx_enet-correct-clock-usage.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
From d0423d3e4fa7ae305729cb50369427f075ccb279 Mon Sep 17 00:00:00 2001 | ||
From: Jonas Gorski <[email protected]> | ||
Date: Sat, 25 Feb 2017 12:41:28 +0100 | ||
Subject: [PATCH 1/6] bcm63xx_enet: correct clock usage | ||
|
||
Check the return code of prepare_enable and change one last instance of | ||
enable only to prepare_enable. Also properly disable and release the | ||
clock in error paths and on remove for enetsw. | ||
|
||
Signed-off-by: Jonas Gorski <[email protected]> | ||
--- | ||
drivers/net/ethernet/broadcom/bcm63xx_enet.c | 31 +++++++++++++++++++++------- | ||
1 file changed, 23 insertions(+), 8 deletions(-) | ||
|
||
--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c | ||
+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c | ||
@@ -1787,7 +1787,9 @@ static int bcm_enet_probe(struct platfor | ||
ret = PTR_ERR(priv->mac_clk); | ||
goto out; | ||
} | ||
- clk_prepare_enable(priv->mac_clk); | ||
+ ret = clk_prepare_enable(priv->mac_clk); | ||
+ if (ret) | ||
+ goto out_put_clk_mac; | ||
|
||
/* initialize default and fetch platform data */ | ||
priv->rx_ring_size = BCMENET_DEF_RX_DESC; | ||
@@ -1819,9 +1821,11 @@ static int bcm_enet_probe(struct platfor | ||
if (IS_ERR(priv->phy_clk)) { | ||
ret = PTR_ERR(priv->phy_clk); | ||
priv->phy_clk = NULL; | ||
- goto out_put_clk_mac; | ||
+ goto out_disable_clk_mac; | ||
} | ||
- clk_prepare_enable(priv->phy_clk); | ||
+ ret = clk_prepare_enable(priv->phy_clk); | ||
+ if (ret) | ||
+ goto out_put_clk_phy; | ||
} | ||
|
||
/* do minimal hardware init to be able to probe mii bus */ | ||
@@ -1921,13 +1925,16 @@ out_free_mdio: | ||
out_uninit_hw: | ||
/* turn off mdc clock */ | ||
enet_writel(priv, 0, ENET_MIISC_REG); | ||
- if (priv->phy_clk) { | ||
+ if (priv->phy_clk) | ||
clk_disable_unprepare(priv->phy_clk); | ||
+ | ||
+out_put_clk_phy: | ||
+ if (priv->phy_clk) | ||
clk_put(priv->phy_clk); | ||
- } | ||
|
||
-out_put_clk_mac: | ||
+out_disable_clk_mac: | ||
clk_disable_unprepare(priv->mac_clk); | ||
+out_put_clk_mac: | ||
clk_put(priv->mac_clk); | ||
out: | ||
free_netdev(dev); | ||
@@ -2772,7 +2779,9 @@ static int bcm_enetsw_probe(struct platf | ||
ret = PTR_ERR(priv->mac_clk); | ||
goto out_unmap; | ||
} | ||
- clk_enable(priv->mac_clk); | ||
+ ret = clk_prepare_enable(priv->mac_clk); | ||
+ if (ret) | ||
+ goto out_put_clk; | ||
|
||
priv->rx_chan = 0; | ||
priv->tx_chan = 1; | ||
@@ -2793,7 +2802,7 @@ static int bcm_enetsw_probe(struct platf | ||
|
||
ret = register_netdev(dev); | ||
if (ret) | ||
- goto out_put_clk; | ||
+ goto out_disable_clk; | ||
|
||
netif_carrier_off(dev); | ||
platform_set_drvdata(pdev, dev); | ||
@@ -2802,6 +2811,9 @@ static int bcm_enetsw_probe(struct platf | ||
|
||
return 0; | ||
|
||
+out_disable_clk: | ||
+ clk_disable_unprepare(priv->mac_clk); | ||
+ | ||
out_put_clk: | ||
clk_put(priv->mac_clk); | ||
|
||
@@ -2833,6 +2845,9 @@ static int bcm_enetsw_remove(struct plat | ||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
release_mem_region(res->start, resource_size(res)); | ||
|
||
+ clk_disable_unprepare(priv->mac_clk); | ||
+ clk_put(priv->mac_clk); | ||
+ | ||
free_netdev(dev); | ||
return 0; | ||
} |
29 changes: 29 additions & 0 deletions
29
...cm63xx/patches-4.4/001-4.15-09-bcm63xx_enet-do-not-write-to-random-DMA-channel-on-B.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
From 23d94cb855b6f4f0ee1c01679224472104ac6440 Mon Sep 17 00:00:00 2001 | ||
From: Jonas Gorski <[email protected]> | ||
Date: Sat, 30 Sep 2017 14:10:18 +0200 | ||
Subject: [PATCH 2/6] bcm63xx_enet: do not write to random DMA channel on | ||
BCM6345 | ||
|
||
The DMA controller regs actually point to DMA channel 0, so the write to | ||
ENETDMA_CFG_REG will actually modify a random DMA channel. | ||
|
||
Since DMA controller registers do not exist on BCM6345, guard the write | ||
with the usual check for dma_has_sram. | ||
|
||
Signed-off-by: Jonas Gorski <[email protected]> | ||
--- | ||
drivers/net/ethernet/broadcom/bcm63xx_enet.c | 3 ++- | ||
1 file changed, 2 insertions(+), 1 deletion(-) | ||
|
||
--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c | ||
+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c | ||
@@ -1063,7 +1063,8 @@ static int bcm_enet_open(struct net_devi | ||
val = enet_readl(priv, ENET_CTL_REG); | ||
val |= ENET_CTL_ENABLE_MASK; | ||
enet_writel(priv, val, ENET_CTL_REG); | ||
- enet_dma_writel(priv, ENETDMA_CFG_EN_MASK, ENETDMA_CFG_REG); | ||
+ if (priv->dma_has_sram) | ||
+ enet_dma_writel(priv, ENETDMA_CFG_EN_MASK, ENETDMA_CFG_REG); | ||
enet_dmac_writel(priv, priv->dma_chan_en_mask, | ||
ENETDMAC_CHANCFG, priv->rx_chan); | ||
|
41 changes: 41 additions & 0 deletions
41
target/linux/brcm63xx/patches-4.4/001-4.15-10-bcm63xx_enet-do-not-rely-on-probe-order.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
From 71710bb6cbc82f411a4e5faafa0c3178e48e7137 Mon Sep 17 00:00:00 2001 | ||
From: Jonas Gorski <[email protected]> | ||
Date: Tue, 30 May 2017 13:31:45 +0200 | ||
Subject: [PATCH 3/6] bcm63xx_enet: do not rely on probe order | ||
|
||
Do not rely on the shared device being probed before the enet(sw) | ||
devices. This makes it easier to eventually move out the shared | ||
device as a dma controller driver (what it should be). | ||
|
||
Signed-off-by: Jonas Gorski <[email protected]> | ||
--- | ||
drivers/net/ethernet/broadcom/bcm63xx_enet.c | 9 ++------- | ||
1 file changed, 2 insertions(+), 7 deletions(-) | ||
|
||
--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c | ||
+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c | ||
@@ -1736,10 +1736,8 @@ static int bcm_enet_probe(struct platfor | ||
const char *clk_name; | ||
int i, ret; | ||
|
||
- /* stop if shared driver failed, assume driver->probe will be | ||
- * called in the same order we register devices (correct ?) */ | ||
if (!bcm_enet_shared_base[0]) | ||
- return -ENODEV; | ||
+ return -EPROBE_DEFER; | ||
|
||
res_irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0); | ||
res_irq_rx = platform_get_resource(pdev, IORESOURCE_IRQ, 1); | ||
@@ -2720,11 +2718,8 @@ static int bcm_enetsw_probe(struct platf | ||
struct resource *res_mem; | ||
int ret, irq_rx, irq_tx; | ||
|
||
- /* stop if shared driver failed, assume driver->probe will be | ||
- * called in the same order we register devices (correct ?) | ||
- */ | ||
if (!bcm_enet_shared_base[0]) | ||
- return -ENODEV; | ||
+ return -EPROBE_DEFER; | ||
|
||
res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
irq_rx = platform_get_irq(pdev, 0); |
150 changes: 150 additions & 0 deletions
150
...cm63xx/patches-4.4/001-4.15-11-bcm63xx_enet-use-managed-functions-for-clock-ioremap.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,150 @@ | ||
From 179a445ae4ef36ec44f4aea18e5f42d21334d186 Mon Sep 17 00:00:00 2001 | ||
From: Jonas Gorski <[email protected]> | ||
Date: Sat, 25 Feb 2017 12:39:25 +0100 | ||
Subject: [PATCH 4/6] bcm63xx_enet: use managed functions for clock/ioremap | ||
|
||
Use managed functions where possible to reduce the amount of resource | ||
handling on error and remove paths. | ||
|
||
Signed-off-by: Jonas Gorski <[email protected]> | ||
--- | ||
drivers/net/ethernet/broadcom/bcm63xx_enet.c | 54 +++++++--------------------- | ||
1 file changed, 12 insertions(+), 42 deletions(-) | ||
|
||
--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c | ||
+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c | ||
@@ -1781,14 +1781,14 @@ static int bcm_enet_probe(struct platfor | ||
clk_name = "enet1"; | ||
} | ||
|
||
- priv->mac_clk = clk_get(&pdev->dev, clk_name); | ||
+ priv->mac_clk = devm_clk_get(&pdev->dev, clk_name); | ||
if (IS_ERR(priv->mac_clk)) { | ||
ret = PTR_ERR(priv->mac_clk); | ||
goto out; | ||
} | ||
ret = clk_prepare_enable(priv->mac_clk); | ||
if (ret) | ||
- goto out_put_clk_mac; | ||
+ goto out; | ||
|
||
/* initialize default and fetch platform data */ | ||
priv->rx_ring_size = BCMENET_DEF_RX_DESC; | ||
@@ -1816,7 +1816,7 @@ static int bcm_enet_probe(struct platfor | ||
|
||
if (priv->mac_id == 0 && priv->has_phy && !priv->use_external_mii) { | ||
/* using internal PHY, enable clock */ | ||
- priv->phy_clk = clk_get(&pdev->dev, "ephy"); | ||
+ priv->phy_clk = devm_clk_get(&pdev->dev, "ephy"); | ||
if (IS_ERR(priv->phy_clk)) { | ||
ret = PTR_ERR(priv->phy_clk); | ||
priv->phy_clk = NULL; | ||
@@ -1824,7 +1824,7 @@ static int bcm_enet_probe(struct platfor | ||
} | ||
ret = clk_prepare_enable(priv->phy_clk); | ||
if (ret) | ||
- goto out_put_clk_phy; | ||
+ goto out_disable_clk_mac; | ||
} | ||
|
||
/* do minimal hardware init to be able to probe mii bus */ | ||
@@ -1927,14 +1927,8 @@ out_uninit_hw: | ||
if (priv->phy_clk) | ||
clk_disable_unprepare(priv->phy_clk); | ||
|
||
-out_put_clk_phy: | ||
- if (priv->phy_clk) | ||
- clk_put(priv->phy_clk); | ||
- | ||
out_disable_clk_mac: | ||
clk_disable_unprepare(priv->mac_clk); | ||
-out_put_clk_mac: | ||
- clk_put(priv->mac_clk); | ||
out: | ||
free_netdev(dev); | ||
return ret; | ||
@@ -1970,12 +1964,10 @@ static int bcm_enet_remove(struct platfo | ||
} | ||
|
||
/* disable hw block clocks */ | ||
- if (priv->phy_clk) { | ||
+ if (priv->phy_clk) | ||
clk_disable_unprepare(priv->phy_clk); | ||
- clk_put(priv->phy_clk); | ||
- } | ||
+ | ||
clk_disable_unprepare(priv->mac_clk); | ||
- clk_put(priv->mac_clk); | ||
|
||
free_netdev(dev); | ||
return 0; | ||
@@ -2758,26 +2750,20 @@ static int bcm_enetsw_probe(struct platf | ||
if (ret) | ||
goto out; | ||
|
||
- if (!request_mem_region(res_mem->start, resource_size(res_mem), | ||
- "bcm63xx_enetsw")) { | ||
- ret = -EBUSY; | ||
+ priv->base = devm_ioremap_resource(&pdev->dev, res_mem); | ||
+ if (IS_ERR(priv->base)) { | ||
+ ret = PTR_ERR(priv->base); | ||
goto out; | ||
} | ||
|
||
- priv->base = ioremap(res_mem->start, resource_size(res_mem)); | ||
- if (priv->base == NULL) { | ||
- ret = -ENOMEM; | ||
- goto out_release_mem; | ||
- } | ||
- | ||
- priv->mac_clk = clk_get(&pdev->dev, "enetsw"); | ||
+ priv->mac_clk = devm_clk_get(&pdev->dev, "enetsw"); | ||
if (IS_ERR(priv->mac_clk)) { | ||
ret = PTR_ERR(priv->mac_clk); | ||
- goto out_unmap; | ||
+ goto out; | ||
} | ||
ret = clk_prepare_enable(priv->mac_clk); | ||
if (ret) | ||
- goto out_put_clk; | ||
+ goto out; | ||
|
||
priv->rx_chan = 0; | ||
priv->tx_chan = 1; | ||
@@ -2809,15 +2795,6 @@ static int bcm_enetsw_probe(struct platf | ||
|
||
out_disable_clk: | ||
clk_disable_unprepare(priv->mac_clk); | ||
- | ||
-out_put_clk: | ||
- clk_put(priv->mac_clk); | ||
- | ||
-out_unmap: | ||
- iounmap(priv->base); | ||
- | ||
-out_release_mem: | ||
- release_mem_region(res_mem->start, resource_size(res_mem)); | ||
out: | ||
free_netdev(dev); | ||
return ret; | ||
@@ -2829,20 +2806,13 @@ static int bcm_enetsw_remove(struct plat | ||
{ | ||
struct bcm_enet_priv *priv; | ||
struct net_device *dev; | ||
- struct resource *res; | ||
|
||
/* stop netdevice */ | ||
dev = platform_get_drvdata(pdev); | ||
priv = netdev_priv(dev); | ||
unregister_netdev(dev); | ||
|
||
- /* release device resources */ | ||
- iounmap(priv->base); | ||
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
- release_mem_region(res->start, resource_size(res)); | ||
- | ||
clk_disable_unprepare(priv->mac_clk); | ||
- clk_put(priv->mac_clk); | ||
|
||
free_netdev(dev); | ||
return 0; |
36 changes: 36 additions & 0 deletions
36
...inux/brcm63xx/patches-4.4/001-4.15-12-bcm63xx_enet-drop-unneeded-NULL-phy_clk-check.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
From 555baec974ede81e616ca88ac6d3fca09239368f Mon Sep 17 00:00:00 2001 | ||
From: Jonas Gorski <[email protected]> | ||
Date: Tue, 18 Jul 2017 13:18:01 +0200 | ||
Subject: [PATCH 5/6] bcm63xx_enet: drop unneeded NULL phy_clk check | ||
|
||
clk_disable and clk_unprepare are NULL-safe, so need to duplicate the | ||
NULL check of the functions. | ||
|
||
Signed-off-by: Jonas Gorski <[email protected]> | ||
--- | ||
drivers/net/ethernet/broadcom/bcm63xx_enet.c | 7 ++----- | ||
1 file changed, 2 insertions(+), 5 deletions(-) | ||
|
||
--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c | ||
+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c | ||
@@ -1924,8 +1924,7 @@ out_free_mdio: | ||
out_uninit_hw: | ||
/* turn off mdc clock */ | ||
enet_writel(priv, 0, ENET_MIISC_REG); | ||
- if (priv->phy_clk) | ||
- clk_disable_unprepare(priv->phy_clk); | ||
+ clk_disable_unprepare(priv->phy_clk); | ||
|
||
out_disable_clk_mac: | ||
clk_disable_unprepare(priv->mac_clk); | ||
@@ -1964,9 +1963,7 @@ static int bcm_enet_remove(struct platfo | ||
} | ||
|
||
/* disable hw block clocks */ | ||
- if (priv->phy_clk) | ||
- clk_disable_unprepare(priv->phy_clk); | ||
- | ||
+ clk_disable_unprepare(priv->phy_clk); | ||
clk_disable_unprepare(priv->mac_clk); | ||
|
||
free_netdev(dev); |
22 changes: 22 additions & 0 deletions
22
target/linux/brcm63xx/patches-4.4/001-4.15-13-bcm63xx_enet-remove-unneeded-include.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
From 77364ce98037972fb1c57d0ee0418eb1c2b26521 Mon Sep 17 00:00:00 2001 | ||
From: Jonas Gorski <[email protected]> | ||
Date: Mon, 29 May 2017 13:11:14 +0200 | ||
Subject: [PATCH 6/6] bcm63xx_enet: remove unneeded include | ||
|
||
We don't use anyhing from that file, so drop it. | ||
|
||
Signed-off-by: Jonas Gorski <[email protected]> | ||
--- | ||
drivers/net/ethernet/broadcom/bcm63xx_enet.h | 1 - | ||
1 file changed, 1 deletion(-) | ||
|
||
--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.h | ||
+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.h | ||
@@ -8,7 +8,6 @@ | ||
#include <linux/platform_device.h> | ||
|
||
#include <bcm63xx_regs.h> | ||
-#include <bcm63xx_irq.h> | ||
#include <bcm63xx_io.h> | ||
#include <bcm63xx_iudma.h> | ||
|
Oops, something went wrong.