mbox series

[v1,0/2] Upgrade ACPI SPCR table to support SPCR table version 4 format

Message ID 20240502051233.50749-1-jeeheng.sia@starfivetech.com (mailing list archive)
Headers show
Series Upgrade ACPI SPCR table to support SPCR table version 4 format | expand

Message

Sia Jee Heng May 2, 2024, 5:12 a.m. UTC
Update the SPCR table to accommodate the SPCR Table version 4 [1].
The SPCR table has been modified to adhere to the version 4 format [2].

Meanwhile, the virt SPCR golden reference files have been updated to
accommodate the SPCR Table version 4.

[1]: https://learn.microsoft.com/en-us/windows-hardware/drivers/serports/serial-port-console-redirection-table
[2]: https://github.com/acpica/acpica/pull/931

Sia Jee Heng (2):
  tests/qtest/bios-tables-test: Update virt SPCR golden references
  hw/acpi: Upgrade ACPI SPCR table to support SPCR table version 4
    format

 hw/acpi/aml-build.c         |  14 +++++++++++---
 hw/arm/virt-acpi-build.c    |  10 ++++++++--
 hw/riscv/virt-acpi-build.c  |  10 ++++++++--
 include/hw/acpi/acpi-defs.h |   7 +++++--
 include/hw/acpi/aml-build.h |   2 +-
 tests/data/acpi/virt/SPCR   | Bin 80 -> 90 bytes
 6 files changed, 33 insertions(+), 10 deletions(-)


base-commit: 4977ce198d2390bff8c71ad5cb1a5f6aa24b56fb

Comments

Sia Jee Heng May 2, 2024, 5:12 a.m. UTC | #1
Update the virt SPCR golden reference files to accommodate the
SPCR Table version 4 [1], utilizing the iasl binary compiled from the
latest ACPICA repository [2]. The SPCR table has been modified to
adhere to the version 4 format [3].

[1]: https://learn.microsoft.com/en-us/windows-hardware/drivers/serports/serial-port-console-redirection-table
[2]: https://github.com/acpica/acpica
[3]: https://github.com/acpica/acpica/pull/931

Diffs from iasl:
@@ -1,32 +1,32 @@
 /*
  * Intel ACPI Component Architecture
  * AML/ASL+ Disassembler version 20240322 (64-bit version)
  * Copyright (c) 2000 - 2023 Intel Corporation
  *
- * Disassembly of tests/data/acpi/virt/SPCR
+ * Disassembly of /tmp/aml-HJ5IN2
  *
  * ACPI Data Table [SPCR]
  *
  * Format: [HexOffset DecimalOffset ByteLength]  FieldName : FieldValue (in hex)
  */

 [000h 0000 004h]                   Signature : "SPCR"    [Serial Port Console Redirection Table]
-[004h 0004 004h]                Table Length : 00000050
-[008h 0008 001h]                    Revision : 02
-[009h 0009 001h]                    Checksum : B1
+[004h 0004 004h]                Table Length : 0000005A
+[008h 0008 001h]                    Revision : 04
+[009h 0009 001h]                    Checksum : 1D
 [00Ah 0010 006h]                      Oem ID : "BOCHS "
 [010h 0016 008h]                Oem Table ID : "BXPC    "
 [018h 0024 004h]                Oem Revision : 00000001
 [01Ch 0028 004h]             Asl Compiler ID : "BXPC"
 [020h 0032 004h]       Asl Compiler Revision : 00000001

 [024h 0036 001h]              Interface Type : 03
 [025h 0037 003h]                    Reserved : 000000

 [028h 0040 00Ch]        Serial Port Register : [Generic Address Structure]
 [028h 0040 001h]                    Space ID : 00 [SystemMemory]
 [029h 0041 001h]                   Bit Width : 20
 [02Ah 0042 001h]                  Bit Offset : 00
 [02Bh 0043 001h]        Encoded Access Width : 03 [DWord Access:32]
 [02Ch 0044 008h]                     Address : 0000000009000000
@@ -34,18 +34,29 @@
 [035h 0053 001h]         PCAT-compatible IRQ : 00
 [036h 0054 004h]                   Interrupt : 00000021
 [03Ah 0058 001h]                   Baud Rate : 03
 [03Bh 0059 001h]                      Parity : 00
 [03Ch 0060 001h]                   Stop Bits : 01
 [03Dh 0061 001h]                Flow Control : 02
 [03Eh 0062 001h]               Terminal Type : 00
 [03Fh 0063 001h]                    Language : 00
 [040h 0064 002h]               PCI Device ID : FFFF
 [042h 0066 002h]               PCI Vendor ID : FFFF
 [044h 0068 001h]                     PCI Bus : 00
 [045h 0069 001h]                  PCI Device : 00
 [046h 0070 001h]                PCI Function : 00
 [047h 0071 004h]                   PCI Flags : 00000000
 [04Bh 0075 001h]                 PCI Segment : 00
 [04Ch 0076 004h]             Uart Clock Freq : 00000000
-/**** ACPI table terminates in the middle of a data structure! (dump table)
-CurrentOffset: 50, TableLength: 50 ***/
\ No newline at end of file
+[050h 0080 004h]           Precise Baud rate : 00000000
+[054h 0084 002h]       NameSpaceStringLength : 0002
+[056h 0086 002h]       NameSpaceStringOffset : 0058
+[058h 0088 002h]             NamespaceString : "."
+
+Raw Table Data: Length 90 (0x5A)
+
+    0000: 53 50 43 52 5A 00 00 00 04 1D 42 4F 43 48 53 20  // SPCRZ.....BOCHS
+    0010: 42 58 50 43 20 20 20 20 01 00 00 00 42 58 50 43  // BXPC    ....BXPC
+    0020: 01 00 00 00 03 00 00 00 00 20 00 03 00 00 00 09  // ......... ......
+    0030: 00 00 00 00 08 00 21 00 00 00 03 00 01 02 00 00  // ......!.........
+    0040: FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00  // ................
+    0050: 00 00 00 00 02 00 58 00 2E 00                    // ......X...

Signed-off-by: Sia Jee Heng <jeeheng.sia@starfivetech.com>
---
 tests/data/acpi/virt/SPCR | Bin 80 -> 90 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/tests/data/acpi/virt/SPCR b/tests/data/acpi/virt/SPCR
index cf0f2b75226515097c08d2e2016a83a4f08812ba..acafd161ba2e2fdfbf081d4977ea05621152c9c9 100644
GIT binary patch
delta 27
hcmWHD;tCFM4vJ!6U|^A*$mPZbWH2x>L@?+v002b>1KR)q

delta 16
XcmazF;0g|K4hmpkU|`xfk;@GLAfp4(
Peter Maydell May 2, 2024, 9:18 a.m. UTC | #2
On Thu, 2 May 2024 at 06:12, Sia Jee Heng <jeeheng.sia@starfivetech.com> wrote:
>
> Update the SPCR table to accommodate the SPCR Table version 4 [1].
> The SPCR table has been modified to adhere to the version 4 format [2].
>
> Meanwhile, the virt SPCR golden reference files have been updated to
> accommodate the SPCR Table version 4.
>
> [1]: https://learn.microsoft.com/en-us/windows-hardware/drivers/serports/serial-port-console-redirection-table
> [2]: https://github.com/acpica/acpica/pull/931
>
> Sia Jee Heng (2):
>   tests/qtest/bios-tables-test: Update virt SPCR golden references
>   hw/acpi: Upgrade ACPI SPCR table to support SPCR table version 4
>     format

This isn't the right way to make a change that requires
updates to the bios-tables-test reference files, because
"make check" will fail after patch 1 but before patch 2.

You need a three-patch approach. How to do that is documented
in the comment at the top of bios-tables-test.c. The resulting
three patches should look like:
 * patch 1 updates bios-tables-test-allowed-diff.h to
   mark the affected test or tests as "OK to fail"
 * patch 2 makes the changes to QEMU that alter the
   required table output
 * patch 3 updates the reference files and removes the
   tests from the allowed-diff file

See for instance commits 6c1c2e912fcf9, 1ec896fe7ca938,
ea2fde5bccc514 as an example.

Side note: if riscv virt has APCI tables now, maybe we
should add testing of them to the bios-tables-test ?

thanks
-- PMM
Sia Jee Heng May 6, 2024, 5:46 a.m. UTC | #3
> -----Original Message-----
> From: Peter Maydell <peter.maydell@linaro.org>
> Sent: Thursday, May 2, 2024 5:19 PM
> To: JeeHeng Sia <jeeheng.sia@starfivetech.com>
> Cc: qemu-arm@nongnu.org; qemu-devel@nongnu.org; qemu-riscv@nongnu.org; mst@redhat.com; imammedo@redhat.com;
> anisinha@redhat.com; shannon.zhaosl@gmail.com; sunilvl@ventanamicro.com; palmer@dabbelt.com; alistair.francis@wdc.com;
> bin.meng@windriver.com; liwei1518@gmail.com; dbarboza@ventanamicro.com; zhiwei_liu@linux.alibaba.com
> Subject: Re: [PATCH v1 0/2] Upgrade ACPI SPCR table to support SPCR table version 4 format
> 
> On Thu, 2 May 2024 at 06:12, Sia Jee Heng <jeeheng.sia@starfivetech.com> wrote:
> >
> > Update the SPCR table to accommodate the SPCR Table version 4 [1].
> > The SPCR table has been modified to adhere to the version 4 format [2].
> >
> > Meanwhile, the virt SPCR golden reference files have been updated to
> > accommodate the SPCR Table version 4.
> >
> > [1]: https://learn.microsoft.com/en-us/windows-hardware/drivers/serports/serial-port-console-redirection-table
> > [2]: https://github.com/acpica/acpica/pull/931
> >
> > Sia Jee Heng (2):
> >   tests/qtest/bios-tables-test: Update virt SPCR golden references
> >   hw/acpi: Upgrade ACPI SPCR table to support SPCR table version 4
> >     format
> 
> This isn't the right way to make a change that requires
> updates to the bios-tables-test reference files, because
> "make check" will fail after patch 1 but before patch 2.
> 
> You need a three-patch approach. How to do that is documented
> in the comment at the top of bios-tables-test.c. The resulting
> three patches should look like:
>  * patch 1 updates bios-tables-test-allowed-diff.h to
>    mark the affected test or tests as "OK to fail"
>  * patch 2 makes the changes to QEMU that alter the
>    required table output
>  * patch 3 updates the reference files and removes the
>    tests from the allowed-diff file
> 
> See for instance commits 6c1c2e912fcf9, 1ec896fe7ca938,
> ea2fde5bccc514 as an example.
Thank you for the guidance. I will improve the patch by referring to the example provided.
> 
> Side note: if riscv virt has APCI tables now, maybe we
> should add testing of them to the bios-tables-test ?
Sure. I will make modifications based on the RISC-V test.
> 
> thanks
> -- PMM