From: Marcin Wojtas <mw@semihalf.com>
To: linux-kernel@vger.kernel.org, netdev@vger.kernel.org
Cc: davem@davemloft.net, kuba@kernel.org, linux@armlinux.org.uk,
jaz@semihalf.com, gjb@semihalf.com, upstream@semihalf.com,
Samer.El-Haj-Mahmoud@arm.com, jon@solid-run.com, tn@semihalf.com,
rjw@rjwysocki.net, lenb@kernel.org,
Marcin Wojtas <mw@semihalf.com>,
Andy Shevchenko <andy.shevchenko@gmail.com>
Subject: [net-next: PATCH v2 4/7] net: mvmdio: simplify clock handling
Date: Wed, 16 Jun 2021 21:07:56 +0200 [thread overview]
Message-ID: <20210616190759.2832033-5-mw@semihalf.com> (raw)
In-Reply-To: <20210616190759.2832033-1-mw@semihalf.com>
Because the mvmdio driver supports a wide range of Marvell
SoC families it must support multiple types of the
HW description and required resources.
Thanks to the devm_clk_bulk_get_optional() helper routine
the clock handling could be significantly simplified,
as it is compatible with all possible variants within
a single call.
Suggested-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Marcin Wojtas <mw@semihalf.com>
---
drivers/net/ethernet/marvell/mvmdio.c | 61 ++++++--------------
1 file changed, 18 insertions(+), 43 deletions(-)
diff --git a/drivers/net/ethernet/marvell/mvmdio.c b/drivers/net/ethernet/marvell/mvmdio.c
index d14762d93640..ce3ddc867898 100644
--- a/drivers/net/ethernet/marvell/mvmdio.c
+++ b/drivers/net/ethernet/marvell/mvmdio.c
@@ -62,9 +62,11 @@
#define MVMDIO_XSMI_POLL_INTERVAL_MIN 150
#define MVMDIO_XSMI_POLL_INTERVAL_MAX 160
+#define MVMDIO_CLOCK_COUNT 4
+
struct orion_mdio_dev {
void __iomem *regs;
- struct clk *clk[4];
+ struct clk_bulk_data clks[MVMDIO_CLOCK_COUNT];
/*
* If we have access to the error interrupt pin (which is
* somewhat misnamed as it not only reflects internal errors
@@ -279,7 +281,7 @@ static int orion_mdio_probe(struct platform_device *pdev)
struct resource *r;
struct mii_bus *bus;
struct orion_mdio_dev *dev;
- int i, ret;
+ int ret;
type = (enum orion_mdio_bus_type)of_device_get_match_data(&pdev->dev);
@@ -319,33 +321,20 @@ static int orion_mdio_probe(struct platform_device *pdev)
init_waitqueue_head(&dev->smi_busy_wait);
- if (pdev->dev.of_node) {
- for (i = 0; i < ARRAY_SIZE(dev->clk); i++) {
- dev->clk[i] = of_clk_get(pdev->dev.of_node, i);
- if (PTR_ERR(dev->clk[i]) == -EPROBE_DEFER) {
- ret = -EPROBE_DEFER;
- goto out_clk;
- }
- if (IS_ERR(dev->clk[i]))
- break;
- clk_prepare_enable(dev->clk[i]);
- }
-
- if (!IS_ERR(of_clk_get(pdev->dev.of_node,
- ARRAY_SIZE(dev->clk))))
- dev_warn(&pdev->dev,
- "unsupported number of clocks, limiting to the first "
- __stringify(ARRAY_SIZE(dev->clk)) "\n");
- } else {
- dev->clk[0] = clk_get(&pdev->dev, NULL);
- if (PTR_ERR(dev->clk[0]) == -EPROBE_DEFER) {
- ret = -EPROBE_DEFER;
- goto out_clk;
- }
- if (!IS_ERR(dev->clk[0]))
- clk_prepare_enable(dev->clk[0]);
- }
+ dev->clks[0].id = "core";
+ dev->clks[1].id = "mg";
+ dev->clks[2].id = "mg_core";
+ dev->clks[3].id = "axi";
+ ret = devm_clk_bulk_get_optional(&pdev->dev, MVMDIO_CLOCK_COUNT,
+ dev->clks);
+ if (ret)
+ return ret;
+ ret = clk_bulk_prepare_enable(MVMDIO_CLOCK_COUNT, dev->clks);
+ if (ret) {
+ dev_err(&pdev->dev, "Cannot enable clocks\n");
+ return ret;
+ }
dev->err_interrupt = platform_get_irq_optional(pdev, 0);
if (dev->err_interrupt > 0 &&
@@ -383,14 +372,6 @@ static int orion_mdio_probe(struct platform_device *pdev)
if (dev->err_interrupt > 0)
writel(0, dev->regs + MVMDIO_ERR_INT_MASK);
-out_clk:
- for (i = 0; i < ARRAY_SIZE(dev->clk); i++) {
- if (IS_ERR(dev->clk[i]))
- break;
- clk_disable_unprepare(dev->clk[i]);
- clk_put(dev->clk[i]);
- }
-
return ret;
}
@@ -398,18 +379,12 @@ static int orion_mdio_remove(struct platform_device *pdev)
{
struct mii_bus *bus = platform_get_drvdata(pdev);
struct orion_mdio_dev *dev = bus->priv;
- int i;
if (dev->err_interrupt > 0)
writel(0, dev->regs + MVMDIO_ERR_INT_MASK);
mdiobus_unregister(bus);
- for (i = 0; i < ARRAY_SIZE(dev->clk); i++) {
- if (IS_ERR(dev->clk[i]))
- break;
- clk_disable_unprepare(dev->clk[i]);
- clk_put(dev->clk[i]);
- }
+ clk_bulk_disable_unprepare(MVMDIO_CLOCK_COUNT, dev->clks);
return 0;
}
--
2.29.0
next prev parent reply other threads:[~2021-06-16 19:08 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-16 19:07 [net-next: PATCH v2 0/7] ACPI MDIO support for Marvell controllers Marcin Wojtas
2021-06-16 19:07 ` [net-next: PATCH v2 1/7] Documentation: ACPI: DSD: describe additional MAC configuration Marcin Wojtas
2021-06-16 19:07 ` [net-next: PATCH v2 2/7] net: mdiobus: Introduce fwnode_mdbiobus_register() Marcin Wojtas
2021-06-16 19:33 ` Andrew Lunn
2021-06-16 23:50 ` Marcin Wojtas
2021-06-17 12:59 ` Andrew Lunn
2021-06-16 19:07 ` [net-next: PATCH v2 3/7] net/fsl: switch to fwnode_mdiobus_register Marcin Wojtas
2021-06-16 19:35 ` Andrew Lunn
2021-06-16 23:39 ` Marcin Wojtas
2021-06-17 12:27 ` Andrew Lunn
2021-06-17 13:22 ` Marcin Wojtas
2021-06-16 19:07 ` Marcin Wojtas [this message]
2021-06-16 19:48 ` [net-next: PATCH v2 4/7] net: mvmdio: simplify clock handling Andrew Lunn
2021-06-16 23:25 ` Marcin Wojtas
2021-06-17 7:28 ` Andy Shevchenko
2021-06-16 19:07 ` [net-next: PATCH v2 5/7] net: mvmdio: add ACPI support Marcin Wojtas
2021-06-16 19:51 ` Andrew Lunn
2021-06-16 22:37 ` Marcin Wojtas
2021-06-16 23:01 ` Andrew Lunn
2021-06-16 19:07 ` [net-next: PATCH v2 6/7] net: mvpp2: enable using phylink with ACPI Marcin Wojtas
2021-06-16 19:07 ` [net-next: PATCH v2 7/7] net: mvpp2: remove unused 'has_phy' field Marcin Wojtas
2021-06-16 19:54 ` Andrew Lunn
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210616190759.2832033-5-mw@semihalf.com \
--to=mw@semihalf.com \
--cc=Samer.El-Haj-Mahmoud@arm.com \
--cc=andy.shevchenko@gmail.com \
--cc=davem@davemloft.net \
--cc=gjb@semihalf.com \
--cc=jaz@semihalf.com \
--cc=jon@solid-run.com \
--cc=kuba@kernel.org \
--cc=lenb@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=netdev@vger.kernel.org \
--cc=rjw@rjwysocki.net \
--cc=tn@semihalf.com \
--cc=upstream@semihalf.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).