From: Alexandru Elisei <alexandru.elisei@arm.com>
To: Colton Lewis <coltonlewis@google.com>
Cc: Andrew Jones <andrew.jones@linux.dev>,
Eric Auger <eric.auger@redhat.com>, Marc Zyngier <maz@kernel.org>,
Joey Gouly <joey.gouly@arm.com>,
kvm@vger.kernel.org, kvmarm@lists.linux.dev
Subject: Re: [kvm-unit-tests PATCH] arm: io: Set is_pl011_uart flag in ACPI initialization
Date: Thu, 18 Jun 2026 17:16:41 +0100 [thread overview]
Message-ID: <ajQZ6aKPnybVueJC@raptor> (raw)
In-Reply-To: <20260513211624.2416284-1-coltonlewis@google.com>
Hi,
On Wed, May 13, 2026 at 09:16:24PM +0000, Colton Lewis wrote:
> When booting via ACPI on ARM64, the SPCR table is parsed to initialize
> the console UART. However, the code was neglecting to set the
> is_pl011_uart flag. This caused __getchar() to fall back to treating
> the UART as a 16550A device, which fails on systems with a PL011.
>
> Tests that wait for serial input (like its-migration) would hang
> indefinitely because __getchar() would always return -1.
>
> Update uart0_init_acpi() to inspect the SPCR interface_type and set
> is_pl011_uart accordingly. Also define macros for the first four SPCR
> interface types in lib/acpi.h based on the Microsoft specification.
>
> Link: https://learn.microsoft.com/en-us/windows-hardware/drivers/bringup/acpi-debug-port-table#table-3-debug-port-types-and-subtypes
> Assisted-by: Gemini:gemini-3.1-pro
> Signed-off-by: Colton Lewis <coltonlewis@google.com>
> ---
> lib/acpi.h | 6 ++++++
> lib/arm/io.c | 3 +++
> 2 files changed, 9 insertions(+)
>
> diff --git a/lib/acpi.h b/lib/acpi.h
> index 66e3062d..29b3edd5 100644
> --- a/lib/acpi.h
> +++ b/lib/acpi.h
> @@ -251,6 +251,12 @@ enum acpi_madt_type {
> /* MADT Local APIC flags */
> #define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */
>
> +/* Values for interface_type field in struct spcr_descriptor */
> +#define ACPI_SPCR_INTERFACE_TYPE_16550 0x0000
> +#define ACPI_SPCR_INTERFACE_TYPE_16450 0x0001
> +#define ACPI_SPCR_INTERFACE_TYPE_16550_32BIT 0x0002
> +#define ACPI_SPCR_INTERFACE_TYPE_ARM_PL011 0x0003
We could also use the defines from the Linux source tree, from
include/acpi/actbl1.h (look below struct acpi_dbg2_device).
I got a bit confused about the value 2 above, because in the Debug Port
Table 2 (DBG2) from the link, that value is for a 'MAX311xE SPI UART'. Not
saying that it's not the same thing as a 32 bit 16550 uart (or that it
is!), just saying that the names don't appear to be matching.
> +
> struct spcr_descriptor {
> ACPI_TABLE_HEADER_DEF /* ACPI common table header */
> u8 interface_type; /* 0=full 16550, 1=subset of 16550 */
> diff --git a/lib/arm/io.c b/lib/arm/io.c
> index 836fa854..55102bd7 100644
> --- a/lib/arm/io.c
> +++ b/lib/arm/io.c
> @@ -81,6 +81,9 @@ static void uart0_init_acpi(void)
>
> assert_msg(spcr, "Unable to find ACPI SPCR");
> uart0_base = ioremap(spcr->serial_port.address, spcr->serial_port.bit_width);
> +
> + if (spcr->interface_type == ACPI_SPCR_INTERFACE_TYPE_ARM_PL011)
> + is_pl011_uart = true;
The patch makes sense to me. With or without the Linux define names:
Reviewed-by: Alexandru Elisei <alexandru.elisei@arm.com>
Thanks,
Alex
prev parent reply other threads:[~2026-06-18 16:16 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-13 21:16 [kvm-unit-tests PATCH] arm: io: Set is_pl011_uart flag in ACPI initialization Colton Lewis
2026-06-18 16:16 ` Alexandru Elisei [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ajQZ6aKPnybVueJC@raptor \
--to=alexandru.elisei@arm.com \
--cc=andrew.jones@linux.dev \
--cc=coltonlewis@google.com \
--cc=eric.auger@redhat.com \
--cc=joey.gouly@arm.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.linux.dev \
--cc=maz@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.