ACK: [PATCH] ACPICA: Update to version 20250807

Ivan Hu ivan.hu at canonical.com
Mon Aug 18 03:30:24 UTC 2025


Thanks!
Acked-by: Ivan Hu <ivan.hu at canonical.com>

On Fri, Aug 8, 2025 at 3:36 PM Colin Ian King <colin.i.king at gmail.com>
wrote:

> Major changes in this release of ACPICA are detailed below (from
> ACPICA documents/changes.txt):
>
>  * Added option to skip the global lock for SMM - Huacai Chen
>  * Fixed non-NUL terminated string implementations - Ahmed Salem
>  * Fixed CCEL and CDAT templates - Ahmed Salem
>  * Fixed a major Linux kernel bug (UAF) that was triggered by unequal
>    number of method parameters (definition) vs arguments (invocation)
>    in different places - Peter Williams, Hans de Goede, Rafael Wysocki
>  * Define distinct D3 states (D3Hot and D3Cold) that help clarify the
>    device behavior support - Aymeric Wibo
>  * A few cleanups, improvements to existing table supports, small
>    fixes, spelling corrections etc.
>
> Signed-off-by: Colin Ian King <colin.i.king at gmail.com>
> ---
>  src/acpica/source/common/adisasm.c            | 12 +--
>  src/acpica/source/common/ahtable.c            |  1 +
>  src/acpica/source/common/dmtable.c            |  1 +
>  src/acpica/source/common/dmtbdump2.c          |  2 +-
>  src/acpica/source/common/dmtbinfo2.c          |  2 +-
>  src/acpica/source/common/dmtbinfo3.c          |  2 +-
>  src/acpica/source/compiler/aslanalyze.c       | 16 +++-
>  src/acpica/source/compiler/aslrestype2s.c     |  2 +-
>  src/acpica/source/compiler/dttable2.c         | 77 +++++++++++++------
>  src/acpica/source/compiler/dttemplate.c       | 24 ++++--
>  src/acpica/source/compiler/dttemplate.h       | 24 +++---
>  src/acpica/source/compiler/dtutils.c          |  1 +
>  .../components/disassembler/dmresrcl2.c       |  2 +-
>  .../source/components/dispatcher/dsmethod.c   | 29 ++++---
>  .../source/components/dispatcher/dsmthdat.c   |  1 +
>  src/acpica/source/components/events/evglock.c |  5 ++
>  .../source/components/executer/extrace.c      | 66 +++++++++++++++-
>  .../source/components/parser/psopinfo.c       |  8 +-
>  src/acpica/source/components/tables/tbprint.c |  8 ++
>  .../source/components/utilities/utnonansi.c   |  2 +-
>  src/acpica/source/include/acdebug.h           |  2 +-
>  src/acpica/source/include/acexcep.h           |  9 ++-
>  src/acpica/source/include/acinterp.h          |  4 +
>  src/acpica/source/include/acpixf.h            |  8 +-
>  src/acpica/source/include/actbl.h             |  2 +-
>  src/acpica/source/include/actbl1.h            |  2 +-
>  src/acpica/source/include/actbl2.h            | 25 ++++++
>  src/acpica/source/include/actypes.h           |  8 +-
>  28 files changed, 262 insertions(+), 83 deletions(-)
>
> diff --git a/src/acpica/source/common/adisasm.c
> b/src/acpica/source/common/adisasm.c
> index a207c504..dafc0d1e 100644
> --- a/src/acpica/source/common/adisasm.c
> +++ b/src/acpica/source/common/adisasm.c
> @@ -481,12 +481,12 @@ AdDisassembleOneTable (
>              "FieldName : FieldValue (in hex)\n */\n\n");
>
>          AcpiDmDumpDataTable (Table);
> -        fprintf (stderr, "Acpi Data Table [%4.4s] decoded\n",
> +        fprintf (stdout, "Acpi Data Table [%4.4s] decoded\n",
>              AcpiGbl_CDAT ? (char *) AcpiGbl_CDAT : Table->Signature);
>
>          if (File)
>          {
> -            fprintf (stderr, "Formatted output:  %s - %u bytes\n",
> +            fprintf (stdout, "Formatted output:  %s - %u bytes\n",
>                  DisasmFilename, CmGetFileSize (File));
>          }
>
> @@ -584,16 +584,16 @@ AdDisassembleOneTable (
>
>          AcpiDmDumpDataTable (Table);
>
> -        fprintf (stderr, "Disassembly completed\n");
> +        fprintf (stdout, "Disassembly completed\n");
>          if (File)
>          {
> -            fprintf (stderr, "ASL Output:    %s - %u bytes\n",
> +            fprintf (stdout, "ASL Output:    %s - %u bytes\n",
>                  DisasmFilename, CmGetFileSize (File));
>          }
>
>          if (AslGbl_MapfileFlag)
>          {
> -            fprintf (stderr, "%14s %s - %u bytes\n",
> +            fprintf (stdout, "%14s %s - %u bytes\n",
>                  AslGbl_FileDescs[ASL_FILE_MAP_OUTPUT].ShortDescription,
>                  AslGbl_Files[ASL_FILE_MAP_OUTPUT].Filename,
>                  FlGetFileSize (ASL_FILE_MAP_OUTPUT));
> @@ -630,7 +630,7 @@ AdReparseOneTable (
>      ACPI_COMMENT_ADDR_NODE  *AddrListHead;
>
>
> -    fprintf (stderr,
> +    fprintf (stdout,
>          "\nFound %u external control methods, "
>          "reparsing with new information\n",
>          AcpiDmGetUnresolvedExternalMethodCount ());
> diff --git a/src/acpica/source/common/ahtable.c
> b/src/acpica/source/common/ahtable.c
> index 4d4ea69d..705a6188 100644
> --- a/src/acpica/source/common/ahtable.c
> +++ b/src/acpica/source/common/ahtable.c
> @@ -265,6 +265,7 @@ const AH_TABLE      AcpiGbl_SupportedTables[] =
>      {ACPI_SIG_SSDT, "Secondary System Description Table (AML table)"},
>      {ACPI_SIG_STAO, "Status Override Table"},
>      {ACPI_SIG_SVKL, "Storage Volume Key Location Table"},
> +    {ACPI_SIG_SWFT, "SoundWire File Table"},
>      {ACPI_SIG_TCPA, "Trusted Computing Platform Alliance Table"},
>      {ACPI_SIG_TDEL, "TD-Event Log Table"},
>      {ACPI_SIG_TPM2, "Trusted Platform Module hardware interface Table"},
> diff --git a/src/acpica/source/common/dmtable.c
> b/src/acpica/source/common/dmtable.c
> index 796fb6eb..02125db1 100644
> --- a/src/acpica/source/common/dmtable.c
> +++ b/src/acpica/source/common/dmtable.c
> @@ -721,6 +721,7 @@ const ACPI_DMTABLE_DATA     AcpiDmTableData[] =
>      {ACPI_SIG_SRAT, NULL,                   AcpiDmDumpSrat,
> DtCompileSrat,  TemplateSrat},
>      {ACPI_SIG_STAO, NULL,                   AcpiDmDumpStao,
> DtCompileStao,  TemplateStao},
>      {ACPI_SIG_SVKL, AcpiDmTableInfoSvkl,    AcpiDmDumpSvkl,
> DtCompileSvkl,  TemplateSvkl},
> +    {ACPI_SIG_SWFT, NULL,                   NULL,           NULL,
>    NULL},
>      {ACPI_SIG_TCPA, NULL,                   AcpiDmDumpTcpa,
> DtCompileTcpa,  TemplateTcpa},
>      {ACPI_SIG_TDEL, AcpiDmTableInfoTdel,    NULL,           NULL,
>    TemplateTdel},
>      {ACPI_SIG_TPM2, AcpiDmTableInfoTpm2,    AcpiDmDumpTpm2,
> DtCompileTpm2,  TemplateTpm2},
> diff --git a/src/acpica/source/common/dmtbdump2.c
> b/src/acpica/source/common/dmtbdump2.c
> index 60184733..f9145d7c 100644
> --- a/src/acpica/source/common/dmtbdump2.c
> +++ b/src/acpica/source/common/dmtbdump2.c
> @@ -2637,7 +2637,7 @@ AcpiDmDumpRhct (
>                      RhctIsaString, RhctIsaString->IsaLength,
> AcpiDmTableInfoRhctIsa1);
>              if (Subtable->Length > IsaPadOffset)
>              {
> -                Status = AcpiDmDumpTable (Table->Length, Offset +
> SubtableOffset,
> +                Status = AcpiDmDumpTable (Table->Length, Offset +
> IsaPadOffset,
>                           ACPI_ADD_PTR (UINT8, Subtable, IsaPadOffset),
>                           (Subtable->Length - IsaPadOffset),
> AcpiDmTableInfoRhctIsaPad);
>              }
> diff --git a/src/acpica/source/common/dmtbinfo2.c
> b/src/acpica/source/common/dmtbinfo2.c
> index 9ae831bd..570540e5 100644
> --- a/src/acpica/source/common/dmtbinfo2.c
> +++ b/src/acpica/source/common/dmtbinfo2.c
> @@ -2180,7 +2180,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoRhct[] =
>  ACPI_DMTABLE_INFO           AcpiDmTableInfoRhctNodeHdr[] =
>  {
>      {ACPI_DMT_RHCT,      ACPI_RHCTH_OFFSET (Type),            "Subtable
> Type", 0},
> -    {ACPI_DMT_UINT16,    ACPI_RHCTH_OFFSET (Length),          "Length",
> 0},
> +    {ACPI_DMT_UINT16,    ACPI_RHCTH_OFFSET (Length),          "Length",
> DT_LENGTH},
>      {ACPI_DMT_UINT16,    ACPI_RHCTH_OFFSET (Revision),        "Revision",
> 0},
>      ACPI_DMT_TERMINATOR
>  };
> diff --git a/src/acpica/source/common/dmtbinfo3.c
> b/src/acpica/source/common/dmtbinfo3.c
> index 35c544d3..24187f6a 100644
> --- a/src/acpica/source/common/dmtbinfo3.c
> +++ b/src/acpica/source/common/dmtbinfo3.c
> @@ -200,7 +200,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoCcel[] =
>  {
>      {ACPI_DMT_UINT8,    ACPI_CCEL_OFFSET (CCType),                  "CC
> Type", 0},
>      {ACPI_DMT_UINT8,    ACPI_CCEL_OFFSET (CCSubType),               "CC
> Sub Type", 0},
> -    {ACPI_DMT_UINT32,   ACPI_CCEL_OFFSET (Reserved),
> "Reserved", 0},
> +    {ACPI_DMT_UINT16,   ACPI_CCEL_OFFSET (Reserved),
> "Reserved", 0},
>      {ACPI_DMT_UINT64,   ACPI_CCEL_OFFSET (LogAreaMinimumLength),    "Log
> Area Minimum Length", 0},
>      {ACPI_DMT_UINT64,   ACPI_CCEL_OFFSET (LogAreaStartAddress),     "Log
> Area Start Address", 0},
>      ACPI_DMT_TERMINATOR
> diff --git a/src/acpica/source/compiler/aslanalyze.c
> b/src/acpica/source/compiler/aslanalyze.c
> index 78b6279f..cad84bc0 100644
> --- a/src/acpica/source/compiler/aslanalyze.c
> +++ b/src/acpica/source/compiler/aslanalyze.c
> @@ -572,10 +572,22 @@ ApCheckForGpeNameConflict (
>      ACPI_PARSE_OBJECT       *NextOp;
>      UINT32                  GpeNumber;
>      char                    Name[ACPI_NAMESEG_SIZE + 1];
> -    char                    Target[ACPI_NAMESEG_SIZE];
> +    char                    Target[ACPI_NAMESEG_SIZE] ACPI_NONSTRING;
>
>
> -    /* Need a null-terminated string version of NameSeg */
> +    /**
> +     * Need a null-terminated string version of NameSeg
> +     *
> +     * NOTE: during a review on Name[ACPI_NAMESEG_SIZE + 1] having an
> extra
> +     *       byte[1], compiler testing exhibited a difference in behavior
> between
> +     *       GCC and Clang[2] (at least; MSVC may also exhibit the same)
> in
> +     *       how optimization is done. The extra byte is needed to ensure
> +     *       the signature does not get mangled, subsequently avoiding
> +     *       GpeNumber being a completely different return value from
> strtoul.
> +     *
> +     *       [1]
> https://github.com/acpica/acpica/pull/1019#discussion_r2058687704
> +     *       [2]
> https://github.com/acpica/acpica/pull/1019#discussion_r2061953039
> +     */
>
>      ACPI_MOVE_32_TO_32 (Name, Op->Asl.NameSeg);
>      Name[ACPI_NAMESEG_SIZE] = 0;
> diff --git a/src/acpica/source/compiler/aslrestype2s.c
> b/src/acpica/source/compiler/aslrestype2s.c
> index d9e55541..f7d89557 100644
> --- a/src/acpica/source/compiler/aslrestype2s.c
> +++ b/src/acpica/source/compiler/aslrestype2s.c
> @@ -1469,7 +1469,7 @@ RsDoCsi2SerialBusDescriptor (
>
>          case 2: /* Local Port Instance [Integer] (_PRT) */
>
> -            RsSetFlagBits16 ((UINT16 *)
> &Descriptor->Csi2SerialBus.TypeSpecificFlags, InitializerOp, 0, 0);
> +            RsSetFlagBits16 ((UINT16 *)
> &Descriptor->Csi2SerialBus.TypeSpecificFlags, InitializerOp, 2, 0);
>              RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_LOCALPORT,
>                  CurrentByteOffset + ASL_RESDESC_OFFSET
> (Csi2SerialBus.TypeSpecificFlags), 2, 6);
>              break;
> diff --git a/src/acpica/source/compiler/dttable2.c
> b/src/acpica/source/compiler/dttable2.c
> index 0db2ff7f..c752965c 100644
> --- a/src/acpica/source/compiler/dttable2.c
> +++ b/src/acpica/source/compiler/dttable2.c
> @@ -1929,24 +1929,30 @@ DtCompileRhct (
>  {
>      ACPI_STATUS             Status;
>      ACPI_RHCT_NODE_HEADER   *RhctHeader;
> -    ACPI_RHCT_HART_INFO     *RhctHartInfo = NULL;
> +    ACPI_RHCT_HART_INFO     *RhctHartInfo;
>      DT_SUBTABLE             *Subtable;
>      DT_SUBTABLE             *ParentTable;
>      ACPI_DMTABLE_INFO       *InfoTable;
>      DT_FIELD                **PFieldList = (DT_FIELD **) List;
>      DT_FIELD                *SubtableStart;
> +    ACPI_TABLE_RHCT         *Table;
> +    BOOLEAN                 FirstNode = TRUE;
>
>
>      /* Compile the main table */
>
> +    ParentTable = DtPeekSubtable ();
>      Status = DtCompileTable (PFieldList, AcpiDmTableInfoRhct,
>          &Subtable);
>      if (ACPI_FAILURE (Status))
>      {
>          return (Status);
>      }
> +    DtInsertSubtable (ParentTable, Subtable);
> +    Table = ACPI_CAST_PTR (ACPI_TABLE_RHCT, ParentTable->Buffer);
> +    Table->NodeCount = 0;
> +    Table->NodeOffset = sizeof (ACPI_TABLE_RHCT);
>
> -    ParentTable = DtPeekSubtable ();
>      while (*PFieldList)
>      {
>          SubtableStart = *PFieldList;
> @@ -1961,7 +1967,10 @@ DtCompileRhct (
>          }
>          DtInsertSubtable (ParentTable, Subtable);
>          RhctHeader = ACPI_CAST_PTR (ACPI_RHCT_NODE_HEADER,
> Subtable->Buffer);
> -        RhctHeader->Length = (UINT16)(Subtable->Length);
> +
> +        DtPushSubtable (Subtable);
> +        ParentTable = DtPeekSubtable ();
> +        Table->NodeCount++;
>
>          switch (RhctHeader->Type)
>          {
> @@ -1999,37 +2008,54 @@ DtCompileRhct (
>              return (Status);
>          }
>          DtInsertSubtable (ParentTable, Subtable);
> -        RhctHeader->Length += (UINT16)(Subtable->Length);
> +        if (FirstNode)
> +        {
> +            Table->NodeOffset = ACPI_PTR_DIFF(ParentTable->Buffer, Table);
> +            FirstNode = FALSE;
> +        }
>
>          /* Compile RHCT subtable additionals */
>
>          switch (RhctHeader->Type)
>          {
> -        case ACPI_RHCT_NODE_TYPE_HART_INFO:
> +        case ACPI_RHCT_NODE_TYPE_ISA_STRING:
>
> -            RhctHartInfo = ACPI_SUB_PTR (ACPI_RHCT_HART_INFO,
> -                Subtable->Buffer, sizeof (ACPI_RHCT_NODE_HEADER));
> -            if (RhctHartInfo)
> +            /*
> +             * Padding - Variable-length data
> +             * Optionally allows the padding of the ISA string to be used
> +             * for filling this field.
> +             */
> +            Status = DtCompileTable (PFieldList,
> AcpiDmTableInfoRhctIsaPad,
> +                                     &Subtable);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (Status);
> +            }
> +            if (Subtable)
>              {
> +                DtInsertSubtable (ParentTable, Subtable);
> +            }
> +            break;
>
> -                RhctHartInfo->NumOffsets = 0;
> -                while (*PFieldList)
> -                {
> -                    Status = DtCompileTable (PFieldList,
> -                        AcpiDmTableInfoRhctHartInfo2, &Subtable);
> -                    if (ACPI_FAILURE (Status))
> -                    {
> -                        return (Status);
> -                    }
> -                    if (!Subtable)
> -                    {
> -                        break;
> -                    }
> +        case ACPI_RHCT_NODE_TYPE_HART_INFO:
>
> -                    DtInsertSubtable (ParentTable, Subtable);
> -                    RhctHeader->Length += (UINT16)(Subtable->Length);
> -                    RhctHartInfo->NumOffsets++;
> +            RhctHartInfo = ACPI_CAST_PTR (ACPI_RHCT_HART_INFO,
> +                Subtable->Buffer);
> +            RhctHartInfo->NumOffsets = 0;
> +            while (*PFieldList)
> +            {
> +                Status = DtCompileTable (PFieldList,
> +                    AcpiDmTableInfoRhctHartInfo2, &Subtable);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return (Status);
>                  }
> +                if (!Subtable)
> +                {
> +                    break;
> +                }
> +                DtInsertSubtable (ParentTable, Subtable);
> +                RhctHartInfo->NumOffsets++;
>              }
>              break;
>
> @@ -2037,6 +2063,9 @@ DtCompileRhct (
>
>              break;
>          }
> +
> +        DtPopSubtable ();
> +        ParentTable = DtPeekSubtable ();
>      }
>
>      return (AE_OK);
> diff --git a/src/acpica/source/compiler/dttemplate.c
> b/src/acpica/source/compiler/dttemplate.c
> index 48e115d8..c3fd3346 100644
> --- a/src/acpica/source/compiler/dttemplate.c
> +++ b/src/acpica/source/compiler/dttemplate.c
> @@ -255,7 +255,7 @@ DtCreateTemplates (
>
>      if (AcpiGbl_Optind < 3)
>      {
> -        fprintf (stderr, "Creating default template: [DSDT]\n");
> +        fprintf (stdout, "Creating default template: [DSDT]\n");
>          Status = DtCreateOneTemplateFile (ACPI_SIG_DSDT, 0);
>          goto Exit;
>      }
> @@ -411,7 +411,7 @@ DtCreateAllTemplates (
>      ACPI_STATUS             Status;
>
>
> -    fprintf (stderr, "Creating all supported Template files\n");
> +    fprintf (stdout, "Creating all supported Template files\n");
>
>      /* Walk entire ACPI table data structure */
>
> @@ -421,8 +421,13 @@ DtCreateAllTemplates (
>
>          if (TableData->Template)
>          {
> -            Status = DtCreateOneTemplate (TableData->Signature,
> -                0, TableData);
> +           if (ACPI_COMPARE_NAMESEG (TableData->Signature, ACPI_SIG_CDAT))
> +               /* Special handling of CDAT */
> +                Status = DtCreateOneTemplate (TableData->Signature,
> +                    0, NULL);
> +           else
> +                Status = DtCreateOneTemplate (TableData->Signature,
> +                    0, TableData);
>              if (ACPI_FAILURE (Status))
>              {
>                  return (Status);
> @@ -563,7 +568,7 @@ DtCreateOneTemplate (
>      }
>      else
>      {
> -        /* Special ACPI tables - DSDT, SSDT, OSDT, FACS, RSDP */
> +        /* Special ACPI tables - DSDT, SSDT, OSDT, FACS, RSDP, CDAT */
>
>          AcpiOsPrintf (" (AML byte code table)\n");
>          AcpiOsPrintf (" */\n");
> @@ -621,6 +626,11 @@ DtCreateOneTemplate (
>              AcpiDmDumpDataTable (ACPI_CAST_PTR (ACPI_TABLE_HEADER,
>                  TemplateRsdp));
>          }
> +        else if (ACPI_COMPARE_NAMESEG (Signature, ACPI_SIG_CDAT))
> +        {
> +            AcpiDmDumpCdat (ACPI_CAST_PTR (ACPI_TABLE_HEADER,
> +                TemplateCdat));
> +        }
>          else
>          {
>              fprintf (stderr,
> @@ -632,14 +642,14 @@ DtCreateOneTemplate (
>
>      if (TableCount == 0)
>      {
> -        fprintf (stderr,
> +        fprintf (stdout,
>              "Created ACPI table template for [%4.4s], "
>              "written to \"%s\"\n",
>              Signature, DisasmFilename);
>      }
>      else
>      {
> -        fprintf (stderr,
> +        fprintf (stdout,
>              "Created ACPI table templates for [%4.4s] "
>              "and %u [SSDT] in same file, written to \"%s\"\n",
>              Signature, TableCount, DisasmFilename);
> diff --git a/src/acpica/source/compiler/dttemplate.h
> b/src/acpica/source/compiler/dttemplate.h
> index 0fdd90f7..51a34be5 100644
> --- a/src/acpica/source/compiler/dttemplate.h
> +++ b/src/acpica/source/compiler/dttemplate.h
> @@ -389,7 +389,7 @@ const unsigned char TemplateBoot[] =
>  const unsigned char TemplateCcel[] =
>  {
>      0x43,0x43,0x45,0x4C,0x38,0x00,0x00,0x00,  /* 00000000    "CCEL8..." */
> -    0x04,0x1C,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
> +    0x04,0x2E,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
>      0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65,  /* 00000010    "Template" */
>      0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
>      0x30,0x09,0x21,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "0.! ...." */
> @@ -1951,25 +1951,25 @@ const unsigned char TemplateRgrt[] =
>
>  const unsigned char TemplateRhct[] =
>  {
> -    0x52,0x48,0x43,0x54,0x96,0x00,0x00,0x00,  /* 00000000    "RHCT|..." */
> -    0x01,0x24,0x4F,0x45,0x4D,0x43,0x41,0x00,  /* 00000008    "..OEMCA." */
> +    0x52,0x48,0x43,0x54,0x96,0x00,0x00,0x00,  /* 00000000    "RHCT...." */
> +    0x01,0x6D,0x4F,0x45,0x4D,0x43,0x41,0x00,  /* 00000008    ".mOEMCA." */
>      0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
>      0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> -    0x28,0x09,0x22,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "... ...." */
> +    0x04,0x04,0x25,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "..% ...." */
>      0x80,0x96,0x98,0x00,0x00,0x00,0x00,0x00,  /* 00000028    "........" */
> -    0x02,0x00,0x00,0x00,0x38,0x00,0x00,0x00,  /* 00000030    "....8..." */
> -    0x00,0x00,0x34,0x00,0x01,0x00,0x2B,0x00,  /* 00000038    "..4...*." */
> +    0x04,0x00,0x00,0x00,0x38,0x00,0x00,0x00,  /* 00000030    "....8..." */
> +    0x00,0x00,0x34,0x00,0x01,0x00,0x2B,0x00,  /* 00000038    "..4...+." */
>      0x72,0x76,0x36,0x34,0x69,0x6D,0x61,0x66,  /* 00000040    "rv64imaf" */
>      0x64,0x63,0x68,0x5F,0x7A,0x69,0x63,0x73,  /* 00000048    "dch_zics" */
>      0x72,0x5F,0x7A,0x69,0x66,0x65,0x6E,0x63,  /* 00000050    "r_zifenc" */
>      0x65,0x69,0x5F,0x7A,0x62,0x61,0x5F,0x7A,  /* 00000058    "ei_zba_z" */
>      0x62,0x62,0x5F,0x7A,0x62,0x63,0x5F,0x7A,  /* 00000060    "bb_zbc_z" */
> -    0x62,0x73,0x00,0x00,0xFF,0xFF,0x18,0x00,  /* 00000068    "bs......" */
> -    0x01,0x00,0x03,0x00,0x00,0x00,0x00,0x00,  /* 00000070    "........" */
> -    0x38,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,  /* 00000078    "........" */
> -    0x8E,0x00,0x00,0x00,0x01,0x00,0x0A,0x00,  /* 00000080    "........" */
> -    0x01,0x00,0x00,0x06,0x06,0x06,0x02,0x00,  /* 00000088    "........" */
> -    0x08,0x00,0x01,0x00,0x00,0x02             /* 00000090    "........" */
> +    0x62,0x73,0x00,0x00,0x01,0x00,0x0A,0x00,  /* 00000068    "bs......" */
> +    0x01,0x00,0x00,0x06,0x06,0x06,0x02,0x00,  /* 00000070    "........" */
> +    0x08,0x00,0x01,0x00,0x00,0x02,0xFF,0xFF,  /* 00000078    "........" */
> +    0x18,0x00,0x01,0x00,0x03,0x00,0x00,0x00,  /* 00000080    "........" */
> +    0x00,0x00,0x3B,0x00,0x00,0x00,0x6C,0x00,  /* 00000088    "..;...l." */
> +    0x00,0x00,0x76,0x00,0x00,0x00             /* 00000090    "..v..."   */
>  };
>
>  const unsigned char TemplateRimt[] =
> diff --git a/src/acpica/source/compiler/dtutils.c
> b/src/acpica/source/compiler/dtutils.c
> index 7605c37b..d2c0ac71 100644
> --- a/src/acpica/source/compiler/dtutils.c
> +++ b/src/acpica/source/compiler/dtutils.c
> @@ -623,6 +623,7 @@ DtGetFieldLength (
>      case ACPI_DMT_NFIT:
>      case ACPI_DMT_PCI_PATH:
>      case ACPI_DMT_PHAT:
> +    case ACPI_DMT_RHCT:
>
>          ByteLength = 2;
>          break;
> diff --git a/src/acpica/source/components/disassembler/dmresrcl2.c
> b/src/acpica/source/components/disassembler/dmresrcl2.c
> index 07eee3e8..ecd049fc 100644
> --- a/src/acpica/source/components/disassembler/dmresrcl2.c
> +++ b/src/acpica/source/components/disassembler/dmresrcl2.c
> @@ -776,7 +776,7 @@ AcpiDmCsi2SerialBusDescriptor (
>
>      AcpiOsPrintf (" 0x%2.2X, 0x%2.2X,\n",
>          Resource->Csi2SerialBus.TypeSpecificFlags & 0x03,
> -        Resource->Csi2SerialBus.TypeSpecificFlags & 0xFC);
> +        (Resource->Csi2SerialBus.TypeSpecificFlags & 0xFC) >> 2);
>
>      /* ResourceSource is a required field */
>
> diff --git a/src/acpica/source/components/dispatcher/dsmethod.c
> b/src/acpica/source/components/dispatcher/dsmethod.c
> index fb194738..09745e12 100644
> --- a/src/acpica/source/components/dispatcher/dsmethod.c
> +++ b/src/acpica/source/components/dispatcher/dsmethod.c
> @@ -646,8 +646,6 @@ AcpiDsCallControlMethod (
>      ACPI_WALK_STATE         *NextWalkState = NULL;
>      ACPI_OPERAND_OBJECT     *ObjDesc;
>      ACPI_EVALUATE_INFO      *Info;
> -    UINT32                  i;
> -
>
>      ACPI_FUNCTION_TRACE_PTR (DsCallControlMethod, ThisWalkState);
>
> @@ -670,6 +668,23 @@ AcpiDsCallControlMethod (
>          return_ACPI_STATUS (AE_NULL_OBJECT);
>      }
>
> +    if (ThisWalkState->NumOperands < ObjDesc->Method.ParamCount)
> +    {
> +        ACPI_ERROR ((AE_INFO, "Missing argument(s) for method [%4.4s]",
> +            AcpiUtGetNodeName (MethodNode)));
> +
> +        return_ACPI_STATUS (AE_AML_TOO_FEW_ARGUMENTS);
> +    }
> +
> +    else if (ThisWalkState->NumOperands > ObjDesc->Method.ParamCount)
> +    {
> +        ACPI_ERROR ((AE_INFO, "Too many arguments for method [%4.4s]",
> +            AcpiUtGetNodeName (MethodNode)));
> +
> +        return_ACPI_STATUS (AE_AML_TOO_MANY_ARGUMENTS);
> +    }
> +
> +
>      /* Init for new method, possibly wait on method mutex */
>
>      Status = AcpiDsBeginMethodExecution (
> @@ -726,15 +741,7 @@ AcpiDsCallControlMethod (
>       * Delete the operands on the previous walkstate operand stack
>       * (they were copied to new objects)
>       */
> -    for (i = 0; i < ObjDesc->Method.ParamCount; i++)
> -    {
> -        AcpiUtRemoveReference (ThisWalkState->Operands [i]);
> -        ThisWalkState->Operands [i] = NULL;
> -    }
> -
> -    /* Clear the operand stack */
> -
> -    ThisWalkState->NumOperands = 0;
> +    AcpiDsClearOperands (ThisWalkState);
>
>      ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
>          "**** Begin nested execution of [%4.4s] **** WalkState=%p\n",
> diff --git a/src/acpica/source/components/dispatcher/dsmthdat.c
> b/src/acpica/source/components/dispatcher/dsmthdat.c
> index 67504137..98e69efa 100644
> --- a/src/acpica/source/components/dispatcher/dsmthdat.c
> +++ b/src/acpica/source/components/dispatcher/dsmthdat.c
> @@ -357,6 +357,7 @@ AcpiDsMethodDataInitArgs (
>
>          Index++;
>      }
> +    AcpiExTraceArgs(Params, Index);
>
>      ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%u args passed to method\n",
> Index));
>      return_ACPI_STATUS (AE_OK);
> diff --git a/src/acpica/source/components/events/evglock.c
> b/src/acpica/source/components/events/evglock.c
> index ab688360..153a7ff0 100644
> --- a/src/acpica/source/components/events/evglock.c
> +++ b/src/acpica/source/components/events/evglock.c
> @@ -195,6 +195,11 @@ AcpiEvInitGlobalLockHandler (
>          return_ACPI_STATUS (AE_OK);
>      }
>
> +    if (!AcpiGbl_UseGlobalLock)
> +    {
> +        return_ACPI_STATUS (AE_OK);
> +    }
> +
>      /* Attempt installation of the global lock handler */
>
>      Status = AcpiInstallFixedEventHandler (ACPI_EVENT_GLOBAL,
> diff --git a/src/acpica/source/components/executer/extrace.c
> b/src/acpica/source/components/executer/extrace.c
> index 336cc679..2d596f2b 100644
> --- a/src/acpica/source/components/executer/extrace.c
> +++ b/src/acpica/source/components/executer/extrace.c
> @@ -269,6 +269,68 @@ AcpiExGetTraceEventName (
>
>  #endif
>
>
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiExTraceArgs
> + *
> + * PARAMETERS:  Params            - AML method arguments
> + *              Count             - numer of method arguments
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Trace any arguments
> + *
> +
> ******************************************************************************/
> +
> +void
> +AcpiExTraceArgs(ACPI_OPERAND_OBJECT **Params, UINT32 Count)
> +{
> +    UINT32 i;
> +
> +    ACPI_FUNCTION_NAME(ExTraceArgs);
> +
> +    for (i = 0; i < Count; i++)
> +    {
> +        ACPI_OPERAND_OBJECT *obj_desc = Params[i];
> +
> +        if (!i)
> +        {
> +            ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT, " "));
> +        }
> +
> +        switch (obj_desc->Common.Type)
> +        {
> +        case ACPI_TYPE_INTEGER:
> +            ACPI_DEBUG_PRINT_RAW((ACPI_DB_TRACE_POINT, "%lx",
> obj_desc->Integer.Value));
> +            break;
> +
> +        case ACPI_TYPE_STRING:
> +            if (!obj_desc->String.Length)
> +            {
> +                ACPI_DEBUG_PRINT_RAW((ACPI_DB_TRACE_POINT, "NULL"));
> +                break;
> +            }
> +            if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_TRACE_POINT, _COMPONENT))
> +            {
> +                AcpiUtPrintString(obj_desc->String.Pointer,
> ACPI_UINT8_MAX);
> +            }
> +            break;
> +
> +        default:
> +            ACPI_DEBUG_PRINT_RAW((ACPI_DB_TRACE_POINT, "Unknown"));
> +            break;
> +        }
> +
> +        if ((i + 1) == Count)
> +        {
> +            ACPI_DEBUG_PRINT_RAW((ACPI_DB_TRACE_POINT, "\n"));
> +        }
> +        else
> +        {
> +            ACPI_DEBUG_PRINT_RAW((ACPI_DB_TRACE_POINT, ", "));
> +        }
> +    }
> +}
>
>
>  /*******************************************************************************
>   *
> @@ -299,9 +361,9 @@ AcpiExTracePoint (
>      if (Pathname)
>      {
>          ACPI_DEBUG_PRINT ((ACPI_DB_TRACE_POINT,
> -            "%s %s [0x%p:%s] execution.\n",
> +            "%s %s [%s] execution.\n",
>              AcpiExGetTraceEventName (Type), Begin ? "Begin" : "End",
> -            Aml, Pathname));
> +            Pathname));
>      }
>      else
>      {
> diff --git a/src/acpica/source/components/parser/psopinfo.c
> b/src/acpica/source/components/parser/psopinfo.c
> index a37f9f5a..dcc426ff 100644
> --- a/src/acpica/source/components/parser/psopinfo.c
> +++ b/src/acpica/source/components/parser/psopinfo.c
> @@ -180,8 +180,8 @@ const ACPI_OPCODE_INFO *
>  AcpiPsGetOpcodeInfo (
>      UINT16                  Opcode)
>  {
> -#ifdef ACPI_DEBUG_OUTPUT
> -    const char              *OpcodeName = "Unknown AML opcode";
> +#if defined ACPI_ASL_COMPILER && defined ACPI_DEBUG_OUTPUT
> +    const char                     *OpcodeName = "Unknown AML opcode";
>  #endif
>
>      ACPI_FUNCTION_NAME (PsGetOpcodeInfo);
> @@ -207,7 +207,7 @@ AcpiPsGetOpcodeInfo (
>
>  #if defined ACPI_ASL_COMPILER && defined ACPI_DEBUG_OUTPUT
>  #include "asldefine.h"
> -
> +
>      switch (Opcode)
>      {
>      case AML_RAW_DATA_BYTE:
> @@ -249,12 +249,12 @@ AcpiPsGetOpcodeInfo (
>      default:
>          break;
>      }
> -#endif
>
>      /* Unknown AML opcode */
>
>      ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
>          "%s [%4.4X]\n", OpcodeName, Opcode));
> +#endif
>
>      return (&AcpiGbl_AmlOpInfo [_UNK]);
>  }
> diff --git a/src/acpica/source/components/tables/tbprint.c
> b/src/acpica/source/components/tables/tbprint.c
> index 3f471e28..d82cfddb 100644
> --- a/src/acpica/source/components/tables/tbprint.c
> +++ b/src/acpica/source/components/tables/tbprint.c
> @@ -279,6 +279,14 @@ AcpiTbPrintTableHeader (
>              ACPI_CAST_PTR (ACPI_TABLE_RSDP, Header)->Revision,
>              LocalHeader.OemId));
>      }
> +    else if (AcpiGbl_CDAT && !AcpiUtValidNameseg (Header->Signature))
> +    {
> +       /* CDAT does not use the common ACPI table header */
> +
> +        ACPI_INFO (("%-4.4s 0x%8.8X%8.8X %06X",
> +            ACPI_SIG_CDAT, ACPI_FORMAT_UINT64 (Address),
> +            ACPI_CAST_PTR (ACPI_TABLE_CDAT, Header)->Length));
> +    }
>      else
>      {
>          /* Standard ACPI table with full common header */
> diff --git a/src/acpica/source/components/utilities/utnonansi.c
> b/src/acpica/source/components/utilities/utnonansi.c
> index ba5b3ee6..76fa07f6 100644
> --- a/src/acpica/source/components/utilities/utnonansi.c
> +++ b/src/acpica/source/components/utilities/utnonansi.c
> @@ -353,7 +353,7 @@ AcpiUtSafeStrncpy (
>  {
>      /* Always terminate destination string */
>
> -    memcpy (Dest, Source, DestSize);
> +    strncpy (Dest, Source, DestSize);
>      Dest[DestSize - 1] = 0;
>  }
>
> diff --git a/src/acpica/source/include/acdebug.h
> b/src/acpica/source/include/acdebug.h
> index 139f65c1..05225eef 100644
> --- a/src/acpica/source/include/acdebug.h
> +++ b/src/acpica/source/include/acdebug.h
> @@ -187,7 +187,7 @@ typedef struct acpi_db_execute_walk
>  {
>      UINT32                  Count;
>      UINT32                  MaxCount;
> -    char                    NameSeg[ACPI_NAMESEG_SIZE + 1] ACPI_NONSTRING;
> +    char                    NameSeg[ACPI_NAMESEG_SIZE + 1];
>
>  } ACPI_DB_EXECUTE_WALK;
>
> diff --git a/src/acpica/source/include/acexcep.h
> b/src/acpica/source/include/acexcep.h
> index 57f98ab4..7216e0d4 100644
> --- a/src/acpica/source/include/acexcep.h
> +++ b/src/acpica/source/include/acexcep.h
> @@ -322,8 +322,11 @@ typedef struct acpi_exception_info
>  #define AE_AML_TARGET_TYPE              EXCEP_AML (0x0023)
>  #define AE_AML_PROTOCOL                 EXCEP_AML (0x0024)
>  #define AE_AML_BUFFER_LENGTH            EXCEP_AML (0x0025)
> +#define AE_AML_TOO_FEW_ARGUMENTS        EXCEP_AML (0x0026)
> +#define AE_AML_TOO_MANY_ARGUMENTS       EXCEP_AML (0x0027)
>
> -#define AE_CODE_AML_MAX                 0x0025
> +
> +#define AE_CODE_AML_MAX                 0x0027
>
>
>  /*
> @@ -456,7 +459,9 @@ static const ACPI_EXCEPTION_INFO
> AcpiGbl_ExceptionNames_Aml[] =
>      EXCEP_TXT ("AE_AML_UNINITIALIZED_NODE",     "A namespace node is
> uninitialized or unresolved"),
>      EXCEP_TXT ("AE_AML_TARGET_TYPE",            "A target operand of an
> incorrect type was encountered"),
>      EXCEP_TXT ("AE_AML_PROTOCOL",               "Violation of a fixed
> ACPI protocol"),
> -    EXCEP_TXT ("AE_AML_BUFFER_LENGTH",          "The length of the buffer
> is invalid/incorrect")
> +    EXCEP_TXT ("AE_AML_BUFFER_LENGTH",          "The length of the buffer
> is invalid/incorrect"),
> +    EXCEP_TXT ("AE_AML_TOO_FEW_ARGUMENTS",      "There are fewer than
> expected method arguments"),
> +    EXCEP_TXT ("AE_AML_TOO_MANY_ARGUMENTS",     "There are too many
> arguments for this method")
>  };
>
>  static const ACPI_EXCEPTION_INFO    AcpiGbl_ExceptionNames_Ctrl[] =
> diff --git a/src/acpica/source/include/acinterp.h
> b/src/acpica/source/include/acinterp.h
> index 74166384..b7f9e8f6 100644
> --- a/src/acpica/source/include/acinterp.h
> +++ b/src/acpica/source/include/acinterp.h
> @@ -280,6 +280,10 @@ AcpiExTracePoint (
>      UINT8                   *Aml,
>      char                    *Pathname);
>
> +void
> +AcpiExTraceArgs(
> +    ACPI_OPERAND_OBJECT     **Params,
> +    UINT32                  Count);
>
>  /*
>   * exfield - ACPI AML (p-code) execution - field manipulation
> diff --git a/src/acpica/source/include/acpixf.h
> b/src/acpica/source/include/acpixf.h
> index 64c6b924..8f7047cd 100644
> --- a/src/acpica/source/include/acpixf.h
> +++ b/src/acpica/source/include/acpixf.h
> @@ -154,7 +154,7 @@
>
>  /* Current ACPICA subsystem version in YYYYMMDD format */
>
> -#define ACPI_CA_VERSION                 0x20250404
> +#define ACPI_CA_VERSION                 0x20250807
>
>  #include "acconfig.h"
>  #include "actypes.h"
> @@ -357,6 +357,12 @@ ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_OsiData,
> 0);
>   */
>  ACPI_INIT_GLOBAL (BOOLEAN,          AcpiGbl_ReducedHardware, FALSE);
>
> +/*
> + * ACPI Global Lock is mainly used for systems with SMM, so no-SMM systems
> + * (such as LoongArch) may not have and not use Global Lock.
> + */
> +ACPI_INIT_GLOBAL (BOOLEAN,          AcpiGbl_UseGlobalLock, TRUE);
> +
>  /*
>   * Maximum timeout for While() loop iterations before forced method abort.
>   * This mechanism is intended to prevent infinite loops during interpreter
> diff --git a/src/acpica/source/include/actbl.h
> b/src/acpica/source/include/actbl.h
> index bcd2420f..e3bfafd9 100644
> --- a/src/acpica/source/include/actbl.h
> +++ b/src/acpica/source/include/actbl.h
> @@ -220,7 +220,7 @@ typedef struct acpi_table_header
>      char                    OemId[ACPI_OEM_ID_SIZE] ACPI_NONSTRING;
>       /* ASCII OEM identification */
>      char                    OemTableId[ACPI_OEM_TABLE_ID_SIZE]
> ACPI_NONSTRING; /* ASCII OEM table identification */
>      UINT32                  OemRevision;
>      /* OEM revision number */
> -    char                    AslCompilerId[ACPI_NAMESEG_SIZE];
>       /* ASCII ASL compiler vendor ID */
> +    char                    AslCompilerId[ACPI_NAMESEG_SIZE]
> ACPI_NONSTRING;   /* ASCII ASL compiler vendor ID */
>      UINT32                  AslCompilerRevision;
>      /* ASL compiler version */
>
>  } ACPI_TABLE_HEADER;
> diff --git a/src/acpica/source/include/actbl1.h
> b/src/acpica/source/include/actbl1.h
> index 876b7210..ec04f0a0 100644
> --- a/src/acpica/source/include/actbl1.h
> +++ b/src/acpica/source/include/actbl1.h
> @@ -262,7 +262,7 @@ typedef struct acpi_whea_header
>
>  /* Larger subtable header (when Length can exceed 255) */
>
> -typedef struct acpi_subtable_header_16
> +typedef struct acpi_subtbl_hdr_16
>  {
>      UINT16                  Type;
>      UINT16                  Length;
> diff --git a/src/acpica/source/include/actbl2.h
> b/src/acpica/source/include/actbl2.h
> index 4899929b..a74b6d55 100644
> --- a/src/acpica/source/include/actbl2.h
> +++ b/src/acpica/source/include/actbl2.h
> @@ -201,6 +201,7 @@
>  #define ACPI_SIG_SDEI           "SDEI"      /* Software Delegated
> Exception Interface Table */
>  #define ACPI_SIG_SDEV           "SDEV"      /* Secure Devices table */
>  #define ACPI_SIG_SVKL           "SVKL"      /* Storage Volume Key
> Location Table */
> +#define ACPI_SIG_SWFT           "SWFT"      /* SoundWire File Table */
>  #define ACPI_SIG_TDEL           "TDEL"      /* TD Event Log Table */
>
>
> @@ -4094,6 +4095,30 @@ enum acpi_svkl_format
>      ACPI_SVKL_FORMAT_RESERVED   = 1 /* 1 and greater are reserved */
>  };
>
>
> +/*******************************************************************************
> + *
> + * SWFT - SoundWire File Table
> + *        as described in Discovery and Configuration (DisCo)
> Specification
> + *        for SoundWire®
> + *        Version 1
> + *
> +
> ******************************************************************************/
> +
> +typedef struct acpi_table_swft
> +{
> +    ACPI_TABLE_HEADER       Header; /* Common ACPI table header */
> +
> +} ACPI_TABLE_SWFT;
> +
> +typedef struct acpi_swft_file
> +{
> +    UINT16                  VendorID;
> +    UINT32                  FileID;
> +    UINT16                  FileVersion;
> +    UINT16                  FileLength;
> +    UINT8                   FileData[];
> +
> +} ACPI_SWFT_FILE;
>
>
>  /*******************************************************************************
>   *
> diff --git a/src/acpica/source/include/actypes.h
> b/src/acpica/source/include/actypes.h
> index 66333243..3c95887b 100644
> --- a/src/acpica/source/include/actypes.h
> +++ b/src/acpica/source/include/actypes.h
> @@ -741,9 +741,11 @@ typedef UINT64                          ACPI_INTEGER;
>  #define ACPI_STATE_D0                   (UINT8) 0
>  #define ACPI_STATE_D1                   (UINT8) 1
>  #define ACPI_STATE_D2                   (UINT8) 2
> -#define ACPI_STATE_D3                   (UINT8) 3
> -#define ACPI_D_STATES_MAX               ACPI_STATE_D3
> -#define ACPI_D_STATE_COUNT              4
> +#define ACPI_STATE_D3_HOT               (UINT8) 3
> +#define ACPI_STATE_D3_COLD              (UINT8) 4
> +#define ACPI_STATE_D3                   ACPI_STATE_D3_COLD
> +#define ACPI_D_STATES_MAX               ACPI_STATE_D3_COLD
> +#define ACPI_D_STATE_COUNT              5
>
>  #define ACPI_STATE_C0                   (UINT8) 0
>  #define ACPI_STATE_C1                   (UINT8) 1
> --
> 2.50.1
>
>
> --
> fwts-devel mailing list
> fwts-devel at lists.ubuntu.com
> Modify settings or unsubscribe at:
> https://lists.ubuntu.com/mailman/listinfo/fwts-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.ubuntu.com/archives/fwts-devel/attachments/20250818/5b5ab54c/attachment-0001.html>


More information about the fwts-devel mailing list