I've not tracked down just _why_ but the following patch makes the
EVM console UART behave a lot better.

The first part changes the rx irq threshold to one byte vs 8, and
the second (seemingly more important) stops probing for a bug that
doesn't appear to exist here.

With this patch I've finally seen the 2.6.18 code come up "correctly"
more than once ... without dropping TX characters once userspace
starts opening/closing the serial console, without needing to be
kicked several times during boot by sending carriage returns, and
without getting into modes where typed characters get discarded.
(On "reboot" the TX character droppage comes back though ...)

One clue seems to be that the userspace open/close goofs things up
big time ... as if working uart settings get mangled that way.
Maybe with that clue, and this patch, and some time, someone else
can come up with a Real Fix (tm) to those problems.

- Dave


--- a/drivers/serial/8250.c
+++ b/drivers/serial/8250.c
@@ -173,7 +174,8 @@ static const struct serial8250_config ua
                .name           = "16550A",
                .fifo_size      = 16,
                .tx_loadsz      = 16,
-               .fcr            = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
+               .fcr            = UART_FCR_ENABLE_FIFO,
+               //.fcr          = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
                .flags          = UART_CAP_FIFO,
        },
        [PORT_CIRRUS] = {
@@ -1646,25 +1648,6 @@ static int serial8250_startup(struct uar
 
        serial8250_set_mctrl(&up->port, up->port.mctrl);
 
-       /*
-        * Do a quick test to see if we receive an
-        * interrupt when we enable the TX irq.
-        */
-       serial_outp(up, UART_IER, UART_IER_THRI);
-       lsr = serial_in(up, UART_LSR);
-       iir = serial_in(up, UART_IIR);
-       serial_outp(up, UART_IER, 0);
-
-       if (lsr & UART_LSR_TEMT && iir & UART_IIR_NO_INT) {
-               if (!(up->bugs & UART_BUG_TXEN)) {
-                       up->bugs |= UART_BUG_TXEN;
-                       pr_debug("ttyS%d - enabling bad tx status 
workarounds\n",
-                                port->line);
-               }
-       } else {
-               up->bugs &= ~UART_BUG_TXEN;
-       }
-
        spin_unlock_irqrestore(&up->port.lock, flags);
 
        /*
_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to