linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/2] pinctrl: pinctrl-microchip-sgpio: Extend to call reset driver
@ 2021-10-14  8:59 Horatiu Vultur
  2021-10-14  8:59 ` [PATCH v3 1/2] dt-bindings: pinctrl: pinctrl-microchip-sgpio: Add reset binding Horatiu Vultur
  2021-10-14  8:59 ` [PATCH v3 2/2] pinctrl: microchip sgpio: use reset driver Horatiu Vultur
  0 siblings, 2 replies; 7+ messages in thread
From: Horatiu Vultur @ 2021-10-14  8:59 UTC (permalink / raw)
  To: linus.walleij, robh+dt, lars.povlsen, Steen.Hegelund,
	UNGLinuxDriver, p.zabel, linux-gpio, devicetree,
	linux-arm-kernel, linux-kernel
  Cc: Horatiu Vultur

This allows the driver to call an optional reset driver.

v2->v3:
 - fix warnings reported by 'make dtbs_check'

v1->v2:
 - add dt-bindings changes

Horatiu Vultur (2):
  dt-bindings: pinctrl: pinctrl-microchip-sgpio: Add reset binding
  pinctrl: microchip sgpio: use reset driver

 .../devicetree/bindings/pinctrl/microchip,sparx5-sgpio.yaml | 6 ++++++
 drivers/pinctrl/pinctrl-microchip-sgpio.c                   | 6 ++++++
 2 files changed, 12 insertions(+)

-- 
2.33.0


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

* [PATCH v3 1/2] dt-bindings: pinctrl: pinctrl-microchip-sgpio: Add reset binding
  2021-10-14  8:59 [PATCH v3 0/2] pinctrl: pinctrl-microchip-sgpio: Extend to call reset driver Horatiu Vultur
@ 2021-10-14  8:59 ` Horatiu Vultur
  2021-10-14 11:48   ` Philipp Zabel
  2021-10-14  8:59 ` [PATCH v3 2/2] pinctrl: microchip sgpio: use reset driver Horatiu Vultur
  1 sibling, 1 reply; 7+ messages in thread
From: Horatiu Vultur @ 2021-10-14  8:59 UTC (permalink / raw)
  To: linus.walleij, robh+dt, lars.povlsen, Steen.Hegelund,
	UNGLinuxDriver, p.zabel, linux-gpio, devicetree,
	linux-arm-kernel, linux-kernel
  Cc: Horatiu Vultur

This describes the new binding for calling the reset driver in the
pinctrl-microchip-sgpio driver.

Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
---
 .../devicetree/bindings/pinctrl/microchip,sparx5-sgpio.yaml | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/Documentation/devicetree/bindings/pinctrl/microchip,sparx5-sgpio.yaml b/Documentation/devicetree/bindings/pinctrl/microchip,sparx5-sgpio.yaml
index 4fe35e650909..d7b3aa726e1d 100644
--- a/Documentation/devicetree/bindings/pinctrl/microchip,sparx5-sgpio.yaml
+++ b/Documentation/devicetree/bindings/pinctrl/microchip,sparx5-sgpio.yaml
@@ -68,6 +68,12 @@ properties:
       clock, and larger than zero.
     default: 12500000
 
+  resets:
+    maxItems: 1
+
+  reset-names:
+    maxItems: 1
+
 patternProperties:
   "^gpio@[0-1]$":
     type: object
-- 
2.33.0


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

* [PATCH v3 2/2] pinctrl: microchip sgpio: use reset driver
  2021-10-14  8:59 [PATCH v3 0/2] pinctrl: pinctrl-microchip-sgpio: Extend to call reset driver Horatiu Vultur
  2021-10-14  8:59 ` [PATCH v3 1/2] dt-bindings: pinctrl: pinctrl-microchip-sgpio: Add reset binding Horatiu Vultur
@ 2021-10-14  8:59 ` Horatiu Vultur
  2021-10-14 11:47   ` Philipp Zabel
  1 sibling, 1 reply; 7+ messages in thread
From: Horatiu Vultur @ 2021-10-14  8:59 UTC (permalink / raw)
  To: linus.walleij, robh+dt, lars.povlsen, Steen.Hegelund,
	UNGLinuxDriver, p.zabel, linux-gpio, devicetree,
	linux-arm-kernel, linux-kernel
  Cc: Horatiu Vultur

On lan966x platform when the switch gets reseted then also the sgpio
gets reseted. The fix for this is to extend also the sgpio driver to
call the reset driver which will be reseted only once by the first
driver that is probed.

Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
---
 drivers/pinctrl/pinctrl-microchip-sgpio.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/pinctrl/pinctrl-microchip-sgpio.c b/drivers/pinctrl/pinctrl-microchip-sgpio.c
index 072bccdea2a5..e8a91d0824cb 100644
--- a/drivers/pinctrl/pinctrl-microchip-sgpio.c
+++ b/drivers/pinctrl/pinctrl-microchip-sgpio.c
@@ -17,6 +17,7 @@
 #include <linux/pinctrl/pinmux.h>
 #include <linux/platform_device.h>
 #include <linux/property.h>
+#include <linux/reset.h>
 
 #include "core.h"
 #include "pinconf.h"
@@ -803,6 +804,7 @@ static int microchip_sgpio_probe(struct platform_device *pdev)
 	int div_clock = 0, ret, port, i, nbanks;
 	struct device *dev = &pdev->dev;
 	struct fwnode_handle *fwnode;
+	struct reset_control *reset;
 	struct sgpio_priv *priv;
 	struct clk *clk;
 	u32 val;
@@ -813,6 +815,10 @@ static int microchip_sgpio_probe(struct platform_device *pdev)
 
 	priv->dev = dev;
 
+	reset = devm_reset_control_get_shared(&pdev->dev, "switch");
+	if (!IS_ERR(reset))
+		reset_control_reset(reset);
+
 	clk = devm_clk_get(dev, NULL);
 	if (IS_ERR(clk))
 		return dev_err_probe(dev, PTR_ERR(clk), "Failed to get clock\n");
-- 
2.33.0


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

* Re: [PATCH v3 2/2] pinctrl: microchip sgpio: use reset driver
  2021-10-14  8:59 ` [PATCH v3 2/2] pinctrl: microchip sgpio: use reset driver Horatiu Vultur
@ 2021-10-14 11:47   ` Philipp Zabel
  2021-10-14 14:37     ` Horatiu Vultur
  0 siblings, 1 reply; 7+ messages in thread
From: Philipp Zabel @ 2021-10-14 11:47 UTC (permalink / raw)
  To: Horatiu Vultur, linus.walleij, robh+dt, lars.povlsen,
	Steen.Hegelund, UNGLinuxDriver, linux-gpio, devicetree,
	linux-arm-kernel, linux-kernel

Hi Horatiu,

On Thu, 2021-10-14 at 10:59 +0200, Horatiu Vultur wrote:
> On lan966x platform when the switch gets reseted then also the sgpio
> gets reseted. The fix for this is to extend also the sgpio driver to
> call the reset driver which will be reseted only once by the first
> driver that is probed.
> 
> Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
> ---
>  drivers/pinctrl/pinctrl-microchip-sgpio.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/drivers/pinctrl/pinctrl-microchip-sgpio.c b/drivers/pinctrl/pinctrl-microchip-sgpio.c
> index 072bccdea2a5..e8a91d0824cb 100644
> --- a/drivers/pinctrl/pinctrl-microchip-sgpio.c
> +++ b/drivers/pinctrl/pinctrl-microchip-sgpio.c
> @@ -17,6 +17,7 @@
>  #include <linux/pinctrl/pinmux.h>
>  #include <linux/platform_device.h>
>  #include <linux/property.h>
> +#include <linux/reset.h>
>  
>  #include "core.h"
>  #include "pinconf.h"
> @@ -803,6 +804,7 @@ static int microchip_sgpio_probe(struct platform_device *pdev)
>  	int div_clock = 0, ret, port, i, nbanks;
>  	struct device *dev = &pdev->dev;
>  	struct fwnode_handle *fwnode;
> +	struct reset_control *reset;
>  	struct sgpio_priv *priv;
>  	struct clk *clk;
>  	u32 val;
> @@ -813,6 +815,10 @@ static int microchip_sgpio_probe(struct platform_device *pdev)
>  
>  	priv->dev = dev;
>  
> +	reset = devm_reset_control_get_shared(&pdev->dev, "switch");

Please use devm_reset_control_get_optional_shared() for optional resets
and handle errors. That will return NULL in case the optional reset is
not specified in the device tree.

It seems weird to me that the reset input to the GPIO controller is
called "switch" reset. You can request a single unnamed reset with

	reset = devm_reset_control_get_shared(&pdev->dev, NULL);

although that would limit future extendability in case this driver will
ever require to handle multiple separate resets. If you decide to
request the reset control by name, the yaml binding should specify the
same name.

> +	if (!IS_ERR(reset))
> +		reset_control_reset(reset);

With optional resets, this can be just:

	reset_control_reset(reset);

regards
Philipp

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

* Re: [PATCH v3 1/2] dt-bindings: pinctrl: pinctrl-microchip-sgpio: Add reset binding
  2021-10-14  8:59 ` [PATCH v3 1/2] dt-bindings: pinctrl: pinctrl-microchip-sgpio: Add reset binding Horatiu Vultur
@ 2021-10-14 11:48   ` Philipp Zabel
  0 siblings, 0 replies; 7+ messages in thread
From: Philipp Zabel @ 2021-10-14 11:48 UTC (permalink / raw)
  To: Horatiu Vultur, linus.walleij, robh+dt, lars.povlsen,
	Steen.Hegelund, UNGLinuxDriver, linux-gpio, devicetree,
	linux-arm-kernel, linux-kernel

On Thu, 2021-10-14 at 10:59 +0200, Horatiu Vultur wrote:
> This describes the new binding for calling the reset driver in the
> pinctrl-microchip-sgpio driver.
> 
> Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
> ---
>  .../devicetree/bindings/pinctrl/microchip,sparx5-sgpio.yaml | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/pinctrl/microchip,sparx5-sgpio.yaml b/Documentation/devicetree/bindings/pinctrl/microchip,sparx5-sgpio.yaml
> index 4fe35e650909..d7b3aa726e1d 100644
> --- a/Documentation/devicetree/bindings/pinctrl/microchip,sparx5-sgpio.yaml
> +++ b/Documentation/devicetree/bindings/pinctrl/microchip,sparx5-sgpio.yaml
> @@ -68,6 +68,12 @@ properties:
>        clock, and larger than zero.
>      default: 12500000
>  
> +  resets:
> +    maxItems: 1
> +
> +  reset-names:
> +    maxItems: 1

I'd expect reset-names to specify the name if it exists.

regards
Philipp

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

* Re: [PATCH v3 2/2] pinctrl: microchip sgpio: use reset driver
  2021-10-14 11:47   ` Philipp Zabel
@ 2021-10-14 14:37     ` Horatiu Vultur
  2021-10-15 13:46       ` Philipp Zabel
  0 siblings, 1 reply; 7+ messages in thread
From: Horatiu Vultur @ 2021-10-14 14:37 UTC (permalink / raw)
  To: Philipp Zabel
  Cc: linus.walleij, robh+dt, lars.povlsen, Steen.Hegelund,
	UNGLinuxDriver, linux-gpio, devicetree, linux-arm-kernel,
	linux-kernel

The 10/14/2021 13:47, Philipp Zabel wrote:
> 
> Hi Horatiu,

Hi Philipp
> 
> > +     reset = devm_reset_control_get_shared(&pdev->dev, "switch");
> 
> Please use devm_reset_control_get_optional_shared() for optional resets
> and handle errors. That will return NULL in case the optional reset is
> not specified in the device tree.

I will do that.

> 
> It seems weird to me that the reset input to the GPIO controller is
> called "switch" reset. You can request a single unnamed reset with
> 
>         reset = devm_reset_control_get_shared(&pdev->dev, NULL);
> 
> although that would limit future extendability in case this driver will
> ever require to handle multiple separate resets. If you decide to
> request the reset control by name, the yaml binding should specify the
> same name.

I think this requires a little bit more explanation from my side. On
lan966x we are facing the following issue. When we try to reset just the
switch core then also the sgpio device was reset and there was no way
from HW perspective to prevent this.

So our solutions was to create a reset driver[1] that will be triggered
only one time, by the sgpio driver or by the switch driver. That is the
reason why it was called "switch" reset. And that is the purpose of this
patch to allow the sgpio driver to reset the switch in case is probed
before the switch driver so it would not get reset after that.

> 
> > +     if (!IS_ERR(reset))
> > +             reset_control_reset(reset);
> 
> With optional resets, this can be just:
> 
>         reset_control_reset(reset);

Great I will do that.

> 
> regards
> Philipp

[1] https://lore.kernel.org/lkml/20211013073807.2282230-1-horatiu.vultur@microchip.com/

-- 
/Horatiu

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

* Re: [PATCH v3 2/2] pinctrl: microchip sgpio: use reset driver
  2021-10-14 14:37     ` Horatiu Vultur
@ 2021-10-15 13:46       ` Philipp Zabel
  0 siblings, 0 replies; 7+ messages in thread
From: Philipp Zabel @ 2021-10-15 13:46 UTC (permalink / raw)
  To: Horatiu Vultur
  Cc: linus.walleij, robh+dt, lars.povlsen, Steen.Hegelund,
	UNGLinuxDriver, linux-gpio, devicetree, linux-arm-kernel,
	linux-kernel

On Thu, 2021-10-14 at 16:37 +0200, Horatiu Vultur wrote:
> The 10/14/2021 13:47, Philipp Zabel wrote:
> > Hi Horatiu,
> 
> Hi Philipp
> > > +     reset = devm_reset_control_get_shared(&pdev->dev, "switch");
> > 
> > Please use devm_reset_control_get_optional_shared() for optional resets
> > and handle errors. That will return NULL in case the optional reset is
> > not specified in the device tree.
> 
> I will do that.
> 
> > It seems weird to me that the reset input to the GPIO controller is
> > called "switch" reset. You can request a single unnamed reset with
> > 
> >         reset = devm_reset_control_get_shared(&pdev->dev, NULL);
> > 
> > although that would limit future extendability in case this driver will
> > ever require to handle multiple separate resets. If you decide to
> > request the reset control by name, the yaml binding should specify the
> > same name.
> 
> I think this requires a little bit more explanation from my side. On
> lan966x we are facing the following issue. When we try to reset just the
> switch core then also the sgpio device was reset and there was no way
> from HW perspective to prevent this.
> 
> So our solutions was to create a reset driver[1] that will be triggered
> only one time, by the sgpio driver or by the switch driver. That is the
> reason why it was called "switch" reset. And that is the purpose of this
> patch to allow the sgpio driver to reset the switch in case is probed
> before the switch driver so it would not get reset after that.

Thank you for the explanation, it is perfectly fine to request the
shared reset line with another name, or use no name at all if it is the
only reset input to the sgpio controller.

regards
Philipp

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

end of thread, other threads:[~2021-10-15 13:46 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-14  8:59 [PATCH v3 0/2] pinctrl: pinctrl-microchip-sgpio: Extend to call reset driver Horatiu Vultur
2021-10-14  8:59 ` [PATCH v3 1/2] dt-bindings: pinctrl: pinctrl-microchip-sgpio: Add reset binding Horatiu Vultur
2021-10-14 11:48   ` Philipp Zabel
2021-10-14  8:59 ` [PATCH v3 2/2] pinctrl: microchip sgpio: use reset driver Horatiu Vultur
2021-10-14 11:47   ` Philipp Zabel
2021-10-14 14:37     ` Horatiu Vultur
2021-10-15 13:46       ` Philipp Zabel

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