2022-02-04 13:57:50 +00:00
|
|
|
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(-)
|
|
|
|
|
|
|
|
--- a/drivers/net/ethernet/cadence/macb_main.c
|
|
|
|
+++ b/drivers/net/ethernet/cadence/macb_main.c
|
2022-04-27 18:14:45 +00:00
|
|
|
@@ -4338,8 +4338,10 @@ static int fu540_c000_clk_init(struct pl
|
2022-02-04 13:57:50 +00:00
|
|
|
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;
|
2022-04-27 18:14:45 +00:00
|
|
|
@@ -4350,16 +4352,26 @@ static int fu540_c000_clk_init(struct pl
|
2022-02-04 13:57:50 +00:00
|
|
|
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)
|