diff mbox series

ACPICA: Update to version 20181031

Message ID 20181101092610.18733-1-colin.king@canonical.com
State Accepted
Headers show
Series ACPICA: Update to version 20181031 | expand

Commit Message

Colin Ian King Nov. 1, 2018, 9:26 a.m. UTC
From: Colin Ian King <colin.king@canonical.com>

changes in this release of ACPICA are detailed at the following
link on the ACPICA developer mailing list:

https://lists.acpica.org/pipermail/devel/2018-October/001832.html

Signed-off-by: Colin Ian King <colin.king@canonical.com>
---
 src/acpica/fwts_acpica.c                      |   1 -
 src/acpica/source/common/adisasm.c            |   1 -
 src/acpica/source/common/dmtbdump3.c          |  52 ++++++++
 src/acpica/source/common/dmtbinfo3.c          |  20 +++
 src/acpica/source/compiler/aslcompile.c       |   2 +-
 src/acpica/source/compiler/aslerror.c         |   4 +-
 src/acpica/source/compiler/aslload.c          |  97 +++++++++-----
 src/acpica/source/compiler/aslmain.c          |   2 +-
 src/acpica/source/compiler/aslmessages.c      |   6 +-
 src/acpica/source/compiler/aslmessages.h      |   2 +
 src/acpica/source/compiler/aslpredef.c        |   2 +-
 src/acpica/source/compiler/aslxref.c          |  46 ++++++-
 src/acpica/source/compiler/dtio.c             |  28 +++-
 src/acpica/source/compiler/dttable2.c         |  66 ++++++++++
 src/acpica/source/compiler/prscan.c           |   1 -
 .../source/components/debugger/dbxface.c      | 122 +++++++++++-------
 .../source/components/dispatcher/dsopcode.c   |   3 +
 .../source/components/dispatcher/dswload2.c   |   9 ++
 .../source/components/namespace/nsaccess.c    |  21 ++-
 src/acpica/source/components/parser/psloop.c  |  22 +++-
 .../source/components/parser/psobject.c       |   2 +-
 .../source/components/tables/tbxfload.c       |   2 +-
 src/acpica/source/include/acdisasm.h          |   2 +
 src/acpica/source/include/acnamesp.h          |   1 +
 src/acpica/source/include/acpixf.h            |   9 +-
 src/acpica/source/include/actbinfo.h          |   2 +
 src/acpica/source/include/actbl3.h            |  28 ++++
 27 files changed, 443 insertions(+), 110 deletions(-)

Comments

Alex Hung Nov. 6, 2018, 2:37 a.m. UTC | #1
On 2018-11-01 5:26 p.m., Colin King wrote:
> From: Colin Ian King <colin.king@canonical.com>
> 
> changes in this release of ACPICA are detailed at the following
> link on the ACPICA developer mailing list:
> 
> https://lists.acpica.org/pipermail/devel/2018-October/001832.html
> 
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>  src/acpica/fwts_acpica.c                      |   1 -
>  src/acpica/source/common/adisasm.c            |   1 -
>  src/acpica/source/common/dmtbdump3.c          |  52 ++++++++
>  src/acpica/source/common/dmtbinfo3.c          |  20 +++
>  src/acpica/source/compiler/aslcompile.c       |   2 +-
>  src/acpica/source/compiler/aslerror.c         |   4 +-
>  src/acpica/source/compiler/aslload.c          |  97 +++++++++-----
>  src/acpica/source/compiler/aslmain.c          |   2 +-
>  src/acpica/source/compiler/aslmessages.c      |   6 +-
>  src/acpica/source/compiler/aslmessages.h      |   2 +
>  src/acpica/source/compiler/aslpredef.c        |   2 +-
>  src/acpica/source/compiler/aslxref.c          |  46 ++++++-
>  src/acpica/source/compiler/dtio.c             |  28 +++-
>  src/acpica/source/compiler/dttable2.c         |  66 ++++++++++
>  src/acpica/source/compiler/prscan.c           |   1 -
>  .../source/components/debugger/dbxface.c      | 122 +++++++++++-------
>  .../source/components/dispatcher/dsopcode.c   |   3 +
>  .../source/components/dispatcher/dswload2.c   |   9 ++
>  .../source/components/namespace/nsaccess.c    |  21 ++-
>  src/acpica/source/components/parser/psloop.c  |  22 +++-
>  .../source/components/parser/psobject.c       |   2 +-
>  .../source/components/tables/tbxfload.c       |   2 +-
>  src/acpica/source/include/acdisasm.h          |   2 +
>  src/acpica/source/include/acnamesp.h          |   1 +
>  src/acpica/source/include/acpixf.h            |   9 +-
>  src/acpica/source/include/actbinfo.h          |   2 +
>  src/acpica/source/include/actbl3.h            |  28 ++++
>  27 files changed, 443 insertions(+), 110 deletions(-)
> 
> diff --git a/src/acpica/fwts_acpica.c b/src/acpica/fwts_acpica.c
> index d0c6ed7c..75f8fe3d 100644
> --- a/src/acpica/fwts_acpica.c
> +++ b/src/acpica/fwts_acpica.c
> @@ -1061,7 +1061,6 @@ int fwts_acpica_init(fwts_framework *fw)
>  		FWTS_ACPICA_MODE(fw, FWTS_ACPICA_MODE_IGNORE_ERRORS);
>  	AcpiGbl_DisableAutoRepair =
>  		FWTS_ACPICA_MODE(fw, FWTS_ACPICA_MODE_DISABLE_AUTO_REPAIR);
> -	AcpiGbl_GroupModuleLevelCode = FALSE;
>  	AcpiGbl_CstyleDisassembly = FALSE;
>  
>  	pthread_mutex_init(&mutex_lock_sem_table, NULL);
> diff --git a/src/acpica/source/common/adisasm.c b/src/acpica/source/common/adisasm.c
> index ed35f31a..70f7932b 100644
> --- a/src/acpica/source/common/adisasm.c
> +++ b/src/acpica/source/common/adisasm.c
> @@ -775,7 +775,6 @@ AdDoExternalFileList (
>              AcpiDmFinishNamespaceLoad (AcpiGbl_ParseOpRoot,
>                  AcpiGbl_RootNode, OwnerId);
>              AcpiPsDeleteParseTree (AcpiGbl_ParseOpRoot);
> -            AcpiGbl_ParseOpRoot = NULL;  /* for fwts */
>  
>              ExternalListHead = ExternalListHead->Next;
>          }
> diff --git a/src/acpica/source/common/dmtbdump3.c b/src/acpica/source/common/dmtbdump3.c
> index 3c1dea6c..1bc3fa6c 100644
> --- a/src/acpica/source/common/dmtbdump3.c
> +++ b/src/acpica/source/common/dmtbdump3.c
> @@ -486,6 +486,51 @@ AcpiDmDumpTcpa (
>  }
>  
>  
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDmDumpTpm2
> + *
> + * PARAMETERS:  Table               - A TPM2 table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of a TPM2.
> + *
> + ******************************************************************************/
> +static void
> +AcpiDmDumpTpm2Rev3 (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    UINT32                  Offset = sizeof (ACPI_TABLE_TPM23);
> +    ACPI_TABLE_TPM23        *CommonHeader = ACPI_CAST_PTR (ACPI_TABLE_TPM23, Table);
> +    ACPI_TPM23_TRAILER      *Subtable = ACPI_ADD_PTR (ACPI_TPM23_TRAILER, Table, Offset);
> +    ACPI_STATUS             Status;
> +
> +
> +    /* Main table */
> +
> +    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm23);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +
> +    /* Optional subtable if start method is ACPI start method */
> +
> +    switch (CommonHeader->StartMethod)
> +    {
> +    case ACPI_TPM23_ACPI_START_METHOD:
> +
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> +            Table->Length - Offset, AcpiDmTableInfoTpm23a);
> +        break;
> +
> +    default:
> +        break;
> +    }
> +}
> +
> +
>  /*******************************************************************************
>   *
>   * FUNCTION:    AcpiDmDumpTpm2
> @@ -509,9 +554,16 @@ AcpiDmDumpTpm2 (
>      ACPI_STATUS             Status;
>  
>  
> +    if (Table->Revision == 3)
> +    {
> +        AcpiDmDumpTpm2Rev3(Table);
> +        return;
> +    }
> +
>      /* Main table */
>  
>      Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm2);
> +
>      if (ACPI_FAILURE (Status))
>      {
>          return;
> diff --git a/src/acpica/source/common/dmtbinfo3.c b/src/acpica/source/common/dmtbinfo3.c
> index c82e3db5..33d99287 100644
> --- a/src/acpica/source/common/dmtbinfo3.c
> +++ b/src/acpica/source/common/dmtbinfo3.c
> @@ -446,6 +446,26 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoTcpaServer[] =
>   *
>   ******************************************************************************/
>  
> +/* TPM2 revision 3 */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoTpm23[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_TPM23_OFFSET (Reserved),           "Reserved", 0},
> +    {ACPI_DMT_UINT64,   ACPI_TPM23_OFFSET (ControlAddress),     "Control Address", 0},
> +    {ACPI_DMT_UINT32,   ACPI_TPM23_OFFSET (StartMethod),        "Start Method", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* Trailer in the case that StartMethod == 2 */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoTpm23a[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_TPM23A_OFFSET (Reserved),          "Reserved", DT_OPTIONAL},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* TPM2 revision 4 */
> +
>  ACPI_DMTABLE_INFO           AcpiDmTableInfoTpm2[] =
>  {
>      {ACPI_DMT_UINT16,   ACPI_TPM2_OFFSET (PlatformClass),           "Platform Class", 0},
> diff --git a/src/acpica/source/compiler/aslcompile.c b/src/acpica/source/compiler/aslcompile.c
> index e08442e0..4ae19076 100644
> --- a/src/acpica/source/compiler/aslcompile.c
> +++ b/src/acpica/source/compiler/aslcompile.c
> @@ -858,7 +858,7 @@ CmCleanupAndExit (
>  
>      if (AslGbl_ExceptionCount[ASL_ERROR] > ASL_MAX_ERROR_COUNT)
>      {
> -        printf ("\nMaximum error count (%u) exceeded\n",
> +        printf ("\nMaximum error count (%d) exceeded\n",
>              ASL_MAX_ERROR_COUNT);
>      }
>  
> diff --git a/src/acpica/source/compiler/aslerror.c b/src/acpica/source/compiler/aslerror.c
> index 6d45cd40..10ea3ec1 100644
> --- a/src/acpica/source/compiler/aslerror.c
> +++ b/src/acpica/source/compiler/aslerror.c
> @@ -1097,7 +1097,7 @@ AslExpectException (
>  
>      if (AslGbl_ExpectedMessagesIndex >= ASL_MAX_EXPECTED_MESSAGES)
>      {
> -        printf ("Too many messages have been registered as expected (max %u)\n",
> +        printf ("Too many messages have been registered as expected (max %d)\n",
>              ASL_MAX_DISABLED_MESSAGES);
>          return (AE_LIMIT);
>      }
> @@ -1144,7 +1144,7 @@ AslDisableException (
>  
>      if (AslGbl_DisabledMessagesIndex >= ASL_MAX_DISABLED_MESSAGES)
>      {
> -        printf ("Too many messages have been disabled (max %u)\n",
> +        printf ("Too many messages have been disabled (max %d)\n",
>              ASL_MAX_DISABLED_MESSAGES);
>          return (AE_LIMIT);
>      }
> diff --git a/src/acpica/source/compiler/aslload.c b/src/acpica/source/compiler/aslload.c
> index 5bb0a851..7f29b90c 100644
> --- a/src/acpica/source/compiler/aslload.c
> +++ b/src/acpica/source/compiler/aslload.c
> @@ -417,10 +417,8 @@ LdLoadResourceElements (
>          {
>              Status = AcpiNsLookup (WalkState->ScopeInfo,
>                  InitializerOp->Asl.ExternalName,
> -                ACPI_TYPE_LOCAL_RESOURCE_FIELD,
> -                ACPI_IMODE_LOAD_PASS1,
> -                ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE,
> -                NULL, &Node);
> +                ACPI_TYPE_LOCAL_RESOURCE_FIELD, ACPI_IMODE_LOAD_PASS1,
> +                ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE, NULL, &Node);
>              if (ACPI_FAILURE (Status))
>              {
>                  return (Status);
> @@ -687,8 +685,7 @@ LdNamespace1Begin (
>           * handle this case. Perhaps someday this case can go away.
>           */
>          Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_ANY,
> -            ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT,
> -            WalkState, &(Node));
> +            ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &Node);
>          if (ACPI_FAILURE (Status))
>          {
>              if (Status == AE_NOT_FOUND)
> @@ -696,23 +693,26 @@ LdNamespace1Begin (
>                  /* The name was not found, go ahead and create it */
>  
>                  Status = AcpiNsLookup (WalkState->ScopeInfo, Path,
> -                    ACPI_TYPE_LOCAL_SCOPE,
> -                    ACPI_IMODE_LOAD_PASS1, Flags,
> -                    WalkState, &(Node));
> +                    ACPI_TYPE_LOCAL_SCOPE, ACPI_IMODE_LOAD_PASS1,
> +                    Flags, WalkState, &Node);
>                  if (ACPI_FAILURE (Status))
>                  {
>                      return_ACPI_STATUS (Status);
>                  }
>  
> -                /*
> -                 * However, this is an error -- primarily because the MS
> -                 * interpreter can't handle a forward reference from the
> -                 * Scope() operator.
> -                 */
> -                AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
> -                    Op->Asl.ExternalName);
> -                AslError (ASL_ERROR, ASL_MSG_SCOPE_FWD_REF, Op,
> -                    Op->Asl.ExternalName);
> +                /* However, this is an error -- operand to Scope must exist */
> +
> +                if (strlen (Op->Asl.ExternalName) == ACPI_NAME_SIZE)
> +                {
> +                    AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
> +                        Op->Asl.ExternalName);
> +                }
> +                else
> +                {
> +                    AslError (ASL_ERROR, ASL_MSG_NAMEPATH_NOT_EXIST, Op,
> +                        Op->Asl.ExternalName);
> +                }
> +
>                  goto FinishNode;
>              }
>  
> @@ -824,7 +824,6 @@ LdNamespace1Begin (
>          break;
>      }
>  
> -
>      ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Loading name: %s, (%s)\n",
>          Op->Asl.ExternalName, AcpiUtGetTypeName (ObjectType)));
>  
> @@ -832,6 +831,18 @@ LdNamespace1Begin (
>  
>      Flags |= ACPI_NS_ERROR_IF_FOUND;
>  
> +    /*
> +     * For opcodes that enter new names into the namespace,
> +     * all prefix NameSegs must exist.
> +     */
> +    WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode);
> +    if (((WalkState->OpInfo->Flags & AML_NAMED) ||
> +        (WalkState->OpInfo->Flags & AML_CREATE)) &&
> +        (Op->Asl.AmlOpcode != AML_EXTERNAL_OP))
> +    {
> +        Flags |= ACPI_NS_PREFIX_MUST_EXIST;
> +    }
> +
>      /*
>       * Enter the named type into the internal namespace. We enter the name
>       * as we go downward in the parse tree. Any necessary subobjects that
> @@ -915,8 +926,20 @@ LdNamespace1Begin (
>                  return_ACPI_STATUS (AE_OK);
>              }
>          }
> +        else if (AE_NOT_FOUND)
> +        {
> +            /*
> +             * One or more prefix NameSegs of the NamePath do not exist
> +             * (all of them must exist). Attempt to continue compilation
> +             * by setting the current scope to the root.
> +             */
> +            Node = AcpiGbl_RootNode;
> +            Status = AE_OK;
> +        }
>          else
>          {
> +            /* Flag all other errors as coming from the ACPICA core */
> +
>              AslCoreSubsystemError (Op, Status,
>                  "Failure from namespace lookup", FALSE);
>              return_ACPI_STATUS (Status);
> @@ -1043,10 +1066,10 @@ LdNamespace2Begin (
>  
>      if (Op->Asl.ParseOpcode == PARSEOP_ALIAS)
>      {
> -        /* Complete the alias node by getting and saving the target node */
> -
> -        /* First child is the alias target */
> -
> +        /*
> +         * Complete the alias node by getting and saving the target node.
> +         * First child is the alias target
> +         */
>          Arg = Op->Asl.Child;
>  
>          /* Get the target pathname */
> @@ -1070,18 +1093,34 @@ LdNamespace2Begin (
>          {
>              if (Status == AE_NOT_FOUND)
>              {
> -                AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
> -                    Op->Asl.ExternalName);
> +                /* Standalone NameSeg vs. NamePath */
> +
> +                if (strlen (Arg->Asl.ExternalName) == ACPI_NAME_SIZE)
> +                {
> +                    AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
> +                        Arg->Asl.ExternalName);
> +                }
> +                else
> +                {
> +                    AslError (ASL_ERROR, ASL_MSG_NAMEPATH_NOT_EXIST, Op,
> +                        Arg->Asl.ExternalName);
> +                }
>  
> +#if 0
> +/*
> + * NOTE: Removed 10/2018 to enhance compiler error reporting. No
> + * regressions seen.
> + */
>                  /*
>                   * The name was not found, go ahead and create it.
>                   * This prevents more errors later.
>                   */
>                  Status = AcpiNsLookup (WalkState->ScopeInfo, Path,
> -                    ACPI_TYPE_ANY,
> -                    ACPI_IMODE_LOAD_PASS1, ACPI_NS_NO_UPSEARCH,
> -                    WalkState, &(Node));
> -                return (AE_OK);
> +                    ACPI_TYPE_ANY, ACPI_IMODE_LOAD_PASS1,
> +                    ACPI_NS_NO_UPSEARCH, WalkState, &Node);
> +#endif
> +                return (Status);
> +/* Removed: return (AE_OK)*/
>              }
>  
>              AslCoreSubsystemError (Op, Status,
> diff --git a/src/acpica/source/compiler/aslmain.c b/src/acpica/source/compiler/aslmain.c
> index 4f24bb3e..70386f8a 100644
> --- a/src/acpica/source/compiler/aslmain.c
> +++ b/src/acpica/source/compiler/aslmain.c
> @@ -329,7 +329,7 @@ AslSignalHandler (
>  
>      default:
>  
> -        printf (ASL_PREFIX "Unknown interrupt signal (%u)\n", Sig);
> +        printf (ASL_PREFIX "Unknown interrupt signal (%d)\n", Sig);
>          break;
>      }
>  
> diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c
> index 14e140b2..23297183 100644
> --- a/src/acpica/source/compiler/aslmessages.c
> +++ b/src/acpica/source/compiler/aslmessages.c
> @@ -285,7 +285,7 @@ const char                      *AslCompilerMsgs [] =
>  /*    ASL_MSG_NON_ASCII */                  "Invalid characters found in file",
>  /*    ASL_MSG_NON_ZERO */                   "Operand evaluates to zero",
>  /*    ASL_MSG_NOT_EXIST */                  "Object does not exist",
> -/*    ASL_MSG_NOT_FOUND */                  "Object not found or not accessible from scope",
> +/*    ASL_MSG_NOT_FOUND */                  "Object not found or not accessible from current scope",
>  /*    ASL_MSG_NOT_METHOD */                 "Not a control method, cannot invoke",
>  /*    ASL_MSG_NOT_PARAMETER */              "Not a parameter, used as local only",
>  /*    ASL_MSG_NOT_REACHABLE */              "Object is not accessible from this scope",
> @@ -359,7 +359,9 @@ const char                      *AslCompilerMsgs [] =
>  /*    ASL_MSG_OEM_ID */                     "Invalid OEM ID",
>  /*    ASL_MSG_UNLOAD */                     "Unload is not supported by all operating systems",
>  /*    ASL_MSG_OFFSET */                     "Unnecessary/redundant use of Offset operator",
> -/*    ASL_MSG_LONG_SLEEP */                 "Very long Sleep, greater than 1 second"
> +/*    ASL_MSG_LONG_SLEEP */                 "Very long Sleep, greater than 1 second",
> +/*    ASL_MSG_PREFIX_NOT_EXIST */           "One or more prefix Scopes do not exist",
> +/*    ASL_MSG_NAMEPATH_NOT_EXIST */         "One or more objects within the Pathname do not exist"
>  };
>  
>  /* Table compiler */
> diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h
> index 907744a2..c932aded 100644
> --- a/src/acpica/source/compiler/aslmessages.h
> +++ b/src/acpica/source/compiler/aslmessages.h
> @@ -362,6 +362,8 @@ typedef enum
>      ASL_MSG_UNLOAD,
>      ASL_MSG_OFFSET,
>      ASL_MSG_LONG_SLEEP,
> +    ASL_MSG_PREFIX_NOT_EXIST,
> +    ASL_MSG_NAMEPATH_NOT_EXIST,
>  
>      /* These messages are used by the Data Table compiler only */
>  
> diff --git a/src/acpica/source/compiler/aslpredef.c b/src/acpica/source/compiler/aslpredef.c
> index bc30fe91..ae806412 100644
> --- a/src/acpica/source/compiler/aslpredef.c
> +++ b/src/acpica/source/compiler/aslpredef.c
> @@ -222,7 +222,7 @@ ApCheckForPredefinedMethod (
>  
>          if (MethodInfo->NumArguments != 0)
>          {
> -            sprintf (AslGbl_MsgBuffer, "%s requires %u", Op->Asl.ExternalName, 0);
> +            sprintf (AslGbl_MsgBuffer, "%s requires %d", Op->Asl.ExternalName, 0);
>  
>              AslError (ASL_WARNING, ASL_MSG_RESERVED_ARG_COUNT_HI, Op,
>                  AslGbl_MsgBuffer);
> diff --git a/src/acpica/source/compiler/aslxref.c b/src/acpica/source/compiler/aslxref.c
> index 5273ea82..8b213577 100644
> --- a/src/acpica/source/compiler/aslxref.c
> +++ b/src/acpica/source/compiler/aslxref.c
> @@ -718,11 +718,34 @@ XfNamespaceLocateBegin (
>              }
>              else
>              {
> -                /* Check for a fully qualified path */
> +                /* The NamePath contains multiple NameSegs */
>  
> -                if (Path[0] == AML_ROOT_PREFIX)
> +                if ((OpInfo->Flags & AML_CREATE) ||
> +                    (OpInfo->ObjectType == ACPI_TYPE_LOCAL_ALIAS))
>                  {
> -                    /* Gave full path, the object does not exist */
> +                    /*
> +                     * The new name is the last parameter. For the
> +                     * CreateXXXXField and Alias operators
> +                     */
> +                    NextOp = Op->Asl.Child;
> +                    while (!(NextOp->Asl.CompileFlags & OP_IS_NAME_DECLARATION))
> +                    {
> +                        NextOp = NextOp->Asl.Next;
> +                    }
> +
> +                    AslError (ASL_ERROR, ASL_MSG_PREFIX_NOT_EXIST, NextOp,
> +                        NextOp->Asl.ExternalName);
> +                }
> +                else if (OpInfo->Flags & AML_NAMED)
> +                {
> +                    /* The new name is the first parameter */
> +
> +                    AslError (ASL_ERROR, ASL_MSG_PREFIX_NOT_EXIST, Op,
> +                        Op->Asl.ExternalName);
> +                }
> +                else if (Path[0] == AML_ROOT_PREFIX)
> +                {
> +                    /* Full namepath from root, the object does not exist */
>  
>                      AslError (ASL_ERROR, ASL_MSG_NOT_EXIST, Op,
>                          Op->Asl.ExternalName);
> @@ -730,11 +753,20 @@ XfNamespaceLocateBegin (
>                  else
>                  {
>                      /*
> -                     * We can't tell whether it doesn't exist or just
> -                     * can't be reached.
> +                     * Generic "not found" error. Cannot determine whether it
> +                     * doesn't exist or just can't be reached. However, we
> +                     * can differentiate between a NameSeg vs. NamePath.
>                       */
> -                    AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
> -                        Op->Asl.ExternalName);
> +                    if (strlen (Op->Asl.ExternalName) == ACPI_NAME_SIZE)
> +                    {
> +                        AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
> +                            Op->Asl.ExternalName);
> +                    }
> +                    else
> +                    {
> +                        AslError (ASL_ERROR, ASL_MSG_NAMEPATH_NOT_EXIST, Op,
> +                            Op->Asl.ExternalName);
> +                    }
>                  }
>              }
>  
> diff --git a/src/acpica/source/compiler/dtio.c b/src/acpica/source/compiler/dtio.c
> index b15d3b97..bd189053 100644
> --- a/src/acpica/source/compiler/dtio.c
> +++ b/src/acpica/source/compiler/dtio.c
> @@ -236,7 +236,7 @@ DtTrim (
>  
>      /* Skip lines that start with a space */
>  
> -    if (!strcmp (String, " "))
> +    if (*String == 0 || !strcmp (String, " "))
>      {
>          ReturnString = UtLocalCacheCalloc (1);
>          return (ReturnString);
> @@ -258,7 +258,7 @@ DtTrim (
>  
>      while (End >= Start)
>      {
> -        if (*End == '\r' || *End == '\n')
> +        if (*End == '\n')
>          {
>              End--;
>              continue;
> @@ -522,6 +522,7 @@ DtGetNextLine (
>      UINT32                  CurrentLineOffset;
>      UINT32                  i;
>      int                     c;
> +    int                     c1;
>  
>  
>      memset (AslGbl_CurrentLineBuffer, 0, AslGbl_LineBufferSize);
> @@ -569,6 +570,29 @@ DtGetNextLine (
>              c = '\n';
>              State = DT_NORMAL_TEXT;
>          }
> +        else if (c == '\r')
> +        {
> +            c1 = getc (Handle);
> +            if (c1 == '\n')
> +            {
> +                /*
> +                 * Skip the carriage return as if it didn't exist. This is
> +                 * onlt meant for input files in DOS format in unix. fopen in
> +                 * unix may not support "text mode" and leaves CRLF intact.
> +                 */
> +                c = '\n';
> +            }
> +            else
> +            {
> +                /* This was not a CRLF. Only a CR */
> +
> +                ungetc(c1, Handle);
> +
> +                DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL,
> +                    "Carriage return without linefeed detected");
> +                return (ASL_EOF);
> +            }
> +        }
>  
>          switch (State)
>          {
> diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c
> index 3f970377..0b196a2f 100644
> --- a/src/acpica/source/compiler/dttable2.c
> +++ b/src/acpica/source/compiler/dttable2.c
> @@ -1876,6 +1876,62 @@ DtCompileTcpa (
>  }
>  
>  
> +/******************************************************************************
> + *
> + * FUNCTION:    DtCompileTpm2Rev3
> + *
> + * PARAMETERS:  PFieldList          - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile TPM2 revision 3
> + *
> + *****************************************************************************/
> +static ACPI_STATUS
> +DtCompileTpm2Rev3 (
> +    void                    **List)
> +{
> +    DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +    DT_SUBTABLE             *Subtable;
> +    ACPI_TABLE_TPM23        *Tpm23Header;
> +    DT_SUBTABLE             *ParentTable;
> +    ACPI_STATUS             Status = AE_OK;
> +
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm23,
> +        &Subtable);
> +
> +    ParentTable = DtPeekSubtable ();
> +    DtInsertSubtable (ParentTable, Subtable);
> +    Tpm23Header = ACPI_CAST_PTR (ACPI_TABLE_TPM23, ParentTable->Buffer);
> +
> +    /* Subtable type depends on the StartMethod */
> +
> +    switch (Tpm23Header->StartMethod)
> +    {
> +    case ACPI_TPM23_ACPI_START_METHOD:
> +
> +        /* Subtable specific to to ARM_SMC */
> +
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm23a,
> +            &Subtable);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +        break;
> +
> +    default:
> +        break;
> +    }
> +
> +    return (Status);
> +}
> +
> +
>  /******************************************************************************
>   *
>   * FUNCTION:    DtCompileTpm2
> @@ -1897,8 +1953,18 @@ DtCompileTpm2 (
>      ACPI_TABLE_TPM2         *Tpm2Header;
>      DT_SUBTABLE             *ParentTable;
>      ACPI_STATUS             Status = AE_OK;
> +    ACPI_TABLE_HEADER       *Header;
>  
>  
> +    ParentTable = DtPeekSubtable ();
> +
> +    Header = ACPI_CAST_PTR (ACPI_TABLE_HEADER, ParentTable->Buffer);
> +
> +    if (Header->Revision == 3)
> +    {
> +        return (DtCompileTpm2Rev3 (List));
> +    }
> +
>      /* Compile the main table */
>  
>      Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm2,
> diff --git a/src/acpica/source/compiler/prscan.c b/src/acpica/source/compiler/prscan.c
> index 580b47f0..325569ed 100644
> --- a/src/acpica/source/compiler/prscan.c
> +++ b/src/acpica/source/compiler/prscan.c
> @@ -1259,7 +1259,6 @@ PrPopDirective (
>          AslGbl_DirectiveInfo[Info->Directive].Name,
>          Info->Argument, AslGbl_IgnoringThisCodeBlock ? "TRUE" : "FALSE");
>  
> -    ACPI_FREE (Info);
>      return (AE_OK);
>  }
>  
> diff --git a/src/acpica/source/components/debugger/dbxface.c b/src/acpica/source/components/debugger/dbxface.c
> index c661b248..a0f3ed6b 100644
> --- a/src/acpica/source/components/debugger/dbxface.c
> +++ b/src/acpica/source/components/debugger/dbxface.c
> @@ -174,6 +174,12 @@ AcpiDbMethodEnd (
>      ACPI_WALK_STATE         *WalkState);
>  #endif
>  
> +#ifdef ACPI_DISASSEMBLER
> +static ACPI_PARSE_OBJECT *
> +AcpiDbGetDisplayOp (
> +    ACPI_WALK_STATE         *WalkState,
> +    ACPI_PARSE_OBJECT       *Op);
> +#endif
>  
>  /*******************************************************************************
>   *
> @@ -273,6 +279,74 @@ AcpiDbSignalBreakPoint (
>  }
>  
>  
> +#ifdef ACPI_DISASSEMBLER
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDbGetDisplayOp
> + *
> + * PARAMETERS:  WalkState       - Current walk
> + *              Op              - Current executing op (from aml interpreter)
> + *
> + * RETURN:      Opcode to display
> + *
> + * DESCRIPTION: Find the opcode to display during single stepping
> + *
> + ******************************************************************************/
> +
> +static ACPI_PARSE_OBJECT *
> +AcpiDbGetDisplayOp (
> +    ACPI_WALK_STATE         *WalkState,
> +    ACPI_PARSE_OBJECT       *Op)
> +{
> +    ACPI_PARSE_OBJECT       *DisplayOp;
> +    ACPI_PARSE_OBJECT       *ParentOp;
> +
> +    DisplayOp = Op;
> +    ParentOp = Op->Common.Parent;
> +    if (ParentOp)
> +    {
> +        if ((WalkState->ControlState) &&
> +            (WalkState->ControlState->Common.State ==
> +                ACPI_CONTROL_PREDICATE_EXECUTING))
> +        {
> +            /*
> +             * We are executing the predicate of an IF or WHILE statement
> +             * Search upwards for the containing IF or WHILE so that the
> +             * entire predicate can be displayed.
> +             */
> +            while (ParentOp)
> +            {
> +                if ((ParentOp->Common.AmlOpcode == AML_IF_OP) ||
> +                    (ParentOp->Common.AmlOpcode == AML_WHILE_OP))
> +                {
> +                    DisplayOp = ParentOp;
> +                    break;
> +                }
> +                ParentOp = ParentOp->Common.Parent;
> +            }
> +        }
> +        else
> +        {
> +            while (ParentOp)
> +            {
> +                if ((ParentOp->Common.AmlOpcode == AML_IF_OP)     ||
> +                    (ParentOp->Common.AmlOpcode == AML_ELSE_OP)   ||
> +                    (ParentOp->Common.AmlOpcode == AML_SCOPE_OP)  ||
> +                    (ParentOp->Common.AmlOpcode == AML_METHOD_OP) ||
> +                    (ParentOp->Common.AmlOpcode == AML_WHILE_OP))
> +                {
> +                    break;
> +                }
> +                DisplayOp = ParentOp;
> +                ParentOp = ParentOp->Common.Parent;
> +            }
> +        }
> +    }
> +    return DisplayOp;
> +}
> +#endif
> +
> +
>  /*******************************************************************************
>   *
>   * FUNCTION:    AcpiDbSingleStep
> @@ -296,8 +370,6 @@ AcpiDbSingleStep (
>      ACPI_PARSE_OBJECT       *Next;
>      ACPI_STATUS             Status = AE_OK;
>      UINT32                  OriginalDebugLevel;
> -    ACPI_PARSE_OBJECT       *DisplayOp;
> -    ACPI_PARSE_OBJECT       *ParentOp;
>      UINT32                  AmlOffset;
>  
>  
> @@ -393,53 +465,11 @@ AcpiDbSingleStep (
>          Next = Op->Common.Next;
>          Op->Common.Next = NULL;
>  
> -
> -        DisplayOp = Op;
> -        ParentOp = Op->Common.Parent;
> -        if (ParentOp)
> -        {
> -            if ((WalkState->ControlState) &&
> -                (WalkState->ControlState->Common.State ==
> -                    ACPI_CONTROL_PREDICATE_EXECUTING))
> -            {
> -                /*
> -                 * We are executing the predicate of an IF or WHILE statement
> -                 * Search upwards for the containing IF or WHILE so that the
> -                 * entire predicate can be displayed.
> -                 */
> -                while (ParentOp)
> -                {
> -                    if ((ParentOp->Common.AmlOpcode == AML_IF_OP) ||
> -                        (ParentOp->Common.AmlOpcode == AML_WHILE_OP))
> -                    {
> -                        DisplayOp = ParentOp;
> -                        break;
> -                    }
> -                    ParentOp = ParentOp->Common.Parent;
> -                }
> -            }
> -            else
> -            {
> -                while (ParentOp)
> -                {
> -                    if ((ParentOp->Common.AmlOpcode == AML_IF_OP)     ||
> -                        (ParentOp->Common.AmlOpcode == AML_ELSE_OP)   ||
> -                        (ParentOp->Common.AmlOpcode == AML_SCOPE_OP)  ||
> -                        (ParentOp->Common.AmlOpcode == AML_METHOD_OP) ||
> -                        (ParentOp->Common.AmlOpcode == AML_WHILE_OP))
> -                    {
> -                        break;
> -                    }
> -                    DisplayOp = ParentOp;
> -                    ParentOp = ParentOp->Common.Parent;
> -                }
> -            }
> -        }
> -
>          /* Now we can disassemble and display it */
>  
>  #ifdef ACPI_DISASSEMBLER
> -        AcpiDmDisassemble (WalkState, DisplayOp, ACPI_UINT32_MAX);
> +        AcpiDmDisassemble (WalkState, AcpiDbGetDisplayOp (WalkState, Op),
> +            ACPI_UINT32_MAX);
>  #else
>          /*
>           * The AML Disassembler is not configured - at least we can
> diff --git a/src/acpica/source/components/dispatcher/dsopcode.c b/src/acpica/source/components/dispatcher/dsopcode.c
> index 038993c7..ca2cd470 100644
> --- a/src/acpica/source/components/dispatcher/dsopcode.c
> +++ b/src/acpica/source/components/dispatcher/dsopcode.c
> @@ -586,6 +586,9 @@ AcpiDsEvalRegionOperands (
>          ObjDesc, ACPI_FORMAT_UINT64 (ObjDesc->Region.Address),
>          ObjDesc->Region.Length));
>  
> +    Status = AcpiUtAddAddressRange (ObjDesc->Region.SpaceId,
> +        ObjDesc->Region.Address, ObjDesc->Region.Length, Node);
> +
>      /* Now the address and length are valid for this opregion */
>  
>      ObjDesc->Region.Flags |= AOPOBJ_DATA_VALID;
> diff --git a/src/acpica/source/components/dispatcher/dswload2.c b/src/acpica/source/components/dispatcher/dswload2.c
> index 9bc6ecfa..4b6e41d8 100644
> --- a/src/acpica/source/components/dispatcher/dswload2.c
> +++ b/src/acpica/source/components/dispatcher/dswload2.c
> @@ -448,6 +448,15 @@ AcpiDsLoad2BeginOp (
>          }
>  #endif
>  
> +        /*
> +         * For name creation opcodes, the full namepath prefix must
> +         * exist, except for the final (new) nameseg.
> +         */
> +        if (WalkState->OpInfo->Flags & AML_NAMED)
> +        {
> +            Flags |= ACPI_NS_PREFIX_MUST_EXIST;
> +        }
> +
>          /* Add new entry or lookup existing entry */
>  
>          Status = AcpiNsLookup (WalkState->ScopeInfo, BufferPtr, ObjectType,
> diff --git a/src/acpica/source/components/namespace/nsaccess.c b/src/acpica/source/components/namespace/nsaccess.c
> index af97c51f..11c652e0 100644
> --- a/src/acpica/source/components/namespace/nsaccess.c
> +++ b/src/acpica/source/components/namespace/nsaccess.c
> @@ -421,6 +421,7 @@ AcpiNsLookup (
>      ACPI_OBJECT_TYPE        ThisSearchType;
>      UINT32                  SearchParentFlag = ACPI_NS_SEARCH_PARENT;
>      UINT32                  LocalFlags;
> +    ACPI_INTERPRETER_MODE   LocalInterpreterMode;
>  
>  
>      ACPI_FUNCTION_TRACE (NsLookup);
> @@ -670,6 +671,7 @@ AcpiNsLookup (
>       */
>      ThisSearchType = ACPI_TYPE_ANY;
>      CurrentNode = ThisNode;
> +
>      while (NumSegments && CurrentNode)
>      {
>          NumSegments--;
> @@ -704,6 +706,16 @@ AcpiNsLookup (
>              }
>          }
>  
> +        /* Handle opcodes that create a new NameSeg via a full NamePath */
> +
> +        LocalInterpreterMode = InterpreterMode;
> +        if ((Flags & ACPI_NS_PREFIX_MUST_EXIST) && (NumSegments > 0))
> +        {
> +            /* Every element of the path must exist (except for the final NameSeg) */
> +
> +            LocalInterpreterMode = ACPI_IMODE_EXECUTE;
> +        }
> +
>          /* Extract one ACPI name from the front of the pathname */
>  
>          ACPI_MOVE_32_TO_32 (&SimpleName, Path);
> @@ -711,11 +723,18 @@ AcpiNsLookup (
>          /* Try to find the single (4 character) ACPI name */
>  
>          Status = AcpiNsSearchAndEnter (SimpleName, WalkState, CurrentNode,
> -            InterpreterMode, ThisSearchType, LocalFlags, &ThisNode);
> +            LocalInterpreterMode, ThisSearchType, LocalFlags, &ThisNode);
>          if (ACPI_FAILURE (Status))
>          {
>              if (Status == AE_NOT_FOUND)
>              {
> +#if !defined ACPI_ASL_COMPILER /* Note: iASL reports this error by itself, not needed here */
> +                if (Flags & ACPI_NS_PREFIX_MUST_EXIST)
> +                {
> +                    AcpiOsPrintf (ACPI_MSG_BIOS_ERROR
> +                        "Object does not exist: %4.4s\n", &SimpleName);
> +                }
> +#endif
>                  /* Name not found in ACPI namespace */
>  
>                  ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
> diff --git a/src/acpica/source/components/parser/psloop.c b/src/acpica/source/components/parser/psloop.c
> index ef517b54..9625834c 100644
> --- a/src/acpica/source/components/parser/psloop.c
> +++ b/src/acpica/source/components/parser/psloop.c
> @@ -298,7 +298,7 @@ AcpiPsGetArguments (
>           * future. Use of this option can cause problems with AML code that
>           * depends upon in-order immediate execution of module-level code.
>           */
> -        if (AcpiGbl_GroupModuleLevelCode &&
> +        if (!AcpiGbl_ExecuteTablesAsMethods &&
>              (WalkState->PassNumber <= ACPI_IMODE_LOAD_PASS2) &&
>              ((WalkState->ParseFlags & ACPI_PARSE_DISASSEMBLE) == 0))
>          {
> @@ -566,6 +566,7 @@ AcpiPsParseLoop (
>      ACPI_PARSE_OBJECT       *Op = NULL;     /* current op */
>      ACPI_PARSE_STATE        *ParserState;
>      UINT8                   *AmlOpStart = NULL;
> +    UINT8                   OpcodeLength;
>  
>  
>      ACPI_FUNCTION_TRACE_PTR (PsParseLoop, WalkState);
> @@ -654,7 +655,7 @@ AcpiPsParseLoop (
>                   * status to AE_OK to proceed with the table load.
>                   */
>                  if ((WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL) &&
> -                    Status == AE_ALREADY_EXISTS)
> +                    ((Status == AE_ALREADY_EXISTS) || (Status == AE_NOT_FOUND)))
>                  {
>                      Status = AE_OK;
>                  }
> @@ -686,9 +687,20 @@ AcpiPsParseLoop (
>                       * the scope op because the parse failure indicates that
>                       * the device may not exist.
>                       */
> -                    ACPI_ERROR ((AE_INFO, "Skip parsing opcode %s",
> -                        AcpiPsGetOpcodeName (WalkState->Opcode)));
> -                    WalkState->ParserState.Aml = WalkState->Aml + 1;
> +                    ACPI_INFO (("Skipping parse of AML opcode: %s (0x%4.4X)",
> +                        AcpiPsGetOpcodeName (WalkState->Opcode), WalkState->Opcode));
> +
> +                    /*
> +                     * Determine the opcode length before skipping the opcode.
> +                     * An opcode can be 1 byte or 2 bytes in length.
> +                     */
> +                    OpcodeLength = 1;
> +                    if ((WalkState->Opcode & 0xFF00) == AML_EXTENDED_OPCODE)
> +                    {
> +                        OpcodeLength = 2;
> +                    }
> +                    WalkState->ParserState.Aml = WalkState->Aml + OpcodeLength;
> +
>                      WalkState->ParserState.Aml =
>                          AcpiPsGetNextPackageEnd(&WalkState->ParserState);
>                      WalkState->Aml = WalkState->ParserState.Aml;
> diff --git a/src/acpica/source/components/parser/psobject.c b/src/acpica/source/components/parser/psobject.c
> index 8d6f81bd..ca7ab0ae 100644
> --- a/src/acpica/source/components/parser/psobject.c
> +++ b/src/acpica/source/components/parser/psobject.c
> @@ -773,7 +773,7 @@ AcpiPsCompleteOp (
>               * because there could be correct AML beyond the parts that caused
>               * the runtime error.
>               */
> -            ACPI_ERROR ((AE_INFO, "Ignore error and continue table load"));
> +            ACPI_INFO (("Ignoring error and continuing table load"));
>              return_ACPI_STATUS (AE_OK);
>          }
>          return_ACPI_STATUS (Status);
> diff --git a/src/acpica/source/components/tables/tbxfload.c b/src/acpica/source/components/tables/tbxfload.c
> index 0119b684..a956806e 100644
> --- a/src/acpica/source/components/tables/tbxfload.c
> +++ b/src/acpica/source/components/tables/tbxfload.c
> @@ -219,7 +219,7 @@ AcpiLoadTables (
>              "While loading namespace from ACPI tables"));
>      }
>  
> -    if (AcpiGbl_ExecuteTablesAsMethods || !AcpiGbl_GroupModuleLevelCode)
> +    if (AcpiGbl_ExecuteTablesAsMethods)
>      {
>          /*
>           * If the module-level code support is enabled, initialize the objects
> diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
> index b774b20f..edd108d2 100644
> --- a/src/acpica/source/include/acdisasm.h
> +++ b/src/acpica/source/include/acdisasm.h
> @@ -561,6 +561,8 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTcpaServer[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTpm2[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTpm2a[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTpm211[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTpm23[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTpm23a[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoUefi[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoVrtc[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoVrtc0[];
> diff --git a/src/acpica/source/include/acnamesp.h b/src/acpica/source/include/acnamesp.h
> index 1e3db8d1..7c2083d3 100644
> --- a/src/acpica/source/include/acnamesp.h
> +++ b/src/acpica/source/include/acnamesp.h
> @@ -177,6 +177,7 @@
>  #define ACPI_NS_TEMPORARY           0x0040
>  #define ACPI_NS_OVERRIDE_IF_FOUND   0x0080
>  #define ACPI_NS_EARLY_INIT          0x0100
> +#define ACPI_NS_PREFIX_MUST_EXIST   0x0200
>  
>  /* Flags for AcpiNsWalkNamespace */
>  
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index aaf284cb..27e9aa7f 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                 0x20181003
> +#define ACPI_CA_VERSION                 0x20181031
>  
>  #include "acconfig.h"
>  #include "actypes.h"
> @@ -300,13 +300,6 @@ ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_CopyDsdtLocally, FALSE);
>   */
>  ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_DoNotUseXsdt, FALSE);
>  
> -/*
> - * Optionally support group module level code.
> - * NOTE, this is essentially obsolete and will be removed soon
> - * (01/2018).
> - */
> -ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_GroupModuleLevelCode, FALSE);
> -
>  /*
>   * Optionally support module level code by parsing an entire table as
>   * a method as it is loaded. Default is TRUE.
> diff --git a/src/acpica/source/include/actbinfo.h b/src/acpica/source/include/actbinfo.h
> index 347a3940..19eeeccb 100644
> --- a/src/acpica/source/include/actbinfo.h
> +++ b/src/acpica/source/include/actbinfo.h
> @@ -194,6 +194,7 @@
>  #define ACPI_STAO_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_STAO,f)
>  #define ACPI_TCPA_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_HDR,f)
>  #define ACPI_TPM2_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_TPM2,f)
> +#define ACPI_TPM23_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_TABLE_TPM23,f)
>  #define ACPI_UEFI_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_UEFI,f)
>  #define ACPI_WAET_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_WAET,f)
>  #define ACPI_WDAT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_WDAT,f)
> @@ -337,6 +338,7 @@
>  #define ACPI_TCPA_SERVER_OFFSET(f)      (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_SERVER,f)
>  #define ACPI_TPM2A_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_TPM2_TRAILER,f)
>  #define ACPI_TPM211_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_TPM2_ARM_SMC,f)
> +#define ACPI_TPM23A_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_TPM23_TRAILER,f)
>  #define ACPI_VRTC0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_VRTC_ENTRY,f)
>  #define ACPI_WDAT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_WDAT_ENTRY,f)
>  
> diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h
> index d4c15838..99b466c1 100644
> --- a/src/acpica/source/include/actbl3.h
> +++ b/src/acpica/source/include/actbl3.h
> @@ -552,6 +552,34 @@ typedef struct acpi_table_tcpa_server
>   *
>   ******************************************************************************/
>  
> +/* Revision 3 */
> +
> +typedef struct acpi_table_tpm23
> +{
> +    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
> +    UINT32                  Reserved;
> +    UINT64                  ControlAddress;
> +    UINT32                  StartMethod;
> +
> +} ACPI_TABLE_TPM23;
> +
> +/* Value for StartMethod above */
> +
> +#define ACPI_TPM23_ACPI_START_METHOD                 2
> +
> +/*
> + * Optional trailer for revision 3. If start method is 2, there is a 4 byte
> + * reserved area of all zeros.
> + */
> +typedef struct acpi_tmp23_trailer
> +{
> +    UINT32                  Reserved;
> +
> +} ACPI_TPM23_TRAILER;
> +
> +
> +/* Revision 4 */
> +
>  typedef struct acpi_table_tpm2
>  {
>      ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
> 


Acked-by: Alex Hung <alex.hung@canonical.com>
Ivan Hu Nov. 6, 2018, 2:39 a.m. UTC | #2
On 11/1/18 5:26 PM, Colin King wrote:
> From: Colin Ian King <colin.king@canonical.com>
>
> changes in this release of ACPICA are detailed at the following
> link on the ACPICA developer mailing list:
>
> https://lists.acpica.org/pipermail/devel/2018-October/001832.html
>
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>  src/acpica/fwts_acpica.c                      |   1 -
>  src/acpica/source/common/adisasm.c            |   1 -
>  src/acpica/source/common/dmtbdump3.c          |  52 ++++++++
>  src/acpica/source/common/dmtbinfo3.c          |  20 +++
>  src/acpica/source/compiler/aslcompile.c       |   2 +-
>  src/acpica/source/compiler/aslerror.c         |   4 +-
>  src/acpica/source/compiler/aslload.c          |  97 +++++++++-----
>  src/acpica/source/compiler/aslmain.c          |   2 +-
>  src/acpica/source/compiler/aslmessages.c      |   6 +-
>  src/acpica/source/compiler/aslmessages.h      |   2 +
>  src/acpica/source/compiler/aslpredef.c        |   2 +-
>  src/acpica/source/compiler/aslxref.c          |  46 ++++++-
>  src/acpica/source/compiler/dtio.c             |  28 +++-
>  src/acpica/source/compiler/dttable2.c         |  66 ++++++++++
>  src/acpica/source/compiler/prscan.c           |   1 -
>  .../source/components/debugger/dbxface.c      | 122 +++++++++++-------
>  .../source/components/dispatcher/dsopcode.c   |   3 +
>  .../source/components/dispatcher/dswload2.c   |   9 ++
>  .../source/components/namespace/nsaccess.c    |  21 ++-
>  src/acpica/source/components/parser/psloop.c  |  22 +++-
>  .../source/components/parser/psobject.c       |   2 +-
>  .../source/components/tables/tbxfload.c       |   2 +-
>  src/acpica/source/include/acdisasm.h          |   2 +
>  src/acpica/source/include/acnamesp.h          |   1 +
>  src/acpica/source/include/acpixf.h            |   9 +-
>  src/acpica/source/include/actbinfo.h          |   2 +
>  src/acpica/source/include/actbl3.h            |  28 ++++
>  27 files changed, 443 insertions(+), 110 deletions(-)
>
> diff --git a/src/acpica/fwts_acpica.c b/src/acpica/fwts_acpica.c
> index d0c6ed7c..75f8fe3d 100644
> --- a/src/acpica/fwts_acpica.c
> +++ b/src/acpica/fwts_acpica.c
> @@ -1061,7 +1061,6 @@ int fwts_acpica_init(fwts_framework *fw)
>  		FWTS_ACPICA_MODE(fw, FWTS_ACPICA_MODE_IGNORE_ERRORS);
>  	AcpiGbl_DisableAutoRepair =
>  		FWTS_ACPICA_MODE(fw, FWTS_ACPICA_MODE_DISABLE_AUTO_REPAIR);
> -	AcpiGbl_GroupModuleLevelCode = FALSE;
>  	AcpiGbl_CstyleDisassembly = FALSE;
>  
>  	pthread_mutex_init(&mutex_lock_sem_table, NULL);
> diff --git a/src/acpica/source/common/adisasm.c b/src/acpica/source/common/adisasm.c
> index ed35f31a..70f7932b 100644
> --- a/src/acpica/source/common/adisasm.c
> +++ b/src/acpica/source/common/adisasm.c
> @@ -775,7 +775,6 @@ AdDoExternalFileList (
>              AcpiDmFinishNamespaceLoad (AcpiGbl_ParseOpRoot,
>                  AcpiGbl_RootNode, OwnerId);
>              AcpiPsDeleteParseTree (AcpiGbl_ParseOpRoot);
> -            AcpiGbl_ParseOpRoot = NULL;  /* for fwts */
>  
>              ExternalListHead = ExternalListHead->Next;
>          }
> diff --git a/src/acpica/source/common/dmtbdump3.c b/src/acpica/source/common/dmtbdump3.c
> index 3c1dea6c..1bc3fa6c 100644
> --- a/src/acpica/source/common/dmtbdump3.c
> +++ b/src/acpica/source/common/dmtbdump3.c
> @@ -486,6 +486,51 @@ AcpiDmDumpTcpa (
>  }
>  
>  
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDmDumpTpm2
> + *
> + * PARAMETERS:  Table               - A TPM2 table
> + *
> + * RETURN:      None
> + *
> + * DESCRIPTION: Format the contents of a TPM2.
> + *
> + ******************************************************************************/
> +static void
> +AcpiDmDumpTpm2Rev3 (
> +    ACPI_TABLE_HEADER       *Table)
> +{
> +    UINT32                  Offset = sizeof (ACPI_TABLE_TPM23);
> +    ACPI_TABLE_TPM23        *CommonHeader = ACPI_CAST_PTR (ACPI_TABLE_TPM23, Table);
> +    ACPI_TPM23_TRAILER      *Subtable = ACPI_ADD_PTR (ACPI_TPM23_TRAILER, Table, Offset);
> +    ACPI_STATUS             Status;
> +
> +
> +    /* Main table */
> +
> +    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm23);
> +    if (ACPI_FAILURE (Status))
> +    {
> +        return;
> +    }
> +
> +    /* Optional subtable if start method is ACPI start method */
> +
> +    switch (CommonHeader->StartMethod)
> +    {
> +    case ACPI_TPM23_ACPI_START_METHOD:
> +
> +        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> +            Table->Length - Offset, AcpiDmTableInfoTpm23a);
> +        break;
> +
> +    default:
> +        break;
> +    }
> +}
> +
> +
>  /*******************************************************************************
>   *
>   * FUNCTION:    AcpiDmDumpTpm2
> @@ -509,9 +554,16 @@ AcpiDmDumpTpm2 (
>      ACPI_STATUS             Status;
>  
>  
> +    if (Table->Revision == 3)
> +    {
> +        AcpiDmDumpTpm2Rev3(Table);
> +        return;
> +    }
> +
>      /* Main table */
>  
>      Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm2);
> +
>      if (ACPI_FAILURE (Status))
>      {
>          return;
> diff --git a/src/acpica/source/common/dmtbinfo3.c b/src/acpica/source/common/dmtbinfo3.c
> index c82e3db5..33d99287 100644
> --- a/src/acpica/source/common/dmtbinfo3.c
> +++ b/src/acpica/source/common/dmtbinfo3.c
> @@ -446,6 +446,26 @@ ACPI_DMTABLE_INFO           AcpiDmTableInfoTcpaServer[] =
>   *
>   ******************************************************************************/
>  
> +/* TPM2 revision 3 */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoTpm23[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_TPM23_OFFSET (Reserved),           "Reserved", 0},
> +    {ACPI_DMT_UINT64,   ACPI_TPM23_OFFSET (ControlAddress),     "Control Address", 0},
> +    {ACPI_DMT_UINT32,   ACPI_TPM23_OFFSET (StartMethod),        "Start Method", 0},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* Trailer in the case that StartMethod == 2 */
> +
> +ACPI_DMTABLE_INFO           AcpiDmTableInfoTpm23a[] =
> +{
> +    {ACPI_DMT_UINT32,   ACPI_TPM23A_OFFSET (Reserved),          "Reserved", DT_OPTIONAL},
> +    ACPI_DMT_TERMINATOR
> +};
> +
> +/* TPM2 revision 4 */
> +
>  ACPI_DMTABLE_INFO           AcpiDmTableInfoTpm2[] =
>  {
>      {ACPI_DMT_UINT16,   ACPI_TPM2_OFFSET (PlatformClass),           "Platform Class", 0},
> diff --git a/src/acpica/source/compiler/aslcompile.c b/src/acpica/source/compiler/aslcompile.c
> index e08442e0..4ae19076 100644
> --- a/src/acpica/source/compiler/aslcompile.c
> +++ b/src/acpica/source/compiler/aslcompile.c
> @@ -858,7 +858,7 @@ CmCleanupAndExit (
>  
>      if (AslGbl_ExceptionCount[ASL_ERROR] > ASL_MAX_ERROR_COUNT)
>      {
> -        printf ("\nMaximum error count (%u) exceeded\n",
> +        printf ("\nMaximum error count (%d) exceeded\n",
>              ASL_MAX_ERROR_COUNT);
>      }
>  
> diff --git a/src/acpica/source/compiler/aslerror.c b/src/acpica/source/compiler/aslerror.c
> index 6d45cd40..10ea3ec1 100644
> --- a/src/acpica/source/compiler/aslerror.c
> +++ b/src/acpica/source/compiler/aslerror.c
> @@ -1097,7 +1097,7 @@ AslExpectException (
>  
>      if (AslGbl_ExpectedMessagesIndex >= ASL_MAX_EXPECTED_MESSAGES)
>      {
> -        printf ("Too many messages have been registered as expected (max %u)\n",
> +        printf ("Too many messages have been registered as expected (max %d)\n",
>              ASL_MAX_DISABLED_MESSAGES);
>          return (AE_LIMIT);
>      }
> @@ -1144,7 +1144,7 @@ AslDisableException (
>  
>      if (AslGbl_DisabledMessagesIndex >= ASL_MAX_DISABLED_MESSAGES)
>      {
> -        printf ("Too many messages have been disabled (max %u)\n",
> +        printf ("Too many messages have been disabled (max %d)\n",
>              ASL_MAX_DISABLED_MESSAGES);
>          return (AE_LIMIT);
>      }
> diff --git a/src/acpica/source/compiler/aslload.c b/src/acpica/source/compiler/aslload.c
> index 5bb0a851..7f29b90c 100644
> --- a/src/acpica/source/compiler/aslload.c
> +++ b/src/acpica/source/compiler/aslload.c
> @@ -417,10 +417,8 @@ LdLoadResourceElements (
>          {
>              Status = AcpiNsLookup (WalkState->ScopeInfo,
>                  InitializerOp->Asl.ExternalName,
> -                ACPI_TYPE_LOCAL_RESOURCE_FIELD,
> -                ACPI_IMODE_LOAD_PASS1,
> -                ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE,
> -                NULL, &Node);
> +                ACPI_TYPE_LOCAL_RESOURCE_FIELD, ACPI_IMODE_LOAD_PASS1,
> +                ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE, NULL, &Node);
>              if (ACPI_FAILURE (Status))
>              {
>                  return (Status);
> @@ -687,8 +685,7 @@ LdNamespace1Begin (
>           * handle this case. Perhaps someday this case can go away.
>           */
>          Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_ANY,
> -            ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT,
> -            WalkState, &(Node));
> +            ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &Node);
>          if (ACPI_FAILURE (Status))
>          {
>              if (Status == AE_NOT_FOUND)
> @@ -696,23 +693,26 @@ LdNamespace1Begin (
>                  /* The name was not found, go ahead and create it */
>  
>                  Status = AcpiNsLookup (WalkState->ScopeInfo, Path,
> -                    ACPI_TYPE_LOCAL_SCOPE,
> -                    ACPI_IMODE_LOAD_PASS1, Flags,
> -                    WalkState, &(Node));
> +                    ACPI_TYPE_LOCAL_SCOPE, ACPI_IMODE_LOAD_PASS1,
> +                    Flags, WalkState, &Node);
>                  if (ACPI_FAILURE (Status))
>                  {
>                      return_ACPI_STATUS (Status);
>                  }
>  
> -                /*
> -                 * However, this is an error -- primarily because the MS
> -                 * interpreter can't handle a forward reference from the
> -                 * Scope() operator.
> -                 */
> -                AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
> -                    Op->Asl.ExternalName);
> -                AslError (ASL_ERROR, ASL_MSG_SCOPE_FWD_REF, Op,
> -                    Op->Asl.ExternalName);
> +                /* However, this is an error -- operand to Scope must exist */
> +
> +                if (strlen (Op->Asl.ExternalName) == ACPI_NAME_SIZE)
> +                {
> +                    AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
> +                        Op->Asl.ExternalName);
> +                }
> +                else
> +                {
> +                    AslError (ASL_ERROR, ASL_MSG_NAMEPATH_NOT_EXIST, Op,
> +                        Op->Asl.ExternalName);
> +                }
> +
>                  goto FinishNode;
>              }
>  
> @@ -824,7 +824,6 @@ LdNamespace1Begin (
>          break;
>      }
>  
> -
>      ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Loading name: %s, (%s)\n",
>          Op->Asl.ExternalName, AcpiUtGetTypeName (ObjectType)));
>  
> @@ -832,6 +831,18 @@ LdNamespace1Begin (
>  
>      Flags |= ACPI_NS_ERROR_IF_FOUND;
>  
> +    /*
> +     * For opcodes that enter new names into the namespace,
> +     * all prefix NameSegs must exist.
> +     */
> +    WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode);
> +    if (((WalkState->OpInfo->Flags & AML_NAMED) ||
> +        (WalkState->OpInfo->Flags & AML_CREATE)) &&
> +        (Op->Asl.AmlOpcode != AML_EXTERNAL_OP))
> +    {
> +        Flags |= ACPI_NS_PREFIX_MUST_EXIST;
> +    }
> +
>      /*
>       * Enter the named type into the internal namespace. We enter the name
>       * as we go downward in the parse tree. Any necessary subobjects that
> @@ -915,8 +926,20 @@ LdNamespace1Begin (
>                  return_ACPI_STATUS (AE_OK);
>              }
>          }
> +        else if (AE_NOT_FOUND)
> +        {
> +            /*
> +             * One or more prefix NameSegs of the NamePath do not exist
> +             * (all of them must exist). Attempt to continue compilation
> +             * by setting the current scope to the root.
> +             */
> +            Node = AcpiGbl_RootNode;
> +            Status = AE_OK;
> +        }
>          else
>          {
> +            /* Flag all other errors as coming from the ACPICA core */
> +
>              AslCoreSubsystemError (Op, Status,
>                  "Failure from namespace lookup", FALSE);
>              return_ACPI_STATUS (Status);
> @@ -1043,10 +1066,10 @@ LdNamespace2Begin (
>  
>      if (Op->Asl.ParseOpcode == PARSEOP_ALIAS)
>      {
> -        /* Complete the alias node by getting and saving the target node */
> -
> -        /* First child is the alias target */
> -
> +        /*
> +         * Complete the alias node by getting and saving the target node.
> +         * First child is the alias target
> +         */
>          Arg = Op->Asl.Child;
>  
>          /* Get the target pathname */
> @@ -1070,18 +1093,34 @@ LdNamespace2Begin (
>          {
>              if (Status == AE_NOT_FOUND)
>              {
> -                AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
> -                    Op->Asl.ExternalName);
> +                /* Standalone NameSeg vs. NamePath */
> +
> +                if (strlen (Arg->Asl.ExternalName) == ACPI_NAME_SIZE)
> +                {
> +                    AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
> +                        Arg->Asl.ExternalName);
> +                }
> +                else
> +                {
> +                    AslError (ASL_ERROR, ASL_MSG_NAMEPATH_NOT_EXIST, Op,
> +                        Arg->Asl.ExternalName);
> +                }
>  
> +#if 0
> +/*
> + * NOTE: Removed 10/2018 to enhance compiler error reporting. No
> + * regressions seen.
> + */
>                  /*
>                   * The name was not found, go ahead and create it.
>                   * This prevents more errors later.
>                   */
>                  Status = AcpiNsLookup (WalkState->ScopeInfo, Path,
> -                    ACPI_TYPE_ANY,
> -                    ACPI_IMODE_LOAD_PASS1, ACPI_NS_NO_UPSEARCH,
> -                    WalkState, &(Node));
> -                return (AE_OK);
> +                    ACPI_TYPE_ANY, ACPI_IMODE_LOAD_PASS1,
> +                    ACPI_NS_NO_UPSEARCH, WalkState, &Node);
> +#endif
> +                return (Status);
> +/* Removed: return (AE_OK)*/
>              }
>  
>              AslCoreSubsystemError (Op, Status,
> diff --git a/src/acpica/source/compiler/aslmain.c b/src/acpica/source/compiler/aslmain.c
> index 4f24bb3e..70386f8a 100644
> --- a/src/acpica/source/compiler/aslmain.c
> +++ b/src/acpica/source/compiler/aslmain.c
> @@ -329,7 +329,7 @@ AslSignalHandler (
>  
>      default:
>  
> -        printf (ASL_PREFIX "Unknown interrupt signal (%u)\n", Sig);
> +        printf (ASL_PREFIX "Unknown interrupt signal (%d)\n", Sig);
>          break;
>      }
>  
> diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c
> index 14e140b2..23297183 100644
> --- a/src/acpica/source/compiler/aslmessages.c
> +++ b/src/acpica/source/compiler/aslmessages.c
> @@ -285,7 +285,7 @@ const char                      *AslCompilerMsgs [] =
>  /*    ASL_MSG_NON_ASCII */                  "Invalid characters found in file",
>  /*    ASL_MSG_NON_ZERO */                   "Operand evaluates to zero",
>  /*    ASL_MSG_NOT_EXIST */                  "Object does not exist",
> -/*    ASL_MSG_NOT_FOUND */                  "Object not found or not accessible from scope",
> +/*    ASL_MSG_NOT_FOUND */                  "Object not found or not accessible from current scope",
>  /*    ASL_MSG_NOT_METHOD */                 "Not a control method, cannot invoke",
>  /*    ASL_MSG_NOT_PARAMETER */              "Not a parameter, used as local only",
>  /*    ASL_MSG_NOT_REACHABLE */              "Object is not accessible from this scope",
> @@ -359,7 +359,9 @@ const char                      *AslCompilerMsgs [] =
>  /*    ASL_MSG_OEM_ID */                     "Invalid OEM ID",
>  /*    ASL_MSG_UNLOAD */                     "Unload is not supported by all operating systems",
>  /*    ASL_MSG_OFFSET */                     "Unnecessary/redundant use of Offset operator",
> -/*    ASL_MSG_LONG_SLEEP */                 "Very long Sleep, greater than 1 second"
> +/*    ASL_MSG_LONG_SLEEP */                 "Very long Sleep, greater than 1 second",
> +/*    ASL_MSG_PREFIX_NOT_EXIST */           "One or more prefix Scopes do not exist",
> +/*    ASL_MSG_NAMEPATH_NOT_EXIST */         "One or more objects within the Pathname do not exist"
>  };
>  
>  /* Table compiler */
> diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h
> index 907744a2..c932aded 100644
> --- a/src/acpica/source/compiler/aslmessages.h
> +++ b/src/acpica/source/compiler/aslmessages.h
> @@ -362,6 +362,8 @@ typedef enum
>      ASL_MSG_UNLOAD,
>      ASL_MSG_OFFSET,
>      ASL_MSG_LONG_SLEEP,
> +    ASL_MSG_PREFIX_NOT_EXIST,
> +    ASL_MSG_NAMEPATH_NOT_EXIST,
>  
>      /* These messages are used by the Data Table compiler only */
>  
> diff --git a/src/acpica/source/compiler/aslpredef.c b/src/acpica/source/compiler/aslpredef.c
> index bc30fe91..ae806412 100644
> --- a/src/acpica/source/compiler/aslpredef.c
> +++ b/src/acpica/source/compiler/aslpredef.c
> @@ -222,7 +222,7 @@ ApCheckForPredefinedMethod (
>  
>          if (MethodInfo->NumArguments != 0)
>          {
> -            sprintf (AslGbl_MsgBuffer, "%s requires %u", Op->Asl.ExternalName, 0);
> +            sprintf (AslGbl_MsgBuffer, "%s requires %d", Op->Asl.ExternalName, 0);
>  
>              AslError (ASL_WARNING, ASL_MSG_RESERVED_ARG_COUNT_HI, Op,
>                  AslGbl_MsgBuffer);
> diff --git a/src/acpica/source/compiler/aslxref.c b/src/acpica/source/compiler/aslxref.c
> index 5273ea82..8b213577 100644
> --- a/src/acpica/source/compiler/aslxref.c
> +++ b/src/acpica/source/compiler/aslxref.c
> @@ -718,11 +718,34 @@ XfNamespaceLocateBegin (
>              }
>              else
>              {
> -                /* Check for a fully qualified path */
> +                /* The NamePath contains multiple NameSegs */
>  
> -                if (Path[0] == AML_ROOT_PREFIX)
> +                if ((OpInfo->Flags & AML_CREATE) ||
> +                    (OpInfo->ObjectType == ACPI_TYPE_LOCAL_ALIAS))
>                  {
> -                    /* Gave full path, the object does not exist */
> +                    /*
> +                     * The new name is the last parameter. For the
> +                     * CreateXXXXField and Alias operators
> +                     */
> +                    NextOp = Op->Asl.Child;
> +                    while (!(NextOp->Asl.CompileFlags & OP_IS_NAME_DECLARATION))
> +                    {
> +                        NextOp = NextOp->Asl.Next;
> +                    }
> +
> +                    AslError (ASL_ERROR, ASL_MSG_PREFIX_NOT_EXIST, NextOp,
> +                        NextOp->Asl.ExternalName);
> +                }
> +                else if (OpInfo->Flags & AML_NAMED)
> +                {
> +                    /* The new name is the first parameter */
> +
> +                    AslError (ASL_ERROR, ASL_MSG_PREFIX_NOT_EXIST, Op,
> +                        Op->Asl.ExternalName);
> +                }
> +                else if (Path[0] == AML_ROOT_PREFIX)
> +                {
> +                    /* Full namepath from root, the object does not exist */
>  
>                      AslError (ASL_ERROR, ASL_MSG_NOT_EXIST, Op,
>                          Op->Asl.ExternalName);
> @@ -730,11 +753,20 @@ XfNamespaceLocateBegin (
>                  else
>                  {
>                      /*
> -                     * We can't tell whether it doesn't exist or just
> -                     * can't be reached.
> +                     * Generic "not found" error. Cannot determine whether it
> +                     * doesn't exist or just can't be reached. However, we
> +                     * can differentiate between a NameSeg vs. NamePath.
>                       */
> -                    AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
> -                        Op->Asl.ExternalName);
> +                    if (strlen (Op->Asl.ExternalName) == ACPI_NAME_SIZE)
> +                    {
> +                        AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
> +                            Op->Asl.ExternalName);
> +                    }
> +                    else
> +                    {
> +                        AslError (ASL_ERROR, ASL_MSG_NAMEPATH_NOT_EXIST, Op,
> +                            Op->Asl.ExternalName);
> +                    }
>                  }
>              }
>  
> diff --git a/src/acpica/source/compiler/dtio.c b/src/acpica/source/compiler/dtio.c
> index b15d3b97..bd189053 100644
> --- a/src/acpica/source/compiler/dtio.c
> +++ b/src/acpica/source/compiler/dtio.c
> @@ -236,7 +236,7 @@ DtTrim (
>  
>      /* Skip lines that start with a space */
>  
> -    if (!strcmp (String, " "))
> +    if (*String == 0 || !strcmp (String, " "))
>      {
>          ReturnString = UtLocalCacheCalloc (1);
>          return (ReturnString);
> @@ -258,7 +258,7 @@ DtTrim (
>  
>      while (End >= Start)
>      {
> -        if (*End == '\r' || *End == '\n')
> +        if (*End == '\n')
>          {
>              End--;
>              continue;
> @@ -522,6 +522,7 @@ DtGetNextLine (
>      UINT32                  CurrentLineOffset;
>      UINT32                  i;
>      int                     c;
> +    int                     c1;
>  
>  
>      memset (AslGbl_CurrentLineBuffer, 0, AslGbl_LineBufferSize);
> @@ -569,6 +570,29 @@ DtGetNextLine (
>              c = '\n';
>              State = DT_NORMAL_TEXT;
>          }
> +        else if (c == '\r')
> +        {
> +            c1 = getc (Handle);
> +            if (c1 == '\n')
> +            {
> +                /*
> +                 * Skip the carriage return as if it didn't exist. This is
> +                 * onlt meant for input files in DOS format in unix. fopen in
> +                 * unix may not support "text mode" and leaves CRLF intact.
> +                 */
> +                c = '\n';
> +            }
> +            else
> +            {
> +                /* This was not a CRLF. Only a CR */
> +
> +                ungetc(c1, Handle);
> +
> +                DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL,
> +                    "Carriage return without linefeed detected");
> +                return (ASL_EOF);
> +            }
> +        }
>  
>          switch (State)
>          {
> diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c
> index 3f970377..0b196a2f 100644
> --- a/src/acpica/source/compiler/dttable2.c
> +++ b/src/acpica/source/compiler/dttable2.c
> @@ -1876,6 +1876,62 @@ DtCompileTcpa (
>  }
>  
>  
> +/******************************************************************************
> + *
> + * FUNCTION:    DtCompileTpm2Rev3
> + *
> + * PARAMETERS:  PFieldList          - Current field list pointer
> + *
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Compile TPM2 revision 3
> + *
> + *****************************************************************************/
> +static ACPI_STATUS
> +DtCompileTpm2Rev3 (
> +    void                    **List)
> +{
> +    DT_FIELD                **PFieldList = (DT_FIELD **) List;
> +    DT_SUBTABLE             *Subtable;
> +    ACPI_TABLE_TPM23        *Tpm23Header;
> +    DT_SUBTABLE             *ParentTable;
> +    ACPI_STATUS             Status = AE_OK;
> +
> +
> +    Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm23,
> +        &Subtable);
> +
> +    ParentTable = DtPeekSubtable ();
> +    DtInsertSubtable (ParentTable, Subtable);
> +    Tpm23Header = ACPI_CAST_PTR (ACPI_TABLE_TPM23, ParentTable->Buffer);
> +
> +    /* Subtable type depends on the StartMethod */
> +
> +    switch (Tpm23Header->StartMethod)
> +    {
> +    case ACPI_TPM23_ACPI_START_METHOD:
> +
> +        /* Subtable specific to to ARM_SMC */
> +
> +        Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm23a,
> +            &Subtable);
> +        if (ACPI_FAILURE (Status))
> +        {
> +            return (Status);
> +        }
> +
> +        ParentTable = DtPeekSubtable ();
> +        DtInsertSubtable (ParentTable, Subtable);
> +        break;
> +
> +    default:
> +        break;
> +    }
> +
> +    return (Status);
> +}
> +
> +
>  /******************************************************************************
>   *
>   * FUNCTION:    DtCompileTpm2
> @@ -1897,8 +1953,18 @@ DtCompileTpm2 (
>      ACPI_TABLE_TPM2         *Tpm2Header;
>      DT_SUBTABLE             *ParentTable;
>      ACPI_STATUS             Status = AE_OK;
> +    ACPI_TABLE_HEADER       *Header;
>  
>  
> +    ParentTable = DtPeekSubtable ();
> +
> +    Header = ACPI_CAST_PTR (ACPI_TABLE_HEADER, ParentTable->Buffer);
> +
> +    if (Header->Revision == 3)
> +    {
> +        return (DtCompileTpm2Rev3 (List));
> +    }
> +
>      /* Compile the main table */
>  
>      Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm2,
> diff --git a/src/acpica/source/compiler/prscan.c b/src/acpica/source/compiler/prscan.c
> index 580b47f0..325569ed 100644
> --- a/src/acpica/source/compiler/prscan.c
> +++ b/src/acpica/source/compiler/prscan.c
> @@ -1259,7 +1259,6 @@ PrPopDirective (
>          AslGbl_DirectiveInfo[Info->Directive].Name,
>          Info->Argument, AslGbl_IgnoringThisCodeBlock ? "TRUE" : "FALSE");
>  
> -    ACPI_FREE (Info);
>      return (AE_OK);
>  }
>  
> diff --git a/src/acpica/source/components/debugger/dbxface.c b/src/acpica/source/components/debugger/dbxface.c
> index c661b248..a0f3ed6b 100644
> --- a/src/acpica/source/components/debugger/dbxface.c
> +++ b/src/acpica/source/components/debugger/dbxface.c
> @@ -174,6 +174,12 @@ AcpiDbMethodEnd (
>      ACPI_WALK_STATE         *WalkState);
>  #endif
>  
> +#ifdef ACPI_DISASSEMBLER
> +static ACPI_PARSE_OBJECT *
> +AcpiDbGetDisplayOp (
> +    ACPI_WALK_STATE         *WalkState,
> +    ACPI_PARSE_OBJECT       *Op);
> +#endif
>  
>  /*******************************************************************************
>   *
> @@ -273,6 +279,74 @@ AcpiDbSignalBreakPoint (
>  }
>  
>  
> +#ifdef ACPI_DISASSEMBLER
> +/*******************************************************************************
> + *
> + * FUNCTION:    AcpiDbGetDisplayOp
> + *
> + * PARAMETERS:  WalkState       - Current walk
> + *              Op              - Current executing op (from aml interpreter)
> + *
> + * RETURN:      Opcode to display
> + *
> + * DESCRIPTION: Find the opcode to display during single stepping
> + *
> + ******************************************************************************/
> +
> +static ACPI_PARSE_OBJECT *
> +AcpiDbGetDisplayOp (
> +    ACPI_WALK_STATE         *WalkState,
> +    ACPI_PARSE_OBJECT       *Op)
> +{
> +    ACPI_PARSE_OBJECT       *DisplayOp;
> +    ACPI_PARSE_OBJECT       *ParentOp;
> +
> +    DisplayOp = Op;
> +    ParentOp = Op->Common.Parent;
> +    if (ParentOp)
> +    {
> +        if ((WalkState->ControlState) &&
> +            (WalkState->ControlState->Common.State ==
> +                ACPI_CONTROL_PREDICATE_EXECUTING))
> +        {
> +            /*
> +             * We are executing the predicate of an IF or WHILE statement
> +             * Search upwards for the containing IF or WHILE so that the
> +             * entire predicate can be displayed.
> +             */
> +            while (ParentOp)
> +            {
> +                if ((ParentOp->Common.AmlOpcode == AML_IF_OP) ||
> +                    (ParentOp->Common.AmlOpcode == AML_WHILE_OP))
> +                {
> +                    DisplayOp = ParentOp;
> +                    break;
> +                }
> +                ParentOp = ParentOp->Common.Parent;
> +            }
> +        }
> +        else
> +        {
> +            while (ParentOp)
> +            {
> +                if ((ParentOp->Common.AmlOpcode == AML_IF_OP)     ||
> +                    (ParentOp->Common.AmlOpcode == AML_ELSE_OP)   ||
> +                    (ParentOp->Common.AmlOpcode == AML_SCOPE_OP)  ||
> +                    (ParentOp->Common.AmlOpcode == AML_METHOD_OP) ||
> +                    (ParentOp->Common.AmlOpcode == AML_WHILE_OP))
> +                {
> +                    break;
> +                }
> +                DisplayOp = ParentOp;
> +                ParentOp = ParentOp->Common.Parent;
> +            }
> +        }
> +    }
> +    return DisplayOp;
> +}
> +#endif
> +
> +
>  /*******************************************************************************
>   *
>   * FUNCTION:    AcpiDbSingleStep
> @@ -296,8 +370,6 @@ AcpiDbSingleStep (
>      ACPI_PARSE_OBJECT       *Next;
>      ACPI_STATUS             Status = AE_OK;
>      UINT32                  OriginalDebugLevel;
> -    ACPI_PARSE_OBJECT       *DisplayOp;
> -    ACPI_PARSE_OBJECT       *ParentOp;
>      UINT32                  AmlOffset;
>  
>  
> @@ -393,53 +465,11 @@ AcpiDbSingleStep (
>          Next = Op->Common.Next;
>          Op->Common.Next = NULL;
>  
> -
> -        DisplayOp = Op;
> -        ParentOp = Op->Common.Parent;
> -        if (ParentOp)
> -        {
> -            if ((WalkState->ControlState) &&
> -                (WalkState->ControlState->Common.State ==
> -                    ACPI_CONTROL_PREDICATE_EXECUTING))
> -            {
> -                /*
> -                 * We are executing the predicate of an IF or WHILE statement
> -                 * Search upwards for the containing IF or WHILE so that the
> -                 * entire predicate can be displayed.
> -                 */
> -                while (ParentOp)
> -                {
> -                    if ((ParentOp->Common.AmlOpcode == AML_IF_OP) ||
> -                        (ParentOp->Common.AmlOpcode == AML_WHILE_OP))
> -                    {
> -                        DisplayOp = ParentOp;
> -                        break;
> -                    }
> -                    ParentOp = ParentOp->Common.Parent;
> -                }
> -            }
> -            else
> -            {
> -                while (ParentOp)
> -                {
> -                    if ((ParentOp->Common.AmlOpcode == AML_IF_OP)     ||
> -                        (ParentOp->Common.AmlOpcode == AML_ELSE_OP)   ||
> -                        (ParentOp->Common.AmlOpcode == AML_SCOPE_OP)  ||
> -                        (ParentOp->Common.AmlOpcode == AML_METHOD_OP) ||
> -                        (ParentOp->Common.AmlOpcode == AML_WHILE_OP))
> -                    {
> -                        break;
> -                    }
> -                    DisplayOp = ParentOp;
> -                    ParentOp = ParentOp->Common.Parent;
> -                }
> -            }
> -        }
> -
>          /* Now we can disassemble and display it */
>  
>  #ifdef ACPI_DISASSEMBLER
> -        AcpiDmDisassemble (WalkState, DisplayOp, ACPI_UINT32_MAX);
> +        AcpiDmDisassemble (WalkState, AcpiDbGetDisplayOp (WalkState, Op),
> +            ACPI_UINT32_MAX);
>  #else
>          /*
>           * The AML Disassembler is not configured - at least we can
> diff --git a/src/acpica/source/components/dispatcher/dsopcode.c b/src/acpica/source/components/dispatcher/dsopcode.c
> index 038993c7..ca2cd470 100644
> --- a/src/acpica/source/components/dispatcher/dsopcode.c
> +++ b/src/acpica/source/components/dispatcher/dsopcode.c
> @@ -586,6 +586,9 @@ AcpiDsEvalRegionOperands (
>          ObjDesc, ACPI_FORMAT_UINT64 (ObjDesc->Region.Address),
>          ObjDesc->Region.Length));
>  
> +    Status = AcpiUtAddAddressRange (ObjDesc->Region.SpaceId,
> +        ObjDesc->Region.Address, ObjDesc->Region.Length, Node);
> +
>      /* Now the address and length are valid for this opregion */
>  
>      ObjDesc->Region.Flags |= AOPOBJ_DATA_VALID;
> diff --git a/src/acpica/source/components/dispatcher/dswload2.c b/src/acpica/source/components/dispatcher/dswload2.c
> index 9bc6ecfa..4b6e41d8 100644
> --- a/src/acpica/source/components/dispatcher/dswload2.c
> +++ b/src/acpica/source/components/dispatcher/dswload2.c
> @@ -448,6 +448,15 @@ AcpiDsLoad2BeginOp (
>          }
>  #endif
>  
> +        /*
> +         * For name creation opcodes, the full namepath prefix must
> +         * exist, except for the final (new) nameseg.
> +         */
> +        if (WalkState->OpInfo->Flags & AML_NAMED)
> +        {
> +            Flags |= ACPI_NS_PREFIX_MUST_EXIST;
> +        }
> +
>          /* Add new entry or lookup existing entry */
>  
>          Status = AcpiNsLookup (WalkState->ScopeInfo, BufferPtr, ObjectType,
> diff --git a/src/acpica/source/components/namespace/nsaccess.c b/src/acpica/source/components/namespace/nsaccess.c
> index af97c51f..11c652e0 100644
> --- a/src/acpica/source/components/namespace/nsaccess.c
> +++ b/src/acpica/source/components/namespace/nsaccess.c
> @@ -421,6 +421,7 @@ AcpiNsLookup (
>      ACPI_OBJECT_TYPE        ThisSearchType;
>      UINT32                  SearchParentFlag = ACPI_NS_SEARCH_PARENT;
>      UINT32                  LocalFlags;
> +    ACPI_INTERPRETER_MODE   LocalInterpreterMode;
>  
>  
>      ACPI_FUNCTION_TRACE (NsLookup);
> @@ -670,6 +671,7 @@ AcpiNsLookup (
>       */
>      ThisSearchType = ACPI_TYPE_ANY;
>      CurrentNode = ThisNode;
> +
>      while (NumSegments && CurrentNode)
>      {
>          NumSegments--;
> @@ -704,6 +706,16 @@ AcpiNsLookup (
>              }
>          }
>  
> +        /* Handle opcodes that create a new NameSeg via a full NamePath */
> +
> +        LocalInterpreterMode = InterpreterMode;
> +        if ((Flags & ACPI_NS_PREFIX_MUST_EXIST) && (NumSegments > 0))
> +        {
> +            /* Every element of the path must exist (except for the final NameSeg) */
> +
> +            LocalInterpreterMode = ACPI_IMODE_EXECUTE;
> +        }
> +
>          /* Extract one ACPI name from the front of the pathname */
>  
>          ACPI_MOVE_32_TO_32 (&SimpleName, Path);
> @@ -711,11 +723,18 @@ AcpiNsLookup (
>          /* Try to find the single (4 character) ACPI name */
>  
>          Status = AcpiNsSearchAndEnter (SimpleName, WalkState, CurrentNode,
> -            InterpreterMode, ThisSearchType, LocalFlags, &ThisNode);
> +            LocalInterpreterMode, ThisSearchType, LocalFlags, &ThisNode);
>          if (ACPI_FAILURE (Status))
>          {
>              if (Status == AE_NOT_FOUND)
>              {
> +#if !defined ACPI_ASL_COMPILER /* Note: iASL reports this error by itself, not needed here */
> +                if (Flags & ACPI_NS_PREFIX_MUST_EXIST)
> +                {
> +                    AcpiOsPrintf (ACPI_MSG_BIOS_ERROR
> +                        "Object does not exist: %4.4s\n", &SimpleName);
> +                }
> +#endif
>                  /* Name not found in ACPI namespace */
>  
>                  ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
> diff --git a/src/acpica/source/components/parser/psloop.c b/src/acpica/source/components/parser/psloop.c
> index ef517b54..9625834c 100644
> --- a/src/acpica/source/components/parser/psloop.c
> +++ b/src/acpica/source/components/parser/psloop.c
> @@ -298,7 +298,7 @@ AcpiPsGetArguments (
>           * future. Use of this option can cause problems with AML code that
>           * depends upon in-order immediate execution of module-level code.
>           */
> -        if (AcpiGbl_GroupModuleLevelCode &&
> +        if (!AcpiGbl_ExecuteTablesAsMethods &&
>              (WalkState->PassNumber <= ACPI_IMODE_LOAD_PASS2) &&
>              ((WalkState->ParseFlags & ACPI_PARSE_DISASSEMBLE) == 0))
>          {
> @@ -566,6 +566,7 @@ AcpiPsParseLoop (
>      ACPI_PARSE_OBJECT       *Op = NULL;     /* current op */
>      ACPI_PARSE_STATE        *ParserState;
>      UINT8                   *AmlOpStart = NULL;
> +    UINT8                   OpcodeLength;
>  
>  
>      ACPI_FUNCTION_TRACE_PTR (PsParseLoop, WalkState);
> @@ -654,7 +655,7 @@ AcpiPsParseLoop (
>                   * status to AE_OK to proceed with the table load.
>                   */
>                  if ((WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL) &&
> -                    Status == AE_ALREADY_EXISTS)
> +                    ((Status == AE_ALREADY_EXISTS) || (Status == AE_NOT_FOUND)))
>                  {
>                      Status = AE_OK;
>                  }
> @@ -686,9 +687,20 @@ AcpiPsParseLoop (
>                       * the scope op because the parse failure indicates that
>                       * the device may not exist.
>                       */
> -                    ACPI_ERROR ((AE_INFO, "Skip parsing opcode %s",
> -                        AcpiPsGetOpcodeName (WalkState->Opcode)));
> -                    WalkState->ParserState.Aml = WalkState->Aml + 1;
> +                    ACPI_INFO (("Skipping parse of AML opcode: %s (0x%4.4X)",
> +                        AcpiPsGetOpcodeName (WalkState->Opcode), WalkState->Opcode));
> +
> +                    /*
> +                     * Determine the opcode length before skipping the opcode.
> +                     * An opcode can be 1 byte or 2 bytes in length.
> +                     */
> +                    OpcodeLength = 1;
> +                    if ((WalkState->Opcode & 0xFF00) == AML_EXTENDED_OPCODE)
> +                    {
> +                        OpcodeLength = 2;
> +                    }
> +                    WalkState->ParserState.Aml = WalkState->Aml + OpcodeLength;
> +
>                      WalkState->ParserState.Aml =
>                          AcpiPsGetNextPackageEnd(&WalkState->ParserState);
>                      WalkState->Aml = WalkState->ParserState.Aml;
> diff --git a/src/acpica/source/components/parser/psobject.c b/src/acpica/source/components/parser/psobject.c
> index 8d6f81bd..ca7ab0ae 100644
> --- a/src/acpica/source/components/parser/psobject.c
> +++ b/src/acpica/source/components/parser/psobject.c
> @@ -773,7 +773,7 @@ AcpiPsCompleteOp (
>               * because there could be correct AML beyond the parts that caused
>               * the runtime error.
>               */
> -            ACPI_ERROR ((AE_INFO, "Ignore error and continue table load"));
> +            ACPI_INFO (("Ignoring error and continuing table load"));
>              return_ACPI_STATUS (AE_OK);
>          }
>          return_ACPI_STATUS (Status);
> diff --git a/src/acpica/source/components/tables/tbxfload.c b/src/acpica/source/components/tables/tbxfload.c
> index 0119b684..a956806e 100644
> --- a/src/acpica/source/components/tables/tbxfload.c
> +++ b/src/acpica/source/components/tables/tbxfload.c
> @@ -219,7 +219,7 @@ AcpiLoadTables (
>              "While loading namespace from ACPI tables"));
>      }
>  
> -    if (AcpiGbl_ExecuteTablesAsMethods || !AcpiGbl_GroupModuleLevelCode)
> +    if (AcpiGbl_ExecuteTablesAsMethods)
>      {
>          /*
>           * If the module-level code support is enabled, initialize the objects
> diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
> index b774b20f..edd108d2 100644
> --- a/src/acpica/source/include/acdisasm.h
> +++ b/src/acpica/source/include/acdisasm.h
> @@ -561,6 +561,8 @@ extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTcpaServer[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTpm2[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTpm2a[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTpm211[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTpm23[];
> +extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTpm23a[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoUefi[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoVrtc[];
>  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoVrtc0[];
> diff --git a/src/acpica/source/include/acnamesp.h b/src/acpica/source/include/acnamesp.h
> index 1e3db8d1..7c2083d3 100644
> --- a/src/acpica/source/include/acnamesp.h
> +++ b/src/acpica/source/include/acnamesp.h
> @@ -177,6 +177,7 @@
>  #define ACPI_NS_TEMPORARY           0x0040
>  #define ACPI_NS_OVERRIDE_IF_FOUND   0x0080
>  #define ACPI_NS_EARLY_INIT          0x0100
> +#define ACPI_NS_PREFIX_MUST_EXIST   0x0200
>  
>  /* Flags for AcpiNsWalkNamespace */
>  
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index aaf284cb..27e9aa7f 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                 0x20181003
> +#define ACPI_CA_VERSION                 0x20181031
>  
>  #include "acconfig.h"
>  #include "actypes.h"
> @@ -300,13 +300,6 @@ ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_CopyDsdtLocally, FALSE);
>   */
>  ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_DoNotUseXsdt, FALSE);
>  
> -/*
> - * Optionally support group module level code.
> - * NOTE, this is essentially obsolete and will be removed soon
> - * (01/2018).
> - */
> -ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_GroupModuleLevelCode, FALSE);
> -
>  /*
>   * Optionally support module level code by parsing an entire table as
>   * a method as it is loaded. Default is TRUE.
> diff --git a/src/acpica/source/include/actbinfo.h b/src/acpica/source/include/actbinfo.h
> index 347a3940..19eeeccb 100644
> --- a/src/acpica/source/include/actbinfo.h
> +++ b/src/acpica/source/include/actbinfo.h
> @@ -194,6 +194,7 @@
>  #define ACPI_STAO_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_STAO,f)
>  #define ACPI_TCPA_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_HDR,f)
>  #define ACPI_TPM2_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_TPM2,f)
> +#define ACPI_TPM23_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_TABLE_TPM23,f)
>  #define ACPI_UEFI_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_UEFI,f)
>  #define ACPI_WAET_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_WAET,f)
>  #define ACPI_WDAT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_WDAT,f)
> @@ -337,6 +338,7 @@
>  #define ACPI_TCPA_SERVER_OFFSET(f)      (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_SERVER,f)
>  #define ACPI_TPM2A_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_TPM2_TRAILER,f)
>  #define ACPI_TPM211_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_TPM2_ARM_SMC,f)
> +#define ACPI_TPM23A_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_TPM23_TRAILER,f)
>  #define ACPI_VRTC0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_VRTC_ENTRY,f)
>  #define ACPI_WDAT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_WDAT_ENTRY,f)
>  
> diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h
> index d4c15838..99b466c1 100644
> --- a/src/acpica/source/include/actbl3.h
> +++ b/src/acpica/source/include/actbl3.h
> @@ -552,6 +552,34 @@ typedef struct acpi_table_tcpa_server
>   *
>   ******************************************************************************/
>  
> +/* Revision 3 */
> +
> +typedef struct acpi_table_tpm23
> +{
> +    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
> +    UINT32                  Reserved;
> +    UINT64                  ControlAddress;
> +    UINT32                  StartMethod;
> +
> +} ACPI_TABLE_TPM23;
> +
> +/* Value for StartMethod above */
> +
> +#define ACPI_TPM23_ACPI_START_METHOD                 2
> +
> +/*
> + * Optional trailer for revision 3. If start method is 2, there is a 4 byte
> + * reserved area of all zeros.
> + */
> +typedef struct acpi_tmp23_trailer
> +{
> +    UINT32                  Reserved;
> +
> +} ACPI_TPM23_TRAILER;
> +
> +
> +/* Revision 4 */
> +
>  typedef struct acpi_table_tpm2
>  {
>      ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */


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

Patch

diff --git a/src/acpica/fwts_acpica.c b/src/acpica/fwts_acpica.c
index d0c6ed7c..75f8fe3d 100644
--- a/src/acpica/fwts_acpica.c
+++ b/src/acpica/fwts_acpica.c
@@ -1061,7 +1061,6 @@  int fwts_acpica_init(fwts_framework *fw)
 		FWTS_ACPICA_MODE(fw, FWTS_ACPICA_MODE_IGNORE_ERRORS);
 	AcpiGbl_DisableAutoRepair =
 		FWTS_ACPICA_MODE(fw, FWTS_ACPICA_MODE_DISABLE_AUTO_REPAIR);
-	AcpiGbl_GroupModuleLevelCode = FALSE;
 	AcpiGbl_CstyleDisassembly = FALSE;
 
 	pthread_mutex_init(&mutex_lock_sem_table, NULL);
diff --git a/src/acpica/source/common/adisasm.c b/src/acpica/source/common/adisasm.c
index ed35f31a..70f7932b 100644
--- a/src/acpica/source/common/adisasm.c
+++ b/src/acpica/source/common/adisasm.c
@@ -775,7 +775,6 @@  AdDoExternalFileList (
             AcpiDmFinishNamespaceLoad (AcpiGbl_ParseOpRoot,
                 AcpiGbl_RootNode, OwnerId);
             AcpiPsDeleteParseTree (AcpiGbl_ParseOpRoot);
-            AcpiGbl_ParseOpRoot = NULL;  /* for fwts */
 
             ExternalListHead = ExternalListHead->Next;
         }
diff --git a/src/acpica/source/common/dmtbdump3.c b/src/acpica/source/common/dmtbdump3.c
index 3c1dea6c..1bc3fa6c 100644
--- a/src/acpica/source/common/dmtbdump3.c
+++ b/src/acpica/source/common/dmtbdump3.c
@@ -486,6 +486,51 @@  AcpiDmDumpTcpa (
 }
 
 
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiDmDumpTpm2
+ *
+ * PARAMETERS:  Table               - A TPM2 table
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Format the contents of a TPM2.
+ *
+ ******************************************************************************/
+static void
+AcpiDmDumpTpm2Rev3 (
+    ACPI_TABLE_HEADER       *Table)
+{
+    UINT32                  Offset = sizeof (ACPI_TABLE_TPM23);
+    ACPI_TABLE_TPM23        *CommonHeader = ACPI_CAST_PTR (ACPI_TABLE_TPM23, Table);
+    ACPI_TPM23_TRAILER      *Subtable = ACPI_ADD_PTR (ACPI_TPM23_TRAILER, Table, Offset);
+    ACPI_STATUS             Status;
+
+
+    /* Main table */
+
+    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm23);
+    if (ACPI_FAILURE (Status))
+    {
+        return;
+    }
+
+    /* Optional subtable if start method is ACPI start method */
+
+    switch (CommonHeader->StartMethod)
+    {
+    case ACPI_TPM23_ACPI_START_METHOD:
+
+        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+            Table->Length - Offset, AcpiDmTableInfoTpm23a);
+        break;
+
+    default:
+        break;
+    }
+}
+
+
 /*******************************************************************************
  *
  * FUNCTION:    AcpiDmDumpTpm2
@@ -509,9 +554,16 @@  AcpiDmDumpTpm2 (
     ACPI_STATUS             Status;
 
 
+    if (Table->Revision == 3)
+    {
+        AcpiDmDumpTpm2Rev3(Table);
+        return;
+    }
+
     /* Main table */
 
     Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm2);
+
     if (ACPI_FAILURE (Status))
     {
         return;
diff --git a/src/acpica/source/common/dmtbinfo3.c b/src/acpica/source/common/dmtbinfo3.c
index c82e3db5..33d99287 100644
--- a/src/acpica/source/common/dmtbinfo3.c
+++ b/src/acpica/source/common/dmtbinfo3.c
@@ -446,6 +446,26 @@  ACPI_DMTABLE_INFO           AcpiDmTableInfoTcpaServer[] =
  *
  ******************************************************************************/
 
+/* TPM2 revision 3 */
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoTpm23[] =
+{
+    {ACPI_DMT_UINT32,   ACPI_TPM23_OFFSET (Reserved),           "Reserved", 0},
+    {ACPI_DMT_UINT64,   ACPI_TPM23_OFFSET (ControlAddress),     "Control Address", 0},
+    {ACPI_DMT_UINT32,   ACPI_TPM23_OFFSET (StartMethod),        "Start Method", 0},
+    ACPI_DMT_TERMINATOR
+};
+
+/* Trailer in the case that StartMethod == 2 */
+
+ACPI_DMTABLE_INFO           AcpiDmTableInfoTpm23a[] =
+{
+    {ACPI_DMT_UINT32,   ACPI_TPM23A_OFFSET (Reserved),          "Reserved", DT_OPTIONAL},
+    ACPI_DMT_TERMINATOR
+};
+
+/* TPM2 revision 4 */
+
 ACPI_DMTABLE_INFO           AcpiDmTableInfoTpm2[] =
 {
     {ACPI_DMT_UINT16,   ACPI_TPM2_OFFSET (PlatformClass),           "Platform Class", 0},
diff --git a/src/acpica/source/compiler/aslcompile.c b/src/acpica/source/compiler/aslcompile.c
index e08442e0..4ae19076 100644
--- a/src/acpica/source/compiler/aslcompile.c
+++ b/src/acpica/source/compiler/aslcompile.c
@@ -858,7 +858,7 @@  CmCleanupAndExit (
 
     if (AslGbl_ExceptionCount[ASL_ERROR] > ASL_MAX_ERROR_COUNT)
     {
-        printf ("\nMaximum error count (%u) exceeded\n",
+        printf ("\nMaximum error count (%d) exceeded\n",
             ASL_MAX_ERROR_COUNT);
     }
 
diff --git a/src/acpica/source/compiler/aslerror.c b/src/acpica/source/compiler/aslerror.c
index 6d45cd40..10ea3ec1 100644
--- a/src/acpica/source/compiler/aslerror.c
+++ b/src/acpica/source/compiler/aslerror.c
@@ -1097,7 +1097,7 @@  AslExpectException (
 
     if (AslGbl_ExpectedMessagesIndex >= ASL_MAX_EXPECTED_MESSAGES)
     {
-        printf ("Too many messages have been registered as expected (max %u)\n",
+        printf ("Too many messages have been registered as expected (max %d)\n",
             ASL_MAX_DISABLED_MESSAGES);
         return (AE_LIMIT);
     }
@@ -1144,7 +1144,7 @@  AslDisableException (
 
     if (AslGbl_DisabledMessagesIndex >= ASL_MAX_DISABLED_MESSAGES)
     {
-        printf ("Too many messages have been disabled (max %u)\n",
+        printf ("Too many messages have been disabled (max %d)\n",
             ASL_MAX_DISABLED_MESSAGES);
         return (AE_LIMIT);
     }
diff --git a/src/acpica/source/compiler/aslload.c b/src/acpica/source/compiler/aslload.c
index 5bb0a851..7f29b90c 100644
--- a/src/acpica/source/compiler/aslload.c
+++ b/src/acpica/source/compiler/aslload.c
@@ -417,10 +417,8 @@  LdLoadResourceElements (
         {
             Status = AcpiNsLookup (WalkState->ScopeInfo,
                 InitializerOp->Asl.ExternalName,
-                ACPI_TYPE_LOCAL_RESOURCE_FIELD,
-                ACPI_IMODE_LOAD_PASS1,
-                ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE,
-                NULL, &Node);
+                ACPI_TYPE_LOCAL_RESOURCE_FIELD, ACPI_IMODE_LOAD_PASS1,
+                ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE, NULL, &Node);
             if (ACPI_FAILURE (Status))
             {
                 return (Status);
@@ -687,8 +685,7 @@  LdNamespace1Begin (
          * handle this case. Perhaps someday this case can go away.
          */
         Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_ANY,
-            ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT,
-            WalkState, &(Node));
+            ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &Node);
         if (ACPI_FAILURE (Status))
         {
             if (Status == AE_NOT_FOUND)
@@ -696,23 +693,26 @@  LdNamespace1Begin (
                 /* The name was not found, go ahead and create it */
 
                 Status = AcpiNsLookup (WalkState->ScopeInfo, Path,
-                    ACPI_TYPE_LOCAL_SCOPE,
-                    ACPI_IMODE_LOAD_PASS1, Flags,
-                    WalkState, &(Node));
+                    ACPI_TYPE_LOCAL_SCOPE, ACPI_IMODE_LOAD_PASS1,
+                    Flags, WalkState, &Node);
                 if (ACPI_FAILURE (Status))
                 {
                     return_ACPI_STATUS (Status);
                 }
 
-                /*
-                 * However, this is an error -- primarily because the MS
-                 * interpreter can't handle a forward reference from the
-                 * Scope() operator.
-                 */
-                AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
-                    Op->Asl.ExternalName);
-                AslError (ASL_ERROR, ASL_MSG_SCOPE_FWD_REF, Op,
-                    Op->Asl.ExternalName);
+                /* However, this is an error -- operand to Scope must exist */
+
+                if (strlen (Op->Asl.ExternalName) == ACPI_NAME_SIZE)
+                {
+                    AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
+                        Op->Asl.ExternalName);
+                }
+                else
+                {
+                    AslError (ASL_ERROR, ASL_MSG_NAMEPATH_NOT_EXIST, Op,
+                        Op->Asl.ExternalName);
+                }
+
                 goto FinishNode;
             }
 
@@ -824,7 +824,6 @@  LdNamespace1Begin (
         break;
     }
 
-
     ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Loading name: %s, (%s)\n",
         Op->Asl.ExternalName, AcpiUtGetTypeName (ObjectType)));
 
@@ -832,6 +831,18 @@  LdNamespace1Begin (
 
     Flags |= ACPI_NS_ERROR_IF_FOUND;
 
+    /*
+     * For opcodes that enter new names into the namespace,
+     * all prefix NameSegs must exist.
+     */
+    WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode);
+    if (((WalkState->OpInfo->Flags & AML_NAMED) ||
+        (WalkState->OpInfo->Flags & AML_CREATE)) &&
+        (Op->Asl.AmlOpcode != AML_EXTERNAL_OP))
+    {
+        Flags |= ACPI_NS_PREFIX_MUST_EXIST;
+    }
+
     /*
      * Enter the named type into the internal namespace. We enter the name
      * as we go downward in the parse tree. Any necessary subobjects that
@@ -915,8 +926,20 @@  LdNamespace1Begin (
                 return_ACPI_STATUS (AE_OK);
             }
         }
+        else if (AE_NOT_FOUND)
+        {
+            /*
+             * One or more prefix NameSegs of the NamePath do not exist
+             * (all of them must exist). Attempt to continue compilation
+             * by setting the current scope to the root.
+             */
+            Node = AcpiGbl_RootNode;
+            Status = AE_OK;
+        }
         else
         {
+            /* Flag all other errors as coming from the ACPICA core */
+
             AslCoreSubsystemError (Op, Status,
                 "Failure from namespace lookup", FALSE);
             return_ACPI_STATUS (Status);
@@ -1043,10 +1066,10 @@  LdNamespace2Begin (
 
     if (Op->Asl.ParseOpcode == PARSEOP_ALIAS)
     {
-        /* Complete the alias node by getting and saving the target node */
-
-        /* First child is the alias target */
-
+        /*
+         * Complete the alias node by getting and saving the target node.
+         * First child is the alias target
+         */
         Arg = Op->Asl.Child;
 
         /* Get the target pathname */
@@ -1070,18 +1093,34 @@  LdNamespace2Begin (
         {
             if (Status == AE_NOT_FOUND)
             {
-                AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
-                    Op->Asl.ExternalName);
+                /* Standalone NameSeg vs. NamePath */
+
+                if (strlen (Arg->Asl.ExternalName) == ACPI_NAME_SIZE)
+                {
+                    AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
+                        Arg->Asl.ExternalName);
+                }
+                else
+                {
+                    AslError (ASL_ERROR, ASL_MSG_NAMEPATH_NOT_EXIST, Op,
+                        Arg->Asl.ExternalName);
+                }
 
+#if 0
+/*
+ * NOTE: Removed 10/2018 to enhance compiler error reporting. No
+ * regressions seen.
+ */
                 /*
                  * The name was not found, go ahead and create it.
                  * This prevents more errors later.
                  */
                 Status = AcpiNsLookup (WalkState->ScopeInfo, Path,
-                    ACPI_TYPE_ANY,
-                    ACPI_IMODE_LOAD_PASS1, ACPI_NS_NO_UPSEARCH,
-                    WalkState, &(Node));
-                return (AE_OK);
+                    ACPI_TYPE_ANY, ACPI_IMODE_LOAD_PASS1,
+                    ACPI_NS_NO_UPSEARCH, WalkState, &Node);
+#endif
+                return (Status);
+/* Removed: return (AE_OK)*/
             }
 
             AslCoreSubsystemError (Op, Status,
diff --git a/src/acpica/source/compiler/aslmain.c b/src/acpica/source/compiler/aslmain.c
index 4f24bb3e..70386f8a 100644
--- a/src/acpica/source/compiler/aslmain.c
+++ b/src/acpica/source/compiler/aslmain.c
@@ -329,7 +329,7 @@  AslSignalHandler (
 
     default:
 
-        printf (ASL_PREFIX "Unknown interrupt signal (%u)\n", Sig);
+        printf (ASL_PREFIX "Unknown interrupt signal (%d)\n", Sig);
         break;
     }
 
diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c
index 14e140b2..23297183 100644
--- a/src/acpica/source/compiler/aslmessages.c
+++ b/src/acpica/source/compiler/aslmessages.c
@@ -285,7 +285,7 @@  const char                      *AslCompilerMsgs [] =
 /*    ASL_MSG_NON_ASCII */                  "Invalid characters found in file",
 /*    ASL_MSG_NON_ZERO */                   "Operand evaluates to zero",
 /*    ASL_MSG_NOT_EXIST */                  "Object does not exist",
-/*    ASL_MSG_NOT_FOUND */                  "Object not found or not accessible from scope",
+/*    ASL_MSG_NOT_FOUND */                  "Object not found or not accessible from current scope",
 /*    ASL_MSG_NOT_METHOD */                 "Not a control method, cannot invoke",
 /*    ASL_MSG_NOT_PARAMETER */              "Not a parameter, used as local only",
 /*    ASL_MSG_NOT_REACHABLE */              "Object is not accessible from this scope",
@@ -359,7 +359,9 @@  const char                      *AslCompilerMsgs [] =
 /*    ASL_MSG_OEM_ID */                     "Invalid OEM ID",
 /*    ASL_MSG_UNLOAD */                     "Unload is not supported by all operating systems",
 /*    ASL_MSG_OFFSET */                     "Unnecessary/redundant use of Offset operator",
-/*    ASL_MSG_LONG_SLEEP */                 "Very long Sleep, greater than 1 second"
+/*    ASL_MSG_LONG_SLEEP */                 "Very long Sleep, greater than 1 second",
+/*    ASL_MSG_PREFIX_NOT_EXIST */           "One or more prefix Scopes do not exist",
+/*    ASL_MSG_NAMEPATH_NOT_EXIST */         "One or more objects within the Pathname do not exist"
 };
 
 /* Table compiler */
diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h
index 907744a2..c932aded 100644
--- a/src/acpica/source/compiler/aslmessages.h
+++ b/src/acpica/source/compiler/aslmessages.h
@@ -362,6 +362,8 @@  typedef enum
     ASL_MSG_UNLOAD,
     ASL_MSG_OFFSET,
     ASL_MSG_LONG_SLEEP,
+    ASL_MSG_PREFIX_NOT_EXIST,
+    ASL_MSG_NAMEPATH_NOT_EXIST,
 
     /* These messages are used by the Data Table compiler only */
 
diff --git a/src/acpica/source/compiler/aslpredef.c b/src/acpica/source/compiler/aslpredef.c
index bc30fe91..ae806412 100644
--- a/src/acpica/source/compiler/aslpredef.c
+++ b/src/acpica/source/compiler/aslpredef.c
@@ -222,7 +222,7 @@  ApCheckForPredefinedMethod (
 
         if (MethodInfo->NumArguments != 0)
         {
-            sprintf (AslGbl_MsgBuffer, "%s requires %u", Op->Asl.ExternalName, 0);
+            sprintf (AslGbl_MsgBuffer, "%s requires %d", Op->Asl.ExternalName, 0);
 
             AslError (ASL_WARNING, ASL_MSG_RESERVED_ARG_COUNT_HI, Op,
                 AslGbl_MsgBuffer);
diff --git a/src/acpica/source/compiler/aslxref.c b/src/acpica/source/compiler/aslxref.c
index 5273ea82..8b213577 100644
--- a/src/acpica/source/compiler/aslxref.c
+++ b/src/acpica/source/compiler/aslxref.c
@@ -718,11 +718,34 @@  XfNamespaceLocateBegin (
             }
             else
             {
-                /* Check for a fully qualified path */
+                /* The NamePath contains multiple NameSegs */
 
-                if (Path[0] == AML_ROOT_PREFIX)
+                if ((OpInfo->Flags & AML_CREATE) ||
+                    (OpInfo->ObjectType == ACPI_TYPE_LOCAL_ALIAS))
                 {
-                    /* Gave full path, the object does not exist */
+                    /*
+                     * The new name is the last parameter. For the
+                     * CreateXXXXField and Alias operators
+                     */
+                    NextOp = Op->Asl.Child;
+                    while (!(NextOp->Asl.CompileFlags & OP_IS_NAME_DECLARATION))
+                    {
+                        NextOp = NextOp->Asl.Next;
+                    }
+
+                    AslError (ASL_ERROR, ASL_MSG_PREFIX_NOT_EXIST, NextOp,
+                        NextOp->Asl.ExternalName);
+                }
+                else if (OpInfo->Flags & AML_NAMED)
+                {
+                    /* The new name is the first parameter */
+
+                    AslError (ASL_ERROR, ASL_MSG_PREFIX_NOT_EXIST, Op,
+                        Op->Asl.ExternalName);
+                }
+                else if (Path[0] == AML_ROOT_PREFIX)
+                {
+                    /* Full namepath from root, the object does not exist */
 
                     AslError (ASL_ERROR, ASL_MSG_NOT_EXIST, Op,
                         Op->Asl.ExternalName);
@@ -730,11 +753,20 @@  XfNamespaceLocateBegin (
                 else
                 {
                     /*
-                     * We can't tell whether it doesn't exist or just
-                     * can't be reached.
+                     * Generic "not found" error. Cannot determine whether it
+                     * doesn't exist or just can't be reached. However, we
+                     * can differentiate between a NameSeg vs. NamePath.
                      */
-                    AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
-                        Op->Asl.ExternalName);
+                    if (strlen (Op->Asl.ExternalName) == ACPI_NAME_SIZE)
+                    {
+                        AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
+                            Op->Asl.ExternalName);
+                    }
+                    else
+                    {
+                        AslError (ASL_ERROR, ASL_MSG_NAMEPATH_NOT_EXIST, Op,
+                            Op->Asl.ExternalName);
+                    }
                 }
             }
 
diff --git a/src/acpica/source/compiler/dtio.c b/src/acpica/source/compiler/dtio.c
index b15d3b97..bd189053 100644
--- a/src/acpica/source/compiler/dtio.c
+++ b/src/acpica/source/compiler/dtio.c
@@ -236,7 +236,7 @@  DtTrim (
 
     /* Skip lines that start with a space */
 
-    if (!strcmp (String, " "))
+    if (*String == 0 || !strcmp (String, " "))
     {
         ReturnString = UtLocalCacheCalloc (1);
         return (ReturnString);
@@ -258,7 +258,7 @@  DtTrim (
 
     while (End >= Start)
     {
-        if (*End == '\r' || *End == '\n')
+        if (*End == '\n')
         {
             End--;
             continue;
@@ -522,6 +522,7 @@  DtGetNextLine (
     UINT32                  CurrentLineOffset;
     UINT32                  i;
     int                     c;
+    int                     c1;
 
 
     memset (AslGbl_CurrentLineBuffer, 0, AslGbl_LineBufferSize);
@@ -569,6 +570,29 @@  DtGetNextLine (
             c = '\n';
             State = DT_NORMAL_TEXT;
         }
+        else if (c == '\r')
+        {
+            c1 = getc (Handle);
+            if (c1 == '\n')
+            {
+                /*
+                 * Skip the carriage return as if it didn't exist. This is
+                 * onlt meant for input files in DOS format in unix. fopen in
+                 * unix may not support "text mode" and leaves CRLF intact.
+                 */
+                c = '\n';
+            }
+            else
+            {
+                /* This was not a CRLF. Only a CR */
+
+                ungetc(c1, Handle);
+
+                DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL,
+                    "Carriage return without linefeed detected");
+                return (ASL_EOF);
+            }
+        }
 
         switch (State)
         {
diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c
index 3f970377..0b196a2f 100644
--- a/src/acpica/source/compiler/dttable2.c
+++ b/src/acpica/source/compiler/dttable2.c
@@ -1876,6 +1876,62 @@  DtCompileTcpa (
 }
 
 
+/******************************************************************************
+ *
+ * FUNCTION:    DtCompileTpm2Rev3
+ *
+ * PARAMETERS:  PFieldList          - Current field list pointer
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Compile TPM2 revision 3
+ *
+ *****************************************************************************/
+static ACPI_STATUS
+DtCompileTpm2Rev3 (
+    void                    **List)
+{
+    DT_FIELD                **PFieldList = (DT_FIELD **) List;
+    DT_SUBTABLE             *Subtable;
+    ACPI_TABLE_TPM23        *Tpm23Header;
+    DT_SUBTABLE             *ParentTable;
+    ACPI_STATUS             Status = AE_OK;
+
+
+    Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm23,
+        &Subtable);
+
+    ParentTable = DtPeekSubtable ();
+    DtInsertSubtable (ParentTable, Subtable);
+    Tpm23Header = ACPI_CAST_PTR (ACPI_TABLE_TPM23, ParentTable->Buffer);
+
+    /* Subtable type depends on the StartMethod */
+
+    switch (Tpm23Header->StartMethod)
+    {
+    case ACPI_TPM23_ACPI_START_METHOD:
+
+        /* Subtable specific to to ARM_SMC */
+
+        Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm23a,
+            &Subtable);
+        if (ACPI_FAILURE (Status))
+        {
+            return (Status);
+        }
+
+        ParentTable = DtPeekSubtable ();
+        DtInsertSubtable (ParentTable, Subtable);
+        break;
+
+    default:
+        break;
+    }
+
+    return (Status);
+}
+
+
 /******************************************************************************
  *
  * FUNCTION:    DtCompileTpm2
@@ -1897,8 +1953,18 @@  DtCompileTpm2 (
     ACPI_TABLE_TPM2         *Tpm2Header;
     DT_SUBTABLE             *ParentTable;
     ACPI_STATUS             Status = AE_OK;
+    ACPI_TABLE_HEADER       *Header;
 
 
+    ParentTable = DtPeekSubtable ();
+
+    Header = ACPI_CAST_PTR (ACPI_TABLE_HEADER, ParentTable->Buffer);
+
+    if (Header->Revision == 3)
+    {
+        return (DtCompileTpm2Rev3 (List));
+    }
+
     /* Compile the main table */
 
     Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm2,
diff --git a/src/acpica/source/compiler/prscan.c b/src/acpica/source/compiler/prscan.c
index 580b47f0..325569ed 100644
--- a/src/acpica/source/compiler/prscan.c
+++ b/src/acpica/source/compiler/prscan.c
@@ -1259,7 +1259,6 @@  PrPopDirective (
         AslGbl_DirectiveInfo[Info->Directive].Name,
         Info->Argument, AslGbl_IgnoringThisCodeBlock ? "TRUE" : "FALSE");
 
-    ACPI_FREE (Info);
     return (AE_OK);
 }
 
diff --git a/src/acpica/source/components/debugger/dbxface.c b/src/acpica/source/components/debugger/dbxface.c
index c661b248..a0f3ed6b 100644
--- a/src/acpica/source/components/debugger/dbxface.c
+++ b/src/acpica/source/components/debugger/dbxface.c
@@ -174,6 +174,12 @@  AcpiDbMethodEnd (
     ACPI_WALK_STATE         *WalkState);
 #endif
 
+#ifdef ACPI_DISASSEMBLER
+static ACPI_PARSE_OBJECT *
+AcpiDbGetDisplayOp (
+    ACPI_WALK_STATE         *WalkState,
+    ACPI_PARSE_OBJECT       *Op);
+#endif
 
 /*******************************************************************************
  *
@@ -273,6 +279,74 @@  AcpiDbSignalBreakPoint (
 }
 
 
+#ifdef ACPI_DISASSEMBLER
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiDbGetDisplayOp
+ *
+ * PARAMETERS:  WalkState       - Current walk
+ *              Op              - Current executing op (from aml interpreter)
+ *
+ * RETURN:      Opcode to display
+ *
+ * DESCRIPTION: Find the opcode to display during single stepping
+ *
+ ******************************************************************************/
+
+static ACPI_PARSE_OBJECT *
+AcpiDbGetDisplayOp (
+    ACPI_WALK_STATE         *WalkState,
+    ACPI_PARSE_OBJECT       *Op)
+{
+    ACPI_PARSE_OBJECT       *DisplayOp;
+    ACPI_PARSE_OBJECT       *ParentOp;
+
+    DisplayOp = Op;
+    ParentOp = Op->Common.Parent;
+    if (ParentOp)
+    {
+        if ((WalkState->ControlState) &&
+            (WalkState->ControlState->Common.State ==
+                ACPI_CONTROL_PREDICATE_EXECUTING))
+        {
+            /*
+             * We are executing the predicate of an IF or WHILE statement
+             * Search upwards for the containing IF or WHILE so that the
+             * entire predicate can be displayed.
+             */
+            while (ParentOp)
+            {
+                if ((ParentOp->Common.AmlOpcode == AML_IF_OP) ||
+                    (ParentOp->Common.AmlOpcode == AML_WHILE_OP))
+                {
+                    DisplayOp = ParentOp;
+                    break;
+                }
+                ParentOp = ParentOp->Common.Parent;
+            }
+        }
+        else
+        {
+            while (ParentOp)
+            {
+                if ((ParentOp->Common.AmlOpcode == AML_IF_OP)     ||
+                    (ParentOp->Common.AmlOpcode == AML_ELSE_OP)   ||
+                    (ParentOp->Common.AmlOpcode == AML_SCOPE_OP)  ||
+                    (ParentOp->Common.AmlOpcode == AML_METHOD_OP) ||
+                    (ParentOp->Common.AmlOpcode == AML_WHILE_OP))
+                {
+                    break;
+                }
+                DisplayOp = ParentOp;
+                ParentOp = ParentOp->Common.Parent;
+            }
+        }
+    }
+    return DisplayOp;
+}
+#endif
+
+
 /*******************************************************************************
  *
  * FUNCTION:    AcpiDbSingleStep
@@ -296,8 +370,6 @@  AcpiDbSingleStep (
     ACPI_PARSE_OBJECT       *Next;
     ACPI_STATUS             Status = AE_OK;
     UINT32                  OriginalDebugLevel;
-    ACPI_PARSE_OBJECT       *DisplayOp;
-    ACPI_PARSE_OBJECT       *ParentOp;
     UINT32                  AmlOffset;
 
 
@@ -393,53 +465,11 @@  AcpiDbSingleStep (
         Next = Op->Common.Next;
         Op->Common.Next = NULL;
 
-
-        DisplayOp = Op;
-        ParentOp = Op->Common.Parent;
-        if (ParentOp)
-        {
-            if ((WalkState->ControlState) &&
-                (WalkState->ControlState->Common.State ==
-                    ACPI_CONTROL_PREDICATE_EXECUTING))
-            {
-                /*
-                 * We are executing the predicate of an IF or WHILE statement
-                 * Search upwards for the containing IF or WHILE so that the
-                 * entire predicate can be displayed.
-                 */
-                while (ParentOp)
-                {
-                    if ((ParentOp->Common.AmlOpcode == AML_IF_OP) ||
-                        (ParentOp->Common.AmlOpcode == AML_WHILE_OP))
-                    {
-                        DisplayOp = ParentOp;
-                        break;
-                    }
-                    ParentOp = ParentOp->Common.Parent;
-                }
-            }
-            else
-            {
-                while (ParentOp)
-                {
-                    if ((ParentOp->Common.AmlOpcode == AML_IF_OP)     ||
-                        (ParentOp->Common.AmlOpcode == AML_ELSE_OP)   ||
-                        (ParentOp->Common.AmlOpcode == AML_SCOPE_OP)  ||
-                        (ParentOp->Common.AmlOpcode == AML_METHOD_OP) ||
-                        (ParentOp->Common.AmlOpcode == AML_WHILE_OP))
-                    {
-                        break;
-                    }
-                    DisplayOp = ParentOp;
-                    ParentOp = ParentOp->Common.Parent;
-                }
-            }
-        }
-
         /* Now we can disassemble and display it */
 
 #ifdef ACPI_DISASSEMBLER
-        AcpiDmDisassemble (WalkState, DisplayOp, ACPI_UINT32_MAX);
+        AcpiDmDisassemble (WalkState, AcpiDbGetDisplayOp (WalkState, Op),
+            ACPI_UINT32_MAX);
 #else
         /*
          * The AML Disassembler is not configured - at least we can
diff --git a/src/acpica/source/components/dispatcher/dsopcode.c b/src/acpica/source/components/dispatcher/dsopcode.c
index 038993c7..ca2cd470 100644
--- a/src/acpica/source/components/dispatcher/dsopcode.c
+++ b/src/acpica/source/components/dispatcher/dsopcode.c
@@ -586,6 +586,9 @@  AcpiDsEvalRegionOperands (
         ObjDesc, ACPI_FORMAT_UINT64 (ObjDesc->Region.Address),
         ObjDesc->Region.Length));
 
+    Status = AcpiUtAddAddressRange (ObjDesc->Region.SpaceId,
+        ObjDesc->Region.Address, ObjDesc->Region.Length, Node);
+
     /* Now the address and length are valid for this opregion */
 
     ObjDesc->Region.Flags |= AOPOBJ_DATA_VALID;
diff --git a/src/acpica/source/components/dispatcher/dswload2.c b/src/acpica/source/components/dispatcher/dswload2.c
index 9bc6ecfa..4b6e41d8 100644
--- a/src/acpica/source/components/dispatcher/dswload2.c
+++ b/src/acpica/source/components/dispatcher/dswload2.c
@@ -448,6 +448,15 @@  AcpiDsLoad2BeginOp (
         }
 #endif
 
+        /*
+         * For name creation opcodes, the full namepath prefix must
+         * exist, except for the final (new) nameseg.
+         */
+        if (WalkState->OpInfo->Flags & AML_NAMED)
+        {
+            Flags |= ACPI_NS_PREFIX_MUST_EXIST;
+        }
+
         /* Add new entry or lookup existing entry */
 
         Status = AcpiNsLookup (WalkState->ScopeInfo, BufferPtr, ObjectType,
diff --git a/src/acpica/source/components/namespace/nsaccess.c b/src/acpica/source/components/namespace/nsaccess.c
index af97c51f..11c652e0 100644
--- a/src/acpica/source/components/namespace/nsaccess.c
+++ b/src/acpica/source/components/namespace/nsaccess.c
@@ -421,6 +421,7 @@  AcpiNsLookup (
     ACPI_OBJECT_TYPE        ThisSearchType;
     UINT32                  SearchParentFlag = ACPI_NS_SEARCH_PARENT;
     UINT32                  LocalFlags;
+    ACPI_INTERPRETER_MODE   LocalInterpreterMode;
 
 
     ACPI_FUNCTION_TRACE (NsLookup);
@@ -670,6 +671,7 @@  AcpiNsLookup (
      */
     ThisSearchType = ACPI_TYPE_ANY;
     CurrentNode = ThisNode;
+
     while (NumSegments && CurrentNode)
     {
         NumSegments--;
@@ -704,6 +706,16 @@  AcpiNsLookup (
             }
         }
 
+        /* Handle opcodes that create a new NameSeg via a full NamePath */
+
+        LocalInterpreterMode = InterpreterMode;
+        if ((Flags & ACPI_NS_PREFIX_MUST_EXIST) && (NumSegments > 0))
+        {
+            /* Every element of the path must exist (except for the final NameSeg) */
+
+            LocalInterpreterMode = ACPI_IMODE_EXECUTE;
+        }
+
         /* Extract one ACPI name from the front of the pathname */
 
         ACPI_MOVE_32_TO_32 (&SimpleName, Path);
@@ -711,11 +723,18 @@  AcpiNsLookup (
         /* Try to find the single (4 character) ACPI name */
 
         Status = AcpiNsSearchAndEnter (SimpleName, WalkState, CurrentNode,
-            InterpreterMode, ThisSearchType, LocalFlags, &ThisNode);
+            LocalInterpreterMode, ThisSearchType, LocalFlags, &ThisNode);
         if (ACPI_FAILURE (Status))
         {
             if (Status == AE_NOT_FOUND)
             {
+#if !defined ACPI_ASL_COMPILER /* Note: iASL reports this error by itself, not needed here */
+                if (Flags & ACPI_NS_PREFIX_MUST_EXIST)
+                {
+                    AcpiOsPrintf (ACPI_MSG_BIOS_ERROR
+                        "Object does not exist: %4.4s\n", &SimpleName);
+                }
+#endif
                 /* Name not found in ACPI namespace */
 
                 ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
diff --git a/src/acpica/source/components/parser/psloop.c b/src/acpica/source/components/parser/psloop.c
index ef517b54..9625834c 100644
--- a/src/acpica/source/components/parser/psloop.c
+++ b/src/acpica/source/components/parser/psloop.c
@@ -298,7 +298,7 @@  AcpiPsGetArguments (
          * future. Use of this option can cause problems with AML code that
          * depends upon in-order immediate execution of module-level code.
          */
-        if (AcpiGbl_GroupModuleLevelCode &&
+        if (!AcpiGbl_ExecuteTablesAsMethods &&
             (WalkState->PassNumber <= ACPI_IMODE_LOAD_PASS2) &&
             ((WalkState->ParseFlags & ACPI_PARSE_DISASSEMBLE) == 0))
         {
@@ -566,6 +566,7 @@  AcpiPsParseLoop (
     ACPI_PARSE_OBJECT       *Op = NULL;     /* current op */
     ACPI_PARSE_STATE        *ParserState;
     UINT8                   *AmlOpStart = NULL;
+    UINT8                   OpcodeLength;
 
 
     ACPI_FUNCTION_TRACE_PTR (PsParseLoop, WalkState);
@@ -654,7 +655,7 @@  AcpiPsParseLoop (
                  * status to AE_OK to proceed with the table load.
                  */
                 if ((WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL) &&
-                    Status == AE_ALREADY_EXISTS)
+                    ((Status == AE_ALREADY_EXISTS) || (Status == AE_NOT_FOUND)))
                 {
                     Status = AE_OK;
                 }
@@ -686,9 +687,20 @@  AcpiPsParseLoop (
                      * the scope op because the parse failure indicates that
                      * the device may not exist.
                      */
-                    ACPI_ERROR ((AE_INFO, "Skip parsing opcode %s",
-                        AcpiPsGetOpcodeName (WalkState->Opcode)));
-                    WalkState->ParserState.Aml = WalkState->Aml + 1;
+                    ACPI_INFO (("Skipping parse of AML opcode: %s (0x%4.4X)",
+                        AcpiPsGetOpcodeName (WalkState->Opcode), WalkState->Opcode));
+
+                    /*
+                     * Determine the opcode length before skipping the opcode.
+                     * An opcode can be 1 byte or 2 bytes in length.
+                     */
+                    OpcodeLength = 1;
+                    if ((WalkState->Opcode & 0xFF00) == AML_EXTENDED_OPCODE)
+                    {
+                        OpcodeLength = 2;
+                    }
+                    WalkState->ParserState.Aml = WalkState->Aml + OpcodeLength;
+
                     WalkState->ParserState.Aml =
                         AcpiPsGetNextPackageEnd(&WalkState->ParserState);
                     WalkState->Aml = WalkState->ParserState.Aml;
diff --git a/src/acpica/source/components/parser/psobject.c b/src/acpica/source/components/parser/psobject.c
index 8d6f81bd..ca7ab0ae 100644
--- a/src/acpica/source/components/parser/psobject.c
+++ b/src/acpica/source/components/parser/psobject.c
@@ -773,7 +773,7 @@  AcpiPsCompleteOp (
              * because there could be correct AML beyond the parts that caused
              * the runtime error.
              */
-            ACPI_ERROR ((AE_INFO, "Ignore error and continue table load"));
+            ACPI_INFO (("Ignoring error and continuing table load"));
             return_ACPI_STATUS (AE_OK);
         }
         return_ACPI_STATUS (Status);
diff --git a/src/acpica/source/components/tables/tbxfload.c b/src/acpica/source/components/tables/tbxfload.c
index 0119b684..a956806e 100644
--- a/src/acpica/source/components/tables/tbxfload.c
+++ b/src/acpica/source/components/tables/tbxfload.c
@@ -219,7 +219,7 @@  AcpiLoadTables (
             "While loading namespace from ACPI tables"));
     }
 
-    if (AcpiGbl_ExecuteTablesAsMethods || !AcpiGbl_GroupModuleLevelCode)
+    if (AcpiGbl_ExecuteTablesAsMethods)
     {
         /*
          * If the module-level code support is enabled, initialize the objects
diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
index b774b20f..edd108d2 100644
--- a/src/acpica/source/include/acdisasm.h
+++ b/src/acpica/source/include/acdisasm.h
@@ -561,6 +561,8 @@  extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTcpaServer[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTpm2[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTpm2a[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTpm211[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTpm23[];
+extern ACPI_DMTABLE_INFO        AcpiDmTableInfoTpm23a[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoUefi[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoVrtc[];
 extern ACPI_DMTABLE_INFO        AcpiDmTableInfoVrtc0[];
diff --git a/src/acpica/source/include/acnamesp.h b/src/acpica/source/include/acnamesp.h
index 1e3db8d1..7c2083d3 100644
--- a/src/acpica/source/include/acnamesp.h
+++ b/src/acpica/source/include/acnamesp.h
@@ -177,6 +177,7 @@ 
 #define ACPI_NS_TEMPORARY           0x0040
 #define ACPI_NS_OVERRIDE_IF_FOUND   0x0080
 #define ACPI_NS_EARLY_INIT          0x0100
+#define ACPI_NS_PREFIX_MUST_EXIST   0x0200
 
 /* Flags for AcpiNsWalkNamespace */
 
diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
index aaf284cb..27e9aa7f 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                 0x20181003
+#define ACPI_CA_VERSION                 0x20181031
 
 #include "acconfig.h"
 #include "actypes.h"
@@ -300,13 +300,6 @@  ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_CopyDsdtLocally, FALSE);
  */
 ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_DoNotUseXsdt, FALSE);
 
-/*
- * Optionally support group module level code.
- * NOTE, this is essentially obsolete and will be removed soon
- * (01/2018).
- */
-ACPI_INIT_GLOBAL (UINT8,            AcpiGbl_GroupModuleLevelCode, FALSE);
-
 /*
  * Optionally support module level code by parsing an entire table as
  * a method as it is loaded. Default is TRUE.
diff --git a/src/acpica/source/include/actbinfo.h b/src/acpica/source/include/actbinfo.h
index 347a3940..19eeeccb 100644
--- a/src/acpica/source/include/actbinfo.h
+++ b/src/acpica/source/include/actbinfo.h
@@ -194,6 +194,7 @@ 
 #define ACPI_STAO_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_STAO,f)
 #define ACPI_TCPA_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_HDR,f)
 #define ACPI_TPM2_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_TPM2,f)
+#define ACPI_TPM23_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_TABLE_TPM23,f)
 #define ACPI_UEFI_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_UEFI,f)
 #define ACPI_WAET_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_WAET,f)
 #define ACPI_WDAT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_WDAT,f)
@@ -337,6 +338,7 @@ 
 #define ACPI_TCPA_SERVER_OFFSET(f)      (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_SERVER,f)
 #define ACPI_TPM2A_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_TPM2_TRAILER,f)
 #define ACPI_TPM211_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_TPM2_ARM_SMC,f)
+#define ACPI_TPM23A_OFFSET(f)           (UINT16) ACPI_OFFSET (ACPI_TPM23_TRAILER,f)
 #define ACPI_VRTC0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_VRTC_ENTRY,f)
 #define ACPI_WDAT0_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_WDAT_ENTRY,f)
 
diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h
index d4c15838..99b466c1 100644
--- a/src/acpica/source/include/actbl3.h
+++ b/src/acpica/source/include/actbl3.h
@@ -552,6 +552,34 @@  typedef struct acpi_table_tcpa_server
  *
  ******************************************************************************/
 
+/* Revision 3 */
+
+typedef struct acpi_table_tpm23
+{
+    ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
+    UINT32                  Reserved;
+    UINT64                  ControlAddress;
+    UINT32                  StartMethod;
+
+} ACPI_TABLE_TPM23;
+
+/* Value for StartMethod above */
+
+#define ACPI_TPM23_ACPI_START_METHOD                 2
+
+/*
+ * Optional trailer for revision 3. If start method is 2, there is a 4 byte
+ * reserved area of all zeros.
+ */
+typedef struct acpi_tmp23_trailer
+{
+    UINT32                  Reserved;
+
+} ACPI_TPM23_TRAILER;
+
+
+/* Revision 4 */
+
 typedef struct acpi_table_tpm2
 {
     ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */