diff mbox

[U-Boot,2/2] serial: uartlite: Init all uartlites for serial multi

Message ID 1344342025-29014-2-git-send-email-monstr@monstr.eu
State Accepted
Commit 25239e12d9059d75c0ac12c26691a00321aad0cc
Headers show

Commit Message

Michal Simek Aug. 7, 2012, 12:20 p.m. UTC
Initialize all possible uartlites and return the first
initialized port. For static configuration is initialization
done in userial_ports array.

Signed-off-by: Michal Simek <monstr@monstr.eu>
---
 drivers/serial/serial_xuartlite.c |   34 +++++++++++++++++++---------------
 1 files changed, 19 insertions(+), 15 deletions(-)

Comments

Stephan Linz Aug. 7, 2012, 9:15 p.m. UTC | #1
Am Dienstag, den 07.08.2012, 14:20 +0200 schrieb Michal Simek: 
> Initialize all possible uartlites and return the first
> initialized port. For static configuration is initialization
> done in userial_ports array.
> 
> Signed-off-by: Michal Simek <monstr@monstr.eu>

Acked-by: Stephan Linz <linz@li-pro.net>

Tested with AXI system on Avnet S6LX9 micro-evaluation.

> ---
>  drivers/serial/serial_xuartlite.c |   34 +++++++++++++++++++---------------
>  1 files changed, 19 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/serial/serial_xuartlite.c b/drivers/serial/serial_xuartlite.c
> index 3a38f9e..2bdb68b 100644
> --- a/drivers/serial/serial_xuartlite.c
> +++ b/drivers/serial/serial_xuartlite.c
> @@ -89,11 +89,17 @@ int uartlite_serial_tstc(const int port)
>  	return in_be32(&regs->status) & SR_RX_FIFO_VALID_DATA;
>  }
>  
> +static int uartlite_serial_init(const int port)
> +{
> +	if (userial_ports[port])
> +		return 0;
> +	return -1;
> +}
> +
>  #if !defined(CONFIG_SERIAL_MULTI)
>  int serial_init(void)
>  {
> -	/* FIXME: Nothing for now. We should initialize fifo, etc */
> -	return 0;
> +	return uartlite_serial_init(0);
>  }
>  
>  void serial_setbrg(void)
> @@ -126,7 +132,7 @@ int serial_tstc(void)
>  /* Multi serial device functions */
>  #define DECLARE_ESERIAL_FUNCTIONS(port) \
>  	int userial##port##_init(void) \
> -				{ return(0); } \
> +				{ return uartlite_serial_init(port); } \
>  	void userial##port##_setbrg(void) {} \
>  	int userial##port##_getc(void) \
>  				{ return uartlite_serial_getc(port); } \
> @@ -163,17 +169,15 @@ struct serial_device uartlite_serial3_device =
>  
>  __weak struct serial_device *default_serial_console(void)
>  {
> -# ifdef XILINX_UARTLITE_BASEADDR
> -	return &uartlite_serial0_device;
> -# endif /* XILINX_UARTLITE_BASEADDR */
> -# ifdef XILINX_UARTLITE_BASEADDR1
> -	return &uartlite_serial1_device;
> -# endif /* XILINX_UARTLITE_BASEADDR1 */
> -# ifdef XILINX_UARTLITE_BASEADDR2
> -	return &uartlite_serial2_device;
> -# endif /* XILINX_UARTLITE_BASEADDR2 */
> -# ifdef XILINX_UARTLITE_BASEADDR3
> -	return &uartlite_serial3_device;
> -# endif /* XILINX_UARTLITE_BASEADDR3 */
> +	if (userial_ports[0])
> +		return &uartlite_serial0_device;
> +	if (userial_ports[1])
> +		return &uartlite_serial1_device;
> +	if (userial_ports[2])
> +		return &uartlite_serial2_device;
> +	if (userial_ports[3])
> +		return &uartlite_serial3_device;
> +
> +	return NULL;
>  }
>  #endif /* CONFIG_SERIAL_MULTI */
diff mbox

Patch

diff --git a/drivers/serial/serial_xuartlite.c b/drivers/serial/serial_xuartlite.c
index 3a38f9e..2bdb68b 100644
--- a/drivers/serial/serial_xuartlite.c
+++ b/drivers/serial/serial_xuartlite.c
@@ -89,11 +89,17 @@  int uartlite_serial_tstc(const int port)
 	return in_be32(&regs->status) & SR_RX_FIFO_VALID_DATA;
 }
 
+static int uartlite_serial_init(const int port)
+{
+	if (userial_ports[port])
+		return 0;
+	return -1;
+}
+
 #if !defined(CONFIG_SERIAL_MULTI)
 int serial_init(void)
 {
-	/* FIXME: Nothing for now. We should initialize fifo, etc */
-	return 0;
+	return uartlite_serial_init(0);
 }
 
 void serial_setbrg(void)
@@ -126,7 +132,7 @@  int serial_tstc(void)
 /* Multi serial device functions */
 #define DECLARE_ESERIAL_FUNCTIONS(port) \
 	int userial##port##_init(void) \
-				{ return(0); } \
+				{ return uartlite_serial_init(port); } \
 	void userial##port##_setbrg(void) {} \
 	int userial##port##_getc(void) \
 				{ return uartlite_serial_getc(port); } \
@@ -163,17 +169,15 @@  struct serial_device uartlite_serial3_device =
 
 __weak struct serial_device *default_serial_console(void)
 {
-# ifdef XILINX_UARTLITE_BASEADDR
-	return &uartlite_serial0_device;
-# endif /* XILINX_UARTLITE_BASEADDR */
-# ifdef XILINX_UARTLITE_BASEADDR1
-	return &uartlite_serial1_device;
-# endif /* XILINX_UARTLITE_BASEADDR1 */
-# ifdef XILINX_UARTLITE_BASEADDR2
-	return &uartlite_serial2_device;
-# endif /* XILINX_UARTLITE_BASEADDR2 */
-# ifdef XILINX_UARTLITE_BASEADDR3
-	return &uartlite_serial3_device;
-# endif /* XILINX_UARTLITE_BASEADDR3 */
+	if (userial_ports[0])
+		return &uartlite_serial0_device;
+	if (userial_ports[1])
+		return &uartlite_serial1_device;
+	if (userial_ports[2])
+		return &uartlite_serial2_device;
+	if (userial_ports[3])
+		return &uartlite_serial3_device;
+
+	return NULL;
 }
 #endif /* CONFIG_SERIAL_MULTI */