git: cfd1ed46817c - main - Merge ACPICA 20210331.

Jung-uk Kim jkim at FreeBSD.org
Thu Apr 1 23:37:30 UTC 2021


The branch main has been updated by jkim:

URL: https://cgit.FreeBSD.org/src/commit/?id=cfd1ed46817c680fa7822bc523b054ff644055dc

commit cfd1ed46817c680fa7822bc523b054ff644055dc
Author:     Jung-uk Kim <jkim at FreeBSD.org>
AuthorDate: 2021-04-01 22:01:03 +0000
Commit:     Jung-uk Kim <jkim at FreeBSD.org>
CommitDate: 2021-04-01 23:36:59 +0000

    Merge ACPICA 20210331.
    
    (cherry picked from commit 1e02e5b0ba8634758c128dcb43c67342c7219cd4)
---
 sys/contrib/dev/acpica/changes.txt                 |  40 ++
 sys/contrib/dev/acpica/common/acfileio.c           |   3 +
 sys/contrib/dev/acpica/common/ahids.c              |   2 +
 sys/contrib/dev/acpica/common/ahpredef.c           |   4 +
 sys/contrib/dev/acpica/common/ahtable.c            |   3 +
 sys/contrib/dev/acpica/common/ahuuids.c            |   1 +
 sys/contrib/dev/acpica/common/cmfsize.c            |   2 +-
 sys/contrib/dev/acpica/common/dmrestag.c           |  14 +-
 sys/contrib/dev/acpica/common/dmtable.c            | 103 ++++-
 sys/contrib/dev/acpica/common/dmtbdump1.c          |  76 ++++
 sys/contrib/dev/acpica/common/dmtbdump2.c          | 468 ++++++++++++++-------
 sys/contrib/dev/acpica/common/dmtbdump3.c          | 100 +++++
 sys/contrib/dev/acpica/common/dmtbinfo1.c          |  34 +-
 sys/contrib/dev/acpica/common/dmtbinfo2.c          | 247 +++++++++--
 sys/contrib/dev/acpica/common/dmtbinfo3.c          |  72 ++++
 sys/contrib/dev/acpica/compiler/aslallocate.c      |   2 +-
 sys/contrib/dev/acpica/compiler/aslascii.c         |   4 +-
 sys/contrib/dev/acpica/compiler/aslcompiler.h      |   4 +
 sys/contrib/dev/acpica/compiler/aslcompiler.l      |   1 +
 sys/contrib/dev/acpica/compiler/aslerror.c         |   6 +-
 sys/contrib/dev/acpica/compiler/aslhelpers.y       |   5 +
 sys/contrib/dev/acpica/compiler/aslmap.c           |   1 +
 sys/contrib/dev/acpica/compiler/aslmessages.c      |   3 +-
 sys/contrib/dev/acpica/compiler/aslmessages.h      |   1 +
 sys/contrib/dev/acpica/compiler/aslnamesp.c        |   3 +-
 sys/contrib/dev/acpica/compiler/aslopcodes.c       |   2 +-
 sys/contrib/dev/acpica/compiler/asloperands.c      |   2 +-
 sys/contrib/dev/acpica/compiler/aslparser.y        |   2 +-
 sys/contrib/dev/acpica/compiler/aslprintf.c        |   2 +-
 sys/contrib/dev/acpica/compiler/aslresource.c      |   5 +
 sys/contrib/dev/acpica/compiler/aslresources.y     |  20 +-
 sys/contrib/dev/acpica/compiler/aslrestype2s.c     | 136 ++++++
 sys/contrib/dev/acpica/compiler/asltokens.y        |   1 +
 sys/contrib/dev/acpica/compiler/asltransform.c     |   5 +
 sys/contrib/dev/acpica/compiler/asltypes.y         |   2 +
 sys/contrib/dev/acpica/compiler/dtcompiler.h       |  15 +
 sys/contrib/dev/acpica/compiler/dttable1.c         | 143 ++++++-
 sys/contrib/dev/acpica/compiler/dttable2.c         | 454 +++++++++++++++++---
 sys/contrib/dev/acpica/compiler/dttemplate.h       | 343 +++++++++------
 sys/contrib/dev/acpica/compiler/dtutils.c          |   5 +
 .../dev/acpica/components/disassembler/dmresrcl2.c |  90 +++-
 .../dev/acpica/components/events/evhandler.c       |   7 +
 .../dev/acpica/components/events/evregion.c        |  75 ++--
 .../dev/acpica/components/events/evxfregn.c        |   1 +
 .../dev/acpica/components/namespace/nsaccess.c     |   3 +-
 .../dev/acpica/components/namespace/nsrepair2.c    |  18 +-
 .../dev/acpica/components/resources/rscalc.c       |   4 +-
 .../dev/acpica/components/resources/rsdump.c       |  10 +
 .../dev/acpica/components/resources/rsdumpinfo.c   |  15 +
 .../dev/acpica/components/resources/rsinfo.c       |   6 +-
 .../dev/acpica/components/resources/rslist.c       |  10 +-
 .../dev/acpica/components/resources/rsmisc.c       |  18 +
 .../dev/acpica/components/resources/rsserial.c     |  70 +++
 .../dev/acpica/components/utilities/utresdecode.c  |  11 +-
 .../dev/acpica/components/utilities/utresrc.c      |   1 +
 sys/contrib/dev/acpica/include/acdisasm.h          |  44 +-
 sys/contrib/dev/acpica/include/acobject.h          |   1 +
 sys/contrib/dev/acpica/include/acoutput.h          |   2 +-
 sys/contrib/dev/acpica/include/acpixf.h            |   2 +-
 sys/contrib/dev/acpica/include/acpredef.h          |  15 +
 sys/contrib/dev/acpica/include/acresrc.h           |   4 +
 sys/contrib/dev/acpica/include/acrestyp.h          |  12 +-
 sys/contrib/dev/acpica/include/actbinfo.h          |  26 +-
 sys/contrib/dev/acpica/include/actbl1.h            |  63 ++-
 sys/contrib/dev/acpica/include/actbl2.h            | 280 ++++++++++--
 sys/contrib/dev/acpica/include/actbl3.h            |  84 +++-
 sys/contrib/dev/acpica/include/acutils.h           |   1 +
 sys/contrib/dev/acpica/include/acuuid.h            |   1 +
 sys/contrib/dev/acpica/include/amlresrc.h          |  25 +-
 sys/contrib/dev/acpica/include/platform/acgcc.h    |   2 +-
 70 files changed, 2757 insertions(+), 480 deletions(-)

diff --git a/sys/contrib/dev/acpica/changes.txt b/sys/contrib/dev/acpica/changes.txt
index e58f906382b5..0b71b266a6ba 100644
--- a/sys/contrib/dev/acpica/changes.txt
+++ b/sys/contrib/dev/acpica/changes.txt
@@ -1,3 +1,43 @@
+----------------------------------------
+31 March 2021. Summary of changes for version 20210331:
+
+This release is available at https://acpica.org/downloads, and includes 
+all ACPI 6.4 support
+
+1) ACPICA kernel-resident subsystem:
+ACPI 6.4: iASL: deprecate DDBHandleObj keyword
+Always create namespace nodes using AcpiNsCreateNode(). ACPICA is 
+allocating an object using kmalloc(), but then frees it
+using kmem_cache_free(<"Acpi-Namespace" kmem_cache>). This is wrong.
+Fixed a race condition in generic serial bus operation region handler. 
+Fixed by Hans de Goede.
+
+2) iASL Compiler/Disassembler and ACPICA tools:
+
+ACPI 6.4: NFIT: add Location Cookie field
+ACPI 6.4: HMAT: add new fields/flags
+ACPI 6.4: Add new flags in SRAT
+ACPI 6.4: add SDEV secure access components
+ACPI 6.4: add Csi2Bus resource template
+ACPI 6.4: add support for PHAT table
+ACPI 6.4: add support for PMTT table
+Add disassembly support for the IVRS table. Compilation of the table is 
+not yet complete.
+Fixed a potential infinite loop due to type mismatch. The for-loop is 
+using a UINT8 counter and comparing the upper
+limit against a UINT32 AslGbl_ExpectedMessagesIndex maximum. In
+the case where AslGbl_ExpectedMessagesIndex is > 255 the counter i
+will wrap around to zero and the loop will never exit. I suspect
+the AslGbl_ExpectedMessagesIndex is never that high, but fixing
+this does future proof the code and cleans up static analysis
+warnings.Colin King.
+iASL/TableCompiler: update it with IORT table E.b revision changes. From 
+shamiali2008.
+iASL/TableCompiler: Add compilation support for the VIOT table. Signed-
+off-by: Jean-Philippe Brucker.
+iASL/TableCompiler: Add compilation support for CEDT table. Also, update 
+the CEDT template.
+
 ----------------------------------------
 05 January 2021. Summary of changes for version 20210105:
 
diff --git a/sys/contrib/dev/acpica/common/acfileio.c b/sys/contrib/dev/acpica/common/acfileio.c
index 5124e2d7f1ed..b93b14d3e654 100644
--- a/sys/contrib/dev/acpica/common/acfileio.c
+++ b/sys/contrib/dev/acpica/common/acfileio.c
@@ -559,6 +559,9 @@ AcValidateTableHeader (
 
     if (Actual < sizeof (ACPI_TABLE_HEADER))
     {
+        fprintf (stderr,
+            "Could not read entire table header: Actual %u, Requested %u\n",
+            (UINT32) Actual, (UINT32) sizeof (ACPI_TABLE_HEADER));
         return (AE_ERROR);
     }
 
diff --git a/sys/contrib/dev/acpica/common/ahids.c b/sys/contrib/dev/acpica/common/ahids.c
index 6249fa40369a..35d17513a57b 100644
--- a/sys/contrib/dev/acpica/common/ahids.c
+++ b/sys/contrib/dev/acpica/common/ahids.c
@@ -188,6 +188,8 @@ const AH_DEVICE_ID  AslDeviceIds[] =
     {"ACPI0012",    "NVDIMM Root Device"},
     {"ACPI0013",    "Generic Event Device"},
     {"ACPI0014",    "Wireless Power Calibration Device"},
+    {"ACPI0015",    "USB4 host interface device"},
+    {"ACPI0016",    "Compute Express Link Host Bridge"},
     {"ADMA0F28",    "Intel Audio DMA"},
     {"AMCR0F28",    "Intel Audio Machine Driver"},
     {"ATK4001",     "Asus Radio Control Button"},
diff --git a/sys/contrib/dev/acpica/common/ahpredef.c b/sys/contrib/dev/acpica/common/ahpredef.c
index 5f407bcbf2f4..89f8a784efd3 100644
--- a/sys/contrib/dev/acpica/common/ahpredef.c
+++ b/sys/contrib/dev/acpica/common/ahpredef.c
@@ -200,12 +200,16 @@ const AH_PREDEFINED_NAME    AslPredefinedInfo[] =
     AH_PREDEF ("_BMC",    "Battery Maintenance Control", "Sets battery maintenance and control features"),
     AH_PREDEF ("_BMD",    "Battery Maintenance Data", "Returns battery maintenance, control, and state data"),
     AH_PREDEF ("_BMS",    "Battery Measurement Sampling Time", "Sets the battery measurement sampling time"),
+    AH_PREDEF ("_BPC",    "Battery Power Characteristics", "Returns static values used to configure power threshold support in the platform firmware"),
+    AH_PREDEF ("_BPS",    "Battery Power State", "Returns the power delivery capabilities of the battery at the present time"),
+    AH_PREDEF ("_BPT",    "Battery Power Threshold", "Set a relative battery peak power capability change threshold"),
     AH_PREDEF ("_BQC",    "Brightness Query Current", "Returns the current display brightness level"),
     AH_PREDEF ("_BST",    "Battery Status", "Returns a Control Method Battery status block"),
     AH_PREDEF ("_BTH",    "Battery Throttle Limit", "Thermal limit for charging and discharging"),
     AH_PREDEF ("_BTM",    "Battery Time", "Returns the battery runtime"),
     AH_PREDEF ("_BTP",    "Battery Trip Point", "Sets a Control Method Battery trip point"),
     AH_PREDEF ("_CBA",    "Configuration Base Address", "Sets the base address for a PCI Express host bridge"),
+    AH_PREDEF ("_CBR",    "CXL Host Bridge Register Info", "Get the memory location of CXL Host Bridge Registers"),
     AH_PREDEF ("_CCA",    "Cache Coherency Attribute", "Returns a device's support level for cache coherency"),
     AH_PREDEF ("_CDM",    "Clock Domain", "Returns a logical processor's clock domain identifier"),
     AH_PREDEF ("_CID",    "Compatible ID", "Returns a device's Plug and Play Compatible ID list"),
diff --git a/sys/contrib/dev/acpica/common/ahtable.c b/sys/contrib/dev/acpica/common/ahtable.c
index cf369e4c0695..3d3eee5b41b4 100644
--- a/sys/contrib/dev/acpica/common/ahtable.c
+++ b/sys/contrib/dev/acpica/common/ahtable.c
@@ -203,6 +203,7 @@ const AH_TABLE      AcpiGbl_SupportedTables[] =
     {ACPI_SIG_BERT, "Boot Error Record Table"},
     {ACPI_SIG_BGRT, "Boot Graphics Resource Table"},
     {ACPI_SIG_BOOT, "Simple Boot Flag Table"},
+    {ACPI_SIG_CEDT, "CXL Early Discovery Table"},
     {ACPI_SIG_CPEP, "Corrected Platform Error Polling table"},
     {ACPI_SIG_CSRT, "Core System Resource Table"},
     {ACPI_SIG_DBG2, "Debug Port table type 2"},
@@ -231,6 +232,7 @@ const AH_TABLE      AcpiGbl_SupportedTables[] =
     {ACPI_SIG_MSDM, "Microsoft Data Management table"},
     {ACPI_SIG_NFIT, "NVDIMM Firmware Interface Table"},
     {ACPI_SIG_PCCT, "Platform Communications Channel Table"},
+    {ACPI_SIG_PHAT, "Platform Health Assessment Table"},
     {ACPI_SIG_PDTT, "Platform Debug Trigger Table"},
     {ACPI_SIG_PMTT, "Platform Memory Topology Table"},
     {ACPI_SIG_PPTT, "Processor Properties Topology Table"},
@@ -251,6 +253,7 @@ const AH_TABLE      AcpiGbl_SupportedTables[] =
     {ACPI_SIG_TCPA, "Trusted Computing Platform Alliance table"},
     {ACPI_SIG_TPM2, "Trusted Platform Module hardware interface table"},
     {ACPI_SIG_UEFI, "UEFI Boot Optimization Table"},
+    {ACPI_SIG_VIOT, "Virtual I/O Translation Table"},
     {ACPI_SIG_WAET, "Windows ACPI Emulated Devices Table"},
     {ACPI_SIG_WDAT, "Watchdog Action Table"},
     {ACPI_SIG_WDDT, "Watchdog Description Table"},
diff --git a/sys/contrib/dev/acpica/common/ahuuids.c b/sys/contrib/dev/acpica/common/ahuuids.c
index 13c764d298a8..73585e81c4da 100644
--- a/sys/contrib/dev/acpica/common/ahuuids.c
+++ b/sys/contrib/dev/acpica/common/ahuuids.c
@@ -208,6 +208,7 @@ const AH_UUID  Gbl_AcpiUuids[] =
     {"Device Graphs for _DSD",      UUID_DEVICE_GRAPHS},
     {"Hierarchical Data Extension", UUID_HIERARCHICAL_DATA_EXTENSION},
     {"ARM Coresight Graph",         UUID_CORESIGHT_GRAPH},
+    {"USB4 Capabilities",           UUID_USB4_CAPABILITIES},
     {NULL, NULL}
 };
 
diff --git a/sys/contrib/dev/acpica/common/cmfsize.c b/sys/contrib/dev/acpica/common/cmfsize.c
index 7026c17b43bc..eb419a94f9af 100644
--- a/sys/contrib/dev/acpica/common/cmfsize.c
+++ b/sys/contrib/dev/acpica/common/cmfsize.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- * Module Name: cfsize - Common get file size function
+ * Module Name: cmfsize - Common get file size function
  *
  *****************************************************************************/
 
diff --git a/sys/contrib/dev/acpica/common/dmrestag.c b/sys/contrib/dev/acpica/common/dmrestag.c
index 15ddb8f2da44..a430a6d7a1c7 100644
--- a/sys/contrib/dev/acpica/common/dmrestag.c
+++ b/sys/contrib/dev/acpica/common/dmrestag.c
@@ -384,6 +384,14 @@ static const ACPI_RESOURCE_TAG      AcpiDmGpioIoTags[] =
 
 /* Subtype tables for SerialBus descriptors */
 
+static const ACPI_RESOURCE_TAG      AcpiDmCsi2SerialBusTags[] =    /* ACPI 6.4 */
+{
+    {( 6 * 8) + 0,  ACPI_RESTAG_SLAVEMODE},
+    {( 7 * 8) + 0,  ACPI_RESTAG_PHYTYPE},
+    {( 7 * 8) + 2,  ACPI_RESTAG_LOCALPORT},
+    {0,             NULL}
+};
+
 static const ACPI_RESOURCE_TAG      AcpiDmI2cSerialBusTags[] =
 {
     {( 6 * 8) + 0,  ACPI_RESTAG_SLAVEMODE},
@@ -424,6 +432,7 @@ static const ACPI_RESOURCE_TAG      AcpiDmUartSerialBusTags[] =
     {0,             NULL}
 };
 
+
 /* Subtype tables for PinFunction descriptor */
 
 static const ACPI_RESOURCE_TAG      AcpiDmPinFunctionTags[] =
@@ -539,7 +548,8 @@ static const ACPI_RESOURCE_TAG      *AcpiGbl_SerialResourceTags[] =
     NULL,                           /* 0x00 Reserved */
     AcpiDmI2cSerialBusTags,         /* 0x01 I2C SerialBus */
     AcpiDmSpiSerialBusTags,         /* 0x02 SPI SerialBus */
-    AcpiDmUartSerialBusTags         /* 0x03 UART SerialBus */
+    AcpiDmUartSerialBusTags,        /* 0x03 UART SerialBus */
+    AcpiDmCsi2SerialBusTags         /* 0x04 CSI2 SerialBus */
 };
 
 /*
@@ -987,7 +997,7 @@ AcpiDmGetResourceTag (
 
     case ACPI_RESOURCE_NAME_SERIAL_BUS:
 
-        /* SerialBus has 3 subtypes: I2C, SPI, and UART */
+        /* SerialBus has 4 subtypes: I2C, SPI, UART, and CSI2 */
 
         if ((Resource->CommonSerialBus.Type == 0) ||
             (Resource->CommonSerialBus.Type > AML_RESOURCE_MAX_SERIALBUSTYPE))
diff --git a/sys/contrib/dev/acpica/common/dmtable.c b/sys/contrib/dev/acpica/common/dmtable.c
index 565a76071aad..6f34e82c1b62 100644
--- a/sys/contrib/dev/acpica/common/dmtable.c
+++ b/sys/contrib/dev/acpica/common/dmtable.c
@@ -184,6 +184,12 @@ static const char           *AcpiDmAsfSubnames[] =
     "Unknown Subtable Type"         /* Reserved */
 };
 
+static const char           *AcpiDmCedtSubnames[] =
+{
+    "CXL Host Bridge Structure",
+    "Unknown Subtable Type"         /* Reserved */
+};
+
 static const char           *AcpiDmDmarSubnames[] =
 {
     "Hardware Unit Definition",
@@ -367,15 +373,24 @@ static const char           *AcpiDmPcctSubnames[] =
     "HW-Reduced Comm Subspace Type2",   /* ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 */
     "Extended PCC Master Subspace",     /* ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE */
     "Extended PCC Slave Subspace",      /* ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE */
+    "HW Registers based Comm Subspace", /* ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE */
     "Unknown Subtable Type"             /* Reserved */
 };
 
+static const char           *AcpiDmPhatSubnames[] =
+{
+    "Firmware Version Data",        /* ACPI_PHAT_TYPE_FW_VERSION_DATA */
+    "Firmware Health Data",         /* ACPI_PHAT_TYPE_FW_HEALTH_DATA */
+    "Unknown Subtable Type"         /* Reserved */
+};
+
 static const char           *AcpiDmPmttSubnames[] =
 {
     "Socket",                       /* ACPI_PMTT_TYPE_SOCKET */
     "Memory Controller",            /* ACPI_PMTT_TYPE_CONTROLLER */
     "Physical Component (DIMM)",    /* ACPI_PMTT_TYPE_DIMM */
-    "Unknown Subtable Type"         /* Reserved */
+    "Unknown Subtable Type",        /* Reserved */
+    "Vendor Specific"               /* ACPI_PMTT_TYPE_VENDOR */
 };
 
 static const char           *AcpiDmPpttSubnames[] =
@@ -434,6 +449,16 @@ static const char           *AcpiDmLpitSubnames[] =
     "Unknown Subtable Type"         /* Reserved */
 };
 
+static const char           *AcpiDmViotSubnames[] =
+{
+    "Unknown Subtable Type",        /* 0 -Reserved */
+    "PCI Range",
+    "MMIO Endpoint",
+    "VirtIO-PCI IOMMU",
+    "VirtIO-MMIO IOMMU",
+    "Unknown Subtable Type"         /* Reserved */
+};
+
 #define ACPI_FADT_PM_RESERVED       9
 
 static const char           *AcpiDmFadtProfiles[] =
@@ -474,8 +499,8 @@ static const char           *AcpiDmGasAccessWidth[] =
  * handler. This table must be NULL terminated. RSDP and FACS are
  * special-cased elsewhere.
  *
- * Note: Any tables added here should be duplicated within AcpiSupportedTables
- * in the file common/ahtable.c
+ * Note: Any tables added here should be duplicated within
+ * AcpiGbl_SupportedTables in the file common/ahtable.c
  *
  ******************************************************************************/
 
@@ -485,6 +510,7 @@ const ACPI_DMTABLE_DATA     AcpiDmTableData[] =
     {ACPI_SIG_BERT, AcpiDmTableInfoBert,    NULL,           NULL,           TemplateBert},
     {ACPI_SIG_BGRT, AcpiDmTableInfoBgrt,    NULL,           NULL,           TemplateBgrt},
     {ACPI_SIG_BOOT, AcpiDmTableInfoBoot,    NULL,           NULL,           TemplateBoot},
+    {ACPI_SIG_CEDT, NULL,                   AcpiDmDumpCedt, DtCompileCedt,  TemplateCedt},
     {ACPI_SIG_CPEP, NULL,                   AcpiDmDumpCpep, DtCompileCpep,  TemplateCpep},
     {ACPI_SIG_CSRT, NULL,                   AcpiDmDumpCsrt, DtCompileCsrt,  TemplateCsrt},
     {ACPI_SIG_DBG2, AcpiDmTableInfoDbg2,    AcpiDmDumpDbg2, DtCompileDbg2,  TemplateDbg2},
@@ -512,6 +538,7 @@ const ACPI_DMTABLE_DATA     AcpiDmTableData[] =
     {ACPI_SIG_NFIT, AcpiDmTableInfoNfit,    AcpiDmDumpNfit, DtCompileNfit,  TemplateNfit},
     {ACPI_SIG_PCCT, AcpiDmTableInfoPcct,    AcpiDmDumpPcct, DtCompilePcct,  TemplatePcct},
     {ACPI_SIG_PDTT, AcpiDmTableInfoPdtt,    AcpiDmDumpPdtt, DtCompilePdtt,  TemplatePdtt},
+    {ACPI_SIG_PHAT, NULL,                   AcpiDmDumpPhat, DtCompilePhat,  TemplatePhat},
     {ACPI_SIG_PMTT, NULL,                   AcpiDmDumpPmtt, DtCompilePmtt,  TemplatePmtt},
     {ACPI_SIG_PPTT, NULL,                   AcpiDmDumpPptt, DtCompilePptt,  TemplatePptt},
     {ACPI_SIG_RASF, AcpiDmTableInfoRasf,    NULL,           NULL,           TemplateRasf},
@@ -529,6 +556,7 @@ const ACPI_DMTABLE_DATA     AcpiDmTableData[] =
     {ACPI_SIG_TCPA, NULL,                   AcpiDmDumpTcpa, DtCompileTcpa,  TemplateTcpa},
     {ACPI_SIG_TPM2, AcpiDmTableInfoTpm2,    AcpiDmDumpTpm2, DtCompileTpm2,  TemplateTpm2},
     {ACPI_SIG_UEFI, AcpiDmTableInfoUefi,    NULL,           DtCompileUefi,  TemplateUefi},
+    {ACPI_SIG_VIOT, AcpiDmTableInfoViot,    AcpiDmDumpViot, DtCompileViot,  TemplateViot},
     {ACPI_SIG_WAET, AcpiDmTableInfoWaet,    NULL,           NULL,           TemplateWaet},
     {ACPI_SIG_WDAT, NULL,                   AcpiDmDumpWdat, DtCompileWdat,  TemplateWdat},
     {ACPI_SIG_WDDT, AcpiDmTableInfoWddt,    NULL,           NULL,           TemplateWddt},
@@ -936,6 +964,7 @@ AcpiDmDumpTable (
         case ACPI_DMT_CHKSUM:
         case ACPI_DMT_SPACEID:
         case ACPI_DMT_ACCWIDTH:
+        case ACPI_DMT_CEDT:
         case ACPI_DMT_IVRS:
         case ACPI_DMT_GTDT:
         case ACPI_DMT_MADT:
@@ -952,6 +981,7 @@ AcpiDmDumpTable (
         case ACPI_DMT_ERSTACT:
         case ACPI_DMT_ERSTINST:
         case ACPI_DMT_DMAR_SCOPE:
+        case ACPI_DMT_VIOT:
 
             ByteLength = 1;
             break;
@@ -961,6 +991,7 @@ AcpiDmDumpTable (
         case ACPI_DMT_HEST:
         case ACPI_DMT_HMAT:
         case ACPI_DMT_NFIT:
+        case ACPI_DMT_PHAT:
 
             ByteLength = 2;
             break;
@@ -1030,6 +1061,17 @@ AcpiDmDumpTable (
             ByteLength = SubtableLength;
             break;
 
+        case ACPI_DMT_PMTT_VENDOR:
+            /*
+             * Calculate the length of the vendor data for the PMTT table:
+             * Length = (Current Subtable ptr + Subtable length) -
+             *          Start of the vendor data (Target)
+             */
+            ByteLength = ((ACPI_CAST_PTR (char, Table) +
+                            (ACPI_CAST_PTR (ACPI_PMTT_HEADER, Table)->Length)) -
+                            ACPI_CAST_PTR (char, Target));
+            break;
+
         case ACPI_DMT_STRING:
 
             ByteLength = strlen (ACPI_CAST_PTR (char, Target)) + 1;
@@ -1346,6 +1388,20 @@ AcpiDmDumpTable (
             AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmAsfSubnames[Temp16]);
             break;
 
+        case ACPI_DMT_CEDT:
+
+            /* CEDT subtable types */
+
+            Temp8 = *Target;
+            if (Temp8 > ACPI_CEDT_TYPE_RESERVED)
+            {
+                Temp8 = ACPI_CEDT_TYPE_RESERVED;
+            }
+
+            AcpiOsPrintf (UINT8_FORMAT, *Target,
+                AcpiDmCedtSubnames[Temp8]);
+            break;
+
         case ACPI_DMT_DMAR:
 
             /* DMAR subtable types */
@@ -1559,16 +1615,33 @@ AcpiDmDumpTable (
                 AcpiDmPcctSubnames[Temp8]);
             break;
 
+        case ACPI_DMT_PHAT:
+
+            /* PMTT subtable types */
+
+            Temp16 = *Target;
+            if (Temp16 > ACPI_PHAT_TYPE_RESERVED)
+            {
+                Temp16 = ACPI_PHAT_TYPE_RESERVED;
+            }
+
+            AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16(Target),
+                AcpiDmPhatSubnames[Temp16]);
+            break;
+
         case ACPI_DMT_PMTT:
 
             /* PMTT subtable types */
 
             Temp8 = *Target;
-            if (Temp8 > ACPI_PMTT_TYPE_RESERVED)
+            if (Temp8 == ACPI_PMTT_TYPE_VENDOR)
+            {
+                Temp8 = ACPI_PMTT_TYPE_RESERVED + 1;
+            }
+            else if (Temp8 > ACPI_PMTT_TYPE_RESERVED)
             {
                 Temp8 = ACPI_PMTT_TYPE_RESERVED;
             }
-
             AcpiOsPrintf (UINT8_FORMAT, *Target,
                 AcpiDmPmttSubnames[Temp8]);
             break;
@@ -1599,6 +1672,8 @@ AcpiDmDumpTable (
             break;
 
         case ACPI_DMT_RAW_BUFFER:
+        case ACPI_DMT_BUFFER:
+        case ACPI_DMT_PMTT_VENDOR:
 
             if (ByteLength == 0)
             {
@@ -1606,8 +1681,7 @@ AcpiDmDumpTable (
                 break;
             }
 
-            AcpiDmDumpBuffer (Table, CurrentOffset, ByteLength,
-                CurrentOffset, NULL);
+            AcpiDmDumpBuffer (Target, 0, ByteLength, 0, NULL);
             break;
 
         case ACPI_DMT_SDEV:
@@ -1676,6 +1750,7 @@ AcpiDmDumpTable (
             {
             case ACPI_IVRS_TYPE_HARDWARE1:
             case ACPI_IVRS_TYPE_HARDWARE2:
+            case ACPI_IVRS_TYPE_HARDWARE3:
 
                 Name = AcpiDmIvrsSubnames[0];
                 break;
@@ -1710,6 +1785,20 @@ AcpiDmDumpTable (
                 AcpiDmLpitSubnames[Temp32]);
             break;
 
+        case ACPI_DMT_VIOT:
+
+            /* VIOT subtable types */
+
+            Temp8 = *Target;
+            if (Temp8 > ACPI_VIOT_RESERVED)
+            {
+                Temp8 = ACPI_VIOT_RESERVED;
+            }
+
+            AcpiOsPrintf (UINT8_FORMAT, *Target,
+                AcpiDmViotSubnames[Temp8]);
+            break;
+
         case ACPI_DMT_EXIT:
 
             return (AE_OK);
diff --git a/sys/contrib/dev/acpica/common/dmtbdump1.c b/sys/contrib/dev/acpica/common/dmtbdump1.c
index b9b30dc2f4a5..d134c63f856a 100644
--- a/sys/contrib/dev/acpica/common/dmtbdump1.c
+++ b/sys/contrib/dev/acpica/common/dmtbdump1.c
@@ -329,6 +329,82 @@ AcpiDmDumpAsf (
     }
 }
 
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiDmDumpCedt
+ *
+ * PARAMETERS:  Table               - A CEDT table
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Format the contents of a CEDT. This table type consists
+ *              of an open-ended number of subtables.
+ *
+ ******************************************************************************/
+
+void
+AcpiDmDumpCedt (
+    ACPI_TABLE_HEADER       *Table)
+{
+    ACPI_STATUS             Status;
+    ACPI_CEDT_HEADER        *Subtable;
+    UINT32                  Length = Table->Length;
+    UINT32                  Offset = sizeof (ACPI_TABLE_CEDT);
+    ACPI_DMTABLE_INFO       *InfoTable;
+
+
+    /* There is no main table (other than the standard ACPI header) */
+
+    Subtable = ACPI_ADD_PTR (ACPI_CEDT_HEADER, Table, Offset);
+    while (Offset < Table->Length)
+    {
+        /* Common subtable header */
+
+        AcpiOsPrintf ("\n");
+        Status = AcpiDmDumpTable (Length, Offset, Subtable,
+            Subtable->Length, AcpiDmTableInfoCedtHdr);
+        if (ACPI_FAILURE (Status))
+        {
+            return;
+        }
+
+        switch (Subtable->Type)
+        {
+        case ACPI_CEDT_TYPE_CHBS:
+
+            InfoTable = AcpiDmTableInfoCedt0;
+            break;
+
+        default:
+
+            AcpiOsPrintf ("\n**** Unknown CEDT subtable type 0x%X\n\n",
+                Subtable->Type);
+
+            /* Attempt to continue */
+
+            if (!Subtable->Length)
+            {
+                AcpiOsPrintf ("Invalid zero length subtable\n");
+                return;
+            }
+            goto NextSubtable;
+        }
+
+        Status = AcpiDmDumpTable (Length, Offset, Subtable,
+            Subtable->Length, InfoTable);
+        if (ACPI_FAILURE (Status))
+        {
+            return;
+        }
+
+NextSubtable:
+        /* Point to next subtable */
+
+        Offset += Subtable->Length;
+        Subtable = ACPI_ADD_PTR (ACPI_CEDT_HEADER, Subtable,
+            Subtable->Length);
+    }
+}
 
 /*******************************************************************************
  *
diff --git a/sys/contrib/dev/acpica/common/dmtbdump2.c b/sys/contrib/dev/acpica/common/dmtbdump2.c
index e5124a26d587..e3ab39b53078 100644
--- a/sys/contrib/dev/acpica/common/dmtbdump2.c
+++ b/sys/contrib/dev/acpica/common/dmtbdump2.c
@@ -181,6 +181,7 @@ AcpiDmDumpIort (
     ACPI_IORT_NODE          *IortNode;
     ACPI_IORT_ITS_GROUP     *IortItsGroup = NULL;
     ACPI_IORT_SMMU          *IortSmmu = NULL;
+    ACPI_IORT_RMR           *IortRmr = NULL;
     UINT32                  Offset;
     UINT32                  NodeOffset;
     UINT32                  Length;
@@ -188,6 +189,7 @@ AcpiDmDumpIort (
     char                    *String;
     UINT32                  i;
     UINT32                  MappingByteLength;
+    UINT8                   Revision;
 
 
     /* Main table */
@@ -198,6 +200,17 @@ AcpiDmDumpIort (
         return;
     }
 
+    Revision = Table->Revision;
+
+    /* Both IORT Rev E and E.a have known issues and are not supported */
+
+    if (Revision == 1 || Revision == 2)
+    {
+        AcpiOsPrintf ("\n**** Unsupported IORT revision 0x%X\n",
+                      Revision);
+        return;
+    }
+
     Iort = ACPI_CAST_PTR (ACPI_TABLE_IORT, Table);
     Offset = sizeof (ACPI_TABLE_IORT);
 
@@ -221,8 +234,18 @@ AcpiDmDumpIort (
         IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, Table, Offset);
         AcpiOsPrintf ("\n");
         Length = ACPI_OFFSET (ACPI_IORT_NODE, NodeData);
-        Status = AcpiDmDumpTable (Table->Length, Offset,
-            IortNode, Length, AcpiDmTableInfoIortHdr);
+
+        if (Revision == 0)
+        {
+            Status = AcpiDmDumpTable (Table->Length, Offset,
+                IortNode, Length, AcpiDmTableInfoIortHdr);
+        }
+        else if (Revision >= 3)
+        {
+            Status = AcpiDmDumpTable (Table->Length, Offset,
+                IortNode, Length, AcpiDmTableInfoIortHdr3);
+        }
+
         if (ACPI_FAILURE (Status))
         {
             return;
@@ -272,6 +295,13 @@ AcpiDmDumpIort (
             Length = IortNode->Length - NodeOffset;
             break;
 
+        case ACPI_IORT_NODE_RMR:
+
+            InfoTable = AcpiDmTableInfoIort6;
+            Length = IortNode->Length - NodeOffset;
+            IortRmr = ACPI_ADD_PTR (ACPI_IORT_RMR, IortNode, NodeOffset);
+            break;
+
         default:
 
             AcpiOsPrintf ("\n**** Unknown IORT node type 0x%X\n",
@@ -391,7 +421,30 @@ AcpiDmDumpIort (
             }
             break;
 
-        default:
+        case ACPI_IORT_NODE_RMR:
+
+            /* Validate IortRmr to avoid compiler warnings */
+            if (IortRmr)
+            {
+                NodeOffset = IortRmr->RmrOffset;
+                Length = sizeof (ACPI_IORT_RMR_DESC);
+                for (i = 0; i < IortRmr->RmrCount; i++)
+                {
+                    AcpiOsPrintf ("\n");
+                    Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
+                        ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
+                        Length, AcpiDmTableInfoIort6a);
+                    if (ACPI_FAILURE (Status))
+                    {
+                        return;
+                    }
+
+                    NodeOffset += Length;
+                }
+            }
+            break;
+
+	default:
 
             break;
         }
@@ -434,8 +487,6 @@ NextSubtable:
  *
  ******************************************************************************/
 
-static UINT8 EntrySizes[] = {4,8,16,32};
-
 void
 AcpiDmDumpIvrs (
     ACPI_TABLE_HEADER       *Table)
@@ -445,6 +496,7 @@ AcpiDmDumpIvrs (
     UINT32                  EntryOffset;
     UINT32                  EntryLength;
     UINT32                  EntryType;
+    ACPI_IVRS_DEVICE_HID    *HidSubtable;
     ACPI_IVRS_DE_HEADER     *DeviceEntry;
     ACPI_IVRS_HEADER        *Subtable;
     ACPI_DMTABLE_INFO       *InfoTable;
@@ -481,6 +533,7 @@ AcpiDmDumpIvrs (
             break;
 
         case ACPI_IVRS_TYPE_HARDWARE2:
+        case ACPI_IVRS_TYPE_HARDWARE3:
 
             InfoTable = AcpiDmTableInfoIvrs01;
             break;
@@ -520,7 +573,8 @@ AcpiDmDumpIvrs (
         /* The hardware subtable can contain multiple device entries */
 
         if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE1 ||
-            Subtable->Type == ACPI_IVRS_TYPE_HARDWARE2)
+            Subtable->Type == ACPI_IVRS_TYPE_HARDWARE2 ||
+            Subtable->Type == ACPI_IVRS_TYPE_HARDWARE3)
         {
             if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE1)
             {
@@ -545,11 +599,10 @@ AcpiDmDumpIvrs (
                  *
                  * 00 = 4 byte
                  * 01 = 8 byte
-                 * 10 = 16 byte - currently no entries defined
-                 * 11 = 32 byte - currently no entries defined
+                 * 1x = variable length
                  */
                 EntryType = DeviceEntry->Type;
-                EntryLength = EntrySizes [EntryType >> 6];
+                EntryLength = EntryType >> 6 == 1 ? 8 : 4;
 
                 switch (EntryType)
                 {
@@ -588,6 +641,14 @@ AcpiDmDumpIvrs (
                     InfoTable = AcpiDmTableInfoIvrs8c;
                     break;
 
+                /* Variable-length entries */
+
+                case ACPI_IVRS_TYPE_HID:
+
+                    EntryLength = 22;
+                    InfoTable = AcpiDmTableInfoIvrsHid;
+                    break;
+
                 default:
                     InfoTable = AcpiDmTableInfoIvrs4;
                     AcpiOsPrintf (
@@ -606,9 +667,24 @@ AcpiDmDumpIvrs (
                     return;
                 }
 
+                HidSubtable = ACPI_CAST_PTR (ACPI_IVRS_DEVICE_HID, DeviceEntry);
                 EntryOffset += EntryLength;
                 DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, DeviceEntry,
                     EntryLength);
+
+                if (EntryType == ACPI_IVRS_TYPE_HID)
+                {
+                    EntryLength = HidSubtable->UidLength;
+                    Status = AcpiDmDumpTable (Table->Length, EntryOffset,
+                        Table, EntryLength, AcpiDmTableInfoIvrsHid1);
+                    if (ACPI_FAILURE (Status))
+                    {
+                        return;
+                    }
+                    EntryOffset += EntryLength;
+                    DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER,
+                        DeviceEntry, EntryLength);
+                }
             }
         }
 
@@ -825,6 +901,11 @@ AcpiDmDumpMadt (
             InfoTable = AcpiDmTableInfoMadt15;
             break;
 
+        case ACPI_MADT_TYPE_MULTIPROC_WAKEUP:
+
+            InfoTable = AcpiDmTableInfoMadt16;
+            break;
+
         default:
 
             AcpiOsPrintf ("\n**** Unknown MADT subtable type 0x%X\n\n",
@@ -1380,6 +1461,11 @@ AcpiDmDumpPcct (
             InfoTable = AcpiDmTableInfoPcct4;
             break;
 
+        case ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE:
+
+            InfoTable = AcpiDmTableInfoPcct5;
+            break;
+
         default:
 
             AcpiOsPrintf (
@@ -1461,201 +1547,224 @@ AcpiDmDumpPdtt (
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiDmDumpPmtt
+ * FUNCTION:    AcpiDmDumpPhat
  *
- * PARAMETERS:  Table               - A PMTT table
+ * PARAMETERS:  Table               - A PHAT table
  *
  * RETURN:      None
  *
- * DESCRIPTION: Format the contents of a PMTT. This table type consists
- *              of an open-ended number of subtables.
+ * DESCRIPTION: Format the contents of a PHAT.
  *
  ******************************************************************************/
 
 void
-AcpiDmDumpPmtt (
+AcpiDmDumpPhat (
     ACPI_TABLE_HEADER       *Table)
 {
     ACPI_STATUS             Status;
-    ACPI_PMTT_HEADER        *Subtable;
-    ACPI_PMTT_HEADER        *MemSubtable;
-    ACPI_PMTT_HEADER        *DimmSubtable;
-    ACPI_PMTT_DOMAIN        *DomainArray;
+    ACPI_DMTABLE_INFO       *InfoTable;
+    ACPI_PHAT_HEADER        *Subtable;
+    ACPI_PHAT_VERSION_DATA  *VersionData;
+    UINT32                  RecordCount;
     UINT32                  Length = Table->Length;
-    UINT32                  Offset = sizeof (ACPI_TABLE_PMTT);
-    UINT32                  MemOffset;
-    UINT32                  DimmOffset;
-    UINT32                  DomainOffset;
-    UINT32                  DomainCount;
-
+    UINT32                  Offset = sizeof (ACPI_TABLE_PHAT);
+    UINT32                  SubtableLength;
+    UINT32                  PathLength;
+    UINT32                  VendorLength;
 
-    /* Main table */
 
-    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPmtt);
-    if (ACPI_FAILURE (Status))
-    {
-        return;
-    }
+    Subtable = ACPI_ADD_PTR (ACPI_PHAT_HEADER, Table, sizeof (ACPI_TABLE_PHAT));
 
-    /* Subtables */
-
-    Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset);
     while (Offset < Table->Length)
     {
         /* Common subtable header */
 
         AcpiOsPrintf ("\n");
-        Status = AcpiDmDumpTable (Length, Offset, Subtable,
-            Subtable->Length, AcpiDmTableInfoPmttHdr);
+        Status = AcpiDmDumpTable (Length, 0, Subtable,
+            sizeof (ACPI_PHAT_HEADER), AcpiDmTableInfoPhatHdr);
         if (ACPI_FAILURE (Status))
         {
             return;
         }
 
-        /* Only Socket subtables are expected at this level */
-
-        if (Subtable->Type != ACPI_PMTT_TYPE_SOCKET)
+        switch (Subtable->Type)
         {
-            AcpiOsPrintf (
-                "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n",
+        case ACPI_PHAT_TYPE_FW_VERSION_DATA:
+
+            InfoTable = AcpiDmTableInfoPhat0;
+            SubtableLength = sizeof (ACPI_PHAT_VERSION_DATA);
+            break;
+
+        case ACPI_PHAT_TYPE_FW_HEALTH_DATA:
+
+            InfoTable = AcpiDmTableInfoPhat1;
+            SubtableLength = sizeof (ACPI_PHAT_HEALTH_DATA);
+            break;
+
+        default:
+
+            AcpiOsPrintf ("\n**** Unknown PHAT subtable type 0x%X\n\n",
                 Subtable->Type);
+
             return;
         }
 
-        /* Dump the fixed-length portion of the subtable */
-
-        Status = AcpiDmDumpTable (Length, Offset, Subtable,
-            Subtable->Length, AcpiDmTableInfoPmtt0);
+        Status = AcpiDmDumpTable (Length, 0, Subtable,
+            SubtableLength, InfoTable);
         if (ACPI_FAILURE (Status))
         {
             return;
         }
 
-        /* Walk the memory controller subtables */
-
-        MemOffset = sizeof (ACPI_PMTT_SOCKET);
-        MemSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Subtable,
-            sizeof (ACPI_PMTT_SOCKET));
-
-        while (((Offset + MemOffset) < Table->Length) &&
-            (MemOffset < Subtable->Length))
+        switch (Subtable->Type)
         {
-            /* Common subtable header */
+        case ACPI_PHAT_TYPE_FW_VERSION_DATA:
 
-            AcpiOsPrintf ("\n");
-            Status = AcpiDmDumpTable (Length,
-                Offset + MemOffset, MemSubtable,
-                MemSubtable->Length, AcpiDmTableInfoPmttHdr);
-            if (ACPI_FAILURE (Status))
+            VersionData = ACPI_CAST_PTR (ACPI_PHAT_VERSION_DATA, Subtable);
+            RecordCount = VersionData->ElementCount;
+            while (RecordCount)
             {
-                return;
+                Status = AcpiDmDumpTable (Length, Offset,
+                    ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_VERSION_DATA)),
+                    sizeof (ACPI_PHAT_VERSION_ELEMENT), AcpiDmTableInfoPhat0a);
+                if (ACPI_FAILURE (Status))
+                {
+                    return;
+                }
+
+                RecordCount--;
             }
 
-            /* Only memory controller subtables are expected at this level */
+            break;
+
+        case ACPI_PHAT_TYPE_FW_HEALTH_DATA:
 
-            if (MemSubtable->Type != ACPI_PMTT_TYPE_CONTROLLER)
+            /* account for the null terminator */
+
+            PathLength = strlen (ACPI_ADD_PTR (char, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA))) + 1;
+            Status = AcpiDmDumpTable (Length, Offset,
+                ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA)),
+                PathLength, AcpiDmTableInfoPhat1a);
+            if (ACPI_FAILURE (Status))
             {
-                AcpiOsPrintf (
-                    "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n",
-                    MemSubtable->Type);
                 return;
*** 4684 LINES SKIPPED ***


More information about the dev-commits-src-all mailing list