Skip to contentSkip to conversation

tty/serial: atmel_serial: bootconsole removed from auto-enumerates

PATCH New Nicolas Ferre 2 participants 3 messages Oct 19, 2011 1 message not in the archive

Subsystems (3)
lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]

#1 lore raw

PATCH 1/1 tty/serial: atmel_serial: bootconsole removed from auto-enumerates

Auto-enumerate mechanism conflicts with bootconsoles: remove the usage counter for this type of consoles.

---
 drivers/tty/serial/atmel_serial.c |    1 -
 1 files changed, 0 insertions(+), 1 deletions(-)
drivers/tty/serial/atmel_serial.c +0 -1
index 30d8c77..9988c0c 100644
@@ -1676,7 +1676,6 @@ static int __init atmel_console_init(void)
 		int id = pdata->num;
 		struct atmel_uart_port *port = &atmel_ports[id];
 
-		set_bit(id, &atmel_ports_in_use);
 		port->backup_imr = 0;
 		port->uart.line = id;
 
Signature · 1 line
1.7.5.4
#2 lore raw

Re: patch "tty/serial: atmel_serial: auto-enumerate ports" added to tty tree

In reply to a message not in the archive

On 10/19/2011 01:47 AM, [email protected] :

Quoted 9 lines

This is a note to let you know that I've just added the patch titled

tty/serial: atmel_serial: auto-enumerate ports

to my tty git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git
in the tty-next branch.

Quoted 7 lines

The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)

The patch will also will be merged in the next major kernel release during the merge window.

If you have any questions about this process, please let me know.

Hi Greg,

Thanks for taking this series into your tree.

Can you please consider folding or adding the patch that I have just sent. It corrects this auto-enumerate implementation and its name is:
"tty/serial: atmel_serial: bootconsole removed from auto-enumerates"

Best regards,

Quoted 110 lines
Quoted 1 line

From 4cbf9f4864bd4fb2e64d555aacb93c24478e4e8d Mon Sep 17 00:00:00 2001

From: Nicolas Ferre <[email protected]>
Date: Wed, 12 Oct 2011 18:06:59 +0200
Subject: tty/serial: atmel_serial: auto-enumerate ports

If no platform data provided to enumerate ports, use a bit field to choose port number and check if port is already initialized. Use this mechanism for both console and plain serial ports.

---
 drivers/tty/serial/atmel_serial.c |   44 ++++++++++++++++++++++++++++++------
 1 files changed, 36 insertions(+), 8 deletions(-)
drivers/tty/serial/atmel_serial.c +36 -8
index bb72354..1074329 100644
@@ -157,6 +157,7 @@ struct atmel_uart_port {
 };
 
 static struct atmel_uart_port atmel_ports[ATMEL_MAX_UART];
+static unsigned long atmel_ports_in_use;
 
 #ifdef SUPPORT_SYSRQ
 static struct console atmel_console;
@@ -1423,7 +1424,6 @@ static void __devinit atmel_init_port(struct atmel_uart_port *atmel_port,
 	port->flags		= UPF_BOOT_AUTOCONF;
 	port->ops		= &atmel_pops;
 	port->fifosize		= 1;
-	port->line		= pdata->num;
 	port->dev		= &pdev->dev;
 	port->mapbase	= pdev->resource[0].start;
 	port->irq	= pdev->resource[1].start;
@@ -1613,10 +1613,15 @@ static struct console atmel_console = {
 static int __init atmel_console_init(void)
 {
 	if (atmel_default_console_device) {
-		add_preferred_console(ATMEL_DEVICENAME,
-				      atmel_default_console_device->id, NULL);
-		atmel_init_port(&atmel_ports[atmel_default_console_device->id],
-				atmel_default_console_device);
+		int id = atmel_default_console_device->id;
+		struct atmel_uart_port *port = &atmel_ports[id];
+
+		set_bit(id, &atmel_ports_in_use);
+		port->backup_imr = 0;
+		port->uart.line = id;
+
+		add_preferred_console(ATMEL_DEVICENAME, id, NULL);
+		atmel_init_port(port, atmel_default_console_device);
 		register_console(&atmel_console);
 	}
 
@@ -1715,12 +1720,33 @@ static int __devinit atmel_serial_probe(struct platform_device *pdev)
 	struct atmel_uart_port *port;
 	struct atmel_uart_data *pdata = pdev->dev.platform_data;
 	void *data;
-	int ret;
+	int ret = -ENODEV;
 
 	BUILD_BUG_ON(ATMEL_SERIAL_RINGSIZE & (ATMEL_SERIAL_RINGSIZE - 1));
 
-	port = &atmel_ports[pdata->num];
+	if (pdata)
+		ret = pdata->num;
+
+	if (ret < 0)
+		/* port id not found in platform data:
+		 * auto-enumerate it */
+		ret = find_first_zero_bit(&atmel_ports_in_use,
+				sizeof(atmel_ports_in_use));
+
+	if (ret > ATMEL_MAX_UART) {
+		ret = -ENODEV;
+		goto err;
+	}
+
+	if (test_and_set_bit(ret, &atmel_ports_in_use)) {
+		/* port already in use */
+		ret = -EBUSY;
+		goto err;
+	}
+
+	port = &atmel_ports[ret];
 	port->backup_imr = 0;
+	port->uart.line = ret;
 
 	atmel_init_port(port, pdev);
 
@@ -1766,7 +1792,7 @@ err_alloc_ring:
 		clk_put(port->clk);
 		port->clk = NULL;
 	}
-
+err:
 	return ret;
 }
 
@@ -1786,6 +1812,8 @@ static int __devexit atmel_serial_remove(struct platform_device *pdev)
 
 	/* "port" is allocated statically, so we shouldn't free it */
 
+	clear_bit(port->line, &atmel_ports_in_use);
+
 	clk_put(atmel_port->clk);
 
 	return ret;
Signature · 1 line
Nicolas Ferre
#3 lore raw

Re: patch "tty/serial: atmel_serial: auto-enumerate ports" added to tty tree

Quoted 18 lines · Nicolas Ferre

On 10/19/2011 01:47 AM, [email protected] :

Quoted 9 lines

This is a note to let you know that I've just added the patch titled

tty/serial: atmel_serial: auto-enumerate ports

to my tty git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git
in the tty-next branch.

Quoted 7 lines

The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)

The patch will also will be merged in the next major kernel release during the merge window.

If you have any questions about this process, please let me know.

Quoted 7 lines

Hi Greg,

Thanks for taking this series into your tree.

Can you please consider folding or adding the patch that I have just sent. It corrects this auto-enumerate implementation and its name is:
"tty/serial: atmel_serial: bootconsole removed from auto-enumerates"

Now applied.

thanks,

greg k-h