{
        struct circ_buf *xmit = &sport->port.info->xmit;
 
-       do {
+       while (!(UTS((u32)sport->port.membase) & UTS_TXFULL)) {
                /* send xmit->buf[xmit->tail]
                 * out the port here */
                URTX0((u32)sport->port.membase) = xmit->buf[xmit->tail];
                sport->port.icount.tx++;
                if (uart_circ_empty(xmit))
                        break;
-       } while (!(UTS((u32)sport->port.membase) & UTS_TXFULL));
+       }
 
        if (uart_circ_empty(xmit))
                imx_stop_tx(&sport->port);
 
        UCR1((u32)sport->port.membase) |= UCR1_TXMPTYEN;
 
-       if(UTS((u32)sport->port.membase) & UTS_TXEMPTY)
-               imx_transmit_buffer(sport);
+       imx_transmit_buffer(sport);
 }
 
 static irqreturn_t imx_rtsint(int irq, void *dev_id)
                .mapbase        = IMX_UART1_BASE, /* FIXME */
                .irq            = UART1_MINT_RX,
                .uartclk        = 16000000,
-               .fifosize       = 8,
+               .fifosize       = 32,
                .flags          = UPF_BOOT_AUTOCONF,
                .ops            = &imx_pops,
                .line           = 0,
                .mapbase        = IMX_UART2_BASE, /* FIXME */
                .irq            = UART2_MINT_RX,
                .uartclk        = 16000000,
-               .fifosize       = 8,
+               .fifosize       = 32,
                .flags          = UPF_BOOT_AUTOCONF,
                .ops            = &imx_pops,
                .line           = 1,