Hello, On Atmel SAMA5D2, when trying to configure a serial port for 3 Mbauds operation, I do not always get the requested baud rate. If the hardware flow control is disabled by software, the line works correctly. But if I set the crtscts option, the line does not work, and after checking the line I can observe that the signal is sent at 2.6 Mbauds. This is due to the code used to manage fractional baud rate divisor: the existing code prevents the fractional bits from being used if the line is not configured in normal mode. This case occurs when the hardware flow control or the RS485 mode is set. If I apply the following patch to drivers/tty/serial/atmel_serial.c, I get the required baudrate. 8<---------------------------------------------------------------- @@ -2204,14 +2204,13 * baudrate = selected clock / (8 * (2 - OVER) * (CD + FP / 8)) * Currently, OVER is always set to 0 so we get * baudrate = selected clock / (16 * (CD + FP / 8)) * then * 8 CD + FP = selected clock / (2 * baudrate) */ - if (atmel_port->has_frac_baudrate && - (mode & ATMEL_US_USMODE) == ATMEL_US_USMODE_NORMAL) { + if (atmel_port->has_frac_baudrate) { div = DIV_ROUND_CLOSEST(port->uartclk, baud * 2); cd = div >> 3; fp = div & ATMEL_US_FP_MASK; } else { cd = uart_get_divisor(port, baud); } 8<---------------------------------------------------------------- Unfortunately, I know that this will work on SAMA5D2, but this driver is used for many other Atmel chips. I do not know if the existing code is meant to respect a known limitation on other devices that use the same controller, or if it is just a bug. Ludovic, Nicolas, what is your opinion on that matter? Should I just propose this as a patch, or is it necessary to add a limitation for supported devices only ? Best regards, -- Romain Izard -- To unsubscribe from this list: send the line "unsubscribe linux-serial" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html