On Friday, July 04, 2014 at 12:19:14 PM, Masahiro Yamada wrote: > The driver for on-chip UART used on Panasonic UniPhier platform. > > Signed-off-by: Masahiro Yamada <yamad...@jp.panasonic.com>
[...] > +static void uniphier_serial_init(struct uniphier_serial *port) > +{ > + writeb(UART_LCR_WLS_8, &port->lcr); > + > +#define MODE_X_DIV 16 You can use just const unsigned here instead of #define. > + > + /* Compute divisor value. Normally, we should simply return: > + * CONFIG_SYS_NS16550_CLK) / MODE_X_DIV / gd->baudrate > + * but we need to round that value by adding 0.5. > + * Rounding is especially important at high baud rates. > + */ > + writew((CONFIG_SYS_UNIPHIER_UART_CLK + (gd->baudrate * > + (MODE_X_DIV / 2))) / (MODE_X_DIV * gd->baudrate), &port->dlr); > +} > + > +static void uniphier_serial_setbrg(struct uniphier_serial *port) > +{ > + uniphier_serial_init(port); > +} > + > +static int uniphier_serial_tstc(struct uniphier_serial *port) > +{ > + return (readb(&port->lsr) & UART_LSR_DR) != 0; > +} > + > +static int uniphier_serial_getc(struct uniphier_serial *port) > +{ > + while (!uniphier_serial_tstc(port)) > + ; > + > + return readb(&port->rbr); > +} > + > +static void uniphier_serial_putc(struct uniphier_serial *port, const char > c) +{ > + if (c == '\n') > + uniphier_serial_putc(port, '\r'); > + > + while (!(readb(&port->lsr) & UART_LSR_THRE)) > + ; I think in this function, you can avoid such completely unbounded loop. [...] Best regard, Marek Vasut _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot