
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 hugo.villeneuve@lyrtech.com Signed-off-by: John Roberts john.roberts@pwav.com
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