public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3] serial/8250/8250_early: Prevent rounding error in uartclk
@ 2012-10-03 12:27 Alexey Brodkin
  2012-10-03 12:37 ` Alan Cox
  0 siblings, 1 reply; 4+ messages in thread
From: Alexey Brodkin @ 2012-10-03 12:27 UTC (permalink / raw)
  To: linux-serial, linux-kernel; +Cc: alan, gregkh, Vineet.Gupta1, Alexey Brodkin

Modify divisor to select the nearest baud rate divider rather than the
lowest. It minimizes baud rate errors especially on low UART clock
frequencies.

For example, if uartclk is 33000000 and baud is 115200 the ratio is
about 17.9 The current code selects 17 (5% error) but should select 18
(0.5% error).

This 5% error in baud rate leads to garbage on receiving end, while 0.5%
doesn't.

The issue showed up when using the stock 8250 driver for
Synopsys DW UART. This was on a FPGA with ~12MHz UART clock.
When we enabled early serial, we saw garbage which was narrowed down
to the rounding error.

So the bug had been latent and it only showed up with such low cock rates.

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
---
 drivers/tty/serial/8250/8250_early.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/tty/serial/8250/8250_early.c b/drivers/tty/serial/8250/8250_early.c
index eaafb98..843a150 100644
--- a/drivers/tty/serial/8250/8250_early.c
+++ b/drivers/tty/serial/8250/8250_early.c
@@ -140,7 +140,7 @@ static void __init init_port(struct early_serial8250_device *device)
 	serial_out(port, UART_FCR, 0);		/* no fifo */
 	serial_out(port, UART_MCR, 0x3);	/* DTR + RTS */
 
-	divisor = port->uartclk / (16 * device->baud);
+	divisor = DIV_ROUND_CLOSEST(port->uartclk, 16 * device->baud);
 	c = serial_in(port, UART_LCR);
 	serial_out(port, UART_LCR, c | UART_LCR_DLAB);
 	serial_out(port, UART_DLL, divisor & 0xff);
-- 
1.7.9.5


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

* Re: [PATCH v3] serial/8250/8250_early: Prevent rounding error in uartclk
  2012-10-03 12:27 [PATCH v3] serial/8250/8250_early: Prevent rounding error in uartclk Alexey Brodkin
@ 2012-10-03 12:37 ` Alan Cox
  2012-10-03 12:53   ` Alexey Brodkin
  0 siblings, 1 reply; 4+ messages in thread
From: Alan Cox @ 2012-10-03 12:37 UTC (permalink / raw)
  To: Alexey Brodkin; +Cc: linux-serial, linux-kernel, gregkh, Vineet.Gupta1

> So the bug had been latent and it only showed up with such low cock
> rates.

clock ?

Perhaps Greg can tweak the description as it goes in - otherwise all
fine with me

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

* Re: [PATCH v3] serial/8250/8250_early: Prevent rounding error in uartclk
  2012-10-03 12:37 ` Alan Cox
@ 2012-10-03 12:53   ` Alexey Brodkin
  2012-10-05 16:20     ` Greg KH
  0 siblings, 1 reply; 4+ messages in thread
From: Alexey Brodkin @ 2012-10-03 12:53 UTC (permalink / raw)
  To: Alan Cox
  Cc: Alexey Brodkin, linux-serial, linux-kernel, gregkh, Vineet.Gupta1

On 03.10.2012 16:37, Alan Cox wrote:
>> So the bug had been latent and it only showed up with such low cock
>> rates.
>
> clock ?
>
> Perhaps Greg can tweak the description as it goes in - otherwise all
> fine with me
>
Sorry for this.
Essentially I meant "clock".
May do another respin if needed.

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

* Re: [PATCH v3] serial/8250/8250_early: Prevent rounding error in uartclk
  2012-10-03 12:53   ` Alexey Brodkin
@ 2012-10-05 16:20     ` Greg KH
  0 siblings, 0 replies; 4+ messages in thread
From: Greg KH @ 2012-10-05 16:20 UTC (permalink / raw)
  To: Alexey Brodkin; +Cc: Alan Cox, linux-serial, linux-kernel, Vineet.Gupta1

On Wed, Oct 03, 2012 at 04:53:06PM +0400, Alexey Brodkin wrote:
> On 03.10.2012 16:37, Alan Cox wrote:
> >>So the bug had been latent and it only showed up with such low cock
> >>rates.
> >
> >clock ?
> >
> >Perhaps Greg can tweak the description as it goes in - otherwise all
> >fine with me
> >
> Sorry for this.
> Essentially I meant "clock".
> May do another respin if needed.

Don't worry, I can edit it :)

greg k-h

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

end of thread, other threads:[~2012-10-05 16:21 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-03 12:27 [PATCH v3] serial/8250/8250_early: Prevent rounding error in uartclk Alexey Brodkin
2012-10-03 12:37 ` Alan Cox
2012-10-03 12:53   ` Alexey Brodkin
2012-10-05 16:20     ` Greg KH

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox