ACK: [PATCH] ACPICA: Update to version 20210730

Alex Hung alex.hung at canonical.com
Fri Jul 30 18:37:23 UTC 2021


On 2021-07-30 10:41 a.m., Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
> 
> Changes in this release of ACPICA are detailed at the following
> link on the ACPICA developer mailing list:
> 
> https://lists.acpica.org/hyperkitty/list/devel@acpica.org/thread/Q3CD3QGSIHEHGK7E5NXYE3E2L6JCZXVE/
> 
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
>  src/acpica/source/common/adisasm.c            |   2 +-
>  src/acpica/source/common/ahtable.c            |   1 +
>  src/acpica/source/common/dmtable.c            | 147 ++++++++++++
>  src/acpica/source/common/dmtbdump1.c          | 219 ++++++++++++++++++
>  src/acpica/source/common/dmtbdump3.c          |  14 +-
>  src/acpica/source/common/dmtbinfo1.c          | 138 +++++++++++
>  src/acpica/source/common/dmtbinfo3.c          |   3 +-
>  src/acpica/source/compiler/aslmethod.c        |  83 ++++++-
>  src/acpica/source/compiler/aslutils.c         |   6 +-
>  src/acpica/source/compiler/dtcompiler.h       |   5 +
>  src/acpica/source/compiler/dtfield.c          |   4 +-
>  src/acpica/source/compiler/dttable1.c         | 217 +++++++++++++++++
>  src/acpica/source/compiler/dttable2.c         |  26 ++-
>  src/acpica/source/compiler/dttemplate.h       |  94 ++++++++
>  src/acpica/source/compiler/dtutils.c          |  10 +-
>  .../source/components/dispatcher/dswexec.c    |   2 +-
>  src/acpica/source/include/acdisasm.h          |  22 ++
>  src/acpica/source/include/acnames.h           |   1 +
>  src/acpica/source/include/acoutput.h          |   2 +-
>  src/acpica/source/include/acpixf.h            |   2 +-
>  src/acpica/source/include/actbinfo.h          |  15 ++
>  src/acpica/source/include/actbl1.h            |  16 +-
>  src/acpica/source/include/actbl2.h            | 194 ++++++++++++++++
>  src/acpica/source/include/actbl3.h            |   6 +
>  24 files changed, 1200 insertions(+), 29 deletions(-)
> 
> diff --git a/src/acpica/source/common/adisasm.c b/src/acpica/source/common/adisasm.c
> index 27a175a6..f549bd5a 100644
> --- a/src/acpica/source/common/adisasm.c
> +++ b/src/acpica/source/common/adisasm.c
> @@ -478,7 +478,7 @@ AdDisassembleOneTable (
>          AcpiOsPrintf (" * ACPI Data Table [%4.4s]\n *\n",
>              Table->Signature);
>          AcpiOsPrintf (" * Format: [HexOffset DecimalOffset ByteLength]  "
> -            "FieldName : FieldValue\n */\n\n");
> +            "FieldName : FieldValue (in hex)\n */\n\n");
>  
>          AcpiDmDumpDataTable (Table);
>          fprintf (stderr, "Acpi Data Table [%4.4s] decoded\n",
> diff --git a/src/acpica/source/common/ahtable.c b/src/acpica/source/common/ahtable.c
> index 80f248d2..d7ce88a9 100644
> --- a/src/acpica/source/common/ahtable.c
> +++ b/src/acpica/source/common/ahtable.c
> @@ -199,6 +199,7 @@ AcpiAhGetTableInfo (
>   */
>  const AH_TABLE      AcpiGbl_SupportedTables[] =
>  {
> +    {ACPI_SIG_AEST, "Arm Error Source Table"},
>      {ACPI_SIG_ASF,  "Alert Standard Format Table"},
>      {ACPI_SIG_BDAT, "BIOS Data ACPI Table"},
>      {ACPI_SIG_BERT, "Boot Error Record Table"},
> diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c
> index 7a4e87e1..1fa9ba16 100644
> --- a/src/acpica/source/common/dmtable.c
> +++ b/src/acpica/source/common/dmtable.c
> @@ -174,6 +174,55 @@ AcpiAhGetTableInfo (
>  
>  /* These tables map a subtable type to a description string */
>  
> +static const char           *AcpiDmAestResourceNames[] =
> +{
> +    "Cache Resource",
> +    "TLB Resource",
> +    "Generic Resource",
> +    "Unknown Resource Type"         /* Reserved */
> +};
> +
> +static const char           *AcpiDmAestSubnames[] =
> +{
> +    "Processor Error Node",
> +    "Memory Error Node",
> +    "SMMU Error Node",
> +    "Vendor-defined Error Node",
> +    "GIC Error Node",
> +    "Unknown Subtable Type"         /* Reserved */
> +};
> +
> +static const char           *AcpiDmAestCacheNames[] =
> +{
> +    "Data Cache",
> +    "Instruction Cache",
> +    "Unified Cache",
> +    "Unknown Cache Type"            /* Reserved */
> +};
> +
> +static const char           *AcpiDmAestGicNames[] =
> +{
> +    "GIC CPU",
> +    "GIC Distributor",
> +    "GIC Redistributor",
> +    "GIC ITS",
> +    "Unknown GIC Interface Type"    /* Reserved */
> +};
> +
> +static const char           *AcpiDmAestXfaceNames[] =
> +{
> +    "System Register Interface",
> +    "Memory Mapped Interface",
> +    "Unknown Interface Type"        /* Reserved */
> +};
> +
> +static const char           *AcpiDmAestXruptNames[] =
> +{
> +    "Fault Handling Interrupt",
> +    "Error Recovery Interrupt",
> +    "Unknown Interrupt Type"        /* Reserved */
> +};
> +
>  static const char           *AcpiDmAsfSubnames[] =
>  {
>      "ASF Information",
> @@ -533,6 +582,7 @@ static const char           *AcpiDmGasAccessWidth[] =
>  
>  const ACPI_DMTABLE_DATA     AcpiDmTableData[] =
>  {
> +    {ACPI_SIG_AEST, NULL,                   AcpiDmDumpAest, DtCompileAest,  TemplateAest},
>      {ACPI_SIG_ASF,  NULL,                   AcpiDmDumpAsf,  DtCompileAsf,   TemplateAsf},
>      {ACPI_SIG_BDAT, AcpiDmTableInfoBdat,    NULL,           NULL,           TemplateBdat},
>      {ACPI_SIG_BERT, AcpiDmTableInfoBert,    NULL,           NULL,           TemplateBert},
> @@ -1006,6 +1056,10 @@ AcpiDmDumpTable (
>          case ACPI_DMT_RGRT:
>          case ACPI_DMT_SDEV:
>          case ACPI_DMT_SRAT:
> +        case ACPI_DMT_AEST:
> +        case ACPI_DMT_AEST_RES:
> +        case ACPI_DMT_AEST_XFACE:
> +        case ACPI_DMT_AEST_XRUPT:
>          case ACPI_DMT_ASF:
>          case ACPI_DMT_HESTNTYP:
>          case ACPI_DMT_FADTPM:
> @@ -1035,6 +1089,8 @@ AcpiDmDumpTable (
>              break;
>  
>          case ACPI_DMT_UINT32:
> +        case ACPI_DMT_AEST_CACHE:
> +        case ACPI_DMT_AEST_GIC:
>          case ACPI_DMT_NAME4:
>          case ACPI_DMT_SIG:
>          case ACPI_DMT_LPIT:
> @@ -1087,6 +1143,12 @@ AcpiDmDumpTable (
>              ByteLength = 128;
>              break;
>  
> +        case ACPI_DMT_WPBT_UNICODE:
> +
> +            ByteLength = SubtableLength;
> +            CurrentOffset = sizeof (ACPI_TABLE_WPBT);
> +            break;
> +
>          case ACPI_DMT_UNICODE:
>          case ACPI_DMT_BUFFER:
>          case ACPI_DMT_RAW_BUFFER:
> @@ -1418,6 +1480,90 @@ AcpiDmDumpTable (
>              LastOutputBlankLine = TRUE;
>              break;
>  
> +        case ACPI_DMT_AEST:
> +
> +            /* AEST subtable types */
> +
> +            Temp8 = *Target;
> +            if (Temp8 > ACPI_AEST_NODE_TYPE_RESERVED)
> +            {
> +                Temp8 = ACPI_AEST_NODE_TYPE_RESERVED;
> +            }
> +
> +            AcpiOsPrintf (UINT8_FORMAT, *Target,
> +                AcpiDmAestSubnames[Temp8]);
> +            break;
> +
> +        case ACPI_DMT_AEST_CACHE:
> +
> +            /* AEST cache resource subtable */
> +
> +            Temp32 = *Target;
> +            if (Temp32 > ACPI_AEST_CACHE_RESERVED)
> +            {
> +                Temp32 = ACPI_AEST_CACHE_RESERVED;
> +            }
> +
> +            AcpiOsPrintf (UINT32_FORMAT, *Target,
> +                AcpiDmAestCacheNames[Temp32]);
> +            break;
> +
> +        case ACPI_DMT_AEST_GIC:
> +
> +            /* AEST GIC error subtable */
> +
> +            Temp32 = *Target;
> +            if (Temp32 > ACPI_AEST_GIC_RESERVED)
> +            {
> +                Temp32 = ACPI_AEST_GIC_RESERVED;
> +            }
> +
> +            AcpiOsPrintf (UINT32_FORMAT, *Target,
> +                AcpiDmAestGicNames[Temp32]);
> +            break;
> +
> +        case ACPI_DMT_AEST_RES:
> +
> +            /* AEST resource type subtable */
> +
> +            Temp8 = *Target;
> +            if (Temp8 > ACPI_AEST_RESOURCE_RESERVED)
> +            {
> +                Temp8 = ACPI_AEST_RESOURCE_RESERVED;
> +            }
> +
> +            AcpiOsPrintf (UINT8_FORMAT, *Target,
> +                AcpiDmAestResourceNames[Temp8]);
> +            break;
> +
> +        case ACPI_DMT_AEST_XFACE:
> +
> +            /* AEST interface structure types */
> +
> +            Temp8 = *Target;
> +            if (Temp8 > ACPI_AEST_XFACE_RESERVED)
> +            {
> +                Temp8 = ACPI_AEST_XFACE_RESERVED;
> +            }
> +
> +            AcpiOsPrintf (UINT8_FORMAT, *Target,
> +                AcpiDmAestXfaceNames[Temp8]);
> +            break;
> +
> +        case ACPI_DMT_AEST_XRUPT:
> +
> +            /* AEST interrupt structure types */
> +
> +            Temp8 = *Target;
> +            if (Temp8 > ACPI_AEST_XRUPT_RESERVED)
> +            {
> +                Temp8 = ACPI_AEST_XRUPT_RESERVED;
> +            }
> +
> +            AcpiOsPrintf (UINT8_FORMAT, *Target,
> +                AcpiDmAestXruptNames[Temp8]);
> +            break;
> +
>          case ACPI_DMT_ASF:
>  
>              /* ASF subtable types */
> @@ -1704,6 +1850,7 @@ AcpiDmDumpTable (
>              break;
>  
>          case ACPI_DMT_UNICODE:
> +        case ACPI_DMT_WPBT_UNICODE:
>  
>              if (ByteLength == 0)
>              {
> diff --git a/src/acpica/source/common/dmtbdump1.c b/src/acpica/source/common/dmtbdump1.c
> index 8fc53acf..3a97af46 100644
> --- a/src/acpica/source/common/dmtbdump1.c
> +++ b/src/acpica/source/common/dmtbdump1.c
> @@ -160,6 +160,225 @@
>          ACPI_MODULE_NAME    ("dmtbdump1")
>  
>  
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDmDumpAest
> + *
> + * PARAMETERS:  Table               - A AEST table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of a AEST table
> + *
> + * NOTE: Assumes the following table structure:
> + *      For all AEST Error Nodes:
> + *          1) An AEST Error Node, followed immediately by:
> + *          2) Any node-specific data
> + *          3) An Interface Structure (one)
> + *          4) A list (array) of Interrupt Structures
> + *
> + * AEST - ARM Error Source table. Conforms to:
> + * ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document Sep 2020
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpAest (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    ACPI_STATUS             Status;
> +    UINT32                  Offset = sizeof (ACPI_TABLE_HEADER);
> +    ACPI_AEST_HEADER        *Subtable;
> +    ACPI_AEST_HEADER        *NodeHeader;
> +    ACPI_AEST_PROCESSOR     *ProcessorSubtable;
> +    ACPI_DMTABLE_INFO       *InfoTable;
> +    ACPI_SIZE               Length;
> +    UINT8                   Type;
> +
> +
> +    /* Very small, generic main table. AEST consists of mostly subtables */
> +
> +    while (Offset < Table->Length)
> +    {
> +        NodeHeader = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset);
> +
> +        /* Dump the common error node (subtable) header */
> +
> +        Status = AcpiDmDumpTable (Table->Length, Offset, NodeHeader,
> +            NodeHeader->Length, AcpiDmTableInfoAestHdr);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +
> +        Type = NodeHeader->Type;
> +
> +        /* Setup the node-specific subtable based on the header Type field */
> +
> +        switch (Type)
> +        {
> +        case ACPI_AEST_PROCESSOR_ERROR_NODE:
> +            InfoTable = AcpiDmTableInfoAestProcError;
> +            Length = sizeof (ACPI_AEST_PROCESSOR);
> +            break;
> +
> +        case ACPI_AEST_MEMORY_ERROR_NODE:
> +            InfoTable = AcpiDmTableInfoAestMemError;
> +            Length = sizeof (ACPI_AEST_MEMORY);
> +            break;
> +
> +        case ACPI_AEST_SMMU_ERROR_NODE:
> +            InfoTable = AcpiDmTableInfoAestSmmuError;
> +            Length = sizeof (ACPI_AEST_SMMU);
> +            break;
> +
> +        case ACPI_AEST_VENDOR_ERROR_NODE:
> +            InfoTable = AcpiDmTableInfoAestVendorError;
> +            Length = sizeof (ACPI_AEST_VENDOR);
> +            break;
> +
> +        case ACPI_AEST_GIC_ERROR_NODE:
> +            InfoTable = AcpiDmTableInfoAestGicError;
> +            Length = sizeof (ACPI_AEST_GIC);
> +            break;
> +
> +        /* Error case below */
> +        default:
> +
> +            AcpiOsPrintf ("\n**** Unknown AEST Error Subtable type 0x%X\n",
> +                Type);
> +            return;
> +        }
> +
> +        /* Point past the common header (to the node-specific data) */
> +
> +        Offset += sizeof (ACPI_AEST_HEADER);
> +        Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset);
> +        AcpiOsPrintf ("\n");
> +
> +        /* Dump the node-specific subtable */
> +
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Length,
> +            InfoTable);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +        AcpiOsPrintf ("\n");
> +
> +        if (Type == ACPI_AEST_PROCESSOR_ERROR_NODE)
> +        {
> +            /*
> +             * Special handling for PROCESSOR_ERROR_NODE subtables
> +             * (to handle the Resource Substructure via the ResourceType
> +             * field).
> +             */
> +
> +            /* Point past the node-specific data */
> +
> +            Offset += Length;
> +            ProcessorSubtable = ACPI_CAST_PTR (ACPI_AEST_PROCESSOR, Subtable);
> +
> +            switch (ProcessorSubtable->ResourceType)
> +            {
> +            /* Setup the Resource Substructure subtable */
> +
> +            case ACPI_AEST_CACHE_RESOURCE:
> +                InfoTable = AcpiDmTableInfoAestCacheRsrc;
> +                Length = sizeof (ACPI_AEST_PROCESSOR_CACHE);
> +                break;
> +
> +            case ACPI_AEST_TLB_RESOURCE:
> +                InfoTable = AcpiDmTableInfoAestTlbRsrc;
> +                Length = sizeof (ACPI_AEST_PROCESSOR_TLB);
> +                break;
> +
> +            case ACPI_AEST_GENERIC_RESOURCE:
> +                InfoTable = AcpiDmTableInfoAestGenRsrc;
> +                Length = sizeof (ACPI_AEST_PROCESSOR_GENERIC);
> +                AcpiOsPrintf ("Generic Resource Type (%X) is not supported at this time\n",
> +                    ProcessorSubtable->ResourceType);
> +                break;
> +
> +            /* Error case below */
> +            default:
> +                AcpiOsPrintf ("\n**** Unknown AEST Processor Resource type 0x%X\n",
> +                    ProcessorSubtable->ResourceType);
> +                return;
> +            }
> +
> +            ProcessorSubtable = ACPI_ADD_PTR (ACPI_AEST_PROCESSOR, Table,
> +                Offset);
> +
> +            /* Dump the resource substructure subtable */
> +
> +            Status = AcpiDmDumpTable (Table->Length, Offset, ProcessorSubtable,
> +                Length, InfoTable);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return;
> +            }
> +
> +            AcpiOsPrintf ("\n");
> +        }
> +
> +        /* Point past the resource substructure or the node-specific data */
> +
> +        Offset += Length;
> +
> +        /* Dump the interface structure, required to be present */
> +
> +        Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset);
> +        if (Subtable->Type >= ACPI_AEST_XFACE_RESERVED)
> +        {
> +            AcpiOsPrintf ("\n**** Unknown AEST Node Interface type 0x%X\n",
> +                Subtable->Type);
> +            return;
> +        }
> +
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> +            sizeof (ACPI_AEST_NODE_INTERFACE), AcpiDmTableInfoAestXface);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return;
> +        }
> +
> +        /* Point past the interface structure */
> +
> +        AcpiOsPrintf ("\n");
> +        Offset += sizeof (ACPI_AEST_NODE_INTERFACE);
> +
> +        /* Dump the entire interrupt structure array, if present */
> +
> +        if (NodeHeader->NodeInterruptOffset)
> +        {
> +            Length = NodeHeader->NodeInterruptCount;
> +            Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset);
> +
> +            while (Length)
> +            {
> +                /* Dump the interrupt structure */
> +
> +                Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> +                    sizeof (ACPI_AEST_NODE_INTERRUPT),
> +                    AcpiDmTableInfoAestXrupt);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return;
> +                }
> +
> +                /* Point to the next interrupt structure */
> +
> +                Offset += sizeof (ACPI_AEST_NODE_INTERRUPT);
> +                Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset);
> +                Length--;
> +                AcpiOsPrintf ("\n");
> +            }
> +        }
> +    }
> +}
> +
> +
>  /*******************************************************************************
>   *
>   * FUNCTION:    AcpiDmDumpAsf
> diff --git a/src/acpica/source/common/dmtbdump3.c b/src/acpica/source/common/dmtbdump3.c
> index e81a703b..981a51e0 100644
> --- a/src/acpica/source/common/dmtbdump3.c
> +++ b/src/acpica/source/common/dmtbdump3.c
> @@ -681,7 +681,7 @@ AcpiDmDumpViot (
>      ACPI_TABLE_VIOT         *Viot;
>      ACPI_VIOT_HEADER        *ViotHeader;
>      UINT16                  Length;
> -    UINT16                  Offset;
> +    UINT32                  Offset;
>      ACPI_DMTABLE_INFO       *InfoTable;
>  
>      /* Main table */
> @@ -833,13 +833,12 @@ AcpiDmDumpWpbt (
>  {
>      ACPI_STATUS             Status;
>      ACPI_TABLE_WPBT         *Subtable;
> -    UINT32                  Length = Table->Length;
>      UINT16                  ArgumentsLength;
>  
>  
>      /* Dump the main table */
>  
> -    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoWpbt);
> +    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWpbt);
>      if (ACPI_FAILURE (Status))
>      {
>          return;
> @@ -850,8 +849,11 @@ AcpiDmDumpWpbt (
>      Subtable = ACPI_CAST_PTR (ACPI_TABLE_WPBT, Table);
>      ArgumentsLength = Subtable->ArgumentsLength;
>  
> -    /* Dump the arguments buffer */
> +    /* Dump the arguments buffer if present */
>  
> -    (void) AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength,
> -        AcpiDmTableInfoWpbt0);
> +    if (ArgumentsLength)
> +    {
> +        (void) AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength,
> +            AcpiDmTableInfoWpbt0);
> +    }
>  }
> diff --git a/src/acpica/source/common/dmtbinfo1.c b/src/acpica/source/common/dmtbinfo1.c
> index fbf3980d..b30cafa9 100644
> --- a/src/acpica/source/common/dmtbinfo1.c
> +++ b/src/acpica/source/common/dmtbinfo1.c
> @@ -191,6 +191,144 @@
>   */
>  
>  
> +/*******************************************************************************
> + *
> + * AEST - ARM Error Source table. Conforms to:
> + * ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document Sep 2020
> + *
> + ******************************************************************************/
> +
> +/* Common Subtable header (one per Subtable) */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoAestHdr[] =
> +{
> +    {ACPI_DMT_AEST,     ACPI_AESTH_OFFSET (Type),                   "Subtable Type", 0},
> +    {ACPI_DMT_UINT16,   ACPI_AESTH_OFFSET (Length),                 "Length", DT_LENGTH},
> +    {ACPI_DMT_UINT8,    ACPI_AESTH_OFFSET (Reserved),               "Reserved", 0},
> +    {ACPI_DMT_UINT32,   ACPI_AESTH_OFFSET (NodeSpecificOffset),     "Node Specific Offset", 0},
> +    {ACPI_DMT_UINT32,   ACPI_AESTH_OFFSET (NodeInterfaceOffset),    "Node Interface Offset", 0},
> +    {ACPI_DMT_UINT32,   ACPI_AESTH_OFFSET (NodeInterruptOffset),    "Node Interrupt Array Offset", 0},
> +    {ACPI_DMT_UINT32,   ACPI_AESTH_OFFSET (NodeInterruptCount),     "Node Interrupt Array Count", 0},
> +    {ACPI_DMT_UINT64,   ACPI_AESTH_OFFSET (TimestampRate),          "Timestamp Rate", 0},
> +    {ACPI_DMT_UINT64,   ACPI_AESTH_OFFSET (Reserved1),              "Reserved", 0},
> +    {ACPI_DMT_UINT64,   ACPI_AESTH_OFFSET (ErrorInjectionRate),     "Error Injection Rate", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/*
> + * AEST subtables (nodes)
> + */
> +
> +/* 0: Processor Error */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoAestProcError[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_AEST0_OFFSET (ProcessorId),            "Processor ID", 0},
> +    {ACPI_DMT_AEST_RES, ACPI_AEST0_OFFSET (ResourceType),           "Resource Type", 0},
> +    {ACPI_DMT_UINT8,    ACPI_AEST0_OFFSET (Reserved),               "Reserved", 0},
> +    {ACPI_DMT_UINT8,    ACPI_AEST0_OFFSET (Flags),                  "Flags (decoded Below)", 0},
> +    {ACPI_DMT_FLAG0,    ACPI_AEST0_FLAG_OFFSET (Flags, 0),          "Global", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_AEST0_FLAG_OFFSET (Flags, 0),          "Shared", 0},
> +    {ACPI_DMT_UINT8,    ACPI_AEST0_OFFSET (Revision),               "Revision", 0},
> +    {ACPI_DMT_UINT64,   ACPI_AEST0_OFFSET (ProcessorAffinity),      "Processor Affinity Structure", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 0RT: Processor Cache Resource */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoAestCacheRsrc[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_AEST0A_OFFSET (CacheReference),        "Cache Reference", 0},
> +    {ACPI_DMT_UINT32,   ACPI_AEST0A_OFFSET (Reserved),              "Reserved", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 1RT: ProcessorTLB Resource */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoAestTlbRsrc[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_AEST0B_OFFSET (TlbLevel),              "TLB Level", 0},
> +    {ACPI_DMT_UINT32,   ACPI_AEST0B_OFFSET (Reserved),              "Reserved", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 2RT: Processor Generic Resource */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoAestGenRsrc[] =
> +{
> +    {ACPI_DMT_RAW_BUFFER, 0,                                        "Resource", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 1: Memory Error */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoAestMemError[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_AEST1_OFFSET (SratProximityDomain),    "Srat Proximity Domain", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 2: Smmu Error */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoAestSmmuError[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_AEST2_OFFSET (IortNodeReference),      "Iort Node Reference", 0},
> +    {ACPI_DMT_UINT32,   ACPI_AEST2_OFFSET (SubcomponentReference),  "Subcomponent Reference", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 3: Vendor Defined */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoAestVendorError[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_AEST3_OFFSET (AcpiHid),                "ACPI HID", 0},
> +    {ACPI_DMT_UINT32,   ACPI_AEST3_OFFSET (AcpiUid),                "ACPI UID", 0},
> +    {ACPI_DMT_BUF16,    ACPI_AEST3_OFFSET (VendorSpecificData),     "Vendor Specific Data", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 4: Gic Error */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoAestGicError[] =
> +{
> +    {ACPI_DMT_AEST_GIC, ACPI_AEST4_OFFSET (InterfaceType),          "GIC Interface Type", 0},
> +    {ACPI_DMT_UINT32,   ACPI_AEST4_OFFSET (InstanceId),             "Instance ID", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* AestXface: Node Interface Structure */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoAestXface[] =
> +{
> +    {ACPI_DMT_AEST_XFACE, ACPI_AEST0D_OFFSET (Type),                "Interface Type", 0},
> +    {ACPI_DMT_UINT24,   ACPI_AEST0D_OFFSET (Reserved[0]),           "Reserved", 0},
> +    {ACPI_DMT_UINT32,   ACPI_AEST0D_OFFSET (Flags),                 "Flags (decoded below)", 0},
> +    {ACPI_DMT_FLAG0,    ACPI_AEST0D_FLAG_OFFSET (Flags, 0),         "Shared Interface", 0},
> +    {ACPI_DMT_FLAG1,    ACPI_AEST0D_FLAG_OFFSET (Flags, 0),         "Clear MISCx Registers", 0},
> +    {ACPI_DMT_UINT64,   ACPI_AEST0D_OFFSET (Address),               "Address", 0},
> +    {ACPI_DMT_UINT32,   ACPI_AEST0D_OFFSET (ErrorRecordIndex),      "Error Record Index", 0},
> +    {ACPI_DMT_UINT32,   ACPI_AEST0D_OFFSET (ErrorRecordCount),      "Error Record Count", 0},
> +    {ACPI_DMT_UINT64,   ACPI_AEST0D_OFFSET (ErrorRecordImplemented),"Error Record Implemented", 0},
> +    {ACPI_DMT_UINT64,   ACPI_AEST0D_OFFSET (ErrorStatusReporting),  "Error Status Reporting", 0},
> +    {ACPI_DMT_UINT64,   ACPI_AEST0D_OFFSET (AddressingMode),        "Addressing Mode", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* AestXrupt: Node Interrupt Structure */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoAestXrupt[] =
> +{
> +    {ACPI_DMT_AEST_XRUPT, ACPI_AEST0E_OFFSET (Type),                "Interrupt Type", 0},
> +    {ACPI_DMT_UINT16,   ACPI_AEST0E_OFFSET (Reserved),              "Reserved", 0},
> +    {ACPI_DMT_UINT8,    ACPI_AEST0E_OFFSET (Flags),                 "Flags (decoded below)", 0},
> +    {ACPI_DMT_FLAG0,    ACPI_AEST0E_FLAG_OFFSET (Flags, 0),         "Level Triggered", 0},
> +    {ACPI_DMT_UINT32,   ACPI_AEST0E_OFFSET (Gsiv),                  "Gsiv", 0},
> +    {ACPI_DMT_UINT8,    ACPI_AEST0E_OFFSET (IortId),                "IortId", 0},
> +    {ACPI_DMT_UINT24,   ACPI_AEST0E_OFFSET (Reserved1[0]),          "Reserved", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
>  /*******************************************************************************
>   *
>   * ASF - Alert Standard Format table (Signature "ASF!")
> diff --git a/src/acpica/source/common/dmtbinfo3.c b/src/acpica/source/common/dmtbinfo3.c
> index b0435019..e573676a 100644
> --- a/src/acpica/source/common/dmtbinfo3.c
> +++ b/src/acpica/source/common/dmtbinfo3.c
> @@ -759,7 +759,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoWpbt[] =
>  
>  ACPI_DMTABLE_INFO           AcpiDmTableInfoWpbt0[] =
>  {
> -    {ACPI_DMT_UNICODE,     sizeof (ACPI_TABLE_WPBT),                "Command-line Arguments", 0},
> +    {ACPI_DMT_WPBT_UNICODE, ACPI_WPBT2_OFFSET (UnicodeString),      "Command-line Arguments", DT_DESCRIBES_OPTIONAL},
>      ACPI_DMT_TERMINATOR
>  };
>  
> @@ -834,6 +834,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoGeneric[][2] =
>      ACPI_DM_GENERIC_ENTRY (ACPI_DMT_STRING,     "String"),
>      ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UNICODE,    "Unicode"),
>      ACPI_DM_GENERIC_ENTRY (ACPI_DMT_BUFFER,     "Buffer"),
> +    ACPI_DM_GENERIC_ENTRY (ACPI_DMT_BUF16,      "BUF16"),
>      ACPI_DM_GENERIC_ENTRY (ACPI_DMT_UUID,       "GUID"),
>      ACPI_DM_GENERIC_ENTRY (ACPI_DMT_STRING,     "DevicePath"),
>      ACPI_DM_GENERIC_ENTRY (ACPI_DMT_LABEL,      "Label"),
> diff --git a/src/acpica/source/compiler/aslmethod.c b/src/acpica/source/compiler/aslmethod.c
> index e9aa7f2d..5bec65e8 100644
> --- a/src/acpica/source/compiler/aslmethod.c
> +++ b/src/acpica/source/compiler/aslmethod.c
> @@ -205,6 +205,10 @@ MtMethodAnalysisWalkBegin (
>      UINT8                   ActualArgs = 0;
>      BOOLEAN                 HidExists;
>      BOOLEAN                 AdrExists;
> +    BOOLEAN                 PrsExists;
> +    BOOLEAN                 CrsExists;
> +    BOOLEAN                 SrsExists;
> +    BOOLEAN                 DisExists;
>  
>  
>      /* Build cross-reference output file if requested */
> @@ -536,8 +540,8 @@ MtMethodAnalysisWalkBegin (
>  
>          if (!HidExists && !AdrExists)
>          {
> -            AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
> -                "Device object requires a _HID or _ADR in same scope");
> +            AslError (ASL_ERROR, ASL_MSG_MISSING_DEPENDENCY, Op,
> +                "Device object requires a _HID or _ADR");
>          }
>          else if (HidExists && AdrExists)
>          {
> @@ -549,6 +553,81 @@ MtMethodAnalysisWalkBegin (
>              AslError (ASL_WARNING, ASL_MSG_MULTIPLE_TYPES, Op,
>                  "Device object requires either a _HID or _ADR, but not both");
>          }
> +
> +        /*
> +         * Check usage of _CRS, _DIS, _PRS, and _SRS objects (July 2021).
> +         *
> +         * Under the Device Object:
> +         *
> +         * 1) If _DIS is present, must have a _CRS, _PRS, and _SRS
> +         * 2) If _PRS is present, must have a _CRS and _SRS
> +         * 3) If _SRS is present, must have a _CRS and _PRS
> +         */
> +        CrsExists = ApFindNameInDeviceTree (METHOD_NAME__CRS, Op);
> +        DisExists = ApFindNameInDeviceTree (METHOD_NAME__DIS, Op);
> +        PrsExists = ApFindNameInDeviceTree (METHOD_NAME__PRS, Op);
> +        SrsExists = ApFindNameInDeviceTree (METHOD_NAME__SRS, Op);
> +
> +        /* 1) If _DIS is present, must have a _CRS, _PRS, and _SRS */
> +
> +        if (DisExists)
> +        {
> +            if (!CrsExists)
> +            {
> +                AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
> +                    "_DIS is missing a _CRS, requires a _CRS, _PRS, and a _SRS");
> +            }
> +
> +            if (!PrsExists)
> +            {
> +                AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
> +                    "_DIS is missing a _PRS, requires a _CRS, _PRS, and a _SRS");
> +            }
> +
> +            if (!SrsExists)
> +            {
> +                AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
> +                    "_DIS is missing a _SRS, requires a _CRS, _PRS, and a _SRS");
> +            }
> +        }
> +
> +        /* 2) If _PRS is present, must have a _CRS and _SRS */
> +
> +        if (PrsExists)
> +        {
> +            if (!CrsExists)
> +            {
> +                AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
> +                    "_PRS is missing a _CRS, requires a _CRS and a _SRS");
> +            }
> +
> +            if (!SrsExists)
> +            {
> +                AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
> +                    "_PRS is missing a _SRS, requires a _CRS and a _SRS");
> +            }
> +        }
> +
> +        /* 3) If _SRS is present, must have a _CRS and _PRS */
> +
> +        if (SrsExists)
> +        {
> +            if (!CrsExists)
> +            {
> +                AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
> +                    "_SRS is missing a _CRS, requires a _CRS and a _PRS");
> +            }
> +            if (!PrsExists)
> +            {
> +                AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
> +                    "_SRS is missing a _PRS, requires a _CRS and a _PRS");
> +            }
> +            if (!DisExists)
> +            {
> +                AslError (ASL_REMARK, ASL_MSG_MISSING_DEPENDENCY, Op,
> +                    "_SRS is missing a _DIS");
> +            }
> +        }
>          break;
>  
>      case PARSEOP_EVENT:
> diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c
> index 44631957..c4325c3b 100644
> --- a/src/acpica/source/compiler/aslutils.c
> +++ b/src/acpica/source/compiler/aslutils.c
> @@ -434,18 +434,20 @@ UtDisplaySupportedTables (
>  
>  
>      printf ("\nACPI tables supported by iASL version %8.8X:\n"
> -        "  (Compiler, Disassembler, Template Generator)\n\n",
> +        "  (Compiler, Disassembler, Template Generator)\n",
>          ACPI_CA_VERSION);
>  
>      /* All ACPI tables with the common table header */
>  
> -    printf ("\n  Supported ACPI tables:\n");
> +    printf ("\nKnown/Supported ACPI tables:\n");
>      for (TableData = AcpiGbl_SupportedTables, i = 1;
>           TableData->Signature; TableData++, i++)
>      {
>          printf ("%8u) %s    %s\n", i,
>              TableData->Signature, TableData->Description);
>      }
> +
> +    printf ("\nTotal %u ACPI tables\n\n", i-1);
>  }
>  
>  
> diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h
> index 4f966808..6d3dbefa 100644
> --- a/src/acpica/source/compiler/dtcompiler.h
> +++ b/src/acpica/source/compiler/dtcompiler.h
> @@ -565,6 +565,10 @@ ACPI_STATUS
>  DtCompileRsdp (
>      DT_FIELD                **PFieldList);
>  
> +ACPI_STATUS
> +DtCompileAest (
> +    void                    **PFieldList);
> +
>  ACPI_STATUS
>  DtCompileAsf (
>      void                    **PFieldList);
> @@ -753,6 +757,7 @@ DtGetGenericTableInfo (
>  
>  /* ACPI Table templates */
>  
> +extern const unsigned char  TemplateAest[];
>  extern const unsigned char  TemplateAsf[];
>  extern const unsigned char  TemplateBoot[];
>  extern const unsigned char  TemplateBdat[];
> diff --git a/src/acpica/source/compiler/dtfield.c b/src/acpica/source/compiler/dtfield.c
> index 729791d7..f4c71147 100644
> --- a/src/acpica/source/compiler/dtfield.c
> +++ b/src/acpica/source/compiler/dtfield.c
> @@ -434,14 +434,14 @@ DtCompileInteger (
>          {
>              if (Value != 1)
>              {
> -                DtError (ASL_WARNING, ASL_MSG_RESERVED_FIELD, Field,
> +                DtError (ASL_ERROR, ASL_MSG_RESERVED_FIELD, Field,
>                      "Must be one, setting to one");
>                  Value = 1;
>              }
>          }
>          else if (Value != 0)
>          {
> -            DtError (ASL_WARNING, ASL_MSG_RESERVED_FIELD, Field,
> +            DtError (ASL_ERROR, ASL_MSG_RESERVED_FIELD, Field,
>                  "Must be zero, setting to zero");
>              Value = 0;
>          }
> diff --git a/src/acpica/source/compiler/dttable1.c b/src/acpica/source/compiler/dttable1.c
> index bf710e31..2e6a8569 100644
> --- a/src/acpica/source/compiler/dttable1.c
> +++ b/src/acpica/source/compiler/dttable1.c
> @@ -170,6 +170,223 @@ static ACPI_DMTABLE_INFO           TableInfoDmarPciPath[] =
>  };
>  
>  
> +/******************************************************************************
> + *
> + * FUNCTION:    DtCompileAest
> + *
> + * PARAMETERS:  List                - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile AEST.
> + *
> + * NOTE: Assumes the following table structure:
> + *      For all AEST Error Nodes:
> + *          1) An AEST Error Node, followed immediately by:
> + *          2) Any node-specific data
> + *          3) An Interface Structure (one)
> + *          4) A list (array) of Interrupt Structures, the count as specified
> + *              in the NodeInterruptCount field of the Error Node header.
> + *
> + * AEST - ARM Error Source table. Conforms to:
> + * ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document Sep 2020
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompileAest (
> +    void                    **List)
> +{
> +    ACPI_AEST_HEADER        *ErrorNodeHeader;
> +    ACPI_AEST_PROCESSOR     *AestProcessor;
> +    DT_SUBTABLE             *Subtable;
> +    DT_SUBTABLE             *ParentTable;
> +    ACPI_DMTABLE_INFO       *InfoTable;
> +    ACPI_STATUS             Status;
> +    UINT32                  i;
> +    UINT32                  Offset;
> +    DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +
> +
> +    while (*PFieldList)
> +    {
> +        /* Compile the common error node header */
> +
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoAestHdr,
> +            &Subtable);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +
> +        /* Everything past the error node header will be a subtable */
> +
> +        DtPushSubtable (Subtable);
> +
> +        /*
> +         * Compile the node-specific structure (Based on the error
> +         * node header Type field)
> +         */
> +        ErrorNodeHeader = ACPI_CAST_PTR (ACPI_AEST_HEADER, Subtable->Buffer);
> +
> +        /* Point past the common error node header */
> +
> +        Offset = sizeof (ACPI_AEST_HEADER);
> +        ErrorNodeHeader->NodeSpecificOffset = Offset;
> +
> +        /* Decode the error node type */
> +
> +        switch (ErrorNodeHeader->Type)
> +        {
> +        case ACPI_AEST_PROCESSOR_ERROR_NODE:
> +
> +            InfoTable = AcpiDmTableInfoAestProcError;
> +            break;
> +
> +        case ACPI_AEST_MEMORY_ERROR_NODE:
> +
> +            InfoTable = AcpiDmTableInfoAestMemError;
> +            break;
> +
> +        case ACPI_AEST_SMMU_ERROR_NODE:
> +
> +            InfoTable = AcpiDmTableInfoAestSmmuError;
> +            break;
> +
> +        case ACPI_AEST_VENDOR_ERROR_NODE:
> +
> +            InfoTable = AcpiDmTableInfoAestVendorError;
> +            break;
> +
> +        case ACPI_AEST_GIC_ERROR_NODE:
> +
> +            InfoTable = AcpiDmTableInfoAestGicError;
> +            break;
> +
> +        /* Error case below */
> +        default:
> +            AcpiOsPrintf ("Unknown AEST Subtable Type: %X\n",
> +                ErrorNodeHeader->Type);
> +            return (AE_ERROR);
> +        }
> +
> +        Status = DtCompileTable (PFieldList, InfoTable, &Subtable);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        /* Point past the node-specific structure */
> +
> +        Offset += Subtable->Length;
> +        ErrorNodeHeader->NodeInterfaceOffset = Offset;
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +
> +        /* Compile any additional node-specific substructures */
> +
> +        if (ErrorNodeHeader->Type == ACPI_AEST_PROCESSOR_ERROR_NODE)
> +        {
> +            /*
> +             * Special handling for PROCESSOR_ERROR_NODE subtables
> +             * (to handle the Resource Substructure via the ResourceType
> +             * field).
> +             */
> +            AestProcessor = ACPI_CAST_PTR (ACPI_AEST_PROCESSOR,
> +                Subtable->Buffer);
> +
> +            switch (AestProcessor->ResourceType)
> +            {
> +            case ACPI_AEST_CACHE_RESOURCE:
> +
> +                InfoTable = AcpiDmTableInfoAestCacheRsrc;
> +                break;
> +
> +            case ACPI_AEST_TLB_RESOURCE:
> +
> +                InfoTable = AcpiDmTableInfoAestTlbRsrc;
> +                break;
> +
> +            case ACPI_AEST_GENERIC_RESOURCE:
> +
> +                InfoTable = AcpiDmTableInfoAestGenRsrc;
> +                AcpiOsPrintf ("Generic Resource Type (%X) is not supported at this time\n",
> +                    AestProcessor->ResourceType);
> +                return (AE_ERROR);
> +
> +            /* Error case below */
> +            default:
> +                AcpiOsPrintf ("Unknown AEST Processor Resource Type: %X\n",
> +                    AestProcessor->ResourceType);
> +                return (AE_ERROR);
> +            }
> +
> +            Status = DtCompileTable (PFieldList, InfoTable, &Subtable);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (Status);
> +            }
> +
> +            /* Point past the resource substructure subtable */
> +
> +            Offset += Subtable->Length;
> +            ErrorNodeHeader->NodeInterfaceOffset = Offset;
> +
> +            ParentTable = DtPeekSubtable ();
> +            DtInsertSubtable (ParentTable, Subtable);
> +        }
> +
> +        /* Compile the (required) node interface structure */
> +
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoAestXface,
> +            &Subtable);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        ErrorNodeHeader->NodeInterruptOffset = 0;
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +
> +        /* Compile each of the node interrupt structures */
> +
> +        if (ErrorNodeHeader->NodeInterruptCount)
> +        {
> +            /* Point to the first interrupt structure */
> +
> +            Offset += Subtable->Length;
> +            ErrorNodeHeader->NodeInterruptOffset = Offset;
> +        }
> +
> +        /* Compile each of the interrupt structures */
> +
> +        for (i = 0; i < ErrorNodeHeader->NodeInterruptCount; i++)
> +        {
> +            Status = DtCompileTable (PFieldList, AcpiDmTableInfoAestXrupt,
> +                &Subtable);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (Status);
> +            }
> +
> +            ParentTable = DtPeekSubtable ();
> +            DtInsertSubtable (ParentTable, Subtable);
> +        }
> +
> +        /* Prepare for the next AEST Error node */
> +
> +        DtPopSubtable ();
> +    }
> +
> +    return (AE_OK);
> +}
> +
> +
>  /******************************************************************************
>   *
>   * FUNCTION:    DtCompileAsf
> diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c
> index 3a0d8a22..fb41ac87 100644
> --- a/src/acpica/source/compiler/dttable2.c
> +++ b/src/acpica/source/compiler/dttable2.c
> @@ -2678,13 +2678,11 @@ DtCompileWpbt (
>      DT_SUBTABLE             *ParentTable;
>      ACPI_TABLE_WPBT         *Table;
>      ACPI_STATUS             Status;
> -    UINT16                  Length;
>  
>  
>      /* Compile the main table */
>  
> -    Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt,
> -        &Subtable);
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt, &Subtable);
>      if (ACPI_FAILURE (Status))
>      {
>          return (Status);
> @@ -2692,11 +2690,23 @@ DtCompileWpbt (
>  
>      ParentTable = DtPeekSubtable ();
>      DtInsertSubtable (ParentTable, Subtable);
> +    Table = ACPI_CAST_PTR (ACPI_TABLE_WPBT, ParentTable->Buffer);
> +
> +    /*
> +     * Exit now if there are no arguments specified. This is indicated by:
> +     * The "Command-line Arguments" field has not been specified (if specified,
> +     * it will be the last field in the field list -- after the main table).
> +     * Set the Argument Length in the main table to zero.
> +     */
> +    if (!*PFieldList)
> +    {
> +        Table->ArgumentsLength = 0;
> +        return (AE_OK);
> +    }
>  
>      /* Compile the argument list subtable */
>  
> -    Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt0,
> -        &Subtable);
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt0, &Subtable);
>      if (ACPI_FAILURE (Status))
>      {
>          return (Status);
> @@ -2704,11 +2714,7 @@ DtCompileWpbt (
>  
>      /* Extract the length of the Arguments buffer, insert into main table */
>  
> -    Length = (UINT16) Subtable->TotalLength;
> -    Table = ACPI_CAST_PTR (ACPI_TABLE_WPBT, ParentTable->Buffer);
> -    Table->ArgumentsLength = Length;
> -
> -    ParentTable = DtPeekSubtable ();
> +    Table->ArgumentsLength = (UINT16) Subtable->TotalLength;
>      DtInsertSubtable (ParentTable, Subtable);
>      return (AE_OK);
>  }
> diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h
> index 224a6a11..24c8c6f9 100644
> --- a/src/acpica/source/compiler/dttemplate.h
> +++ b/src/acpica/source/compiler/dttemplate.h
> @@ -155,6 +155,100 @@
>  
>  /* Templates for ACPI data tables */
>  
> +const unsigned char TemplateAest[] =
> +{
> +    0x41,0x45,0x53,0x54,0xCC,0x02,0x00,0x00,  /* 00000000    "AEST...." */
> +    0x01,0x2A,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    ".*INTEL " */
> +    0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65,  /* 00000010    "Template" */
> +    0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> +    0x04,0x06,0x21,0x20,0x00,0x80,0x00,0x00,  /* 00000020    "..! ...." */
> +    0x2C,0x00,0x00,0x00,0x44,0x00,0x00,0x00,  /* 00000028    ",...D..." */
> +    0x74,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000030    "t......." */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000038    "....gE#." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000040    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000048    "........" */
> +    0xCD,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000050    "........" */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000058    "....gE#." */
> +    0x33,0x33,0x22,0x22,0x00,0x00,0x00,0x00,  /* 00000060    "33""...." */
> +    0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,  /* 00000068    "........" */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000070    "....gE#." */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000078    "........" */
> +    0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000080    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000088    "........" */
> +    0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00,  /* 00000090    "........" */
> +    0x01,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x78,  /* 00000098    ".......x" */
> +    0x56,0x00,0x00,0x00,0x00,0x74,0x00,0x00,  /* 000000A0    "V....t.." */
> +    0x2C,0x00,0x00,0x00,0x44,0x00,0x00,0x00,  /* 000000A8    ",...D..." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000B0    "........" */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 000000B8    "....gE#." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000C0    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000C8    "........" */
> +    0x11,0x11,0x00,0x00,0x01,0x00,0x01,0x00,  /* 000000D0    "........" */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 000000D8    "....gE#." */
> +    0x67,0x67,0x67,0x67,0x00,0x00,0x00,0x00,  /* 000000E0    "gggg...." */
> +    0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,  /* 000000E8    "........" */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 000000F0    "....gE#." */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 000000F8    "........" */
> +    0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000100    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000108    "........" */
> +    0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00,  /* 00000110    "........" */
> +    0x01,0x60,0x00,0x00,0x2C,0x00,0x00,0x00,  /* 00000118    ".`..,..." */
> +    0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000120    "0......." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000128    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000130    "........" */
> +    0x00,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89,  /* 00000138    "........" */
> +    0x67,0x45,0x23,0x01,0xAA,0xAA,0x00,0x00,  /* 00000140    "gE#....." */
> +    0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000148    "........" */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000150    "....gE#." */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000158    "........" */
> +    0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000160    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000168    "........" */
> +    0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00,  /* 00000170    "........" */
> +    0x02,0x64,0x00,0x00,0x2C,0x00,0x00,0x00,  /* 00000178    ".d..,..." */
> +    0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000180    "4......." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000188    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000190    "........" */
> +    0x00,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89,  /* 00000198    "........" */
> +    0x67,0x45,0x23,0x01,0x55,0x55,0x55,0x55,  /* 000001A0    "gE#.UUUU" */
> +    0x66,0x66,0x66,0x66,0x01,0x00,0x00,0x00,  /* 000001A8    "ffff...." */
> +    0x03,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89,  /* 000001B0    "........" */
> +    0x67,0x45,0x23,0x01,0x00,0x00,0x00,0x00,  /* 000001B8    "gE#....." */
> +    0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 000001C0    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001C8    "........" */
> +    0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x01,  /* 000001D0    "........" */
> +    0x00,0x00,0x00,0x00,0x03,0x74,0x00,0x00,  /* 000001D8    ".....t.." */
> +    0x2C,0x00,0x00,0x00,0x44,0x00,0x00,0x00,  /* 000001E0    ",...D..." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001E8    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001F0    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001F8    "........" */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000200    "....gE#." */
> +    0x33,0x33,0x33,0x33,0x44,0x44,0x44,0x44,  /* 00000208    "3333DDDD" */
> +    0x12,0x23,0x34,0x45,0x56,0x67,0x78,0x89,  /* 00000210    ".#4EVgx." */
> +    0x9A,0xAB,0xBC,0xCD,0xDE,0xEF,0xFF,0x55,  /* 00000218    ".......U" */
> +    0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,  /* 00000220    "........" */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000228    "....gE#." */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000230    "........" */
> +    0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000238    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000240    "........" */
> +    0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00,  /* 00000248    "........" */
> +    0x04,0x7C,0x00,0x00,0x2C,0x00,0x00,0x00,  /* 00000250    ".|..,..." */
> +    0x34,0x00,0x00,0x00,0x64,0x00,0x00,0x00,  /* 00000258    "4...d..." */
> +    0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000260    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000268    "........" */
> +    0x00,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89,  /* 00000270    "........" */
> +    0x67,0x45,0x23,0x01,0x03,0x00,0x00,0x00,  /* 00000278    "gE#....." */
> +    0x88,0x88,0x77,0x77,0x00,0x00,0x00,0x00,  /* 00000280    "..ww...." */
> +    0x03,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89,  /* 00000288    "........" */
> +    0x67,0x45,0x23,0x01,0x00,0x00,0x00,0x00,  /* 00000290    "gE#....." */
> +    0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000298    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000002A0    "........" */
> +    0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x01,  /* 000002A8    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000002B0    "........" */
> +    0xBB,0xBB,0xAA,0xAA,0xCC,0x00,0x00,0x00,  /* 000002B8    "........" */
> +    0x01,0x00,0x00,0x01,0xEF,0xCD,0xAB,0x78,  /* 000002C0    ".......x" */
> +    0x56,0x00,0x00,0x00                       /* 000002C8    "V..."     */
> +};
> +
>  const unsigned char TemplateAsf[] =
>  {
>      0x41,0x53,0x46,0x21,0x72,0x00,0x00,0x00,  /* 00000000    "ASF!r..." */
> diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c
> index ba454b31..7d706da6 100644
> --- a/src/acpica/source/compiler/dtutils.c
> +++ b/src/acpica/source/compiler/dtutils.c
> @@ -452,6 +452,7 @@ DtGetFieldType (
>          break;
>  
>      case ACPI_DMT_UNICODE:
> +    case ACPI_DMT_WPBT_UNICODE:
>  
>          Type = DT_FIELD_TYPE_UNICODE;
>          break;
> @@ -586,6 +587,10 @@ DtGetFieldLength (
>      case ACPI_DMT_RGRT:
>      case ACPI_DMT_SDEV:
>      case ACPI_DMT_SRAT:
> +    case ACPI_DMT_AEST:
> +    case ACPI_DMT_AEST_RES:
> +    case ACPI_DMT_AEST_XFACE:
> +    case ACPI_DMT_AEST_XRUPT:
>      case ACPI_DMT_ASF:
>      case ACPI_DMT_HESTNTYP:
>      case ACPI_DMT_FADTPM:
> @@ -616,6 +621,8 @@ DtGetFieldLength (
>          break;
>  
>      case ACPI_DMT_UINT32:
> +    case ACPI_DMT_AEST_CACHE:
> +    case ACPI_DMT_AEST_GIC:
>      case ACPI_DMT_NAME4:
>      case ACPI_DMT_SIG:
>      case ACPI_DMT_LPIT:
> @@ -734,12 +741,13 @@ DtGetFieldLength (
>          break;
>  
>      case ACPI_DMT_UNICODE:
> +    case ACPI_DMT_WPBT_UNICODE:
>  
>          Value = DtGetFieldValue (Field);
>  
>          /* TBD: error if Value is NULL? (as below?) */
>  
> -        ByteLength = (strlen (Value) + 1) * sizeof(UINT16);
> +        ByteLength = (strlen (Value) + 1) * sizeof (UINT16);
>          break;
>  
>      default:
> diff --git a/src/acpica/source/components/dispatcher/dswexec.c b/src/acpica/source/components/dispatcher/dswexec.c
> index addc06e1..636067bf 100644
> --- a/src/acpica/source/components/dispatcher/dswexec.c
> +++ b/src/acpica/source/components/dispatcher/dswexec.c
> @@ -737,7 +737,7 @@ AcpiDsExecEndOp (
>              if (ACPI_SUCCESS (Status))
>              {
>                  Status = AcpiExWriteDataToField (ObjDesc, Op->Common.Node->Object, NULL);
> -                if ACPI_FAILURE (Status)
> +                if (ACPI_FAILURE (Status))
>                  {
>                      ACPI_EXCEPTION ((AE_INFO, Status, "While writing to buffer field"));
>                  }
> diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
> index 9b584d67..839c0edd 100644
> --- a/src/acpica/source/include/acdisasm.h
> +++ b/src/acpica/source/include/acdisasm.h
> @@ -250,6 +250,12 @@ typedef enum
>  
>      /* Types that are specific to particular ACPI tables */
>  
> +    ACPI_DMT_AEST,
> +    ACPI_DMT_AEST_CACHE,
> +    ACPI_DMT_AEST_GIC,
> +    ACPI_DMT_AEST_RES,
> +    ACPI_DMT_AEST_XFACE,
> +    ACPI_DMT_AEST_XRUPT,
>      ACPI_DMT_ASF,
>      ACPI_DMT_CEDT,
>      ACPI_DMT_DMAR,
> @@ -283,6 +289,7 @@ typedef enum
>      ACPI_DMT_SRAT,
>      ACPI_DMT_TPM2,
>      ACPI_DMT_VIOT,
> +    ACPI_DMT_WPBT_UNICODE,
>  
>      /* Special opcodes */
>  
> @@ -360,6 +367,17 @@ extern const char               *AcpiGbl_AccessTypes[];
>  extern const char               *AcpiGbl_UpdateRules[];
>  extern const char               *AcpiGbl_MatchOps[];
>  
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestHdr[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestProcError[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestCacheRsrc[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestTlbRsrc[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestGenRsrc[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestMemError[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestSmmuError[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestVendorError[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestGicError[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestXface[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestXrupt[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAsf0[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAsf1[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAsf1a[];
> @@ -681,6 +699,10 @@ AcpiDmDumpUnicode (
>      UINT32                  BufferOffset,
>      UINT32                  ByteLength);
>  
> +void
> +AcpiDmDumpAest (
> +    ACPI_TABLE_HEADER       *Table);
> +
>  void
>  AcpiDmDumpAsf (
>      ACPI_TABLE_HEADER       *Table);
> diff --git a/src/acpica/source/include/acnames.h b/src/acpica/source/include/acnames.h
> index 5e762906..9075ca74 100644
> --- a/src/acpica/source/include/acnames.h
> +++ b/src/acpica/source/include/acnames.h
> @@ -162,6 +162,7 @@
>  #define METHOD_NAME__CLS        "_CLS"
>  #define METHOD_NAME__CRS        "_CRS"
>  #define METHOD_NAME__DDN        "_DDN"
> +#define METHOD_NAME__DIS        "_DIS"
>  #define METHOD_NAME__DMA        "_DMA"
>  #define METHOD_NAME__HID        "_HID"
>  #define METHOD_NAME__INI        "_INI"
> diff --git a/src/acpica/source/include/acoutput.h b/src/acpica/source/include/acoutput.h
> index 46774ad0..b72c9a94 100644
> --- a/src/acpica/source/include/acoutput.h
> +++ b/src/acpica/source/include/acoutput.h
> @@ -561,7 +561,7 @@
>  /* Conditional execution */
>  
>  #define ACPI_DEBUG_EXEC(a)              a
> -#define ACPI_DEBUG_ONLY_MEMBERS(a)      a;
> +#define ACPI_DEBUG_ONLY_MEMBERS(a)      a
>  #define _VERBOSE_STRUCTURES
>  
>  
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index dc459c9a..7610f2e3 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                 0x20210604
> +#define ACPI_CA_VERSION                 0x20210730
>  
>  #include "acconfig.h"
>  #include "actypes.h"
> diff --git a/src/acpica/source/include/actbinfo.h b/src/acpica/source/include/actbinfo.h
> index 027e6085..f2a1a48c 100644
> --- a/src/acpica/source/include/actbinfo.h
> +++ b/src/acpica/source/include/actbinfo.h
> @@ -205,11 +205,23 @@
>  #define ACPI_WDDT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_WDDT,f)
>  #define ACPI_WDRT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_WDRT,f)
>  #define ACPI_WPBT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_WPBT,f)
> +#define ACPI_WPBT2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_WPBT_UNICODE,f)
>  #define ACPI_WSMT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_WSMT,f)
>  #define ACPI_XENV_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_XENV,f)
>  
>  /* Subtables */
>  
> +#define ACPI_AESTH_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_AEST_HEADER,f)
> +#define ACPI_AEST0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_AEST_PROCESSOR,f)
> +#define ACPI_AEST0A_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_AEST_PROCESSOR_CACHE,f)
> +#define ACPI_AEST0B_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_AEST_PROCESSOR_TLB,f)
> +#define ACPI_AEST0C_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_AEST_PROCESSOR_GENERIC,f)
> +#define ACPI_AEST1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_AEST_MEMORY,f)
> +#define ACPI_AEST2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_AEST_SMMU,f)
> +#define ACPI_AEST3_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_AEST_VENDOR,f)
> +#define ACPI_AEST4_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_AEST_GIC,f)
> +#define ACPI_AEST0D_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERFACE,f)
> +#define ACPI_AEST0E_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERRUPT,f)
>  #define ACPI_ASF0_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_ASF_INFO,f)
>  #define ACPI_ASF1_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_ASF_ALERT,f)
>  #define ACPI_ASF1a_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_ASF_ALERT_DATA,f)
> @@ -379,6 +391,9 @@
>  
>  /* Flags */
>  
> +#define ACPI_AEST0_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_AEST_PROCESSOR,f,o)
> +#define ACPI_AEST0D_FLAG_OFFSET(f,o)    ACPI_FLAG_OFFSET (ACPI_AEST_NODE_INTERFACE,f,o)
> +#define ACPI_AEST0E_FLAG_OFFSET(f,o)    ACPI_FLAG_OFFSET (ACPI_AEST_NODE_INTERRUPT,f,o)
>  #define ACPI_BGRT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_BGRT,f,o)
>  #define ACPI_DRTM_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_DRTM,f,o)
>  #define ACPI_DRTM1a_FLAG_OFFSET(f,o)    ACPI_FLAG_OFFSET (ACPI_DRTM_RESOURCE,f,o)
> diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h
> index 136ebf12..09e68293 100644
> --- a/src/acpica/source/include/actbl1.h
> +++ b/src/acpica/source/include/actbl1.h
> @@ -168,6 +168,7 @@
>   * file. Useful because they make it more difficult to inadvertently type in
>   * the wrong signature.
>   */
> +#define ACPI_SIG_AEST           "AEST"      /* Arm Error Source Table */
>  #define ACPI_SIG_ASF            "ASF!"      /* Alert Standard Format table */
>  #define ACPI_SIG_BERT           "BERT"      /* Boot Error Record Table */
>  #define ACPI_SIG_BGRT           "BGRT"      /* Boot Graphics Resource Table */
> @@ -701,7 +702,7 @@ typedef struct acpi_csrt_descriptor
>   * DBG2 - Debug Port Table 2
>   *        Version 0 (Both main table and subtables)
>   *
> - * Conforms to "Microsoft Debug Port Table 2 (DBG2)", December 10, 2015
> + * Conforms to "Microsoft Debug Port Table 2 (DBG2)", September 21, 2020
>   *
>   ******************************************************************************/
>  
> @@ -758,11 +759,24 @@ typedef struct acpi_dbg2_device
>  
>  #define ACPI_DBG2_16550_COMPATIBLE  0x0000
>  #define ACPI_DBG2_16550_SUBSET      0x0001
> +#define ACPI_DBG2_MAX311XE_SPI      0x0002
>  #define ACPI_DBG2_ARM_PL011         0x0003
> +#define ACPI_DBG2_MSM8X60           0x0004
> +#define ACPI_DBG2_16550_NVIDIA      0x0005
> +#define ACPI_DBG2_TI_OMAP           0x0006
> +#define ACPI_DBG2_APM88XXXX         0x0008
> +#define ACPI_DBG2_MSM8974           0x0009
> +#define ACPI_DBG2_SAM5250           0x000A
> +#define ACPI_DBG2_INTEL_USIF        0x000B
> +#define ACPI_DBG2_IMX6              0x000C
>  #define ACPI_DBG2_ARM_SBSA_32BIT    0x000D
>  #define ACPI_DBG2_ARM_SBSA_GENERIC  0x000E
>  #define ACPI_DBG2_ARM_DCC           0x000F
>  #define ACPI_DBG2_BCM2835           0x0010
> +#define ACPI_DBG2_SDM845_1_8432MHZ  0x0011
> +#define ACPI_DBG2_16550_WITH_GAS    0x0012
> +#define ACPI_DBG2_SDM845_7_372MHZ   0x0013
> +#define ACPI_DBG2_INTEL_LPSS        0x0014
>  
>  #define ACPI_DBG2_1394_STANDARD     0x0000
>  
> diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h
> index cb237a6b..58c1570c 100644
> --- a/src/acpica/source/include/actbl2.h
> +++ b/src/acpica/source/include/actbl2.h
> @@ -213,6 +213,193 @@
>   */
>  
>  
> +/*******************************************************************************
> + *
> + * AEST - Arm Error Source Table
> + *
> + * Conforms to: ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document
> + * September 2020.
> + *
> + ******************************************************************************/
> +
> +typedef struct acpi_table_aest
> +{
> +    ACPI_TABLE_HEADER       Header;
> +    void                    *NodeArray[];
> +
> +} ACPI_TABLE_AEST;
> +
> +/* Common Subtable header - one per Node Structure (Subtable) */
> +
> +typedef struct              acpi_aest_hdr
> +{
> +    UINT8                   Type;
> +    UINT16                  Length;
> +    UINT8                   Reserved;
> +    UINT32                  NodeSpecificOffset;
> +    UINT32                  NodeInterfaceOffset;
> +    UINT32                  NodeInterruptOffset;
> +    UINT32                  NodeInterruptCount;
> +    UINT64                  TimestampRate;
> +    UINT64                  Reserved1;
> +    UINT64                  ErrorInjectionRate;
> +
> +} ACPI_AEST_HEADER;
> +
> +/* Values for Type above */
> +
> +#define ACPI_AEST_PROCESSOR_ERROR_NODE      0
> +#define ACPI_AEST_MEMORY_ERROR_NODE         1
> +#define ACPI_AEST_SMMU_ERROR_NODE           2
> +#define ACPI_AEST_VENDOR_ERROR_NODE         3
> +#define ACPI_AEST_GIC_ERROR_NODE            4
> +#define ACPI_AEST_NODE_TYPE_RESERVED        5 /* 5 and above are reserved */
> +
> +
> +/*
> + * AEST subtables (Error nodes)
> + */
> +
> +/* 0: Processor Error */
> +
> +typedef struct              acpi_aest_processor
> +{
> +    UINT32                  ProcessorId;
> +    UINT8                   ResourceType;
> +    UINT8                   Reserved;
> +    UINT8                   Flags;
> +    UINT8                   Revision;
> +    UINT64                  ProcessorAffinity;
> +
> +} ACPI_AEST_PROCESSOR;
> +
> +/* Values for ResourceType above, related structs below */
> +
> +#define ACPI_AEST_CACHE_RESOURCE            0
> +#define ACPI_AEST_TLB_RESOURCE              1
> +#define ACPI_AEST_GENERIC_RESOURCE          2
> +#define ACPI_AEST_RESOURCE_RESERVED         3   /* 3 and above are reserved */
> +
> +/* 0R: Processor Cache Resource Substructure */
> +
> +typedef struct              acpi_aest_processor_cache
> +{
> +    UINT32                  CacheReference;
> +    UINT32                  Reserved;
> +
> +} ACPI_AEST_PROCESSOR_CACHE;
> +
> +/* Values for CacheType above */
> +
> +#define ACPI_AEST_CACHE_DATA                0
> +#define ACPI_AEST_CACHE_INSTRUCTION         1
> +#define ACPI_AEST_CACHE_UNIFIED             2
> +#define ACPI_AEST_CACHE_RESERVED            3   /* 3 and above are reserved */
> +
> +/* 1R: Processor TLB Resource Substructure */
> +
> +typedef struct              acpi_aest_processor_tlb
> +{
> +    UINT32                  TlbLevel;
> +    UINT32                  Reserved;
> +
> +} ACPI_AEST_PROCESSOR_TLB;
> +
> +/* 2R: Processor Generic Resource Substructure */
> +
> +typedef struct              acpi_aest_processor_generic
> +{
> +    UINT8                   *Resource;
> +
> +} ACPI_AEST_PROCESSOR_GENERIC;
> +
> +/* 1: Memory Error */
> +
> +typedef struct              acpi_aest_memory
> +{
> +    UINT32                  SratProximityDomain;
> +
> +} ACPI_AEST_MEMORY;
> +
> +/* 2: Smmu Error */
> +
> +typedef struct              acpi_aest_smmu
> +{
> +    UINT32                  IortNodeReference;
> +    UINT32                  SubcomponentReference;
> +
> +} ACPI_AEST_SMMU;
> +
> +/* 3: Vendor Defined */
> +
> +typedef struct              acpi_aest_vendor
> +{
> +    UINT32                  AcpiHid;
> +    UINT32                  AcpiUid;
> +    UINT8                   VendorSpecificData[16];
> +
> +} ACPI_AEST_VENDOR;
> +
> +/* 4: Gic Error */
> +
> +typedef struct              acpi_aest_gic
> +{
> +    UINT32                  InterfaceType;
> +    UINT32                  InstanceId;
> +
> +} ACPI_AEST_GIC;
> +
> +/* Values for InterfaceType above */
> +
> +#define ACPI_AEST_GIC_CPU                   0
> +#define ACPI_AEST_GIC_DISTRIBUTOR           1
> +#define ACPI_AEST_GIC_REDISTRIBUTOR         2
> +#define ACPI_AEST_GIC_ITS                   3
> +#define ACPI_AEST_GIC_RESERVED              4   /* 4 and above are reserved */
> +
> +
> +/* Node Interface Structure */
> +
> +typedef struct              acpi_aest_node_interface
> +{
> +    UINT8                   Type;
> +    UINT8                   Reserved[3];
> +    UINT32                  Flags;
> +    UINT64                  Address;
> +    UINT32                  ErrorRecordIndex;
> +    UINT32                  ErrorRecordCount;
> +    UINT64                  ErrorRecordImplemented;
> +    UINT64                  ErrorStatusReporting;
> +    UINT64                  AddressingMode;
> +
> +} ACPI_AEST_NODE_INTERFACE;
> +
> +/* Values for Type field above */
> +
> +#define ACPI_AEST_NODE_SYSTEM_REGISTER      0
> +#define ACPI_AEST_NODE_MEMORY_MAPPED        1
> +#define ACPI_AEST_XFACE_RESERVED            2   /* 2 and above are reserved */
> +
> +/* Node Interrupt Structure */
> +
> +typedef struct              acpi_aest_node_interrupt
> +{
> +    UINT8                   Type;
> +    UINT8                   Reserved[2];
> +    UINT8                   Flags;
> +    UINT32                  Gsiv;
> +    UINT8                   IortId;
> +    UINT8                   Reserved1[3];
> +
> +} ACPI_AEST_NODE_INTERRUPT;
> +
> +/* Values for Type field above */
> +
> +#define ACPI_AEST_NODE_FAULT_HANDLING       0
> +#define ACPI_AEST_NODE_ERROR_RECOVERY       1
> +#define ACPI_AEST_XRUPT_RESERVED            2   /* 2 and above are reserved */
> +
> +
>  /*******************************************************************************
>   *
>   * BDAT - BIOS Data ACPI Table
> @@ -2163,6 +2350,13 @@ typedef struct acpi_table_prmt_header
>  
>  } ACPI_TABLE_PRMT_HEADER;
>  
> +typedef struct acpi_prmt_module_header
> +{
> +	UINT16                  Revision;
> +	UINT16                  Length;
> +
> +} ACPI_PRMT_MODULE_HEADER;
> +
>  typedef struct acpi_prmt_module_info
>  {
>      UINT16                  Revision;
> diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h
> index d4260a1d..d0f7025f 100644
> --- a/src/acpica/source/include/actbl3.h
> +++ b/src/acpica/source/include/actbl3.h
> @@ -955,6 +955,12 @@ typedef struct acpi_table_wpbt
>  
>  } ACPI_TABLE_WPBT;
>  
> +typedef struct acpi_wpbt_unicode
> +{
> +    UINT16                  *UnicodeString;
> +
> +} ACPI_WPBT_UNICODE;
> +
>  
>  /*******************************************************************************
>   *
> 


Acked-by: Alex Hung <alex.hung at canonical.com>



More information about the fwts-devel mailing list