linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] reset: Add API to count number of reset available with device
@ 2017-02-22  5:24 Vivek Gautam
  2017-02-22  5:24 ` [PATCH 2/2] usb; dwc3: of-simple: Add support to get resets for the device Vivek Gautam
  2017-03-10 14:40 ` [PATCH 1/2] reset: Add API to count number of reset available with device Vivek Gautam
  0 siblings, 2 replies; 10+ messages in thread
From: Vivek Gautam @ 2017-02-22  5:24 UTC (permalink / raw)
  To: balbi, p.zabel
  Cc: gregkh, linux-usb, linux-kernel, linux-arm-msm, Vivek Gautam

Count number of reset phandles available with the device node
to know the resets a given device has.

Cc: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Vivek Gautam <vivek.gautam@codeaurora.org>
---

Based on torvald's master branch.

 include/linux/reset.h | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/include/linux/reset.h b/include/linux/reset.h
index 5daff15722d3..88f63a640153 100644
--- a/include/linux/reset.h
+++ b/include/linux/reset.h
@@ -2,6 +2,7 @@
 #define _LINUX_RESET_H_
 
 #include <linux/device.h>
+#include <linux/of.h>
 
 struct reset_control;
 
@@ -234,6 +235,21 @@ static inline struct reset_control *of_reset_control_get_shared_by_index(
 }
 
 /**
+ * of_reset_control_get_count - Count number of resets available with a device
+ * @node: device to be reset by the controller
+ */
+static inline unsigned int of_reset_control_get_count(struct device_node *node)
+{
+	int count;
+
+	count = of_count_phandle_with_args(node, "resets", "#reset-cells");
+	if (count < 0)
+		return 0;
+
+	return count;
+}
+
+/**
  * devm_reset_control_get_exclusive - resource managed
  *                                    reset_control_get_exclusive()
  * @dev: device to be reset by the controller
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/2] usb; dwc3: of-simple: Add support to get resets for the device
  2017-02-22  5:24 [PATCH 1/2] reset: Add API to count number of reset available with device Vivek Gautam
@ 2017-02-22  5:24 ` Vivek Gautam
  2017-03-10 11:24   ` Felipe Balbi
  2017-03-15 10:45   ` Philipp Zabel
  2017-03-10 14:40 ` [PATCH 1/2] reset: Add API to count number of reset available with device Vivek Gautam
  1 sibling, 2 replies; 10+ messages in thread
From: Vivek Gautam @ 2017-02-22  5:24 UTC (permalink / raw)
  To: balbi, p.zabel
  Cc: gregkh, linux-usb, linux-kernel, linux-arm-msm, Vivek Gautam

Add support to get a list of resets available for the device.
These resets must be kept de-asserted until the device is
in use.

Cc: Felipe Balbi <balbi@kernel.org>
Signed-off-by: Vivek Gautam <vivek.gautam@codeaurora.org>
---

Based on torvald's master branch.

 drivers/usb/dwc3/dwc3-of-simple.c | 49 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 49 insertions(+)

diff --git a/drivers/usb/dwc3/dwc3-of-simple.c b/drivers/usb/dwc3/dwc3-of-simple.c
index fe414e7a9c78..025de7342d28 100644
--- a/drivers/usb/dwc3/dwc3-of-simple.c
+++ b/drivers/usb/dwc3/dwc3-of-simple.c
@@ -29,13 +29,52 @@
 #include <linux/of.h>
 #include <linux/of_platform.h>
 #include <linux/pm_runtime.h>
+#include <linux/reset.h>
 
 struct dwc3_of_simple {
 	struct device		*dev;
 	struct clk		**clks;
 	int			num_clocks;
+	struct reset_control	**resets;
+	int			num_resets;
 };
 
+static int dwc3_of_simple_reset_init(struct dwc3_of_simple *simple, int count)
+{
+	struct device		*dev = simple->dev;
+	int			i;
+
+	simple->num_resets = count;
+
+	if (!count)
+		return 0;
+
+	simple->resets = devm_kcalloc(dev, simple->num_resets,
+				sizeof(struct reset_control *), GFP_KERNEL);
+	if (!simple->resets)
+		return -ENOMEM;
+
+	for (i = 0; i < simple->num_resets; i++) {
+		struct reset_control *reset;
+		int ret;
+
+		reset = devm_reset_control_get_by_index(dev, i);
+		if (IS_ERR(reset))
+			return PTR_ERR(reset);
+
+		simple->resets[i] = reset;
+
+		ret = reset_control_deassert(reset);
+		if (ret) {
+			while (--i >= 0)
+				reset_control_assert(reset);
+			return ret;
+		}
+	}
+
+	return 0;
+}
+
 static int dwc3_of_simple_clk_init(struct dwc3_of_simple *simple, int count)
 {
 	struct device		*dev = simple->dev;
@@ -100,6 +139,10 @@ static int dwc3_of_simple_probe(struct platform_device *pdev)
 	if (ret)
 		return ret;
 
+	ret = dwc3_of_simple_reset_init(simple, of_reset_control_get_count(np));
+	if (ret)
+		return ret;
+
 	ret = of_platform_populate(np, NULL, NULL, dev);
 	if (ret) {
 		for (i = 0; i < simple->num_clocks; i++) {
@@ -107,6 +150,9 @@ static int dwc3_of_simple_probe(struct platform_device *pdev)
 			clk_put(simple->clks[i]);
 		}
 
+		for (i = 0; i < simple->num_resets; i++)
+			reset_control_assert(simple->resets[i]);
+
 		return ret;
 	}
 
@@ -128,6 +174,9 @@ static int dwc3_of_simple_remove(struct platform_device *pdev)
 		clk_put(simple->clks[i]);
 	}
 
+	for (i = 0; i < simple->num_resets; i++)
+		reset_control_assert(simple->resets[i]);
+
 	of_platform_depopulate(dev);
 
 	pm_runtime_put_sync(dev);
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/2] usb; dwc3: of-simple: Add support to get resets for the device
  2017-02-22  5:24 ` [PATCH 2/2] usb; dwc3: of-simple: Add support to get resets for the device Vivek Gautam
@ 2017-03-10 11:24   ` Felipe Balbi
  2017-03-10 12:18     ` Vivek Gautam
  2017-03-15 10:45   ` Philipp Zabel
  1 sibling, 1 reply; 10+ messages in thread
From: Felipe Balbi @ 2017-03-10 11:24 UTC (permalink / raw)
  To: Vivek Gautam, p.zabel
  Cc: gregkh, linux-usb, linux-kernel, linux-arm-msm, Vivek Gautam

[-- Attachment #1: Type: text/plain, Size: 379 bytes --]

Vivek Gautam <vivek.gautam@codeaurora.org> writes:

> Add support to get a list of resets available for the device.
> These resets must be kept de-asserted until the device is
> in use.
>
> Cc: Felipe Balbi <balbi@kernel.org>
> Signed-off-by: Vivek Gautam <vivek.gautam@codeaurora.org>

how do you plan on merging this since it depends on previous patch?

-- 
balbi

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/2] usb; dwc3: of-simple: Add support to get resets for the device
  2017-03-10 11:24   ` Felipe Balbi
@ 2017-03-10 12:18     ` Vivek Gautam
  2017-03-10 14:06       ` Felipe Balbi
  0 siblings, 1 reply; 10+ messages in thread
From: Vivek Gautam @ 2017-03-10 12:18 UTC (permalink / raw)
  To: Felipe Balbi
  Cc: p.zabel, Greg KH, Linux USB Mailing List, linux-kernel, linux-arm-msm

On Fri, Mar 10, 2017 at 4:54 PM, Felipe Balbi <balbi@kernel.org> wrote:
> Vivek Gautam <vivek.gautam@codeaurora.org> writes:
>
>> Add support to get a list of resets available for the device.
>> These resets must be kept de-asserted until the device is
>> in use.
>>
>> Cc: Felipe Balbi <balbi@kernel.org>
>> Signed-off-by: Vivek Gautam <vivek.gautam@codeaurora.org>
>
> how do you plan on merging this since it depends on previous patch?

Will ask Phillip if he is fine with the previous patch. He can then consider
giving an ack so that both patches can be pulled in together.

Will it be okay to do that ?

Regards
Vivek

>
> --
> balbi



-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/2] usb; dwc3: of-simple: Add support to get resets for the device
  2017-03-10 12:18     ` Vivek Gautam
@ 2017-03-10 14:06       ` Felipe Balbi
  0 siblings, 0 replies; 10+ messages in thread
From: Felipe Balbi @ 2017-03-10 14:06 UTC (permalink / raw)
  To: Vivek Gautam
  Cc: p.zabel, Greg KH, Linux USB Mailing List, linux-kernel, linux-arm-msm


Hi,

Vivek Gautam <vivek.gautam@codeaurora.org> writes:
> On Fri, Mar 10, 2017 at 4:54 PM, Felipe Balbi <balbi@kernel.org> wrote:
>> Vivek Gautam <vivek.gautam@codeaurora.org> writes:
>>
>>> Add support to get a list of resets available for the device.
>>> These resets must be kept de-asserted until the device is
>>> in use.
>>>
>>> Cc: Felipe Balbi <balbi@kernel.org>
>>> Signed-off-by: Vivek Gautam <vivek.gautam@codeaurora.org>
>>
>> how do you plan on merging this since it depends on previous patch?
>
> Will ask Phillip if he is fine with the previous patch. He can then consider
> giving an ack so that both patches can be pulled in together.
>
> Will it be okay to do that ?

sounds like a plan :-)

-- 
balbi

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/2] reset: Add API to count number of reset available with device
  2017-02-22  5:24 [PATCH 1/2] reset: Add API to count number of reset available with device Vivek Gautam
  2017-02-22  5:24 ` [PATCH 2/2] usb; dwc3: of-simple: Add support to get resets for the device Vivek Gautam
@ 2017-03-10 14:40 ` Vivek Gautam
  2017-03-15 10:40   ` Philipp Zabel
  1 sibling, 1 reply; 10+ messages in thread
From: Vivek Gautam @ 2017-03-10 14:40 UTC (permalink / raw)
  To: Felipe Balbi, p.zabel
  Cc: Greg KH, Linux USB Mailing List, linux-kernel, linux-arm-msm,
	Vivek Gautam

Hi Philipp,


On Wed, Feb 22, 2017 at 10:54 AM, Vivek Gautam
<vivek.gautam@codeaurora.org> wrote:
> Count number of reset phandles available with the device node
> to know the resets a given device has.
>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Signed-off-by: Vivek Gautam <vivek.gautam@codeaurora.org>
> ---

Any thoughts on this change?
A small addition that seems useful.

>
> Based on torvald's master branch.
>
>  include/linux/reset.h | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
>
> diff --git a/include/linux/reset.h b/include/linux/reset.h
> index 5daff15722d3..88f63a640153 100644
> --- a/include/linux/reset.h
> +++ b/include/linux/reset.h
> @@ -2,6 +2,7 @@
>  #define _LINUX_RESET_H_
>
>  #include <linux/device.h>
> +#include <linux/of.h>
>
>  struct reset_control;
>
> @@ -234,6 +235,21 @@ static inline struct reset_control *of_reset_control_get_shared_by_index(
>  }
>
>  /**
> + * of_reset_control_get_count - Count number of resets available with a device
> + * @node: device to be reset by the controller
> + */
> +static inline unsigned int of_reset_control_get_count(struct device_node *node)
> +{
> +       int count;
> +
> +       count = of_count_phandle_with_args(node, "resets", "#reset-cells");
> +       if (count < 0)
> +               return 0;
> +
> +       return count;
> +}
> +
> +/**
>   * devm_reset_control_get_exclusive - resource managed
>   *                                    reset_control_get_exclusive()
>   * @dev: device to be reset by the controller
> --
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
> a Linux Foundation Collaborative Project
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


Regards
Vivek
-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/2] reset: Add API to count number of reset available with device
  2017-03-10 14:40 ` [PATCH 1/2] reset: Add API to count number of reset available with device Vivek Gautam
@ 2017-03-15 10:40   ` Philipp Zabel
  2017-03-16  3:48     ` Vivek Gautam
  0 siblings, 1 reply; 10+ messages in thread
From: Philipp Zabel @ 2017-03-15 10:40 UTC (permalink / raw)
  To: Vivek Gautam
  Cc: Felipe Balbi, Greg KH, Linux USB Mailing List, linux-kernel,
	linux-arm-msm

Hi Vivek,

On Fri, 2017-03-10 at 20:10 +0530, Vivek Gautam wrote:
> Hi Philipp,
> 
> 
> On Wed, Feb 22, 2017 at 10:54 AM, Vivek Gautam
> <vivek.gautam@codeaurora.org> wrote:
> > Count number of reset phandles available with the device node
> > to know the resets a given device has.
> >
> > Cc: Philipp Zabel <p.zabel@pengutronix.de>
> > Signed-off-by: Vivek Gautam <vivek.gautam@codeaurora.org>
> > ---
> 
> Any thoughts on this change?
> A small addition that seems useful.

Sorry I missed this one earlier.

> >
> > Based on torvald's master branch.
> >
> >  include/linux/reset.h | 16 ++++++++++++++++
> >  1 file changed, 16 insertions(+)
> >
> > diff --git a/include/linux/reset.h b/include/linux/reset.h
> > index 5daff15722d3..88f63a640153 100644
> > --- a/include/linux/reset.h
> > +++ b/include/linux/reset.h
> > @@ -2,6 +2,7 @@
> >  #define _LINUX_RESET_H_
> >
> >  #include <linux/device.h>
> > +#include <linux/of.h>
> >
> >  struct reset_control;
> >
> > @@ -234,6 +235,21 @@ static inline struct reset_control *of_reset_control_get_shared_by_index(
> >  }
> >
> >  /**
> > + * of_reset_control_get_count - Count number of resets available with a device
> > + * @node: device to be reset by the controller
> > + */
> > +static inline unsigned int of_reset_control_get_count(struct device_node *node)
> > +{
> > +       int count;
> > +
> > +       count = of_count_phandle_with_args(node, "resets", "#reset-cells");
> > +       if (count < 0)
> > +               return 0;

Please don't silently ignore errors. gpiod_count doesn't ignore errors
either. tegra_powergate_of_resets in drivers/soc/tegra/pmc.c open codes
this, too. This should be changed so it can be used there, too.

regards
Philipp

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/2] usb; dwc3: of-simple: Add support to get resets for the device
  2017-02-22  5:24 ` [PATCH 2/2] usb; dwc3: of-simple: Add support to get resets for the device Vivek Gautam
  2017-03-10 11:24   ` Felipe Balbi
@ 2017-03-15 10:45   ` Philipp Zabel
  2017-03-16  5:34     ` Vivek Gautam
  1 sibling, 1 reply; 10+ messages in thread
From: Philipp Zabel @ 2017-03-15 10:45 UTC (permalink / raw)
  To: Vivek Gautam; +Cc: balbi, gregkh, linux-usb, linux-kernel, linux-arm-msm

On Wed, 2017-02-22 at 10:54 +0530, Vivek Gautam wrote:
> Add support to get a list of resets available for the device.
> These resets must be kept de-asserted until the device is
> in use.
> 
> Cc: Felipe Balbi <balbi@kernel.org>
> Signed-off-by: Vivek Gautam <vivek.gautam@codeaurora.org>
> ---
> 
> Based on torvald's master branch.
> 
>  drivers/usb/dwc3/dwc3-of-simple.c | 49 +++++++++++++++++++++++++++++++++++++++
>  1 file changed, 49 insertions(+)
> 
> diff --git a/drivers/usb/dwc3/dwc3-of-simple.c b/drivers/usb/dwc3/dwc3-of-simple.c
> index fe414e7a9c78..025de7342d28 100644
> --- a/drivers/usb/dwc3/dwc3-of-simple.c
> +++ b/drivers/usb/dwc3/dwc3-of-simple.c
> @@ -29,13 +29,52 @@
>  #include <linux/of.h>
>  #include <linux/of_platform.h>
>  #include <linux/pm_runtime.h>
> +#include <linux/reset.h>
>  
>  struct dwc3_of_simple {
>  	struct device		*dev;
>  	struct clk		**clks;
>  	int			num_clocks;
> +	struct reset_control	**resets;
> +	int			num_resets;
>  };
>  
> +static int dwc3_of_simple_reset_init(struct dwc3_of_simple *simple, int count)
> +{
> +	struct device		*dev = simple->dev;
> +	int			i;
> +
> +	simple->num_resets = count;
> +
> +	if (!count)
> +		return 0;
> +
> +	simple->resets = devm_kcalloc(dev, simple->num_resets,
> +				sizeof(struct reset_control *), GFP_KERNEL);
> +	if (!simple->resets)
> +		return -ENOMEM;
> +
> +	for (i = 0; i < simple->num_resets; i++) {
> +		struct reset_control *reset;
> +		int ret;
> +
> +		reset = devm_reset_control_get_by_index(dev, i);

Please use devm_reset_control_get_exclusive_by_index instead. See
include/linux/reset.h for details.

> +		if (IS_ERR(reset))
> +			return PTR_ERR(reset);
> +
> +		simple->resets[i] = reset;
> +
> +		ret = reset_control_deassert(reset);
> +		if (ret) {
> +			while (--i >= 0)
> +				reset_control_assert(reset);
> +			return ret;
> +		}
> +	}
> +
> +	return 0;
> +}

This looks rather generic. Should we have a
reset_control_get/assert/deassert_array functionality at the reset API
level?

>  static int dwc3_of_simple_clk_init(struct dwc3_of_simple *simple, int count)
>  {
>  	struct device		*dev = simple->dev;
> @@ -100,6 +139,10 @@ static int dwc3_of_simple_probe(struct platform_device *pdev)
>  	if (ret)
>  		return ret;
>  
> +	ret = dwc3_of_simple_reset_init(simple, of_reset_control_get_count(np));
> +	if (ret)
> +		return ret;
> +

Not a blocker, but it seems a bit inconsistent to count the reset
controls via the device node (of_...), but then get them via the device
(devm_reset_control_get_... instead of of_reset_control_get_...).

regards
Philipp

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/2] reset: Add API to count number of reset available with device
  2017-03-15 10:40   ` Philipp Zabel
@ 2017-03-16  3:48     ` Vivek Gautam
  0 siblings, 0 replies; 10+ messages in thread
From: Vivek Gautam @ 2017-03-16  3:48 UTC (permalink / raw)
  To: Philipp Zabel
  Cc: Felipe Balbi, Greg KH, Linux USB Mailing List, linux-kernel,
	linux-arm-msm

Hi Philipp,


On Wed, Mar 15, 2017 at 4:10 PM, Philipp Zabel <p.zabel@pengutronix.de> wrote:
> Hi Vivek,
>
> On Fri, 2017-03-10 at 20:10 +0530, Vivek Gautam wrote:
>> Hi Philipp,
>>
>>
>> On Wed, Feb 22, 2017 at 10:54 AM, Vivek Gautam
>> <vivek.gautam@codeaurora.org> wrote:
>> > Count number of reset phandles available with the device node
>> > to know the resets a given device has.
>> >
>> > Cc: Philipp Zabel <p.zabel@pengutronix.de>
>> > Signed-off-by: Vivek Gautam <vivek.gautam@codeaurora.org>
>> > ---
>>
>> Any thoughts on this change?
>> A small addition that seems useful.
>
> Sorry I missed this one earlier.
>
>> >
>> > Based on torvald's master branch.
>> >
>> >  include/linux/reset.h | 16 ++++++++++++++++
>> >  1 file changed, 16 insertions(+)
>> >
>> > diff --git a/include/linux/reset.h b/include/linux/reset.h
>> > index 5daff15722d3..88f63a640153 100644
>> > --- a/include/linux/reset.h
>> > +++ b/include/linux/reset.h
>> > @@ -2,6 +2,7 @@
>> >  #define _LINUX_RESET_H_
>> >
>> >  #include <linux/device.h>
>> > +#include <linux/of.h>
>> >
>> >  struct reset_control;
>> >
>> > @@ -234,6 +235,21 @@ static inline struct reset_control *of_reset_control_get_shared_by_index(
>> >  }
>> >
>> >  /**
>> > + * of_reset_control_get_count - Count number of resets available with a device
>> > + * @node: device to be reset by the controller
>> > + */
>> > +static inline unsigned int of_reset_control_get_count(struct device_node *node)
>> > +{
>> > +       int count;
>> > +
>> > +       count = of_count_phandle_with_args(node, "resets", "#reset-cells");
>> > +       if (count < 0)
>> > +               return 0;
>
> Please don't silently ignore errors. gpiod_count doesn't ignore errors
> either. tegra_powergate_of_resets in drivers/soc/tegra/pmc.c open codes
> this, too. This should be changed so it can be used there, too.

Sure, will change this. I can prepare a patch for tegra/pmc.c as well
using this.

Best regards
Vivek

>
> regards
> Philipp
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/2] usb; dwc3: of-simple: Add support to get resets for the device
  2017-03-15 10:45   ` Philipp Zabel
@ 2017-03-16  5:34     ` Vivek Gautam
  0 siblings, 0 replies; 10+ messages in thread
From: Vivek Gautam @ 2017-03-16  5:34 UTC (permalink / raw)
  To: Philipp Zabel; +Cc: balbi, gregkh, linux-usb, linux-kernel, linux-arm-msm

Hi,


On 03/15/2017 04:15 PM, Philipp Zabel wrote:
> On Wed, 2017-02-22 at 10:54 +0530, Vivek Gautam wrote:
>> Add support to get a list of resets available for the device.
>> These resets must be kept de-asserted until the device is
>> in use.
>>
>> Cc: Felipe Balbi <balbi@kernel.org>
>> Signed-off-by: Vivek Gautam <vivek.gautam@codeaurora.org>
>> ---
>>
>> Based on torvald's master branch.
>>
>>   drivers/usb/dwc3/dwc3-of-simple.c | 49 +++++++++++++++++++++++++++++++++++++++
>>   1 file changed, 49 insertions(+)
>>
>> diff --git a/drivers/usb/dwc3/dwc3-of-simple.c b/drivers/usb/dwc3/dwc3-of-simple.c
>> index fe414e7a9c78..025de7342d28 100644
>> --- a/drivers/usb/dwc3/dwc3-of-simple.c
>> +++ b/drivers/usb/dwc3/dwc3-of-simple.c
>> @@ -29,13 +29,52 @@
>>   #include <linux/of.h>
>>   #include <linux/of_platform.h>
>>   #include <linux/pm_runtime.h>
>> +#include <linux/reset.h>
>>   
>>   struct dwc3_of_simple {
>>   	struct device		*dev;
>>   	struct clk		**clks;
>>   	int			num_clocks;
>> +	struct reset_control	**resets;
>> +	int			num_resets;
>>   };
>>   
>> +static int dwc3_of_simple_reset_init(struct dwc3_of_simple *simple, int count)
>> +{
>> +	struct device		*dev = simple->dev;
>> +	int			i;
>> +
>> +	simple->num_resets = count;
>> +
>> +	if (!count)
>> +		return 0;
>> +
>> +	simple->resets = devm_kcalloc(dev, simple->num_resets,
>> +				sizeof(struct reset_control *), GFP_KERNEL);
>> +	if (!simple->resets)
>> +		return -ENOMEM;
>> +
>> +	for (i = 0; i < simple->num_resets; i++) {
>> +		struct reset_control *reset;
>> +		int ret;
>> +
>> +		reset = devm_reset_control_get_by_index(dev, i);
> Please use devm_reset_control_get_exclusive_by_index instead. See
> include/linux/reset.h for details.

Sure, will make use of *exclusive version of the api.

>
>> +		if (IS_ERR(reset))
>> +			return PTR_ERR(reset);
>> +
>> +		simple->resets[i] = reset;
>> +
>> +		ret = reset_control_deassert(reset);
>> +		if (ret) {
>> +			while (--i >= 0)
>> +				reset_control_assert(reset);
>> +			return ret;
>> +		}
>> +	}
>> +
>> +	return 0;
>> +}
> This looks rather generic. Should we have a
> reset_control_get/assert/deassert_array functionality at the reset API
> level?

Yes, i think we should. Something on the lines of 'regulator_bulk_*' 
interface?

>
>>   static int dwc3_of_simple_clk_init(struct dwc3_of_simple *simple, int count)
>>   {
>>   	struct device		*dev = simple->dev;
>> @@ -100,6 +139,10 @@ static int dwc3_of_simple_probe(struct platform_device *pdev)
>>   	if (ret)
>>   		return ret;
>>   
>> +	ret = dwc3_of_simple_reset_init(simple, of_reset_control_get_count(np));
>> +	if (ret)
>> +		return ret;
>> +
> Not a blocker, but it seems a bit inconsistent to count the reset
> controls via the device node (of_...), but then get them via the device
> (devm_reset_control_get_... instead of of_reset_control_get_...).

You are right, it looks inconsistent. I thought of using a resource
managed API. But now i think it doesn't make much sense.


Best Regards
Vivek

>
> regards
> Philipp
>

-- 
The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2017-03-16  5:42 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-22  5:24 [PATCH 1/2] reset: Add API to count number of reset available with device Vivek Gautam
2017-02-22  5:24 ` [PATCH 2/2] usb; dwc3: of-simple: Add support to get resets for the device Vivek Gautam
2017-03-10 11:24   ` Felipe Balbi
2017-03-10 12:18     ` Vivek Gautam
2017-03-10 14:06       ` Felipe Balbi
2017-03-15 10:45   ` Philipp Zabel
2017-03-16  5:34     ` Vivek Gautam
2017-03-10 14:40 ` [PATCH 1/2] reset: Add API to count number of reset available with device Vivek Gautam
2017-03-15 10:40   ` Philipp Zabel
2017-03-16  3:48     ` Vivek Gautam

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).