summaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
authorKyösti Mälkki <kyosti.malkki@gmail.com>2014-02-17 19:37:52 +0200
committerKyösti Mälkki <kyosti.malkki@gmail.com>2014-03-04 15:22:08 +0100
commit3ee1668ab4fbf75b256ac8eef4273b1ea445c998 (patch)
tree59f35a43b85c5da6a0d9d38aba7f391971cbc980 /src/include
parentc76b3d6cca4a6135e5a7d7f3c2d9aa5128ef23f0 (diff)
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>
Diffstat (limited to 'src/include')
-rw-r--r--src/include/uart.h17
-rw-r--r--src/include/uart8250.h4
2 files changed, 17 insertions, 4 deletions
diff --git a/src/include/uart.h b/src/include/uart.h
index b520e09bdb..997fe185ce 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);
diff --git a/src/include/uart8250.h b/src/include/uart8250.h
index a48c948138..112cd44945 100644
--- a/src/include/uart8250.h
+++ b/src/include/uart8250.h
@@ -105,10 +105,6 @@
#define UART_SCR 0x07
#define UART_SPR 0x07
-#if ((115200 % CONFIG_TTYS0_BAUD) != 0)
-#error Bad ttyS0 baud rate
-#endif
-
#if CONFIG_CONSOLE_SERIAL8250
unsigned char uart8250_rx_byte(unsigned base_port);
int uart8250_can_rx_byte(unsigned base_port);