* [PATCH v3 0/2] ACPI: SPCR: Support UART clock frequency field
@ 2026-06-15 0:40 Markus Probst
2026-06-15 0:40 ` [PATCH v3 1/2] serial: earlycon: add uart_clk_freq parameter Markus Probst
2026-06-15 0:40 ` [PATCH v3 2/2] ACPI: SPCR: Support UART clock frequency field Markus Probst
0 siblings, 2 replies; 8+ messages in thread
From: Markus Probst @ 2026-06-15 0:40 UTC (permalink / raw)
To: Greg Kroah-Hartman, Jiri Slaby, Rafael J. Wysocki, Len Brown
Cc: linux-kernel, linux-serial, linux-acpi, Markus Probst
Support the uart clock frequency in the SPCR table.
See the commit messages for details.
Signed-off-by: Markus Probst <markus.probst@posteo.de>
---
Changes in v3:
- add separate function for earlycon with uartclk
- Link to v2: https://patch.msgid.link/20260525-acpi_spcr-v2-0-c042089d73ca@posteo.de
Changes in v2:
- fix uart_clk_freq possibly being interpreted as parity/bits/flow
- Link to v1: https://patch.msgid.link/20260505-acpi_spcr-v1-1-fd4bc6f4eb53@posteo.de
---
Markus Probst (2):
serial: earlycon: add uart_clk_freq parameter
ACPI: SPCR: Support UART clock frequency field
drivers/acpi/spcr.c | 3 ++-
drivers/tty/serial/earlycon.c | 17 ++++++++++++-----
include/linux/serial_core.h | 11 +++++++++--
3 files changed, 23 insertions(+), 8 deletions(-)
---
base-commit: b3f94b2b3f3e51ab880a51fc6510e1dafba654ed
change-id: 20260430-acpi_spcr-61902fd923f2
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v3 1/2] serial: earlycon: add uart_clk_freq parameter
2026-06-15 0:40 [PATCH v3 0/2] ACPI: SPCR: Support UART clock frequency field Markus Probst
@ 2026-06-15 0:40 ` Markus Probst
2026-07-10 12:36 ` Greg Kroah-Hartman
2026-06-15 0:40 ` [PATCH v3 2/2] ACPI: SPCR: Support UART clock frequency field Markus Probst
1 sibling, 1 reply; 8+ messages in thread
From: Markus Probst @ 2026-06-15 0:40 UTC (permalink / raw)
To: Greg Kroah-Hartman, Jiri Slaby, Rafael J. Wysocki, Len Brown
Cc: linux-kernel, linux-serial, linux-acpi, Markus Probst
Add function `setup_earlycon_with_uartclk`. This allows the
options string to be reused with `add_preferred_console`, while still
allowing to set the uart clock frequency. This will be used in the
following commit ("ACPI: SPCR: Support UART clock frequency field").
No logical change intended.
Signed-off-by: Markus Probst <markus.probst@posteo.de>
---
drivers/tty/serial/earlycon.c | 17 ++++++++++++-----
include/linux/serial_core.h | 11 +++++++++--
2 files changed, 21 insertions(+), 7 deletions(-)
diff --git a/drivers/tty/serial/earlycon.c b/drivers/tty/serial/earlycon.c
index ab9af37f6cda..5a20fe9e3fb6 100644
--- a/drivers/tty/serial/earlycon.c
+++ b/drivers/tty/serial/earlycon.c
@@ -135,11 +135,14 @@ static int __init parse_options(struct earlycon_device *device, char *options)
return 0;
}
-static int __init register_earlycon(char *buf, const struct earlycon_id *match)
+static int __init register_earlycon(char *buf, unsigned int uart_clk_freq,
+ const struct earlycon_id *match)
{
int err;
struct uart_port *port = &early_console_dev.port;
+ port->uartclk = uart_clk_freq;
+
/* On parsing error, pass the options buf to the setup function */
if (buf && !parse_options(&early_console_dev, buf))
buf = NULL;
@@ -163,8 +166,9 @@ static int __init register_earlycon(char *buf, const struct earlycon_id *match)
}
/**
- * setup_earlycon - match and register earlycon console
- * @buf: earlycon param string
+ * setup_earlycon_with_uartclk - match and register earlycon console
+ * @buf: earlycon param string
+ * @uart_clk_freq: uart clock frequency in Hz or 0 for BASE_BAUD*16
*
* Registers the earlycon console matching the earlycon specified
* in the param string @buf. Acceptable param strings are of the form
@@ -177,10 +181,13 @@ static int __init register_earlycon(char *buf, const struct earlycon_id *match)
* <options> string in the 'options' parameter; all other forms set
* the parameter to NULL.
*
+ * If the uart clock frequency is specified in the 'options' parameter,
+ * the value of the param @uart_clk_freq will be ignored.
+ *
* Returns 0 if an attempt to register the earlycon was made,
* otherwise negative error code
*/
-int __init setup_earlycon(char *buf)
+int __init setup_earlycon_with_uartclk(char *buf, unsigned int uart_clk_freq)
{
const struct earlycon_id *match;
bool empty_compatible = true;
@@ -209,7 +216,7 @@ int __init setup_earlycon(char *buf)
} else
buf = NULL;
- return register_earlycon(buf, match);
+ return register_earlycon(buf, uart_clk_freq, match);
}
if (empty_compatible) {
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h
index 110ad4e2aef9..19d8181c9005 100644
--- a/include/linux/serial_core.h
+++ b/include/linux/serial_core.h
@@ -1097,11 +1097,18 @@ int of_setup_earlycon(const struct earlycon_id *match, unsigned long node,
#ifdef CONFIG_SERIAL_EARLYCON
extern bool earlycon_acpi_spcr_enable __initdata;
-int setup_earlycon(char *buf);
+int setup_earlycon_with_uartclk(char *buf, unsigned int uart_clk_freq);
#else
static const bool earlycon_acpi_spcr_enable EARLYCON_USED_OR_UNUSED;
-static inline int setup_earlycon(char *buf) { return 0; }
+static inline int setup_earlycon_with_uartclk(char *buf, unsigned int uart_clk_freq)
+{
+ return 0;
+}
#endif
+static inline int setup_earlycon(char *buf)
+{
+ return setup_earlycon_with_uartclk(buf, 0);
+}
/* Variant of uart_console_registered() when the console_list_lock is held. */
static inline bool uart_console_registered_locked(struct uart_port *port)
--
2.53.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v3 2/2] ACPI: SPCR: Support UART clock frequency field
2026-06-15 0:40 [PATCH v3 0/2] ACPI: SPCR: Support UART clock frequency field Markus Probst
2026-06-15 0:40 ` [PATCH v3 1/2] serial: earlycon: add uart_clk_freq parameter Markus Probst
@ 2026-06-15 0:40 ` Markus Probst
2026-07-10 12:34 ` Greg Kroah-Hartman
1 sibling, 1 reply; 8+ messages in thread
From: Markus Probst @ 2026-06-15 0:40 UTC (permalink / raw)
To: Greg Kroah-Hartman, Jiri Slaby, Rafael J. Wysocki, Len Brown
Cc: linux-kernel, linux-serial, linux-acpi, Markus Probst
The Microsoft Serial Port Console Redirection (SPCR) specification
revision 1.08 comprises additional field: UART Clock Frequency [1].
It contains a non-zero value indicating the UART clock frequency in Hz.
Link: https://learn.microsoft.com/en-us/windows-hardware/drivers/serports/serial-port-console-redirection-table [1]
Signed-off-by: Markus Probst <markus.probst@posteo.de>
---
drivers/acpi/spcr.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/acpi/spcr.c b/drivers/acpi/spcr.c
index 73cb933fdc89..c79c809f49d4 100644
--- a/drivers/acpi/spcr.c
+++ b/drivers/acpi/spcr.c
@@ -228,7 +228,8 @@ int __init acpi_parse_spcr(bool enable_earlycon, bool enable_console)
pr_info("console: %s\n", opts);
if (enable_earlycon)
- setup_earlycon(opts);
+ setup_earlycon_with_uartclk(opts,
+ table->header.revision >= 3 ? table->uart_clk_freq : 0);
if (enable_console)
err = add_preferred_console(uart, 0, opts + strlen(uart) + 1);
--
2.53.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v3 2/2] ACPI: SPCR: Support UART clock frequency field
2026-06-15 0:40 ` [PATCH v3 2/2] ACPI: SPCR: Support UART clock frequency field Markus Probst
@ 2026-07-10 12:34 ` Greg Kroah-Hartman
0 siblings, 0 replies; 8+ messages in thread
From: Greg Kroah-Hartman @ 2026-07-10 12:34 UTC (permalink / raw)
To: Markus Probst
Cc: Jiri Slaby, Rafael J. Wysocki, Len Brown, linux-kernel,
linux-serial, linux-acpi
On Mon, Jun 15, 2026 at 12:40:22AM +0000, Markus Probst wrote:
> The Microsoft Serial Port Console Redirection (SPCR) specification
> revision 1.08 comprises additional field: UART Clock Frequency [1].
>
> It contains a non-zero value indicating the UART clock frequency in Hz.
Ok, but then what are we going to do with this? Please make this a lot
more descriptive, I have no idea what this is supposed to be doing at
all.
>
> Link: https://learn.microsoft.com/en-us/windows-hardware/drivers/serports/serial-port-console-redirection-table [1]
> Signed-off-by: Markus Probst <markus.probst@posteo.de>
> ---
> drivers/acpi/spcr.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/acpi/spcr.c b/drivers/acpi/spcr.c
> index 73cb933fdc89..c79c809f49d4 100644
> --- a/drivers/acpi/spcr.c
> +++ b/drivers/acpi/spcr.c
> @@ -228,7 +228,8 @@ int __init acpi_parse_spcr(bool enable_earlycon, bool enable_console)
> pr_info("console: %s\n", opts);
>
> if (enable_earlycon)
> - setup_earlycon(opts);
> + setup_earlycon_with_uartclk(opts,
> + table->header.revision >= 3 ? table->uart_clk_freq : 0);
Why the magic number 3?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 1/2] serial: earlycon: add uart_clk_freq parameter
2026-06-15 0:40 ` [PATCH v3 1/2] serial: earlycon: add uart_clk_freq parameter Markus Probst
@ 2026-07-10 12:36 ` Greg Kroah-Hartman
2026-07-12 16:36 ` Markus Probst
0 siblings, 1 reply; 8+ messages in thread
From: Greg Kroah-Hartman @ 2026-07-10 12:36 UTC (permalink / raw)
To: Markus Probst
Cc: Jiri Slaby, Rafael J. Wysocki, Len Brown, linux-kernel,
linux-serial, linux-acpi
On Mon, Jun 15, 2026 at 12:40:21AM +0000, Markus Probst wrote:
> Add function `setup_earlycon_with_uartclk`. This allows the
> options string to be reused with `add_preferred_console`, while still
> allowing to set the uart clock frequency. This will be used in the
> following commit ("ACPI: SPCR: Support UART clock frequency field").
>
> No logical change intended.
>
> Signed-off-by: Markus Probst <markus.probst@posteo.de>
> ---
> drivers/tty/serial/earlycon.c | 17 ++++++++++++-----
> include/linux/serial_core.h | 11 +++++++++--
> 2 files changed, 21 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/tty/serial/earlycon.c b/drivers/tty/serial/earlycon.c
> index ab9af37f6cda..5a20fe9e3fb6 100644
> --- a/drivers/tty/serial/earlycon.c
> +++ b/drivers/tty/serial/earlycon.c
> @@ -135,11 +135,14 @@ static int __init parse_options(struct earlycon_device *device, char *options)
> return 0;
> }
>
> -static int __init register_earlycon(char *buf, const struct earlycon_id *match)
> +static int __init register_earlycon(char *buf, unsigned int uart_clk_freq,
> + const struct earlycon_id *match)
> {
> int err;
> struct uart_port *port = &early_console_dev.port;
>
> + port->uartclk = uart_clk_freq;
This looks like a logical change, the code today does not do that
anywhere, right?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 1/2] serial: earlycon: add uart_clk_freq parameter
2026-07-10 12:36 ` Greg Kroah-Hartman
@ 2026-07-12 16:36 ` Markus Probst
2026-07-12 16:40 ` Greg Kroah-Hartman
0 siblings, 1 reply; 8+ messages in thread
From: Markus Probst @ 2026-07-12 16:36 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: Jiri Slaby, Rafael J. Wysocki, Len Brown, linux-kernel,
linux-serial, linux-acpi
[-- Attachment #1: Type: text/plain, Size: 1836 bytes --]
On Fri, 2026-07-10 at 14:36 +0200, Greg Kroah-Hartman wrote:
> On Mon, Jun 15, 2026 at 12:40:21AM +0000, Markus Probst wrote:
> > Add function `setup_earlycon_with_uartclk`. This allows the
> > options string to be reused with `add_preferred_console`, while still
> > allowing to set the uart clock frequency. This will be used in the
> > following commit ("ACPI: SPCR: Support UART clock frequency field").
> >
> > No logical change intended.
> >
> > Signed-off-by: Markus Probst <markus.probst@posteo.de>
> > ---
> > drivers/tty/serial/earlycon.c | 17 ++++++++++++-----
> > include/linux/serial_core.h | 11 +++++++++--
> > 2 files changed, 21 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/tty/serial/earlycon.c b/drivers/tty/serial/earlycon.c
> > index ab9af37f6cda..5a20fe9e3fb6 100644
> > --- a/drivers/tty/serial/earlycon.c
> > +++ b/drivers/tty/serial/earlycon.c
> > @@ -135,11 +135,14 @@ static int __init parse_options(struct earlycon_device *device, char *options)
> > return 0;
> > }
> >
> > -static int __init register_earlycon(char *buf, const struct earlycon_id *match)
> > +static int __init register_earlycon(char *buf, unsigned int uart_clk_freq,
> > + const struct earlycon_id *match)
> > {
> > int err;
> > struct uart_port *port = &early_console_dev.port;
> >
> > + port->uartclk = uart_clk_freq;
>
> This looks like a logical change, the code today does not do that
> anywhere, right?
`register_earlycon` only gets executed once.
Thus early_console_dev.port->uartclk is always 0.
Since all current callers in this patch series use `setup_earlycon`,
the uart_clk_freq parameter is also always 0.
So in case of behaviour/logic, this line does nothing without the 2.
patch.
Thanks
- Markus Probst
>
> thanks,
>
> greg k-h
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 870 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 1/2] serial: earlycon: add uart_clk_freq parameter
2026-07-12 16:36 ` Markus Probst
@ 2026-07-12 16:40 ` Greg Kroah-Hartman
2026-07-12 16:46 ` Markus Probst
0 siblings, 1 reply; 8+ messages in thread
From: Greg Kroah-Hartman @ 2026-07-12 16:40 UTC (permalink / raw)
To: Markus Probst
Cc: Jiri Slaby, Rafael J. Wysocki, Len Brown, linux-kernel,
linux-serial, linux-acpi
On Sun, Jul 12, 2026 at 04:36:17PM +0000, Markus Probst wrote:
> On Fri, 2026-07-10 at 14:36 +0200, Greg Kroah-Hartman wrote:
> > On Mon, Jun 15, 2026 at 12:40:21AM +0000, Markus Probst wrote:
> > > Add function `setup_earlycon_with_uartclk`. This allows the
> > > options string to be reused with `add_preferred_console`, while still
> > > allowing to set the uart clock frequency. This will be used in the
> > > following commit ("ACPI: SPCR: Support UART clock frequency field").
> > >
> > > No logical change intended.
> > >
> > > Signed-off-by: Markus Probst <markus.probst@posteo.de>
> > > ---
> > > drivers/tty/serial/earlycon.c | 17 ++++++++++++-----
> > > include/linux/serial_core.h | 11 +++++++++--
> > > 2 files changed, 21 insertions(+), 7 deletions(-)
> > >
> > > diff --git a/drivers/tty/serial/earlycon.c b/drivers/tty/serial/earlycon.c
> > > index ab9af37f6cda..5a20fe9e3fb6 100644
> > > --- a/drivers/tty/serial/earlycon.c
> > > +++ b/drivers/tty/serial/earlycon.c
> > > @@ -135,11 +135,14 @@ static int __init parse_options(struct earlycon_device *device, char *options)
> > > return 0;
> > > }
> > >
> > > -static int __init register_earlycon(char *buf, const struct earlycon_id *match)
> > > +static int __init register_earlycon(char *buf, unsigned int uart_clk_freq,
> > > + const struct earlycon_id *match)
> > > {
> > > int err;
> > > struct uart_port *port = &early_console_dev.port;
> > >
> > > + port->uartclk = uart_clk_freq;
> >
> > This looks like a logical change, the code today does not do that
> > anywhere, right?
>
> `register_earlycon` only gets executed once.
> Thus early_console_dev.port->uartclk is always 0.
> Since all current callers in this patch series use `setup_earlycon`,
> the uart_clk_freq parameter is also always 0.
>
> So in case of behaviour/logic, this line does nothing without the 2.
> patch.
Then it belongs in the second patch, right?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 1/2] serial: earlycon: add uart_clk_freq parameter
2026-07-12 16:40 ` Greg Kroah-Hartman
@ 2026-07-12 16:46 ` Markus Probst
0 siblings, 0 replies; 8+ messages in thread
From: Markus Probst @ 2026-07-12 16:46 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: Jiri Slaby, Rafael J. Wysocki, Len Brown, linux-kernel,
linux-serial, linux-acpi
[-- Attachment #1: Type: text/plain, Size: 2430 bytes --]
On Sun, 2026-07-12 at 18:40 +0200, Greg Kroah-Hartman wrote:
> On Sun, Jul 12, 2026 at 04:36:17PM +0000, Markus Probst wrote:
> > On Fri, 2026-07-10 at 14:36 +0200, Greg Kroah-Hartman wrote:
> > > On Mon, Jun 15, 2026 at 12:40:21AM +0000, Markus Probst wrote:
> > > > Add function `setup_earlycon_with_uartclk`. This allows the
> > > > options string to be reused with `add_preferred_console`, while still
> > > > allowing to set the uart clock frequency. This will be used in the
> > > > following commit ("ACPI: SPCR: Support UART clock frequency field").
> > > >
> > > > No logical change intended.
> > > >
> > > > Signed-off-by: Markus Probst <markus.probst@posteo.de>
> > > > ---
> > > > drivers/tty/serial/earlycon.c | 17 ++++++++++++-----
> > > > include/linux/serial_core.h | 11 +++++++++--
> > > > 2 files changed, 21 insertions(+), 7 deletions(-)
> > > >
> > > > diff --git a/drivers/tty/serial/earlycon.c b/drivers/tty/serial/earlycon.c
> > > > index ab9af37f6cda..5a20fe9e3fb6 100644
> > > > --- a/drivers/tty/serial/earlycon.c
> > > > +++ b/drivers/tty/serial/earlycon.c
> > > > @@ -135,11 +135,14 @@ static int __init parse_options(struct earlycon_device *device, char *options)
> > > > return 0;
> > > > }
> > > >
> > > > -static int __init register_earlycon(char *buf, const struct earlycon_id *match)
> > > > +static int __init register_earlycon(char *buf, unsigned int uart_clk_freq,
> > > > + const struct earlycon_id *match)
> > > > {
> > > > int err;
> > > > struct uart_port *port = &early_console_dev.port;
> > > >
> > > > + port->uartclk = uart_clk_freq;
> > >
> > > This looks like a logical change, the code today does not do that
> > > anywhere, right?
> >
> > `register_earlycon` only gets executed once.
> > Thus early_console_dev.port->uartclk is always 0.
> > Since all current callers in this patch series use `setup_earlycon`,
> > the uart_clk_freq parameter is also always 0.
> >
> > So in case of behaviour/logic, this line does nothing without the 2.
> > patch.
>
> Then it belongs in the second patch, right?
No.
It does nothing, because the newly added function
`setup_earlycon_with_uartclk` isn't used yet (first caller in the
second patch).
Moving this line in the second patch, would make the
`setup_earlycon_with_uartclk` function obsolete.
Thanks
- Markus Probst
>
> thanks,
>
> greg k-h
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 870 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-07-12 16:46 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-15 0:40 [PATCH v3 0/2] ACPI: SPCR: Support UART clock frequency field Markus Probst
2026-06-15 0:40 ` [PATCH v3 1/2] serial: earlycon: add uart_clk_freq parameter Markus Probst
2026-07-10 12:36 ` Greg Kroah-Hartman
2026-07-12 16:36 ` Markus Probst
2026-07-12 16:40 ` Greg Kroah-Hartman
2026-07-12 16:46 ` Markus Probst
2026-06-15 0:40 ` [PATCH v3 2/2] ACPI: SPCR: Support UART clock frequency field Markus Probst
2026-07-10 12:34 ` Greg Kroah-Hartman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox