uart8250: Fix and unify baudrate divisor calculation

Divisor is a function of requested baudrate, platform-specific
reference clock and amount of oversampling done on the UART reference.
Calculate this parameter with divisor rounded to nearest integer.

When building without option_table or when there is no entry for
baud_rate, CONFIG_TTYS0_BAUD is used for default baudrate.

For OxPCIe use of 4 MHz for reference was arbitrary giving correct
divisor for 115200 but somewhat inaccurate for lower baudrates.
Actual hardware is 62500000 with 16 times oversampling.

FIXME: Field for baudrate in lb_tables is still incorrect.

Change-Id: I68539738469af780fadd3392263dd9b3d5964d2d
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: http://review.coreboot.org/5229
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
diff --git a/src/include/uart.h b/src/include/uart.h
index b520e09..997fe18 100644
--- a/src/include/uart.h
+++ b/src/include/uart.h
@@ -20,6 +20,23 @@
 #ifndef UART_H
 #define UART_H
 
+/* Return the clock frequency UART uses as reference clock for
+ * baudrate generator. */
+unsigned int uart_platform_refclk(void);
+
+/* Return the baudrate determined from option_table, or when that is
+ * not used, CONFIG_TTYS0_BAUD.
+ */
+unsigned int default_baudrate(void);
+
+/* Returns the divisor value for a given baudrate.
+ * The formula to satisfy is:
+ *    refclk / divisor = baudrate * oversample
+ */
+unsigned int uart_baudrate_divisor(unsigned int baudrate,
+	unsigned int refclk, unsigned int oversample);
+
+
 unsigned char uart_rx_byte(void);
 void uart_tx_byte(unsigned char data);
 void uart_tx_flush(void);