linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] switch arc-uart to devicetree based probing
@ 2013-01-11  6:20 Vineet Gupta
  2013-01-11  6:20 ` [PATCH 1/4] serial/arc-uart: Don't index with -ve platform_device->id Vineet Gupta
                   ` (4 more replies)
  0 siblings, 5 replies; 15+ messages in thread
From: Vineet Gupta @ 2013-01-11  6:20 UTC (permalink / raw)
  To: linux-serial, linux-kernel; +Cc: Vineet Gupta

Hi,

As part of converting ARC Port to devicetree infrastructure, the following
series converts the arc-uart driver to DT.

* The first patch is a bug-fix which showed up in the process as DT based
  platform devices by default have -ve id
* Next two prepare the driver for forthcoming DT changes.
* Last one contains the DT bindings and driver using those.

Couple of points worth mentioning:
* The earlyprintk portion of driver still relies on static platform data
  we would need some earlyprintk handling in of_fdt_* to clean it up properly
* Two of the three platform data instances are now retrieved from DT.
  However one still needs to be dynamically passed by platform (using
  of_dev_auxdata) as we want to run same image in simulator and hardware

Tested on in-works ARC 3.8 port.

P.S. Greg, can this be treated as a bug-fix for 3.8

Thx,
-Vineet

Vineet Gupta (4):
  serial/arc-uart: Don't index with -ve platform_device->id
  serial/arc-uart: split probe from probe_earlyprintk
  serial/arc-uart: platform_data order changed
  serial/arc-uart: switch to devicetree based probing

 .../devicetree/bindings/tty/serial/arc-uart.txt    |   26 ++++++
 drivers/tty/serial/arc_uart.c                      |   95 ++++++++++++++------
 2 files changed, 94 insertions(+), 27 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/tty/serial/arc-uart.txt

-- 
1.7.4.1


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

* [PATCH 1/4] serial/arc-uart: Don't index with -ve platform_device->id
  2013-01-11  6:20 [PATCH 0/4] switch arc-uart to devicetree based probing Vineet Gupta
@ 2013-01-11  6:20 ` Vineet Gupta
  2013-01-11  6:20 ` [PATCH 2/4] serial/arc-uart: split probe from probe_earlyprintk Vineet Gupta
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 15+ messages in thread
From: Vineet Gupta @ 2013-01-11  6:20 UTC (permalink / raw)
  To: linux-serial, linux-kernel
  Cc: Vineet Gupta, Alan Cox, Greg Kroah-Hartman, Jiri Slaby

probe routine could index into port[] with -ve index. The check in
arc_uart_init_one() was too late.

This came to light when trying to port driver to CONFIG_OF, where
bydefault of-core code sets -ve platform dev id and in absence of
DT serial aliases, driver would use the -ve index.

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Cc: Alan Cox <alan@linux.intel.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Jiri Slaby <jslaby@suse.cz>
Cc: linux-serial@vger.kernel.org
---
 drivers/tty/serial/arc_uart.c |   29 +++++++++++++++--------------
 1 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/drivers/tty/serial/arc_uart.c b/drivers/tty/serial/arc_uart.c
index 3e0b3fa..8089dc3 100644
--- a/drivers/tty/serial/arc_uart.c
+++ b/drivers/tty/serial/arc_uart.c
@@ -526,15 +526,11 @@ static struct uart_ops arc_serial_pops = {
 };
 
 static int
-arc_uart_init_one(struct platform_device *pdev, struct arc_uart_port *uart)
+arc_uart_init_one(struct platform_device *pdev, int dev_id)
 {
 	struct resource *res, *res2;
 	unsigned long *plat_data;
-
-	if (pdev->id < 0 || pdev->id >= CONFIG_SERIAL_ARC_NR_PORTS) {
-		dev_err(&pdev->dev, "Wrong uart platform device id.\n");
-		return -ENOENT;
-	}
+	struct arc_uart_port *uart = &arc_uart_ports[dev_id];
 
 	plat_data = ((unsigned long *)(pdev->dev.platform_data));
 	uart->baud = plat_data[0];
@@ -557,7 +553,7 @@ arc_uart_init_one(struct platform_device *pdev, struct arc_uart_port *uart)
 	uart->port.dev = &pdev->dev;
 	uart->port.iotype = UPIO_MEM;
 	uart->port.flags = UPF_BOOT_AUTOCONF;
-	uart->port.line = pdev->id;
+	uart->port.line = dev_id;
 	uart->port.ops = &arc_serial_pops;
 
 	uart->port.uartclk = plat_data[1];
@@ -657,9 +653,14 @@ static struct __initdata console arc_early_serial_console = {
 
 static int arc_serial_probe_earlyprintk(struct platform_device *pdev)
 {
-	arc_early_serial_console.index = pdev->id;
+	int dev_id = pdev->id < 0 ? 0 : pdev->id;
+	int rc;
 
-	arc_uart_init_one(pdev, &arc_uart_ports[pdev->id]);
+	arc_early_serial_console.index = dev_id;
+
+	rc = arc_uart_init_one(pdev, dev_id);
+	if (rc)
+		panic("early console init failed\n");
 
 	arc_serial_console_setup(&arc_early_serial_console, NULL);
 
@@ -675,18 +676,18 @@ static int arc_serial_probe_earlyprintk(struct platform_device *pdev)
 
 static int arc_serial_probe(struct platform_device *pdev)
 {
-	struct arc_uart_port *uart;
-	int rc;
+	int rc, dev_id;
 
 	if (is_early_platform_device(pdev))
 		return arc_serial_probe_earlyprintk(pdev);
 
-	uart = &arc_uart_ports[pdev->id];
-	rc = arc_uart_init_one(pdev, uart);
+	dev_id = pdev->id < 0 ? 0 : pdev->id;
+	rc = arc_uart_init_one(pdev, dev_id);
 	if (rc)
 		return rc;
 
-	return uart_add_one_port(&arc_uart_driver, &uart->port);
+	rc = uart_add_one_port(&arc_uart_driver, &arc_uart_ports[dev_id].port);
+	return rc;
 }
 
 static int arc_serial_remove(struct platform_device *pdev)
-- 
1.7.4.1


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

* [PATCH 2/4] serial/arc-uart: split probe from probe_earlyprintk
  2013-01-11  6:20 [PATCH 0/4] switch arc-uart to devicetree based probing Vineet Gupta
  2013-01-11  6:20 ` [PATCH 1/4] serial/arc-uart: Don't index with -ve platform_device->id Vineet Gupta
@ 2013-01-11  6:20 ` Vineet Gupta
  2013-01-11  6:20 ` [PATCH 3/4] serial/arc-uart: platform_data order changed Vineet Gupta
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 15+ messages in thread
From: Vineet Gupta @ 2013-01-11  6:20 UTC (permalink / raw)
  To: linux-serial, linux-kernel
  Cc: Vineet Gupta, Alan Cox, Greg Kroah-Hartman, Jiri Slaby

This is in preparation for devicetree based probing, where earlyprintk
won't have access to DT serial aliases which the normal probe would
absolutely rely on.

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Cc: Alan Cox <alan@linux.intel.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Jiri Slaby <jslaby@suse.cz>
Cc: linux-serial@vger.kernel.org
---
 drivers/tty/serial/arc_uart.c |   21 +++++++++++----------
 1 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/drivers/tty/serial/arc_uart.c b/drivers/tty/serial/arc_uart.c
index 8089dc3..9de26ba 100644
--- a/drivers/tty/serial/arc_uart.c
+++ b/drivers/tty/serial/arc_uart.c
@@ -651,7 +651,7 @@ static struct __initdata console arc_early_serial_console = {
 	.index = -1
 };
 
-static int arc_serial_probe_earlyprintk(struct platform_device *pdev)
+static int __init arc_serial_probe_earlyprintk(struct platform_device *pdev)
 {
 	int dev_id = pdev->id < 0 ? 0 : pdev->id;
 	int rc;
@@ -667,20 +667,12 @@ static int arc_serial_probe_earlyprintk(struct platform_device *pdev)
 	register_console(&arc_early_serial_console);
 	return 0;
 }
-#else
-static int arc_serial_probe_earlyprintk(struct platform_device *pdev)
-{
-	return -ENODEV;
-}
 #endif	/* CONFIG_SERIAL_ARC_CONSOLE */
 
 static int arc_serial_probe(struct platform_device *pdev)
 {
 	int rc, dev_id;
 
-	if (is_early_platform_device(pdev))
-		return arc_serial_probe_earlyprintk(pdev);
-
 	dev_id = pdev->id < 0 ? 0 : pdev->id;
 	rc = arc_uart_init_one(pdev, dev_id);
 	if (rc)
@@ -706,6 +698,15 @@ static struct platform_driver arc_platform_driver = {
 };
 
 #ifdef CONFIG_SERIAL_ARC_CONSOLE
+
+static struct platform_driver early_arc_platform_driver = {
+	.probe = arc_serial_probe_earlyprintk,
+	.remove = arc_serial_remove,
+	.driver = {
+		.name = DRIVER_NAME,
+		.owner = THIS_MODULE,
+	 },
+};
 /*
  * Register an early platform driver of "earlyprintk" class.
  * ARCH platform code installs the driver and probes the early devices
@@ -713,7 +714,7 @@ static struct platform_driver arc_platform_driver = {
  * or it could be done independently, for all "earlyprintk" class drivers.
  * [see arch/arc/plat-arcfpga/platform.c]
  */
-early_platform_init("earlyprintk", &arc_platform_driver);
+early_platform_init("earlyprintk", &early_arc_platform_driver);
 
 #endif  /* CONFIG_SERIAL_ARC_CONSOLE */
 
-- 
1.7.4.1


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

* [PATCH 3/4] serial/arc-uart: platform_data order changed
  2013-01-11  6:20 [PATCH 0/4] switch arc-uart to devicetree based probing Vineet Gupta
  2013-01-11  6:20 ` [PATCH 1/4] serial/arc-uart: Don't index with -ve platform_device->id Vineet Gupta
  2013-01-11  6:20 ` [PATCH 2/4] serial/arc-uart: split probe from probe_earlyprintk Vineet Gupta
@ 2013-01-11  6:20 ` Vineet Gupta
  2013-01-11  6:20 ` [PATCH 4/4] serial/arc-uart: switch to devicetree based probing Vineet Gupta
  2013-01-16  6:16 ` [PATCH 0/4] switch arc-uart " Greg KH
  4 siblings, 0 replies; 15+ messages in thread
From: Vineet Gupta @ 2013-01-11  6:20 UTC (permalink / raw)
  To: linux-serial, linux-kernel
  Cc: Vineet Gupta, Alan Cox, Greg Kroah-Hartman, Jiri Slaby

* is_emulated is now 1st element, rather than last
* also tucked all platform data refs together

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Cc: Alan Cox <alan@linux.intel.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Jiri Slaby <jslaby@suse.cz>
Cc: linux-serial@vger.kernel.org
---
 drivers/tty/serial/arc_uart.c |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/tty/serial/arc_uart.c b/drivers/tty/serial/arc_uart.c
index 9de26ba..2db6410 100644
--- a/drivers/tty/serial/arc_uart.c
+++ b/drivers/tty/serial/arc_uart.c
@@ -533,7 +533,12 @@ arc_uart_init_one(struct platform_device *pdev, int dev_id)
 	struct arc_uart_port *uart = &arc_uart_ports[dev_id];
 
 	plat_data = ((unsigned long *)(pdev->dev.platform_data));
-	uart->baud = plat_data[0];
+	if (!plat_data)
+		return -ENODEV;
+
+	uart->is_emulated = !!plat_data[0];	/* workaround ISS bug */
+	uart->port.uartclk = plat_data[1];
+	uart->baud = plat_data[2];
 
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	if (!res)
@@ -556,7 +561,6 @@ arc_uart_init_one(struct platform_device *pdev, int dev_id)
 	uart->port.line = dev_id;
 	uart->port.ops = &arc_serial_pops;
 
-	uart->port.uartclk = plat_data[1];
 	uart->port.fifosize = ARC_UART_TX_FIFO_SIZE;
 
 	/*
@@ -565,9 +569,6 @@ arc_uart_init_one(struct platform_device *pdev, int dev_id)
 	 */
 	uart->port.ignore_status_mask = 0;
 
-	/* Real Hardware vs. emulated to work around a bug */
-	uart->is_emulated = !!plat_data[2];
-
 	return 0;
 }
 
-- 
1.7.4.1


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

* [PATCH 4/4] serial/arc-uart: switch to devicetree based probing
  2013-01-11  6:20 [PATCH 0/4] switch arc-uart to devicetree based probing Vineet Gupta
                   ` (2 preceding siblings ...)
  2013-01-11  6:20 ` [PATCH 3/4] serial/arc-uart: platform_data order changed Vineet Gupta
@ 2013-01-11  6:20 ` Vineet Gupta
  2013-01-11 11:33   ` Arnd Bergmann
  2013-02-08 23:01   ` Grant Likely
  2013-01-16  6:16 ` [PATCH 0/4] switch arc-uart " Greg KH
  4 siblings, 2 replies; 15+ messages in thread
From: Vineet Gupta @ 2013-01-11  6:20 UTC (permalink / raw)
  To: linux-serial, linux-kernel
  Cc: Vineet Gupta, Grant Likely, Arnd Bergmann, Alan Cox,
	Greg Kroah-Hartman, devicetree-discuss, Rob Herring, Rob Landley

* DT binding for arc-uart
* With alll the bits in place we can now use DT probing.

Note that there's a bit of kludge right now because earlyprintk portion
of driver can't use the DT infrastrcuture to get resoures/plat_data.
This requires some infrastructre changes to of_flat_ framework

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Cc: Grant Likely <grant.likely@secretlab.ca>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: linux-serial@vger.kernel.org
Cc: Alan Cox <alan@linux.intel.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: devicetree-discuss@lists.ozlabs.org
Cc: Rob Herring <rob.herring@calxeda.com>
Cc: Rob Landley <rob@landley.net>
Cc: linux-serial@vger.kernel.org
---
 .../devicetree/bindings/tty/serial/arc-uart.txt    |   26 ++++++++++++
 drivers/tty/serial/arc_uart.c                      |   43 ++++++++++++++++++-
 2 files changed, 66 insertions(+), 3 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/tty/serial/arc-uart.txt

diff --git a/Documentation/devicetree/bindings/tty/serial/arc-uart.txt b/Documentation/devicetree/bindings/tty/serial/arc-uart.txt
new file mode 100644
index 0000000..c3bd8f9
--- /dev/null
+++ b/Documentation/devicetree/bindings/tty/serial/arc-uart.txt
@@ -0,0 +1,26 @@
+* Synopsys ARC UART : Non standard UART used in some of the ARC FPGA boards
+
+Required properties:
+- compatible		: "snps,arc-uart"
+- reg			: offset and length of the register set for the device.
+- interrupts		: device interrupt
+- clock-frequency	: the input clock frequency for the UART
+- baud			: baud rate for UART
+
+e.g.
+
+arcuart0: serial@c0fc1000 {
+	compatible = "snps,arc-uart";
+	reg = <0xc0fc1000 0x100>;
+	interrupts = <5>;
+	clock-frequency = <80000000>;
+	baud = <115200>;
+	status = "okay";
+};
+
+Note: Each port should have an alias correctly numbered in "aliases" node.
+
+e.g.
+aliases {
+	serial0 = &arcuart0;
+};
diff --git a/drivers/tty/serial/arc_uart.c b/drivers/tty/serial/arc_uart.c
index 2db6410..b468601 100644
--- a/drivers/tty/serial/arc_uart.c
+++ b/drivers/tty/serial/arc_uart.c
@@ -37,6 +37,8 @@
 #include <linux/tty_flip.h>
 #include <linux/serial_core.h>
 #include <linux/io.h>
+#include <linux/of.h>
+#include <linux/of_platform.h>
 
 /*************************************
  * ARC UART Hardware Specs
@@ -537,8 +539,26 @@ arc_uart_init_one(struct platform_device *pdev, int dev_id)
 		return -ENODEV;
 
 	uart->is_emulated = !!plat_data[0];	/* workaround ISS bug */
-	uart->port.uartclk = plat_data[1];
-	uart->baud = plat_data[2];
+
+	if (is_early_platform_device(pdev)) {
+		uart->port.uartclk = plat_data[1];
+		uart->baud = plat_data[2];
+	} else {
+		struct device_node *np = pdev->dev.of_node;
+		u32 val;
+
+		if (of_property_read_u32(np, "clock-frequency", &val)) {
+			dev_err(&pdev->dev, "clock-frequency property NOTset\n");
+			return -EINVAL;
+		}
+		uart->port.uartclk = val;
+
+		if (of_property_read_u32(np, "baud", &val)) {
+			dev_err(&pdev->dev, "baud property NOT set\n");
+			return -EINVAL;
+		}
+		uart->baud = val;
+	}
 
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	if (!res)
@@ -673,8 +693,18 @@ static int __init arc_serial_probe_earlyprintk(struct platform_device *pdev)
 static int arc_serial_probe(struct platform_device *pdev)
 {
 	int rc, dev_id;
+	struct device_node *np = pdev->dev.of_node;
+
+	/* no device tree device */
+	if (!np)
+		return -ENODEV;
+
+	dev_id = of_alias_get_id(np, "serial");
+	if (dev_id < 0) {
+		dev_err(&pdev->dev, "failed to get alias id: %d\n", dev_id);
+		return dev_id;
+	}
 
-	dev_id = pdev->id < 0 ? 0 : pdev->id;
 	rc = arc_uart_init_one(pdev, dev_id);
 	if (rc)
 		return rc;
@@ -689,12 +719,19 @@ static int arc_serial_remove(struct platform_device *pdev)
 	return 0;
 }
 
+static const struct of_device_id arc_uart_dt_ids[] = {
+	{ .compatible = "snps,arc-uart" },
+	{ /* Sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, arc_uart_dt_ids);
+
 static struct platform_driver arc_platform_driver = {
 	.probe = arc_serial_probe,
 	.remove = arc_serial_remove,
 	.driver = {
 		.name = DRIVER_NAME,
 		.owner = THIS_MODULE,
+		.of_match_table  = arc_uart_dt_ids,
 	 },
 };
 
-- 
1.7.4.1


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

* Re: [PATCH 4/4] serial/arc-uart: switch to devicetree based probing
  2013-01-11  6:20 ` [PATCH 4/4] serial/arc-uart: switch to devicetree based probing Vineet Gupta
@ 2013-01-11 11:33   ` Arnd Bergmann
  2013-01-11 11:55     ` Vineet Gupta
  2013-02-08 23:01   ` Grant Likely
  1 sibling, 1 reply; 15+ messages in thread
From: Arnd Bergmann @ 2013-01-11 11:33 UTC (permalink / raw)
  To: Vineet Gupta
  Cc: linux-serial, linux-kernel, Grant Likely, Alan Cox,
	Greg Kroah-Hartman, devicetree-discuss, Rob Herring, Rob Landley

On Friday 11 January 2013, Vineet Gupta wrote:
> * DT binding for arc-uart
> * With alll the bits in place we can now use DT probing.
> 
> Note that there's a bit of kludge right now because earlyprintk portion
> of driver can't use the DT infrastrcuture to get resoures/plat_data.
> This requires some infrastructre changes to of_flat_ framework
> 
> Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
> Cc: Grant Likely <grant.likely@secretlab.ca>
> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: linux-serial@vger.kernel.org
> Cc: Alan Cox <alan@linux.intel.com>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: devicetree-discuss@lists.ozlabs.org
> Cc: Rob Herring <rob.herring@calxeda.com>
> Cc: Rob Landley <rob@landley.net>
> Cc: linux-serial@vger.kernel.org

Acked-by: Arnd Bergmann <arnd@arndb.de>

Quick question about the name though: is this UART only used
on ARC, or is it something that synopsys licenses to other
parties as well? If the latter is true, we might want to 
add a more generic "compatible" value for those that use
it on another architecture.

	Arnd

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

* Re: [PATCH 4/4] serial/arc-uart: switch to devicetree based probing
  2013-01-11 11:33   ` Arnd Bergmann
@ 2013-01-11 11:55     ` Vineet Gupta
  2013-01-11 20:17       ` Arnd Bergmann
  0 siblings, 1 reply; 15+ messages in thread
From: Vineet Gupta @ 2013-01-11 11:55 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: linux-serial, linux-kernel, Grant Likely, Alan Cox,
	Greg Kroah-Hartman, devicetree-discuss, Rob Herring, Rob Landley

On Friday 11 January 2013 05:03 PM, Arnd Bergmann wrote:
> On Friday 11 January 2013, Vineet Gupta wrote:
>> * DT binding for arc-uart
>> * With alll the bits in place we can now use DT probing.
>>
>> Note that there's a bit of kludge right now because earlyprintk portion
>> of driver can't use the DT infrastrcuture to get resoures/plat_data.
>> This requires some infrastructre changes to of_flat_ framework
>>
>> Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
>> Cc: Grant Likely <grant.likely@secretlab.ca>
>> Cc: Arnd Bergmann <arnd@arndb.de>
>> Cc: linux-serial@vger.kernel.org
>> Cc: Alan Cox <alan@linux.intel.com>
>> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
>> Cc: devicetree-discuss@lists.ozlabs.org
>> Cc: Rob Herring <rob.herring@calxeda.com>
>> Cc: Rob Landley <rob@landley.net>
>> Cc: linux-serial@vger.kernel.org
> Acked-by: Arnd Bergmann <arnd@arndb.de>
>
> Quick question about the name though: is this UART only used
> on ARC, or is it something that synopsys licenses to other
> parties as well? If the latter is true, we might want to 
> add a more generic "compatible" value for those that use
> it on another architecture.

It's not licensed as standalone IP - since its not a standard 8250. It is only
(but actively) used on the internal FPGA flows from ARC days.

Thx,
Vineet

> 	Arnd


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

* Re: [PATCH 4/4] serial/arc-uart: switch to devicetree based probing
  2013-01-11 11:55     ` Vineet Gupta
@ 2013-01-11 20:17       ` Arnd Bergmann
  0 siblings, 0 replies; 15+ messages in thread
From: Arnd Bergmann @ 2013-01-11 20:17 UTC (permalink / raw)
  To: Vineet Gupta
  Cc: linux-serial, linux-kernel, Grant Likely, Alan Cox,
	Greg Kroah-Hartman, devicetree-discuss, Rob Herring, Rob Landley

On Friday 11 January 2013, Vineet Gupta wrote:
> On Friday 11 January 2013 05:03 PM, Arnd Bergmann wrote:

> > Quick question about the name though: is this UART only used
> > on ARC, or is it something that synopsys licenses to other
> > parties as well? If the latter is true, we might want to 
> > add a more generic "compatible" value for those that use
> > it on another architecture.
> 
> It's not licensed as standalone IP - since its not a standard 8250. It is only
> (but actively) used on the internal FPGA flows from ARC days.
> 
Ok, thanks for the confirmation.

	Arnd

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

* Re: [PATCH 0/4] switch arc-uart to devicetree based probing
  2013-01-11  6:20 [PATCH 0/4] switch arc-uart to devicetree based probing Vineet Gupta
                   ` (3 preceding siblings ...)
  2013-01-11  6:20 ` [PATCH 4/4] serial/arc-uart: switch to devicetree based probing Vineet Gupta
@ 2013-01-16  6:16 ` Greg KH
  2013-01-16  6:16   ` Vineet Gupta
  4 siblings, 1 reply; 15+ messages in thread
From: Greg KH @ 2013-01-16  6:16 UTC (permalink / raw)
  To: Vineet Gupta; +Cc: linux-serial, linux-kernel

On Fri, Jan 11, 2013 at 11:50:19AM +0530, Vineet Gupta wrote:
> Hi,
> 
> As part of converting ARC Port to devicetree infrastructure, the following
> series converts the arc-uart driver to DT.
> 
> * The first patch is a bug-fix which showed up in the process as DT based
>   platform devices by default have -ve id
> * Next two prepare the driver for forthcoming DT changes.
> * Last one contains the DT bindings and driver using those.
> 
> Couple of points worth mentioning:
> * The earlyprintk portion of driver still relies on static platform data
>   we would need some earlyprintk handling in of_fdt_* to clean it up properly
> * Two of the three platform data instances are now retrieved from DT.
>   However one still needs to be dynamically passed by platform (using
>   of_dev_auxdata) as we want to run same image in simulator and hardware
> 
> Tested on in-works ARC 3.8 port.
> 
> P.S. Greg, can this be treated as a bug-fix for 3.8

No, because it is not a bugfix, but a new feature, sorry.

greg k-h

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

* Re: [PATCH 0/4] switch arc-uart to devicetree based probing
  2013-01-16  6:16 ` [PATCH 0/4] switch arc-uart " Greg KH
@ 2013-01-16  6:16   ` Vineet Gupta
  0 siblings, 0 replies; 15+ messages in thread
From: Vineet Gupta @ 2013-01-16  6:16 UTC (permalink / raw)
  To: Greg KH; +Cc: linux-serial, linux-kernel

On Wednesday 16 January 2013 11:46 AM, Greg KH wrote:
> On Fri, Jan 11, 2013 at 11:50:19AM +0530, Vineet Gupta wrote:
>> Hi,
>>
>> As part of converting ARC Port to devicetree infrastructure, the following
>> series converts the arc-uart driver to DT.
>>
>> * The first patch is a bug-fix which showed up in the process as DT based
>>   platform devices by default have -ve id
>> * Next two prepare the driver for forthcoming DT changes.
>> * Last one contains the DT bindings and driver using those.
>>
>> Couple of points worth mentioning:
>> * The earlyprintk portion of driver still relies on static platform data
>>   we would need some earlyprintk handling in of_fdt_* to clean it up properly
>> * Two of the three platform data instances are now retrieved from DT.
>>   However one still needs to be dynamically passed by platform (using
>>   of_dev_auxdata) as we want to run same image in simulator and hardware
>>
>> Tested on in-works ARC 3.8 port.
>>
>> P.S. Greg, can this be treated as a bug-fix for 3.8
> No, because it is not a bugfix, but a new feature, sorry.
>
> greg k-h

NP. Thx a bunch for merging these.
-Vineet

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

* Re: [PATCH 4/4] serial/arc-uart: switch to devicetree based probing
  2013-01-11  6:20 ` [PATCH 4/4] serial/arc-uart: switch to devicetree based probing Vineet Gupta
  2013-01-11 11:33   ` Arnd Bergmann
@ 2013-02-08 23:01   ` Grant Likely
  2013-02-09  6:45     ` Vineet Gupta
  1 sibling, 1 reply; 15+ messages in thread
From: Grant Likely @ 2013-02-08 23:01 UTC (permalink / raw)
  To: Vineet Gupta, linux-serial, linux-kernel
  Cc: Vineet Gupta, Arnd Bergmann, Alan Cox, Greg Kroah-Hartman,
	devicetree-discuss, Rob Herring, Rob Landley

On Fri, 11 Jan 2013 11:50:23 +0530, Vineet Gupta <Vineet.Gupta1@synopsys.com> wrote:
> * DT binding for arc-uart
> * With alll the bits in place we can now use DT probing.
> 
> Note that there's a bit of kludge right now because earlyprintk portion
> of driver can't use the DT infrastrcuture to get resoures/plat_data.
> This requires some infrastructre changes to of_flat_ framework
> 
> Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
> Cc: Grant Likely <grant.likely@secretlab.ca>
> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: linux-serial@vger.kernel.org
> Cc: Alan Cox <alan@linux.intel.com>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: devicetree-discuss@lists.ozlabs.org
> Cc: Rob Herring <rob.herring@calxeda.com>
> Cc: Rob Landley <rob@landley.net>
> Cc: linux-serial@vger.kernel.org
> ---
>  .../devicetree/bindings/tty/serial/arc-uart.txt    |   26 ++++++++++++
>  drivers/tty/serial/arc_uart.c                      |   43 ++++++++++++++++++-
>  2 files changed, 66 insertions(+), 3 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/tty/serial/arc-uart.txt
> 
> diff --git a/Documentation/devicetree/bindings/tty/serial/arc-uart.txt b/Documentation/devicetree/bindings/tty/serial/arc-uart.txt
> new file mode 100644
> index 0000000..c3bd8f9
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/tty/serial/arc-uart.txt
> @@ -0,0 +1,26 @@
> +* Synopsys ARC UART : Non standard UART used in some of the ARC FPGA boards
> +
> +Required properties:
> +- compatible		: "snps,arc-uart"
> +- reg			: offset and length of the register set for the device.
> +- interrupts		: device interrupt
> +- clock-frequency	: the input clock frequency for the UART
> +- baud			: baud rate for UART

change 'baud' to 'current-speed'. There is already precedence for this
with other serial devices.

g.

> @@ -673,8 +693,18 @@ static int __init arc_serial_probe_earlyprintk(struct platform_device *pdev)
>  static int arc_serial_probe(struct platform_device *pdev)
>  {
>  	int rc, dev_id;
> +	struct device_node *np = pdev->dev.of_node;
> +
> +	/* no device tree device */
> +	if (!np)
> +		return -ENODEV;

This breaks non-DT users. Is this what you intend? It creates a flag day
where users have to switch from non-DT to DT cold-turkey.

> +	dev_id = of_alias_get_id(np, "serial");
> +	if (dev_id < 0) {
> +		dev_err(&pdev->dev, "failed to get alias id: %d\n", dev_id);
> +		return dev_id;
> +	}

Don't fail on this. If you can't get an id then choose one dynamically.

>  
> -	dev_id = pdev->id < 0 ? 0 : pdev->id;
>  	rc = arc_uart_init_one(pdev, dev_id);
>  	if (rc)
>  		return rc;
> @@ -689,12 +719,19 @@ static int arc_serial_remove(struct platform_device *pdev)
>  	return 0;
>  }
>  
> +static const struct of_device_id arc_uart_dt_ids[] = {
> +	{ .compatible = "snps,arc-uart" },
> +	{ /* Sentinel */ }
> +};
> +MODULE_DEVICE_TABLE(of, arc_uart_dt_ids);
> +
>  static struct platform_driver arc_platform_driver = {
>  	.probe = arc_serial_probe,
>  	.remove = arc_serial_remove,
>  	.driver = {
>  		.name = DRIVER_NAME,
>  		.owner = THIS_MODULE,
> +		.of_match_table  = arc_uart_dt_ids,
>  	 },
>  };
>  
> -- 
> 1.7.4.1
> 

-- 
Grant Likely, B.Sc, P.Eng.
Secret Lab Technologies, Ltd.

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

* Re: [PATCH 4/4] serial/arc-uart: switch to devicetree based probing
  2013-02-08 23:01   ` Grant Likely
@ 2013-02-09  6:45     ` Vineet Gupta
  2013-02-09  9:28       ` Arnd Bergmann
  2013-02-13 20:47       ` [PATCH 4/4] serial/arc-uart: switch to devicetree based probing Grant Likely
  0 siblings, 2 replies; 15+ messages in thread
From: Vineet Gupta @ 2013-02-09  6:45 UTC (permalink / raw)
  To: Grant Likely
  Cc: linux-serial, linux-kernel, Arnd Bergmann, Greg Kroah-Hartman,
	devicetree-discuss, Rob Herring, Rob Landley

On Saturday 09 February 2013 04:31 AM, Grant Likely wrote:
> On Fri, 11 Jan 2013 11:50:23 +0530, Vineet Gupta <Vineet.Gupta1@synopsys.com> wrote:
>> +- clock-frequency	: the input clock frequency for the UART
>> +- baud			: baud rate for UART
> change 'baud' to 'current-speed'. There is already precedence for this
> with other serial devices.

While I'm OK with this - I can only see of_serial.c following the rule :-)
More importantly I'm not clear about the logistics of this fix. Obviously this has
a bearing on DT files in arch/arc/boot/*. So are such changes (platform + driver)
routed thru the subsystem tree or the arch tree or bits from both with
bisectability not considered - which feels wrong. We have to also consider the
fact that Greg has closed the tty/serial for 3.9. So while I have no objection to
your comment, it seems that the it needs to wait till 3.9-rc1 - or is there an
alternate way.

>
>> @@ -673,8 +693,18 @@ static int __init arc_serial_probe_earlyprintk(struct platform_device *pdev)
>>  static int arc_serial_probe(struct platform_device *pdev)
>>  {
>>  	int rc, dev_id;
>> +	struct device_node *np = pdev->dev.of_node;
>> +
>> +	/* no device tree device */
>> +	if (!np)
>> +		return -ENODEV;
> This breaks non-DT users. Is this what you intend? It creates a flag day
> where users have to switch from non-DT to DT cold-turkey.

Not supporting non-DT user was not the idea - it just simplifies the code a bit
given that it would only even be runtime used in a ARC Linux port based platform -
which unconditionally enables OF.  Further - the ARC port itself is not yet
upstream so there are no "official" user of this in tree driver.
FWIW, ARC Linux port was recently reviewed on lkml/arch mailing lists and is now
in linux-next for a possible 3.9 merge.

>> +	dev_id = of_alias_get_id(np, "serial");
>> +	if (dev_id < 0) {
>> +		dev_err(&pdev->dev, "failed to get alias id: %d\n", dev_id);
>> +		return dev_id;
>> +	}
> Don't fail on this. If you can't get an id then choose one dynamically.

You mean just assume 0.

Thanks for reviewing.
-Vineet

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

* Re: [PATCH 4/4] serial/arc-uart: switch to devicetree based probing
  2013-02-09  6:45     ` Vineet Gupta
@ 2013-02-09  9:28       ` Arnd Bergmann
       [not found]         ` <1360572101-12744-1-git-send-email-vgupta@synopsys.com>
  2013-02-13 20:47       ` [PATCH 4/4] serial/arc-uart: switch to devicetree based probing Grant Likely
  1 sibling, 1 reply; 15+ messages in thread
From: Arnd Bergmann @ 2013-02-09  9:28 UTC (permalink / raw)
  To: Vineet Gupta
  Cc: Grant Likely, linux-serial, linux-kernel, Greg Kroah-Hartman,
	devicetree-discuss, Rob Herring, Rob Landley

On Saturday 09 February 2013, Vineet Gupta wrote:
> On Saturday 09 February 2013 04:31 AM, Grant Likely wrote:
> > On Fri, 11 Jan 2013 11:50:23 +0530, Vineet Gupta <Vineet.Gupta1@synopsys.com> wrote:
> >> +- clock-frequency   : the input clock frequency for the UART
> >> +- baud                      : baud rate for UART
> > change 'baud' to 'current-speed'. There is already precedence for this
> > with other serial devices.
> 
> While I'm OK with this - I can only see of_serial.c following the rule :-)
> More importantly I'm not clear about the logistics of this fix. Obviously this has
> a bearing on DT files in arch/arc/boot/*. So are such changes (platform + driver)
> routed thru the subsystem tree or the arch tree or bits from both with
> bisectability not considered - which feels wrong. We have to also consider the
> fact that Greg has closed the tty/serial for 3.9. So while I have no objection to
> your comment, it seems that the it needs to wait till 3.9-rc1 - or is there an
> alternate way.

I'd consider this one a bug fix, so while Greg is not accepting any new
features for the serial tree, I think it should still get in that way
and should not be controversial as an add-on change.

	
	Arnd

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

* [PATCH] serial/arc-uart: Miscll DT related updates (Grant's review comments)
       [not found]         ` <1360572101-12744-1-git-send-email-vgupta@synopsys.com>
@ 2013-02-11  8:41           ` Vineet Gupta
  0 siblings, 0 replies; 15+ messages in thread
From: Vineet Gupta @ 2013-02-11  8:41 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Grant Likely, Arnd Bergmann, linux-serial, Vineet Gupta,
	devicetree-discuss, Rob Herring, Rob Landley, linux-kernel

-replace "baud" with "current-speed"
-if uart alias doesn't exist in DT, don't abort, pick 0

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Grant Likely <grant.likely@secretlab.ca>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: devicetree-discuss@lists.ozlabs.org
Cc: Rob Herring <rob.herring@calxeda.com>
Cc: Rob Landley <rob@landley.net>
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
---
 .../devicetree/bindings/tty/serial/arc-uart.txt    |    4 ++--
 drivers/tty/serial/arc_uart.c                      |   10 ++++------
 2 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/Documentation/devicetree/bindings/tty/serial/arc-uart.txt b/Documentation/devicetree/bindings/tty/serial/arc-uart.txt
index c3bd8f9..5cae2eb 100644
--- a/Documentation/devicetree/bindings/tty/serial/arc-uart.txt
+++ b/Documentation/devicetree/bindings/tty/serial/arc-uart.txt
@@ -5,7 +5,7 @@ Required properties:
 - reg			: offset and length of the register set for the device.
 - interrupts		: device interrupt
 - clock-frequency	: the input clock frequency for the UART
-- baud			: baud rate for UART
+- current-speed		: baud rate for UART
 
 e.g.
 
@@ -14,7 +14,7 @@ arcuart0: serial@c0fc1000 {
 	reg = <0xc0fc1000 0x100>;
 	interrupts = <5>;
 	clock-frequency = <80000000>;
-	baud = <115200>;
+	current-speed = <115200>;
 	status = "okay";
 };
 
diff --git a/drivers/tty/serial/arc_uart.c b/drivers/tty/serial/arc_uart.c
index 6f7eadc..d97e194 100644
--- a/drivers/tty/serial/arc_uart.c
+++ b/drivers/tty/serial/arc_uart.c
@@ -547,8 +547,8 @@ arc_uart_init_one(struct platform_device *pdev, int dev_id)
 		}
 		uart->port.uartclk = val;
 
-		if (of_property_read_u32(np, "baud", &val)) {
-			dev_err(&pdev->dev, "baud property NOT set\n");
+		if (of_property_read_u32(np, "current-speed", &val)) {
+			dev_err(&pdev->dev, "current-speed property NOT set\n");
 			return -EINVAL;
 		}
 		uart->baud = val;
@@ -694,10 +694,8 @@ static int arc_serial_probe(struct platform_device *pdev)
 		return -ENODEV;
 
 	dev_id = of_alias_get_id(np, "serial");
-	if (dev_id < 0) {
-		dev_err(&pdev->dev, "failed to get alias id: %d\n", dev_id);
-		return dev_id;
-	}
+	if (dev_id < 0)
+		dev_id = 0;
 
 	rc = arc_uart_init_one(pdev, dev_id);
 	if (rc)
-- 
1.7.4.1


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

* Re: [PATCH 4/4] serial/arc-uart: switch to devicetree based probing
  2013-02-09  6:45     ` Vineet Gupta
  2013-02-09  9:28       ` Arnd Bergmann
@ 2013-02-13 20:47       ` Grant Likely
  1 sibling, 0 replies; 15+ messages in thread
From: Grant Likely @ 2013-02-13 20:47 UTC (permalink / raw)
  To: Vineet Gupta
  Cc: linux-serial, linux-kernel, Arnd Bergmann, Greg Kroah-Hartman,
	devicetree-discuss, Rob Herring, Rob Landley

On Sat, 9 Feb 2013 12:15:10 +0530, Vineet Gupta <Vineet.Gupta1@synopsys.com> wrote:
> On Saturday 09 February 2013 04:31 AM, Grant Likely wrote:
> > On Fri, 11 Jan 2013 11:50:23 +0530, Vineet Gupta <Vineet.Gupta1@synopsys.com> wrote:
> >> +- clock-frequency	: the input clock frequency for the UART
> >> +- baud			: baud rate for UART
> > change 'baud' to 'current-speed'. There is already precedence for this
> > with other serial devices.
> 
> While I'm OK with this - I can only see of_serial.c following the rule :-)
> More importantly I'm not clear about the logistics of this fix. Obviously this has
> a bearing on DT files in arch/arc/boot/*. So are such changes (platform + driver)
> routed thru the subsystem tree or the arch tree or bits from both with
> bisectability not considered - which feels wrong. We have to also consider the
> fact that Greg has closed the tty/serial for 3.9. So while I have no objection to
> your comment, it seems that the it needs to wait till 3.9-rc1 - or is there an
> alternate way.

I would consider it a bug fix. The binding isn't what it should be and
it needs to be addressed before appearing in a released kernel. If this
patch has already been merged, then write and post a fixup patch.

> >
> >> @@ -673,8 +693,18 @@ static int __init arc_serial_probe_earlyprintk(struct platform_device *pdev)
> >>  static int arc_serial_probe(struct platform_device *pdev)
> >>  {
> >>  	int rc, dev_id;
> >> +	struct device_node *np = pdev->dev.of_node;
> >> +
> >> +	/* no device tree device */
> >> +	if (!np)
> >> +		return -ENODEV;
> > This breaks non-DT users. Is this what you intend? It creates a flag day
> > where users have to switch from non-DT to DT cold-turkey.
> 
> Not supporting non-DT user was not the idea - it just simplifies the code a bit
> given that it would only even be runtime used in a ARC Linux port based platform -
> which unconditionally enables OF.  Further - the ARC port itself is not yet
> upstream so there are no "official" user of this in tree driver.
> FWIW, ARC Linux port was recently reviewed on lkml/arch mailing lists and is now
> in linux-next for a possible 3.9 merge.

If there are no users, then nobody is broken. If this driver only
supports DT platforms then my comment can be ignored.

> >> +	dev_id = of_alias_get_id(np, "serial");
> >> +	if (dev_id < 0) {
> >> +		dev_err(&pdev->dev, "failed to get alias id: %d\n", dev_id);
> >> +		return dev_id;
> >> +	}
> > Don't fail on this. If you can't get an id then choose one dynamically.
> 
> You mean just assume 0.

No, I mean dynamically assign an ID from ids that are available. Say you
had two of these devices in a system, and neither had an alias; they
couldn't both be '0'.  :-)

g.

> 
> Thanks for reviewing.
> -Vineet

-- 
Grant Likely, B.Sc, P.Eng.
Secret Lab Technologies, Ltd.

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

end of thread, other threads:[~2013-02-13 20:47 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-01-11  6:20 [PATCH 0/4] switch arc-uart to devicetree based probing Vineet Gupta
2013-01-11  6:20 ` [PATCH 1/4] serial/arc-uart: Don't index with -ve platform_device->id Vineet Gupta
2013-01-11  6:20 ` [PATCH 2/4] serial/arc-uart: split probe from probe_earlyprintk Vineet Gupta
2013-01-11  6:20 ` [PATCH 3/4] serial/arc-uart: platform_data order changed Vineet Gupta
2013-01-11  6:20 ` [PATCH 4/4] serial/arc-uart: switch to devicetree based probing Vineet Gupta
2013-01-11 11:33   ` Arnd Bergmann
2013-01-11 11:55     ` Vineet Gupta
2013-01-11 20:17       ` Arnd Bergmann
2013-02-08 23:01   ` Grant Likely
2013-02-09  6:45     ` Vineet Gupta
2013-02-09  9:28       ` Arnd Bergmann
     [not found]         ` <1360572101-12744-1-git-send-email-vgupta@synopsys.com>
2013-02-11  8:41           ` [PATCH] serial/arc-uart: Miscll DT related updates (Grant's review comments) Vineet Gupta
2013-02-13 20:47       ` [PATCH 4/4] serial/arc-uart: switch to devicetree based probing Grant Likely
2013-01-16  6:16 ` [PATCH 0/4] switch arc-uart " Greg KH
2013-01-16  6:16   ` Vineet Gupta

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