And while at it, unify it as clock frequency in HZ, to match the value in "struct grub_serial_config" and do the division by 16 in one common place.
This will simplify adding SPCR support. Signed-off-by: Benjamin Herrenschmidt <b...@kernel.crashing.org> --- grub-core/term/ns8250.c | 15 ++++++++------- include/grub/ns8250.h | 13 +++++++++++++ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/grub-core/term/ns8250.c b/grub-core/term/ns8250.c index 43b9b3719..9e0ebff5a 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..697637912 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 <grub/cpu/io.h> -- 2.34.1 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel