diff mbox

[v2] serial: 8250_of: Add reset support

Message ID 20170526015519.11865-1-joel@jms.id.au
State Accepted
Commit e2860e1f62f2e87d268403a749ba1f19663ef19f
Headers show

Commit Message

Joel Stanley May 26, 2017, 1:55 a.m. UTC
This adds the hooks for an optional reset controller in the 8250 device
tree node.

Signed-off-by: Joel Stanley <joel@jms.id.au>


---
v2:
 Address Philipp's comments. Thanks for the review!
 - use _shared variant
 - remove unnecessary error handling

 Documentation/devicetree/bindings/serial/8250.txt |  1 +
 drivers/tty/serial/8250/8250_of.c                 | 10 ++++++++++
 2 files changed, 11 insertions(+)

-- 
2.11.0

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

Comments

Philipp Zabel May 29, 2017, 9:43 a.m. UTC | #1
Hi Joel,

On Fri, 2017-05-26 at 11:55 +1000, Joel Stanley wrote:
> This adds the hooks for an optional reset controller in the 8250 device

> tree node.

> 

> Signed-off-by: Joel Stanley <joel@jms.id.au>

> 

> ---

> v2:

>  Address Philipp's comments. Thanks for the review!

>  - use _shared variant

>  - remove unnecessary error handling

> 

>  Documentation/devicetree/bindings/serial/8250.txt |  1 +

>  drivers/tty/serial/8250/8250_of.c                 | 10 ++++++++++

>  2 files changed, 11 insertions(+)

> 

> diff --git a/Documentation/devicetree/bindings/serial/8250.txt b/Documentation/devicetree/bindings/serial/8250.txt

> index 10276a46ecef..63e32393f82b 100644

> --- a/Documentation/devicetree/bindings/serial/8250.txt

> +++ b/Documentation/devicetree/bindings/serial/8250.txt

> @@ -45,6 +45,7 @@ Optional properties:

>    property.

>  - tx-threshold: Specify the TX FIFO low water indication for parts with

>    programmable TX FIFO thresholds.

> +- resets : phandle + reset specifier pairs

>  

>  Note:

>  * fsl,ns16550:

> diff --git a/drivers/tty/serial/8250/8250_of.c b/drivers/tty/serial/8250/8250_of.c

> index 1cbadafc6889..e95cc9698c32 100644

> --- a/drivers/tty/serial/8250/8250_of.c

> +++ b/drivers/tty/serial/8250/8250_of.c

> @@ -19,11 +19,13 @@

>  #include <linux/of_irq.h>

>  #include <linux/of_platform.h>

>  #include <linux/clk.h>

> +#include <linux/reset.h>

>  

>  #include "8250.h"

>  

>  struct of_serial_info {

>  	struct clk *clk;

> +	struct reset_control *rst;

>  	int type;

>  	int line;

>  };

> @@ -132,6 +134,13 @@ static int of_platform_serial_setup(struct platform_device *ofdev,

>  		}

>  	}

>  

> +	info->rst = devm_reset_control_get_optional_shared(&ofdev->dev, NULL);

> +	if (IS_ERR(info->rst))

> +		goto out;

> +	ret = reset_control_deassert(info->rst);

> +	if (ret)

> +		goto out;

> +

>  	port->type = type;

>  	port->uartclk = clk;

>  	port->flags = UPF_SHARE_IRQ | UPF_BOOT_AUTOCONF | UPF_IOREMAP

> @@ -231,6 +240,7 @@ static int of_platform_serial_remove(struct platform_device *ofdev)

>  

>  	if (info->clk)

>  		clk_disable_unprepare(info->clk);

> +	reset_control_assert(info->rst);


The clock is enabled before the reset is deasserted in
of_platform_serial_setup, I'd disable it after asserting the reset in
of_platform_serial_remove. Other than that,

Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>


regards
Philipp

--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Joel Stanley May 29, 2017, 9:57 a.m. UTC | #2
On Mon, May 29, 2017 at 7:13 PM, Philipp Zabel <p.zabel@pengutronix.de> wrote:
> Hi Joel,

>

> On Fri, 2017-05-26 at 11:55 +1000, Joel Stanley wrote:

>> This adds the hooks for an optional reset controller in the 8250 device

>> tree node.

>>

>> Signed-off-by: Joel Stanley <joel@jms.id.au>

>>

>> ---

>> v2:

>>  Address Philipp's comments. Thanks for the review!

>>  - use _shared variant

>>  - remove unnecessary error handling

>>

>>  Documentation/devicetree/bindings/serial/8250.txt |  1 +

>>  drivers/tty/serial/8250/8250_of.c                 | 10 ++++++++++

>>  2 files changed, 11 insertions(+)

>>

>> diff --git a/Documentation/devicetree/bindings/serial/8250.txt b/Documentation/devicetree/bindings/serial/8250.txt

>> index 10276a46ecef..63e32393f82b 100644

>> --- a/Documentation/devicetree/bindings/serial/8250.txt

>> +++ b/Documentation/devicetree/bindings/serial/8250.txt

>> @@ -45,6 +45,7 @@ Optional properties:

>>    property.

>>  - tx-threshold: Specify the TX FIFO low water indication for parts with

>>    programmable TX FIFO thresholds.

>> +- resets : phandle + reset specifier pairs

>>

>>  Note:

>>  * fsl,ns16550:

>> diff --git a/drivers/tty/serial/8250/8250_of.c b/drivers/tty/serial/8250/8250_of.c

>> index 1cbadafc6889..e95cc9698c32 100644

>> --- a/drivers/tty/serial/8250/8250_of.c

>> +++ b/drivers/tty/serial/8250/8250_of.c

>> @@ -19,11 +19,13 @@

>>  #include <linux/of_irq.h>

>>  #include <linux/of_platform.h>

>>  #include <linux/clk.h>

>> +#include <linux/reset.h>

>>

>>  #include "8250.h"

>>

>>  struct of_serial_info {

>>       struct clk *clk;

>> +     struct reset_control *rst;

>>       int type;

>>       int line;

>>  };

>> @@ -132,6 +134,13 @@ static int of_platform_serial_setup(struct platform_device *ofdev,

>>               }

>>       }

>>

>> +     info->rst = devm_reset_control_get_optional_shared(&ofdev->dev, NULL);

>> +     if (IS_ERR(info->rst))

>> +             goto out;

>> +     ret = reset_control_deassert(info->rst);

>> +     if (ret)

>> +             goto out;

>> +

>>       port->type = type;

>>       port->uartclk = clk;

>>       port->flags = UPF_SHARE_IRQ | UPF_BOOT_AUTOCONF | UPF_IOREMAP

>> @@ -231,6 +240,7 @@ static int of_platform_serial_remove(struct platform_device *ofdev)

>>

>>       if (info->clk)

>>               clk_disable_unprepare(info->clk);

>> +     reset_control_assert(info->rst);

>

> The clock is enabled before the reset is deasserted in

> of_platform_serial_setup, I'd disable it after asserting the reset in

> of_platform_serial_remove. Other than that,

>

> Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>


Doh, I'll send a v3 with your reviewed-by attached.

Thanks!

Joel
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/Documentation/devicetree/bindings/serial/8250.txt b/Documentation/devicetree/bindings/serial/8250.txt
index 10276a46ecef..63e32393f82b 100644
--- a/Documentation/devicetree/bindings/serial/8250.txt
+++ b/Documentation/devicetree/bindings/serial/8250.txt
@@ -45,6 +45,7 @@  Optional properties:
   property.
 - tx-threshold: Specify the TX FIFO low water indication for parts with
   programmable TX FIFO thresholds.
+- resets : phandle + reset specifier pairs
 
 Note:
 * fsl,ns16550:
diff --git a/drivers/tty/serial/8250/8250_of.c b/drivers/tty/serial/8250/8250_of.c
index 1cbadafc6889..e95cc9698c32 100644
--- a/drivers/tty/serial/8250/8250_of.c
+++ b/drivers/tty/serial/8250/8250_of.c
@@ -19,11 +19,13 @@ 
 #include <linux/of_irq.h>
 #include <linux/of_platform.h>
 #include <linux/clk.h>
+#include <linux/reset.h>
 
 #include "8250.h"
 
 struct of_serial_info {
 	struct clk *clk;
+	struct reset_control *rst;
 	int type;
 	int line;
 };
@@ -132,6 +134,13 @@  static int of_platform_serial_setup(struct platform_device *ofdev,
 		}
 	}
 
+	info->rst = devm_reset_control_get_optional_shared(&ofdev->dev, NULL);
+	if (IS_ERR(info->rst))
+		goto out;
+	ret = reset_control_deassert(info->rst);
+	if (ret)
+		goto out;
+
 	port->type = type;
 	port->uartclk = clk;
 	port->flags = UPF_SHARE_IRQ | UPF_BOOT_AUTOCONF | UPF_IOREMAP
@@ -231,6 +240,7 @@  static int of_platform_serial_remove(struct platform_device *ofdev)
 
 	if (info->clk)
 		clk_disable_unprepare(info->clk);
+	reset_control_assert(info->rst);
 	kfree(info);
 	return 0;
 }