Re: 2.1.2[89] serial UART problems again?

Theodore Y. Ts'o (tytso@MIT.EDU)
Tue, 11 Mar 1997 13:39:48 -0500


Date: Tue, 11 Mar 1997 08:29:37 -0800
From: "Brandon M. Browning" <brandon@powertie.org>

I skipped over 2.1.28 because PPP failed to work for me; I compiled
2.1.29 last night and ran it this morning. It had the same problem
2.1.28 had. I remembered the old thread about someone (I forgot who)
putting in UART detection code that broke a lot of machines (including
mine). It seems to be back, rearing it's ugly head:

ttyS00 at 0x03f8 (irq = 4) is a TI16750 <---

When in fact, it _should_ read (for me at least):

tty00 at 0x03f8 (irq = 4) is a 16550A <---

UART detection code is hard, because a lot of manufacturers who clone the
16650A don't do a competent job at it. In a genuine National
Semiconductor 16550A, but 5 of the IIR is a "must be zero", and your
cheap clone is violating this.

Sigh.... I will try to put in a more selective test. The problem of
course is that this may break somebody else's non-standard UART....

In drivers/char/serial.c, try removing the following line:

if (scratch == 7) {
serial_outp(info, UART_LCR, 0);
--> serial_outp(info, UART_FCR, UART_FCR_ENABLE_FIFO); <-- remove
scratch = serial_in(info, UART_IIR) >> 5;
if (scratch == 6)
state->type = PORT_16750
}

Please let me know if this solves your problem.....

- Ted