linux-serial.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Fractional divider on the Atmel USART controller
@ 2017-02-06 11:56 Romain Izard
  2017-02-06 13:42 ` Ludovic Desroches
  2017-02-06 13:47 ` Richard Genoud
  0 siblings, 2 replies; 8+ messages in thread
From: Romain Izard @ 2017-02-06 11:56 UTC (permalink / raw)
  To: linux-arm-kernel, linux-serial, LKML, Ludovic Desroches,
	Nicolas Ferre
  Cc: Richard Genoud

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

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2017-02-09 13:33 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-02-06 11:56 Fractional divider on the Atmel USART controller Romain Izard
2017-02-06 13:42 ` Ludovic Desroches
2017-02-06 14:58   ` Richard Genoud
2017-02-06 15:37     ` Ludovic Desroches
2017-02-09 13:33       ` Ludovic Desroches
2017-02-06 15:14   ` Romain Izard
2017-02-06 15:30     ` Romain Izard
2017-02-06 13:47 ` Richard Genoud

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).