From: "Shradha Todi" <shradha.t@samsung.com>
To: "'Alim Akhtar'" <alim.akhtar@samsung.com>,
<linux-clk@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<linux-pci@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>,
<linux-samsung-soc@vger.kernel.org>
Cc: <mturquette@baylibre.com>, <sboyd@kernel.org>,
<jingoohan1@gmail.com>, <lpieralisi@kernel.org>, <kw@linux.com>,
<robh@kernel.org>, <bhelgaas@google.com>,
<krzysztof.kozlowski@linaro.org>, <linux@armlinux.org.uk>,
<m.szyprowski@samsung.com>, <manivannan.sadhasivam@linaro.org>
Subject: RE: [PATCH v3 1/2] clk: Provide managed helper to get and enable bulk clocks
Date: Wed, 24 Jan 2024 12:09:08 +0530 [thread overview]
Message-ID: <05e001da4e90$0ace4b80$206ae280$@samsung.com> (raw)
In-Reply-To: <001001da43c0$e8e9a8e0$babcfaa0$@samsung.com>
> -----Original Message-----
> From: Alim Akhtar <alim.akhtar@samsung.com>
> Sent: 10 January 2024 18:01
> To: 'Shradha Todi' <shradha.t@samsung.com>; linux-clk@vger.kernel.org; linux-
> kernel@vger.kernel.org; linux-pci@vger.kernel.org; linux-arm-
> kernel@lists.infradead.org; linux-samsung-soc@vger.kernel.org
> Cc: mturquette@baylibre.com; sboyd@kernel.org; jingoohan1@gmail.com;
> lpieralisi@kernel.org; kw@linux.com; robh@kernel.org; bhelgaas@google.com;
> krzysztof.kozlowski@linaro.org; linux@armlinux.org.uk;
> m.szyprowski@samsung.com; manivannan.sadhasivam@linaro.org;
> alim.akhtar@samsung.com
> Subject: RE: [PATCH v3 1/2] clk: Provide managed helper to get and enable bulk
> clocks
>
> Hi Shradha,
>
> > -----Original Message-----
> > From: Shradha Todi <shradha.t@samsung.com>
> > Sent: Wednesday, January 10, 2024 4:31 PM
> > To: linux-clk@vger.kernel.org; linux-kernel@vger.kernel.org; linux-
> > pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org;
> > linux-samsung- soc@vger.kernel.org
> > Cc: mturquette@baylibre.com; sboyd@kernel.org; jingoohan1@gmail.com;
> > lpieralisi@kernel.org; kw@linux.com; robh@kernel.org;
> > bhelgaas@google.com; krzysztof.kozlowski@linaro.org;
> > alim.akhtar@samsung.com; linux@armlinux.org.uk;
> > m.szyprowski@samsung.com; manivannan.sadhasivam@linaro.org; Shradha
> > Todi <shradha.t@samsung.com>
> > Subject: [PATCH v3 1/2] clk: Provide managed helper to get and enable
> > bulk clocks
> >
> > Provide a managed devm_clk_bulk* wrapper to get and enable all bulk
> > clocks in order to simplify drivers that keeps all clocks enabled for
> > the time of driver operation.
> >
> > Suggested-by: Marek Szyprowski <m.szyprowski@samsung.com>
> > Signed-off-by: Shradha Todi <shradha.t@samsung.com>
> > ---
> > drivers/clk/clk-devres.c | 41
> > ++++++++++++++++++++++++++++++++++++++++
> > include/linux/clk.h | 25 ++++++++++++++++++++++++
> > 2 files changed, 66 insertions(+)
> >
> > diff --git a/drivers/clk/clk-devres.c b/drivers/clk/clk-devres.c index
> > 4fb4fd4b06bd..05b0ff4bc1d4 100644
> > --- a/drivers/clk/clk-devres.c
> > +++ b/drivers/clk/clk-devres.c
> > @@ -102,6 +102,7 @@
> > EXPORT_SYMBOL_GPL(devm_clk_get_optional_enabled);
> > struct clk_bulk_devres {
> > struct clk_bulk_data *clks;
> > int num_clks;
> > + void (*exit)(int num_clks, const struct clk_bulk_data *clks);
> > };
> >
> > static void devm_clk_bulk_release(struct device *dev, void *res) @@
> > -182,6
> > +183,46 @@ int __must_check devm_clk_bulk_get_all(struct device *dev,
> > +}
> > EXPORT_SYMBOL_GPL(devm_clk_bulk_get_all);
> >
> > +static void devm_clk_bulk_release_all_enabled(struct device *dev,
> > +void
> May be devm_clk_bulk_release_all_disable()
>
Will change this in the next patchset
> Also this is similar to already existing devm_clk_bulk_release_all(), may be you
> can reuse this function And add the exit() callback in devm_clk_bulk_release_all()
>
Since I'm planning to remove the exit callback in the next version as suggested by Manivannan, I will have to
go with a new release function
> > +*res) {
> > + struct clk_bulk_devres *devres = res;
> > +
> > + if (devres->exit)
> > + devres->exit(devres->num_clks, devres->clks);
> > +
> > + clk_bulk_put_all(devres->num_clks, devres->clks); }
> > +
> > +int __must_check devm_clk_bulk_get_all_enabled(struct device *dev,
>
> May be devm_clk_bulk_get_all_enable() is more suitable
>
Will take this in the next patchset! Thanks for the review
> > + struct clk_bulk_data **clks, int *num_clks) {
> > + struct clk_bulk_devres *devres;
> > + int ret;
> > +
> > + devres = devres_alloc(devm_clk_bulk_release_all_enabled,
> > + sizeof(*devres), GFP_KERNEL);
> > + if (!devres)
> > + return -ENOMEM;
> > +
> > + ret = clk_bulk_get_all(dev, &devres->clks);
> > + if (ret > 0) {
> > + *clks = devres->clks;
> > + devres->num_clks = ret;
> > + *num_clks = ret;
> > + devres_add(dev, devres);
> > + } else {
> > + devres_free(devres);
> > + return ret;
> > + }
> > +
> > + ret = clk_bulk_prepare_enable(devres->num_clks, *clks);
> > + if (!ret)
> > + devres->exit = clk_bulk_disable_unprepare;
> > +
> > + return ret;
> > +}
> > +EXPORT_SYMBOL_GPL(devm_clk_bulk_get_all_enabled);
> > +
> > static int devm_clk_match(struct device *dev, void *res, void *data) {
> > struct clk **c = res;
> > diff --git a/include/linux/clk.h b/include/linux/clk.h index
> > 1ef013324237..bf3e9bee5754 100644
> > --- a/include/linux/clk.h
> > +++ b/include/linux/clk.h
> > @@ -438,6 +438,24 @@ int __must_check
> > devm_clk_bulk_get_optional(struct device *dev, int num_clks, int
> > __must_check devm_clk_bulk_get_all(struct device *dev,
> > struct clk_bulk_data **clks);
> >
> > +/**
> > + * devm_clk_bulk_get_all_enabled - managed get multiple clk consumers
> > and
> > + * enable all clk
> > + * @dev: device for clock "consumer"
> > + * @clks: pointer to the clk_bulk_data table of consumer
> > + * @num_clks: out parameter to store the number of clk_bulk_data
> > + *
> > + * Returns success (0) or negative errno.
> > + *
> > + * This helper function allows drivers to get several clk
> > + * consumers and enable all of them in one operation with management.
> > + * The clks will automatically be disabled and freed when the device
> > + * is unbound.
> > + */
> > +
> > +int __must_check devm_clk_bulk_get_all_enabled(struct device *dev,
> > + struct clk_bulk_data **clks, int *num_clks);
> > +
> > /**
> > * devm_clk_get - lookup and obtain a managed reference to a clock
> > producer.
> > * @dev: device for clock "consumer"
> > @@ -960,6 +978,13 @@ static inline int __must_check
> > devm_clk_bulk_get_all(struct device *dev,
> > return 0;
> > }
> >
> > +static inline int __must_check devm_clk_bulk_get_all_enabled(struct
> > device *dev,
> > + struct clk_bulk_data **clks, int *num_clks) {
> > +
> > + return 0;
> > +}
> > +
> > static inline struct clk *devm_get_clk_from_child(struct device *dev,
> > struct device_node *np, const char *con_id) {
> > --
> > 2.17.1
>
WARNING: multiple messages have this Message-ID (diff)
From: "Shradha Todi" <shradha.t@samsung.com>
To: "'Alim Akhtar'" <alim.akhtar@samsung.com>,
<linux-clk@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<linux-pci@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>,
<linux-samsung-soc@vger.kernel.org>
Cc: <mturquette@baylibre.com>, <sboyd@kernel.org>,
<jingoohan1@gmail.com>, <lpieralisi@kernel.org>, <kw@linux.com>,
<robh@kernel.org>, <bhelgaas@google.com>,
<krzysztof.kozlowski@linaro.org>, <linux@armlinux.org.uk>,
<m.szyprowski@samsung.com>, <manivannan.sadhasivam@linaro.org>
Subject: RE: [PATCH v3 1/2] clk: Provide managed helper to get and enable bulk clocks
Date: Wed, 24 Jan 2024 12:09:08 +0530 [thread overview]
Message-ID: <05e001da4e90$0ace4b80$206ae280$@samsung.com> (raw)
In-Reply-To: <001001da43c0$e8e9a8e0$babcfaa0$@samsung.com>
> -----Original Message-----
> From: Alim Akhtar <alim.akhtar@samsung.com>
> Sent: 10 January 2024 18:01
> To: 'Shradha Todi' <shradha.t@samsung.com>; linux-clk@vger.kernel.org; linux-
> kernel@vger.kernel.org; linux-pci@vger.kernel.org; linux-arm-
> kernel@lists.infradead.org; linux-samsung-soc@vger.kernel.org
> Cc: mturquette@baylibre.com; sboyd@kernel.org; jingoohan1@gmail.com;
> lpieralisi@kernel.org; kw@linux.com; robh@kernel.org; bhelgaas@google.com;
> krzysztof.kozlowski@linaro.org; linux@armlinux.org.uk;
> m.szyprowski@samsung.com; manivannan.sadhasivam@linaro.org;
> alim.akhtar@samsung.com
> Subject: RE: [PATCH v3 1/2] clk: Provide managed helper to get and enable bulk
> clocks
>
> Hi Shradha,
>
> > -----Original Message-----
> > From: Shradha Todi <shradha.t@samsung.com>
> > Sent: Wednesday, January 10, 2024 4:31 PM
> > To: linux-clk@vger.kernel.org; linux-kernel@vger.kernel.org; linux-
> > pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org;
> > linux-samsung- soc@vger.kernel.org
> > Cc: mturquette@baylibre.com; sboyd@kernel.org; jingoohan1@gmail.com;
> > lpieralisi@kernel.org; kw@linux.com; robh@kernel.org;
> > bhelgaas@google.com; krzysztof.kozlowski@linaro.org;
> > alim.akhtar@samsung.com; linux@armlinux.org.uk;
> > m.szyprowski@samsung.com; manivannan.sadhasivam@linaro.org; Shradha
> > Todi <shradha.t@samsung.com>
> > Subject: [PATCH v3 1/2] clk: Provide managed helper to get and enable
> > bulk clocks
> >
> > Provide a managed devm_clk_bulk* wrapper to get and enable all bulk
> > clocks in order to simplify drivers that keeps all clocks enabled for
> > the time of driver operation.
> >
> > Suggested-by: Marek Szyprowski <m.szyprowski@samsung.com>
> > Signed-off-by: Shradha Todi <shradha.t@samsung.com>
> > ---
> > drivers/clk/clk-devres.c | 41
> > ++++++++++++++++++++++++++++++++++++++++
> > include/linux/clk.h | 25 ++++++++++++++++++++++++
> > 2 files changed, 66 insertions(+)
> >
> > diff --git a/drivers/clk/clk-devres.c b/drivers/clk/clk-devres.c index
> > 4fb4fd4b06bd..05b0ff4bc1d4 100644
> > --- a/drivers/clk/clk-devres.c
> > +++ b/drivers/clk/clk-devres.c
> > @@ -102,6 +102,7 @@
> > EXPORT_SYMBOL_GPL(devm_clk_get_optional_enabled);
> > struct clk_bulk_devres {
> > struct clk_bulk_data *clks;
> > int num_clks;
> > + void (*exit)(int num_clks, const struct clk_bulk_data *clks);
> > };
> >
> > static void devm_clk_bulk_release(struct device *dev, void *res) @@
> > -182,6
> > +183,46 @@ int __must_check devm_clk_bulk_get_all(struct device *dev,
> > +}
> > EXPORT_SYMBOL_GPL(devm_clk_bulk_get_all);
> >
> > +static void devm_clk_bulk_release_all_enabled(struct device *dev,
> > +void
> May be devm_clk_bulk_release_all_disable()
>
Will change this in the next patchset
> Also this is similar to already existing devm_clk_bulk_release_all(), may be you
> can reuse this function And add the exit() callback in devm_clk_bulk_release_all()
>
Since I'm planning to remove the exit callback in the next version as suggested by Manivannan, I will have to
go with a new release function
> > +*res) {
> > + struct clk_bulk_devres *devres = res;
> > +
> > + if (devres->exit)
> > + devres->exit(devres->num_clks, devres->clks);
> > +
> > + clk_bulk_put_all(devres->num_clks, devres->clks); }
> > +
> > +int __must_check devm_clk_bulk_get_all_enabled(struct device *dev,
>
> May be devm_clk_bulk_get_all_enable() is more suitable
>
Will take this in the next patchset! Thanks for the review
> > + struct clk_bulk_data **clks, int *num_clks) {
> > + struct clk_bulk_devres *devres;
> > + int ret;
> > +
> > + devres = devres_alloc(devm_clk_bulk_release_all_enabled,
> > + sizeof(*devres), GFP_KERNEL);
> > + if (!devres)
> > + return -ENOMEM;
> > +
> > + ret = clk_bulk_get_all(dev, &devres->clks);
> > + if (ret > 0) {
> > + *clks = devres->clks;
> > + devres->num_clks = ret;
> > + *num_clks = ret;
> > + devres_add(dev, devres);
> > + } else {
> > + devres_free(devres);
> > + return ret;
> > + }
> > +
> > + ret = clk_bulk_prepare_enable(devres->num_clks, *clks);
> > + if (!ret)
> > + devres->exit = clk_bulk_disable_unprepare;
> > +
> > + return ret;
> > +}
> > +EXPORT_SYMBOL_GPL(devm_clk_bulk_get_all_enabled);
> > +
> > static int devm_clk_match(struct device *dev, void *res, void *data) {
> > struct clk **c = res;
> > diff --git a/include/linux/clk.h b/include/linux/clk.h index
> > 1ef013324237..bf3e9bee5754 100644
> > --- a/include/linux/clk.h
> > +++ b/include/linux/clk.h
> > @@ -438,6 +438,24 @@ int __must_check
> > devm_clk_bulk_get_optional(struct device *dev, int num_clks, int
> > __must_check devm_clk_bulk_get_all(struct device *dev,
> > struct clk_bulk_data **clks);
> >
> > +/**
> > + * devm_clk_bulk_get_all_enabled - managed get multiple clk consumers
> > and
> > + * enable all clk
> > + * @dev: device for clock "consumer"
> > + * @clks: pointer to the clk_bulk_data table of consumer
> > + * @num_clks: out parameter to store the number of clk_bulk_data
> > + *
> > + * Returns success (0) or negative errno.
> > + *
> > + * This helper function allows drivers to get several clk
> > + * consumers and enable all of them in one operation with management.
> > + * The clks will automatically be disabled and freed when the device
> > + * is unbound.
> > + */
> > +
> > +int __must_check devm_clk_bulk_get_all_enabled(struct device *dev,
> > + struct clk_bulk_data **clks, int *num_clks);
> > +
> > /**
> > * devm_clk_get - lookup and obtain a managed reference to a clock
> > producer.
> > * @dev: device for clock "consumer"
> > @@ -960,6 +978,13 @@ static inline int __must_check
> > devm_clk_bulk_get_all(struct device *dev,
> > return 0;
> > }
> >
> > +static inline int __must_check devm_clk_bulk_get_all_enabled(struct
> > device *dev,
> > + struct clk_bulk_data **clks, int *num_clks) {
> > +
> > + return 0;
> > +}
> > +
> > static inline struct clk *devm_get_clk_from_child(struct device *dev,
> > struct device_node *np, const char *con_id) {
> > --
> > 2.17.1
>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2024-01-24 8:22 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20240110110143epcas5p2692ec3cbabfdaf2c3387b5a98f072943@epcas5p2.samsung.com>
2024-01-10 11:01 ` [PATCH v3 0/2] Add helper function to get and enable all bulk clocks Shradha Todi
2024-01-10 11:01 ` Shradha Todi
2024-01-10 11:01 ` [PATCH v3 1/2] clk: Provide managed helper to get and enable " Shradha Todi
2024-01-10 11:01 ` Shradha Todi
2024-01-10 12:31 ` Alim Akhtar
2024-01-10 12:31 ` Alim Akhtar
2024-01-24 6:39 ` Shradha Todi [this message]
2024-01-24 6:39 ` Shradha Todi
2024-01-20 15:03 ` Manivannan Sadhasivam
2024-01-20 15:03 ` Manivannan Sadhasivam
2024-01-24 6:53 ` Shradha Todi
2024-01-24 6:53 ` Shradha Todi
2024-01-24 8:43 ` 'Manivannan Sadhasivam'
2024-01-24 8:43 ` 'Manivannan Sadhasivam'
2024-01-10 11:01 ` [PATCH v3 2/2] PCI: exynos: Adapt to clk_bulk_* APIs Shradha Todi
2024-01-10 11:01 ` Shradha Todi
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='05e001da4e90$0ace4b80$206ae280$@samsung.com' \
--to=shradha.t@samsung.com \
--cc=alim.akhtar@samsung.com \
--cc=bhelgaas@google.com \
--cc=jingoohan1@gmail.com \
--cc=krzysztof.kozlowski@linaro.org \
--cc=kw@linux.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=lpieralisi@kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=manivannan.sadhasivam@linaro.org \
--cc=mturquette@baylibre.com \
--cc=robh@kernel.org \
--cc=sboyd@kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.