mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-22 15:02:32 +00:00
66 lines
1.9 KiB
Diff
66 lines
1.9 KiB
Diff
|
From 9692c07ee8bf8f68b74d553d861d092e33264781 Mon Sep 17 00:00:00 2001
|
||
|
From: Claudiu Beznea <claudiu.beznea@microchip.com>
|
||
|
Date: Wed, 9 Dec 2020 15:03:35 +0200
|
||
|
Subject: [PATCH 118/247] net: macb: unprepare clocks in case of failure
|
||
|
|
||
|
Unprepare clocks in case of any failure in fu540_c000_clk_init().
|
||
|
|
||
|
Fixes: c218ad559020 ("macb: Add support for SiFive FU540-C000")
|
||
|
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
|
||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||
|
---
|
||
|
drivers/net/ethernet/cadence/macb_main.c | 24 ++++++++++++++++++------
|
||
|
1 file changed, 18 insertions(+), 6 deletions(-)
|
||
|
|
||
|
diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c
|
||
|
index eacf907a365d..c8d66f966a8b 100644
|
||
|
--- a/drivers/net/ethernet/cadence/macb_main.c
|
||
|
+++ b/drivers/net/ethernet/cadence/macb_main.c
|
||
|
@@ -4307,8 +4307,10 @@ static int fu540_c000_clk_init(struct platform_device *pdev, struct clk **pclk,
|
||
|
return err;
|
||
|
|
||
|
mgmt = devm_kzalloc(&pdev->dev, sizeof(*mgmt), GFP_KERNEL);
|
||
|
- if (!mgmt)
|
||
|
- return -ENOMEM;
|
||
|
+ if (!mgmt) {
|
||
|
+ err = -ENOMEM;
|
||
|
+ goto err_disable_clks;
|
||
|
+ }
|
||
|
|
||
|
init.name = "sifive-gemgxl-mgmt";
|
||
|
init.ops = &fu540_c000_ops;
|
||
|
@@ -4319,16 +4321,26 @@ static int fu540_c000_clk_init(struct platform_device *pdev, struct clk **pclk,
|
||
|
mgmt->hw.init = &init;
|
||
|
|
||
|
*tx_clk = devm_clk_register(&pdev->dev, &mgmt->hw);
|
||
|
- if (IS_ERR(*tx_clk))
|
||
|
- return PTR_ERR(*tx_clk);
|
||
|
+ if (IS_ERR(*tx_clk)) {
|
||
|
+ err = PTR_ERR(*tx_clk);
|
||
|
+ goto err_disable_clks;
|
||
|
+ }
|
||
|
|
||
|
err = clk_prepare_enable(*tx_clk);
|
||
|
- if (err)
|
||
|
+ if (err) {
|
||
|
dev_err(&pdev->dev, "failed to enable tx_clk (%u)\n", err);
|
||
|
- else
|
||
|
+ *tx_clk = NULL;
|
||
|
+ goto err_disable_clks;
|
||
|
+ } else {
|
||
|
dev_info(&pdev->dev, "Registered clk switch '%s'\n", init.name);
|
||
|
+ }
|
||
|
|
||
|
return 0;
|
||
|
+
|
||
|
+err_disable_clks:
|
||
|
+ macb_clks_disable(*pclk, *hclk, *tx_clk, *rx_clk, *tsu_clk);
|
||
|
+
|
||
|
+ return err;
|
||
|
}
|
||
|
|
||
|
static int fu540_c000_init(struct platform_device *pdev)
|
||
|
--
|
||
|
2.32.0
|
||
|
|