Re: Modem connection problems with Kernel 2.6.11-bk1 + bk2

From: Michael Berger
Date: Tue Mar 08 2005 - 15:49:41 EST


Michael Berger wrote:
>Dear LKML
>
>Since Kernel Release 2.6.11-bk1 + bk2 it is not possible to connect in >to the Internet via a modem connection.
>
>Following message is in my System Log:
>
>> Mar 6 19:02:08 Odin wvdial[3079]: stdin not read/write and $MODEM >not set Mar 6 19:02:08 Odin pppd[3032]: Connect script failed
>
>
>Kernel 2.6.11 works without any problems. Attached is my config file.
>
>Best regards,
>
>
>-- Michael

-- snip->

Dear LKML

Reverting attached patch fixes my serial modem connection problem.

Best regards,


-- Michael

diff -Nru a/drivers/serial/8250.c b/drivers/serial/8250.c
--- a/drivers/serial/8250.c 2005-02-28 08:05:18 -08:00
+++ b/drivers/serial/8250.c 2005-01-24 08:00:57 -08:00
@@ -642,6 +642,7 @@
static void autoconfig_16550a(struct uart_8250_port *up)
{
unsigned char status1, status2;
+ unsigned int iersave;

up->port.type = PORT_16550A;
up->capabilities |= UART_CAP_FIFO;
@@ -736,6 +737,40 @@
up->capabilities |= UART_CAP_AFE | UART_CAP_SLEEP;
return;
}
+
+ /*
+ * Try writing and reading the UART_IER_UUE bit (b6).
+ * If it works, this is probably one of the Xscale platform's
+ * internal UARTs.
+ * We're going to explicitly set the UUE bit to 0 before
+ * trying to write and read a 1 just to make sure it's not
+ * already a 1 and maybe locked there before we even start start.
+ */
+ iersave = serial_in(up, UART_IER);
+ serial_outp(up, UART_IER, iersave & ~UART_IER_UUE);
+ if (!(serial_in(up, UART_IER) & UART_IER_UUE)) {
+ /*
+ * OK it's in a known zero state, try writing and reading
+ * without disturbing the current state of the other bits.
+ */
+ serial_outp(up, UART_IER, iersave | UART_IER_UUE);
+ if (serial_in(up, UART_IER) & UART_IER_UUE) {
+ /*
+ * It's an Xscale.
+ * We'll leave the UART_IER_UUE bit set to 1 (enabled).
+ */
+ DEBUG_AUTOCONF("Xscale ");
+ up->port.type = PORT_XSCALE;
+ return;
+ }
+ } else {
+ /*
+ * If we got here we couldn't force the IER_UUE bit to 0.
+ * Log it and continue.
+ */
+ DEBUG_AUTOCONF("Couldn't force IER_UUE to 0 ");
+ }
+ serial_outp(up, UART_IER, iersave);
}

/*