[U-Boot-Users] [PATCH] OMAP5912: fix FIFO handling in UART driver

Dirk Behme dirk.behme at googlemail.com
Thu Dec 27 21:38:32 CET 2007


Wolfgang Denk wrote:
> According to the OMAP5912 Serial Interfaces Reference Guide (see
> http://focus.ti.com/lit/ug/spru760c/spru760c.pdf, page 150), the
> FIFO_EN enable bit in the FIFO Control Register (FCR) can only be
> changed when the baud clock is not running, i. e. when both DLL and
> DLH are set to 0.
> 
> Thus make sure that DLL and DLH are 0 when writing the FCR.
> 
> Signed-off-by: Wolfgang Denk <wd at denx.de>
> ---
>  drivers/serial/ns16550.c |   16 ++++++++++++----
>  1 files changed, 12 insertions(+), 4 deletions(-)
> 
> Unfortunately I can test this only on a limited number of boards with
> other NS16550 compatible UARTs (like TQM85xx, TQM83xx); the patch
> seems to cause no problems there.

How do you test this? Whats your test case? Then I will try to test it 
on a OMAP5912 OSK.

Thanks

Dirk

> diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c
> index 2429464..6b3f60e 100644
> --- a/drivers/serial/ns16550.c
> +++ b/drivers/serial/ns16550.c
> @@ -21,11 +21,15 @@ void NS16550_init (NS16550_t com_port, int baud_divisor)
>  	com_port->mdr1 = 0x7;	/* mode select reset TL16C750*/
>  #endif
>  	com_port->lcr = LCR_BKSE | LCRVAL;
> -	com_port->dll = baud_divisor & 0xff;
> -	com_port->dlm = (baud_divisor >> 8) & 0xff;
> +	com_port->dll = 0;
> +	com_port->dlm = 0;
>  	com_port->lcr = LCRVAL;
>  	com_port->mcr = MCRVAL;
>  	com_port->fcr = FCRVAL;
> +	com_port->lcr = LCR_BKSE | LCRVAL;
> +	com_port->dll = baud_divisor & 0xff;
> +	com_port->dlm = (baud_divisor >> 8) & 0xff;
> +	com_port->lcr = LCRVAL;
>  #if defined(CONFIG_OMAP)
>  #if defined(CONFIG_APTIX)
>  	com_port->mdr1 = 3;	/* /13 mode so Aptix 6MHz can hit 115200 */
> @@ -38,12 +42,16 @@ void NS16550_init (NS16550_t com_port, int baud_divisor)
>  void NS16550_reinit (NS16550_t com_port, int baud_divisor)
>  {
>  	com_port->ier = 0x00;
> +	com_port->lcr = LCR_BKSE | LCRVAL;
> +	com_port->dll = 0;
> +	com_port->dlm = 0;
> +	com_port->lcr = LCRVAL;
> +	com_port->mcr = MCRVAL;
> +	com_port->fcr = FCRVAL;
>  	com_port->lcr = LCR_BKSE;
>  	com_port->dll = baud_divisor & 0xff;
>  	com_port->dlm = (baud_divisor >> 8) & 0xff;
>  	com_port->lcr = LCRVAL;
> -	com_port->mcr = MCRVAL;
> -	com_port->fcr = FCRVAL;
>  }
>  
>  void NS16550_putc (NS16550_t com_port, char c)





More information about the U-Boot mailing list