diff options
Diffstat (limited to 'drivers/serial')
| -rw-r--r-- | drivers/serial/atmel_usart.c | 11 | ||||
| -rw-r--r-- | drivers/serial/ns16550.c | 2 | ||||
| -rw-r--r-- | drivers/serial/serial.c | 3 | ||||
| -rw-r--r-- | drivers/serial/serial_pl01x.c | 2 | ||||
| -rw-r--r-- | drivers/serial/serial_xuartlite.c | 34 | 
5 files changed, 32 insertions, 20 deletions
| diff --git a/drivers/serial/atmel_usart.c b/drivers/serial/atmel_usart.c index e326b2bcf..943ef70fa 100644 --- a/drivers/serial/atmel_usart.c +++ b/drivers/serial/atmel_usart.c @@ -49,17 +49,26 @@ int serial_init(void)  {  	atmel_usart3_t *usart = (atmel_usart3_t *)CONFIG_USART_BASE; +	/* +	 * Just in case: drain transmitter register +	 * 1000us is enough for baudrate >= 9600 +	 */ +	if (!(readl(&usart->csr) & USART3_BIT(TXEMPTY))) +		__udelay(1000); +  	writel(USART3_BIT(RSTRX) | USART3_BIT(RSTTX), &usart->cr);  	serial_setbrg(); -	writel(USART3_BIT(RXEN) | USART3_BIT(TXEN), &usart->cr);  	writel((USART3_BF(USART_MODE, USART3_USART_MODE_NORMAL)  			   | USART3_BF(USCLKS, USART3_USCLKS_MCK)  			   | USART3_BF(CHRL, USART3_CHRL_8)  			   | USART3_BF(PAR, USART3_PAR_NONE)  			   | USART3_BF(NBSTOP, USART3_NBSTOP_1)),  			   &usart->mr); +	writel(USART3_BIT(RXEN) | USART3_BIT(TXEN), &usart->cr); +	/* 100us is enough for the new settings to be settled */ +	__udelay(100);  	return 0;  } diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c index 0c2395531..facadd2f5 100644 --- a/drivers/serial/ns16550.c +++ b/drivers/serial/ns16550.c @@ -52,7 +52,7 @@ void NS16550_init(NS16550_t com_port, int baud_divisor)  	serial_out((baud_divisor >> 8) & 0xff, &com_port->dlm);  	serial_out(UART_LCRVAL, &com_port->lcr);  #if (defined(CONFIG_OMAP) && !defined(CONFIG_OMAP3_ZOOM2)) || \ -					defined(CONFIG_AM33XX) +	defined(CONFIG_AM33XX) || defined(CONFIG_SOC_DA8XX)  #if defined(CONFIG_APTIX)  	/* /13 mode so Aptix 6MHz can hit 115200 */ diff --git a/drivers/serial/serial.c b/drivers/serial/serial.c index 0d6ad6283..b10bab70d 100644 --- a/drivers/serial/serial.c +++ b/drivers/serial/serial.c @@ -84,9 +84,6 @@ static NS16550_t serial_ports[4] = {  };  #define PORT	serial_ports[port-1] -#if defined(CONFIG_CONS_INDEX) -#define CONSOLE	(serial_ports[CONFIG_CONS_INDEX-1]) -#endif  #if defined(CONFIG_SERIAL_MULTI) diff --git a/drivers/serial/serial_pl01x.c b/drivers/serial/serial_pl01x.c index ed581ae22..d4c513709 100644 --- a/drivers/serial/serial_pl01x.c +++ b/drivers/serial/serial_pl01x.c @@ -156,6 +156,8 @@ int serial_init (void)  			writel(lcr, ®s->fr);  		writel(lcr, ®s->pl011_rlcr); +		/* lcrh needs to be set again for change to be effective */ +		writel(lcr, ®s->pl011_lcrh);  	}  #endif  	/* Finally, enable the UART */ diff --git a/drivers/serial/serial_xuartlite.c b/drivers/serial/serial_xuartlite.c index 3a38f9e32..2bdb68ba4 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(®s->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 */ |