From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jerry Van Baren Date: Thu, 10 Jul 2008 19:54:38 -0400 Subject: [U-Boot-Users] [PATCH V2] Round the serial port clock divisor value returned by calc_divisor() In-Reply-To: <20080710223916.6A37A248FE@gemini.denx.de> References: <20080710223916.6A37A248FE@gemini.denx.de> Message-ID: <4876A13E.5010108@gmail.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Wolfgang Denk wrote: > In message <1215543298-26921-1-git-send-email-hugo.villeneuve@lyrtech.com> you wrote: >> Round the serial port clock divisor value returned by >> calc_divisor(). >> >> Signed-off-by: Hugo Villeneuve >> Signed-off-by: John Roberts >> >> --- >> >> Rounding is important, especially when using high baud rates >> values like 115200bps. When using the non-rounded value, some >> boards will work and some won't. >> >> drivers/serial/serial.c | 6 +++++- >> 1 files changed, 5 insertions(+), 1 deletions(-) >> >> diff --git a/drivers/serial/serial.c b/drivers/serial/serial.c >> index 76425d8..1192f07 100644 >> --- a/drivers/serial/serial.c >> +++ b/drivers/serial/serial.c >> @@ -144,8 +144,12 @@ static int calc_divisor (NS16550_t port) >> #else >> #define MODE_X_DIV 16 >> #endif >> - return (CFG_NS16550_CLK / MODE_X_DIV / gd->baudrate); >> >> + /* Compute divisor value. Normally, we should simply return: >> + * CFG_NS16550_CLK) / MODE_X_DIV / gd->baudrate >> + * but we need to round that value by adding 0.5 or 8/16. >> + * Rounding is especially important at high baud rates. */ >> + return (((16 * CFG_NS16550_CLK) / MODE_X_DIV / gd->baudrate) + 8) / 16; >> } > > Your patch causes problems with some boards: > > Configuring for SBC8540 board... > serial.c: In function 'calc_divisor': > serial.c:153: warning: integer overflow in expression > serial.c:153: warning: integer overflow in expression > > Configuring for sbc8548 board... > serial.c: In function 'calc_divisor': > serial.c:153: warning: integer overflow in expression > serial.c:153: warning: integer overflow in expression > > > Do you have a quick fix, or shall I back out the patch? > > Best regards, > > Wolfgang Denk The formula I proposed previously in this thread compiles OK. I cannot verify it is correct on real hardware, however. My apologies for providing the patch as an attachment. I need to add the external editor plugin so I can use tbird for proper inline patches. Best regards, gvb -------------- next part -------------- A non-text attachment was scrubbed... Name: 0001-Round-the-serial-port-clock-divisor-value-returned-b.patch Type: text/x-patch Size: 991 bytes Desc: not available Url : http://lists.denx.de/pipermail/u-boot/attachments/20080710/89e0d89a/attachment.bin