Re: serial flow control appears broken

Lee Howard
2007-07-27T20:49:40Z

Paul Fulghum wrote:

> Tilman Schmidt wrote:
>
>> Could this be related?
>>
>> http://lkml.org/lkml/2007/7/18/245
>>
>> Quote:
>> "I've recently found (using 2.6.21.4) that configuring a serial ports
>> (ST16654) which use the 8250 driver using setserial results in the
>> UART's FIFOs being disabled (unless you specify autoconfig)."
>
>
> That would make sense.
>
> Lee's error is a hardware FIFO overrun which could occur
> if the FIFO is being disabled as described in your
> link (by trying to set the uart type with setserial).

I'm not using setserial on this port, myself. If something in init is
calling on setserial then I don't know about it.

That said, tests on the serial port from within the application show
that xmit_fifo_size is set to 16 as it should be.

I wrote up a little test app:

struct serial_struct serial;
ioctl(modemFd, TIOCGSERIAL, &serial);
printf(" type: %d\n", serial.type);
printf(" line: %d\n", serial.line);
printf(" line: %u\n", serial.port);
printf(" irq: %d\n", serial.irq);
printf(" flags: %d\n", serial.flags);
printf(" xmit_fifo_size: %d\n", serial.xmit_fifo_size);
printf(" custom_divisor: %d\n", serial.custom_divisor);
printf(" baud_base: %d\n", serial.baud_base);
printf(" close_delay: %u\n", serial.close_delay);
printf(" io_type: 0x%X\n", serial.io_type);
printf("reserved_char[0]: 0x%X\n", serial.reserved_char[0]);
printf(" hub6: %d\n", serial.hub6);
printf(" closing_wait: %u\n", serial.closing_wait);
printf(" closing_wait2: %u\n", serial.closing_wait2);
printf(" iomem_reg_shift: %u\n", serial.iomem_reg_shift);
printf(" port_high: %u\n", serial.port_high);
printf(" reserved[0]: %d\n", serial.reserved[0]);

Here's the output:

type: 4
line: 1
line: 760
irq: 3
flags: 1358954688
xmit_fifo_size: 16
custom_divisor: 0
baud_base: 115200
close_delay: 500
io_type: 0x0
reserved_char[0]: 0x0
hub6: 0
closing_wait: 30000
closing_wait2: 0
iomem_reg_shift: 0
port_high: 0
reserved[0]: 0

Thanks,

Lee.