diff mbox series

[1/2] ACPICA: Update to version 20240827

Message ID 20240829160908.1526545-2-colin.i.king@gmail.com
State Accepted
Headers show
Series ACPCIA: Update to version 20240827 | expand

Commit Message

Colin Ian King Aug. 29, 2024, 4:09 p.m. UTC
Major changes in this release of ACPICA are detailed below (from
ACPICA documents/changes.txt):

 * Fix the PHAT table working: ensure that the PHAT firmware health
   record offset works correctly, fix various sub-table offsets, prevent
   segmentation faults when encountering invalid device paths.
 * Fix the optional table 4-byte signature.
 * Correct the dumping of SLIC and DBG2 tables.
 * Add support for QWordPCC and DWordPCC by Jose Marinho (ARM)
 * Fix the integer to hex string conversions by Armin Wolf
 * Detecting FACS in reduced HW mode and allowing setting waking vector
   thereby waking up from S3 state
 * Fixing issues with crossing page boundaries when mapping operation regions
 * Update the support for IORT, HMAT, MPAM, AEST, CEDT, SPCR etc. tables
 * Fix multiple issues with table parsing, compilation and disassembly
 * Allow for more flexibility in _DSM usage.

Also include hot fix:
 * Fix pointer offset into SLIC table

Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
---
 src/acpica/source/common/dmtable.c            |  18 +-
 src/acpica/source/common/dmtbdump.c           |   7 +-
 src/acpica/source/common/dmtbdump1.c          | 156 ++++++++++++++--
 src/acpica/source/common/dmtbdump2.c          | 107 +++++++----
 src/acpica/source/common/dmtbdump3.c          |   3 +-
 src/acpica/source/common/dmtbinfo1.c          | 124 +++++++++++-
 src/acpica/source/common/dmtbinfo2.c          |  13 +-
 src/acpica/source/common/dmtbinfo3.c          |   8 +-
 src/acpica/source/compiler/aslcompiler.h      |  13 +-
 src/acpica/source/compiler/aslcompiler.l      |   3 +
 src/acpica/source/compiler/asldefine.h        |   2 +-
 src/acpica/source/compiler/aslmap.c           |   3 +
 src/acpica/source/compiler/aslparseop.c       |   2 +-
 src/acpica/source/compiler/aslparser.y        |   2 +-
 src/acpica/source/compiler/aslresource.c      |  15 ++
 src/acpica/source/compiler/aslresources.y     |  45 +++++
 src/acpica/source/compiler/aslrestype2d.c     | 157 ++++++++++++++++
 src/acpica/source/compiler/aslrestype2q.c     | 156 ++++++++++++++++
 src/acpica/source/compiler/aslrestype2w.c     | 156 ++++++++++++++++
 src/acpica/source/compiler/asltokens.y        |   3 +
 src/acpica/source/compiler/asltypes.y         |   3 +
 src/acpica/source/compiler/dtfield.c          |   4 +-
 src/acpica/source/compiler/dttable1.c         | 149 ++++++++++++++-
 src/acpica/source/compiler/dttable2.c         |   2 +-
 src/acpica/source/compiler/dttemplate.h       | 176 ++++++++++--------
 src/acpica/source/compiler/dtutils.c          |  12 ++
 src/acpica/source/compiler/prmacros.c         |  10 +-
 .../source/components/debugger/dbconvert.c    |   2 +
 .../source/components/disassembler/dmwalk.c   |   2 -
 .../source/components/executer/exconvrt.c     |  56 +++++-
 .../source/components/executer/exprep.c       |   4 +
 .../source/components/executer/exregion.c     |  23 +--
 .../source/components/executer/exsystem.c     |   4 +-
 .../source/components/hardware/hwxfsleep.c    |  15 +-
 src/acpica/source/components/parser/psargs.c  |  56 ++++++
 .../source/components/resources/rsaddr.c      |   3 +-
 .../source/components/resources/rsdump.c      |   3 +-
 src/acpica/source/components/tables/tbfadt.c  |  29 ++-
 src/acpica/source/components/tables/tbutils.c |  12 +-
 .../source/components/utilities/utdelete.c    |   4 +-
 .../source/components/utilities/utinit.c      |   2 +-
 .../source/components/utilities/utosi.c       |   1 +
 .../source/components/utilities/utxfinit.c    |  28 +--
 src/acpica/source/include/acconfig.h          |   1 -
 src/acpica/source/include/acdisasm.h          |  12 ++
 src/acpica/source/include/acglobal.h          |   6 +-
 src/acpica/source/include/aclocal.h           |   2 +
 src/acpica/source/include/acoutput.h          |   5 +
 src/acpica/source/include/acpixf.h            |   4 +-
 src/acpica/source/include/acpredef.h          |   2 +-
 src/acpica/source/include/actbinfo.h          |  11 ++
 src/acpica/source/include/actbl1.h            |  17 +-
 src/acpica/source/include/actbl2.h            | 109 ++++++++++-
 src/acpica/source/include/actbl3.h            |  12 +-
 src/acpica/source/include/actypes.h           |   1 +
 src/acpica/source/include/platform/acenv.h    |   6 +
 56 files changed, 1517 insertions(+), 264 deletions(-)

Comments

Ivan Hu Sept. 2, 2024, 5:08 a.m. UTC | #1
Colin, Thanks!

Acked-by: Ivan Hu <ivan.hu@canonical.com>

On 8/30/24 00:09, Colin Ian King wrote:
> Major changes in this release of ACPICA are detailed below (from
> ACPICA documents/changes.txt):
> 
>   * Fix the PHAT table working: ensure that the PHAT firmware health
>     record offset works correctly, fix various sub-table offsets, prevent
>     segmentation faults when encountering invalid device paths.
>   * Fix the optional table 4-byte signature.
>   * Correct the dumping of SLIC and DBG2 tables.
>   * Add support for QWordPCC and DWordPCC by Jose Marinho (ARM)
>   * Fix the integer to hex string conversions by Armin Wolf
>   * Detecting FACS in reduced HW mode and allowing setting waking vector
>     thereby waking up from S3 state
>   * Fixing issues with crossing page boundaries when mapping operation regions
>   * Update the support for IORT, HMAT, MPAM, AEST, CEDT, SPCR etc. tables
>   * Fix multiple issues with table parsing, compilation and disassembly
>   * Allow for more flexibility in _DSM usage.
> 
> Also include hot fix:
>   * Fix pointer offset into SLIC table
> 
> Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
> ---
>   src/acpica/source/common/dmtable.c            |  18 +-
>   src/acpica/source/common/dmtbdump.c           |   7 +-
>   src/acpica/source/common/dmtbdump1.c          | 156 ++++++++++++++--
>   src/acpica/source/common/dmtbdump2.c          | 107 +++++++----
>   src/acpica/source/common/dmtbdump3.c          |   3 +-
>   src/acpica/source/common/dmtbinfo1.c          | 124 +++++++++++-
>   src/acpica/source/common/dmtbinfo2.c          |  13 +-
>   src/acpica/source/common/dmtbinfo3.c          |   8 +-
>   src/acpica/source/compiler/aslcompiler.h      |  13 +-
>   src/acpica/source/compiler/aslcompiler.l      |   3 +
>   src/acpica/source/compiler/asldefine.h        |   2 +-
>   src/acpica/source/compiler/aslmap.c           |   3 +
>   src/acpica/source/compiler/aslparseop.c       |   2 +-
>   src/acpica/source/compiler/aslparser.y        |   2 +-
>   src/acpica/source/compiler/aslresource.c      |  15 ++
>   src/acpica/source/compiler/aslresources.y     |  45 +++++
>   src/acpica/source/compiler/aslrestype2d.c     | 157 ++++++++++++++++
>   src/acpica/source/compiler/aslrestype2q.c     | 156 ++++++++++++++++
>   src/acpica/source/compiler/aslrestype2w.c     | 156 ++++++++++++++++
>   src/acpica/source/compiler/asltokens.y        |   3 +
>   src/acpica/source/compiler/asltypes.y         |   3 +
>   src/acpica/source/compiler/dtfield.c          |   4 +-
>   src/acpica/source/compiler/dttable1.c         | 149 ++++++++++++++-
>   src/acpica/source/compiler/dttable2.c         |   2 +-
>   src/acpica/source/compiler/dttemplate.h       | 176 ++++++++++--------
>   src/acpica/source/compiler/dtutils.c          |  12 ++
>   src/acpica/source/compiler/prmacros.c         |  10 +-
>   .../source/components/debugger/dbconvert.c    |   2 +
>   .../source/components/disassembler/dmwalk.c   |   2 -
>   .../source/components/executer/exconvrt.c     |  56 +++++-
>   .../source/components/executer/exprep.c       |   4 +
>   .../source/components/executer/exregion.c     |  23 +--
>   .../source/components/executer/exsystem.c     |   4 +-
>   .../source/components/hardware/hwxfsleep.c    |  15 +-
>   src/acpica/source/components/parser/psargs.c  |  56 ++++++
>   .../source/components/resources/rsaddr.c      |   3 +-
>   .../source/components/resources/rsdump.c      |   3 +-
>   src/acpica/source/components/tables/tbfadt.c  |  29 ++-
>   src/acpica/source/components/tables/tbutils.c |  12 +-
>   .../source/components/utilities/utdelete.c    |   4 +-
>   .../source/components/utilities/utinit.c      |   2 +-
>   .../source/components/utilities/utosi.c       |   1 +
>   .../source/components/utilities/utxfinit.c    |  28 +--
>   src/acpica/source/include/acconfig.h          |   1 -
>   src/acpica/source/include/acdisasm.h          |  12 ++
>   src/acpica/source/include/acglobal.h          |   6 +-
>   src/acpica/source/include/aclocal.h           |   2 +
>   src/acpica/source/include/acoutput.h          |   5 +
>   src/acpica/source/include/acpixf.h            |   4 +-
>   src/acpica/source/include/acpredef.h          |   2 +-
>   src/acpica/source/include/actbinfo.h          |  11 ++
>   src/acpica/source/include/actbl1.h            |  17 +-
>   src/acpica/source/include/actbl2.h            | 109 ++++++++++-
>   src/acpica/source/include/actbl3.h            |  12 +-
>   src/acpica/source/include/actypes.h           |   1 +
>   src/acpica/source/include/platform/acenv.h    |   6 +
>   56 files changed, 1517 insertions(+), 264 deletions(-)
> 
> diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c
> index e9714d2e..31fd9aeb 100644
> --- a/src/acpica/source/common/dmtable.c
> +++ b/src/acpica/source/common/dmtable.c
> @@ -190,6 +190,8 @@ static const char           *AcpiDmAestSubnames[] =
>       "SMMU Error Node",
>       "Vendor-defined Error Node",
>       "GIC Error Node",
> +    "PCIE Error Node",
> +    "PROXY Error Node",
>       "Unknown Subtable Type"         /* Reserved */
>   };
>   
> @@ -214,6 +216,7 @@ static const char           *AcpiDmAestXfaceNames[] =
>   {
>       "System Register Interface",
>       "Memory Mapped Interface",
> +    "Single Record Memory Mapped Interface",
>       "Unknown Interface Type"        /* Reserved */
>   };
>   
> @@ -257,6 +260,7 @@ static const char           *AcpiDmCedtSubnames[] =
>   {
>       "CXL Host Bridge Structure",
>       "CXL Fixed Memory Window Structure",
> +    "CXL XOR Interleave Math Structure",
>       "Unknown Subtable Type"         /* Reserved */
>   };
>   
> @@ -1082,7 +1086,7 @@ AcpiDmDumpTable (
>           {
>               AcpiOsPrintf (
>                   "/**** ACPI table terminates "
> -                "in the middle of a data structure! (dump table) \n"
> +                "in the middle of a data structure! (dump table)\n"
>                   "CurrentOffset: %X, TableLength: %X ***/", CurrentOffset, TableLength);
>               return (AE_BAD_DATA);
>           }
> @@ -1197,6 +1201,16 @@ AcpiDmDumpTable (
>               ByteLength = 18;
>               break;
>   
> +        case ACPI_DMT_BUF32:
> +
> +            ByteLength = 32;
> +            break;
> +
> +        case ACPI_DMT_BUF112:
> +
> +            ByteLength = 112;
> +            break;
> +
>           case ACPI_DMT_BUF128:
>   
>               ByteLength = 128;
> @@ -1408,6 +1422,8 @@ AcpiDmDumpTable (
>           case ACPI_DMT_BUF12:
>           case ACPI_DMT_BUF16:
>           case ACPI_DMT_BUF18:
> +        case ACPI_DMT_BUF32:
> +        case ACPI_DMT_BUF112:
>           case ACPI_DMT_BUF128:
>               /*
>                * Buffer: Size depends on the opcode and was set above.
> diff --git a/src/acpica/source/common/dmtbdump.c b/src/acpica/source/common/dmtbdump.c
> index 2feb7644..a84dc98a 100644
> --- a/src/acpica/source/common/dmtbdump.c
> +++ b/src/acpica/source/common/dmtbdump.c
> @@ -562,7 +562,7 @@ AcpiDmDumpFadt (
>   
>           /* Check for FADT revision 6 fields and up (ACPI 6.0+) */
>   
> -        if (Table->Length > ACPI_FADT_V3_SIZE)
> +        if (Table->Length > ACPI_FADT_V5_SIZE)
>           {
>               Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
>                   AcpiDmTableInfoFadt6);
> @@ -635,6 +635,11 @@ AcpiDmValidateFadtLength (
>           ExpectedLength = ACPI_FADT_V5_SIZE;
>           break;
>   
> +    case 6:
> +
> +        ExpectedLength = ACPI_FADT_V6_SIZE;
> +        break;
> +
>       default:
>   
>           return;
> diff --git a/src/acpica/source/common/dmtbdump1.c b/src/acpica/source/common/dmtbdump1.c
> index d5b6e04f..56d959fd 100644
> --- a/src/acpica/source/common/dmtbdump1.c
> +++ b/src/acpica/source/common/dmtbdump1.c
> @@ -195,6 +195,9 @@ AcpiDmDumpAest (
>       ACPI_DMTABLE_INFO       *InfoTable;
>       ACPI_SIZE               Length;
>       UINT8                   Type;
> +    UINT8                   Revision = Table->Revision;
> +    UINT32                  Count;
> +    ACPI_AEST_NODE_INTERFACE_HEADER *InterfaceHeader;
>   
>   
>       /* Very small, generic main table. AEST consists of mostly subtables */
> @@ -234,8 +237,22 @@ AcpiDmDumpAest (
>               break;
>   
>           case ACPI_AEST_VENDOR_ERROR_NODE:
> -            InfoTable = AcpiDmTableInfoAestVendorError;
> -            Length = sizeof (ACPI_AEST_VENDOR);
> +            switch (Revision)
> +            {
> +            case 1:
> +                InfoTable = AcpiDmTableInfoAestVendorError;
> +                Length = sizeof (ACPI_AEST_VENDOR);
> +                break;
> +
> +            case 2:
> +                InfoTable = AcpiDmTableInfoAestVendorV2Error;
> +                Length = sizeof (ACPI_AEST_VENDOR_V2);
> +                break;
> +
> +            default:
> +                AcpiOsPrintf ("\n**** Unknown AEST revision 0x%X\n", Revision);
> +                return;
> +            }
>               break;
>   
>           case ACPI_AEST_GIC_ERROR_NODE:
> @@ -243,6 +260,16 @@ AcpiDmDumpAest (
>               Length = sizeof (ACPI_AEST_GIC);
>               break;
>   
> +        case ACPI_AEST_PCIE_ERROR_NODE:
> +            InfoTable = AcpiDmTableInfoAestPCIeError;
> +            Length = sizeof (ACPI_AEST_PCIE);
> +            break;
> +
> +        case ACPI_AEST_PROXY_ERROR_NODE:
> +            InfoTable = AcpiDmTableInfoAestProxyError;
> +            Length = sizeof (ACPI_AEST_PROXY);
> +            break;
> +
>           /* Error case below */
>           default:
>   
> @@ -335,8 +362,57 @@ AcpiDmDumpAest (
>               return;
>           }
>   
> -        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> -            sizeof (ACPI_AEST_NODE_INTERFACE), AcpiDmTableInfoAestXface);
> +        if (Revision == 1)
> +        {
> +            InfoTable = AcpiDmTableInfoAestXface;
> +            Length = sizeof (ACPI_AEST_NODE_INTERFACE);
> +        }
> +        else if (Revision == 2)
> +        {
> +            InfoTable = AcpiDmTableInfoAestXfaceHeader;
> +            Length = sizeof (ACPI_AEST_NODE_INTERFACE_HEADER);
> +
> +            Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Length, InfoTable);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return;
> +            }
> +
> +            Offset += Length;
> +
> +            InterfaceHeader = ACPI_CAST_PTR (ACPI_AEST_NODE_INTERFACE_HEADER, Subtable);
> +            switch (InterfaceHeader->GroupFormat)
> +	        {
> +            case ACPI_AEST_NODE_GROUP_FORMAT_4K:
> +                InfoTable = AcpiDmTableInfoAestXface4k;
> +                Length = sizeof (ACPI_AEST_NODE_INTERFACE_4K);
> +                break;
> +
> +            case ACPI_AEST_NODE_GROUP_FORMAT_16K:
> +                InfoTable = AcpiDmTableInfoAestXface16k;
> +                Length = sizeof (ACPI_AEST_NODE_INTERFACE_16K);
> +                break;
> +
> +            case ACPI_AEST_NODE_GROUP_FORMAT_64K:
> +                InfoTable = AcpiDmTableInfoAestXface64k;
> +                Length = sizeof (ACPI_AEST_NODE_INTERFACE_64K);
> +                break;
> +
> +            default:
> +                AcpiOsPrintf ("\n**** Unknown AEST Interface Group Format 0x%X\n",
> +                    InterfaceHeader->GroupFormat);
> +                return;
> +            }
> +
> +            Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset);
> +        }
> +        else
> +        {
> +            AcpiOsPrintf ("\n**** Unknown AEST revision 0x%X\n", Revision);
> +            return;
> +        }
> +
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Length, InfoTable);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
> @@ -345,22 +421,36 @@ AcpiDmDumpAest (
>           /* Point past the interface structure */
>   
>           AcpiOsPrintf ("\n");
> -        Offset += sizeof (ACPI_AEST_NODE_INTERFACE);
> +        Offset += Length;
>   
>           /* Dump the entire interrupt structure array, if present */
>   
>           if (NodeHeader->NodeInterruptOffset)
>           {
> -            Length = NodeHeader->NodeInterruptCount;
> +            Count = NodeHeader->NodeInterruptCount;
>               Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset);
>   
> -            while (Length)
> +            while (Count)
>               {
>                   /* Dump the interrupt structure */
>   
> +                switch (Revision) {
> +                case 1:
> +                    InfoTable = AcpiDmTableInfoAestXrupt;
> +                    Length = sizeof (ACPI_AEST_NODE_INTERRUPT);
> +                    break;
> +
> +                case 2:
> +                    InfoTable = AcpiDmTableInfoAestXruptV2;
> +                    Length = sizeof (ACPI_AEST_NODE_INTERRUPT_V2);
> +                    break;
> +                default:
> +                    AcpiOsPrintf ("\n**** Unknown AEST revision 0x%X\n",
> +                        Revision);
> +                    return;
> +                }
>                   Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> -                    sizeof (ACPI_AEST_NODE_INTERRUPT),
> -                    AcpiDmTableInfoAestXrupt);
> +                    Length, InfoTable);
>                   if (ACPI_FAILURE (Status))
>                   {
>                       return;
> @@ -368,9 +458,9 @@ AcpiDmDumpAest (
>   
>                   /* Point to the next interrupt structure */
>   
> -                Offset += sizeof (ACPI_AEST_NODE_INTERRUPT);
> +                Offset += Length;
>                   Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset);
> -                Length--;
> +                Count--;
>                   AcpiOsPrintf ("\n");
>               }
>           }
> @@ -936,9 +1026,14 @@ AcpiDmDumpCedt (
>           case ACPI_CEDT_TYPE_CFMWS:
>           {
>               ACPI_CEDT_CFMWS *ptr = (ACPI_CEDT_CFMWS *) Subtable;
> -            unsigned int i, max = 0x01 << (ptr->InterleaveWays);
> +            unsigned int i, max;
> +
> +            if (ptr->InterleaveWays < 8)
> +                max = 1 << (ptr->InterleaveWays);
> +            else
> +                max = 3 << (ptr->InterleaveWays - 8);
>   
> -            /* print out table with first "Interleave target" */
> +	    /* print out table with first "Interleave target" */
>   
>               Status = AcpiDmDumpTable (Length, Offset, Subtable,
>                   Subtable->Length, AcpiDmTableInfoCedt1);
> @@ -964,6 +1059,37 @@ AcpiDmDumpCedt (
>               break;
>           }
>   
> +        case ACPI_CEDT_TYPE_CXIMS:
> +        {
> +            ACPI_CEDT_CXIMS *ptr = (ACPI_CEDT_CXIMS *) Subtable;
> +            unsigned int i, max = ptr->NrXormaps;
> +
> +            /* print out table with first "XOR Map" */
> +
> +            Status = AcpiDmDumpTable (Length, Offset, Subtable,
> +                Subtable->Length, AcpiDmTableInfoCedt2);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return;
> +            }
> +
> +            /* Now, print out any XOR Map beyond the first. */
> +
> +            for (i = 1; i < max; i++)
> +            {
> +                unsigned int loc_offset = Offset + (i * 1) + ACPI_OFFSET (ACPI_CEDT_CXIMS, XormapList);
> +                UINT64 *trg = &(ptr->XormapList[i]);
> +
> +                Status = AcpiDmDumpTable (Length, loc_offset, trg,
> +                        Subtable->Length, AcpiDmTableInfoCedt2_te);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return;
> +                }
> +            }
> +            break;
> +        }
> +
>           default:
>               AcpiOsPrintf ("\n**** Unknown CEDT subtable type 0x%X\n\n",
>                   Subtable->Type);
> @@ -1245,8 +1371,8 @@ AcpiDmDumpDbg2 (
>   
>           if (Subtable->OemDataOffset)
>           {
> -            Status = AcpiDmDumpTable (Length, Offset + Subtable->OemDataOffset,
> -                Table, Subtable->OemDataLength,
> +            Status = AcpiDmDumpTable (Length, Subtable->OemDataOffset,
> +                Subtable, Subtable->OemDataLength,
>                   AcpiDmTableInfoDbg2OemData);
>               if (ACPI_FAILURE (Status))
>               {
> diff --git a/src/acpica/source/common/dmtbdump2.c b/src/acpica/source/common/dmtbdump2.c
> index 71198f74..deff9c33 100644
> --- a/src/acpica/source/common/dmtbdump2.c
> +++ b/src/acpica/source/common/dmtbdump2.c
> @@ -1213,8 +1213,10 @@ AcpiDmDumpMpam (
>       ACPI_STATUS                Status;
>       ACPI_MPAM_MSC_NODE         *MpamMscNode;
>       ACPI_MPAM_RESOURCE_NODE    *MpamResourceNode;
> +    ACPI_MPAM_FUNC_DEPS	       *MpamFunctionalDependency;
>       ACPI_DMTABLE_INFO          *InfoTable;
>       UINT32                     Offset = sizeof(ACPI_TABLE_HEADER);
> +    UINT32		       TempOffset;
>       UINT32                     MpamResourceNodeLength = 0;
>   
>       while (Offset < Table->Length)
> @@ -1222,8 +1224,8 @@ AcpiDmDumpMpam (
>           MpamMscNode = ACPI_ADD_PTR (ACPI_MPAM_MSC_NODE, Table, Offset);
>   
>           /* Subtable: MSC */
> -        Status = AcpiDmDumpTable (MpamMscNode->Length, 0, MpamMscNode, 0,
> -            AcpiDmTableInfoMpam0);
> +        Status = AcpiDmDumpTable (Table->Length, Offset, MpamMscNode,
> +            MpamMscNode->Length, AcpiDmTableInfoMpam0);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
> @@ -1233,18 +1235,19 @@ AcpiDmDumpMpam (
>           Offset += sizeof(ACPI_MPAM_MSC_NODE);
>   
>           /* Subtable: MSC RIS(es) */
> -        for (UINT32 ResourceIdx = 0; ResourceIdx < MpamMscNode->NumResouceNodes; ResourceIdx++)
> +        for (UINT32 ResourceIdx = 0; ResourceIdx < MpamMscNode->NumResourceNodes; ResourceIdx++)
>           {
> +	    AcpiOsPrintf ("\n");
>               MpamResourceNode = ACPI_ADD_PTR (ACPI_MPAM_RESOURCE_NODE, Table, Offset);
>   
>               MpamResourceNodeLength = sizeof(ACPI_MPAM_RESOURCE_NODE) +
>                   MpamResourceNode->NumFunctionalDeps * sizeof(ACPI_MPAM_FUNC_DEPS);
> -
> +	    TempOffset = Offset;
>               Offset += MpamResourceNodeLength;
>   
>               /* Subtable: MSC RIS */
> -            Status = AcpiDmDumpTable (MpamResourceNodeLength, 0, MpamResourceNode, 0,
> -                AcpiDmTableInfoMpam1);
> +	    Status = AcpiDmDumpTable (Table->Length, TempOffset, MpamResourceNode,
> +		sizeof(ACPI_MPAM_RESOURCE_NODE), AcpiDmTableInfoMpam1);
>               if (ACPI_FAILURE (Status))
>               {
>                   return;
> @@ -1279,30 +1282,40 @@ AcpiDmDumpMpam (
>               }
>   
>               /* Subtable: MSC Resource Locator(s) */
> -            Status = AcpiDmDumpTable (sizeof(ACPI_MPAM_RESOURCE_LOCATOR), 0,
> -                &MpamResourceNode->Locator, 0, InfoTable);
> +	    TempOffset += ACPI_OFFSET(ACPI_MPAM_RESOURCE_NODE, Locator);
> +	    Status = AcpiDmDumpTable (Table->Length, TempOffset, &MpamResourceNode->Locator,
> +		sizeof(ACPI_MPAM_RESOURCE_LOCATOR), InfoTable);
>               if (ACPI_FAILURE (Status))
>               {
>                   return;
>               }
>   
>               /* Get the number of functional dependencies of an RIS */
> -            Status = AcpiDmDumpTable (sizeof(UINT32), 0, &MpamResourceNode->NumFunctionalDeps, 0,
> -                AcpiDmTableInfoMpam1Deps);
> +	    TempOffset += sizeof(ACPI_MPAM_RESOURCE_LOCATOR);
> +            Status = AcpiDmDumpTable (Table->Length, TempOffset, &MpamResourceNode->NumFunctionalDeps,
> +		sizeof(UINT32), AcpiDmTableInfoMpam1Deps);
>               if (ACPI_FAILURE (Status))
>               {
>                   return;
>               }
>   
> +	    TempOffset += sizeof(UINT32);
> +	    MpamFunctionalDependency = ACPI_ADD_PTR (ACPI_MPAM_FUNC_DEPS, MpamResourceNode,
> +		sizeof(ACPI_MPAM_RESOURCE_NODE));
>               /* Subtable: MSC functional dependencies */
>               for (UINT32 funcDep = 0; funcDep < MpamResourceNode->NumFunctionalDeps; funcDep++)
>               {
> +		AcpiOsPrintf ("\n");
>                   Status = AcpiDmDumpTable (sizeof(ACPI_MPAM_FUNC_DEPS), 0,
>                       &MpamResourceNode->NumFunctionalDeps, 0, AcpiDmTableInfoMpam2);
> +		Status = AcpiDmDumpTable (Table->Length, TempOffset, MpamFunctionalDependency,
> +		    sizeof(ACPI_MPAM_FUNC_DEPS), AcpiDmTableInfoMpam2);
>                   if (ACPI_FAILURE (Status))
>                   {
>                       return;
>                   }
> +		TempOffset += sizeof(ACPI_MPAM_FUNC_DEPS);
> +		MpamFunctionalDependency++;
>               }
>   
>               AcpiOsPrintf ("\n\n");
> @@ -1881,6 +1894,7 @@ AcpiDmDumpPhat (
>       ACPI_DMTABLE_INFO       *InfoTable;
>       ACPI_PHAT_HEADER        *Subtable;
>       ACPI_PHAT_VERSION_DATA  *VersionData;
> +    ACPI_PHAT_HEALTH_DATA   *HealthData;
>       UINT32                  RecordCount;
>       UINT32                  Length = Table->Length;
>       UINT32                  Offset = sizeof (ACPI_TABLE_PHAT);
> @@ -1889,7 +1903,6 @@ AcpiDmDumpPhat (
>       UINT32                  PathLength;
>       UINT32                  VendorLength;
>       UINT16                  RecordType;
> -    const wchar_t           *WideString;
>   
>   
>       Subtable = ACPI_ADD_PTR (ACPI_PHAT_HEADER, Table, sizeof (ACPI_TABLE_PHAT));
> @@ -1914,13 +1927,13 @@ AcpiDmDumpPhat (
>           case ACPI_PHAT_TYPE_FW_VERSION_DATA:
>   
>               InfoTable = AcpiDmTableInfoPhat0;
> -            SubtableLength = Offset += sizeof (ACPI_PHAT_VERSION_DATA);
> +            SubtableLength = sizeof (ACPI_PHAT_VERSION_DATA);
>               break;
>   
>           case ACPI_PHAT_TYPE_FW_HEALTH_DATA:
>   
>               InfoTable = AcpiDmTableInfoPhat1;
> -            SubtableLength = Offset += sizeof (ACPI_PHAT_TYPE_FW_HEALTH_DATA);
> +            SubtableLength = sizeof (ACPI_PHAT_HEALTH_DATA);
>               break;
>   
>           default:
> @@ -1931,13 +1944,15 @@ AcpiDmDumpPhat (
>               return;
>           }
>   
> -        Status = AcpiDmDumpTable (Length, SubtableLength, Subtable,
> +        Status = AcpiDmDumpTable (Length, Offset, Subtable,
>               SubtableLength, InfoTable);
>           if (ACPI_FAILURE (Status))
>           {
>               return;
>           }
>   
> +        Offset += SubtableLength;
> +
>           OriginalOffset = Offset;
>           switch (Subtable->Type)
>           {
> @@ -1993,39 +2008,55 @@ AcpiDmDumpPhat (
>   
>           case ACPI_PHAT_TYPE_FW_HEALTH_DATA:
>   
> -            /*
> -             * Get the length of the Device Path (UEFI wide string).
> -             * Include the wide null terminator (+2),
> -             */
> -            WideString = ACPI_ADD_PTR (wchar_t, Subtable,
> -                sizeof (ACPI_PHAT_HEALTH_DATA));
> -
> -            PathLength = (wcslen (WideString) * 2) + 2;
> -            DbgPrint (ASL_DEBUG_OUTPUT, "/* %u, PathLength %X, Offset %X, Table->Length %X */\n",
> -                __LINE__, PathLength, Offset, Length);
> +            HealthData = ACPI_CAST_PTR (ACPI_PHAT_HEALTH_DATA, Subtable);
> +            PathLength = Subtable->Length - sizeof (ACPI_PHAT_HEALTH_DATA);
> +            VendorLength = 0;
>   
> -            Status = AcpiDmDumpTable (Length, Offset,
> -                ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA)),
> -                PathLength, AcpiDmTableInfoPhat1a);
> -            Offset += PathLength;
> -            if (ACPI_FAILURE (Status))
> +            /* An offset of 0 should be ignored */
> +            if (HealthData->DeviceSpecificOffset != 0)
>               {
> -                return;
> +                if (HealthData->DeviceSpecificOffset > Subtable->Length)
> +                {
> +                    AcpiOsPrintf ("\n/* Warning: Oversized device-specific data offset %X */\n"
> +                        "/* (maximum is %X -- ignoring device-specific data) */\n",
> +                        HealthData->DeviceSpecificOffset, Subtable->Length);
> +                }
> +                else if (HealthData->DeviceSpecificOffset < sizeof (ACPI_PHAT_HEALTH_DATA))
> +                {
> +                    AcpiOsPrintf ("\n/* Warning: Undersized device-specific data offset %X */\n"
> +                        "/* (minimum is %X -- ignoring device-specific data) */\n",
> +                        HealthData->DeviceSpecificOffset, (UINT8) sizeof (ACPI_PHAT_HEALTH_DATA));
> +                }
> +                else
> +                {
> +                    PathLength = HealthData->DeviceSpecificOffset - sizeof (ACPI_PHAT_HEALTH_DATA);
> +                    VendorLength = Subtable->Length - HealthData->DeviceSpecificOffset;
> +                }
>               }
>   
> -            /* Get Device-Specific Data - length of which is the remaining subtable length. */
> +            DbgPrint (ASL_DEBUG_OUTPUT, "/* %u, PathLength %X, Offset %X */\n",
> +                __LINE__, PathLength, Offset);
>   
> -            VendorLength =
> -                Subtable->Length - sizeof (ACPI_PHAT_HEALTH_DATA) - PathLength;
> -            DbgPrint (ASL_DEBUG_OUTPUT, "%u, Subtable->Length %X, VendorLength %X, Offset %X PathLength: %X\n",
> -                __LINE__, Subtable->Length, VendorLength, Offset, PathLength);
> +            if (PathLength)
> +            {
> +                Status = AcpiDmDumpTable (Length, Offset,
> +                    ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA)),
> +                    PathLength, AcpiDmTableInfoPhat1a);
> +                if (ACPI_FAILURE (Status))
> +                {
> +                    return;
> +                }
> +
> +                Offset += PathLength;
> +            }
> +
> +            DbgPrint (ASL_DEBUG_OUTPUT, "/* %u, VendorLength %X, Offset %X */\n",
> +                __LINE__, VendorLength, Offset);
>   
>               if (VendorLength)
>               {
> -                /* Point past the Device Path, Compile the Device-Specific Data */
> -
>                   Status = AcpiDmDumpTable (Length, Offset,
> -                    ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA) + PathLength),
> +                    ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, HealthData->DeviceSpecificOffset),
>                       VendorLength, AcpiDmTableInfoPhat1b);
>                   if (ACPI_FAILURE (Status))
>                   {
> diff --git a/src/acpica/source/common/dmtbdump3.c b/src/acpica/source/common/dmtbdump3.c
> index 6e5f5d7f..1eddc391 100644
> --- a/src/acpica/source/common/dmtbdump3.c
> +++ b/src/acpica/source/common/dmtbdump3.c
> @@ -177,7 +177,8 @@ AcpiDmDumpSlic (
>       ACPI_TABLE_HEADER       *Table)
>   {
>   
> -    (void) AcpiDmDumpTable (Table->Length, sizeof (ACPI_TABLE_HEADER), Table,
> +    (void) AcpiDmDumpTable (Table->Length, sizeof (ACPI_TABLE_HEADER),
> +        (void *) ((UINT8 *)Table + sizeof (*Table)),
>           Table->Length - sizeof (*Table), AcpiDmTableInfoSlic);
>   }
>   
> diff --git a/src/acpica/source/common/dmtbinfo1.c b/src/acpica/source/common/dmtbinfo1.c
> index 0199d1d1..961ba8c9 100644
> --- a/src/acpica/source/common/dmtbinfo1.c
> +++ b/src/acpica/source/common/dmtbinfo1.c
> @@ -287,6 +287,16 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoAestVendorError[] =
>       ACPI_DMT_TERMINATOR
>   };
>   
> +/* 3: Vendor Defined V2 */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoAestVendorV2Error[] =
> +{
> +    {ACPI_DMT_UINT64,   ACPI_AEST3A_OFFSET (AcpiHid),                "ACPI HID", 0},
> +    {ACPI_DMT_UINT32,   ACPI_AEST3A_OFFSET (AcpiUid),                "ACPI UID", 0},
> +    {ACPI_DMT_BUF16,    ACPI_AEST3A_OFFSET (VendorSpecificData),     "Vendor Specific Data", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
>   /* 4: Gic Error */
>   
>   ACPI_DMTABLE_INFO           AcpiDmTableInfoAestGicError[] =
> @@ -296,6 +306,31 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoAestGicError[] =
>       ACPI_DMT_TERMINATOR
>   };
>   
> +/* 5: PCIe Error */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoAestPCIeError[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_AEST5_OFFSET (IortNodeReference),      "Iort Node Reference", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* 6: Proxy Error */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoAestProxyError[] =
> +{
> +    {ACPI_DMT_UINT64,   ACPI_AEST6_OFFSET (NodeAddress),            "Proxy Node Address", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* Common AEST structures for subtables */
> +
> +#define ACPI_DM_AEST_INTERFACE_COMMON(a) \
> +    {ACPI_DMT_UINT32,   ACPI_AEST0D##a##_OFFSET (Common.ErrorNodeDevice),               "Arm Error Node Device", 0},\
> +    {ACPI_DMT_UINT32,   ACPI_AEST0D##a##_OFFSET (Common.ProcessorAffinity),             "Processor Affinity", 0}, \
> +    {ACPI_DMT_UINT64,   ACPI_AEST0D##a##_OFFSET (Common.ErrorGroupRegisterBase),        "Err-Group Register Addr", 0}, \
> +    {ACPI_DMT_UINT64,   ACPI_AEST0D##a##_OFFSET (Common.FaultInjectRegisterBase),       "Err-Inject Register Addr", 0}, \
> +    {ACPI_DMT_UINT64,   ACPI_AEST0D##a##_OFFSET (Common.InterruptConfigRegisterBase),   "IRQ-Config Register Addr", 0},
> +
>   /* AestXface: Node Interface Structure */
>   
>   ACPI_DMTABLE_INFO           AcpiDmTableInfoAestXface[] =
> @@ -314,6 +349,60 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoAestXface[] =
>       ACPI_DMT_TERMINATOR
>   };
>   
> +/* AestXface: Node Interface Structure V2 Header */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoAestXfaceHeader[] =
> +{
> +    {ACPI_DMT_AEST_XFACE, ACPI_AEST0DH_OFFSET (Type),                "Interface Type", 0},
> +    {ACPI_DMT_UINT8,    ACPI_AEST0DH_OFFSET (GroupFormat),           "Group Format", 0},
> +    {ACPI_DMT_UINT16,   ACPI_AEST0DH_OFFSET (Reserved[0]),           "Reserved", 0},
> +    {ACPI_DMT_UINT32,   ACPI_AEST0DH_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_FLAG2,    ACPI_AEST0D_FLAG_OFFSET (Flags, 0),          "Error Node Device Valid", 0},
> +    {ACPI_DMT_FLAG3,    ACPI_AEST0D_FLAG_OFFSET (Flags, 0),          "Affinity Type", 0},
> +    {ACPI_DMT_FLAG4,    ACPI_AEST0D_FLAG_OFFSET (Flags, 0),          "Error group Address Valid", 0},
> +    {ACPI_DMT_FLAG5,    ACPI_AEST0D_FLAG_OFFSET (Flags, 0),          "Fault Injection Address Valid", 0},
> +    {ACPI_DMT_FLAG7,    ACPI_AEST0D_FLAG_OFFSET (Flags, 0),          "Interrupt Config Address valid", 0},
> +    {ACPI_DMT_UINT64,   ACPI_AEST0DH_OFFSET (Address),               "Address", 0},
> +    {ACPI_DMT_UINT32,   ACPI_AEST0DH_OFFSET (ErrorRecordIndex),      "Error Record Index", 0},
> +    {ACPI_DMT_UINT32,   ACPI_AEST0DH_OFFSET (ErrorRecordCount),      "Error Record Count", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* AestXface: Node Interface Structure V2 4K Group Format */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoAestXface4k[] =
> +{
> +    {ACPI_DMT_UINT64,   ACPI_AEST0D4_OFFSET (ErrorRecordImplemented),"Error Record Implemented", 0},
> +    {ACPI_DMT_UINT64,   ACPI_AEST0D4_OFFSET (ErrorStatusReporting),  "Error Status Reporting", 0},
> +    {ACPI_DMT_UINT64,   ACPI_AEST0D4_OFFSET (AddressingMode),        "Addressing Mode", 0},
> +    ACPI_DM_AEST_INTERFACE_COMMON(4)
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* AestXface: Node Interface Structure V2 16K Group Format */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoAestXface16k[] =
> +{
> +    {ACPI_DMT_BUF32,    ACPI_AEST0D16_OFFSET (ErrorRecordImplemented[0]),"Error Record Implemented", 0},
> +    {ACPI_DMT_BUF32,    ACPI_AEST0D16_OFFSET (ErrorStatusReporting[0]),  "Error Status Reporting", 0},
> +    {ACPI_DMT_BUF32,    ACPI_AEST0D16_OFFSET (AddressingMode[0]),        "Addressing Mode", 0},
> +    ACPI_DM_AEST_INTERFACE_COMMON(16)
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* AestXface: Node Interface Structure V2 64K Group Format */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoAestXface64k[] =
> +{
> +    {ACPI_DMT_BUF112,   ACPI_AEST0D64_OFFSET (ErrorRecordImplemented[0]),"Error Record Implemented", 0},
> +    {ACPI_DMT_BUF112,   ACPI_AEST0D64_OFFSET (ErrorStatusReporting[0]),  "Error Status Reporting", 0},
> +    {ACPI_DMT_BUF112,   ACPI_AEST0D64_OFFSET (AddressingMode[0]),        "Addressing Mode", 0},
> +    ACPI_DM_AEST_INTERFACE_COMMON(64)
> +    ACPI_DMT_TERMINATOR
> +};
> +
>   /* AestXrupt: Node Interrupt Structure */
>   
>   ACPI_DMTABLE_INFO           AcpiDmTableInfoAestXrupt[] =
> @@ -329,6 +418,20 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoAestXrupt[] =
>   };
>   
>   
> +/* AestXrupt: Node Interrupt Structure V2 */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoAestXruptV2[] =
> +{
> +    {ACPI_DMT_AEST_XRUPT, ACPI_AEST0EA_OFFSET (Type),                "Interrupt Type", 0},
> +    {ACPI_DMT_UINT16,   ACPI_AEST0EA_OFFSET (Reserved),              "Reserved", 0},
> +    {ACPI_DMT_UINT8,    ACPI_AEST0EA_OFFSET (Flags),                 "Flags (decoded below)", 0},
> +    {ACPI_DMT_FLAG0,    ACPI_AEST0EA_FLAG_OFFSET (Flags, 0),         "Level Triggered", 0},
> +    {ACPI_DMT_UINT32,   ACPI_AEST0EA_OFFSET (Gsiv),                  "Gsiv", 0},
> +    {ACPI_DMT_UINT32,   ACPI_AEST0EA_OFFSET (Reserved1[0]),          "Reserved", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +
>   /*******************************************************************************
>    *
>    * ASF - Alert Standard Format table (Signature "ASF!")
> @@ -689,7 +792,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoCedt1[] =
>       {ACPI_DMT_UINT32,   ACPI_CEDT1_OFFSET (Reserved1),            "Reserved", 0},
>       {ACPI_DMT_UINT64,   ACPI_CEDT1_OFFSET (BaseHpa),              "Window base address", 0},
>       {ACPI_DMT_UINT64,   ACPI_CEDT1_OFFSET (WindowSize),           "Window size", 0},
> -    {ACPI_DMT_UINT8,    ACPI_CEDT1_OFFSET (InterleaveWays),       "Interleave Members (2^n)", 0},
> +    {ACPI_DMT_UINT8,    ACPI_CEDT1_OFFSET (InterleaveWays),       "Interleave Members", 0},
>       {ACPI_DMT_UINT8,    ACPI_CEDT1_OFFSET (InterleaveArithmetic), "Interleave Arithmetic", 0},
>       {ACPI_DMT_UINT16,   ACPI_CEDT1_OFFSET (Reserved2),            "Reserved", 0},
>       {ACPI_DMT_UINT32,   ACPI_CEDT1_OFFSET (Granularity),          "Granularity", 0},
> @@ -705,6 +808,23 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoCedt1_te[] =
>       ACPI_DMT_TERMINATOR
>   };
>   
> +/* 2: CXL XOR Interleave Math Structure */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoCedt2[] =
> +{
> +    {ACPI_DMT_UINT16,   ACPI_CEDT2_OFFSET (Reserved1),            "Reserved", 0},
> +    {ACPI_DMT_UINT8,    ACPI_CEDT2_OFFSET (Hbig),                 "Interleave Granularity", 0},
> +    {ACPI_DMT_UINT8,    ACPI_CEDT2_OFFSET (NrXormaps),            "Xormap List Count", 0},
> +    {ACPI_DMT_UINT64,   ACPI_CEDT2_OFFSET (XormapList),           "First Xormap", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoCedt2_te[] =
> +{
> +    {ACPI_DMT_UINT64,   ACPI_CEDT2_TE_OFFSET (Xormap),            "Next Xormap", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
>   /*******************************************************************************
>    *
>    * CPEP - Corrected Platform Error Polling table
> @@ -1548,7 +1668,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoHmat2[] =
>       {ACPI_DMT_FLAGS4_8,     ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Associativity", 0},
>       {ACPI_DMT_FLAGS4_12,    ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Write Policy", 0},
>       {ACPI_DMT_FLAGS16_16,   ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Line Size", 0},
> -    {ACPI_DMT_UINT16,       ACPI_HMAT2_OFFSET (Reserved2),              "Reserved2", 0},
> +    {ACPI_DMT_UINT16,       ACPI_HMAT2_OFFSET (AddressMode),            "Address Mode", 0},
>       {ACPI_DMT_UINT16,       ACPI_HMAT2_OFFSET (NumberOfSMBIOSHandles),  "SMBIOS Handle #", 0},
>       ACPI_DMT_TERMINATOR
>   };
> diff --git a/src/acpica/source/common/dmtbinfo2.c b/src/acpica/source/common/dmtbinfo2.c
> index 834d1ef0..8242b329 100644
> --- a/src/acpica/source/common/dmtbinfo2.c
> +++ b/src/acpica/source/common/dmtbinfo2.c
> @@ -313,6 +313,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoIortAcc[] =
>       {ACPI_DMT_UINT8,    ACPI_IORTA_OFFSET (MemoryFlags),            "Memory Flags (decoded below)", 0},
>       {ACPI_DMT_FLAG0,    ACPI_IORTA_FLAG_OFFSET (MemoryFlags, 0),    "Coherency", 0},
>       {ACPI_DMT_FLAG1,    ACPI_IORTA_FLAG_OFFSET (MemoryFlags, 0),    "Device Attribute", 0},
> +    {ACPI_DMT_FLAG2,    ACPI_IORTA_FLAG_OFFSET (MemoryFlags, 0),    "Ensured Coherency of Accesses", 0},
>       ACPI_DMT_TERMINATOR
>   };
>   
> @@ -1230,7 +1231,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoMpam0[] =
>       {ACPI_DMT_UINT32,   ACPI_MPAM0_OFFSET (MaxNrdyUsec),                 "MAX_NRDY_USEC", 0},
>       {ACPI_DMT_NAME8,    ACPI_MPAM0_OFFSET (HardwareIdLinkedDevice),      "Hardware ID of linked device", 0},
>       {ACPI_DMT_UINT32,   ACPI_MPAM0_OFFSET (InstanceIdLinkedDevice),      "Instance ID of linked device", 0},
> -    {ACPI_DMT_UINT32,   ACPI_MPAM0_OFFSET (NumResouceNodes),             "Number of resource nodes", 0},
> +    {ACPI_DMT_UINT32,   ACPI_MPAM0_OFFSET (NumResourceNodes),            "Number of resource nodes", 0},
>   
>       ACPI_DMT_TERMINATOR
>   };
> @@ -1261,6 +1262,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoMpam1A[] =
>   {
>       {ACPI_DMT_UINT64,   ACPI_MPAM1A_OFFSET (CacheReference),                "Cache reference", 0},
>       {ACPI_DMT_UINT32,   ACPI_MPAM1A_OFFSET (Reserved),                      "Reserved", 0},
> +    ACPI_DMT_TERMINATOR
>   };
>   
>   /* 1B: MPAM Memory locator descriptor. A subtable of RIS.
> @@ -1270,6 +1272,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoMpam1B[] =
>   {
>       {ACPI_DMT_UINT64,   ACPI_MPAM1B_OFFSET (ProximityDomain),               "Proximity domain", 0},
>       {ACPI_DMT_UINT32,   ACPI_MPAM1B_OFFSET (Reserved),                      "Reserved", 0},
> +    ACPI_DMT_TERMINATOR
>   };
>   
>   /* 1C: MPAM SMMU locator descriptor. A subtable of RIS.
> @@ -1279,6 +1282,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoMpam1C[] =
>   {
>       {ACPI_DMT_UINT64,   ACPI_MPAM1C_OFFSET (SmmuInterface),                 "SMMU Interface", 0},
>       {ACPI_DMT_UINT32,   ACPI_MPAM1C_OFFSET (Reserved),                      "Reserved", 0},
> +    ACPI_DMT_TERMINATOR
>   };
>   
>   /* 1D: MPAM Memory-side cache locator descriptor. A subtable of RIS.
> @@ -1286,9 +1290,10 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoMpam1C[] =
>    */
>   ACPI_DMTABLE_INFO           AcpiDmTableInfoMpam1D[] =
>   {
> -    {ACPI_DMT_UINT56,   ACPI_MPAM1D_OFFSET (Level),                         "Reserved", 0},
> +    {ACPI_DMT_UINT56,   ACPI_MPAM1D_OFFSET (Reserved),                      "Reserved", 0},
>       {ACPI_DMT_UINT8,    ACPI_MPAM1D_OFFSET (Level),                         "Level", 0},
>       {ACPI_DMT_UINT32,   ACPI_MPAM1D_OFFSET (Reference),                     "Reference", 0},
> +    ACPI_DMT_TERMINATOR
>   };
>   
>   /* 1E: MPAM ACPI device locator descriptor. A subtable of RIS.
> @@ -1298,6 +1303,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoMpam1E[] =
>   {
>       {ACPI_DMT_UINT64,   ACPI_MPAM1E_OFFSET (AcpiHwId),                      "ACPI Hardware ID", 0},
>       {ACPI_DMT_UINT32,   ACPI_MPAM1E_OFFSET (AcpiUniqueId),                  "ACPI Unique ID", 0},
> +    ACPI_DMT_TERMINATOR
>   };
>   
>   /* 1F: MPAM Interconnect locator descriptor. A subtable of RIS.
> @@ -1307,6 +1313,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoMpam1F[] =
>   {
>       {ACPI_DMT_UINT64,   ACPI_MPAM1F_OFFSET (InterConnectDescTblOff),        "Interconnect descriptor table offset", 0},
>       {ACPI_DMT_UINT32,   ACPI_MPAM1F_OFFSET (Reserved),                      "Reserved", 0},
> +    ACPI_DMT_TERMINATOR
>   };
>   
>   /* 1G: MPAM Locator structure.
> @@ -1316,6 +1323,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoMpam1G[] =
>   {
>       {ACPI_DMT_UINT64,   ACPI_MPAM1G_OFFSET (Descriptor1),                   "Descriptor1", 0},
>       {ACPI_DMT_UINT32,   ACPI_MPAM1G_OFFSET (Descriptor2),                   "Descriptor2", 0},
> +    ACPI_DMT_TERMINATOR
>   };
>   
>   /* 2: MPAM Functional dependency descriptor.
> @@ -1325,6 +1333,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoMpam2[] =
>   {
>       {ACPI_DMT_UINT32,   ACPI_MPAM2_OFFSET (Producer),                       "Producer", 0},
>       {ACPI_DMT_UINT32,   ACPI_MPAM2_OFFSET (Reserved),                       "Reserved", 0},
> +    ACPI_DMT_TERMINATOR
>   };
>   
>   
> diff --git a/src/acpica/source/common/dmtbinfo3.c b/src/acpica/source/common/dmtbinfo3.c
> index b06edb82..2f67e5e7 100644
> --- a/src/acpica/source/common/dmtbinfo3.c
> +++ b/src/acpica/source/common/dmtbinfo3.c
> @@ -255,7 +255,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoSpcr[] =
>       {ACPI_DMT_UINT8,    ACPI_SPCR_OFFSET (StopBits),                "Stop Bits", 0},
>       {ACPI_DMT_UINT8,    ACPI_SPCR_OFFSET (FlowControl),             "Flow Control", 0},
>       {ACPI_DMT_UINT8,    ACPI_SPCR_OFFSET (TerminalType),            "Terminal Type", 0},
> -    {ACPI_DMT_UINT8,    ACPI_SPCR_OFFSET (Reserved2),               "Reserved", 0},
> +    {ACPI_DMT_UINT8,    ACPI_SPCR_OFFSET (Language),                "Language", 0},
>       {ACPI_DMT_UINT16,   ACPI_SPCR_OFFSET (PciDeviceId),             "PCI Device ID", 0},
>       {ACPI_DMT_UINT16,   ACPI_SPCR_OFFSET (PciVendorId),             "PCI Vendor ID", 0},
>       {ACPI_DMT_UINT8,    ACPI_SPCR_OFFSET (PciBus),                  "PCI Bus", 0},
> @@ -263,7 +263,11 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoSpcr[] =
>       {ACPI_DMT_UINT8,    ACPI_SPCR_OFFSET (PciFunction),             "PCI Function", 0},
>       {ACPI_DMT_UINT32,   ACPI_SPCR_OFFSET (PciFlags),                "PCI Flags", 0},
>       {ACPI_DMT_UINT8,    ACPI_SPCR_OFFSET (PciSegment),              "PCI Segment", 0},
> -    {ACPI_DMT_UINT32,   ACPI_SPCR_OFFSET (Reserved2),               "Reserved", 0},
> +    {ACPI_DMT_UINT32,   ACPI_SPCR_OFFSET (UartClkFreq),             "Uart Clock Freq", 0},
> +    {ACPI_DMT_UINT32,   ACPI_SPCR_OFFSET (PreciseBaudrate),         "Precise Baud rate", 0},
> +    {ACPI_DMT_UINT16,   ACPI_SPCR_OFFSET (NameSpaceStringLength),   "NameSpaceStringLength", 0},
> +    {ACPI_DMT_UINT16,   ACPI_SPCR_OFFSET (NameSpaceStringOffset),   "NameSpaceStringOffset", 0},
> +    {ACPI_DMT_STRING,   ACPI_SPCR_OFFSET (NameSpaceString),         "NamespaceString", 0},
>       ACPI_DMT_TERMINATOR
>   };
>   
> diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h
> index 36683e4a..45c12fb2 100644
> --- a/src/acpica/source/compiler/aslcompiler.h
> +++ b/src/acpica/source/compiler/aslcompiler.h
> @@ -1582,9 +1582,12 @@ RsDoDwordMemoryDescriptor (
>       ASL_RESOURCE_INFO       *Info);
>   
>   ASL_RESOURCE_NODE *
> -RsDoDwordSpaceDescriptor (
> +RsDoDwordPccDescriptor (
>       ASL_RESOURCE_INFO       *Info);
>   
> +ASL_RESOURCE_NODE *
> +RsDoDwordSpaceDescriptor (
> +    ASL_RESOURCE_INFO       *Info);
>   
>   /*
>    * aslrestype2e - Extended address descriptors
> @@ -1613,6 +1616,10 @@ ASL_RESOURCE_NODE *
>   RsDoQwordMemoryDescriptor (
>       ASL_RESOURCE_INFO       *Info);
>   
> +ASL_RESOURCE_NODE *
> +RsDoQwordPccDescriptor (
> +    ASL_RESOURCE_INFO       *Info);
> +
>   ASL_RESOURCE_NODE *
>   RsDoQwordSpaceDescriptor (
>       ASL_RESOURCE_INFO       *Info);
> @@ -1625,6 +1632,10 @@ ASL_RESOURCE_NODE *
>   RsDoWordIoDescriptor (
>       ASL_RESOURCE_INFO       *Info);
>   
> +ASL_RESOURCE_NODE *
> +RsDoWordPccDescriptor (
> +    ASL_RESOURCE_INFO       *Info);
> +
>   ASL_RESOURCE_NODE *
>   RsDoWordSpaceDescriptor (
>       ASL_RESOURCE_INFO       *Info);
> diff --git a/src/acpica/source/compiler/aslcompiler.l b/src/acpica/source/compiler/aslcompiler.l
> index 6345cdfb..25e2d9ab 100644
> --- a/src/acpica/source/compiler/aslcompiler.l
> +++ b/src/acpica/source/compiler/aslcompiler.l
> @@ -438,6 +438,7 @@ NamePathTail                [.]{NameSeg}
>   "DMA"                       { count (1); return (PARSEOP_DMA); }
>   "DWordIO"                   { count (1); return (PARSEOP_DWORDIO); }
>   "DWordMemory"               { count (1); return (PARSEOP_DWORDMEMORY); }
> +"DWordPcc"                  { count (1); return (PARSEOP_DWORDPCC); }
>   "DWordSpace"                { count (1); return (PARSEOP_DWORDSPACE); }
>   "EndDependentFn"            { count (1); return (PARSEOP_ENDDEPENDENTFN); }
>   "ExtendedIO"                { count (1); return (PARSEOP_EXTENDEDIO); }
> @@ -464,6 +465,7 @@ NamePathTail                [.]{NameSeg}
>   "ClockInput"                { count (1); return (PARSEOP_CLOCKINPUT); }
>   "QWordIO"                   { count (1); return (PARSEOP_QWORDIO); }
>   "QWordMemory"               { count (1); return (PARSEOP_QWORDMEMORY); }
> +"QWordPcc"                  { count (1); return (PARSEOP_DWORDPCC); }
>   "QWordSpace"                { count (1); return (PARSEOP_QWORDSPACE); }
>   "Register"                  { count (1); return (PARSEOP_REGISTER); }
>   "SpiSerialBus"              { count (1); return (PARSEOP_SPI_SERIALBUS); }
> @@ -476,6 +478,7 @@ NamePathTail                [.]{NameSeg}
>   "VendorShort"               { count (1); return (PARSEOP_VENDORSHORT); }
>   "WordBusNumber"             { count (1); return (PARSEOP_WORDBUSNUMBER); }
>   "WordIO"                    { count (1); return (PARSEOP_WORDIO); }
> +"WordPcc"                   { count (1); return (PARSEOP_DWORDPCC); }
>   "WordSpace"                 { count (1); return (PARSEOP_WORDSPACE); }
>   
>   
> diff --git a/src/acpica/source/compiler/asldefine.h b/src/acpica/source/compiler/asldefine.h
> index 43673d37..ab08c5f4 100644
> --- a/src/acpica/source/compiler/asldefine.h
> +++ b/src/acpica/source/compiler/asldefine.h
> @@ -162,7 +162,7 @@
>   #define ASL_CREATOR_ID              "INTL"
>   #define ASL_DEFINE                  "__IASL__"
>   #define ASL_PREFIX                  "iASL: "
> -#define ASL_COMPLIANCE              "Supports ACPI Specification Revision 6.3"
> +#define ASL_COMPLIANCE              "Supports ACPI Specification Revision 6.5"
>   
>   
>   /* Configuration constants */
> diff --git a/src/acpica/source/compiler/aslmap.c b/src/acpica/source/compiler/aslmap.c
> index 0ad71160..d3b9ecac 100644
> --- a/src/acpica/source/compiler/aslmap.c
> +++ b/src/acpica/source/compiler/aslmap.c
> @@ -319,6 +319,7 @@ const ASL_MAPPING_ENTRY     AslKeywordMapping [] =
>   /* DWORDCONST */                OP_TABLE_ENTRY (AML_RAW_DATA_DWORD,         0,                              0,                  ACPI_BTYPE_INTEGER),
>   /* DWORDIO */                   OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
>   /* DWORDMEMORY */               OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
> +/* DWORDPCC */                  OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
>   /* DWORDSPACE */                OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
>   /* EISAID */                    OP_TABLE_ENTRY (AML_DWORD_OP,               0,                              0,                  ACPI_BTYPE_INTEGER),
>   /* ELSE */                      OP_TABLE_ENTRY (AML_ELSE_OP,                0,                              OP_AML_PACKAGE,     0),
> @@ -473,6 +474,7 @@ const ASL_MAPPING_ENTRY     AslKeywordMapping [] =
>   /* QWORDCONST */                OP_TABLE_ENTRY (AML_RAW_DATA_QWORD,         0,                              0,                  ACPI_BTYPE_INTEGER),
>   /* QWORDIO */                   OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
>   /* QWORDMEMORY */               OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
> +/* QWORDPCC */                  OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
>   /* QWORDSPACE */                OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
>   /* RANGE_TYPE_ENTIRE */         OP_TABLE_ENTRY (AML_BYTE_OP,                3,                              0,                  0),
>   /* RANGE_TYPE_ISAONLY */        OP_TABLE_ENTRY (AML_BYTE_OP,                2,                              0,                  0),
> @@ -560,6 +562,7 @@ const ASL_MAPPING_ENTRY     AslKeywordMapping [] =
>   /* WORDBUSNUMBER */             OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
>   /* WORDCONST */                 OP_TABLE_ENTRY (AML_RAW_DATA_WORD,          0,                              0,                  ACPI_BTYPE_INTEGER),
>   /* WORDIO */                    OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
> +/* WORDPCC */                   OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
>   /* WORDSPACE */                 OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
>   /* XFERSIZE_8 */                OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
>   /* XFERSIZE_16 */               OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
> diff --git a/src/acpica/source/compiler/aslparseop.c b/src/acpica/source/compiler/aslparseop.c
> index 78a207f0..e415e101 100644
> --- a/src/acpica/source/compiler/aslparseop.c
> +++ b/src/acpica/source/compiler/aslparseop.c
> @@ -790,7 +790,7 @@ TrCreateConstantLeafOp (
>   
>       DbgPrint (ASL_PARSE_OUTPUT,
>           "\nCreateConstantLeafOp  Ln/Col %u/%u NewOp %p  "
> -        "Op %s  Value %8.8X%8.8X  \n",
> +        "Op %s  Value %8.8X%8.8X\n",
>           Op->Asl.LineNumber, Op->Asl.Column, Op, UtGetOpName (ParseOpcode),
>           ACPI_FORMAT_UINT64 (Op->Asl.Value.Integer));
>   
> diff --git a/src/acpica/source/compiler/aslparser.y b/src/acpica/source/compiler/aslparser.y
> index 19a34ea8..0161c6ca 100644
> --- a/src/acpica/source/compiler/aslparser.y
> +++ b/src/acpica/source/compiler/aslparser.y
> @@ -208,7 +208,7 @@ AslLocalAllocate (
>    * These shift/reduce conflicts are expected. There should be zero
>    * reduce/reduce conflicts.
>    */
> -%expect 128
> +%expect 134
>   
>   /*! [Begin] no source code translation */
>   
> diff --git a/src/acpica/source/compiler/aslresource.c b/src/acpica/source/compiler/aslresource.c
> index 0a24d608..4fed02ae 100644
> --- a/src/acpica/source/compiler/aslresource.c
> +++ b/src/acpica/source/compiler/aslresource.c
> @@ -788,6 +788,11 @@ RsDoOneResourceDescriptor (
>           Rnode = RsDoDwordMemoryDescriptor (Info);
>           break;
>   
> +    case PARSEOP_DWORDPCC:
> +
> +        Rnode = RsDoDwordPccDescriptor (Info);
> +        break;
> +
>       case PARSEOP_DWORDSPACE:
>   
>           Rnode = RsDoDwordSpaceDescriptor (Info);
> @@ -889,6 +894,11 @@ RsDoOneResourceDescriptor (
>           Rnode = RsDoQwordMemoryDescriptor (Info);
>           break;
>   
> +    case PARSEOP_QWORDPCC:
> +
> +        Rnode = RsDoQwordPccDescriptor (Info);
> +        break;
> +
>       case PARSEOP_QWORDSPACE:
>   
>           Rnode = RsDoQwordSpaceDescriptor (Info);
> @@ -963,6 +973,11 @@ RsDoOneResourceDescriptor (
>           Rnode = RsDoWordIoDescriptor (Info);
>           break;
>   
> +    case PARSEOP_WORDPCC:
> +
> +        Rnode = RsDoWordPccDescriptor (Info);
> +        break;
> +
>       case PARSEOP_WORDSPACE:
>   
>           Rnode = RsDoWordSpaceDescriptor (Info);
> diff --git a/src/acpica/source/compiler/aslresources.y b/src/acpica/source/compiler/aslresources.y
> index 46ecfa25..16a70b90 100644
> --- a/src/acpica/source/compiler/aslresources.y
> +++ b/src/acpica/source/compiler/aslresources.y
> @@ -194,6 +194,7 @@ ResourceMacroTerm
>       | DMATerm                       {}
>       | DWordIOTerm                   {}
>       | DWordMemoryTerm               {}
> +    | DWordPccTerm                  {}
>       | DWordSpaceTerm                {}
>       | EndDependentFnTerm            {}
>       | ExtendedIOTerm                {}
> @@ -220,6 +221,7 @@ ResourceMacroTerm
>       | PinGroupFunctionTerm          {}
>       | QWordIOTerm                   {}
>       | QWordMemoryTerm               {}
> +    | QWordPccTerm                  {}
>       | QWordSpaceTerm                {}
>       | RegisterTerm                  {}
>       | SpiSerialBusTerm              {}
> @@ -232,6 +234,7 @@ ResourceMacroTerm
>       | VendorShortTerm               {}
>       | WordBusNumberTerm             {}
>       | WordIOTerm                    {}
> +    | WordPccTerm                   {}
>       | WordSpaceTerm                 {}
>       ;
>   
> @@ -317,6 +320,20 @@ DWordMemoryTerm
>           error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
>       ;
>   
> +DWordPccTerm
> +    : PARSEOP_DWORDPCC
> +        PARSEOP_OPEN_PAREN           {$<n>$ = TrCreateLeafOp (PARSEOP_DWORDPCC);}
> +        ByteConstExpr
> +        OptionalByteConstExpr
> +        OptionalStringData
> +        OptionalNameString_Last
> +        PARSEOP_CLOSE_PAREN                         {$$ = TrLinkOpChildren ($<n>3,4,
> +                                                        $4,$5,$6,$7);}
> +    | PARSEOP_DWORDPCC
> +        PARSEOP_OPEN_PAREN
> +        error PARSEOP_CLOSE_PAREN                   {$$ = AslDoError(); yyclearin;}
> +    ;
> +
>   DWordSpaceTerm
>       : PARSEOP_DWORDSPACE
>           PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafOp (PARSEOP_DWORDSPACE);}
> @@ -784,6 +801,20 @@ QWordMemoryTerm
>           error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
>       ;
>   
> +QWordPccTerm
> +    : PARSEOP_QWORDPCC
> +        PARSEOP_OPEN_PAREN           {$<n>$ = TrCreateLeafOp (PARSEOP_QWORDPCC);}
> +        ByteConstExpr
> +        OptionalByteConstExpr
> +        OptionalStringData
> +        OptionalNameString_Last
> +        PARSEOP_CLOSE_PAREN                         {$$ = TrLinkOpChildren ($<n>3,4,
> +                                                        $4,$5,$6,$7);}
> +    | PARSEOP_QWORDPCC
> +        PARSEOP_OPEN_PAREN
> +        error PARSEOP_CLOSE_PAREN                   {$$ = AslDoError(); yyclearin;}
> +    ;
> +
>   QWordSpaceTerm
>       : PARSEOP_QWORDSPACE
>           PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafOp (PARSEOP_QWORDSPACE);}
> @@ -1012,6 +1043,20 @@ WordIOTerm
>           error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
>       ;
>   
> +WordPccTerm
> +    : PARSEOP_WORDPCC
> +        PARSEOP_OPEN_PAREN           {$<n>$ = TrCreateLeafOp (PARSEOP_WORDPCC);}
> +        ByteConstExpr
> +        OptionalByteConstExpr
> +        OptionalStringData
> +        OptionalNameString_Last
> +        PARSEOP_CLOSE_PAREN                         {$$ = TrLinkOpChildren ($<n>3,4,
> +                                                        $4,$5,$6,$7);}
> +    | PARSEOP_WORDPCC
> +        PARSEOP_OPEN_PAREN
> +        error PARSEOP_CLOSE_PAREN                   {$$ = AslDoError(); yyclearin;}
> +    ;
> +
>   WordSpaceTerm
>       : PARSEOP_WORDSPACE
>           PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafOp (PARSEOP_WORDSPACE);}
> diff --git a/src/acpica/source/compiler/aslrestype2d.c b/src/acpica/source/compiler/aslrestype2d.c
> index e9efac18..b7eb085e 100644
> --- a/src/acpica/source/compiler/aslrestype2d.c
> +++ b/src/acpica/source/compiler/aslrestype2d.c
> @@ -158,11 +158,168 @@
>   /*
>    * This module contains the Dword (32-bit) address space descriptors:
>    *
> + * DWordPcc
>    * DwordIO
>    * DwordMemory
>    * DwordSpace
>    */
>   
> +
> +/*******************************************************************************
> + *
> + * FUNCTION:    RsDoDwordPccDescriptor
> + *
> + * PARAMETERS:  Info                - Parse Op and resource template offset
> + *
> + * RETURN:      Completed resource node
> + *
> + * DESCRIPTION: Construct a long "DWordPcc" descriptor
> + *
> + ******************************************************************************/
> +
> +ASL_RESOURCE_NODE *
> +RsDoDwordPccDescriptor (
> +    ASL_RESOURCE_INFO       *Info)
> +{
> +    AML_RESOURCE            *Descriptor;
> +    ACPI_PARSE_OBJECT       *InitializerOp;
> +    ACPI_PARSE_OBJECT       *MinOp = NULL;
> +    ACPI_PARSE_OBJECT       *MaxOp = NULL;
> +    ACPI_PARSE_OBJECT       *LengthOp = NULL;
> +    ACPI_PARSE_OBJECT       *GranOp = NULL;
> +    ASL_RESOURCE_NODE       *Rnode;
> +    UINT16                  StringLength = 0;
> +    UINT32                  OptionIndex = 0;
> +    UINT8                   *OptionalFields;
> +    UINT32                  i;
> +    BOOLEAN                 ResSourceIndex = FALSE;
> +
> +
> +    InitializerOp = Info->DescriptorTypeOp->Asl.Child;
> +    StringLength = RsGetStringDataLength (InitializerOp);
> +
> +    Rnode = RsAllocateResourceNode (
> +        sizeof (AML_RESOURCE_ADDRESS32) + 1 + StringLength);
> +
> +    Descriptor = Rnode->Buffer;
> +    Descriptor->Address32.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS32;
> +    Descriptor->Address32.ResourceType  = ACPI_ADDRESS_TYPE_PCC_NUMBER;
> +
> +    /*
> +     * Initial descriptor length -- may be enlarged if there are
> +     * optional fields present
> +     */
> +    OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32);
> +    Descriptor->Address32.ResourceLength = (UINT16)
> +        (sizeof (AML_RESOURCE_ADDRESS32) -
> +         sizeof (AML_RESOURCE_LARGE_HEADER));
> +
> +
> +    /*
> +    * Bit [3] Max Address Fixed, _MAF: 1 (max address is fixed)
> +    * Bit [2] Min Address Fixed,_MIF: 1 (min address is fixed)
> +    * Bit [1] Decode Type, _DEC: 0 (do not care)
> +    * BIT [0] Ignored (must be zero)
> +    */
> +    Descriptor->Address32.Flags = 0b1100;
> +
> +    // No type specific flags. Set to 0.
> +    Descriptor->Address32.SpecificFlags = 0;
> +
> +    // must be set to zero if _MAX == _MIN.
> +    Descriptor->Address32.Granularity = 0x0;
> +    /* Process all child initialization nodes */
> +
> +    // No translation offset.
> +    Descriptor->Address32.TranslationOffset = 0;
> +
> +    // Pcc is unique address.
> +    Descriptor->Address32.AddressLength = 1;
> +
> +    for (i = 0; InitializerOp; i++)
> +    {
> +        switch (i)
> +        {
> +
> +        case 0: /* Address Min = Max */
> +
> +            Descriptor->Address32.Minimum =
> +                (UINT32) InitializerOp->Asl.Value.Integer;
> +            Descriptor->Address32.Maximum =
> +                (UINT32) InitializerOp->Asl.Value.Integer;
> +
> +            break;
> +
> +        case 1: /* ResSourceIndex [Optional Field - BYTE] */
> +
> +            if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
> +            {
> +                /* Found a valid ResourceSourceIndex */
> +
> +                OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
> +                OptionIndex++;
> +                Descriptor->Address32.ResourceLength++;
> +                ResSourceIndex = TRUE;
> +            }
> +            break;
> +
> +        case 2: /* ResSource [Optional Field - STRING] */
> +
> +            if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) &&
> +                (InitializerOp->Asl.Value.String))
> +            {
> +                if (StringLength)
> +                {
> +                    /* Found a valid ResourceSource */
> +
> +                    Descriptor->Address32.ResourceLength = (UINT16)
> +                        (Descriptor->Address32.ResourceLength + StringLength);
> +
> +                    strcpy ((char *)
> +                        &OptionalFields[OptionIndex],
> +                        InitializerOp->Asl.Value.String);
> +
> +                    /* ResourceSourceIndex must also be valid */
> +
> +                    if (!ResSourceIndex)
> +                    {
> +                        AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX,
> +                            InitializerOp, NULL);
> +                    }
> +                }
> +            }
> +
> +            break;
> +
> +        case 3: // DescriptorName
> +            UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp);
> +            break;
> +
> +        default:
> +
> +            AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);
> +            break;
> +        }
> +
> +        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
> +    }
> +
> +    /* Validate the Min/Max/Len/Gran values */
> +
> +    RsLargeAddressCheck (
> +        (UINT64) Descriptor->Address32.Minimum,
> +        (UINT64) Descriptor->Address32.Maximum,
> +        (UINT64) Descriptor->Address32.AddressLength,
> +        (UINT64) Descriptor->Address32.Granularity,
> +        Descriptor->Address32.Flags,
> +        MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
> +
> +    Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) +
> +        OptionIndex + StringLength;
> +    return (Rnode);
> +}
> +
> +
>   /*******************************************************************************
>    *
>    * FUNCTION:    RsDoDwordIoDescriptor
> diff --git a/src/acpica/source/compiler/aslrestype2q.c b/src/acpica/source/compiler/aslrestype2q.c
> index 2f564499..1b0334f1 100644
> --- a/src/acpica/source/compiler/aslrestype2q.c
> +++ b/src/acpica/source/compiler/aslrestype2q.c
> @@ -160,6 +160,7 @@
>    *
>    * QWordIO
>    * QWordMemory
> + * QwordPcc
>    * QWordSpace
>    */
>   
> @@ -613,6 +614,161 @@ RsDoQwordMemoryDescriptor (
>   }
>   
>   
> +/*******************************************************************************
> + *
> + * FUNCTION:    RsDoQwordPccDescriptor
> + *
> + * PARAMETERS:  Info                - Parse Op and resource template offset
> + *
> + * RETURN:      Completed resource node
> + *
> + * DESCRIPTION: Construct a long "QWordPcc" descriptor
> + *
> + ******************************************************************************/
> +
> +ASL_RESOURCE_NODE *
> +RsDoQwordPccDescriptor (
> +    ASL_RESOURCE_INFO       *Info)
> +{
> +    AML_RESOURCE            *Descriptor;
> +    ACPI_PARSE_OBJECT       *InitializerOp;
> +    ACPI_PARSE_OBJECT       *MinOp = NULL;
> +    ACPI_PARSE_OBJECT       *MaxOp = NULL;
> +    ACPI_PARSE_OBJECT       *LengthOp = NULL;
> +    ACPI_PARSE_OBJECT       *GranOp = NULL;
> +    ASL_RESOURCE_NODE       *Rnode;
> +    UINT16                  StringLength = 0;
> +    UINT32                  OptionIndex = 0;
> +    UINT8                   *OptionalFields;
> +    UINT32                  i;
> +    BOOLEAN                 ResSourceIndex = FALSE;
> +
> +
> +    InitializerOp = Info->DescriptorTypeOp->Asl.Child;
> +    StringLength = RsGetStringDataLength (InitializerOp);
> +
> +    Rnode = RsAllocateResourceNode (
> +        sizeof (AML_RESOURCE_ADDRESS32) + 1 + StringLength);
> +
> +    Descriptor = Rnode->Buffer;
> +    Descriptor->Address32.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS32;
> +    Descriptor->Address32.ResourceType  = ACPI_ADDRESS_TYPE_PCC_NUMBER;
> +
> +    /*
> +     * Initial descriptor length -- may be enlarged if there are
> +     * optional fields present
> +     */
> +    OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32);
> +    Descriptor->Address32.ResourceLength = (UINT16)
> +        (sizeof (AML_RESOURCE_ADDRESS32) -
> +         sizeof (AML_RESOURCE_LARGE_HEADER));
> +
> +
> +    /*
> +    * Bit [3] Max Address Fixed, _MAF: 1 (max address is fixed)
> +    * Bit [2] Min Address Fixed,_MIF: 1 (min address is fixed)
> +    * Bit [1] Decode Type, _DEC: 0 (do not care)
> +    * BIT [0] Ignored (must be zero)
> +    */
> +    Descriptor->Address32.Flags = 0b1100;
> +
> +    // No type specific flags. Set to 0.
> +    Descriptor->Address32.SpecificFlags = 0;
> +
> +    // must be set to zero if _MAX == _MIN.
> +    Descriptor->Address32.Granularity = 0x0;
> +    /* Process all child initialization nodes */
> +
> +    // No translation offset.
> +    Descriptor->Address32.TranslationOffset = 0;
> +
> +    // Pcc is unique address.
> +    Descriptor->Address32.AddressLength = 1;
> +
> +    for (i = 0; InitializerOp; i++)
> +    {
> +        switch (i)
> +        {
> +
> +        case 0: /* Address Min = Max */
> +
> +            Descriptor->Address32.Minimum =
> +                (UINT32) InitializerOp->Asl.Value.Integer;
> +            Descriptor->Address32.Maximum =
> +                (UINT32) InitializerOp->Asl.Value.Integer;
> +
> +            break;
> +
> +        case 1: /* ResSourceIndex [Optional Field - BYTE] */
> +
> +            if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
> +            {
> +                /* Found a valid ResourceSourceIndex */
> +
> +                OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
> +                OptionIndex++;
> +                Descriptor->Address32.ResourceLength++;
> +                ResSourceIndex = TRUE;
> +            }
> +            break;
> +
> +        case 2: /* ResSource [Optional Field - STRING] */
> +
> +            if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) &&
> +                (InitializerOp->Asl.Value.String))
> +            {
> +                if (StringLength)
> +                {
> +                    /* Found a valid ResourceSource */
> +
> +                    Descriptor->Address32.ResourceLength = (UINT16)
> +                        (Descriptor->Address32.ResourceLength + StringLength);
> +
> +                    strcpy ((char *)
> +                        &OptionalFields[OptionIndex],
> +                        InitializerOp->Asl.Value.String);
> +
> +                    /* ResourceSourceIndex must also be valid */
> +
> +                    if (!ResSourceIndex)
> +                    {
> +                        AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX,
> +                            InitializerOp, NULL);
> +                    }
> +                }
> +            }
> +
> +            break;
> +
> +        case 3: // DescriptorName
> +            UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp);
> +            break;
> +
> +        default:
> +
> +            AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);
> +            break;
> +        }
> +
> +        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
> +    }
> +
> +    /* Validate the Min/Max/Len/Gran values */
> +
> +    RsLargeAddressCheck (
> +        (UINT64) Descriptor->Address32.Minimum,
> +        (UINT64) Descriptor->Address32.Maximum,
> +        (UINT64) Descriptor->Address32.AddressLength,
> +        (UINT64) Descriptor->Address32.Granularity,
> +        Descriptor->Address32.Flags,
> +        MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
> +
> +    Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) +
> +        OptionIndex + StringLength;
> +    return (Rnode);
> +}
> +
> +
>   /*******************************************************************************
>    *
>    * FUNCTION:    RsDoQwordSpaceDescriptor
> diff --git a/src/acpica/source/compiler/aslrestype2w.c b/src/acpica/source/compiler/aslrestype2w.c
> index f7ff8f81..1173b676 100644
> --- a/src/acpica/source/compiler/aslrestype2w.c
> +++ b/src/acpica/source/compiler/aslrestype2w.c
> @@ -160,6 +160,7 @@
>    *
>    * WordIO
>    * WordMemory
> + * WordPcc
>    * WordSpace
>    */
>   
> @@ -589,6 +590,161 @@ RsDoWordBusNumberDescriptor (
>   }
>   
>   
> +/*******************************************************************************
> + *
> + * FUNCTION:    RsDoWordPccDescriptor
> + *
> + * PARAMETERS:  Info                - Parse Op and resource template offset
> + *
> + * RETURN:      Completed resource node
> + *
> + * DESCRIPTION: Construct a long "WordPcc" descriptor
> + *
> + ******************************************************************************/
> +
> +ASL_RESOURCE_NODE *
> +RsDoWordPccDescriptor (
> +    ASL_RESOURCE_INFO       *Info)
> +{
> +    AML_RESOURCE            *Descriptor;
> +    ACPI_PARSE_OBJECT       *InitializerOp;
> +    ACPI_PARSE_OBJECT       *MinOp = NULL;
> +    ACPI_PARSE_OBJECT       *MaxOp = NULL;
> +    ACPI_PARSE_OBJECT       *LengthOp = NULL;
> +    ACPI_PARSE_OBJECT       *GranOp = NULL;
> +    ASL_RESOURCE_NODE       *Rnode;
> +    UINT16                  StringLength = 0;
> +    UINT32                  OptionIndex = 0;
> +    UINT8                   *OptionalFields;
> +    UINT32                  i;
> +    BOOLEAN                 ResSourceIndex = FALSE;
> +
> +
> +    InitializerOp = Info->DescriptorTypeOp->Asl.Child;
> +    StringLength = RsGetStringDataLength (InitializerOp);
> +
> +    Rnode = RsAllocateResourceNode (
> +        sizeof (AML_RESOURCE_ADDRESS32) + 1 + StringLength);
> +
> +    Descriptor = Rnode->Buffer;
> +    Descriptor->Address32.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS32;
> +    Descriptor->Address32.ResourceType  = ACPI_ADDRESS_TYPE_PCC_NUMBER;
> +
> +    /*
> +     * Initial descriptor length -- may be enlarged if there are
> +     * optional fields present
> +     */
> +    OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32);
> +    Descriptor->Address32.ResourceLength = (UINT16)
> +        (sizeof (AML_RESOURCE_ADDRESS32) -
> +         sizeof (AML_RESOURCE_LARGE_HEADER));
> +
> +
> +    /*
> +    * Bit [3] Max Address Fixed, _MAF: 1 (max address is fixed)
> +    * Bit [2] Min Address Fixed,_MIF: 1 (min address is fixed)
> +    * Bit [1] Decode Type, _DEC: 0 (do not care)
> +    * BIT [0] Ignored (must be zero)
> +    */
> +    Descriptor->Address32.Flags = 0b1100;
> +
> +    // No type specific flags. Set to 0.
> +    Descriptor->Address32.SpecificFlags = 0;
> +
> +    // must be set to zero if _MAX == _MIN.
> +    Descriptor->Address32.Granularity = 0x0;
> +    /* Process all child initialization nodes */
> +
> +    // No translation offset.
> +    Descriptor->Address32.TranslationOffset = 0;
> +
> +    // Pcc is unique address.
> +    Descriptor->Address32.AddressLength = 1;
> +
> +    for (i = 0; InitializerOp; i++)
> +    {
> +        switch (i)
> +        {
> +
> +        case 0: /* Address Min = Max */
> +
> +            Descriptor->Address32.Minimum =
> +                (UINT32) InitializerOp->Asl.Value.Integer;
> +            Descriptor->Address32.Maximum =
> +                (UINT32) InitializerOp->Asl.Value.Integer;
> +
> +            break;
> +
> +        case 1: /* ResSourceIndex [Optional Field - BYTE] */
> +
> +            if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
> +            {
> +                /* Found a valid ResourceSourceIndex */
> +
> +                OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
> +                OptionIndex++;
> +                Descriptor->Address32.ResourceLength++;
> +                ResSourceIndex = TRUE;
> +            }
> +            break;
> +
> +        case 2: /* ResSource [Optional Field - STRING] */
> +
> +            if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) &&
> +                (InitializerOp->Asl.Value.String))
> +            {
> +                if (StringLength)
> +                {
> +                    /* Found a valid ResourceSource */
> +
> +                    Descriptor->Address32.ResourceLength = (UINT16)
> +                        (Descriptor->Address32.ResourceLength + StringLength);
> +
> +                    strcpy ((char *)
> +                        &OptionalFields[OptionIndex],
> +                        InitializerOp->Asl.Value.String);
> +
> +                    /* ResourceSourceIndex must also be valid */
> +
> +                    if (!ResSourceIndex)
> +                    {
> +                        AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX,
> +                            InitializerOp, NULL);
> +                    }
> +                }
> +            }
> +
> +            break;
> +
> +        case 3: // DescriptorName
> +            UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp);
> +            break;
> +
> +        default:
> +
> +            AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);
> +            break;
> +        }
> +
> +        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
> +    }
> +
> +    /* Validate the Min/Max/Len/Gran values */
> +
> +    RsLargeAddressCheck (
> +        (UINT64) Descriptor->Address32.Minimum,
> +        (UINT64) Descriptor->Address32.Maximum,
> +        (UINT64) Descriptor->Address32.AddressLength,
> +        (UINT64) Descriptor->Address32.Granularity,
> +        Descriptor->Address32.Flags,
> +        MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
> +
> +    Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) +
> +        OptionIndex + StringLength;
> +    return (Rnode);
> +}
> +
> +
>   /*******************************************************************************
>    *
>    * FUNCTION:    RsDoWordSpaceDescriptor
> diff --git a/src/acpica/source/compiler/asltokens.y b/src/acpica/source/compiler/asltokens.y
> index e47bdb79..b7a4c2d9 100644
> --- a/src/acpica/source/compiler/asltokens.y
> +++ b/src/acpica/source/compiler/asltokens.y
> @@ -256,6 +256,7 @@ NoEcho('
>   %token <i> PARSEOP_DWORDCONST
>   %token <i> PARSEOP_DWORDIO
>   %token <i> PARSEOP_DWORDMEMORY
> +%token <i> PARSEOP_DWORDPCC
>   %token <i> PARSEOP_DWORDSPACE
>   %token <i> PARSEOP_EISAID
>   %token <i> PARSEOP_ELSE
> @@ -410,6 +411,7 @@ NoEcho('
>   %token <i> PARSEOP_QWORDCONST
>   %token <i> PARSEOP_QWORDIO
>   %token <i> PARSEOP_QWORDMEMORY
> +%token <i> PARSEOP_QWORDPCC
>   %token <i> PARSEOP_QWORDSPACE
>   %token <i> PARSEOP_RANGETYPE_ENTIRE
>   %token <i> PARSEOP_RANGETYPE_ISAONLY
> @@ -497,6 +499,7 @@ NoEcho('
>   %token <i> PARSEOP_WORDBUSNUMBER
>   %token <i> PARSEOP_WORDCONST
>   %token <i> PARSEOP_WORDIO
> +%token <i> PARSEOP_WORDPCC
>   %token <i> PARSEOP_WORDSPACE
>   %token <i> PARSEOP_XFERSIZE_8
>   %token <i> PARSEOP_XFERSIZE_16
> diff --git a/src/acpica/source/compiler/asltypes.y b/src/acpica/source/compiler/asltypes.y
> index 920cdf51..5e104d82 100644
> --- a/src/acpica/source/compiler/asltypes.y
> +++ b/src/acpica/source/compiler/asltypes.y
> @@ -419,6 +419,7 @@ NoEcho('
>   %type <n> DMATerm
>   %type <n> DWordIOTerm
>   %type <n> DWordMemoryTerm
> +%type <n> DWordPccTerm
>   %type <n> DWordSpaceTerm
>   %type <n> EndDependentFnTerm
>   %type <n> ExtendedIOTerm
> @@ -446,6 +447,7 @@ NoEcho('
>   %type <n> PinGroupFunctionTerm
>   %type <n> QWordIOTerm
>   %type <n> QWordMemoryTerm
> +%type <n> QWordPccTerm
>   %type <n> QWordSpaceTerm
>   %type <n> RegisterTerm
>   %type <n> SpiSerialBusTerm
> @@ -458,6 +460,7 @@ NoEcho('
>   %type <n> VendorShortTerm
>   %type <n> WordBusNumberTerm
>   %type <n> WordIOTerm
> +%type <n> WordPccTerm
>   %type <n> WordSpaceTerm
>   
>   /* Local types that help construct the AML, not in ACPI spec */
> diff --git a/src/acpica/source/compiler/dtfield.c b/src/acpica/source/compiler/dtfield.c
> index dc63a4e8..7d1df16b 100644
> --- a/src/acpica/source/compiler/dtfield.c
> +++ b/src/acpica/source/compiler/dtfield.c
> @@ -281,8 +281,8 @@ DtCompileString (
>       if (Length > ByteLength)
>       {
>           sprintf (AslGbl_MsgBuffer,
> -            "Maximum %u characters, found %u characters [%s]",
> -            ByteLength, Length, Field->Value);
> +            "Maximum %u characters, found %u characters [%.*s]",
> +            ByteLength, Length, (ASL_MSG_BUFFER_SIZE / 2), Field->Value);
>           DtError (ASL_ERROR, ASL_MSG_STRING_LENGTH, Field, AslGbl_MsgBuffer);
>           Length = ByteLength;
>       }
> diff --git a/src/acpica/source/compiler/dttable1.c b/src/acpica/source/compiler/dttable1.c
> index 998bda33..0f68f61e 100644
> --- a/src/acpica/source/compiler/dttable1.c
> +++ b/src/acpica/source/compiler/dttable1.c
> @@ -206,7 +206,14 @@ DtCompileAest (
>       UINT32                  i;
>       UINT32                  Offset;
>       DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +    ACPI_AEST_NODE_INTERFACE_HEADER *AestNodeHeader;
> +    UINT8                   Revision;
> +    ACPI_TABLE_HEADER       *Header;
>   
> +    ParentTable = DtPeekSubtable ();
> +
> +    Header = ACPI_CAST_PTR (ACPI_TABLE_HEADER, ParentTable->Buffer);
> +    Revision = Header->Revision;
>   
>       while (*PFieldList)
>       {
> @@ -257,8 +264,21 @@ DtCompileAest (
>               break;
>   
>           case ACPI_AEST_VENDOR_ERROR_NODE:
> +            switch (Revision)
> +            {
> +            case 1:
> +                InfoTable = AcpiDmTableInfoAestVendorError;
> +                break;
>   
> -            InfoTable = AcpiDmTableInfoAestVendorError;
> +            case 2:
> +                InfoTable = AcpiDmTableInfoAestVendorV2Error;
> +                break;
> +
> +            default:
> +                AcpiOsPrintf ("Unknown AEST Vendor Error Revision: %X\n",
> +                    Revision);
> +                return (AE_ERROR);
> +            }
>               break;
>   
>           case ACPI_AEST_GIC_ERROR_NODE:
> @@ -266,6 +286,16 @@ DtCompileAest (
>               InfoTable = AcpiDmTableInfoAestGicError;
>               break;
>   
> +        case ACPI_AEST_PCIE_ERROR_NODE:
> +
> +            InfoTable = AcpiDmTableInfoAestPCIeError;
> +            break;
> +
> +        case ACPI_AEST_PROXY_ERROR_NODE:
> +
> +            InfoTable = AcpiDmTableInfoAestProxyError;
> +            break;
> +
>           /* Error case below */
>           default:
>               AcpiOsPrintf ("Unknown AEST Subtable Type: %X\n",
> @@ -341,9 +371,57 @@ DtCompileAest (
>           }
>   
>           /* Compile the (required) node interface structure */
> +        if (Revision == 1)
> +        {
> +            InfoTable = AcpiDmTableInfoAestXface;
> +        }
> +        else if (Revision == 2)
> +        {
> +            Status = DtCompileTable (PFieldList, AcpiDmTableInfoAestXfaceHeader,
> +                &Subtable);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (Status);
> +            }
>   
> -        Status = DtCompileTable (PFieldList, AcpiDmTableInfoAestXface,
> -            &Subtable);
> +            ParentTable = DtPeekSubtable ();
> +            DtInsertSubtable (ParentTable, Subtable);
> +
> +            Offset += Subtable->Length;
> +
> +            AestNodeHeader = ACPI_CAST_PTR (ACPI_AEST_NODE_INTERFACE_HEADER,
> +                    Subtable->Buffer);
> +
> +            switch (AestNodeHeader->GroupFormat)
> +            {
> +            case ACPI_AEST_NODE_GROUP_FORMAT_4K:
> +
> +                InfoTable = AcpiDmTableInfoAestXface4k;
> +                break;
> +
> +            case ACPI_AEST_NODE_GROUP_FORMAT_16K:
> +
> +                InfoTable = AcpiDmTableInfoAestXface16k;
> +                break;
> +
> +            case ACPI_AEST_NODE_GROUP_FORMAT_64K:
> +
> +                InfoTable = AcpiDmTableInfoAestXface64k;
> +                break;
> +
> +            /* Error case below */
> +            default:
> +                AcpiOsPrintf ("Unknown AEST Interface Group Format: %X\n",
> +                    AestNodeHeader->GroupFormat);
> +                return (AE_ERROR);
> +            }
> +        }
> +        else
> +        {
> +           AcpiOsPrintf ("Unknown AEST Revision: %X\n", Revision);
> +        }
> +
> +        Status = DtCompileTable (PFieldList, InfoTable, &Subtable);
>           if (ACPI_FAILURE (Status))
>           {
>               return (Status);
> @@ -367,8 +445,22 @@ DtCompileAest (
>   
>           for (i = 0; i < ErrorNodeHeader->NodeInterruptCount; i++)
>           {
> -            Status = DtCompileTable (PFieldList, AcpiDmTableInfoAestXrupt,
> -                &Subtable);
> +            switch (Revision) {
> +            case 1:
> +
> +                InfoTable = AcpiDmTableInfoAestXrupt;
> +                break;
> +
> +            case 2:
> +
> +                InfoTable = AcpiDmTableInfoAestXruptV2;
> +                break;
> +
> +            default:
> +                AcpiOsPrintf ("Unknown AEST Revision: %X\n", Revision);
> +                return (AE_ERROR);
> +            }
> +            Status = DtCompileTable (PFieldList, InfoTable, &Subtable);
>               if (ACPI_FAILURE (Status))
>               {
>                   return (Status);
> @@ -974,6 +1066,53 @@ DtCompileCedt (
>               ParentTable = DtPeekSubtable ();
>               break;
>           }
> +        case ACPI_CEDT_TYPE_CXIMS: {
> +            unsigned char *dump;
> +            unsigned int idx, offset, max = 0;
> +
> +            /* Compile table with first "Xor map" */
> +
> +            Status = DtCompileTable (PFieldList, AcpiDmTableInfoCedt2, &Subtable);
> +            if (ACPI_FAILURE (Status))
> +            {
> +                return (Status);
> +            }
> +
> +            /* Look in buffer for the number of Xor maps */
> +            offset = (unsigned int) ACPI_OFFSET (ACPI_CEDT_CXIMS, NrXormaps);
> +            dump = (unsigned char *) Subtable->Buffer - 4;     /* place at beginning of cedt2 */
> +            max = dump[offset];
> +
> +            /* We need to add more XOR maps, so write the current Subtable. */
> +
> +            ParentTable = DtPeekSubtable ();
> +            DtInsertSubtable (ParentTable, Subtable);   /* Insert AcpiDmTableInfoCedt2 table so we can put in */
> +            DtPushSubtable (Subtable);
> +
> +            /* Now, find out all Xor maps beyond the first. */
> +
> +            for (idx = 1; idx < max; idx++) {
> +                ParentTable = DtPeekSubtable ();
> +
> +                if (*PFieldList)
> +                {
> +                    Status = DtCompileTable (PFieldList, AcpiDmTableInfoCedt2_te, &Subtable);
> +                    if (ACPI_FAILURE (Status))
> +                    {
> +                        return (Status);
> +                    }
> +                    if (Subtable)
> +                    {
> +                        DtInsertSubtable (ParentTable, Subtable);       /* got an Xor map, so insert table. */
> +                        InsertFlag = 0;
> +                    }
> +                }
> +            }
> +
> +            DtPopSubtable ();
> +            ParentTable = DtPeekSubtable ();
> +            break;
> +        }
>   
>           default:
>               DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "CEDT");
> diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c
> index 5fd92287..39418729 100644
> --- a/src/acpica/source/compiler/dttable2.c
> +++ b/src/acpica/source/compiler/dttable2.c
> @@ -550,7 +550,7 @@ DtCompileMpam (
>           RisLength = 0;
>   
>           /* Iterate over RIS subtables per MSC node */
> -        for (UINT32 ris = 0; ris < MpamMscNode->NumResouceNodes; ris++)
> +        for (UINT32 ris = 0; ris < MpamMscNode->NumResourceNodes; ris++)
>           {
>               /* Compile RIS subtable */
>               Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpam1,
> diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h
> index 62b610b3..9e1a8cca 100644
> --- a/src/acpica/source/compiler/dttemplate.h
> +++ b/src/acpica/source/compiler/dttemplate.h
> @@ -157,13 +157,13 @@
>   
>   const unsigned char TemplateAest[] =
>   {
> -    0x41,0x45,0x53,0x54,0xCC,0x02,0x00,0x00,  /* 00000000    "AEST...." */
> -    0x01,0x2A,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    ".*INTEL " */
> +    0x41,0x45,0x53,0x54,0x90,0x03,0x00,0x00,  /* 00000000    "AEST...." */
> +    0x02,0xE6,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    "..! ...." */
> +    0x28,0x06,0x23,0x20,0x00,0xA0,0x00,0x00,  /* 00000020    "(.# ...." */
>       0x2C,0x00,0x00,0x00,0x44,0x00,0x00,0x00,  /* 00000028    ",...D..." */
> -    0x74,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000030    "t......." */
> +    0x94,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000030    "........" */
>       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    "........" */
> @@ -177,76 +177,100 @@ const unsigned char TemplateAest[] =
>       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......." */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 000000a0    "....gE#." */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 000000a8    "....gE#." */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 000000b0    "....gE#." */
> +    0x01,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x78,  /* 000000b8    ".......x" */
> +    0x00,0x00,0x00,0x00,0x00,0x94,0x00,0x00,  /* 000000c0    "........" */
> +    0x2C,0x00,0x00,0x00,0x44,0x00,0x00,0x00,  /* 000000c8    ",...D..." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000d0    "........" */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 000000d8    "....gE#." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000e0    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000e8    "........" */
> +    0x11,0x11,0x00,0x00,0x01,0x00,0x01,0x00,  /* 000000f0    "........" */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 000000f8    "....gE#." */
> +    0x67,0x67,0x67,0x67,0x00,0x00,0x00,0x00,  /* 00000100    "gggg...." */
> +    0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,  /* 00000108    "........" */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000110    "....gE#." */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000118    "........" */
> +    0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000120    "........" */
>       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    "........" */
> +    0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00,  /* 00000130    "........" */
> +    0x01,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x78,  /* 00000138    ".......x" */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000140    "....gE#." */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000148    "....gE#." */
>       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    "........" */
> +    0x01,0x80,0x00,0x00,0x2C,0x00,0x00,0x00,  /* 00000158    "....,..." */
> +    0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000160    "0......." */
>       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,  /* 00000170    "........" */
> +    0x00,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89,  /* 00000178    "........" */
> +    0x67,0x45,0x23,0x01,0xAA,0xAA,0x00,0x00,  /* 00000180    "gE#....." */
> +    0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000188    "........" */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000190    "....gE#." */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000198    "........" */
> +    0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001a0    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001a8    "........" */
> +    0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00,  /* 000001b0    "........" */
> +    0x01,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x78,  /* 000001b8    ".......x" */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 000001c0    "....gE#." */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 000001c8    "....gE#." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001d0    "........" */
> +    0x02,0x84,0x00,0x00,0x2C,0x00,0x00,0x00,  /* 000001d8    "....,..." */
> +    0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001e0    "4......." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001e8    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001f0    "........" */
> +    0x00,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89,  /* 000001f8    "........" */
> +    0x67,0x45,0x23,0x01,0x55,0x55,0x55,0x55,  /* 00000200    "gE#.UUUU" */
> +    0x66,0x66,0x66,0x66,0x01,0x00,0x00,0x00,  /* 00000208    "ffff...." */
> +    0x03,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89,  /* 00000210    "........" */
> +    0x67,0x45,0x23,0x01,0x00,0x00,0x00,0x00,  /* 00000218    "gE#....." */
> +    0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000220    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000228    "........" */
> +    0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x01,  /* 00000230    "........" */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000238    "........" */
> +    0xEF,0xCD,0xAB,0x78,0xEF,0xCD,0xAB,0x89,  /* 00000240    "...x...." */
> +    0x67,0x45,0x23,0x01,0xEF,0xCD,0xAB,0x89,  /* 00000248    "gE#....." */
> +    0x67,0x45,0x23,0x01,0xEF,0xCD,0xAB,0x89,  /* 00000250    "gE#....." */
> +    0x67,0x45,0x23,0x01,0x03,0x98,0x00,0x00,  /* 00000258    "gE#....." */
> +    0x2C,0x00,0x00,0x00,0x48,0x00,0x00,0x00,  /* 00000260    ",...H..." */
>       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..."     */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000270    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000278    "........" */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000280    "....gE#." */
> +    0x33,0x33,0x33,0x33,0x22,0x22,0x22,0x22,  /* 00000288    "3333""""" */
> +    0x44,0x44,0x44,0x44,0x12,0x23,0x34,0x45,  /* 00000290    "DDDD.#4E" */
> +    0x56,0x67,0x78,0x89,0x9A,0xAB,0xBC,0xCD,  /* 00000298    "Vgx....." */
> +    0xDE,0xEF,0xFF,0x55,0x01,0x00,0x00,0x00,  /* 000002a0    "...U...." */
> +    0x02,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89,  /* 000002a8    "........" */
> +    0x67,0x45,0x23,0x01,0x00,0x00,0x00,0x00,  /* 000002b0    "gE#....." */
> +    0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 000002b8    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000002c0    "........" */
> +    0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x01,  /* 000002c8    "........" */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 000002d0    "........" */
> +    0xEF,0xCD,0xAB,0x78,0xEF,0xCD,0xAB,0x89,  /* 000002d8    "...x...." */
> +    0x67,0x45,0x23,0x01,0xEF,0xCD,0xAB,0x89,  /* 000002e0    "gE#....." */
> +    0x67,0x45,0x23,0x01,0xEF,0xCD,0xAB,0x89,  /* 000002e8    "gE#....." */
> +    0x67,0x45,0x23,0x01,0x04,0x9C,0x00,0x00,  /* 000002f0    "gE#....." */
> +    0x2C,0x00,0x00,0x00,0x34,0x00,0x00,0x00,  /* 000002f8    ",...4..." */
> +    0x84,0x00,0x00,0x00,0x02,0x00,0x00,0x00,  /* 00000300    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000308    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000310    "........" */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000318    "....gE#." */
> +    0x03,0x00,0x00,0x00,0x88,0x88,0x77,0x77,  /* 00000320    "......ww" */
> +    0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,  /* 00000328    "........" */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000330    "....gE#." */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000338    "........" */
> +    0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000340    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000348    "........" */
> +    0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00,  /* 00000350    "........" */
> +    0x01,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x78,  /* 00000358    ".......x" */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000360    "....gE#." */
> +    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000368    "....gE#." */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000370    "........" */
> +    0x00,0x00,0x00,0x00,0xBB,0xBB,0xAA,0xAA,  /* 00000378    "........" */
> +    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,  /* 00000380    "........" */
> +    0xEF,0xCD,0xAB,0x78,0x00,0x00,0x00,0x00,  /* 00000388    "...x...." */
>   };
>   
>   const unsigned char TemplateAgdi[] =
> @@ -1252,10 +1276,10 @@ const unsigned char TemplateMsdm[] =
>   const unsigned char TemplateMpam[] =
>   {
>       0x4D,0x50,0x41,0x4D,0xFC,0x00,0x00,0x00,  /* 00000000    "MPAM...." */
> -    0x02,0x34,0x48,0x49,0x53,0x49,0x20,0x20,  /* 00000008    ".4HISI  " */
> +    0x02,0x35,0x48,0x49,0x53,0x49,0x20,0x20,  /* 00000008    ".5HISI  " */
>       0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
>       0x02,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
> -    0x20,0x10,0x22,0x20,0x60,0x00,0x00,0x00,  /* 00000020    " ." `..." */
> +    0x28,0x06,0x23,0x20,0x60,0x00,0x00,0x00,  /* 00000020    "(.# `..." */
>       0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,  /* 00000028    "........" */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,  /* 00000030    "........" */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
> @@ -1896,8 +1920,8 @@ const unsigned char TemplateSlit[] =
>   
>   const unsigned char TemplateSpcr[] =
>   {
> -    0x53,0x50,0x43,0x52,0x50,0x00,0x00,0x00,  /* 00000000    "SPCRP..." */
> -    0x01,0xE3,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
> +    0x53,0x50,0x43,0x52,0x5A,0x00,0x00,0x00,  /* 00000000    "SPCRZ..." */
> +    0x04,0x4E,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
>       0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
>       0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
>       0x28,0x05,0x10,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "(.. ...." */
> @@ -1905,7 +1929,9 @@ const unsigned char TemplateSpcr[] =
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000030    "........" */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
>       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000040    "........" */
> -    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00   /* 00000048    "........" */
> +    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000048    "........" */
> +    0x00,0x00,0x00,0x00,0x02,0x00,0x58,0x00,  /* 00000050    "......X." */
> +    0x2E,0x00                                 /* 00000058    ".." */
>   };
>   
>   const unsigned char TemplateSpmi[] =
> diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c
> index 82a51cb8..a3dcb507 100644
> --- a/src/acpica/source/compiler/dtutils.c
> +++ b/src/acpica/source/compiler/dtutils.c
> @@ -439,6 +439,8 @@ DtGetFieldType (
>       case ACPI_DMT_BUF12:
>       case ACPI_DMT_BUF16:
>       case ACPI_DMT_BUF18:
> +    case ACPI_DMT_BUF32:
> +    case ACPI_DMT_BUF112:
>       case ACPI_DMT_BUF128:
>       case ACPI_DMT_PCI_PATH:
>       case ACPI_DMT_PMTT_VENDOR:
> @@ -746,6 +748,16 @@ DtGetFieldLength (
>           ByteLength = 18;
>           break;
>   
> +    case ACPI_DMT_BUF32:
> +
> +        ByteLength = 32;
> +        break;
> +
> +    case ACPI_DMT_BUF112:
> +
> +        ByteLength = 112;
> +        break;
> +
>       case ACPI_DMT_BUF128:
>   
>           ByteLength = 128;
> diff --git a/src/acpica/source/compiler/prmacros.c b/src/acpica/source/compiler/prmacros.c
> index f3368de5..4610ccc2 100644
> --- a/src/acpica/source/compiler/prmacros.c
> +++ b/src/acpica/source/compiler/prmacros.c
> @@ -455,7 +455,7 @@ PrAddMacro (
>           }
>   
>           DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
> -            "Macro param: %s \n",
> +            "Macro param: %s\n",
>               AslGbl_CurrentLineNumber, Token);
>   
>           Args[i].Name = UtLocalCalloc (strlen (Token) + 1);
> @@ -497,7 +497,7 @@ PrAddMacro (
>   
>   
>                   DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
> -                    "Macro Arg #%u: %s UseCount %u Offset %u \n",
> +                    "Macro Arg #%u: %s UseCount %u Offset %u\n",
>                       AslGbl_CurrentLineNumber, i, Token,
>                       UseCount+1, Args[i].Offset[UseCount]);
>   
> @@ -544,7 +544,7 @@ AddMacroToList:
>       }
>   
>       DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
> -        "Macro body: %s \n",
> +        "Macro body: %s\n",
>           AslGbl_CurrentLineNumber, BodyInSource);
>   
>       /* Add macro to the #define list */
> @@ -668,7 +668,7 @@ PrDoMacroInvocation (
>               PrReplaceResizeSubstring (Args, Diff1, Diff2, i, Token);
>   
>               DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
> -                "ExpandArg: %s \n",
> +                "ExpandArg: %s\n",
>                   AslGbl_CurrentLineNumber, AslGbl_MacroTokenBuffer);
>           }
>   
> @@ -696,7 +696,7 @@ BadInvocation:
>           THIS_TOKEN_OFFSET (MacroStart));
>   
>       DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
> -        "Bad macro invocation: %s \n",
> +        "Bad macro invocation: %s\n",
>           AslGbl_CurrentLineNumber, AslGbl_MacroTokenBuffer);
>       return;
>   }
> diff --git a/src/acpica/source/components/debugger/dbconvert.c b/src/acpica/source/components/debugger/dbconvert.c
> index 6a410000..32ad5be1 100644
> --- a/src/acpica/source/components/debugger/dbconvert.c
> +++ b/src/acpica/source/components/debugger/dbconvert.c
> @@ -354,6 +354,8 @@ AcpiDbConvertToPackage (
>   
>       Elements = ACPI_ALLOCATE_ZEROED (
>           DB_DEFAULT_PKG_ELEMENTS * sizeof (ACPI_OBJECT));
> +    if (!Elements)
> +        return (AE_NO_MEMORY);
>   
>       This = String;
>       for (i = 0; i < (DB_DEFAULT_PKG_ELEMENTS - 1); i++)
> diff --git a/src/acpica/source/components/disassembler/dmwalk.c b/src/acpica/source/components/disassembler/dmwalk.c
> index 90e4a06c..a4d18cad 100644
> --- a/src/acpica/source/components/disassembler/dmwalk.c
> +++ b/src/acpica/source/components/disassembler/dmwalk.c
> @@ -969,8 +969,6 @@ AcpiDmDescendingOp (
>                        AcpiDmPredefinedDescription (Op->Asl.Parent);
>                   }
>   
> -                AcpiDmPredefinedDescription (Op->Asl.Parent);
> -
>                   AcpiOsPrintf ("\n");
>                   AcpiDmIndent (Info->Level);
>                   AcpiOsPrintf ("{\n");
> diff --git a/src/acpica/source/components/executer/exconvrt.c b/src/acpica/source/components/executer/exconvrt.c
> index ec38892b..360f16cc 100644
> --- a/src/acpica/source/components/executer/exconvrt.c
> +++ b/src/acpica/source/components/executer/exconvrt.c
> @@ -165,7 +165,8 @@ AcpiExConvertToAscii (
>       UINT64                  Integer,
>       UINT16                  Base,
>       UINT8                   *String,
> -    UINT8                   MaxLength);
> +    UINT8                   MaxLength,
> +    BOOLEAN                 LeadingZeros);
>   
>   
>   /*******************************************************************************
> @@ -412,6 +413,7 @@ AcpiExConvertToBuffer (
>    *              Base            - ACPI_STRING_DECIMAL or ACPI_STRING_HEX
>    *              String          - Where the string is returned
>    *              DataWidth       - Size of data item to be converted, in bytes
> + *              LeadingZeros    - Allow leading zeros
>    *
>    * RETURN:      Actual string length
>    *
> @@ -424,7 +426,8 @@ AcpiExConvertToAscii (
>       UINT64                  Integer,
>       UINT16                  Base,
>       UINT8                   *String,
> -    UINT8                   DataWidth)
> +    UINT8                   DataWidth,
> +    BOOLEAN                 LeadingZeros)
>   {
>       UINT64                  Digit;
>       UINT32                  i;
> @@ -433,7 +436,8 @@ AcpiExConvertToAscii (
>       UINT32                  HexLength;
>       UINT32                  DecimalLength;
>       UINT32                  Remainder;
> -    BOOLEAN                 SupressZeros;
> +    BOOLEAN                 SupressZeros = !LeadingZeros;
> +    UINT8                   HexChar;
>   
>   
>       ACPI_FUNCTION_ENTRY ();
> @@ -464,7 +468,6 @@ AcpiExConvertToAscii (
>               break;
>           }
>   
> -        SupressZeros = TRUE;     /* No leading zeros */
>           Remainder = 0;
>   
>           for (i = DecimalLength; i > 0; i--)
> @@ -501,8 +504,18 @@ AcpiExConvertToAscii (
>           {
>               /* Get one hex digit, most significant digits first */
>   
> -            String[k] = (UINT8)
> +            HexChar = (UINT8)
>                   AcpiUtHexToAsciiChar (Integer, ACPI_MUL_4 (j));
> +
> +            /* Supress leading zeros until the first non-zero character */
> +
> +            if (HexChar == ACPI_ASCII_ZERO && SupressZeros)
> +            {
> +                continue;
> +            }
> +
> +            SupressZeros = FALSE;
> +            String[k] = HexChar;
>               k++;
>           }
>           break;
> @@ -556,6 +569,7 @@ AcpiExConvertToString (
>       UINT32                  StringLength = 0;
>       UINT16                  Base = 16;
>       UINT8                   Separator = ',';
> +    BOOLEAN                 LeadingZeros;
>   
>   
>       ACPI_FUNCTION_TRACE_PTR (ExConvertToString, ObjDesc);
> @@ -581,14 +595,25 @@ AcpiExConvertToString (
>                * Make room for the maximum decimal number size
>                */
>               StringLength = ACPI_MAX_DECIMAL_DIGITS;
> +            LeadingZeros = FALSE;
>               Base = 10;
>               break;
>   
> +        case ACPI_EXPLICIT_CONVERT_HEX:
> +            /*
> +             * From ToHexString.
> +             *
> +             * Supress leading zeros and append "0x"
> +             */
> +            StringLength = ACPI_MUL_2 (AcpiGbl_IntegerByteWidth) + 2;
> +            LeadingZeros = FALSE;
> +            break;
>           default:
>   
>               /* Two hex string characters for each integer byte */
>   
>               StringLength = ACPI_MUL_2 (AcpiGbl_IntegerByteWidth);
> +            LeadingZeros = TRUE;
>               break;
>           }
>   
> @@ -603,15 +628,29 @@ AcpiExConvertToString (
>           }
>   
>           NewBuf = ReturnDesc->Buffer.Pointer;
> +        if (Type == ACPI_EXPLICIT_CONVERT_HEX)
> +        {
> +            /* Append "0x" prefix for explicit hex conversion */
> +
> +            *NewBuf++ = '0';
> +            *NewBuf++ = 'x';
> +        }
>   
>           /* Convert integer to string */
>   
>           StringLength = AcpiExConvertToAscii (
> -            ObjDesc->Integer.Value, Base, NewBuf, AcpiGbl_IntegerByteWidth);
> +            ObjDesc->Integer.Value, Base, NewBuf, AcpiGbl_IntegerByteWidth, LeadingZeros);
>   
>           /* Null terminate at the correct place */
>   
>           ReturnDesc->String.Length = StringLength;
> +        if (Type == ACPI_EXPLICIT_CONVERT_HEX)
> +        {
> +            /* Take "0x" prefix into account */
> +
> +            ReturnDesc->String.Length += 2;
> +        }
> +
>           NewBuf [StringLength] = 0;
>           break;
>   
> @@ -628,6 +667,7 @@ AcpiExConvertToString (
>                * From ACPI: "If the input is a buffer, it is converted to a
>                * a string of decimal values separated by commas."
>                */
> +            LeadingZeros = FALSE;
>               Base = 10;
>   
>               /*
> @@ -661,6 +701,7 @@ AcpiExConvertToString (
>                *
>                * Each hex number is prefixed with 0x (11/2018)
>                */
> +            LeadingZeros = TRUE;
>               Separator = ' ';
>               StringLength = (ObjDesc->Buffer.Length * 5);
>               break;
> @@ -674,6 +715,7 @@ AcpiExConvertToString (
>                *
>                * Each hex number is prefixed with 0x (11/2018)
>                */
> +            LeadingZeros = TRUE;
>               Separator = ',';
>               StringLength = (ObjDesc->Buffer.Length * 5);
>               break;
> @@ -715,7 +757,7 @@ AcpiExConvertToString (
>               }
>   
>               NewBuf += AcpiExConvertToAscii (
> -                (UINT64) ObjDesc->Buffer.Pointer[i], Base, NewBuf, 1);
> +                (UINT64) ObjDesc->Buffer.Pointer[i], Base, NewBuf, 1, LeadingZeros);
>   
>               /* Each digit is separated by either a comma or space */
>   
> diff --git a/src/acpica/source/components/executer/exprep.c b/src/acpica/source/components/executer/exprep.c
> index 545ca0c3..f2164fe8 100644
> --- a/src/acpica/source/components/executer/exprep.c
> +++ b/src/acpica/source/components/executer/exprep.c
> @@ -611,6 +611,10 @@ AcpiExPrepFieldValue (
>           if (Info->ConnectionNode)
>           {
>               SecondDesc = Info->ConnectionNode->Object;
> +            if (SecondDesc == NULL)
> +            {
> +                break;
> +            }
>               if (!(SecondDesc->Common.Flags & AOPOBJ_DATA_VALID))
>               {
>                   Status = AcpiDsGetBufferArguments (SecondDesc);
> diff --git a/src/acpica/source/components/executer/exregion.c b/src/acpica/source/components/executer/exregion.c
> index c625b668..5da92941 100644
> --- a/src/acpica/source/components/executer/exregion.c
> +++ b/src/acpica/source/components/executer/exregion.c
> @@ -191,7 +191,6 @@ AcpiExSystemMemorySpaceHandler (
>       ACPI_MEM_MAPPING        *Mm = MemInfo->CurMm;
>       UINT32                  Length;
>       ACPI_SIZE               MapLength;
> -    ACPI_SIZE               PageBoundaryMapLength;
>   #ifdef ACPI_MISALIGNMENT_NOT_SUPPORTED
>       UINT32                  Remainder;
>   #endif
> @@ -298,27 +297,9 @@ AcpiExSystemMemorySpaceHandler (
>           MapLength = (ACPI_SIZE)
>               ((MemInfo->Address + MemInfo->Length) - Address);
>   
> -        /*
> -         * If mapping the entire remaining portion of the region will cross
> -         * a page boundary, just map up to the page boundary, do not cross.
> -         * On some systems, crossing a page boundary while mapping regions
> -         * can cause warnings if the pages have different attributes
> -         * due to resource management.
> -         *
> -         * This has the added benefit of constraining a single mapping to
> -         * one page, which is similar to the original code that used a 4k
> -         * maximum window.
> -         */
> -        PageBoundaryMapLength = (ACPI_SIZE)
> -            (ACPI_ROUND_UP (Address, ACPI_DEFAULT_PAGE_SIZE) - Address);
> -        if (PageBoundaryMapLength == 0)
> -        {
> -            PageBoundaryMapLength = ACPI_DEFAULT_PAGE_SIZE;
> -        }
> -
> -        if (MapLength > PageBoundaryMapLength)
> +        if (MapLength > ACPI_DEFAULT_PAGE_SIZE)
>           {
> -            MapLength = PageBoundaryMapLength;
> +            MapLength = ACPI_DEFAULT_PAGE_SIZE;
>           }
>   
>           /* Create a new mapping starting at the address given */
> diff --git a/src/acpica/source/components/executer/exsystem.c b/src/acpica/source/components/executer/exsystem.c
> index 16fb5ea1..bc134172 100644
> --- a/src/acpica/source/components/executer/exsystem.c
> +++ b/src/acpica/source/components/executer/exsystem.c
> @@ -296,7 +296,7 @@ AcpiExSystemDoStall (
>            * (ACPI specifies 100 usec as max, but this gives some slack in
>            * order to support existing BIOSs)
>            */
> -        ACPI_ERROR ((AE_INFO,
> +        ACPI_ERROR_ONCE ((AE_INFO,
>               "Time parameter is too large (%u)", HowLongUs));
>           Status = AE_AML_OPERAND_VALUE;
>       }
> @@ -304,7 +304,7 @@ AcpiExSystemDoStall (
>       {
>           if (HowLongUs > 100)
>           {
> -            ACPI_WARNING ((AE_INFO,
> +            ACPI_WARNING_ONCE ((AE_INFO,
>                   "Time parameter %u us > 100 us violating ACPI spec, please fix the firmware.", HowLongUs));
>           }
>           AcpiOsStall (HowLongUs);
> diff --git a/src/acpica/source/components/hardware/hwxfsleep.c b/src/acpica/source/components/hardware/hwxfsleep.c
> index 66118a4e..6605a58e 100644
> --- a/src/acpica/source/components/hardware/hwxfsleep.c
> +++ b/src/acpica/source/components/hardware/hwxfsleep.c
> @@ -159,13 +159,11 @@
>   
>   /* Local prototypes */
>   
> -#if (!ACPI_REDUCED_HARDWARE)
>   static ACPI_STATUS
>   AcpiHwSetFirmwareWakingVector (
>       ACPI_TABLE_FACS         *Facs,
>       ACPI_PHYSICAL_ADDRESS   PhysicalAddress,
>       ACPI_PHYSICAL_ADDRESS   PhysicalAddress64);
> -#endif
>   
>   static ACPI_STATUS
>   AcpiHwSleepDispatch (
> @@ -199,13 +197,6 @@ static ACPI_SLEEP_FUNCTIONS         AcpiSleepDispatch[] =
>   };
>   
>   
> -/*
> - * These functions are removed for the ACPI_REDUCED_HARDWARE case:
> - *      AcpiSetFirmwareWakingVector
> - *      AcpiEnterSleepStateS4bios
> - */
> -
> -#if (!ACPI_REDUCED_HARDWARE)
>   /*******************************************************************************
>    *
>    * FUNCTION:    AcpiHwSetFirmwareWakingVector
> @@ -298,6 +289,12 @@ AcpiSetFirmwareWakingVector (
>   ACPI_EXPORT_SYMBOL (AcpiSetFirmwareWakingVector)
>   
>   
> +/*
> + * These functions are removed for the ACPI_REDUCED_HARDWARE case:
> + *      AcpiEnterSleepStateS4bios
> + */
> +
> +#if (!ACPI_REDUCED_HARDWARE)
>   /*******************************************************************************
>    *
>    * FUNCTION:    AcpiEnterSleepStateS4bios
> diff --git a/src/acpica/source/components/parser/psargs.c b/src/acpica/source/components/parser/psargs.c
> index 728ac559..24cf6f84 100644
> --- a/src/acpica/source/components/parser/psargs.c
> +++ b/src/acpica/source/components/parser/psargs.c
> @@ -170,6 +170,10 @@ static ACPI_PARSE_OBJECT *
>   AcpiPsGetNextField (
>       ACPI_PARSE_STATE        *ParserState);
>   
> +static void
> +AcpiPsFreeFieldList (
> +    ACPI_PARSE_OBJECT       *Start);
> +
>   
>   /*******************************************************************************
>    *
> @@ -872,6 +876,43 @@ AcpiPsGetNextField (
>       return_PTR (Field);
>   }
>   
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiPsFreeFieldList
> + *
> + * PARAMETERS:  Start               - First Op in field list
> + *
> + * RETURN:      None.
> + *
> + * DESCRIPTION: Free all Op objects inside a field list.
> + *
> + ******************************************************************************/
> +
> +static void
> +AcpiPsFreeFieldList (
> +    ACPI_PARSE_OBJECT	*Start)
> +{
> +    ACPI_PARSE_OBJECT *Current = Start;
> +    ACPI_PARSE_OBJECT *Next;
> +    ACPI_PARSE_OBJECT *Arg;
> +
> +    while (Current)
> +    {
> +        Next = Current->Common.Next;
> +
> +        /* AML_INT_CONNECTION_OP can have a single argument */
> +
> +        Arg = AcpiPsGetArg (Current, 0);
> +        if (Arg)
> +        {
> +            AcpiPsFreeOp (Arg);
> +        }
> +
> +        AcpiPsFreeOp(Current);
> +        Current = Next;
> +    }
> +}
> +
>   
>   /*******************************************************************************
>    *
> @@ -948,6 +989,11 @@ AcpiPsGetNextArg (
>                   Field = AcpiPsGetNextField (ParserState);
>                   if (!Field)
>                   {
> +                    if (Arg)
> +                    {
> +                        AcpiPsFreeFieldList(Arg);
> +                    }
> +
>                       return_ACPI_STATUS (AE_NO_MEMORY);
>                   }
>   
> @@ -1016,6 +1062,11 @@ AcpiPsGetNextArg (
>   
>               Status = AcpiPsGetNextNamepath (WalkState, ParserState,
>                   Arg, ACPI_NOT_METHOD_CALL);
> +            if (ACPI_FAILURE(Status))
> +            {
> +                AcpiPsFreeOp (Arg);
> +                return_ACPI_STATUS (Status);
> +            }
>           }
>           else
>           {
> @@ -1048,6 +1099,11 @@ AcpiPsGetNextArg (
>   
>               Status = AcpiPsGetNextNamepath (WalkState, ParserState,
>                   Arg, ACPI_POSSIBLE_METHOD_CALL);
> +            if (ACPI_FAILURE(Status))
> +            {
> +                AcpiPsFreeOp (Arg);
> +                return_ACPI_STATUS (Status);
> +            }
>   
>               if (Arg->Common.AmlOpcode == AML_INT_METHODCALL_OP)
>               {
> diff --git a/src/acpica/source/components/resources/rsaddr.c b/src/acpica/source/components/resources/rsaddr.c
> index ec97ab8e..2289f2dd 100644
> --- a/src/acpica/source/components/resources/rsaddr.c
> +++ b/src/acpica/source/components/resources/rsaddr.c
> @@ -441,7 +441,8 @@ AcpiRsGetAddressCommon (
>       /* Validate the Resource Type */
>   
>       if ((Address.ResourceType > 2) &&
> -        (Address.ResourceType < 0xC0))
> +        (Address.ResourceType < 0xC0) &&
> +        (Address.ResourceType != 0x0A))
>       {
>           return (FALSE);
>       }
> diff --git a/src/acpica/source/components/resources/rsdump.c b/src/acpica/source/components/resources/rsdump.c
> index b12d72df..2a4d178c 100644
> --- a/src/acpica/source/components/resources/rsdump.c
> +++ b/src/acpica/source/components/resources/rsdump.c
> @@ -230,6 +230,7 @@ AcpiRsDumpDescriptor (
>       ACPI_RSDUMP_INFO        *Table);
>   
>   
> +#ifdef ACPI_DEBUGGER
>   /*******************************************************************************
>    *
>    * FUNCTION:    AcpiRsDumpResourceList
> @@ -359,7 +360,7 @@ AcpiRsDumpIrqList (
>               PrtElement, PrtElement->Length);
>       }
>   }
> -
> +#endif
>   
>   /*******************************************************************************
>    *
> diff --git a/src/acpica/source/components/tables/tbfadt.c b/src/acpica/source/components/tables/tbfadt.c
> index df19488d..feb698f8 100644
> --- a/src/acpica/source/components/tables/tbfadt.c
> +++ b/src/acpica/source/components/tables/tbfadt.c
> @@ -489,24 +489,19 @@ AcpiTbParseFadt (
>           ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, TRUE,
>           &AcpiGbl_DsdtIndex);
>   
> -    /* If Hardware Reduced flag is set, there is no FACS */
> -
> -    if (!AcpiGbl_ReducedHardware)
> +    if (AcpiGbl_FADT.Facs)
>       {
> -        if (AcpiGbl_FADT.Facs)
> -        {
> -            AcpiTbInstallStandardTable (
> -                (ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.Facs,
> -                ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, TRUE,
> -                &AcpiGbl_FacsIndex);
> -        }
> -        if (AcpiGbl_FADT.XFacs)
> -        {
> -            AcpiTbInstallStandardTable (
> -                (ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.XFacs,
> -                ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, TRUE,
> -                &AcpiGbl_XFacsIndex);
> -        }
> +        AcpiTbInstallStandardTable (
> +            (ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.Facs,
> +            ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, TRUE,
> +            &AcpiGbl_FacsIndex);
> +    }
> +    if (AcpiGbl_FADT.XFacs)
> +    {
> +        AcpiTbInstallStandardTable (
> +            (ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.XFacs,
> +            ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, TRUE,
> +            &AcpiGbl_XFacsIndex);
>       }
>   }
>   
> diff --git a/src/acpica/source/components/tables/tbutils.c b/src/acpica/source/components/tables/tbutils.c
> index 3e288971..2c5f68be 100644
> --- a/src/acpica/source/components/tables/tbutils.c
> +++ b/src/acpica/source/components/tables/tbutils.c
> @@ -165,7 +165,6 @@ AcpiTbGetRootTableEntry (
>       UINT32                  TableEntrySize);
>   
>   
> -#if (!ACPI_REDUCED_HARDWARE)
>   /*******************************************************************************
>    *
>    * FUNCTION:    AcpiTbInitializeFacs
> @@ -185,15 +184,7 @@ AcpiTbInitializeFacs (
>   {
>       ACPI_TABLE_FACS         *Facs;
>   
> -
> -    /* If Hardware Reduced flag is set, there is no FACS */
> -
> -    if (AcpiGbl_ReducedHardware)
> -    {
> -        AcpiGbl_FACS = NULL;
> -        return (AE_OK);
> -    }
> -    else if (AcpiGbl_FADT.XFacs &&
> +    if (AcpiGbl_FADT.XFacs &&
>            (!AcpiGbl_FADT.Facs || !AcpiGbl_Use32BitFacsAddresses))
>       {
>           (void) AcpiGetTableByIndex (AcpiGbl_XFacsIndex,
> @@ -211,7 +202,6 @@ AcpiTbInitializeFacs (
>   
>       return (AE_OK);
>   }
> -#endif /* !ACPI_REDUCED_HARDWARE */
>   
>   
>   /*******************************************************************************
> diff --git a/src/acpica/source/components/utilities/utdelete.c b/src/acpica/source/components/utilities/utdelete.c
> index e194dd40..922358d7 100644
> --- a/src/acpica/source/components/utilities/utdelete.c
> +++ b/src/acpica/source/components/utilities/utdelete.c
> @@ -293,7 +293,7 @@ AcpiUtDeleteInternalObj (
>               /* Global Lock has extra semaphore */
>   
>               (void) AcpiOsDeleteSemaphore (AcpiGbl_GlobalLockSemaphore);
> -            AcpiGbl_GlobalLockSemaphore = NULL;
> +            AcpiGbl_GlobalLockSemaphore = ACPI_SEMAPHORE_NULL;
>   
>               AcpiOsDeleteMutex (Object->Mutex.OsMutex);
>               AcpiGbl_GlobalLockMutex = NULL;
> @@ -312,7 +312,7 @@ AcpiUtDeleteInternalObj (
>               Object, Object->Event.OsSemaphore));
>   
>           (void) AcpiOsDeleteSemaphore (Object->Event.OsSemaphore);
> -        Object->Event.OsSemaphore = NULL;
> +        Object->Event.OsSemaphore = ACPI_SEMAPHORE_NULL;
>           break;
>   
>       case ACPI_TYPE_METHOD:
> diff --git a/src/acpica/source/components/utilities/utinit.c b/src/acpica/source/components/utilities/utinit.c
> index 4d8d0e13..e100e0f3 100644
> --- a/src/acpica/source/components/utilities/utinit.c
> +++ b/src/acpica/source/components/utilities/utinit.c
> @@ -316,7 +316,7 @@ AcpiUtInitGlobals (
>   
>       /* Global Lock support */
>   
> -    AcpiGbl_GlobalLockSemaphore         = NULL;
> +    AcpiGbl_GlobalLockSemaphore         = ACPI_SEMAPHORE_NULL;
>       AcpiGbl_GlobalLockMutex             = NULL;
>       AcpiGbl_GlobalLockAcquired          = FALSE;
>       AcpiGbl_GlobalLockHandle            = 0;
> diff --git a/src/acpica/source/components/utilities/utosi.c b/src/acpica/source/components/utilities/utosi.c
> index 789fe0fe..ebf04d27 100644
> --- a/src/acpica/source/components/utilities/utosi.c
> +++ b/src/acpica/source/components/utilities/utosi.c
> @@ -222,6 +222,7 @@ static ACPI_INTERFACE_INFO    AcpiDefaultSupportedInterfaces[] =
>       {"Windows 2019",        NULL, 0, ACPI_OSI_WIN_10_19H1},      /* Windows 10 version 1903 - Added 08/2019 */
>       {"Windows 2020",        NULL, 0, ACPI_OSI_WIN_10_20H1},      /* Windows 10 version 2004 - Added 08/2021 */
>       {"Windows 2021",        NULL, 0, ACPI_OSI_WIN_11},           /* Windows 11 - Added 01/2022 */
> +    {"Windows 2022",        NULL, 0, ACPI_OSI_WIN_11_22H2},      /* Windows 11 version 22H2 - Added 04/2024 */
>   
>       /* Feature Group Strings */
>   
> diff --git a/src/acpica/source/components/utilities/utxfinit.c b/src/acpica/source/components/utilities/utxfinit.c
> index adf7429f..c8bb0cea 100644
> --- a/src/acpica/source/components/utilities/utxfinit.c
> +++ b/src/acpica/source/components/utilities/utxfinit.c
> @@ -276,6 +276,20 @@ AcpiEnableSubsystem (
>        */
>       AcpiGbl_EarlyInitialization = FALSE;
>   
> +    /*
> +     * Obtain a permanent mapping for the FACS. This is required for the
> +     * Global Lock and the Firmware Waking Vector
> +     */
> +    if (!(Flags & ACPI_NO_FACS_INIT))
> +    {
> +        Status = AcpiTbInitializeFacs ();
> +        if (ACPI_FAILURE (Status))
> +        {
> +            ACPI_WARNING ((AE_INFO, "Could not map the FACS table"));
> +            return_ACPI_STATUS (Status);
> +        }
> +    }
> +
>   #if (!ACPI_REDUCED_HARDWARE)
>   
>       /* Enable ACPI mode */
> @@ -294,20 +308,6 @@ AcpiEnableSubsystem (
>           }
>       }
>   
> -    /*
> -     * Obtain a permanent mapping for the FACS. This is required for the
> -     * Global Lock and the Firmware Waking Vector
> -     */
> -    if (!(Flags & ACPI_NO_FACS_INIT))
> -    {
> -        Status = AcpiTbInitializeFacs ();
> -        if (ACPI_FAILURE (Status))
> -        {
> -            ACPI_WARNING ((AE_INFO, "Could not map the FACS table"));
> -            return_ACPI_STATUS (Status);
> -        }
> -    }
> -
>       /*
>        * Initialize ACPI Event handling (Fixed and General Purpose)
>        *
> diff --git a/src/acpica/source/include/acconfig.h b/src/acpica/source/include/acconfig.h
> index f795b19e..7af986fc 100644
> --- a/src/acpica/source/include/acconfig.h
> +++ b/src/acpica/source/include/acconfig.h
> @@ -210,7 +210,6 @@
>    *      General Purpose Events (GPEs)
>    *      Global Lock
>    *      ACPI PM timer
> - *      FACS table (Waking vectors and Global Lock)
>    */
>   #ifndef ACPI_REDUCED_HARDWARE
>   #define ACPI_REDUCED_HARDWARE           FALSE
> diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
> index 91ec2943..01acb57f 100644
> --- a/src/acpica/source/include/acdisasm.h
> +++ b/src/acpica/source/include/acdisasm.h
> @@ -226,6 +226,8 @@ typedef enum
>       ACPI_DMT_BUF12,
>       ACPI_DMT_BUF16,
>       ACPI_DMT_BUF18,
> +    ACPI_DMT_BUF32,
> +    ACPI_DMT_BUF112,
>       ACPI_DMT_BUF128,
>       ACPI_DMT_SIG,
>       ACPI_DMT_STRING,
> @@ -382,9 +384,17 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestGenRsrc[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestMemError[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestSmmuError[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestVendorError[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestVendorV2Error[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestGicError[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestPCIeError[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestProxyError[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestXface[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestXfaceHeader[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestXface4k[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestXface16k[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestXface64k[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestXrupt[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestXruptV2[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAgdi[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoApmtNode[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAsf0[];
> @@ -418,6 +428,8 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCedtHdr[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCedt0[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCedt1[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCedt1_te[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCedt2[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCedt2_te[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCpep[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCpep0[];
>   extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCsrt0[];
> diff --git a/src/acpica/source/include/acglobal.h b/src/acpica/source/include/acglobal.h
> index 7a87d125..fa14d6e5 100644
> --- a/src/acpica/source/include/acglobal.h
> +++ b/src/acpica/source/include/acglobal.h
> @@ -172,11 +172,7 @@ ACPI_INIT_GLOBAL (UINT32,               AcpiGbl_DsdtIndex, ACPI_INVALID_TABLE_IN
>   ACPI_INIT_GLOBAL (UINT32,               AcpiGbl_FacsIndex, ACPI_INVALID_TABLE_INDEX);
>   ACPI_INIT_GLOBAL (UINT32,               AcpiGbl_XFacsIndex, ACPI_INVALID_TABLE_INDEX);
>   ACPI_INIT_GLOBAL (UINT32,               AcpiGbl_FadtIndex, ACPI_INVALID_TABLE_INDEX);
> -
> -#if (!ACPI_REDUCED_HARDWARE)
> -ACPI_GLOBAL (ACPI_TABLE_FACS *,         AcpiGbl_FACS);
> -
> -#endif /* !ACPI_REDUCED_HARDWARE */
> +ACPI_INIT_GLOBAL (ACPI_TABLE_FACS *,    AcpiGbl_FACS, NULL);
>   
>   /* These addresses are calculated from the FADT Event Block addresses */
>   
> diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h
> index 477034fb..c8beb6f1 100644
> --- a/src/acpica/source/include/aclocal.h
> +++ b/src/acpica/source/include/aclocal.h
> @@ -1412,6 +1412,8 @@ typedef struct acpi_port_info
>   #define ACPI_ADDRESS_TYPE_IO_RANGE              1
>   #define ACPI_ADDRESS_TYPE_BUS_NUMBER_RANGE      2
>   
> +#define ACPI_ADDRESS_TYPE_PCC_NUMBER            0xA
> +
>   /* Resource descriptor types and masks */
>   
>   #define ACPI_RESOURCE_NAME_LARGE                0x80
> diff --git a/src/acpica/source/include/acoutput.h b/src/acpica/source/include/acoutput.h
> index 6e1b317d..c270d2c8 100644
> --- a/src/acpica/source/include/acoutput.h
> +++ b/src/acpica/source/include/acoutput.h
> @@ -336,6 +336,7 @@
>    */
>   #ifndef ACPI_NO_ERROR_MESSAGES
>   #define AE_INFO                         _AcpiModuleName, __LINE__
> +#define ACPI_ONCE(_fn, _plist)                  { static char _done; if (!_done) { _done = 1; _fn _plist; } }
>   
>   /*
>    * Error reporting. Callers module and line number are inserted by AE_INFO,
> @@ -344,8 +345,10 @@
>    */
>   #define ACPI_INFO(plist)                AcpiInfo plist
>   #define ACPI_WARNING(plist)             AcpiWarning plist
> +#define ACPI_WARNING_ONCE(plist)        ACPI_ONCE(AcpiWarning, plist)
>   #define ACPI_EXCEPTION(plist)           AcpiException plist
>   #define ACPI_ERROR(plist)               AcpiError plist
> +#define ACPI_ERROR_ONCE(plist)          ACPI_ONCE(AcpiError, plist)
>   #define ACPI_BIOS_WARNING(plist)        AcpiBiosWarning plist
>   #define ACPI_BIOS_EXCEPTION(plist)      AcpiBiosException plist
>   #define ACPI_BIOS_ERROR(plist)          AcpiBiosError plist
> @@ -357,8 +360,10 @@
>   
>   #define ACPI_INFO(plist)
>   #define ACPI_WARNING(plist)
> +#define ACPI_WARNING_ONCE(plist)
>   #define ACPI_EXCEPTION(plist)
>   #define ACPI_ERROR(plist)
> +#define ACPI_ERROR_ONCE(plist)
>   #define ACPI_BIOS_WARNING(plist)
>   #define ACPI_BIOS_EXCEPTION(plist)
>   #define ACPI_BIOS_ERROR(plist)
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index ba4adf28..53d56a95 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                 0x20240322
> +#define ACPI_CA_VERSION                 0x20240827
>   
>   #include "acconfig.h"
>   #include "actypes.h"
> @@ -1295,7 +1295,7 @@ ACPI_STATUS
>   AcpiLeaveSleepState (
>       UINT8                   SleepState))
>   
> -ACPI_HW_DEPENDENT_RETURN_STATUS (
> +ACPI_EXTERNAL_RETURN_STATUS (
>   ACPI_STATUS
>   AcpiSetFirmwareWakingVector (
>       ACPI_PHYSICAL_ADDRESS   PhysicalAddress,
> diff --git a/src/acpica/source/include/acpredef.h b/src/acpica/source/include/acpredef.h
> index c8ac10b2..144aedf0 100644
> --- a/src/acpica/source/include/acpredef.h
> +++ b/src/acpica/source/include/acpredef.h
> @@ -587,7 +587,7 @@ const ACPI_PREDEFINED_INFO          AcpiGbl_PredefinedMethods[] =
>                   METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each: 1 Buf, 1 Pkg */
>                       PACKAGE_INFO (ACPI_PTYPE2_UUID_PAIR, ACPI_RTYPE_BUFFER, 1, ACPI_RTYPE_PACKAGE, 1,0),
>   
> -    {{"_DSM",   METHOD_4ARGS (ACPI_TYPE_BUFFER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_PACKAGE),
> +    {{"_DSM",   METHOD_4ARGS (ACPI_TYPE_BUFFER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_ANY) | ARG_COUNT_IS_MINIMUM,
>                   METHOD_RETURNS (ACPI_RTYPE_ALL)}}, /* Must return a value, but it can be of any type */
>   
>       {{"_DSS",   METHOD_1ARGS (ACPI_TYPE_INTEGER),
> diff --git a/src/acpica/source/include/actbinfo.h b/src/acpica/source/include/actbinfo.h
> index 4f2bfd1f..19692837 100644
> --- a/src/acpica/source/include/actbinfo.h
> +++ b/src/acpica/source/include/actbinfo.h
> @@ -225,9 +225,17 @@
>   #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_AEST3A_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_AEST_VENDOR_V2,f)
>   #define ACPI_AEST4_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_AEST_GIC,f)
> +#define ACPI_AEST5_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_AEST_PCIE,f)
> +#define ACPI_AEST6_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_AEST_PROXY,f)
>   #define ACPI_AEST0D_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERFACE,f)
> +#define ACPI_AEST0DH_OFFSET(f)          (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERFACE_HEADER,f)
> +#define ACPI_AEST0D4_OFFSET(f)          (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERFACE_4K,f)
> +#define ACPI_AEST0D16_OFFSET(f)         (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERFACE_16K,f)
> +#define ACPI_AEST0D64_OFFSET(f)         (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERFACE_64K,f)
>   #define ACPI_AEST0E_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERRUPT,f)
> +#define ACPI_AEST0EA_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERRUPT_V2,f)
>   #define ACPI_APMTN_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_APMT_NODE,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)
> @@ -253,6 +261,8 @@
>   #define ACPI_CEDT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_CEDT_CHBS, f)
>   #define ACPI_CEDT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_CEDT_CFMWS, f)
>   #define ACPI_CEDT1_TE_OFFSET(f)         (UINT16) ACPI_OFFSET (ACPI_CEDT_CFMWS_TARGET_ELEMENT, f)
> +#define ACPI_CEDT2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_CEDT_CXIMS, f)
> +#define ACPI_CEDT2_TE_OFFSET(f)         (UINT16) ACPI_OFFSET (ACPI_CEDT_CXIMS_TARGET_ELEMENT, f)
>   #define ACPI_CPEP0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_CPEP_POLLING,f)
>   #define ACPI_CSRT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_CSRT_GROUP,f)
>   #define ACPI_CSRT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_CSRT_SHARED_INFO,f)
> @@ -446,6 +456,7 @@
>   #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_AEST0EA_FLAG_OFFSET(f,o)    ACPI_FLAG_OFFSET (ACPI_AEST_NODE_INTERRUPT_V2,f,o)
>   #define ACPI_AGDI_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_AGDI,f,o)
>   #define ACPI_APMTN_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_APMT_NODE,f,o)
>   #define ACPI_BGRT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_BGRT,f,o)
> diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h
> index 5816a812..71cbc36d 100644
> --- a/src/acpica/source/include/actbl1.h
> +++ b/src/acpica/source/include/actbl1.h
> @@ -822,13 +822,20 @@ typedef struct acpi_cedt_cfmws_target_element
>   
>   /* 2: CXL XOR Interleave Math Structure */
>   
> -struct acpi_cedt_cxims {
> +typedef struct acpi_cedt_cxims {
>       ACPI_CEDT_HEADER        Header;
>       UINT16                  Reserved1;
>       UINT8                   Hbig;
>       UINT8                   NrXormaps;
>       UINT64                  XormapList[];
> -};
> +} ACPI_CEDT_CXIMS;
> +
> +typedef struct acpi_cedt_cxims_target_element
> +{
> +    UINT64                   Xormap;
> +
> +} ACPI_CEDT_CXIMS_TARGET_ELEMENT;
> +
>   
>   /* 3: CXL RCEC Downstream Port Association Structure */
>   
> @@ -1038,6 +1045,7 @@ typedef struct acpi_dbg2_device
>   #define ACPI_DBG2_16550_WITH_GAS    0x0012
>   #define ACPI_DBG2_SDM845_7_372MHZ   0x0013
>   #define ACPI_DBG2_INTEL_LPSS        0x0014
> +#define ACPI_DBG2_RISCV_SBI_CON     0x0015
>   
>   #define ACPI_DBG2_1394_STANDARD     0x0000
>   
> @@ -2262,7 +2270,7 @@ typedef struct acpi_hmat_cache
>       UINT32                  Reserved1;
>       UINT64                  CacheSize;
>       UINT32                  CacheAttributes;
> -    UINT16                  Reserved2;
> +    UINT16                  AddressMode;
>       UINT16                  NumberOfSMBIOSHandles;
>   
>   } ACPI_HMAT_CACHE;
> @@ -2275,6 +2283,9 @@ typedef struct acpi_hmat_cache
>   #define ACPI_HMAT_WRITE_POLICY          (0x0000F000)
>   #define ACPI_HMAT_CACHE_LINE_SIZE       (0xFFFF0000)
>   
> +#define ACPI_HMAT_CACHE_MODE_UNKNOWN            (0)
> +#define ACPI_HMAT_CACHE_MODE_EXTENDED_LINEAR    (1)
> +
>   /* Values for cache associativity flag */
>   
>   #define ACPI_HMAT_CA_NONE                     (0)
> diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h
> index 99076bbc..cc09702b 100644
> --- a/src/acpica/source/include/actbl2.h
> +++ b/src/acpica/source/include/actbl2.h
> @@ -259,7 +259,9 @@ typedef struct acpi_aest_hdr
>   #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 */
> +#define ACPI_AEST_PCIE_ERROR_NODE           5
> +#define ACPI_AEST_PROXY_ERROR_NODE          6
> +#define ACPI_AEST_NODE_TYPE_RESERVED        7 /* 7 and above are reserved */
>   
>   
>   /*
> @@ -346,6 +348,16 @@ typedef struct acpi_aest_vendor
>   
>   } ACPI_AEST_VENDOR;
>   
> +/* 3: Vendor Defined V2 */
> +
> +typedef struct acpi_aest_vendor_v2
> +{
> +    UINT64                  AcpiHid;
> +    UINT32                  AcpiUid;
> +    UINT8                   VendorSpecificData[16];
> +
> +} ACPI_AEST_VENDOR_V2;
> +
>   /* 4: Gic Error */
>   
>   typedef struct acpi_aest_gic
> @@ -363,6 +375,22 @@ typedef struct acpi_aest_gic
>   #define ACPI_AEST_GIC_ITS                   3
>   #define ACPI_AEST_GIC_RESERVED              4   /* 4 and above are reserved */
>   
> +/* 5: PCIe Error */
> +
> +typedef struct acpi_aest_pcie
> +{
> +    UINT32                  IortNodeReference;
> +
> +} ACPI_AEST_PCIE;
> +
> +
> +/* 6: Proxy Error */
> +
> +typedef struct acpi_aest_proxy
> +{
> +    UINT64                  NodeAddress;
> +
> +} ACPI_AEST_PROXY;
>   
>   /* Node Interface Structure */
>   
> @@ -380,11 +408,67 @@ typedef struct acpi_aest_node_interface
>   
>   } ACPI_AEST_NODE_INTERFACE;
>   
> +/* Node Interface Structure V2*/
> +
> +typedef struct acpi_aest_node_interface_header
> +{
> +    UINT8                   Type;
> +    UINT8                   GroupFormat;
> +    UINT8                   Reserved[2];
> +    UINT32                  Flags;
> +    UINT64                  Address;
> +    UINT32                  ErrorRecordIndex;
> +    UINT32                  ErrorRecordCount;
> +
> +} ACPI_AEST_NODE_INTERFACE_HEADER;
> +
> +#define ACPI_AEST_NODE_GROUP_FORMAT_4K             0
> +#define ACPI_AEST_NODE_GROUP_FORMAT_16K            1
> +#define ACPI_AEST_NODE_GROUP_FORMAT_64K            2
> +
> +typedef struct acpi_aest_node_interface_common
> +{
> +    UINT32                             ErrorNodeDevice;
> +    UINT32                             ProcessorAffinity;
> +    UINT64                             ErrorGroupRegisterBase;
> +    UINT64                             FaultInjectRegisterBase;
> +    UINT64                             InterruptConfigRegisterBase;
> +
> +} ACPI_AEST_NODE_INTERFACE_COMMON;
> +
> +typedef struct acpi_aest_node_interface_4k
> +{
> +    UINT64                             ErrorRecordImplemented;
> +    UINT64                             ErrorStatusReporting;
> +    UINT64                             AddressingMode;
> +    ACPI_AEST_NODE_INTERFACE_COMMON    Common;
> +
> +} ACPI_AEST_NODE_INTERFACE_4K;
> +
> +typedef struct acpi_aest_node_interface_16k
> +{
> +    UINT64                             ErrorRecordImplemented[4];
> +    UINT64                             ErrorStatusReporting[4];
> +    UINT64                             AddressingMode[4];
> +    ACPI_AEST_NODE_INTERFACE_COMMON    Common;
> +
> +} ACPI_AEST_NODE_INTERFACE_16K;
> +
> +typedef struct acpi_aest_node_interface_64k
> +{
> +    INT64                              ErrorRecordImplemented[14];
> +    UINT64                             ErrorStatusReporting[14];
> +    UINT64                             AddressingMode[14];
> +    ACPI_AEST_NODE_INTERFACE_COMMON    Common;
> +
> +} ACPI_AEST_NODE_INTERFACE_64K;
> +
>   /* 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 */
> +#define ACPI_AEST_NODE_SYSTEM_REGISTER                    0
> +#define ACPI_AEST_NODE_MEMORY_MAPPED                      1
> +#define ACPI_AEST_NODE_SINGLE_RECORD_MEMORY_MAPPED        2
> +#define ACPI_AEST_XFACE_RESERVED                          3   /* 2 and above are reserved */
>   
>   /* Node Interrupt Structure */
>   
> @@ -399,6 +483,18 @@ typedef struct acpi_aest_node_interrupt
>   
>   } ACPI_AEST_NODE_INTERRUPT;
>   
> +/* Node Interrupt Structure V2 */
> +
> +typedef struct acpi_aest_node_interrupt_v2
> +{
> +    UINT8                   Type;
> +    UINT8                   Reserved[2];
> +    UINT8                   Flags;
> +    UINT32                  Gsiv;
> +    UINT8                   Reserved1[4];
> +
> +} ACPI_AEST_NODE_INTERRUPT_V2;
> +
>   /* Values for Type field above */
>   
>   #define ACPI_AEST_NODE_FAULT_HANDLING       0
> @@ -548,7 +644,7 @@ typedef struct acpi_table_ccel
>    * IORT - IO Remapping Table
>    *
>    * Conforms to "IO Remapping Table System Software on ARM Platforms",
> - * Document number: ARM DEN 0049E.e, Sep 2022
> + * Document number: ARM DEN 0049E.f, Apr 2024
>    *
>    ******************************************************************************/
>   
> @@ -631,6 +727,7 @@ typedef struct acpi_iort_memory_access
>   
>   #define ACPI_IORT_MF_COHERENCY          (1)
>   #define ACPI_IORT_MF_ATTRIBUTES         (1<<1)
> +#define ACPI_IORT_MF_CANWBS             (1<<2)
>   
>   
>   /*
> @@ -1835,7 +1932,7 @@ typedef struct acpi_mpam_msc_node
>       UINT32                     MaxNrdyUsec;
>       UINT64                     HardwareIdLinkedDevice;
>       UINT32                     InstanceIdLinkedDevice;
> -    UINT32                     NumResouceNodes;
> +    UINT32                     NumResourceNodes;
>   } ACPI_MPAM_MSC_NODE;
>   
>   typedef struct acpi_table_mpam
> diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h
> index 477d70af..31619792 100644
> --- a/src/acpica/source/include/actbl3.h
> +++ b/src/acpica/source/include/actbl3.h
> @@ -243,10 +243,10 @@ typedef struct acpi_table_slit
>   /*******************************************************************************
>    *
>    * SPCR - Serial Port Console Redirection table
> - *        Version 2
> + *        Version 4
>    *
>    * Conforms to "Serial Port Console Redirection Table",
> - * Version 1.03, August 10, 2015
> + * Version 1.10, Jan 5, 2023
>    *
>    ******************************************************************************/
>   
> @@ -264,7 +264,7 @@ typedef struct acpi_table_spcr
>       UINT8                   StopBits;
>       UINT8                   FlowControl;
>       UINT8                   TerminalType;
> -    UINT8                   Reserved1;
> +    UINT8                   Language;
>       UINT16                  PciDeviceId;
>       UINT16                  PciVendorId;
>       UINT8                   PciBus;
> @@ -272,7 +272,11 @@ typedef struct acpi_table_spcr
>       UINT8                   PciFunction;
>       UINT32                  PciFlags;
>       UINT8                   PciSegment;
> -    UINT32                  Reserved2;
> +    UINT32                  UartClkFreq;
> +    UINT32                  PreciseBaudrate;
> +    UINT16                  NameSpaceStringLength;
> +    UINT16                  NameSpaceStringOffset;
> +    char                    NameSpaceString[];
>   
>   } ACPI_TABLE_SPCR;
>   
> diff --git a/src/acpica/source/include/actypes.h b/src/acpica/source/include/actypes.h
> index 695dbb14..5e1012d8 100644
> --- a/src/acpica/source/include/actypes.h
> +++ b/src/acpica/source/include/actypes.h
> @@ -1561,6 +1561,7 @@ typedef enum
>   #define ACPI_OSI_WIN_10_19H1            0x14
>   #define ACPI_OSI_WIN_10_20H1            0x15
>   #define ACPI_OSI_WIN_11                 0x16
> +#define ACPI_OSI_WIN_11_22H2            0x17
>   
>   
>   /* Definitions of getopt */
> diff --git a/src/acpica/source/include/platform/acenv.h b/src/acpica/source/include/platform/acenv.h
> index e7c8678d..cc198c01 100644
> --- a/src/acpica/source/include/platform/acenv.h
> +++ b/src/acpica/source/include/platform/acenv.h
> @@ -403,6 +403,12 @@
>   #define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Pending) Pending = 0
>   #endif
>   
> +/* NULL/invalid value to use for destroyed or not-yet-created semaphores. */
> +
> +#ifndef ACPI_SEMAPHORE_NULL
> +#define ACPI_SEMAPHORE_NULL NULL
> +#endif
> +
>   /* Flush CPU cache - used when going to sleep. Wbinvd or similar. */
>   
>   #ifndef ACPI_FLUSH_CPU_CACHE
diff mbox series

Patch

diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c
index e9714d2e..31fd9aeb 100644
--- a/src/acpica/source/common/dmtable.c
+++ b/src/acpica/source/common/dmtable.c
@@ -190,6 +190,8 @@  static const char           *AcpiDmAestSubnames[] =
     "SMMU Error Node",
     "Vendor-defined Error Node",
     "GIC Error Node",
+    "PCIE Error Node",
+    "PROXY Error Node",
     "Unknown Subtable Type"         /* Reserved */
 };
 
@@ -214,6 +216,7 @@  static const char           *AcpiDmAestXfaceNames[] =
 {
     "System Register Interface",
     "Memory Mapped Interface",
+    "Single Record Memory Mapped Interface",
     "Unknown Interface Type"        /* Reserved */
 };
 
@@ -257,6 +260,7 @@  static const char           *AcpiDmCedtSubnames[] =
 {
     "CXL Host Bridge Structure",
     "CXL Fixed Memory Window Structure",
+    "CXL XOR Interleave Math Structure",
     "Unknown Subtable Type"         /* Reserved */
 };
 
@@ -1082,7 +1086,7 @@  AcpiDmDumpTable (
         {
             AcpiOsPrintf (
                 "/**** ACPI table terminates "
-                "in the middle of a data structure! (dump table) \n"
+                "in the middle of a data structure! (dump table)\n"
                 "CurrentOffset: %X, TableLength: %X ***/", CurrentOffset, TableLength);
             return (AE_BAD_DATA);
         }
@@ -1197,6 +1201,16 @@  AcpiDmDumpTable (
             ByteLength = 18;
             break;
 
+        case ACPI_DMT_BUF32:
+
+            ByteLength = 32;
+            break;
+
+        case ACPI_DMT_BUF112:
+
+            ByteLength = 112;
+            break;
+
         case ACPI_DMT_BUF128:
 
             ByteLength = 128;
@@ -1408,6 +1422,8 @@  AcpiDmDumpTable (
         case ACPI_DMT_BUF12:
         case ACPI_DMT_BUF16:
         case ACPI_DMT_BUF18:
+        case ACPI_DMT_BUF32:
+        case ACPI_DMT_BUF112:
         case ACPI_DMT_BUF128:
             /*
              * Buffer: Size depends on the opcode and was set above.
diff --git a/src/acpica/source/common/dmtbdump.c b/src/acpica/source/common/dmtbdump.c
index 2feb7644..a84dc98a 100644
--- a/src/acpica/source/common/dmtbdump.c
+++ b/src/acpica/source/common/dmtbdump.c
@@ -562,7 +562,7 @@  AcpiDmDumpFadt (
 
         /* Check for FADT revision 6 fields and up (ACPI 6.0+) */
 
-        if (Table->Length > ACPI_FADT_V3_SIZE)
+        if (Table->Length > ACPI_FADT_V5_SIZE)
         {
             Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
                 AcpiDmTableInfoFadt6);
@@ -635,6 +635,11 @@  AcpiDmValidateFadtLength (
         ExpectedLength = ACPI_FADT_V5_SIZE;
         break;
 
+    case 6:
+
+        ExpectedLength = ACPI_FADT_V6_SIZE;
+        break;
+
     default:
 
         return;
diff --git a/src/acpica/source/common/dmtbdump1.c b/src/acpica/source/common/dmtbdump1.c
index d5b6e04f..56d959fd 100644
--- a/src/acpica/source/common/dmtbdump1.c
+++ b/src/acpica/source/common/dmtbdump1.c
@@ -195,6 +195,9 @@  AcpiDmDumpAest (
     ACPI_DMTABLE_INFO       *InfoTable;
     ACPI_SIZE               Length;
     UINT8                   Type;
+    UINT8                   Revision = Table->Revision;
+    UINT32                  Count;
+    ACPI_AEST_NODE_INTERFACE_HEADER *InterfaceHeader;
 
 
     /* Very small, generic main table. AEST consists of mostly subtables */
@@ -234,8 +237,22 @@  AcpiDmDumpAest (
             break;
 
         case ACPI_AEST_VENDOR_ERROR_NODE:
-            InfoTable = AcpiDmTableInfoAestVendorError;
-            Length = sizeof (ACPI_AEST_VENDOR);
+            switch (Revision)
+            {
+            case 1:
+                InfoTable = AcpiDmTableInfoAestVendorError;
+                Length = sizeof (ACPI_AEST_VENDOR);
+                break;
+
+            case 2:
+                InfoTable = AcpiDmTableInfoAestVendorV2Error;
+                Length = sizeof (ACPI_AEST_VENDOR_V2);
+                break;
+
+            default:
+                AcpiOsPrintf ("\n**** Unknown AEST revision 0x%X\n", Revision);
+                return;
+            }
             break;
 
         case ACPI_AEST_GIC_ERROR_NODE:
@@ -243,6 +260,16 @@  AcpiDmDumpAest (
             Length = sizeof (ACPI_AEST_GIC);
             break;
 
+        case ACPI_AEST_PCIE_ERROR_NODE:
+            InfoTable = AcpiDmTableInfoAestPCIeError;
+            Length = sizeof (ACPI_AEST_PCIE);
+            break;
+
+        case ACPI_AEST_PROXY_ERROR_NODE:
+            InfoTable = AcpiDmTableInfoAestProxyError;
+            Length = sizeof (ACPI_AEST_PROXY);
+            break;
+
         /* Error case below */
         default:
 
@@ -335,8 +362,57 @@  AcpiDmDumpAest (
             return;
         }
 
-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
-            sizeof (ACPI_AEST_NODE_INTERFACE), AcpiDmTableInfoAestXface);
+        if (Revision == 1)
+        {
+            InfoTable = AcpiDmTableInfoAestXface;
+            Length = sizeof (ACPI_AEST_NODE_INTERFACE);
+        }
+        else if (Revision == 2)
+        {
+            InfoTable = AcpiDmTableInfoAestXfaceHeader;
+            Length = sizeof (ACPI_AEST_NODE_INTERFACE_HEADER);
+
+            Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Length, InfoTable);
+            if (ACPI_FAILURE (Status))
+            {
+                return;
+            }
+
+            Offset += Length;
+
+            InterfaceHeader = ACPI_CAST_PTR (ACPI_AEST_NODE_INTERFACE_HEADER, Subtable);
+            switch (InterfaceHeader->GroupFormat)
+	        {
+            case ACPI_AEST_NODE_GROUP_FORMAT_4K:
+                InfoTable = AcpiDmTableInfoAestXface4k;
+                Length = sizeof (ACPI_AEST_NODE_INTERFACE_4K);
+                break;
+
+            case ACPI_AEST_NODE_GROUP_FORMAT_16K:
+                InfoTable = AcpiDmTableInfoAestXface16k;
+                Length = sizeof (ACPI_AEST_NODE_INTERFACE_16K);
+                break;
+
+            case ACPI_AEST_NODE_GROUP_FORMAT_64K:
+                InfoTable = AcpiDmTableInfoAestXface64k;
+                Length = sizeof (ACPI_AEST_NODE_INTERFACE_64K);
+                break;
+
+            default:
+                AcpiOsPrintf ("\n**** Unknown AEST Interface Group Format 0x%X\n",
+                    InterfaceHeader->GroupFormat);
+                return;
+            }
+
+            Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset);
+        }
+        else
+        {
+            AcpiOsPrintf ("\n**** Unknown AEST revision 0x%X\n", Revision);
+            return;
+        }
+
+        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, Length, InfoTable);
         if (ACPI_FAILURE (Status))
         {
             return;
@@ -345,22 +421,36 @@  AcpiDmDumpAest (
         /* Point past the interface structure */
 
         AcpiOsPrintf ("\n");
-        Offset += sizeof (ACPI_AEST_NODE_INTERFACE);
+        Offset += Length;
 
         /* Dump the entire interrupt structure array, if present */
 
         if (NodeHeader->NodeInterruptOffset)
         {
-            Length = NodeHeader->NodeInterruptCount;
+            Count = NodeHeader->NodeInterruptCount;
             Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset);
 
-            while (Length)
+            while (Count)
             {
                 /* Dump the interrupt structure */
 
+                switch (Revision) {
+                case 1:
+                    InfoTable = AcpiDmTableInfoAestXrupt;
+                    Length = sizeof (ACPI_AEST_NODE_INTERRUPT);
+                    break;
+
+                case 2:
+                    InfoTable = AcpiDmTableInfoAestXruptV2;
+                    Length = sizeof (ACPI_AEST_NODE_INTERRUPT_V2);
+                    break;
+                default:
+                    AcpiOsPrintf ("\n**** Unknown AEST revision 0x%X\n",
+                        Revision);
+                    return;
+                }
                 Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
-                    sizeof (ACPI_AEST_NODE_INTERRUPT),
-                    AcpiDmTableInfoAestXrupt);
+                    Length, InfoTable);
                 if (ACPI_FAILURE (Status))
                 {
                     return;
@@ -368,9 +458,9 @@  AcpiDmDumpAest (
 
                 /* Point to the next interrupt structure */
 
-                Offset += sizeof (ACPI_AEST_NODE_INTERRUPT);
+                Offset += Length;
                 Subtable = ACPI_ADD_PTR (ACPI_AEST_HEADER, Table, Offset);
-                Length--;
+                Count--;
                 AcpiOsPrintf ("\n");
             }
         }
@@ -936,9 +1026,14 @@  AcpiDmDumpCedt (
         case ACPI_CEDT_TYPE_CFMWS:
         {
             ACPI_CEDT_CFMWS *ptr = (ACPI_CEDT_CFMWS *) Subtable;
-            unsigned int i, max = 0x01 << (ptr->InterleaveWays);
+            unsigned int i, max;
+
+            if (ptr->InterleaveWays < 8)
+                max = 1 << (ptr->InterleaveWays);
+            else
+                max = 3 << (ptr->InterleaveWays - 8);
 
-            /* print out table with first "Interleave target" */
+	    /* print out table with first "Interleave target" */
 
             Status = AcpiDmDumpTable (Length, Offset, Subtable,
                 Subtable->Length, AcpiDmTableInfoCedt1);
@@ -964,6 +1059,37 @@  AcpiDmDumpCedt (
             break;
         }
 
+        case ACPI_CEDT_TYPE_CXIMS:
+        {
+            ACPI_CEDT_CXIMS *ptr = (ACPI_CEDT_CXIMS *) Subtable;
+            unsigned int i, max = ptr->NrXormaps;
+
+            /* print out table with first "XOR Map" */
+
+            Status = AcpiDmDumpTable (Length, Offset, Subtable,
+                Subtable->Length, AcpiDmTableInfoCedt2);
+            if (ACPI_FAILURE (Status))
+            {
+                return;
+            }
+
+            /* Now, print out any XOR Map beyond the first. */
+
+            for (i = 1; i < max; i++)
+            {
+                unsigned int loc_offset = Offset + (i * 1) + ACPI_OFFSET (ACPI_CEDT_CXIMS, XormapList);
+                UINT64 *trg = &(ptr->XormapList[i]);
+
+                Status = AcpiDmDumpTable (Length, loc_offset, trg,
+                        Subtable->Length, AcpiDmTableInfoCedt2_te);
+                if (ACPI_FAILURE (Status))
+                {
+                    return;
+                }
+            }
+            break;
+        }
+
         default:
             AcpiOsPrintf ("\n**** Unknown CEDT subtable type 0x%X\n\n",
                 Subtable->Type);
@@ -1245,8 +1371,8 @@  AcpiDmDumpDbg2 (
 
         if (Subtable->OemDataOffset)
         {
-            Status = AcpiDmDumpTable (Length, Offset + Subtable->OemDataOffset,
-                Table, Subtable->OemDataLength,
+            Status = AcpiDmDumpTable (Length, Subtable->OemDataOffset,
+                Subtable, Subtable->OemDataLength,
                 AcpiDmTableInfoDbg2OemData);
             if (ACPI_FAILURE (Status))
             {
diff --git a/src/acpica/source/common/dmtbdump2.c b/src/acpica/source/common/dmtbdump2.c
index 71198f74..deff9c33 100644
--- a/src/acpica/source/common/dmtbdump2.c
+++ b/src/acpica/source/common/dmtbdump2.c
@@ -1213,8 +1213,10 @@  AcpiDmDumpMpam (
     ACPI_STATUS                Status;
     ACPI_MPAM_MSC_NODE         *MpamMscNode;
     ACPI_MPAM_RESOURCE_NODE    *MpamResourceNode;
+    ACPI_MPAM_FUNC_DEPS	       *MpamFunctionalDependency;
     ACPI_DMTABLE_INFO          *InfoTable;
     UINT32                     Offset = sizeof(ACPI_TABLE_HEADER);
+    UINT32		       TempOffset;
     UINT32                     MpamResourceNodeLength = 0;
 
     while (Offset < Table->Length)
@@ -1222,8 +1224,8 @@  AcpiDmDumpMpam (
         MpamMscNode = ACPI_ADD_PTR (ACPI_MPAM_MSC_NODE, Table, Offset);
 
         /* Subtable: MSC */
-        Status = AcpiDmDumpTable (MpamMscNode->Length, 0, MpamMscNode, 0,
-            AcpiDmTableInfoMpam0);
+        Status = AcpiDmDumpTable (Table->Length, Offset, MpamMscNode,
+            MpamMscNode->Length, AcpiDmTableInfoMpam0);
         if (ACPI_FAILURE (Status))
         {
             return;
@@ -1233,18 +1235,19 @@  AcpiDmDumpMpam (
         Offset += sizeof(ACPI_MPAM_MSC_NODE);
 
         /* Subtable: MSC RIS(es) */
-        for (UINT32 ResourceIdx = 0; ResourceIdx < MpamMscNode->NumResouceNodes; ResourceIdx++)
+        for (UINT32 ResourceIdx = 0; ResourceIdx < MpamMscNode->NumResourceNodes; ResourceIdx++)
         {
+	    AcpiOsPrintf ("\n");
             MpamResourceNode = ACPI_ADD_PTR (ACPI_MPAM_RESOURCE_NODE, Table, Offset);
 
             MpamResourceNodeLength = sizeof(ACPI_MPAM_RESOURCE_NODE) +
                 MpamResourceNode->NumFunctionalDeps * sizeof(ACPI_MPAM_FUNC_DEPS);
-
+	    TempOffset = Offset;
             Offset += MpamResourceNodeLength;
 
             /* Subtable: MSC RIS */
-            Status = AcpiDmDumpTable (MpamResourceNodeLength, 0, MpamResourceNode, 0,
-                AcpiDmTableInfoMpam1);
+	    Status = AcpiDmDumpTable (Table->Length, TempOffset, MpamResourceNode,
+		sizeof(ACPI_MPAM_RESOURCE_NODE), AcpiDmTableInfoMpam1);
             if (ACPI_FAILURE (Status))
             {
                 return;
@@ -1279,30 +1282,40 @@  AcpiDmDumpMpam (
             }
 
             /* Subtable: MSC Resource Locator(s) */
-            Status = AcpiDmDumpTable (sizeof(ACPI_MPAM_RESOURCE_LOCATOR), 0,
-                &MpamResourceNode->Locator, 0, InfoTable);
+	    TempOffset += ACPI_OFFSET(ACPI_MPAM_RESOURCE_NODE, Locator);
+	    Status = AcpiDmDumpTable (Table->Length, TempOffset, &MpamResourceNode->Locator,
+		sizeof(ACPI_MPAM_RESOURCE_LOCATOR), InfoTable);
             if (ACPI_FAILURE (Status))
             {
                 return;
             }
 
             /* Get the number of functional dependencies of an RIS */
-            Status = AcpiDmDumpTable (sizeof(UINT32), 0, &MpamResourceNode->NumFunctionalDeps, 0,
-                AcpiDmTableInfoMpam1Deps);
+	    TempOffset += sizeof(ACPI_MPAM_RESOURCE_LOCATOR);
+            Status = AcpiDmDumpTable (Table->Length, TempOffset, &MpamResourceNode->NumFunctionalDeps,
+		sizeof(UINT32), AcpiDmTableInfoMpam1Deps);
             if (ACPI_FAILURE (Status))
             {
                 return;
             }
 
+	    TempOffset += sizeof(UINT32);
+	    MpamFunctionalDependency = ACPI_ADD_PTR (ACPI_MPAM_FUNC_DEPS, MpamResourceNode,
+		sizeof(ACPI_MPAM_RESOURCE_NODE));
             /* Subtable: MSC functional dependencies */
             for (UINT32 funcDep = 0; funcDep < MpamResourceNode->NumFunctionalDeps; funcDep++)
             {
+		AcpiOsPrintf ("\n");
                 Status = AcpiDmDumpTable (sizeof(ACPI_MPAM_FUNC_DEPS), 0,
                     &MpamResourceNode->NumFunctionalDeps, 0, AcpiDmTableInfoMpam2);
+		Status = AcpiDmDumpTable (Table->Length, TempOffset, MpamFunctionalDependency,
+		    sizeof(ACPI_MPAM_FUNC_DEPS), AcpiDmTableInfoMpam2);
                 if (ACPI_FAILURE (Status))
                 {
                     return;
                 }
+		TempOffset += sizeof(ACPI_MPAM_FUNC_DEPS);
+		MpamFunctionalDependency++;
             }
 
             AcpiOsPrintf ("\n\n");
@@ -1881,6 +1894,7 @@  AcpiDmDumpPhat (
     ACPI_DMTABLE_INFO       *InfoTable;
     ACPI_PHAT_HEADER        *Subtable;
     ACPI_PHAT_VERSION_DATA  *VersionData;
+    ACPI_PHAT_HEALTH_DATA   *HealthData;
     UINT32                  RecordCount;
     UINT32                  Length = Table->Length;
     UINT32                  Offset = sizeof (ACPI_TABLE_PHAT);
@@ -1889,7 +1903,6 @@  AcpiDmDumpPhat (
     UINT32                  PathLength;
     UINT32                  VendorLength;
     UINT16                  RecordType;
-    const wchar_t           *WideString;
 
 
     Subtable = ACPI_ADD_PTR (ACPI_PHAT_HEADER, Table, sizeof (ACPI_TABLE_PHAT));
@@ -1914,13 +1927,13 @@  AcpiDmDumpPhat (
         case ACPI_PHAT_TYPE_FW_VERSION_DATA:
 
             InfoTable = AcpiDmTableInfoPhat0;
-            SubtableLength = Offset += sizeof (ACPI_PHAT_VERSION_DATA);
+            SubtableLength = sizeof (ACPI_PHAT_VERSION_DATA);
             break;
 
         case ACPI_PHAT_TYPE_FW_HEALTH_DATA:
 
             InfoTable = AcpiDmTableInfoPhat1;
-            SubtableLength = Offset += sizeof (ACPI_PHAT_TYPE_FW_HEALTH_DATA);
+            SubtableLength = sizeof (ACPI_PHAT_HEALTH_DATA);
             break;
 
         default:
@@ -1931,13 +1944,15 @@  AcpiDmDumpPhat (
             return;
         }
 
-        Status = AcpiDmDumpTable (Length, SubtableLength, Subtable,
+        Status = AcpiDmDumpTable (Length, Offset, Subtable,
             SubtableLength, InfoTable);
         if (ACPI_FAILURE (Status))
         {
             return;
         }
 
+        Offset += SubtableLength;
+
         OriginalOffset = Offset;
         switch (Subtable->Type)
         {
@@ -1993,39 +2008,55 @@  AcpiDmDumpPhat (
 
         case ACPI_PHAT_TYPE_FW_HEALTH_DATA:
 
-            /*
-             * Get the length of the Device Path (UEFI wide string).
-             * Include the wide null terminator (+2),
-             */
-            WideString = ACPI_ADD_PTR (wchar_t, Subtable,
-                sizeof (ACPI_PHAT_HEALTH_DATA));
-
-            PathLength = (wcslen (WideString) * 2) + 2;
-            DbgPrint (ASL_DEBUG_OUTPUT, "/* %u, PathLength %X, Offset %X, Table->Length %X */\n",
-                __LINE__, PathLength, Offset, Length);
+            HealthData = ACPI_CAST_PTR (ACPI_PHAT_HEALTH_DATA, Subtable);
+            PathLength = Subtable->Length - sizeof (ACPI_PHAT_HEALTH_DATA);
+            VendorLength = 0;
 
-            Status = AcpiDmDumpTable (Length, Offset,
-                ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA)),
-                PathLength, AcpiDmTableInfoPhat1a);
-            Offset += PathLength;
-            if (ACPI_FAILURE (Status))
+            /* An offset of 0 should be ignored */
+            if (HealthData->DeviceSpecificOffset != 0)
             {
-                return;
+                if (HealthData->DeviceSpecificOffset > Subtable->Length)
+                {
+                    AcpiOsPrintf ("\n/* Warning: Oversized device-specific data offset %X */\n"
+                        "/* (maximum is %X -- ignoring device-specific data) */\n",
+                        HealthData->DeviceSpecificOffset, Subtable->Length);
+                }
+                else if (HealthData->DeviceSpecificOffset < sizeof (ACPI_PHAT_HEALTH_DATA))
+                {
+                    AcpiOsPrintf ("\n/* Warning: Undersized device-specific data offset %X */\n"
+                        "/* (minimum is %X -- ignoring device-specific data) */\n",
+                        HealthData->DeviceSpecificOffset, (UINT8) sizeof (ACPI_PHAT_HEALTH_DATA));
+                }
+                else
+                {
+                    PathLength = HealthData->DeviceSpecificOffset - sizeof (ACPI_PHAT_HEALTH_DATA);
+                    VendorLength = Subtable->Length - HealthData->DeviceSpecificOffset;
+                }
             }
 
-            /* Get Device-Specific Data - length of which is the remaining subtable length. */
+            DbgPrint (ASL_DEBUG_OUTPUT, "/* %u, PathLength %X, Offset %X */\n",
+                __LINE__, PathLength, Offset);
 
-            VendorLength =
-                Subtable->Length - sizeof (ACPI_PHAT_HEALTH_DATA) - PathLength;
-            DbgPrint (ASL_DEBUG_OUTPUT, "%u, Subtable->Length %X, VendorLength %X, Offset %X PathLength: %X\n",
-                __LINE__, Subtable->Length, VendorLength, Offset, PathLength);
+            if (PathLength)
+            {
+                Status = AcpiDmDumpTable (Length, Offset,
+                    ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA)),
+                    PathLength, AcpiDmTableInfoPhat1a);
+                if (ACPI_FAILURE (Status))
+                {
+                    return;
+                }
+
+                Offset += PathLength;
+            }
+
+            DbgPrint (ASL_DEBUG_OUTPUT, "/* %u, VendorLength %X, Offset %X */\n",
+                __LINE__, VendorLength, Offset);
 
             if (VendorLength)
             {
-                /* Point past the Device Path, Compile the Device-Specific Data */
-
                 Status = AcpiDmDumpTable (Length, Offset,
-                    ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA) + PathLength),
+                    ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, HealthData->DeviceSpecificOffset),
                     VendorLength, AcpiDmTableInfoPhat1b);
                 if (ACPI_FAILURE (Status))
                 {
diff --git a/src/acpica/source/common/dmtbdump3.c b/src/acpica/source/common/dmtbdump3.c
index 6e5f5d7f..1eddc391 100644
--- a/src/acpica/source/common/dmtbdump3.c
+++ b/src/acpica/source/common/dmtbdump3.c
@@ -177,7 +177,8 @@  AcpiDmDumpSlic (
     ACPI_TABLE_HEADER       *Table)
 {
 
-    (void) AcpiDmDumpTable (Table->Length, sizeof (ACPI_TABLE_HEADER), Table,
+    (void) AcpiDmDumpTable (Table->Length, sizeof (ACPI_TABLE_HEADER),
+        (void *) ((UINT8 *)Table + sizeof (*Table)),
         Table->Length - sizeof (*Table), AcpiDmTableInfoSlic);
 }
 
diff --git a/src/acpica/source/common/dmtbinfo1.c b/src/acpica/source/common/dmtbinfo1.c
index 0199d1d1..961ba8c9 100644
--- a/src/acpica/source/common/dmtbinfo1.c
+++ b/src/acpica/source/common/dmtbinfo1.c
@@ -287,6 +287,16 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoAestVendorError[] =
     ACPI_DMT_TERMINATOR
 };
 
+/* 3: Vendor Defined V2 */
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoAestVendorV2Error[] =
+{
+    {ACPI_DMT_UINT64,   ACPI_AEST3A_OFFSET (AcpiHid),                "ACPI HID", 0},
+    {ACPI_DMT_UINT32,   ACPI_AEST3A_OFFSET (AcpiUid),                "ACPI UID", 0},
+    {ACPI_DMT_BUF16,    ACPI_AEST3A_OFFSET (VendorSpecificData),     "Vendor Specific Data", 0},
+    ACPI_DMT_TERMINATOR
+};
+
 /* 4: Gic Error */
 
 ACPI_DMTABLE_INFO           AcpiDmTableInfoAestGicError[] =
@@ -296,6 +306,31 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoAestGicError[] =
     ACPI_DMT_TERMINATOR
 };
 
+/* 5: PCIe Error */
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoAestPCIeError[] =
+{
+    {ACPI_DMT_UINT32,   ACPI_AEST5_OFFSET (IortNodeReference),      "Iort Node Reference", 0},
+    ACPI_DMT_TERMINATOR
+};
+
+/* 6: Proxy Error */
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoAestProxyError[] =
+{
+    {ACPI_DMT_UINT64,   ACPI_AEST6_OFFSET (NodeAddress),            "Proxy Node Address", 0},
+    ACPI_DMT_TERMINATOR
+};
+
+/* Common AEST structures for subtables */
+
+#define ACPI_DM_AEST_INTERFACE_COMMON(a) \
+    {ACPI_DMT_UINT32,   ACPI_AEST0D##a##_OFFSET (Common.ErrorNodeDevice),               "Arm Error Node Device", 0},\
+    {ACPI_DMT_UINT32,   ACPI_AEST0D##a##_OFFSET (Common.ProcessorAffinity),             "Processor Affinity", 0}, \
+    {ACPI_DMT_UINT64,   ACPI_AEST0D##a##_OFFSET (Common.ErrorGroupRegisterBase),        "Err-Group Register Addr", 0}, \
+    {ACPI_DMT_UINT64,   ACPI_AEST0D##a##_OFFSET (Common.FaultInjectRegisterBase),       "Err-Inject Register Addr", 0}, \
+    {ACPI_DMT_UINT64,   ACPI_AEST0D##a##_OFFSET (Common.InterruptConfigRegisterBase),   "IRQ-Config Register Addr", 0},
+
 /* AestXface: Node Interface Structure */
 
 ACPI_DMTABLE_INFO           AcpiDmTableInfoAestXface[] =
@@ -314,6 +349,60 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoAestXface[] =
     ACPI_DMT_TERMINATOR
 };
 
+/* AestXface: Node Interface Structure V2 Header */
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoAestXfaceHeader[] =
+{
+    {ACPI_DMT_AEST_XFACE, ACPI_AEST0DH_OFFSET (Type),                "Interface Type", 0},
+    {ACPI_DMT_UINT8,    ACPI_AEST0DH_OFFSET (GroupFormat),           "Group Format", 0},
+    {ACPI_DMT_UINT16,   ACPI_AEST0DH_OFFSET (Reserved[0]),           "Reserved", 0},
+    {ACPI_DMT_UINT32,   ACPI_AEST0DH_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_FLAG2,    ACPI_AEST0D_FLAG_OFFSET (Flags, 0),          "Error Node Device Valid", 0},
+    {ACPI_DMT_FLAG3,    ACPI_AEST0D_FLAG_OFFSET (Flags, 0),          "Affinity Type", 0},
+    {ACPI_DMT_FLAG4,    ACPI_AEST0D_FLAG_OFFSET (Flags, 0),          "Error group Address Valid", 0},
+    {ACPI_DMT_FLAG5,    ACPI_AEST0D_FLAG_OFFSET (Flags, 0),          "Fault Injection Address Valid", 0},
+    {ACPI_DMT_FLAG7,    ACPI_AEST0D_FLAG_OFFSET (Flags, 0),          "Interrupt Config Address valid", 0},
+    {ACPI_DMT_UINT64,   ACPI_AEST0DH_OFFSET (Address),               "Address", 0},
+    {ACPI_DMT_UINT32,   ACPI_AEST0DH_OFFSET (ErrorRecordIndex),      "Error Record Index", 0},
+    {ACPI_DMT_UINT32,   ACPI_AEST0DH_OFFSET (ErrorRecordCount),      "Error Record Count", 0},
+    ACPI_DMT_TERMINATOR
+};
+
+/* AestXface: Node Interface Structure V2 4K Group Format */
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoAestXface4k[] =
+{
+    {ACPI_DMT_UINT64,   ACPI_AEST0D4_OFFSET (ErrorRecordImplemented),"Error Record Implemented", 0},
+    {ACPI_DMT_UINT64,   ACPI_AEST0D4_OFFSET (ErrorStatusReporting),  "Error Status Reporting", 0},
+    {ACPI_DMT_UINT64,   ACPI_AEST0D4_OFFSET (AddressingMode),        "Addressing Mode", 0},
+    ACPI_DM_AEST_INTERFACE_COMMON(4)
+    ACPI_DMT_TERMINATOR
+};
+
+/* AestXface: Node Interface Structure V2 16K Group Format */
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoAestXface16k[] =
+{
+    {ACPI_DMT_BUF32,    ACPI_AEST0D16_OFFSET (ErrorRecordImplemented[0]),"Error Record Implemented", 0},
+    {ACPI_DMT_BUF32,    ACPI_AEST0D16_OFFSET (ErrorStatusReporting[0]),  "Error Status Reporting", 0},
+    {ACPI_DMT_BUF32,    ACPI_AEST0D16_OFFSET (AddressingMode[0]),        "Addressing Mode", 0},
+    ACPI_DM_AEST_INTERFACE_COMMON(16)
+    ACPI_DMT_TERMINATOR
+};
+
+/* AestXface: Node Interface Structure V2 64K Group Format */
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoAestXface64k[] =
+{
+    {ACPI_DMT_BUF112,   ACPI_AEST0D64_OFFSET (ErrorRecordImplemented[0]),"Error Record Implemented", 0},
+    {ACPI_DMT_BUF112,   ACPI_AEST0D64_OFFSET (ErrorStatusReporting[0]),  "Error Status Reporting", 0},
+    {ACPI_DMT_BUF112,   ACPI_AEST0D64_OFFSET (AddressingMode[0]),        "Addressing Mode", 0},
+    ACPI_DM_AEST_INTERFACE_COMMON(64)
+    ACPI_DMT_TERMINATOR
+};
+
 /* AestXrupt: Node Interrupt Structure */
 
 ACPI_DMTABLE_INFO           AcpiDmTableInfoAestXrupt[] =
@@ -329,6 +418,20 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoAestXrupt[] =
 };
 
 
+/* AestXrupt: Node Interrupt Structure V2 */
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoAestXruptV2[] =
+{
+    {ACPI_DMT_AEST_XRUPT, ACPI_AEST0EA_OFFSET (Type),                "Interrupt Type", 0},
+    {ACPI_DMT_UINT16,   ACPI_AEST0EA_OFFSET (Reserved),              "Reserved", 0},
+    {ACPI_DMT_UINT8,    ACPI_AEST0EA_OFFSET (Flags),                 "Flags (decoded below)", 0},
+    {ACPI_DMT_FLAG0,    ACPI_AEST0EA_FLAG_OFFSET (Flags, 0),         "Level Triggered", 0},
+    {ACPI_DMT_UINT32,   ACPI_AEST0EA_OFFSET (Gsiv),                  "Gsiv", 0},
+    {ACPI_DMT_UINT32,   ACPI_AEST0EA_OFFSET (Reserved1[0]),          "Reserved", 0},
+    ACPI_DMT_TERMINATOR
+};
+
+
 /*******************************************************************************
  *
  * ASF - Alert Standard Format table (Signature "ASF!")
@@ -689,7 +792,7 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoCedt1[] =
     {ACPI_DMT_UINT32,   ACPI_CEDT1_OFFSET (Reserved1),            "Reserved", 0},
     {ACPI_DMT_UINT64,   ACPI_CEDT1_OFFSET (BaseHpa),              "Window base address", 0},
     {ACPI_DMT_UINT64,   ACPI_CEDT1_OFFSET (WindowSize),           "Window size", 0},
-    {ACPI_DMT_UINT8,    ACPI_CEDT1_OFFSET (InterleaveWays),       "Interleave Members (2^n)", 0},
+    {ACPI_DMT_UINT8,    ACPI_CEDT1_OFFSET (InterleaveWays),       "Interleave Members", 0},
     {ACPI_DMT_UINT8,    ACPI_CEDT1_OFFSET (InterleaveArithmetic), "Interleave Arithmetic", 0},
     {ACPI_DMT_UINT16,   ACPI_CEDT1_OFFSET (Reserved2),            "Reserved", 0},
     {ACPI_DMT_UINT32,   ACPI_CEDT1_OFFSET (Granularity),          "Granularity", 0},
@@ -705,6 +808,23 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoCedt1_te[] =
     ACPI_DMT_TERMINATOR
 };
 
+/* 2: CXL XOR Interleave Math Structure */
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoCedt2[] =
+{
+    {ACPI_DMT_UINT16,   ACPI_CEDT2_OFFSET (Reserved1),            "Reserved", 0},
+    {ACPI_DMT_UINT8,    ACPI_CEDT2_OFFSET (Hbig),                 "Interleave Granularity", 0},
+    {ACPI_DMT_UINT8,    ACPI_CEDT2_OFFSET (NrXormaps),            "Xormap List Count", 0},
+    {ACPI_DMT_UINT64,   ACPI_CEDT2_OFFSET (XormapList),           "First Xormap", 0},
+    ACPI_DMT_TERMINATOR
+};
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoCedt2_te[] =
+{
+    {ACPI_DMT_UINT64,   ACPI_CEDT2_TE_OFFSET (Xormap),            "Next Xormap", 0},
+    ACPI_DMT_TERMINATOR
+};
+
 /*******************************************************************************
  *
  * CPEP - Corrected Platform Error Polling table
@@ -1548,7 +1668,7 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoHmat2[] =
     {ACPI_DMT_FLAGS4_8,     ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Associativity", 0},
     {ACPI_DMT_FLAGS4_12,    ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Write Policy", 0},
     {ACPI_DMT_FLAGS16_16,   ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Line Size", 0},
-    {ACPI_DMT_UINT16,       ACPI_HMAT2_OFFSET (Reserved2),              "Reserved2", 0},
+    {ACPI_DMT_UINT16,       ACPI_HMAT2_OFFSET (AddressMode),            "Address Mode", 0},
     {ACPI_DMT_UINT16,       ACPI_HMAT2_OFFSET (NumberOfSMBIOSHandles),  "SMBIOS Handle #", 0},
     ACPI_DMT_TERMINATOR
 };
diff --git a/src/acpica/source/common/dmtbinfo2.c b/src/acpica/source/common/dmtbinfo2.c
index 834d1ef0..8242b329 100644
--- a/src/acpica/source/common/dmtbinfo2.c
+++ b/src/acpica/source/common/dmtbinfo2.c
@@ -313,6 +313,7 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoIortAcc[] =
     {ACPI_DMT_UINT8,    ACPI_IORTA_OFFSET (MemoryFlags),            "Memory Flags (decoded below)", 0},
     {ACPI_DMT_FLAG0,    ACPI_IORTA_FLAG_OFFSET (MemoryFlags, 0),    "Coherency", 0},
     {ACPI_DMT_FLAG1,    ACPI_IORTA_FLAG_OFFSET (MemoryFlags, 0),    "Device Attribute", 0},
+    {ACPI_DMT_FLAG2,    ACPI_IORTA_FLAG_OFFSET (MemoryFlags, 0),    "Ensured Coherency of Accesses", 0},
     ACPI_DMT_TERMINATOR
 };
 
@@ -1230,7 +1231,7 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoMpam0[] =
     {ACPI_DMT_UINT32,   ACPI_MPAM0_OFFSET (MaxNrdyUsec),                 "MAX_NRDY_USEC", 0},
     {ACPI_DMT_NAME8,    ACPI_MPAM0_OFFSET (HardwareIdLinkedDevice),      "Hardware ID of linked device", 0},
     {ACPI_DMT_UINT32,   ACPI_MPAM0_OFFSET (InstanceIdLinkedDevice),      "Instance ID of linked device", 0},
-    {ACPI_DMT_UINT32,   ACPI_MPAM0_OFFSET (NumResouceNodes),             "Number of resource nodes", 0},
+    {ACPI_DMT_UINT32,   ACPI_MPAM0_OFFSET (NumResourceNodes),            "Number of resource nodes", 0},
 
     ACPI_DMT_TERMINATOR
 };
@@ -1261,6 +1262,7 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoMpam1A[] =
 {
     {ACPI_DMT_UINT64,   ACPI_MPAM1A_OFFSET (CacheReference),                "Cache reference", 0},
     {ACPI_DMT_UINT32,   ACPI_MPAM1A_OFFSET (Reserved),                      "Reserved", 0},
+    ACPI_DMT_TERMINATOR
 };
 
 /* 1B: MPAM Memory locator descriptor. A subtable of RIS.
@@ -1270,6 +1272,7 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoMpam1B[] =
 {
     {ACPI_DMT_UINT64,   ACPI_MPAM1B_OFFSET (ProximityDomain),               "Proximity domain", 0},
     {ACPI_DMT_UINT32,   ACPI_MPAM1B_OFFSET (Reserved),                      "Reserved", 0},
+    ACPI_DMT_TERMINATOR
 };
 
 /* 1C: MPAM SMMU locator descriptor. A subtable of RIS.
@@ -1279,6 +1282,7 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoMpam1C[] =
 {
     {ACPI_DMT_UINT64,   ACPI_MPAM1C_OFFSET (SmmuInterface),                 "SMMU Interface", 0},
     {ACPI_DMT_UINT32,   ACPI_MPAM1C_OFFSET (Reserved),                      "Reserved", 0},
+    ACPI_DMT_TERMINATOR
 };
 
 /* 1D: MPAM Memory-side cache locator descriptor. A subtable of RIS.
@@ -1286,9 +1290,10 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoMpam1C[] =
  */
 ACPI_DMTABLE_INFO           AcpiDmTableInfoMpam1D[] =
 {
-    {ACPI_DMT_UINT56,   ACPI_MPAM1D_OFFSET (Level),                         "Reserved", 0},
+    {ACPI_DMT_UINT56,   ACPI_MPAM1D_OFFSET (Reserved),                      "Reserved", 0},
     {ACPI_DMT_UINT8,    ACPI_MPAM1D_OFFSET (Level),                         "Level", 0},
     {ACPI_DMT_UINT32,   ACPI_MPAM1D_OFFSET (Reference),                     "Reference", 0},
+    ACPI_DMT_TERMINATOR
 };
 
 /* 1E: MPAM ACPI device locator descriptor. A subtable of RIS.
@@ -1298,6 +1303,7 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoMpam1E[] =
 {
     {ACPI_DMT_UINT64,   ACPI_MPAM1E_OFFSET (AcpiHwId),                      "ACPI Hardware ID", 0},
     {ACPI_DMT_UINT32,   ACPI_MPAM1E_OFFSET (AcpiUniqueId),                  "ACPI Unique ID", 0},
+    ACPI_DMT_TERMINATOR
 };
 
 /* 1F: MPAM Interconnect locator descriptor. A subtable of RIS.
@@ -1307,6 +1313,7 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoMpam1F[] =
 {
     {ACPI_DMT_UINT64,   ACPI_MPAM1F_OFFSET (InterConnectDescTblOff),        "Interconnect descriptor table offset", 0},
     {ACPI_DMT_UINT32,   ACPI_MPAM1F_OFFSET (Reserved),                      "Reserved", 0},
+    ACPI_DMT_TERMINATOR
 };
 
 /* 1G: MPAM Locator structure.
@@ -1316,6 +1323,7 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoMpam1G[] =
 {
     {ACPI_DMT_UINT64,   ACPI_MPAM1G_OFFSET (Descriptor1),                   "Descriptor1", 0},
     {ACPI_DMT_UINT32,   ACPI_MPAM1G_OFFSET (Descriptor2),                   "Descriptor2", 0},
+    ACPI_DMT_TERMINATOR
 };
 
 /* 2: MPAM Functional dependency descriptor.
@@ -1325,6 +1333,7 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoMpam2[] =
 {
     {ACPI_DMT_UINT32,   ACPI_MPAM2_OFFSET (Producer),                       "Producer", 0},
     {ACPI_DMT_UINT32,   ACPI_MPAM2_OFFSET (Reserved),                       "Reserved", 0},
+    ACPI_DMT_TERMINATOR
 };
 
 
diff --git a/src/acpica/source/common/dmtbinfo3.c b/src/acpica/source/common/dmtbinfo3.c
index b06edb82..2f67e5e7 100644
--- a/src/acpica/source/common/dmtbinfo3.c
+++ b/src/acpica/source/common/dmtbinfo3.c
@@ -255,7 +255,7 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoSpcr[] =
     {ACPI_DMT_UINT8,    ACPI_SPCR_OFFSET (StopBits),                "Stop Bits", 0},
     {ACPI_DMT_UINT8,    ACPI_SPCR_OFFSET (FlowControl),             "Flow Control", 0},
     {ACPI_DMT_UINT8,    ACPI_SPCR_OFFSET (TerminalType),            "Terminal Type", 0},
-    {ACPI_DMT_UINT8,    ACPI_SPCR_OFFSET (Reserved2),               "Reserved", 0},
+    {ACPI_DMT_UINT8,    ACPI_SPCR_OFFSET (Language),                "Language", 0},
     {ACPI_DMT_UINT16,   ACPI_SPCR_OFFSET (PciDeviceId),             "PCI Device ID", 0},
     {ACPI_DMT_UINT16,   ACPI_SPCR_OFFSET (PciVendorId),             "PCI Vendor ID", 0},
     {ACPI_DMT_UINT8,    ACPI_SPCR_OFFSET (PciBus),                  "PCI Bus", 0},
@@ -263,7 +263,11 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoSpcr[] =
     {ACPI_DMT_UINT8,    ACPI_SPCR_OFFSET (PciFunction),             "PCI Function", 0},
     {ACPI_DMT_UINT32,   ACPI_SPCR_OFFSET (PciFlags),                "PCI Flags", 0},
     {ACPI_DMT_UINT8,    ACPI_SPCR_OFFSET (PciSegment),              "PCI Segment", 0},
-    {ACPI_DMT_UINT32,   ACPI_SPCR_OFFSET (Reserved2),               "Reserved", 0},
+    {ACPI_DMT_UINT32,   ACPI_SPCR_OFFSET (UartClkFreq),             "Uart Clock Freq", 0},
+    {ACPI_DMT_UINT32,   ACPI_SPCR_OFFSET (PreciseBaudrate),         "Precise Baud rate", 0},
+    {ACPI_DMT_UINT16,   ACPI_SPCR_OFFSET (NameSpaceStringLength),   "NameSpaceStringLength", 0},
+    {ACPI_DMT_UINT16,   ACPI_SPCR_OFFSET (NameSpaceStringOffset),   "NameSpaceStringOffset", 0},
+    {ACPI_DMT_STRING,   ACPI_SPCR_OFFSET (NameSpaceString),         "NamespaceString", 0},
     ACPI_DMT_TERMINATOR
 };
 
diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h
index 36683e4a..45c12fb2 100644
--- a/src/acpica/source/compiler/aslcompiler.h
+++ b/src/acpica/source/compiler/aslcompiler.h
@@ -1582,9 +1582,12 @@  RsDoDwordMemoryDescriptor (
     ASL_RESOURCE_INFO       *Info);
 
 ASL_RESOURCE_NODE *
-RsDoDwordSpaceDescriptor (
+RsDoDwordPccDescriptor (
     ASL_RESOURCE_INFO       *Info);
 
+ASL_RESOURCE_NODE *
+RsDoDwordSpaceDescriptor (
+    ASL_RESOURCE_INFO       *Info);
 
 /*
  * aslrestype2e - Extended address descriptors
@@ -1613,6 +1616,10 @@  ASL_RESOURCE_NODE *
 RsDoQwordMemoryDescriptor (
     ASL_RESOURCE_INFO       *Info);
 
+ASL_RESOURCE_NODE *
+RsDoQwordPccDescriptor (
+    ASL_RESOURCE_INFO       *Info);
+
 ASL_RESOURCE_NODE *
 RsDoQwordSpaceDescriptor (
     ASL_RESOURCE_INFO       *Info);
@@ -1625,6 +1632,10 @@  ASL_RESOURCE_NODE *
 RsDoWordIoDescriptor (
     ASL_RESOURCE_INFO       *Info);
 
+ASL_RESOURCE_NODE *
+RsDoWordPccDescriptor (
+    ASL_RESOURCE_INFO       *Info);
+
 ASL_RESOURCE_NODE *
 RsDoWordSpaceDescriptor (
     ASL_RESOURCE_INFO       *Info);
diff --git a/src/acpica/source/compiler/aslcompiler.l b/src/acpica/source/compiler/aslcompiler.l
index 6345cdfb..25e2d9ab 100644
--- a/src/acpica/source/compiler/aslcompiler.l
+++ b/src/acpica/source/compiler/aslcompiler.l
@@ -438,6 +438,7 @@  NamePathTail                [.]{NameSeg}
 "DMA"                       { count (1); return (PARSEOP_DMA); }
 "DWordIO"                   { count (1); return (PARSEOP_DWORDIO); }
 "DWordMemory"               { count (1); return (PARSEOP_DWORDMEMORY); }
+"DWordPcc"                  { count (1); return (PARSEOP_DWORDPCC); }
 "DWordSpace"                { count (1); return (PARSEOP_DWORDSPACE); }
 "EndDependentFn"            { count (1); return (PARSEOP_ENDDEPENDENTFN); }
 "ExtendedIO"                { count (1); return (PARSEOP_EXTENDEDIO); }
@@ -464,6 +465,7 @@  NamePathTail                [.]{NameSeg}
 "ClockInput"                { count (1); return (PARSEOP_CLOCKINPUT); }
 "QWordIO"                   { count (1); return (PARSEOP_QWORDIO); }
 "QWordMemory"               { count (1); return (PARSEOP_QWORDMEMORY); }
+"QWordPcc"                  { count (1); return (PARSEOP_DWORDPCC); }
 "QWordSpace"                { count (1); return (PARSEOP_QWORDSPACE); }
 "Register"                  { count (1); return (PARSEOP_REGISTER); }
 "SpiSerialBus"              { count (1); return (PARSEOP_SPI_SERIALBUS); }
@@ -476,6 +478,7 @@  NamePathTail                [.]{NameSeg}
 "VendorShort"               { count (1); return (PARSEOP_VENDORSHORT); }
 "WordBusNumber"             { count (1); return (PARSEOP_WORDBUSNUMBER); }
 "WordIO"                    { count (1); return (PARSEOP_WORDIO); }
+"WordPcc"                   { count (1); return (PARSEOP_DWORDPCC); }
 "WordSpace"                 { count (1); return (PARSEOP_WORDSPACE); }
 
 
diff --git a/src/acpica/source/compiler/asldefine.h b/src/acpica/source/compiler/asldefine.h
index 43673d37..ab08c5f4 100644
--- a/src/acpica/source/compiler/asldefine.h
+++ b/src/acpica/source/compiler/asldefine.h
@@ -162,7 +162,7 @@ 
 #define ASL_CREATOR_ID              "INTL"
 #define ASL_DEFINE                  "__IASL__"
 #define ASL_PREFIX                  "iASL: "
-#define ASL_COMPLIANCE              "Supports ACPI Specification Revision 6.3"
+#define ASL_COMPLIANCE              "Supports ACPI Specification Revision 6.5"
 
 
 /* Configuration constants */
diff --git a/src/acpica/source/compiler/aslmap.c b/src/acpica/source/compiler/aslmap.c
index 0ad71160..d3b9ecac 100644
--- a/src/acpica/source/compiler/aslmap.c
+++ b/src/acpica/source/compiler/aslmap.c
@@ -319,6 +319,7 @@  const ASL_MAPPING_ENTRY     AslKeywordMapping [] =
 /* DWORDCONST */                OP_TABLE_ENTRY (AML_RAW_DATA_DWORD,         0,                              0,                  ACPI_BTYPE_INTEGER),
 /* DWORDIO */                   OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
 /* DWORDMEMORY */               OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
+/* DWORDPCC */                  OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
 /* DWORDSPACE */                OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
 /* EISAID */                    OP_TABLE_ENTRY (AML_DWORD_OP,               0,                              0,                  ACPI_BTYPE_INTEGER),
 /* ELSE */                      OP_TABLE_ENTRY (AML_ELSE_OP,                0,                              OP_AML_PACKAGE,     0),
@@ -473,6 +474,7 @@  const ASL_MAPPING_ENTRY     AslKeywordMapping [] =
 /* QWORDCONST */                OP_TABLE_ENTRY (AML_RAW_DATA_QWORD,         0,                              0,                  ACPI_BTYPE_INTEGER),
 /* QWORDIO */                   OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
 /* QWORDMEMORY */               OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
+/* QWORDPCC */                  OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
 /* QWORDSPACE */                OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
 /* RANGE_TYPE_ENTIRE */         OP_TABLE_ENTRY (AML_BYTE_OP,                3,                              0,                  0),
 /* RANGE_TYPE_ISAONLY */        OP_TABLE_ENTRY (AML_BYTE_OP,                2,                              0,                  0),
@@ -560,6 +562,7 @@  const ASL_MAPPING_ENTRY     AslKeywordMapping [] =
 /* WORDBUSNUMBER */             OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
 /* WORDCONST */                 OP_TABLE_ENTRY (AML_RAW_DATA_WORD,          0,                              0,                  ACPI_BTYPE_INTEGER),
 /* WORDIO */                    OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
+/* WORDPCC */                   OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP,         0,                              0,                  0),
 /* WORDSPACE */                 OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
 /* XFERSIZE_8 */                OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
 /* XFERSIZE_16 */               OP_TABLE_ENTRY (AML_BYTE_OP,                0,                              0,                  0),
diff --git a/src/acpica/source/compiler/aslparseop.c b/src/acpica/source/compiler/aslparseop.c
index 78a207f0..e415e101 100644
--- a/src/acpica/source/compiler/aslparseop.c
+++ b/src/acpica/source/compiler/aslparseop.c
@@ -790,7 +790,7 @@  TrCreateConstantLeafOp (
 
     DbgPrint (ASL_PARSE_OUTPUT,
         "\nCreateConstantLeafOp  Ln/Col %u/%u NewOp %p  "
-        "Op %s  Value %8.8X%8.8X  \n",
+        "Op %s  Value %8.8X%8.8X\n",
         Op->Asl.LineNumber, Op->Asl.Column, Op, UtGetOpName (ParseOpcode),
         ACPI_FORMAT_UINT64 (Op->Asl.Value.Integer));
 
diff --git a/src/acpica/source/compiler/aslparser.y b/src/acpica/source/compiler/aslparser.y
index 19a34ea8..0161c6ca 100644
--- a/src/acpica/source/compiler/aslparser.y
+++ b/src/acpica/source/compiler/aslparser.y
@@ -208,7 +208,7 @@  AslLocalAllocate (
  * These shift/reduce conflicts are expected. There should be zero
  * reduce/reduce conflicts.
  */
-%expect 128
+%expect 134
 
 /*! [Begin] no source code translation */
 
diff --git a/src/acpica/source/compiler/aslresource.c b/src/acpica/source/compiler/aslresource.c
index 0a24d608..4fed02ae 100644
--- a/src/acpica/source/compiler/aslresource.c
+++ b/src/acpica/source/compiler/aslresource.c
@@ -788,6 +788,11 @@  RsDoOneResourceDescriptor (
         Rnode = RsDoDwordMemoryDescriptor (Info);
         break;
 
+    case PARSEOP_DWORDPCC:
+
+        Rnode = RsDoDwordPccDescriptor (Info);
+        break;
+
     case PARSEOP_DWORDSPACE:
 
         Rnode = RsDoDwordSpaceDescriptor (Info);
@@ -889,6 +894,11 @@  RsDoOneResourceDescriptor (
         Rnode = RsDoQwordMemoryDescriptor (Info);
         break;
 
+    case PARSEOP_QWORDPCC:
+
+        Rnode = RsDoQwordPccDescriptor (Info);
+        break;
+
     case PARSEOP_QWORDSPACE:
 
         Rnode = RsDoQwordSpaceDescriptor (Info);
@@ -963,6 +973,11 @@  RsDoOneResourceDescriptor (
         Rnode = RsDoWordIoDescriptor (Info);
         break;
 
+    case PARSEOP_WORDPCC:
+
+        Rnode = RsDoWordPccDescriptor (Info);
+        break;
+
     case PARSEOP_WORDSPACE:
 
         Rnode = RsDoWordSpaceDescriptor (Info);
diff --git a/src/acpica/source/compiler/aslresources.y b/src/acpica/source/compiler/aslresources.y
index 46ecfa25..16a70b90 100644
--- a/src/acpica/source/compiler/aslresources.y
+++ b/src/acpica/source/compiler/aslresources.y
@@ -194,6 +194,7 @@  ResourceMacroTerm
     | DMATerm                       {}
     | DWordIOTerm                   {}
     | DWordMemoryTerm               {}
+    | DWordPccTerm                  {}
     | DWordSpaceTerm                {}
     | EndDependentFnTerm            {}
     | ExtendedIOTerm                {}
@@ -220,6 +221,7 @@  ResourceMacroTerm
     | PinGroupFunctionTerm          {}
     | QWordIOTerm                   {}
     | QWordMemoryTerm               {}
+    | QWordPccTerm                  {}
     | QWordSpaceTerm                {}
     | RegisterTerm                  {}
     | SpiSerialBusTerm              {}
@@ -232,6 +234,7 @@  ResourceMacroTerm
     | VendorShortTerm               {}
     | WordBusNumberTerm             {}
     | WordIOTerm                    {}
+    | WordPccTerm                   {}
     | WordSpaceTerm                 {}
     ;
 
@@ -317,6 +320,20 @@  DWordMemoryTerm
         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
     ;
 
+DWordPccTerm
+    : PARSEOP_DWORDPCC
+        PARSEOP_OPEN_PAREN           {$<n>$ = TrCreateLeafOp (PARSEOP_DWORDPCC);}
+        ByteConstExpr
+        OptionalByteConstExpr
+        OptionalStringData
+        OptionalNameString_Last
+        PARSEOP_CLOSE_PAREN                         {$$ = TrLinkOpChildren ($<n>3,4,
+                                                        $4,$5,$6,$7);}
+    | PARSEOP_DWORDPCC
+        PARSEOP_OPEN_PAREN
+        error PARSEOP_CLOSE_PAREN                   {$$ = AslDoError(); yyclearin;}
+    ;
+
 DWordSpaceTerm
     : PARSEOP_DWORDSPACE
         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafOp (PARSEOP_DWORDSPACE);}
@@ -784,6 +801,20 @@  QWordMemoryTerm
         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
     ;
 
+QWordPccTerm
+    : PARSEOP_QWORDPCC
+        PARSEOP_OPEN_PAREN           {$<n>$ = TrCreateLeafOp (PARSEOP_QWORDPCC);}
+        ByteConstExpr
+        OptionalByteConstExpr
+        OptionalStringData
+        OptionalNameString_Last
+        PARSEOP_CLOSE_PAREN                         {$$ = TrLinkOpChildren ($<n>3,4,
+                                                        $4,$5,$6,$7);}
+    | PARSEOP_QWORDPCC
+        PARSEOP_OPEN_PAREN
+        error PARSEOP_CLOSE_PAREN                   {$$ = AslDoError(); yyclearin;}
+    ;
+
 QWordSpaceTerm
     : PARSEOP_QWORDSPACE
         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafOp (PARSEOP_QWORDSPACE);}
@@ -1012,6 +1043,20 @@  WordIOTerm
         error PARSEOP_CLOSE_PAREN   {$$ = AslDoError(); yyclearin;}
     ;
 
+WordPccTerm
+    : PARSEOP_WORDPCC
+        PARSEOP_OPEN_PAREN           {$<n>$ = TrCreateLeafOp (PARSEOP_WORDPCC);}
+        ByteConstExpr
+        OptionalByteConstExpr
+        OptionalStringData
+        OptionalNameString_Last
+        PARSEOP_CLOSE_PAREN                         {$$ = TrLinkOpChildren ($<n>3,4,
+                                                        $4,$5,$6,$7);}
+    | PARSEOP_WORDPCC
+        PARSEOP_OPEN_PAREN
+        error PARSEOP_CLOSE_PAREN                   {$$ = AslDoError(); yyclearin;}
+    ;
+
 WordSpaceTerm
     : PARSEOP_WORDSPACE
         PARSEOP_OPEN_PAREN          {$<n>$ = TrCreateLeafOp (PARSEOP_WORDSPACE);}
diff --git a/src/acpica/source/compiler/aslrestype2d.c b/src/acpica/source/compiler/aslrestype2d.c
index e9efac18..b7eb085e 100644
--- a/src/acpica/source/compiler/aslrestype2d.c
+++ b/src/acpica/source/compiler/aslrestype2d.c
@@ -158,11 +158,168 @@ 
 /*
  * This module contains the Dword (32-bit) address space descriptors:
  *
+ * DWordPcc
  * DwordIO
  * DwordMemory
  * DwordSpace
  */
 
+
+/*******************************************************************************
+ *
+ * FUNCTION:    RsDoDwordPccDescriptor
+ *
+ * PARAMETERS:  Info                - Parse Op and resource template offset
+ *
+ * RETURN:      Completed resource node
+ *
+ * DESCRIPTION: Construct a long "DWordPcc" descriptor
+ *
+ ******************************************************************************/
+
+ASL_RESOURCE_NODE *
+RsDoDwordPccDescriptor (
+    ASL_RESOURCE_INFO       *Info)
+{
+    AML_RESOURCE            *Descriptor;
+    ACPI_PARSE_OBJECT       *InitializerOp;
+    ACPI_PARSE_OBJECT       *MinOp = NULL;
+    ACPI_PARSE_OBJECT       *MaxOp = NULL;
+    ACPI_PARSE_OBJECT       *LengthOp = NULL;
+    ACPI_PARSE_OBJECT       *GranOp = NULL;
+    ASL_RESOURCE_NODE       *Rnode;
+    UINT16                  StringLength = 0;
+    UINT32                  OptionIndex = 0;
+    UINT8                   *OptionalFields;
+    UINT32                  i;
+    BOOLEAN                 ResSourceIndex = FALSE;
+
+
+    InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+    StringLength = RsGetStringDataLength (InitializerOp);
+
+    Rnode = RsAllocateResourceNode (
+        sizeof (AML_RESOURCE_ADDRESS32) + 1 + StringLength);
+
+    Descriptor = Rnode->Buffer;
+    Descriptor->Address32.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS32;
+    Descriptor->Address32.ResourceType  = ACPI_ADDRESS_TYPE_PCC_NUMBER;
+
+    /*
+     * Initial descriptor length -- may be enlarged if there are
+     * optional fields present
+     */
+    OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32);
+    Descriptor->Address32.ResourceLength = (UINT16)
+        (sizeof (AML_RESOURCE_ADDRESS32) -
+         sizeof (AML_RESOURCE_LARGE_HEADER));
+
+
+    /*
+    * Bit [3] Max Address Fixed, _MAF: 1 (max address is fixed)
+    * Bit [2] Min Address Fixed,_MIF: 1 (min address is fixed)
+    * Bit [1] Decode Type, _DEC: 0 (do not care)
+    * BIT [0] Ignored (must be zero)
+    */
+    Descriptor->Address32.Flags = 0b1100;
+
+    // No type specific flags. Set to 0.
+    Descriptor->Address32.SpecificFlags = 0;
+
+    // must be set to zero if _MAX == _MIN.
+    Descriptor->Address32.Granularity = 0x0;
+    /* Process all child initialization nodes */
+
+    // No translation offset.
+    Descriptor->Address32.TranslationOffset = 0;
+
+    // Pcc is unique address.
+    Descriptor->Address32.AddressLength = 1;
+
+    for (i = 0; InitializerOp; i++)
+    {
+        switch (i)
+        {
+
+        case 0: /* Address Min = Max */
+
+            Descriptor->Address32.Minimum =
+                (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address32.Maximum =
+                (UINT32) InitializerOp->Asl.Value.Integer;
+
+            break;
+
+        case 1: /* ResSourceIndex [Optional Field - BYTE] */
+
+            if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
+            {
+                /* Found a valid ResourceSourceIndex */
+
+                OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
+                OptionIndex++;
+                Descriptor->Address32.ResourceLength++;
+                ResSourceIndex = TRUE;
+            }
+            break;
+
+        case 2: /* ResSource [Optional Field - STRING] */
+
+            if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) &&
+                (InitializerOp->Asl.Value.String))
+            {
+                if (StringLength)
+                {
+                    /* Found a valid ResourceSource */
+
+                    Descriptor->Address32.ResourceLength = (UINT16)
+                        (Descriptor->Address32.ResourceLength + StringLength);
+
+                    strcpy ((char *)
+                        &OptionalFields[OptionIndex],
+                        InitializerOp->Asl.Value.String);
+
+                    /* ResourceSourceIndex must also be valid */
+
+                    if (!ResSourceIndex)
+                    {
+                        AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX,
+                            InitializerOp, NULL);
+                    }
+                }
+            }
+
+            break;
+
+        case 3: // DescriptorName
+            UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp);
+            break;
+
+        default:
+
+            AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);
+            break;
+        }
+
+        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
+    }
+
+    /* Validate the Min/Max/Len/Gran values */
+
+    RsLargeAddressCheck (
+        (UINT64) Descriptor->Address32.Minimum,
+        (UINT64) Descriptor->Address32.Maximum,
+        (UINT64) Descriptor->Address32.AddressLength,
+        (UINT64) Descriptor->Address32.Granularity,
+        Descriptor->Address32.Flags,
+        MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
+
+    Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) +
+        OptionIndex + StringLength;
+    return (Rnode);
+}
+
+
 /*******************************************************************************
  *
  * FUNCTION:    RsDoDwordIoDescriptor
diff --git a/src/acpica/source/compiler/aslrestype2q.c b/src/acpica/source/compiler/aslrestype2q.c
index 2f564499..1b0334f1 100644
--- a/src/acpica/source/compiler/aslrestype2q.c
+++ b/src/acpica/source/compiler/aslrestype2q.c
@@ -160,6 +160,7 @@ 
  *
  * QWordIO
  * QWordMemory
+ * QwordPcc
  * QWordSpace
  */
 
@@ -613,6 +614,161 @@  RsDoQwordMemoryDescriptor (
 }
 
 
+/*******************************************************************************
+ *
+ * FUNCTION:    RsDoQwordPccDescriptor
+ *
+ * PARAMETERS:  Info                - Parse Op and resource template offset
+ *
+ * RETURN:      Completed resource node
+ *
+ * DESCRIPTION: Construct a long "QWordPcc" descriptor
+ *
+ ******************************************************************************/
+
+ASL_RESOURCE_NODE *
+RsDoQwordPccDescriptor (
+    ASL_RESOURCE_INFO       *Info)
+{
+    AML_RESOURCE            *Descriptor;
+    ACPI_PARSE_OBJECT       *InitializerOp;
+    ACPI_PARSE_OBJECT       *MinOp = NULL;
+    ACPI_PARSE_OBJECT       *MaxOp = NULL;
+    ACPI_PARSE_OBJECT       *LengthOp = NULL;
+    ACPI_PARSE_OBJECT       *GranOp = NULL;
+    ASL_RESOURCE_NODE       *Rnode;
+    UINT16                  StringLength = 0;
+    UINT32                  OptionIndex = 0;
+    UINT8                   *OptionalFields;
+    UINT32                  i;
+    BOOLEAN                 ResSourceIndex = FALSE;
+
+
+    InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+    StringLength = RsGetStringDataLength (InitializerOp);
+
+    Rnode = RsAllocateResourceNode (
+        sizeof (AML_RESOURCE_ADDRESS32) + 1 + StringLength);
+
+    Descriptor = Rnode->Buffer;
+    Descriptor->Address32.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS32;
+    Descriptor->Address32.ResourceType  = ACPI_ADDRESS_TYPE_PCC_NUMBER;
+
+    /*
+     * Initial descriptor length -- may be enlarged if there are
+     * optional fields present
+     */
+    OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32);
+    Descriptor->Address32.ResourceLength = (UINT16)
+        (sizeof (AML_RESOURCE_ADDRESS32) -
+         sizeof (AML_RESOURCE_LARGE_HEADER));
+
+
+    /*
+    * Bit [3] Max Address Fixed, _MAF: 1 (max address is fixed)
+    * Bit [2] Min Address Fixed,_MIF: 1 (min address is fixed)
+    * Bit [1] Decode Type, _DEC: 0 (do not care)
+    * BIT [0] Ignored (must be zero)
+    */
+    Descriptor->Address32.Flags = 0b1100;
+
+    // No type specific flags. Set to 0.
+    Descriptor->Address32.SpecificFlags = 0;
+
+    // must be set to zero if _MAX == _MIN.
+    Descriptor->Address32.Granularity = 0x0;
+    /* Process all child initialization nodes */
+
+    // No translation offset.
+    Descriptor->Address32.TranslationOffset = 0;
+
+    // Pcc is unique address.
+    Descriptor->Address32.AddressLength = 1;
+
+    for (i = 0; InitializerOp; i++)
+    {
+        switch (i)
+        {
+
+        case 0: /* Address Min = Max */
+
+            Descriptor->Address32.Minimum =
+                (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address32.Maximum =
+                (UINT32) InitializerOp->Asl.Value.Integer;
+
+            break;
+
+        case 1: /* ResSourceIndex [Optional Field - BYTE] */
+
+            if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
+            {
+                /* Found a valid ResourceSourceIndex */
+
+                OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
+                OptionIndex++;
+                Descriptor->Address32.ResourceLength++;
+                ResSourceIndex = TRUE;
+            }
+            break;
+
+        case 2: /* ResSource [Optional Field - STRING] */
+
+            if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) &&
+                (InitializerOp->Asl.Value.String))
+            {
+                if (StringLength)
+                {
+                    /* Found a valid ResourceSource */
+
+                    Descriptor->Address32.ResourceLength = (UINT16)
+                        (Descriptor->Address32.ResourceLength + StringLength);
+
+                    strcpy ((char *)
+                        &OptionalFields[OptionIndex],
+                        InitializerOp->Asl.Value.String);
+
+                    /* ResourceSourceIndex must also be valid */
+
+                    if (!ResSourceIndex)
+                    {
+                        AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX,
+                            InitializerOp, NULL);
+                    }
+                }
+            }
+
+            break;
+
+        case 3: // DescriptorName
+            UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp);
+            break;
+
+        default:
+
+            AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);
+            break;
+        }
+
+        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
+    }
+
+    /* Validate the Min/Max/Len/Gran values */
+
+    RsLargeAddressCheck (
+        (UINT64) Descriptor->Address32.Minimum,
+        (UINT64) Descriptor->Address32.Maximum,
+        (UINT64) Descriptor->Address32.AddressLength,
+        (UINT64) Descriptor->Address32.Granularity,
+        Descriptor->Address32.Flags,
+        MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
+
+    Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) +
+        OptionIndex + StringLength;
+    return (Rnode);
+}
+
+
 /*******************************************************************************
  *
  * FUNCTION:    RsDoQwordSpaceDescriptor
diff --git a/src/acpica/source/compiler/aslrestype2w.c b/src/acpica/source/compiler/aslrestype2w.c
index f7ff8f81..1173b676 100644
--- a/src/acpica/source/compiler/aslrestype2w.c
+++ b/src/acpica/source/compiler/aslrestype2w.c
@@ -160,6 +160,7 @@ 
  *
  * WordIO
  * WordMemory
+ * WordPcc
  * WordSpace
  */
 
@@ -589,6 +590,161 @@  RsDoWordBusNumberDescriptor (
 }
 
 
+/*******************************************************************************
+ *
+ * FUNCTION:    RsDoWordPccDescriptor
+ *
+ * PARAMETERS:  Info                - Parse Op and resource template offset
+ *
+ * RETURN:      Completed resource node
+ *
+ * DESCRIPTION: Construct a long "WordPcc" descriptor
+ *
+ ******************************************************************************/
+
+ASL_RESOURCE_NODE *
+RsDoWordPccDescriptor (
+    ASL_RESOURCE_INFO       *Info)
+{
+    AML_RESOURCE            *Descriptor;
+    ACPI_PARSE_OBJECT       *InitializerOp;
+    ACPI_PARSE_OBJECT       *MinOp = NULL;
+    ACPI_PARSE_OBJECT       *MaxOp = NULL;
+    ACPI_PARSE_OBJECT       *LengthOp = NULL;
+    ACPI_PARSE_OBJECT       *GranOp = NULL;
+    ASL_RESOURCE_NODE       *Rnode;
+    UINT16                  StringLength = 0;
+    UINT32                  OptionIndex = 0;
+    UINT8                   *OptionalFields;
+    UINT32                  i;
+    BOOLEAN                 ResSourceIndex = FALSE;
+
+
+    InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+    StringLength = RsGetStringDataLength (InitializerOp);
+
+    Rnode = RsAllocateResourceNode (
+        sizeof (AML_RESOURCE_ADDRESS32) + 1 + StringLength);
+
+    Descriptor = Rnode->Buffer;
+    Descriptor->Address32.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS32;
+    Descriptor->Address32.ResourceType  = ACPI_ADDRESS_TYPE_PCC_NUMBER;
+
+    /*
+     * Initial descriptor length -- may be enlarged if there are
+     * optional fields present
+     */
+    OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32);
+    Descriptor->Address32.ResourceLength = (UINT16)
+        (sizeof (AML_RESOURCE_ADDRESS32) -
+         sizeof (AML_RESOURCE_LARGE_HEADER));
+
+
+    /*
+    * Bit [3] Max Address Fixed, _MAF: 1 (max address is fixed)
+    * Bit [2] Min Address Fixed,_MIF: 1 (min address is fixed)
+    * Bit [1] Decode Type, _DEC: 0 (do not care)
+    * BIT [0] Ignored (must be zero)
+    */
+    Descriptor->Address32.Flags = 0b1100;
+
+    // No type specific flags. Set to 0.
+    Descriptor->Address32.SpecificFlags = 0;
+
+    // must be set to zero if _MAX == _MIN.
+    Descriptor->Address32.Granularity = 0x0;
+    /* Process all child initialization nodes */
+
+    // No translation offset.
+    Descriptor->Address32.TranslationOffset = 0;
+
+    // Pcc is unique address.
+    Descriptor->Address32.AddressLength = 1;
+
+    for (i = 0; InitializerOp; i++)
+    {
+        switch (i)
+        {
+
+        case 0: /* Address Min = Max */
+
+            Descriptor->Address32.Minimum =
+                (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address32.Maximum =
+                (UINT32) InitializerOp->Asl.Value.Integer;
+
+            break;
+
+        case 1: /* ResSourceIndex [Optional Field - BYTE] */
+
+            if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
+            {
+                /* Found a valid ResourceSourceIndex */
+
+                OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
+                OptionIndex++;
+                Descriptor->Address32.ResourceLength++;
+                ResSourceIndex = TRUE;
+            }
+            break;
+
+        case 2: /* ResSource [Optional Field - STRING] */
+
+            if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) &&
+                (InitializerOp->Asl.Value.String))
+            {
+                if (StringLength)
+                {
+                    /* Found a valid ResourceSource */
+
+                    Descriptor->Address32.ResourceLength = (UINT16)
+                        (Descriptor->Address32.ResourceLength + StringLength);
+
+                    strcpy ((char *)
+                        &OptionalFields[OptionIndex],
+                        InitializerOp->Asl.Value.String);
+
+                    /* ResourceSourceIndex must also be valid */
+
+                    if (!ResSourceIndex)
+                    {
+                        AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX,
+                            InitializerOp, NULL);
+                    }
+                }
+            }
+
+            break;
+
+        case 3: // DescriptorName
+            UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp);
+            break;
+
+        default:
+
+            AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);
+            break;
+        }
+
+        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
+    }
+
+    /* Validate the Min/Max/Len/Gran values */
+
+    RsLargeAddressCheck (
+        (UINT64) Descriptor->Address32.Minimum,
+        (UINT64) Descriptor->Address32.Maximum,
+        (UINT64) Descriptor->Address32.AddressLength,
+        (UINT64) Descriptor->Address32.Granularity,
+        Descriptor->Address32.Flags,
+        MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
+
+    Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) +
+        OptionIndex + StringLength;
+    return (Rnode);
+}
+
+
 /*******************************************************************************
  *
  * FUNCTION:    RsDoWordSpaceDescriptor
diff --git a/src/acpica/source/compiler/asltokens.y b/src/acpica/source/compiler/asltokens.y
index e47bdb79..b7a4c2d9 100644
--- a/src/acpica/source/compiler/asltokens.y
+++ b/src/acpica/source/compiler/asltokens.y
@@ -256,6 +256,7 @@  NoEcho('
 %token <i> PARSEOP_DWORDCONST
 %token <i> PARSEOP_DWORDIO
 %token <i> PARSEOP_DWORDMEMORY
+%token <i> PARSEOP_DWORDPCC
 %token <i> PARSEOP_DWORDSPACE
 %token <i> PARSEOP_EISAID
 %token <i> PARSEOP_ELSE
@@ -410,6 +411,7 @@  NoEcho('
 %token <i> PARSEOP_QWORDCONST
 %token <i> PARSEOP_QWORDIO
 %token <i> PARSEOP_QWORDMEMORY
+%token <i> PARSEOP_QWORDPCC
 %token <i> PARSEOP_QWORDSPACE
 %token <i> PARSEOP_RANGETYPE_ENTIRE
 %token <i> PARSEOP_RANGETYPE_ISAONLY
@@ -497,6 +499,7 @@  NoEcho('
 %token <i> PARSEOP_WORDBUSNUMBER
 %token <i> PARSEOP_WORDCONST
 %token <i> PARSEOP_WORDIO
+%token <i> PARSEOP_WORDPCC
 %token <i> PARSEOP_WORDSPACE
 %token <i> PARSEOP_XFERSIZE_8
 %token <i> PARSEOP_XFERSIZE_16
diff --git a/src/acpica/source/compiler/asltypes.y b/src/acpica/source/compiler/asltypes.y
index 920cdf51..5e104d82 100644
--- a/src/acpica/source/compiler/asltypes.y
+++ b/src/acpica/source/compiler/asltypes.y
@@ -419,6 +419,7 @@  NoEcho('
 %type <n> DMATerm
 %type <n> DWordIOTerm
 %type <n> DWordMemoryTerm
+%type <n> DWordPccTerm
 %type <n> DWordSpaceTerm
 %type <n> EndDependentFnTerm
 %type <n> ExtendedIOTerm
@@ -446,6 +447,7 @@  NoEcho('
 %type <n> PinGroupFunctionTerm
 %type <n> QWordIOTerm
 %type <n> QWordMemoryTerm
+%type <n> QWordPccTerm
 %type <n> QWordSpaceTerm
 %type <n> RegisterTerm
 %type <n> SpiSerialBusTerm
@@ -458,6 +460,7 @@  NoEcho('
 %type <n> VendorShortTerm
 %type <n> WordBusNumberTerm
 %type <n> WordIOTerm
+%type <n> WordPccTerm
 %type <n> WordSpaceTerm
 
 /* Local types that help construct the AML, not in ACPI spec */
diff --git a/src/acpica/source/compiler/dtfield.c b/src/acpica/source/compiler/dtfield.c
index dc63a4e8..7d1df16b 100644
--- a/src/acpica/source/compiler/dtfield.c
+++ b/src/acpica/source/compiler/dtfield.c
@@ -281,8 +281,8 @@  DtCompileString (
     if (Length > ByteLength)
     {
         sprintf (AslGbl_MsgBuffer,
-            "Maximum %u characters, found %u characters [%s]",
-            ByteLength, Length, Field->Value);
+            "Maximum %u characters, found %u characters [%.*s]",
+            ByteLength, Length, (ASL_MSG_BUFFER_SIZE / 2), Field->Value);
         DtError (ASL_ERROR, ASL_MSG_STRING_LENGTH, Field, AslGbl_MsgBuffer);
         Length = ByteLength;
     }
diff --git a/src/acpica/source/compiler/dttable1.c b/src/acpica/source/compiler/dttable1.c
index 998bda33..0f68f61e 100644
--- a/src/acpica/source/compiler/dttable1.c
+++ b/src/acpica/source/compiler/dttable1.c
@@ -206,7 +206,14 @@  DtCompileAest (
     UINT32                  i;
     UINT32                  Offset;
     DT_FIELD                **PFieldList = (DT_FIELD **) List;
+    ACPI_AEST_NODE_INTERFACE_HEADER *AestNodeHeader;
+    UINT8                   Revision;
+    ACPI_TABLE_HEADER       *Header;
 
+    ParentTable = DtPeekSubtable ();
+
+    Header = ACPI_CAST_PTR (ACPI_TABLE_HEADER, ParentTable->Buffer);
+    Revision = Header->Revision;
 
     while (*PFieldList)
     {
@@ -257,8 +264,21 @@  DtCompileAest (
             break;
 
         case ACPI_AEST_VENDOR_ERROR_NODE:
+            switch (Revision)
+            {
+            case 1:
+                InfoTable = AcpiDmTableInfoAestVendorError;
+                break;
 
-            InfoTable = AcpiDmTableInfoAestVendorError;
+            case 2:
+                InfoTable = AcpiDmTableInfoAestVendorV2Error;
+                break;
+
+            default:
+                AcpiOsPrintf ("Unknown AEST Vendor Error Revision: %X\n",
+                    Revision);
+                return (AE_ERROR);
+            }
             break;
 
         case ACPI_AEST_GIC_ERROR_NODE:
@@ -266,6 +286,16 @@  DtCompileAest (
             InfoTable = AcpiDmTableInfoAestGicError;
             break;
 
+        case ACPI_AEST_PCIE_ERROR_NODE:
+
+            InfoTable = AcpiDmTableInfoAestPCIeError;
+            break;
+
+        case ACPI_AEST_PROXY_ERROR_NODE:
+
+            InfoTable = AcpiDmTableInfoAestProxyError;
+            break;
+
         /* Error case below */
         default:
             AcpiOsPrintf ("Unknown AEST Subtable Type: %X\n",
@@ -341,9 +371,57 @@  DtCompileAest (
         }
 
         /* Compile the (required) node interface structure */
+        if (Revision == 1)
+        {
+            InfoTable = AcpiDmTableInfoAestXface;
+        }
+        else if (Revision == 2)
+        {
+            Status = DtCompileTable (PFieldList, AcpiDmTableInfoAestXfaceHeader,
+                &Subtable);
+            if (ACPI_FAILURE (Status))
+            {
+                return (Status);
+            }
 
-        Status = DtCompileTable (PFieldList, AcpiDmTableInfoAestXface,
-            &Subtable);
+            ParentTable = DtPeekSubtable ();
+            DtInsertSubtable (ParentTable, Subtable);
+
+            Offset += Subtable->Length;
+
+            AestNodeHeader = ACPI_CAST_PTR (ACPI_AEST_NODE_INTERFACE_HEADER,
+                    Subtable->Buffer);
+
+            switch (AestNodeHeader->GroupFormat)
+            {
+            case ACPI_AEST_NODE_GROUP_FORMAT_4K:
+
+                InfoTable = AcpiDmTableInfoAestXface4k;
+                break;
+
+            case ACPI_AEST_NODE_GROUP_FORMAT_16K:
+
+                InfoTable = AcpiDmTableInfoAestXface16k;
+                break;
+
+            case ACPI_AEST_NODE_GROUP_FORMAT_64K:
+
+                InfoTable = AcpiDmTableInfoAestXface64k;
+                break;
+
+            /* Error case below */
+            default:
+                AcpiOsPrintf ("Unknown AEST Interface Group Format: %X\n",
+                    AestNodeHeader->GroupFormat);
+                return (AE_ERROR);
+            }
+        }
+        else
+        {
+           AcpiOsPrintf ("Unknown AEST Revision: %X\n", Revision);
+        }
+
+        Status = DtCompileTable (PFieldList, InfoTable, &Subtable);
         if (ACPI_FAILURE (Status))
         {
             return (Status);
@@ -367,8 +445,22 @@  DtCompileAest (
 
         for (i = 0; i < ErrorNodeHeader->NodeInterruptCount; i++)
         {
-            Status = DtCompileTable (PFieldList, AcpiDmTableInfoAestXrupt,
-                &Subtable);
+            switch (Revision) {
+            case 1:
+
+                InfoTable = AcpiDmTableInfoAestXrupt;
+                break;
+
+            case 2:
+
+                InfoTable = AcpiDmTableInfoAestXruptV2;
+                break;
+
+            default:
+                AcpiOsPrintf ("Unknown AEST Revision: %X\n", Revision);
+                return (AE_ERROR);
+            }
+            Status = DtCompileTable (PFieldList, InfoTable, &Subtable);
             if (ACPI_FAILURE (Status))
             {
                 return (Status);
@@ -974,6 +1066,53 @@  DtCompileCedt (
             ParentTable = DtPeekSubtable ();
             break;
         }
+        case ACPI_CEDT_TYPE_CXIMS: {
+            unsigned char *dump;
+            unsigned int idx, offset, max = 0;
+
+            /* Compile table with first "Xor map" */
+
+            Status = DtCompileTable (PFieldList, AcpiDmTableInfoCedt2, &Subtable);
+            if (ACPI_FAILURE (Status))
+            {
+                return (Status);
+            }
+
+            /* Look in buffer for the number of Xor maps */
+            offset = (unsigned int) ACPI_OFFSET (ACPI_CEDT_CXIMS, NrXormaps);
+            dump = (unsigned char *) Subtable->Buffer - 4;     /* place at beginning of cedt2 */
+            max = dump[offset];
+
+            /* We need to add more XOR maps, so write the current Subtable. */
+
+            ParentTable = DtPeekSubtable ();
+            DtInsertSubtable (ParentTable, Subtable);   /* Insert AcpiDmTableInfoCedt2 table so we can put in */
+            DtPushSubtable (Subtable);
+
+            /* Now, find out all Xor maps beyond the first. */
+
+            for (idx = 1; idx < max; idx++) {
+                ParentTable = DtPeekSubtable ();
+
+                if (*PFieldList)
+                {
+                    Status = DtCompileTable (PFieldList, AcpiDmTableInfoCedt2_te, &Subtable);
+                    if (ACPI_FAILURE (Status))
+                    {
+                        return (Status);
+                    }
+                    if (Subtable)
+                    {
+                        DtInsertSubtable (ParentTable, Subtable);       /* got an Xor map, so insert table. */
+                        InsertFlag = 0;
+                    }
+                }
+            }
+
+            DtPopSubtable ();
+            ParentTable = DtPeekSubtable ();
+            break;
+        }
 
         default:
             DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "CEDT");
diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c
index 5fd92287..39418729 100644
--- a/src/acpica/source/compiler/dttable2.c
+++ b/src/acpica/source/compiler/dttable2.c
@@ -550,7 +550,7 @@  DtCompileMpam (
         RisLength = 0;
 
         /* Iterate over RIS subtables per MSC node */
-        for (UINT32 ris = 0; ris < MpamMscNode->NumResouceNodes; ris++)
+        for (UINT32 ris = 0; ris < MpamMscNode->NumResourceNodes; ris++)
         {
             /* Compile RIS subtable */
             Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpam1,
diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h
index 62b610b3..9e1a8cca 100644
--- a/src/acpica/source/compiler/dttemplate.h
+++ b/src/acpica/source/compiler/dttemplate.h
@@ -157,13 +157,13 @@ 
 
 const unsigned char TemplateAest[] =
 {
-    0x41,0x45,0x53,0x54,0xCC,0x02,0x00,0x00,  /* 00000000    "AEST...." */
-    0x01,0x2A,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    ".*INTEL " */
+    0x41,0x45,0x53,0x54,0x90,0x03,0x00,0x00,  /* 00000000    "AEST...." */
+    0x02,0xE6,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    "..! ...." */
+    0x28,0x06,0x23,0x20,0x00,0xA0,0x00,0x00,  /* 00000020    "(.# ...." */
     0x2C,0x00,0x00,0x00,0x44,0x00,0x00,0x00,  /* 00000028    ",...D..." */
-    0x74,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000030    "t......." */
+    0x94,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000030    "........" */
     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    "........" */
@@ -177,76 +177,100 @@  const unsigned char TemplateAest[] =
     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......." */
+    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 000000a0    "....gE#." */
+    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 000000a8    "....gE#." */
+    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 000000b0    "....gE#." */
+    0x01,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x78,  /* 000000b8    ".......x" */
+    0x00,0x00,0x00,0x00,0x00,0x94,0x00,0x00,  /* 000000c0    "........" */
+    0x2C,0x00,0x00,0x00,0x44,0x00,0x00,0x00,  /* 000000c8    ",...D..." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000d0    "........" */
+    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 000000d8    "....gE#." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000e0    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000000e8    "........" */
+    0x11,0x11,0x00,0x00,0x01,0x00,0x01,0x00,  /* 000000f0    "........" */
+    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 000000f8    "....gE#." */
+    0x67,0x67,0x67,0x67,0x00,0x00,0x00,0x00,  /* 00000100    "gggg...." */
+    0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,  /* 00000108    "........" */
+    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000110    "....gE#." */
+    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000118    "........" */
+    0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000120    "........" */
     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    "........" */
+    0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00,  /* 00000130    "........" */
+    0x01,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x78,  /* 00000138    ".......x" */
+    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000140    "....gE#." */
+    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000148    "....gE#." */
     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    "........" */
+    0x01,0x80,0x00,0x00,0x2C,0x00,0x00,0x00,  /* 00000158    "....,..." */
+    0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000160    "0......." */
     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,  /* 00000170    "........" */
+    0x00,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89,  /* 00000178    "........" */
+    0x67,0x45,0x23,0x01,0xAA,0xAA,0x00,0x00,  /* 00000180    "gE#....." */
+    0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000188    "........" */
+    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000190    "....gE#." */
+    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000198    "........" */
+    0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001a0    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001a8    "........" */
+    0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00,  /* 000001b0    "........" */
+    0x01,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x78,  /* 000001b8    ".......x" */
+    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 000001c0    "....gE#." */
+    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 000001c8    "....gE#." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001d0    "........" */
+    0x02,0x84,0x00,0x00,0x2C,0x00,0x00,0x00,  /* 000001d8    "....,..." */
+    0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001e0    "4......." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001e8    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000001f0    "........" */
+    0x00,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89,  /* 000001f8    "........" */
+    0x67,0x45,0x23,0x01,0x55,0x55,0x55,0x55,  /* 00000200    "gE#.UUUU" */
+    0x66,0x66,0x66,0x66,0x01,0x00,0x00,0x00,  /* 00000208    "ffff...." */
+    0x03,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89,  /* 00000210    "........" */
+    0x67,0x45,0x23,0x01,0x00,0x00,0x00,0x00,  /* 00000218    "gE#....." */
+    0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000220    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000228    "........" */
+    0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x01,  /* 00000230    "........" */
+    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000238    "........" */
+    0xEF,0xCD,0xAB,0x78,0xEF,0xCD,0xAB,0x89,  /* 00000240    "...x...." */
+    0x67,0x45,0x23,0x01,0xEF,0xCD,0xAB,0x89,  /* 00000248    "gE#....." */
+    0x67,0x45,0x23,0x01,0xEF,0xCD,0xAB,0x89,  /* 00000250    "gE#....." */
+    0x67,0x45,0x23,0x01,0x03,0x98,0x00,0x00,  /* 00000258    "gE#....." */
+    0x2C,0x00,0x00,0x00,0x48,0x00,0x00,0x00,  /* 00000260    ",...H..." */
     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..."     */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000270    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000278    "........" */
+    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000280    "....gE#." */
+    0x33,0x33,0x33,0x33,0x22,0x22,0x22,0x22,  /* 00000288    "3333""""" */
+    0x44,0x44,0x44,0x44,0x12,0x23,0x34,0x45,  /* 00000290    "DDDD.#4E" */
+    0x56,0x67,0x78,0x89,0x9A,0xAB,0xBC,0xCD,  /* 00000298    "Vgx....." */
+    0xDE,0xEF,0xFF,0x55,0x01,0x00,0x00,0x00,  /* 000002a0    "...U...." */
+    0x02,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x89,  /* 000002a8    "........" */
+    0x67,0x45,0x23,0x01,0x00,0x00,0x00,0x00,  /* 000002b0    "gE#....." */
+    0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 000002b8    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 000002c0    "........" */
+    0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x01,  /* 000002c8    "........" */
+    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 000002d0    "........" */
+    0xEF,0xCD,0xAB,0x78,0xEF,0xCD,0xAB,0x89,  /* 000002d8    "...x...." */
+    0x67,0x45,0x23,0x01,0xEF,0xCD,0xAB,0x89,  /* 000002e0    "gE#....." */
+    0x67,0x45,0x23,0x01,0xEF,0xCD,0xAB,0x89,  /* 000002e8    "gE#....." */
+    0x67,0x45,0x23,0x01,0x04,0x9C,0x00,0x00,  /* 000002f0    "gE#....." */
+    0x2C,0x00,0x00,0x00,0x34,0x00,0x00,0x00,  /* 000002f8    ",...4..." */
+    0x84,0x00,0x00,0x00,0x02,0x00,0x00,0x00,  /* 00000300    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000308    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000310    "........" */
+    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000318    "....gE#." */
+    0x03,0x00,0x00,0x00,0x88,0x88,0x77,0x77,  /* 00000320    "......ww" */
+    0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,  /* 00000328    "........" */
+    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000330    "....gE#." */
+    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,  /* 00000338    "........" */
+    0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000340    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000348    "........" */
+    0x11,0x11,0x11,0x01,0x00,0x00,0x00,0x00,  /* 00000350    "........" */
+    0x01,0x00,0x00,0x00,0xEF,0xCD,0xAB,0x78,  /* 00000358    ".......x" */
+    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000360    "....gE#." */
+    0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01,  /* 00000368    "....gE#." */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000370    "........" */
+    0x00,0x00,0x00,0x00,0xBB,0xBB,0xAA,0xAA,  /* 00000378    "........" */
+    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,  /* 00000380    "........" */
+    0xEF,0xCD,0xAB,0x78,0x00,0x00,0x00,0x00,  /* 00000388    "...x...." */
 };
 
 const unsigned char TemplateAgdi[] =
@@ -1252,10 +1276,10 @@  const unsigned char TemplateMsdm[] =
 const unsigned char TemplateMpam[] =
 {
     0x4D,0x50,0x41,0x4D,0xFC,0x00,0x00,0x00,  /* 00000000    "MPAM...." */
-    0x02,0x34,0x48,0x49,0x53,0x49,0x20,0x20,  /* 00000008    ".4HISI  " */
+    0x02,0x35,0x48,0x49,0x53,0x49,0x20,0x20,  /* 00000008    ".5HISI  " */
     0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
     0x02,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
-    0x20,0x10,0x22,0x20,0x60,0x00,0x00,0x00,  /* 00000020    " ." `..." */
+    0x28,0x06,0x23,0x20,0x60,0x00,0x00,0x00,  /* 00000020    "(.# `..." */
     0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,  /* 00000028    "........" */
     0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,  /* 00000030    "........" */
     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
@@ -1896,8 +1920,8 @@  const unsigned char TemplateSlit[] =
 
 const unsigned char TemplateSpcr[] =
 {
-    0x53,0x50,0x43,0x52,0x50,0x00,0x00,0x00,  /* 00000000    "SPCRP..." */
-    0x01,0xE3,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
+    0x53,0x50,0x43,0x52,0x5A,0x00,0x00,0x00,  /* 00000000    "SPCRZ..." */
+    0x04,0x4E,0x49,0x4E,0x54,0x45,0x4C,0x20,  /* 00000008    "..INTEL " */
     0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45,  /* 00000010    "TEMPLATE" */
     0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
     0x28,0x05,0x10,0x20,0x00,0x00,0x00,0x00,  /* 00000020    "(.. ...." */
@@ -1905,7 +1929,9 @@  const unsigned char TemplateSpcr[] =
     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000030    "........" */
     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000038    "........" */
     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000040    "........" */
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00   /* 00000048    "........" */
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* 00000048    "........" */
+    0x00,0x00,0x00,0x00,0x02,0x00,0x58,0x00,  /* 00000050    "......X." */
+    0x2E,0x00                                 /* 00000058    ".." */
 };
 
 const unsigned char TemplateSpmi[] =
diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c
index 82a51cb8..a3dcb507 100644
--- a/src/acpica/source/compiler/dtutils.c
+++ b/src/acpica/source/compiler/dtutils.c
@@ -439,6 +439,8 @@  DtGetFieldType (
     case ACPI_DMT_BUF12:
     case ACPI_DMT_BUF16:
     case ACPI_DMT_BUF18:
+    case ACPI_DMT_BUF32:
+    case ACPI_DMT_BUF112:
     case ACPI_DMT_BUF128:
     case ACPI_DMT_PCI_PATH:
     case ACPI_DMT_PMTT_VENDOR:
@@ -746,6 +748,16 @@  DtGetFieldLength (
         ByteLength = 18;
         break;
 
+    case ACPI_DMT_BUF32:
+
+        ByteLength = 32;
+        break;
+
+    case ACPI_DMT_BUF112:
+
+        ByteLength = 112;
+        break;
+
     case ACPI_DMT_BUF128:
 
         ByteLength = 128;
diff --git a/src/acpica/source/compiler/prmacros.c b/src/acpica/source/compiler/prmacros.c
index f3368de5..4610ccc2 100644
--- a/src/acpica/source/compiler/prmacros.c
+++ b/src/acpica/source/compiler/prmacros.c
@@ -455,7 +455,7 @@  PrAddMacro (
         }
 
         DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
-            "Macro param: %s \n",
+            "Macro param: %s\n",
             AslGbl_CurrentLineNumber, Token);
 
         Args[i].Name = UtLocalCalloc (strlen (Token) + 1);
@@ -497,7 +497,7 @@  PrAddMacro (
 
 
                 DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
-                    "Macro Arg #%u: %s UseCount %u Offset %u \n",
+                    "Macro Arg #%u: %s UseCount %u Offset %u\n",
                     AslGbl_CurrentLineNumber, i, Token,
                     UseCount+1, Args[i].Offset[UseCount]);
 
@@ -544,7 +544,7 @@  AddMacroToList:
     }
 
     DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
-        "Macro body: %s \n",
+        "Macro body: %s\n",
         AslGbl_CurrentLineNumber, BodyInSource);
 
     /* Add macro to the #define list */
@@ -668,7 +668,7 @@  PrDoMacroInvocation (
             PrReplaceResizeSubstring (Args, Diff1, Diff2, i, Token);
 
             DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
-                "ExpandArg: %s \n",
+                "ExpandArg: %s\n",
                 AslGbl_CurrentLineNumber, AslGbl_MacroTokenBuffer);
         }
 
@@ -696,7 +696,7 @@  BadInvocation:
         THIS_TOKEN_OFFSET (MacroStart));
 
     DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
-        "Bad macro invocation: %s \n",
+        "Bad macro invocation: %s\n",
         AslGbl_CurrentLineNumber, AslGbl_MacroTokenBuffer);
     return;
 }
diff --git a/src/acpica/source/components/debugger/dbconvert.c b/src/acpica/source/components/debugger/dbconvert.c
index 6a410000..32ad5be1 100644
--- a/src/acpica/source/components/debugger/dbconvert.c
+++ b/src/acpica/source/components/debugger/dbconvert.c
@@ -354,6 +354,8 @@  AcpiDbConvertToPackage (
 
     Elements = ACPI_ALLOCATE_ZEROED (
         DB_DEFAULT_PKG_ELEMENTS * sizeof (ACPI_OBJECT));
+    if (!Elements)
+        return (AE_NO_MEMORY);
 
     This = String;
     for (i = 0; i < (DB_DEFAULT_PKG_ELEMENTS - 1); i++)
diff --git a/src/acpica/source/components/disassembler/dmwalk.c b/src/acpica/source/components/disassembler/dmwalk.c
index 90e4a06c..a4d18cad 100644
--- a/src/acpica/source/components/disassembler/dmwalk.c
+++ b/src/acpica/source/components/disassembler/dmwalk.c
@@ -969,8 +969,6 @@  AcpiDmDescendingOp (
                      AcpiDmPredefinedDescription (Op->Asl.Parent);
                 }
 
-                AcpiDmPredefinedDescription (Op->Asl.Parent);
-
                 AcpiOsPrintf ("\n");
                 AcpiDmIndent (Info->Level);
                 AcpiOsPrintf ("{\n");
diff --git a/src/acpica/source/components/executer/exconvrt.c b/src/acpica/source/components/executer/exconvrt.c
index ec38892b..360f16cc 100644
--- a/src/acpica/source/components/executer/exconvrt.c
+++ b/src/acpica/source/components/executer/exconvrt.c
@@ -165,7 +165,8 @@  AcpiExConvertToAscii (
     UINT64                  Integer,
     UINT16                  Base,
     UINT8                   *String,
-    UINT8                   MaxLength);
+    UINT8                   MaxLength,
+    BOOLEAN                 LeadingZeros);
 
 
 /*******************************************************************************
@@ -412,6 +413,7 @@  AcpiExConvertToBuffer (
  *              Base            - ACPI_STRING_DECIMAL or ACPI_STRING_HEX
  *              String          - Where the string is returned
  *              DataWidth       - Size of data item to be converted, in bytes
+ *              LeadingZeros    - Allow leading zeros
  *
  * RETURN:      Actual string length
  *
@@ -424,7 +426,8 @@  AcpiExConvertToAscii (
     UINT64                  Integer,
     UINT16                  Base,
     UINT8                   *String,
-    UINT8                   DataWidth)
+    UINT8                   DataWidth,
+    BOOLEAN                 LeadingZeros)
 {
     UINT64                  Digit;
     UINT32                  i;
@@ -433,7 +436,8 @@  AcpiExConvertToAscii (
     UINT32                  HexLength;
     UINT32                  DecimalLength;
     UINT32                  Remainder;
-    BOOLEAN                 SupressZeros;
+    BOOLEAN                 SupressZeros = !LeadingZeros;
+    UINT8                   HexChar;
 
 
     ACPI_FUNCTION_ENTRY ();
@@ -464,7 +468,6 @@  AcpiExConvertToAscii (
             break;
         }
 
-        SupressZeros = TRUE;     /* No leading zeros */
         Remainder = 0;
 
         for (i = DecimalLength; i > 0; i--)
@@ -501,8 +504,18 @@  AcpiExConvertToAscii (
         {
             /* Get one hex digit, most significant digits first */
 
-            String[k] = (UINT8)
+            HexChar = (UINT8)
                 AcpiUtHexToAsciiChar (Integer, ACPI_MUL_4 (j));
+
+            /* Supress leading zeros until the first non-zero character */
+
+            if (HexChar == ACPI_ASCII_ZERO && SupressZeros)
+            {
+                continue;
+            }
+
+            SupressZeros = FALSE;
+            String[k] = HexChar;
             k++;
         }
         break;
@@ -556,6 +569,7 @@  AcpiExConvertToString (
     UINT32                  StringLength = 0;
     UINT16                  Base = 16;
     UINT8                   Separator = ',';
+    BOOLEAN                 LeadingZeros;
 
 
     ACPI_FUNCTION_TRACE_PTR (ExConvertToString, ObjDesc);
@@ -581,14 +595,25 @@  AcpiExConvertToString (
              * Make room for the maximum decimal number size
              */
             StringLength = ACPI_MAX_DECIMAL_DIGITS;
+            LeadingZeros = FALSE;
             Base = 10;
             break;
 
+        case ACPI_EXPLICIT_CONVERT_HEX:
+            /*
+             * From ToHexString.
+             *
+             * Supress leading zeros and append "0x"
+             */
+            StringLength = ACPI_MUL_2 (AcpiGbl_IntegerByteWidth) + 2;
+            LeadingZeros = FALSE;
+            break;
         default:
 
             /* Two hex string characters for each integer byte */
 
             StringLength = ACPI_MUL_2 (AcpiGbl_IntegerByteWidth);
+            LeadingZeros = TRUE;
             break;
         }
 
@@ -603,15 +628,29 @@  AcpiExConvertToString (
         }
 
         NewBuf = ReturnDesc->Buffer.Pointer;
+        if (Type == ACPI_EXPLICIT_CONVERT_HEX)
+        {
+            /* Append "0x" prefix for explicit hex conversion */
+
+            *NewBuf++ = '0';
+            *NewBuf++ = 'x';
+        }
 
         /* Convert integer to string */
 
         StringLength = AcpiExConvertToAscii (
-            ObjDesc->Integer.Value, Base, NewBuf, AcpiGbl_IntegerByteWidth);
+            ObjDesc->Integer.Value, Base, NewBuf, AcpiGbl_IntegerByteWidth, LeadingZeros);
 
         /* Null terminate at the correct place */
 
         ReturnDesc->String.Length = StringLength;
+        if (Type == ACPI_EXPLICIT_CONVERT_HEX)
+        {
+            /* Take "0x" prefix into account */
+
+            ReturnDesc->String.Length += 2;
+        }
+
         NewBuf [StringLength] = 0;
         break;
 
@@ -628,6 +667,7 @@  AcpiExConvertToString (
              * From ACPI: "If the input is a buffer, it is converted to a
              * a string of decimal values separated by commas."
              */
+            LeadingZeros = FALSE;
             Base = 10;
 
             /*
@@ -661,6 +701,7 @@  AcpiExConvertToString (
              *
              * Each hex number is prefixed with 0x (11/2018)
              */
+            LeadingZeros = TRUE;
             Separator = ' ';
             StringLength = (ObjDesc->Buffer.Length * 5);
             break;
@@ -674,6 +715,7 @@  AcpiExConvertToString (
              *
              * Each hex number is prefixed with 0x (11/2018)
              */
+            LeadingZeros = TRUE;
             Separator = ',';
             StringLength = (ObjDesc->Buffer.Length * 5);
             break;
@@ -715,7 +757,7 @@  AcpiExConvertToString (
             }
 
             NewBuf += AcpiExConvertToAscii (
-                (UINT64) ObjDesc->Buffer.Pointer[i], Base, NewBuf, 1);
+                (UINT64) ObjDesc->Buffer.Pointer[i], Base, NewBuf, 1, LeadingZeros);
 
             /* Each digit is separated by either a comma or space */
 
diff --git a/src/acpica/source/components/executer/exprep.c b/src/acpica/source/components/executer/exprep.c
index 545ca0c3..f2164fe8 100644
--- a/src/acpica/source/components/executer/exprep.c
+++ b/src/acpica/source/components/executer/exprep.c
@@ -611,6 +611,10 @@  AcpiExPrepFieldValue (
         if (Info->ConnectionNode)
         {
             SecondDesc = Info->ConnectionNode->Object;
+            if (SecondDesc == NULL)
+            {
+                break;
+            }
             if (!(SecondDesc->Common.Flags & AOPOBJ_DATA_VALID))
             {
                 Status = AcpiDsGetBufferArguments (SecondDesc);
diff --git a/src/acpica/source/components/executer/exregion.c b/src/acpica/source/components/executer/exregion.c
index c625b668..5da92941 100644
--- a/src/acpica/source/components/executer/exregion.c
+++ b/src/acpica/source/components/executer/exregion.c
@@ -191,7 +191,6 @@  AcpiExSystemMemorySpaceHandler (
     ACPI_MEM_MAPPING        *Mm = MemInfo->CurMm;
     UINT32                  Length;
     ACPI_SIZE               MapLength;
-    ACPI_SIZE               PageBoundaryMapLength;
 #ifdef ACPI_MISALIGNMENT_NOT_SUPPORTED
     UINT32                  Remainder;
 #endif
@@ -298,27 +297,9 @@  AcpiExSystemMemorySpaceHandler (
         MapLength = (ACPI_SIZE)
             ((MemInfo->Address + MemInfo->Length) - Address);
 
-        /*
-         * If mapping the entire remaining portion of the region will cross
-         * a page boundary, just map up to the page boundary, do not cross.
-         * On some systems, crossing a page boundary while mapping regions
-         * can cause warnings if the pages have different attributes
-         * due to resource management.
-         *
-         * This has the added benefit of constraining a single mapping to
-         * one page, which is similar to the original code that used a 4k
-         * maximum window.
-         */
-        PageBoundaryMapLength = (ACPI_SIZE)
-            (ACPI_ROUND_UP (Address, ACPI_DEFAULT_PAGE_SIZE) - Address);
-        if (PageBoundaryMapLength == 0)
-        {
-            PageBoundaryMapLength = ACPI_DEFAULT_PAGE_SIZE;
-        }
-
-        if (MapLength > PageBoundaryMapLength)
+        if (MapLength > ACPI_DEFAULT_PAGE_SIZE)
         {
-            MapLength = PageBoundaryMapLength;
+            MapLength = ACPI_DEFAULT_PAGE_SIZE;
         }
 
         /* Create a new mapping starting at the address given */
diff --git a/src/acpica/source/components/executer/exsystem.c b/src/acpica/source/components/executer/exsystem.c
index 16fb5ea1..bc134172 100644
--- a/src/acpica/source/components/executer/exsystem.c
+++ b/src/acpica/source/components/executer/exsystem.c
@@ -296,7 +296,7 @@  AcpiExSystemDoStall (
          * (ACPI specifies 100 usec as max, but this gives some slack in
          * order to support existing BIOSs)
          */
-        ACPI_ERROR ((AE_INFO,
+        ACPI_ERROR_ONCE ((AE_INFO,
             "Time parameter is too large (%u)", HowLongUs));
         Status = AE_AML_OPERAND_VALUE;
     }
@@ -304,7 +304,7 @@  AcpiExSystemDoStall (
     {
         if (HowLongUs > 100)
         {
-            ACPI_WARNING ((AE_INFO,
+            ACPI_WARNING_ONCE ((AE_INFO,
                 "Time parameter %u us > 100 us violating ACPI spec, please fix the firmware.", HowLongUs));
         }
         AcpiOsStall (HowLongUs);
diff --git a/src/acpica/source/components/hardware/hwxfsleep.c b/src/acpica/source/components/hardware/hwxfsleep.c
index 66118a4e..6605a58e 100644
--- a/src/acpica/source/components/hardware/hwxfsleep.c
+++ b/src/acpica/source/components/hardware/hwxfsleep.c
@@ -159,13 +159,11 @@ 
 
 /* Local prototypes */
 
-#if (!ACPI_REDUCED_HARDWARE)
 static ACPI_STATUS
 AcpiHwSetFirmwareWakingVector (
     ACPI_TABLE_FACS         *Facs,
     ACPI_PHYSICAL_ADDRESS   PhysicalAddress,
     ACPI_PHYSICAL_ADDRESS   PhysicalAddress64);
-#endif
 
 static ACPI_STATUS
 AcpiHwSleepDispatch (
@@ -199,13 +197,6 @@  static ACPI_SLEEP_FUNCTIONS         AcpiSleepDispatch[] =
 };
 
 
-/*
- * These functions are removed for the ACPI_REDUCED_HARDWARE case:
- *      AcpiSetFirmwareWakingVector
- *      AcpiEnterSleepStateS4bios
- */
-
-#if (!ACPI_REDUCED_HARDWARE)
 /*******************************************************************************
  *
  * FUNCTION:    AcpiHwSetFirmwareWakingVector
@@ -298,6 +289,12 @@  AcpiSetFirmwareWakingVector (
 ACPI_EXPORT_SYMBOL (AcpiSetFirmwareWakingVector)
 
 
+/*
+ * These functions are removed for the ACPI_REDUCED_HARDWARE case:
+ *      AcpiEnterSleepStateS4bios
+ */
+
+#if (!ACPI_REDUCED_HARDWARE)
 /*******************************************************************************
  *
  * FUNCTION:    AcpiEnterSleepStateS4bios
diff --git a/src/acpica/source/components/parser/psargs.c b/src/acpica/source/components/parser/psargs.c
index 728ac559..24cf6f84 100644
--- a/src/acpica/source/components/parser/psargs.c
+++ b/src/acpica/source/components/parser/psargs.c
@@ -170,6 +170,10 @@  static ACPI_PARSE_OBJECT *
 AcpiPsGetNextField (
     ACPI_PARSE_STATE        *ParserState);
 
+static void
+AcpiPsFreeFieldList (
+    ACPI_PARSE_OBJECT       *Start);
+
 
 /*******************************************************************************
  *
@@ -872,6 +876,43 @@  AcpiPsGetNextField (
     return_PTR (Field);
 }
 
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiPsFreeFieldList
+ *
+ * PARAMETERS:  Start               - First Op in field list
+ *
+ * RETURN:      None.
+ *
+ * DESCRIPTION: Free all Op objects inside a field list.
+ *
+ ******************************************************************************/
+
+static void
+AcpiPsFreeFieldList (
+    ACPI_PARSE_OBJECT	*Start)
+{
+    ACPI_PARSE_OBJECT *Current = Start;
+    ACPI_PARSE_OBJECT *Next;
+    ACPI_PARSE_OBJECT *Arg;
+
+    while (Current)
+    {
+        Next = Current->Common.Next;
+
+        /* AML_INT_CONNECTION_OP can have a single argument */
+
+        Arg = AcpiPsGetArg (Current, 0);
+        if (Arg)
+        {
+            AcpiPsFreeOp (Arg);
+        }
+
+        AcpiPsFreeOp(Current);
+        Current = Next;
+    }
+}
+
 
 /*******************************************************************************
  *
@@ -948,6 +989,11 @@  AcpiPsGetNextArg (
                 Field = AcpiPsGetNextField (ParserState);
                 if (!Field)
                 {
+                    if (Arg)
+                    {
+                        AcpiPsFreeFieldList(Arg);
+                    }
+
                     return_ACPI_STATUS (AE_NO_MEMORY);
                 }
 
@@ -1016,6 +1062,11 @@  AcpiPsGetNextArg (
 
             Status = AcpiPsGetNextNamepath (WalkState, ParserState,
                 Arg, ACPI_NOT_METHOD_CALL);
+            if (ACPI_FAILURE(Status))
+            {
+                AcpiPsFreeOp (Arg);
+                return_ACPI_STATUS (Status);
+            }
         }
         else
         {
@@ -1048,6 +1099,11 @@  AcpiPsGetNextArg (
 
             Status = AcpiPsGetNextNamepath (WalkState, ParserState,
                 Arg, ACPI_POSSIBLE_METHOD_CALL);
+            if (ACPI_FAILURE(Status))
+            {
+                AcpiPsFreeOp (Arg);
+                return_ACPI_STATUS (Status);
+            }
 
             if (Arg->Common.AmlOpcode == AML_INT_METHODCALL_OP)
             {
diff --git a/src/acpica/source/components/resources/rsaddr.c b/src/acpica/source/components/resources/rsaddr.c
index ec97ab8e..2289f2dd 100644
--- a/src/acpica/source/components/resources/rsaddr.c
+++ b/src/acpica/source/components/resources/rsaddr.c
@@ -441,7 +441,8 @@  AcpiRsGetAddressCommon (
     /* Validate the Resource Type */
 
     if ((Address.ResourceType > 2) &&
-        (Address.ResourceType < 0xC0))
+        (Address.ResourceType < 0xC0) &&
+        (Address.ResourceType != 0x0A))
     {
         return (FALSE);
     }
diff --git a/src/acpica/source/components/resources/rsdump.c b/src/acpica/source/components/resources/rsdump.c
index b12d72df..2a4d178c 100644
--- a/src/acpica/source/components/resources/rsdump.c
+++ b/src/acpica/source/components/resources/rsdump.c
@@ -230,6 +230,7 @@  AcpiRsDumpDescriptor (
     ACPI_RSDUMP_INFO        *Table);
 
 
+#ifdef ACPI_DEBUGGER
 /*******************************************************************************
  *
  * FUNCTION:    AcpiRsDumpResourceList
@@ -359,7 +360,7 @@  AcpiRsDumpIrqList (
             PrtElement, PrtElement->Length);
     }
 }
-
+#endif
 
 /*******************************************************************************
  *
diff --git a/src/acpica/source/components/tables/tbfadt.c b/src/acpica/source/components/tables/tbfadt.c
index df19488d..feb698f8 100644
--- a/src/acpica/source/components/tables/tbfadt.c
+++ b/src/acpica/source/components/tables/tbfadt.c
@@ -489,24 +489,19 @@  AcpiTbParseFadt (
         ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, TRUE,
         &AcpiGbl_DsdtIndex);
 
-    /* If Hardware Reduced flag is set, there is no FACS */
-
-    if (!AcpiGbl_ReducedHardware)
+    if (AcpiGbl_FADT.Facs)
     {
-        if (AcpiGbl_FADT.Facs)
-        {
-            AcpiTbInstallStandardTable (
-                (ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.Facs,
-                ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, TRUE,
-                &AcpiGbl_FacsIndex);
-        }
-        if (AcpiGbl_FADT.XFacs)
-        {
-            AcpiTbInstallStandardTable (
-                (ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.XFacs,
-                ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, TRUE,
-                &AcpiGbl_XFacsIndex);
-        }
+        AcpiTbInstallStandardTable (
+            (ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.Facs,
+            ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, TRUE,
+            &AcpiGbl_FacsIndex);
+    }
+    if (AcpiGbl_FADT.XFacs)
+    {
+        AcpiTbInstallStandardTable (
+            (ACPI_PHYSICAL_ADDRESS) AcpiGbl_FADT.XFacs,
+            ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, NULL, FALSE, TRUE,
+            &AcpiGbl_XFacsIndex);
     }
 }
 
diff --git a/src/acpica/source/components/tables/tbutils.c b/src/acpica/source/components/tables/tbutils.c
index 3e288971..2c5f68be 100644
--- a/src/acpica/source/components/tables/tbutils.c
+++ b/src/acpica/source/components/tables/tbutils.c
@@ -165,7 +165,6 @@  AcpiTbGetRootTableEntry (
     UINT32                  TableEntrySize);
 
 
-#if (!ACPI_REDUCED_HARDWARE)
 /*******************************************************************************
  *
  * FUNCTION:    AcpiTbInitializeFacs
@@ -185,15 +184,7 @@  AcpiTbInitializeFacs (
 {
     ACPI_TABLE_FACS         *Facs;
 
-
-    /* If Hardware Reduced flag is set, there is no FACS */
-
-    if (AcpiGbl_ReducedHardware)
-    {
-        AcpiGbl_FACS = NULL;
-        return (AE_OK);
-    }
-    else if (AcpiGbl_FADT.XFacs &&
+    if (AcpiGbl_FADT.XFacs &&
          (!AcpiGbl_FADT.Facs || !AcpiGbl_Use32BitFacsAddresses))
     {
         (void) AcpiGetTableByIndex (AcpiGbl_XFacsIndex,
@@ -211,7 +202,6 @@  AcpiTbInitializeFacs (
 
     return (AE_OK);
 }
-#endif /* !ACPI_REDUCED_HARDWARE */
 
 
 /*******************************************************************************
diff --git a/src/acpica/source/components/utilities/utdelete.c b/src/acpica/source/components/utilities/utdelete.c
index e194dd40..922358d7 100644
--- a/src/acpica/source/components/utilities/utdelete.c
+++ b/src/acpica/source/components/utilities/utdelete.c
@@ -293,7 +293,7 @@  AcpiUtDeleteInternalObj (
             /* Global Lock has extra semaphore */
 
             (void) AcpiOsDeleteSemaphore (AcpiGbl_GlobalLockSemaphore);
-            AcpiGbl_GlobalLockSemaphore = NULL;
+            AcpiGbl_GlobalLockSemaphore = ACPI_SEMAPHORE_NULL;
 
             AcpiOsDeleteMutex (Object->Mutex.OsMutex);
             AcpiGbl_GlobalLockMutex = NULL;
@@ -312,7 +312,7 @@  AcpiUtDeleteInternalObj (
             Object, Object->Event.OsSemaphore));
 
         (void) AcpiOsDeleteSemaphore (Object->Event.OsSemaphore);
-        Object->Event.OsSemaphore = NULL;
+        Object->Event.OsSemaphore = ACPI_SEMAPHORE_NULL;
         break;
 
     case ACPI_TYPE_METHOD:
diff --git a/src/acpica/source/components/utilities/utinit.c b/src/acpica/source/components/utilities/utinit.c
index 4d8d0e13..e100e0f3 100644
--- a/src/acpica/source/components/utilities/utinit.c
+++ b/src/acpica/source/components/utilities/utinit.c
@@ -316,7 +316,7 @@  AcpiUtInitGlobals (
 
     /* Global Lock support */
 
-    AcpiGbl_GlobalLockSemaphore         = NULL;
+    AcpiGbl_GlobalLockSemaphore         = ACPI_SEMAPHORE_NULL;
     AcpiGbl_GlobalLockMutex             = NULL;
     AcpiGbl_GlobalLockAcquired          = FALSE;
     AcpiGbl_GlobalLockHandle            = 0;
diff --git a/src/acpica/source/components/utilities/utosi.c b/src/acpica/source/components/utilities/utosi.c
index 789fe0fe..ebf04d27 100644
--- a/src/acpica/source/components/utilities/utosi.c
+++ b/src/acpica/source/components/utilities/utosi.c
@@ -222,6 +222,7 @@  static ACPI_INTERFACE_INFO    AcpiDefaultSupportedInterfaces[] =
     {"Windows 2019",        NULL, 0, ACPI_OSI_WIN_10_19H1},      /* Windows 10 version 1903 - Added 08/2019 */
     {"Windows 2020",        NULL, 0, ACPI_OSI_WIN_10_20H1},      /* Windows 10 version 2004 - Added 08/2021 */
     {"Windows 2021",        NULL, 0, ACPI_OSI_WIN_11},           /* Windows 11 - Added 01/2022 */
+    {"Windows 2022",        NULL, 0, ACPI_OSI_WIN_11_22H2},      /* Windows 11 version 22H2 - Added 04/2024 */
 
     /* Feature Group Strings */
 
diff --git a/src/acpica/source/components/utilities/utxfinit.c b/src/acpica/source/components/utilities/utxfinit.c
index adf7429f..c8bb0cea 100644
--- a/src/acpica/source/components/utilities/utxfinit.c
+++ b/src/acpica/source/components/utilities/utxfinit.c
@@ -276,6 +276,20 @@  AcpiEnableSubsystem (
      */
     AcpiGbl_EarlyInitialization = FALSE;
 
+    /*
+     * Obtain a permanent mapping for the FACS. This is required for the
+     * Global Lock and the Firmware Waking Vector
+     */
+    if (!(Flags & ACPI_NO_FACS_INIT))
+    {
+        Status = AcpiTbInitializeFacs ();
+        if (ACPI_FAILURE (Status))
+        {
+            ACPI_WARNING ((AE_INFO, "Could not map the FACS table"));
+            return_ACPI_STATUS (Status);
+        }
+    }
+
 #if (!ACPI_REDUCED_HARDWARE)
 
     /* Enable ACPI mode */
@@ -294,20 +308,6 @@  AcpiEnableSubsystem (
         }
     }
 
-    /*
-     * Obtain a permanent mapping for the FACS. This is required for the
-     * Global Lock and the Firmware Waking Vector
-     */
-    if (!(Flags & ACPI_NO_FACS_INIT))
-    {
-        Status = AcpiTbInitializeFacs ();
-        if (ACPI_FAILURE (Status))
-        {
-            ACPI_WARNING ((AE_INFO, "Could not map the FACS table"));
-            return_ACPI_STATUS (Status);
-        }
-    }
-
     /*
      * Initialize ACPI Event handling (Fixed and General Purpose)
      *
diff --git a/src/acpica/source/include/acconfig.h b/src/acpica/source/include/acconfig.h
index f795b19e..7af986fc 100644
--- a/src/acpica/source/include/acconfig.h
+++ b/src/acpica/source/include/acconfig.h
@@ -210,7 +210,6 @@ 
  *      General Purpose Events (GPEs)
  *      Global Lock
  *      ACPI PM timer
- *      FACS table (Waking vectors and Global Lock)
  */
 #ifndef ACPI_REDUCED_HARDWARE
 #define ACPI_REDUCED_HARDWARE           FALSE
diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
index 91ec2943..01acb57f 100644
--- a/src/acpica/source/include/acdisasm.h
+++ b/src/acpica/source/include/acdisasm.h
@@ -226,6 +226,8 @@  typedef enum
     ACPI_DMT_BUF12,
     ACPI_DMT_BUF16,
     ACPI_DMT_BUF18,
+    ACPI_DMT_BUF32,
+    ACPI_DMT_BUF112,
     ACPI_DMT_BUF128,
     ACPI_DMT_SIG,
     ACPI_DMT_STRING,
@@ -382,9 +384,17 @@  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestGenRsrc[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestMemError[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestSmmuError[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestVendorError[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestVendorV2Error[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestGicError[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestPCIeError[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestProxyError[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestXface[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestXfaceHeader[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestXface4k[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestXface16k[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestXface64k[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestXrupt[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAestXruptV2[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAgdi[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoApmtNode[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoAsf0[];
@@ -418,6 +428,8 @@  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCedtHdr[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCedt0[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCedt1[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCedt1_te[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCedt2[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCedt2_te[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCpep[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCpep0[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoCsrt0[];
diff --git a/src/acpica/source/include/acglobal.h b/src/acpica/source/include/acglobal.h
index 7a87d125..fa14d6e5 100644
--- a/src/acpica/source/include/acglobal.h
+++ b/src/acpica/source/include/acglobal.h
@@ -172,11 +172,7 @@  ACPI_INIT_GLOBAL (UINT32,               AcpiGbl_DsdtIndex, ACPI_INVALID_TABLE_IN
 ACPI_INIT_GLOBAL (UINT32,               AcpiGbl_FacsIndex, ACPI_INVALID_TABLE_INDEX);
 ACPI_INIT_GLOBAL (UINT32,               AcpiGbl_XFacsIndex, ACPI_INVALID_TABLE_INDEX);
 ACPI_INIT_GLOBAL (UINT32,               AcpiGbl_FadtIndex, ACPI_INVALID_TABLE_INDEX);
-
-#if (!ACPI_REDUCED_HARDWARE)
-ACPI_GLOBAL (ACPI_TABLE_FACS *,         AcpiGbl_FACS);
-
-#endif /* !ACPI_REDUCED_HARDWARE */
+ACPI_INIT_GLOBAL (ACPI_TABLE_FACS *,    AcpiGbl_FACS, NULL);
 
 /* These addresses are calculated from the FADT Event Block addresses */
 
diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h
index 477034fb..c8beb6f1 100644
--- a/src/acpica/source/include/aclocal.h
+++ b/src/acpica/source/include/aclocal.h
@@ -1412,6 +1412,8 @@  typedef struct acpi_port_info
 #define ACPI_ADDRESS_TYPE_IO_RANGE              1
 #define ACPI_ADDRESS_TYPE_BUS_NUMBER_RANGE      2
 
+#define ACPI_ADDRESS_TYPE_PCC_NUMBER            0xA
+
 /* Resource descriptor types and masks */
 
 #define ACPI_RESOURCE_NAME_LARGE                0x80
diff --git a/src/acpica/source/include/acoutput.h b/src/acpica/source/include/acoutput.h
index 6e1b317d..c270d2c8 100644
--- a/src/acpica/source/include/acoutput.h
+++ b/src/acpica/source/include/acoutput.h
@@ -336,6 +336,7 @@ 
  */
 #ifndef ACPI_NO_ERROR_MESSAGES
 #define AE_INFO                         _AcpiModuleName, __LINE__
+#define ACPI_ONCE(_fn, _plist)                  { static char _done; if (!_done) { _done = 1; _fn _plist; } }
 
 /*
  * Error reporting. Callers module and line number are inserted by AE_INFO,
@@ -344,8 +345,10 @@ 
  */
 #define ACPI_INFO(plist)                AcpiInfo plist
 #define ACPI_WARNING(plist)             AcpiWarning plist
+#define ACPI_WARNING_ONCE(plist)        ACPI_ONCE(AcpiWarning, plist)
 #define ACPI_EXCEPTION(plist)           AcpiException plist
 #define ACPI_ERROR(plist)               AcpiError plist
+#define ACPI_ERROR_ONCE(plist)          ACPI_ONCE(AcpiError, plist)
 #define ACPI_BIOS_WARNING(plist)        AcpiBiosWarning plist
 #define ACPI_BIOS_EXCEPTION(plist)      AcpiBiosException plist
 #define ACPI_BIOS_ERROR(plist)          AcpiBiosError plist
@@ -357,8 +360,10 @@ 
 
 #define ACPI_INFO(plist)
 #define ACPI_WARNING(plist)
+#define ACPI_WARNING_ONCE(plist)
 #define ACPI_EXCEPTION(plist)
 #define ACPI_ERROR(plist)
+#define ACPI_ERROR_ONCE(plist)
 #define ACPI_BIOS_WARNING(plist)
 #define ACPI_BIOS_EXCEPTION(plist)
 #define ACPI_BIOS_ERROR(plist)
diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
index ba4adf28..53d56a95 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                 0x20240322
+#define ACPI_CA_VERSION                 0x20240827
 
 #include "acconfig.h"
 #include "actypes.h"
@@ -1295,7 +1295,7 @@  ACPI_STATUS
 AcpiLeaveSleepState (
     UINT8                   SleepState))
 
-ACPI_HW_DEPENDENT_RETURN_STATUS (
+ACPI_EXTERNAL_RETURN_STATUS (
 ACPI_STATUS
 AcpiSetFirmwareWakingVector (
     ACPI_PHYSICAL_ADDRESS   PhysicalAddress,
diff --git a/src/acpica/source/include/acpredef.h b/src/acpica/source/include/acpredef.h
index c8ac10b2..144aedf0 100644
--- a/src/acpica/source/include/acpredef.h
+++ b/src/acpica/source/include/acpredef.h
@@ -587,7 +587,7 @@  const ACPI_PREDEFINED_INFO          AcpiGbl_PredefinedMethods[] =
                 METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each: 1 Buf, 1 Pkg */
                     PACKAGE_INFO (ACPI_PTYPE2_UUID_PAIR, ACPI_RTYPE_BUFFER, 1, ACPI_RTYPE_PACKAGE, 1,0),
 
-    {{"_DSM",   METHOD_4ARGS (ACPI_TYPE_BUFFER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_PACKAGE),
+    {{"_DSM",   METHOD_4ARGS (ACPI_TYPE_BUFFER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_ANY) | ARG_COUNT_IS_MINIMUM,
                 METHOD_RETURNS (ACPI_RTYPE_ALL)}}, /* Must return a value, but it can be of any type */
 
     {{"_DSS",   METHOD_1ARGS (ACPI_TYPE_INTEGER),
diff --git a/src/acpica/source/include/actbinfo.h b/src/acpica/source/include/actbinfo.h
index 4f2bfd1f..19692837 100644
--- a/src/acpica/source/include/actbinfo.h
+++ b/src/acpica/source/include/actbinfo.h
@@ -225,9 +225,17 @@ 
 #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_AEST3A_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_AEST_VENDOR_V2,f)
 #define ACPI_AEST4_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_AEST_GIC,f)
+#define ACPI_AEST5_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_AEST_PCIE,f)
+#define ACPI_AEST6_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_AEST_PROXY,f)
 #define ACPI_AEST0D_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERFACE,f)
+#define ACPI_AEST0DH_OFFSET(f)          (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERFACE_HEADER,f)
+#define ACPI_AEST0D4_OFFSET(f)          (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERFACE_4K,f)
+#define ACPI_AEST0D16_OFFSET(f)         (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERFACE_16K,f)
+#define ACPI_AEST0D64_OFFSET(f)         (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERFACE_64K,f)
 #define ACPI_AEST0E_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERRUPT,f)
+#define ACPI_AEST0EA_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_AEST_NODE_INTERRUPT_V2,f)
 #define ACPI_APMTN_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_APMT_NODE,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)
@@ -253,6 +261,8 @@ 
 #define ACPI_CEDT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_CEDT_CHBS, f)
 #define ACPI_CEDT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_CEDT_CFMWS, f)
 #define ACPI_CEDT1_TE_OFFSET(f)         (UINT16) ACPI_OFFSET (ACPI_CEDT_CFMWS_TARGET_ELEMENT, f)
+#define ACPI_CEDT2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_CEDT_CXIMS, f)
+#define ACPI_CEDT2_TE_OFFSET(f)         (UINT16) ACPI_OFFSET (ACPI_CEDT_CXIMS_TARGET_ELEMENT, f)
 #define ACPI_CPEP0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_CPEP_POLLING,f)
 #define ACPI_CSRT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_CSRT_GROUP,f)
 #define ACPI_CSRT1_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_CSRT_SHARED_INFO,f)
@@ -446,6 +456,7 @@ 
 #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_AEST0EA_FLAG_OFFSET(f,o)    ACPI_FLAG_OFFSET (ACPI_AEST_NODE_INTERRUPT_V2,f,o)
 #define ACPI_AGDI_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_AGDI,f,o)
 #define ACPI_APMTN_FLAG_OFFSET(f,o)     ACPI_FLAG_OFFSET (ACPI_APMT_NODE,f,o)
 #define ACPI_BGRT_FLAG_OFFSET(f,o)      ACPI_FLAG_OFFSET (ACPI_TABLE_BGRT,f,o)
diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h
index 5816a812..71cbc36d 100644
--- a/src/acpica/source/include/actbl1.h
+++ b/src/acpica/source/include/actbl1.h
@@ -822,13 +822,20 @@  typedef struct acpi_cedt_cfmws_target_element
 
 /* 2: CXL XOR Interleave Math Structure */
 
-struct acpi_cedt_cxims {
+typedef struct acpi_cedt_cxims {
     ACPI_CEDT_HEADER        Header;
     UINT16                  Reserved1;
     UINT8                   Hbig;
     UINT8                   NrXormaps;
     UINT64                  XormapList[];
-};
+} ACPI_CEDT_CXIMS;
+
+typedef struct acpi_cedt_cxims_target_element
+{
+    UINT64                   Xormap;
+
+} ACPI_CEDT_CXIMS_TARGET_ELEMENT;
+
 
 /* 3: CXL RCEC Downstream Port Association Structure */
 
@@ -1038,6 +1045,7 @@  typedef struct acpi_dbg2_device
 #define ACPI_DBG2_16550_WITH_GAS    0x0012
 #define ACPI_DBG2_SDM845_7_372MHZ   0x0013
 #define ACPI_DBG2_INTEL_LPSS        0x0014
+#define ACPI_DBG2_RISCV_SBI_CON     0x0015
 
 #define ACPI_DBG2_1394_STANDARD     0x0000
 
@@ -2262,7 +2270,7 @@  typedef struct acpi_hmat_cache
     UINT32                  Reserved1;
     UINT64                  CacheSize;
     UINT32                  CacheAttributes;
-    UINT16                  Reserved2;
+    UINT16                  AddressMode;
     UINT16                  NumberOfSMBIOSHandles;
 
 } ACPI_HMAT_CACHE;
@@ -2275,6 +2283,9 @@  typedef struct acpi_hmat_cache
 #define ACPI_HMAT_WRITE_POLICY          (0x0000F000)
 #define ACPI_HMAT_CACHE_LINE_SIZE       (0xFFFF0000)
 
+#define ACPI_HMAT_CACHE_MODE_UNKNOWN            (0)
+#define ACPI_HMAT_CACHE_MODE_EXTENDED_LINEAR    (1)
+
 /* Values for cache associativity flag */
 
 #define ACPI_HMAT_CA_NONE                     (0)
diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h
index 99076bbc..cc09702b 100644
--- a/src/acpica/source/include/actbl2.h
+++ b/src/acpica/source/include/actbl2.h
@@ -259,7 +259,9 @@  typedef struct acpi_aest_hdr
 #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 */
+#define ACPI_AEST_PCIE_ERROR_NODE           5
+#define ACPI_AEST_PROXY_ERROR_NODE          6
+#define ACPI_AEST_NODE_TYPE_RESERVED        7 /* 7 and above are reserved */
 
 
 /*
@@ -346,6 +348,16 @@  typedef struct acpi_aest_vendor
 
 } ACPI_AEST_VENDOR;
 
+/* 3: Vendor Defined V2 */
+
+typedef struct acpi_aest_vendor_v2
+{
+    UINT64                  AcpiHid;
+    UINT32                  AcpiUid;
+    UINT8                   VendorSpecificData[16];
+
+} ACPI_AEST_VENDOR_V2;
+
 /* 4: Gic Error */
 
 typedef struct acpi_aest_gic
@@ -363,6 +375,22 @@  typedef struct acpi_aest_gic
 #define ACPI_AEST_GIC_ITS                   3
 #define ACPI_AEST_GIC_RESERVED              4   /* 4 and above are reserved */
 
+/* 5: PCIe Error */
+
+typedef struct acpi_aest_pcie
+{
+    UINT32                  IortNodeReference;
+
+} ACPI_AEST_PCIE;
+
+
+/* 6: Proxy Error */
+
+typedef struct acpi_aest_proxy
+{
+    UINT64                  NodeAddress;
+
+} ACPI_AEST_PROXY;
 
 /* Node Interface Structure */
 
@@ -380,11 +408,67 @@  typedef struct acpi_aest_node_interface
 
 } ACPI_AEST_NODE_INTERFACE;
 
+/* Node Interface Structure V2*/
+
+typedef struct acpi_aest_node_interface_header
+{
+    UINT8                   Type;
+    UINT8                   GroupFormat;
+    UINT8                   Reserved[2];
+    UINT32                  Flags;
+    UINT64                  Address;
+    UINT32                  ErrorRecordIndex;
+    UINT32                  ErrorRecordCount;
+
+} ACPI_AEST_NODE_INTERFACE_HEADER;
+
+#define ACPI_AEST_NODE_GROUP_FORMAT_4K             0
+#define ACPI_AEST_NODE_GROUP_FORMAT_16K            1
+#define ACPI_AEST_NODE_GROUP_FORMAT_64K            2
+
+typedef struct acpi_aest_node_interface_common
+{
+    UINT32                             ErrorNodeDevice;
+    UINT32                             ProcessorAffinity;
+    UINT64                             ErrorGroupRegisterBase;
+    UINT64                             FaultInjectRegisterBase;
+    UINT64                             InterruptConfigRegisterBase;
+
+} ACPI_AEST_NODE_INTERFACE_COMMON;
+
+typedef struct acpi_aest_node_interface_4k
+{
+    UINT64                             ErrorRecordImplemented;
+    UINT64                             ErrorStatusReporting;
+    UINT64                             AddressingMode;
+    ACPI_AEST_NODE_INTERFACE_COMMON    Common;
+
+} ACPI_AEST_NODE_INTERFACE_4K;
+
+typedef struct acpi_aest_node_interface_16k
+{
+    UINT64                             ErrorRecordImplemented[4];
+    UINT64                             ErrorStatusReporting[4];
+    UINT64                             AddressingMode[4];
+    ACPI_AEST_NODE_INTERFACE_COMMON    Common;
+
+} ACPI_AEST_NODE_INTERFACE_16K;
+
+typedef struct acpi_aest_node_interface_64k
+{
+    INT64                              ErrorRecordImplemented[14];
+    UINT64                             ErrorStatusReporting[14];
+    UINT64                             AddressingMode[14];
+    ACPI_AEST_NODE_INTERFACE_COMMON    Common;
+
+} ACPI_AEST_NODE_INTERFACE_64K;
+
 /* 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 */
+#define ACPI_AEST_NODE_SYSTEM_REGISTER                    0
+#define ACPI_AEST_NODE_MEMORY_MAPPED                      1
+#define ACPI_AEST_NODE_SINGLE_RECORD_MEMORY_MAPPED        2
+#define ACPI_AEST_XFACE_RESERVED                          3   /* 2 and above are reserved */
 
 /* Node Interrupt Structure */
 
@@ -399,6 +483,18 @@  typedef struct acpi_aest_node_interrupt
 
 } ACPI_AEST_NODE_INTERRUPT;
 
+/* Node Interrupt Structure V2 */
+
+typedef struct acpi_aest_node_interrupt_v2
+{
+    UINT8                   Type;
+    UINT8                   Reserved[2];
+    UINT8                   Flags;
+    UINT32                  Gsiv;
+    UINT8                   Reserved1[4];
+
+} ACPI_AEST_NODE_INTERRUPT_V2;
+
 /* Values for Type field above */
 
 #define ACPI_AEST_NODE_FAULT_HANDLING       0
@@ -548,7 +644,7 @@  typedef struct acpi_table_ccel
  * IORT - IO Remapping Table
  *
  * Conforms to "IO Remapping Table System Software on ARM Platforms",
- * Document number: ARM DEN 0049E.e, Sep 2022
+ * Document number: ARM DEN 0049E.f, Apr 2024
  *
  ******************************************************************************/
 
@@ -631,6 +727,7 @@  typedef struct acpi_iort_memory_access
 
 #define ACPI_IORT_MF_COHERENCY          (1)
 #define ACPI_IORT_MF_ATTRIBUTES         (1<<1)
+#define ACPI_IORT_MF_CANWBS             (1<<2)
 
 
 /*
@@ -1835,7 +1932,7 @@  typedef struct acpi_mpam_msc_node
     UINT32                     MaxNrdyUsec;
     UINT64                     HardwareIdLinkedDevice;
     UINT32                     InstanceIdLinkedDevice;
-    UINT32                     NumResouceNodes;
+    UINT32                     NumResourceNodes;
 } ACPI_MPAM_MSC_NODE;
 
 typedef struct acpi_table_mpam
diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h
index 477d70af..31619792 100644
--- a/src/acpica/source/include/actbl3.h
+++ b/src/acpica/source/include/actbl3.h
@@ -243,10 +243,10 @@  typedef struct acpi_table_slit
 /*******************************************************************************
  *
  * SPCR - Serial Port Console Redirection table
- *        Version 2
+ *        Version 4
  *
  * Conforms to "Serial Port Console Redirection Table",
- * Version 1.03, August 10, 2015
+ * Version 1.10, Jan 5, 2023
  *
  ******************************************************************************/
 
@@ -264,7 +264,7 @@  typedef struct acpi_table_spcr
     UINT8                   StopBits;
     UINT8                   FlowControl;
     UINT8                   TerminalType;
-    UINT8                   Reserved1;
+    UINT8                   Language;
     UINT16                  PciDeviceId;
     UINT16                  PciVendorId;
     UINT8                   PciBus;
@@ -272,7 +272,11 @@  typedef struct acpi_table_spcr
     UINT8                   PciFunction;
     UINT32                  PciFlags;
     UINT8                   PciSegment;
-    UINT32                  Reserved2;
+    UINT32                  UartClkFreq;
+    UINT32                  PreciseBaudrate;
+    UINT16                  NameSpaceStringLength;
+    UINT16                  NameSpaceStringOffset;
+    char                    NameSpaceString[];
 
 } ACPI_TABLE_SPCR;
 
diff --git a/src/acpica/source/include/actypes.h b/src/acpica/source/include/actypes.h
index 695dbb14..5e1012d8 100644
--- a/src/acpica/source/include/actypes.h
+++ b/src/acpica/source/include/actypes.h
@@ -1561,6 +1561,7 @@  typedef enum
 #define ACPI_OSI_WIN_10_19H1            0x14
 #define ACPI_OSI_WIN_10_20H1            0x15
 #define ACPI_OSI_WIN_11                 0x16
+#define ACPI_OSI_WIN_11_22H2            0x17
 
 
 /* Definitions of getopt */
diff --git a/src/acpica/source/include/platform/acenv.h b/src/acpica/source/include/platform/acenv.h
index e7c8678d..cc198c01 100644
--- a/src/acpica/source/include/platform/acenv.h
+++ b/src/acpica/source/include/platform/acenv.h
@@ -403,6 +403,12 @@ 
 #define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Pending) Pending = 0
 #endif
 
+/* NULL/invalid value to use for destroyed or not-yet-created semaphores. */
+
+#ifndef ACPI_SEMAPHORE_NULL
+#define ACPI_SEMAPHORE_NULL NULL
+#endif
+
 /* Flush CPU cache - used when going to sleep. Wbinvd or similar. */
 
 #ifndef ACPI_FLUSH_CPU_CACHE