From: Benjamin Herrenschmidt Date: Fri, 23 Dec 2022 01:47:55 +0000 (+1100) Subject: term/ns8250: Move base clock definition to a header X-Git-Tag: grub-2.12-rc1~173 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ee48f6c1ba7b86f1de125e2074b5a68b137eda3a;p=thirdparty%2Fgrub.git term/ns8250: Move base clock definition to a header And while at it, unify it as clock frequency in Hz, to match the value in grub_serial_config struct and do the division by 16 in one common place. This will simplify adding SPCR support. Signed-off-by: Benjamin Herrenschmidt Reviewed-by: Daniel Kiper --- diff --git a/grub-core/term/ns8250.c b/grub-core/term/ns8250.c index 0d3d08804..abd81de2b 100644 --- a/grub-core/term/ns8250.c +++ b/grub-core/term/ns8250.c @@ -37,12 +37,6 @@ static const grub_port_t serial_hw_io_addr[] = GRUB_MACHINE_SERIAL_PORTS; static int dead_ports = 0; -#ifdef GRUB_MACHINE_MIPS_LOONGSON -#define DEFAULT_BASE_CLOCK (2 * 115200) -#else -#define DEFAULT_BASE_CLOCK 115200 -#endif - static grub_uint8_t ns8250_reg_read (struct grub_serial_port *port, grub_addr_t reg) { @@ -71,7 +65,14 @@ serial_get_divisor (const struct grub_serial_port *port __attribute__ ((unused)) grub_uint32_t divisor; grub_uint32_t actual_speed, error; - base_clock = config->base_clock ? (config->base_clock >> 4) : DEFAULT_BASE_CLOCK; + /* Get the UART input clock frequency. */ + base_clock = config->base_clock ? config->base_clock : UART_DEFAULT_BASE_CLOCK; + + /* + * The UART uses 16 times oversampling for the BRG, so adjust the value + * accordingly to calculate the divisor. + */ + base_clock >>= 4; divisor = (base_clock + (config->speed / 2)) / config->speed; if (config->speed == 0) diff --git a/include/grub/ns8250.h b/include/grub/ns8250.h index 7947ba9c9..556c0fa60 100644 --- a/include/grub/ns8250.h +++ b/include/grub/ns8250.h @@ -70,6 +70,19 @@ /* Turn on DTR, RTS, and OUT2. */ #define UART_ENABLE_OUT2 0x08 +/* + * Default clock input of the UART (feeds the baud rate generator). + * + * The standard value here is 1.8432 MHz, which corresponds to + * 115200 bauds * 16 (16 times oversampling). + * + */ +#ifdef GRUB_MACHINE_MIPS_LOONGSON +#define UART_DEFAULT_BASE_CLOCK ((2 * 115200) << 4) +#else +#define UART_DEFAULT_BASE_CLOCK (115200 << 4) +#endif + #ifndef ASM_FILE #include