[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 4/8] ns8250: Move base clock definition to a header
From: |
Benjamin Herrenschmidt |
Subject: |
[PATCH v2 4/8] ns8250: Move base clock definition to a header |
Date: |
Thu, 22 Dec 2022 17:12:53 +1100 |
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 <benh@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
- [PATCH v2 0/8] serial: Add MMIO & SPCR support, Benjamin Herrenschmidt, 2022/12/22
- [PATCH v2 1/8] acpi: Export a generic grub_acpi_find_table, Benjamin Herrenschmidt, 2022/12/22
- [PATCH v2 2/8] acpi: Add SPCR and generic address definitions, Benjamin Herrenschmidt, 2022/12/22
- [PATCH v2 3/8] ns8250: Add base support for MMIO UARTs, Benjamin Herrenschmidt, 2022/12/22
- [PATCH v2 5/8] ns8250: Add configuration parameter when adding ports, Benjamin Herrenschmidt, 2022/12/22
- [PATCH v2 4/8] ns8250: Move base clock definition to a header,
Benjamin Herrenschmidt <=
- [PATCH v2 8/8] serial: Add ability to specify MMIO ports via 'serial', Benjamin Herrenschmidt, 2022/12/22
- [PATCH v2 6/8] ns8250: Use ACPI SPCR table when available to configure serial, Benjamin Herrenschmidt, 2022/12/22
- [PATCH v2 7/8] ns8250: Support more MMIO access sizes, Benjamin Herrenschmidt, 2022/12/22