[PATCH 1/2] ACPICA: Update to version 20240827

Colin Ian King colin.i.king at gmail.com
Thu Aug 29 16:09:07 UTC 2024


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 at 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
-- 
2.39.2




More information about the fwts-devel mailing list