On the ARM virt machine, there is currently no way to programmatically discover the frequency of the UART reference clock solely through the use of UEFI/ACPI (without the DTB). The SPCR table can include this information as of revision 4, but is currently at revision 2.
Bump the revision to 4, add the clock frequency of 24 MHz and complete the other new fields. Signed-off-by: Vadim Chichikalyuk <chichikal...@gmail.com> --- hw/arm/virt-acpi-build.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index b01fc4f8ef..f685668c5e 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -536,6 +536,7 @@ build_iort(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms) static void spcr_setup(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms) { + const char name[] = "."; AcpiSpcrData serial = { .interface_type = 3, /* ARM PL011 UART */ .base_addr.id = AML_AS_SYSTEM_MEMORY, @@ -559,13 +560,14 @@ spcr_setup(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms) .pci_function = 0, .pci_flags = 0, .pci_segment = 0, + .uart_clk_freq = 24000000, + .precise_baudrate = 0, + .namespace_string_length = sizeof(name), + .namespace_string_offset = 88, }; - /* - * Passing NULL as the SPCR Table for Revision 2 doesn't support - * NameSpaceString. - */ - build_spcr(table_data, linker, &serial, 2, vms->oem_id, vms->oem_table_id, - NULL); + + build_spcr(table_data, linker, &serial, 4, vms->oem_id, vms->oem_table_id, + name); } /* -- 2.39.5 (Apple Git-154)