001-4.15-11-bcm63xx_enet-use-managed-functions-for-clock-ioremap.patch 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. From 179a445ae4ef36ec44f4aea18e5f42d21334d186 Mon Sep 17 00:00:00 2001
  2. From: Jonas Gorski <[email protected]>
  3. Date: Sat, 25 Feb 2017 12:39:25 +0100
  4. Subject: [PATCH 4/6] bcm63xx_enet: use managed functions for clock/ioremap
  5. Use managed functions where possible to reduce the amount of resource
  6. handling on error and remove paths.
  7. Signed-off-by: Jonas Gorski <[email protected]>
  8. ---
  9. drivers/net/ethernet/broadcom/bcm63xx_enet.c | 54 +++++++---------------------
  10. 1 file changed, 12 insertions(+), 42 deletions(-)
  11. --- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c
  12. +++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
  13. @@ -1784,14 +1784,14 @@ static int bcm_enet_probe(struct platfor
  14. clk_name = "enet1";
  15. }
  16. - priv->mac_clk = clk_get(&pdev->dev, clk_name);
  17. + priv->mac_clk = devm_clk_get(&pdev->dev, clk_name);
  18. if (IS_ERR(priv->mac_clk)) {
  19. ret = PTR_ERR(priv->mac_clk);
  20. goto out;
  21. }
  22. ret = clk_prepare_enable(priv->mac_clk);
  23. if (ret)
  24. - goto out_put_clk_mac;
  25. + goto out;
  26. /* initialize default and fetch platform data */
  27. priv->rx_ring_size = BCMENET_DEF_RX_DESC;
  28. @@ -1819,7 +1819,7 @@ static int bcm_enet_probe(struct platfor
  29. if (priv->mac_id == 0 && priv->has_phy && !priv->use_external_mii) {
  30. /* using internal PHY, enable clock */
  31. - priv->phy_clk = clk_get(&pdev->dev, "ephy");
  32. + priv->phy_clk = devm_clk_get(&pdev->dev, "ephy");
  33. if (IS_ERR(priv->phy_clk)) {
  34. ret = PTR_ERR(priv->phy_clk);
  35. priv->phy_clk = NULL;
  36. @@ -1827,7 +1827,7 @@ static int bcm_enet_probe(struct platfor
  37. }
  38. ret = clk_prepare_enable(priv->phy_clk);
  39. if (ret)
  40. - goto out_put_clk_phy;
  41. + goto out_disable_clk_mac;
  42. }
  43. /* do minimal hardware init to be able to probe mii bus */
  44. @@ -1921,14 +1921,8 @@ out_uninit_hw:
  45. if (priv->phy_clk)
  46. clk_disable_unprepare(priv->phy_clk);
  47. -out_put_clk_phy:
  48. - if (priv->phy_clk)
  49. - clk_put(priv->phy_clk);
  50. -
  51. out_disable_clk_mac:
  52. clk_disable_unprepare(priv->mac_clk);
  53. -out_put_clk_mac:
  54. - clk_put(priv->mac_clk);
  55. out:
  56. free_netdev(dev);
  57. return ret;
  58. @@ -1964,12 +1958,10 @@ static int bcm_enet_remove(struct platfo
  59. }
  60. /* disable hw block clocks */
  61. - if (priv->phy_clk) {
  62. + if (priv->phy_clk)
  63. clk_disable_unprepare(priv->phy_clk);
  64. - clk_put(priv->phy_clk);
  65. - }
  66. +
  67. clk_disable_unprepare(priv->mac_clk);
  68. - clk_put(priv->mac_clk);
  69. free_netdev(dev);
  70. return 0;
  71. @@ -2752,26 +2744,20 @@ static int bcm_enetsw_probe(struct platf
  72. if (ret)
  73. goto out;
  74. - if (!request_mem_region(res_mem->start, resource_size(res_mem),
  75. - "bcm63xx_enetsw")) {
  76. - ret = -EBUSY;
  77. + priv->base = devm_ioremap_resource(&pdev->dev, res_mem);
  78. + if (IS_ERR(priv->base)) {
  79. + ret = PTR_ERR(priv->base);
  80. goto out;
  81. }
  82. - priv->base = ioremap(res_mem->start, resource_size(res_mem));
  83. - if (priv->base == NULL) {
  84. - ret = -ENOMEM;
  85. - goto out_release_mem;
  86. - }
  87. -
  88. - priv->mac_clk = clk_get(&pdev->dev, "enetsw");
  89. + priv->mac_clk = devm_clk_get(&pdev->dev, "enetsw");
  90. if (IS_ERR(priv->mac_clk)) {
  91. ret = PTR_ERR(priv->mac_clk);
  92. - goto out_unmap;
  93. + goto out;
  94. }
  95. ret = clk_prepare_enable(priv->mac_clk);
  96. if (ret)
  97. - goto out_put_clk;
  98. + goto out;
  99. priv->rx_chan = 0;
  100. priv->tx_chan = 1;
  101. @@ -2803,15 +2789,6 @@ static int bcm_enetsw_probe(struct platf
  102. out_disable_clk:
  103. clk_disable_unprepare(priv->mac_clk);
  104. -
  105. -out_put_clk:
  106. - clk_put(priv->mac_clk);
  107. -
  108. -out_unmap:
  109. - iounmap(priv->base);
  110. -
  111. -out_release_mem:
  112. - release_mem_region(res_mem->start, resource_size(res_mem));
  113. out:
  114. free_netdev(dev);
  115. return ret;
  116. @@ -2823,20 +2800,13 @@ static int bcm_enetsw_remove(struct plat
  117. {
  118. struct bcm_enet_priv *priv;
  119. struct net_device *dev;
  120. - struct resource *res;
  121. /* stop netdevice */
  122. dev = platform_get_drvdata(pdev);
  123. priv = netdev_priv(dev);
  124. unregister_netdev(dev);
  125. - /* release device resources */
  126. - iounmap(priv->base);
  127. - res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  128. - release_mem_region(res->start, resource_size(res));
  129. -
  130. clk_disable_unprepare(priv->mac_clk);
  131. - clk_put(priv->mac_clk);
  132. free_netdev(dev);
  133. return 0;