118-net-macb-unprepare-clocks-in-case-of-failure.patch 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. From 9692c07ee8bf8f68b74d553d861d092e33264781 Mon Sep 17 00:00:00 2001
  2. From: Claudiu Beznea <[email protected]>
  3. Date: Wed, 9 Dec 2020 15:03:35 +0200
  4. Subject: [PATCH 118/247] net: macb: unprepare clocks in case of failure
  5. Unprepare clocks in case of any failure in fu540_c000_clk_init().
  6. Fixes: c218ad559020 ("macb: Add support for SiFive FU540-C000")
  7. Signed-off-by: Claudiu Beznea <[email protected]>
  8. Signed-off-by: David S. Miller <[email protected]>
  9. ---
  10. drivers/net/ethernet/cadence/macb_main.c | 24 ++++++++++++++++++------
  11. 1 file changed, 18 insertions(+), 6 deletions(-)
  12. diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c
  13. index eacf907a365d..c8d66f966a8b 100644
  14. --- a/drivers/net/ethernet/cadence/macb_main.c
  15. +++ b/drivers/net/ethernet/cadence/macb_main.c
  16. @@ -4307,8 +4307,10 @@ static int fu540_c000_clk_init(struct platform_device *pdev, struct clk **pclk,
  17. return err;
  18. mgmt = devm_kzalloc(&pdev->dev, sizeof(*mgmt), GFP_KERNEL);
  19. - if (!mgmt)
  20. - return -ENOMEM;
  21. + if (!mgmt) {
  22. + err = -ENOMEM;
  23. + goto err_disable_clks;
  24. + }
  25. init.name = "sifive-gemgxl-mgmt";
  26. init.ops = &fu540_c000_ops;
  27. @@ -4319,16 +4321,26 @@ static int fu540_c000_clk_init(struct platform_device *pdev, struct clk **pclk,
  28. mgmt->hw.init = &init;
  29. *tx_clk = devm_clk_register(&pdev->dev, &mgmt->hw);
  30. - if (IS_ERR(*tx_clk))
  31. - return PTR_ERR(*tx_clk);
  32. + if (IS_ERR(*tx_clk)) {
  33. + err = PTR_ERR(*tx_clk);
  34. + goto err_disable_clks;
  35. + }
  36. err = clk_prepare_enable(*tx_clk);
  37. - if (err)
  38. + if (err) {
  39. dev_err(&pdev->dev, "failed to enable tx_clk (%u)\n", err);
  40. - else
  41. + *tx_clk = NULL;
  42. + goto err_disable_clks;
  43. + } else {
  44. dev_info(&pdev->dev, "Registered clk switch '%s'\n", init.name);
  45. + }
  46. return 0;
  47. +
  48. +err_disable_clks:
  49. + macb_clks_disable(*pclk, *hclk, *tx_clk, *rx_clk, *tsu_clk);
  50. +
  51. + return err;
  52. }
  53. static int fu540_c000_init(struct platform_device *pdev)
  54. --
  55. 2.32.0