diff --git a/.acpica-tools.metadata b/.acpica-tools.metadata
new file mode 100644
index 0000000..39c398e
--- /dev/null
+++ b/.acpica-tools.metadata
@@ -0,0 +1,2 @@
+5b87f09fecda40cb089bdeb83e3a01d7615617dd SOURCES/acpica-unix2-20210604.tar_0.gz
+1085e6c2a793cb2e3aca94c420e8300afe9eae59 SOURCES/acpitests-unix-20210604.tar.gz
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9cd9cd3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+SOURCES/acpica-unix2-20210604.tar_0.gz
+SOURCES/acpitests-unix-20210604.tar.gz
diff --git a/SOURCES/0001-Add-in-basic-infrastructure-for-big-endian-support.patch b/SOURCES/0001-Add-in-basic-infrastructure-for-big-endian-support.patch
new file mode 100644
index 0000000..3a667ea
--- /dev/null
+++ b/SOURCES/0001-Add-in-basic-infrastructure-for-big-endian-support.patch
@@ -0,0 +1,530 @@
+From 4594630ec2e6a33efce3047a86b08fa170b75848 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Thu, 15 Oct 2020 11:53:33 -0600
+Subject: [PATCH 01/45] Add in basic infrastructure for big-endian support
+
+This adds in some basic functions -- AcpiUtReadUint32(), for example,
+to read a UINT32 value in little-endian form and return it in host-native
+format -- along with AcpiUtWriteUint() that writes out an integer in
+host-native format as a little-endian value.
+
+But, to do that, I'm adding the functions in a new file: utendian.c.  So,
+the header files need fixing, and the makefiles need to be sure to compile
+the new code.  Further, UtIsBigEndianMachine() needed to be moved out of
+compiler/aslutils.c so it could be used in the new functions and avoid
+having to do some conditional compilation depending on endian-ness.
+
+However, this sets things up for the future, where endian-aware code can
+be added as the need is uncovered.  For now, these functions cover all of
+the cases I know about.
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ generate/unix/acpibin/Makefile         |   1 +
+ generate/unix/acpidump/Makefile        |   1 +
+ generate/unix/acpiexamples/Makefile    |   1 +
+ generate/unix/acpiexec/Makefile        |   1 +
+ generate/unix/acpihelp/Makefile        |   1 +
+ generate/unix/iasl/Makefile            |   1 +
+ source/compiler/aslcompiler.h          |   4 -
+ source/compiler/aslutils.c             |  27 ---
+ source/components/utilities/utendian.c | 236 +++++++++++++++++++++++++
+ source/include/acmacros.h              |  56 ------
+ source/include/acutils.h               |  32 ++++
+ source/include/platform/aclinux.h      |   1 +
+ 12 files changed, 275 insertions(+), 87 deletions(-)
+ create mode 100644 source/components/utilities/utendian.c
+
+Index: acpica-unix2-20210604/generate/unix/acpibin/Makefile
+===================================================================
+--- acpica-unix2-20210604.orig/generate/unix/acpibin/Makefile
++++ acpica-unix2-20210604/generate/unix/acpibin/Makefile
+@@ -37,6 +37,7 @@ OBJECTS = \
+ 	$(OBJDIR)/utcache.o\
+ 	$(OBJDIR)/utdebug.o\
+ 	$(OBJDIR)/utdecode.o\
++	$(OBJDIR)/utendian.o\
+ 	$(OBJDIR)/utexcep.o\
+ 	$(OBJDIR)/utglobal.o\
+ 	$(OBJDIR)/utlock.o\
+Index: acpica-unix2-20210604/generate/unix/acpidump/Makefile
+===================================================================
+--- acpica-unix2-20210604.orig/generate/unix/acpidump/Makefile
++++ acpica-unix2-20210604/generate/unix/acpidump/Makefile
+@@ -36,6 +36,7 @@ OBJECTS = \
+ 	$(OBJDIR)/osunixdir.o\
+ 	$(OBJDIR)/osunixmap.o\
+ 	$(OBJDIR)/osunixxf.o\
++	$(OBJDIR)/utendian.o\
+ 	$(OBJDIR)/tbprint.o\
+ 	$(OBJDIR)/tbxfroot.o\
+ 	$(OBJDIR)/utascii.o\
+Index: acpica-unix2-20210604/generate/unix/acpiexamples/Makefile
+===================================================================
+--- acpica-unix2-20210604.orig/generate/unix/acpiexamples/Makefile
++++ acpica-unix2-20210604/generate/unix/acpiexamples/Makefile
+@@ -139,6 +139,7 @@ OBJECTS = \
+ 	$(OBJDIR)/utdebug.o\
+ 	$(OBJDIR)/utdecode.o\
+ 	$(OBJDIR)/utdelete.o\
++	$(OBJDIR)/utendian.o\
+ 	$(OBJDIR)/uterror.o\
+ 	$(OBJDIR)/uteval.o\
+ 	$(OBJDIR)/utexcep.o\
+Index: acpica-unix2-20210604/generate/unix/acpiexec/Makefile
+===================================================================
+--- acpica-unix2-20210604.orig/generate/unix/acpiexec/Makefile
++++ acpica-unix2-20210604/generate/unix/acpiexec/Makefile
+@@ -214,6 +214,7 @@ OBJECTS = \
+ 	$(OBJDIR)/utdebug.o\
+ 	$(OBJDIR)/utdecode.o\
+ 	$(OBJDIR)/utdelete.o\
++	$(OBJDIR)/utendian.o\
+ 	$(OBJDIR)/uterror.o\
+ 	$(OBJDIR)/uteval.o\
+ 	$(OBJDIR)/utexcep.o\
+Index: acpica-unix2-20210604/generate/unix/acpihelp/Makefile
+===================================================================
+--- acpica-unix2-20210604.orig/generate/unix/acpihelp/Makefile
++++ acpica-unix2-20210604/generate/unix/acpihelp/Makefile
+@@ -45,6 +45,7 @@ OBJECTS = \
+ 	$(OBJDIR)/getopt.o\
+ 	$(OBJDIR)/osunixxf.o\
+ 	$(OBJDIR)/utdebug.o\
++	$(OBJDIR)/utendian.o\
+ 	$(OBJDIR)/utexcep.o\
+ 	$(OBJDIR)/utglobal.o\
+ 	$(OBJDIR)/uthex.o\
+Index: acpica-unix2-20210604/generate/unix/iasl/Makefile
+===================================================================
+--- acpica-unix2-20210604.orig/generate/unix/iasl/Makefile
++++ acpica-unix2-20210604/generate/unix/iasl/Makefile
+@@ -225,6 +225,7 @@ OBJECTS = \
+ 	$(OBJDIR)/utdebug.o\
+ 	$(OBJDIR)/utdecode.o\
+ 	$(OBJDIR)/utdelete.o\
++	$(OBJDIR)/utendian.o\
+ 	$(OBJDIR)/uterror.o\
+ 	$(OBJDIR)/utexcep.o\
+ 	$(OBJDIR)/utglobal.o\
+Index: acpica-unix2-20210604/source/compiler/aslcompiler.h
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/aslcompiler.h
++++ acpica-unix2-20210604/source/compiler/aslcompiler.h
+@@ -1120,10 +1120,6 @@ BOOLEAN
+ UtIsIdInteger (
+     UINT8                   *Target);
+ 
+-UINT8
+-UtIsBigEndianMachine (
+-    void);
+-
+ BOOLEAN
+ UtQueryForOverwrite (
+     char                    *Pathname);
+Index: acpica-unix2-20210604/source/compiler/aslutils.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/aslutils.c
++++ acpica-unix2-20210604/source/compiler/aslutils.c
+@@ -73,33 +73,6 @@ UtDisplayErrorSummary (
+ 
+ /*******************************************************************************
+  *
+- * FUNCTION:    UtIsBigEndianMachine
+- *
+- * PARAMETERS:  None
+- *
+- * RETURN:      TRUE if machine is big endian
+- *              FALSE if machine is little endian
+- *
+- * DESCRIPTION: Detect whether machine is little endian or big endian.
+- *
+- ******************************************************************************/
+-
+-UINT8
+-UtIsBigEndianMachine (
+-    void)
+-{
+-    union {
+-        UINT32              Integer;
+-        UINT8               Bytes[4];
+-    } Overlay =                 {0xFF000000};
+-
+-
+-    return (Overlay.Bytes[0]); /* Returns 0xFF (TRUE) for big endian */
+-}
+-
+-
+-/*******************************************************************************
+- *
+  * FUNCTION:    UtIsIdInteger
+  *
+  * PARAMETERS:  Pointer to an ACPI ID (HID, CID) string
+Index: acpica-unix2-20210604/source/components/utilities/utendian.c
+===================================================================
+--- /dev/null
++++ acpica-unix2-20210604/source/components/utilities/utendian.c
+@@ -0,0 +1,236 @@
++/******************************************************************************
++ *
++ * Module Name: utendian -- byte swapping support for other-endianness
++ *
++ *****************************************************************************/
++
++/*****************************************************************************
++ *
++ * Copyright (c) 2020, Al Stone <ahs3@redhat.com>
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ *    notice, this list of conditions, and the following disclaimer,
++ *    without modification.
++ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
++ *    substantially similar to the "NO WARRANTY" disclaimer below
++ *    ("Disclaimer") and any redistribution must be conditioned upon
++ *    including a substantially similar Disclaimer requirement for further
++ *    binary redistribution.
++ * 3. Neither the names of the above-listed copyright holders nor the names
++ *    of any contributors may be used to endorse or promote products derived
++ *    from this software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ * Alternatively, you may choose to be licensed under the terms of the
++ * GNU General Public License ("GPL") version 2 as published by the Free
++ * Software Foundation.
++ *
++ *****************************************************************************/
++
++#include "acpi.h"
++#include "accommon.h"
++
++#define _COMPONENT          ACPI_COMPILER
++        ACPI_MODULE_NAME    ("utendian")
++
++/*
++ * Endianness support functions.
++ *
++ * Ultimately, everything in ACPI tables or AML must be in little-endian
++ * format.  However, we sometimes find it necessary to run on a big-endian
++ * machine and create or read those little-endian values.  This is a small
++ * libary of functions to make that easier, and more visible.
++ *
++ */
++
++/*******************************************************************************
++ *
++ * FUNCTION:    UtIsBigEndianMachine
++ *
++ * PARAMETERS:  None
++ *
++ * RETURN:      TRUE if machine is big endian
++ *              FALSE if machine is little endian
++ *
++ * DESCRIPTION: Detect whether machine is little endian or big endian.
++ *
++ ******************************************************************************/
++
++UINT8
++UtIsBigEndianMachine (
++    void)
++{
++    union {
++        UINT32              Integer;
++        UINT8               Bytes[4];
++    } Overlay =                 {0xFF000000};
++
++
++    return (Overlay.Bytes[0]); /* Returns 0xFF (TRUE) for big endian */
++}
++
++
++/*******************************************************************************
++ *
++ * FUNCTION:    AcpiUtReadUint16
++ *
++ * PARAMETERS:  Src         - location containing the little-endian
++ *                                    value
++ *
++ * RETURN:      UINT16 value in host-native form
++ *
++ * DESCRIPTION: Read a UINT16 little-endian value from a given location
++ *              and return it in host-native form
++ *
++ ******************************************************************************/
++
++UINT16
++AcpiUtReadUint16 (
++    void                    *SrcPtr)
++{
++    UINT16                  Result = 0;
++    UINT8                   *Dst = (UINT8 *) &Result;
++    UINT8                   *Src = (UINT8 *) SrcPtr;
++
++    if (!UtIsBigEndianMachine())
++    {
++        return (*(UINT16 *) SrcPtr);
++    }
++
++    Dst[0] = Src[1];
++    Dst[1] = Src[0];
++
++    return (Result);
++}
++
++/*******************************************************************************
++ *
++ * FUNCTION:    AcpiUtReadUint32
++ *
++ * PARAMETERS:  Src         - location containing the little-endian
++ *                                    value
++ *
++ * RETURN:      UINT32 value in host-native form
++ *
++ * DESCRIPTION: Read a UINT32 little-endian value from a given location
++ *              and return it in host-native form
++ *
++ ******************************************************************************/
++
++UINT32
++AcpiUtReadUint32 (
++    void                    *SrcPtr)
++{
++    UINT32                  Result = 0;
++    UINT8                   *Dst = (UINT8 *) &Result;
++    UINT8                   *Src = (UINT8 *) SrcPtr;
++
++    if (!UtIsBigEndianMachine())
++    {
++        return (*(UINT32 *) SrcPtr);
++    }
++
++    Dst[0] = Src[3];
++    Dst[1] = Src[2];
++    Dst[2] = Src[1];
++    Dst[3] = Src[0];
++
++    return (Result);
++}
++
++/*******************************************************************************
++ *
++ * FUNCTION:    AcpiUtReadUint64
++ *
++ * PARAMETERS:  Src         - location containing the little-endian
++ *                                    value
++ *
++ * RETURN:      UINT64 value in host-native form
++ *
++ * DESCRIPTION: Read a UINT64 little-endian value from a given location
++ *              and return it in host-native form
++ *
++ ******************************************************************************/
++
++UINT64
++AcpiUtReadUint64 (
++    void                    *SrcPtr)
++{
++    UINT64                  Result = 0;
++    UINT8                   *Dst = (UINT8 *) &Result;
++    UINT8                   *Src = (UINT8 *) SrcPtr;
++
++    if (!UtIsBigEndianMachine())
++    {
++        return (*(UINT64 *) SrcPtr);
++    }
++
++    Dst[0] = Src[7];
++    Dst[1] = Src[6];
++    Dst[2] = Src[5];
++    Dst[3] = Src[4];
++    Dst[4] = Src[3];
++    Dst[5] = Src[2];
++    Dst[6] = Src[1];
++    Dst[7] = Src[0];
++
++    return (Result);
++}
++
++/*******************************************************************************
++ *
++ * FUNCTION:    AcpiUtWriteUint
++ *
++ * PARAMETERS:  DstPtr      - where to place the retrieved value
++ *              DstLength   - space in bytes for this int type
++ *              SrcPtr      - where the little-endian value lives
++ *              SrcLength   - space in bytes for this int type
++ *
++ * RETURN:      None.
++ *
++ * DESCRIPTION: Write a host-native integer value of the given size, and
++ *              store it in the location specified in little-endian form.
++ *              Given the amount of integer type casting done, this general
++ *              version seems the most useful (vs 32->32, 32->16, 16->32,
++ *              ad infinitum)
++ *
++ ******************************************************************************/
++
++void
++AcpiUtWriteUint (
++    void                    *DstPtr,
++    int                     DstLength,
++    const void              *SrcPtr,
++    const int               SrcLength)
++{
++    UINT8                   *Dst = (UINT8 *) DstPtr;
++    UINT8                   *Src = (UINT8 *) SrcPtr;
++    int                      Length;
++    int                      ii;
++
++    if (!UtIsBigEndianMachine())
++    {
++        Length = SrcLength > DstLength ? DstLength : SrcLength;
++        memcpy (Dst, Src, Length);
++	return;
++    }
++
++    Length = SrcLength >= DstLength ? DstLength : SrcLength;
++    for (ii = 0; ii < Length; ii++)
++        Dst[ii] = Src[SrcLength - ii - 1];
++
++}
+Index: acpica-unix2-20210604/source/include/acmacros.h
+===================================================================
+--- acpica-unix2-20210604.orig/source/include/acmacros.h
++++ acpica-unix2-20210604/source/include/acmacros.h
+@@ -76,61 +76,6 @@
+  * If the hardware supports the transfer of unaligned data, just do the store.
+  * Otherwise, we have to move one byte at a time.
+  */
+-#ifdef ACPI_BIG_ENDIAN
+-/*
+- * Macros for big-endian machines
+- */
+-
+-/* These macros reverse the bytes during the move, converting little-endian to big endian */
+-
+-                                                     /* Big Endian      <==        Little Endian */
+-                                                     /*  Hi...Lo                     Lo...Hi     */
+-/* 16-bit source, 16/32/64 destination */
+-
+-#define ACPI_MOVE_16_TO_16(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[1];\
+-                                         ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[0];}
+-
+-#define ACPI_MOVE_16_TO_32(d, s)        {(*(UINT32 *)(void *)(d))=0;\
+-                                           ((UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[1];\
+-                                           ((UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[0];}
+-
+-#define ACPI_MOVE_16_TO_64(d, s)        {(*(UINT64 *)(void *)(d))=0;\
+-                                           ((UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\
+-                                           ((UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[0];}
+-
+-/* 32-bit source, 16/32/64 destination */
+-
+-#define ACPI_MOVE_32_TO_16(d, s)        ACPI_MOVE_16_TO_16(d, s)    /* Truncate to 16 */
+-
+-#define ACPI_MOVE_32_TO_32(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[3];\
+-                                         ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[2];\
+-                                         ((  UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[1];\
+-                                         ((  UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[0];}
+-
+-#define ACPI_MOVE_32_TO_64(d, s)        {(*(UINT64 *)(void *)(d))=0;\
+-                                           ((UINT8 *)(void *)(d))[4] = ((UINT8 *)(void *)(s))[3];\
+-                                           ((UINT8 *)(void *)(d))[5] = ((UINT8 *)(void *)(s))[2];\
+-                                           ((UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\
+-                                           ((UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[0];}
+-
+-/* 64-bit source, 16/32/64 destination */
+-
+-#define ACPI_MOVE_64_TO_16(d, s)        ACPI_MOVE_16_TO_16(d, s)    /* Truncate to 16 */
+-
+-#define ACPI_MOVE_64_TO_32(d, s)        ACPI_MOVE_32_TO_32(d, s)    /* Truncate to 32 */
+-
+-#define ACPI_MOVE_64_TO_64(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[7];\
+-                                         ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[6];\
+-                                         ((  UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[5];\
+-                                         ((  UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[4];\
+-                                         ((  UINT8 *)(void *)(d))[4] = ((UINT8 *)(void *)(s))[3];\
+-                                         ((  UINT8 *)(void *)(d))[5] = ((UINT8 *)(void *)(s))[2];\
+-                                         ((  UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\
+-                                         ((  UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[0];}
+-#else
+-/*
+- * Macros for little-endian machines
+- */
+ 
+ #ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED
+ 
+@@ -193,7 +138,6 @@
+                                          ((  UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[6];\
+                                          ((  UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[7];}
+ #endif
+-#endif
+ 
+ 
+ /*
+Index: acpica-unix2-20210604/source/include/acutils.h
+===================================================================
+--- acpica-unix2-20210604.orig/source/include/acutils.h
++++ acpica-unix2-20210604/source/include/acutils.h
+@@ -1167,4 +1167,36 @@ AcpiUtConvertUuidToString (
+     char                    *OutString);
+ #endif
+ 
++
++/*
++ * utendian -- byte-swapping for big-endian support
++ */
++
++UINT8
++UtIsBigEndianMachine (
++    void);
++
++#if defined(ACPI_ASL_COMPILER) || defined(ACPI_EXEC_APP) || \
++    defined(ACPI_HELP_APP)     || defined(ACPI_DUMP_APP) || \
++    defined(ACPI_EXAMPLE_APP)  || defined(ACPI_BIN_APP)
++UINT32
++AcpiUtReadUint32 (
++    void                    *SrcPtr);
++
++UINT16
++AcpiUtReadUint16 (
++    void                    *SrcPtr);
++
++UINT64
++AcpiUtReadUint64 (
++    void                    *SrcPtr);
++
++void  
++AcpiUtWriteUint (
++    void                    *DstPtr,
++    int                     DstLength,
++    const void              *SrcPtr,
++    const int               SrcLength);
++#endif
++
+ #endif /* _ACUTILS_H */
+Index: acpica-unix2-20210604/source/include/platform/aclinux.h
+===================================================================
+--- acpica-unix2-20210604.orig/source/include/platform/aclinux.h
++++ acpica-unix2-20210604/source/include/platform/aclinux.h
+@@ -198,6 +198,7 @@
+ 
+ #ifdef ACPI_USE_STANDARD_HEADERS
+ #include <unistd.h>
++#include <endian.h>
+ #endif
+ 
+ /* Define/disable kernel-specific declarators */
diff --git a/SOURCES/0002-Modify-utility-functions-to-be-endian-agnostic.patch b/SOURCES/0002-Modify-utility-functions-to-be-endian-agnostic.patch
new file mode 100644
index 0000000..2f3f51e
--- /dev/null
+++ b/SOURCES/0002-Modify-utility-functions-to-be-endian-agnostic.patch
@@ -0,0 +1,200 @@
+From 51b0d06c0a6c4d4e19432ebf930299855c8fcf23 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Fri, 18 Sep 2020 15:14:30 -0600
+Subject: [PATCH 02/45] Modify utility functions to be endian-agnostic
+
+All of the modifications here use the big-endian code previously added
+(see utendian.c) to make themselves endian-agnostic; i.e., that the code
+does not need to change further to work on both big- and little-endian
+machines.
+
+These particular files were changed to handle the reading and writing
+of files (the length is often embedded in the binary stream), and to
+handle the reading and writing of integer values.  The common cases are
+to "read" a 32-bit unsigned int in little-endian format, but convert it
+to host-native, and to write a byte, word, double word or quad word value
+as little-endian, regardless of host-native format.
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/acfileio.c           | 16 ++++++++++------
+ source/common/dmtable.c            |  8 ++++----
+ source/compiler/dtfield.c          |  2 +-
+ source/compiler/dtsubtable.c       |  4 ++--
+ source/components/tables/tbprint.c | 13 +++++++++----
+ 5 files changed, 26 insertions(+), 17 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/acfileio.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/acfileio.c
++++ acpica-unix2-20210604/source/common/acfileio.c
+@@ -280,6 +280,7 @@ AcGetOneTableFromFile (
+     ACPI_TABLE_HEADER       *Table;
+     INT32                   Count;
+     long                    TableOffset;
++    UINT32                  Length;
+ 
+ 
+     *ReturnTable = NULL;
+@@ -319,7 +320,8 @@ AcGetOneTableFromFile (
+ 
+     /* Allocate a buffer for the entire table */
+ 
+-    Table = AcpiOsAllocate ((ACPI_SIZE) TableHeader.Length);
++    Length = AcpiUtReadUint32 (&TableHeader.Length);
++    Table = AcpiOsAllocate ((ACPI_SIZE) Length);
+     if (!Table)
+     {
+         return (AE_NO_MEMORY);
+@@ -329,13 +331,13 @@ AcGetOneTableFromFile (
+ 
+     fseek (File, TableOffset, SEEK_SET);
+ 
+-    Count = fread (Table, 1, TableHeader.Length, File);
++    Count = fread (Table, 1, Length, File);
+ 
+     /*
+      * Checks for data table headers happen later in the execution. Only verify
+      * for Aml tables at this point in the code.
+      */
+-    if (GetOnlyAmlTables && Count != (INT32) TableHeader.Length)
++    if (GetOnlyAmlTables && Count != (INT32) Length)
+     {
+         Status = AE_ERROR;
+         goto ErrorExit;
+@@ -343,7 +345,7 @@ AcGetOneTableFromFile (
+ 
+     /* Validate the checksum (just issue a warning) */
+ 
+-    Status = AcpiTbVerifyChecksum (Table, TableHeader.Length);
++    Status = AcpiTbVerifyChecksum (Table, Length);
+     if (ACPI_FAILURE (Status))
+     {
+         Status = AcCheckTextModeCorruption (Table);
+@@ -436,6 +438,7 @@ AcValidateTableHeader (
+     long                    OriginalOffset;
+     UINT32                  FileSize;
+     UINT32                  i;
++    UINT32                  Length;
+ 
+ 
+     ACPI_FUNCTION_TRACE (AcValidateTableHeader);
+@@ -467,11 +470,12 @@ AcValidateTableHeader (
+     /* Validate table length against bytes remaining in the file */
+ 
+     FileSize = CmGetFileSize (File);
+-    if (TableHeader.Length > (UINT32) (FileSize - TableOffset))
++    Length = AcpiUtReadUint32 (&TableHeader.Length);
++    if (Length > (UINT32) (FileSize - TableOffset))
+     {
+         fprintf (stderr, "Table [%4.4s] is too long for file - "
+             "needs: 0x%.2X, remaining in file: 0x%.2X\n",
+-            TableHeader.Signature, TableHeader.Length,
++            TableHeader.Signature, Length,
+             (UINT32) (FileSize - TableOffset));
+         return (AE_BAD_HEADER);
+     }
+Index: acpica-unix2-20210604/source/common/dmtable.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtable.c
++++ acpica-unix2-20210604/source/common/dmtable.c
+@@ -591,7 +591,7 @@ AcpiDmDumpDataTable (
+         {
+             /* Dump the raw table data */
+ 
+-            Length = Table->Length;
++            Length = AcpiUtReadUint32 (&Table->Length);
+ 
+             AcpiOsPrintf ("\n/*\n%s: Length %d (0x%X)\n\n",
+                 ACPI_RAW_TABLE_DATA_HEADER, Length, Length);
+@@ -608,7 +608,7 @@ AcpiDmDumpDataTable (
+      */
+     if (ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_FACS))
+     {
+-        Length = Table->Length;
++        Length = AcpiUtReadUint32 (&Table->Length);
+         Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoFacs);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -628,7 +628,7 @@ AcpiDmDumpDataTable (
+         /*
+          * All other tables must use the common ACPI table header, dump it now
+          */
+-        Length = Table->Length;
++        Length = AcpiUtReadUint32(&Table->Length);
+         Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHeader);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -1262,7 +1262,7 @@ AcpiDmDumpTable (
+ 
+             AcpiOsPrintf ("%2.2X", *Target);
+             Temp8 = AcpiDmGenerateChecksum (Table,
+-                ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Length,
++                AcpiUtReadUint32 (&(ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Length)),
+                 ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Checksum);
+ 
+             if (Temp8 != ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Checksum)
+Index: acpica-unix2-20210604/source/compiler/dtfield.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dtfield.c
++++ acpica-unix2-20210604/source/compiler/dtfield.c
+@@ -361,7 +361,7 @@ DtCompileInteger (
+         DtError (ASL_ERROR, ASL_MSG_INTEGER_SIZE, Field, AslGbl_MsgBuffer);
+     }
+ 
+-    memcpy (Buffer, &Value, ByteLength);
++    AcpiUtWriteUint (Buffer, ByteLength, &Value, sizeof (UINT64));
+     return;
+ }
+ 
+Index: acpica-unix2-20210604/source/compiler/dtsubtable.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dtsubtable.c
++++ acpica-unix2-20210604/source/compiler/dtsubtable.c
+@@ -378,6 +378,6 @@ DtSetSubtableLength (
+         return;
+     }
+ 
+-    memcpy (Subtable->LengthField, &Subtable->TotalLength,
+-        Subtable->SizeOfLengthField);
++    AcpiUtWriteUint (Subtable->LengthField, Subtable->SizeOfLengthField,
++                     &Subtable->TotalLength, sizeof (Subtable->TotalLength));
+ }
+Index: acpica-unix2-20210604/source/components/tables/tbprint.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/components/tables/tbprint.c
++++ acpica-unix2-20210604/source/components/tables/tbprint.c
+@@ -44,6 +44,8 @@
+ #include "acpi.h"
+ #include "accommon.h"
+ #include "actables.h"
++#include "platform/acenv.h"
++#include "acutils.h"
+ 
+ #define _COMPONENT          ACPI_TABLES
+         ACPI_MODULE_NAME    ("tbprint")
+@@ -151,7 +153,7 @@ AcpiTbPrintTableHeader (
+ 
+         ACPI_INFO (("%-4.4s 0x%8.8X%8.8X %06X",
+             Header->Signature, ACPI_FORMAT_UINT64 (Address),
+-            Header->Length));
++            AcpiUtReadUint32 (&Header->Length)));
+     }
+     else if (ACPI_VALIDATE_RSDP_SIG (Header->Signature))
+     {
+@@ -178,9 +180,12 @@ AcpiTbPrintTableHeader (
+             "%-4.4s 0x%8.8X%8.8X"
+             " %06X (v%.2d %-6.6s %-8.8s %08X %-4.4s %08X)",
+             LocalHeader.Signature, ACPI_FORMAT_UINT64 (Address),
+-            LocalHeader.Length, LocalHeader.Revision, LocalHeader.OemId,
+-            LocalHeader.OemTableId, LocalHeader.OemRevision,
+-            LocalHeader.AslCompilerId, LocalHeader.AslCompilerRevision));
++            AcpiUtReadUint32 (&LocalHeader.Length),
++            LocalHeader.Revision, LocalHeader.OemId,
++            LocalHeader.OemTableId,
++            AcpiUtReadUint32 (&LocalHeader.OemRevision),
++            LocalHeader.AslCompilerId,
++            AcpiUtReadUint32 (&LocalHeader.AslCompilerRevision)));
+     }
+ }
+ 
diff --git a/SOURCES/0003-Always-display-table-header-content-in-human-readabl.patch b/SOURCES/0003-Always-display-table-header-content-in-human-readabl.patch
new file mode 100644
index 0000000..6dddba1
--- /dev/null
+++ b/SOURCES/0003-Always-display-table-header-content-in-human-readabl.patch
@@ -0,0 +1,45 @@
+From 62cc2f4ae212bd0fad83f643921ac216ebb9a986 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Fri, 18 Sep 2020 15:20:37 -0600
+Subject: [PATCH 03/45] Always display table header content in human-readable
+ form
+
+When comparing two binary data tables, little-endian values are read
+from each table header and printed out.  Make sure they show up in a
+form that makes sense to humans.
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/tools/acpibin/abcompare.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+Index: acpica-unix2-20210604/source/tools/acpibin/abcompare.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/tools/acpibin/abcompare.c
++++ acpica-unix2-20210604/source/tools/acpibin/abcompare.c
+@@ -42,6 +42,7 @@
+  */
+ 
+ #include "acpibin.h"
++#include "acutils.h"
+ 
+ 
+ ACPI_TABLE_HEADER           Header1;
+@@ -179,14 +180,14 @@ AbPrintHeadersInfo (
+     /* Display header information for both headers */
+ 
+     printf ("Signature          %8.4s : %4.4s\n",    Header->Signature, Header2->Signature);
+-    printf ("Length             %8.8X : %8.8X\n",    Header->Length, Header2->Length);
++    printf ("Length             %8.8X : %8.8X\n",    AcpiUtReadUint32 (&Header->Length), AcpiUtReadUint32 (&Header2->Length));
+     printf ("Revision           %8.2X : %2.2X\n",    Header->Revision, Header2->Revision);
+     printf ("Checksum           %8.2X : %2.2X\n",    Header->Checksum, Header2->Checksum);
+     printf ("OEM ID             %8.6s : %.6s\n",     Header->OemId, Header2->OemId);
+     printf ("OEM Table ID       %8.8s : %.8s\n",     Header->OemTableId, Header2->OemTableId);
+-    printf ("OEM Revision       %8.8X : %8.8X\n",    Header->OemRevision, Header2->OemRevision);
++    printf ("OEM Revision       %8.8X : %8.8X\n",    AcpiUtReadUint32 (&Header->OemRevision), AcpiUtReadUint32 (&Header2->OemRevision));
+     printf ("ASL Compiler ID    %8.4s : %.4s\n",     Header->AslCompilerId, Header2->AslCompilerId);
+-    printf ("Compiler Revision  %8.8X : %8.8X\n",    Header->AslCompilerRevision, Header2->AslCompilerRevision);
++    printf ("Compiler Revision  %8.8X : %8.8X\n",    AcpiUtReadUint32 (&Header->AslCompilerRevision), AcpiUtReadUint32 (&Header2->AslCompilerRevision));
+     printf ("\n");
+ }
+ 
diff --git a/SOURCES/0004-Re-enable-support-for-big-endian-machines.patch b/SOURCES/0004-Re-enable-support-for-big-endian-machines.patch
new file mode 100644
index 0000000..1422b26
--- /dev/null
+++ b/SOURCES/0004-Re-enable-support-for-big-endian-machines.patch
@@ -0,0 +1,78 @@
+From 16734feab4204d6930c1ede62e527920607daace Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Wed, 16 Sep 2020 16:27:06 -0600
+Subject: [PATCH 04/45] Re-enable support for big-endian machines
+
+First, disable the big-endian check and fail.  Then, make sure the
+namespace gets initialized properly (NB: needed even if we are only
+compiling/disassembling data tables).
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/compiler/aslmain.c             | 12 ------------
+ source/components/namespace/nsutils.c |  7 +++++--
+ 2 files changed, 5 insertions(+), 14 deletions(-)
+
+Index: acpica-unix2-20210604/source/compiler/aslmain.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/aslmain.c
++++ acpica-unix2-20210604/source/compiler/aslmain.c
+@@ -101,18 +101,6 @@ main (
+ 
+     signal (SIGINT, AslSignalHandler);
+ 
+-    /*
+-     * Big-endian machines are not currently supported. ACPI tables must
+-     * be little-endian, and support for big-endian machines needs to
+-     * be implemented.
+-     */
+-    if (UtIsBigEndianMachine ())
+-    {
+-        fprintf (stderr,
+-            "iASL is not currently supported on big-endian machines.\n");
+-        return (-1);
+-    }
+-
+     AcpiOsInitialize ();
+     ACPI_DEBUG_INITIALIZE (); /* For debug version only */
+ 
+Index: acpica-unix2-20210604/source/components/namespace/nsutils.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/components/namespace/nsutils.c
++++ acpica-unix2-20210604/source/components/namespace/nsutils.c
+@@ -272,6 +272,7 @@ AcpiNsBuildInternalName (
+     const char              *ExternalName = Info->NextExternalChar;
+     char                    *Result = NULL;
+     UINT32                  i;
++    char                    TmpSeg[ACPI_NAMESEG_SIZE+1];
+ 
+ 
+     ACPI_FUNCTION_TRACE (NsBuildInternalName);
+@@ -335,6 +336,7 @@ AcpiNsBuildInternalName (
+ 
+     for (; NumSegments; NumSegments--)
+     {
++        memset (TmpSeg, 0, ACPI_NAMESEG_SIZE+1);
+         for (i = 0; i < ACPI_NAMESEG_SIZE; i++)
+         {
+             if (ACPI_IS_PATH_SEPARATOR (*ExternalName) ||
+@@ -342,16 +344,17 @@ AcpiNsBuildInternalName (
+             {
+                 /* Pad the segment with underscore(s) if segment is short */
+ 
+-                Result[i] = '_';
++                TmpSeg[i] = '_';
+             }
+             else
+             {
+                 /* Convert the character to uppercase and save it */
+ 
+-                Result[i] = (char) toupper ((int) *ExternalName);
++                TmpSeg[i] = (char) toupper ((int) *ExternalName);
+                 ExternalName++;
+             }
+         }
++    AcpiUtWriteUint (Result, ACPI_NAMESEG_SIZE, TmpSeg, ACPI_NAMESEG_SIZE);
+ 
+         /* Now we must have a path separator, or the pathname is bad */
+ 
diff --git a/SOURCES/0005-Correct-an-endian-ness-problem-when-converting-ASL-t.patch b/SOURCES/0005-Correct-an-endian-ness-problem-when-converting-ASL-t.patch
new file mode 100644
index 0000000..3074e05
--- /dev/null
+++ b/SOURCES/0005-Correct-an-endian-ness-problem-when-converting-ASL-t.patch
@@ -0,0 +1,41 @@
+From 055fee09d8f9244b6c437ad18b98edb81a87e8bc Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Tue, 27 Oct 2020 17:50:52 -0600
+Subject: [PATCH 05/45] Correct an endian-ness problem when converting ASL to
+ ASL+
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/compiler/cvparser.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+Index: acpica-unix2-20210604/source/compiler/cvparser.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/cvparser.c
++++ acpica-unix2-20210604/source/compiler/cvparser.c
+@@ -144,6 +144,7 @@ CvInitFileTree (
+     char                    *ChildFilename = NULL;
+     UINT8                   *AmlStart;
+     UINT32                  AmlLength;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+ 
+ 
+     if (!AcpiGbl_CaptureComments)
+@@ -152,7 +153,7 @@ CvInitFileTree (
+     }
+ 
+ 
+-    AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER);
++    AmlLength = TableLength - sizeof (ACPI_TABLE_HEADER);
+     AmlStart = ((UINT8 *) Table + sizeof (ACPI_TABLE_HEADER));
+ 
+     CvDbgPrint ("AmlLength: %x\n", AmlLength);
+@@ -162,7 +163,7 @@ CvInitFileTree (
+     AcpiGbl_FileTreeRoot = AcpiOsAcquireObject (AcpiGbl_FileCache);
+ 
+     AcpiGbl_FileTreeRoot->FileStart = (char *)(AmlStart);
+-    AcpiGbl_FileTreeRoot->FileEnd = (char *)(AmlStart + Table->Length);
++    AcpiGbl_FileTreeRoot->FileEnd = (char *)(AmlStart + TableLength);
+     AcpiGbl_FileTreeRoot->Next = NULL;
+     AcpiGbl_FileTreeRoot->Parent = NULL;
+     AcpiGbl_FileTreeRoot->Filename = (char *)(AmlStart+2);
diff --git a/SOURCES/0006-Use-more-reliable-ACPI_COPY_NAMSEG-in-GPE-name-check.patch b/SOURCES/0006-Use-more-reliable-ACPI_COPY_NAMSEG-in-GPE-name-check.patch
new file mode 100644
index 0000000..7b7ed81
--- /dev/null
+++ b/SOURCES/0006-Use-more-reliable-ACPI_COPY_NAMSEG-in-GPE-name-check.patch
@@ -0,0 +1,32 @@
+From 790c016107e98ded2d0ae579f84dd4cd3fa06587 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Tue, 29 Jun 2021 17:48:31 -0600
+Subject: [PATCH 06/45] Use more reliable ACPI_COPY_NAMSEG in GPE name checks
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/compiler/aslanalyze.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: acpica-unix2-20210604/source/compiler/aslanalyze.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/aslanalyze.c
++++ acpica-unix2-20210604/source/compiler/aslanalyze.c
+@@ -469,7 +469,7 @@ ApCheckForGpeNameConflict (
+ 
+     /* Need a null-terminated string version of NameSeg */
+ 
+-    ACPI_MOVE_32_TO_32 (Name, Op->Asl.NameSeg);
++    ACPI_COPY_NAMESEG (Name, Op->Asl.NameSeg);
+     Name[ACPI_NAMESEG_SIZE] = 0;
+ 
+     /*
+@@ -496,7 +496,7 @@ ApCheckForGpeNameConflict (
+      * We are now sure we have an _Lxx or _Exx.
+      * Create the target name that would cause collision (Flip E/L)
+      */
+-    ACPI_MOVE_32_TO_32 (Target, Name);
++    ACPI_COPY_NAMESEG (Target, Name);
+ 
+     /* Inject opposite letter ("L" versus "E") */
+ 
diff --git a/SOURCES/0007-Handle-dumping-Unicode-properly-when-big-endian.patch b/SOURCES/0007-Handle-dumping-Unicode-properly-when-big-endian.patch
new file mode 100644
index 0000000..ade4c9a
--- /dev/null
+++ b/SOURCES/0007-Handle-dumping-Unicode-properly-when-big-endian.patch
@@ -0,0 +1,53 @@
+From 9a4a32c597fcdfa8a3bc33230c40a18e39c3449d Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Thu, 1 Jul 2021 17:46:19 -0600
+Subject: [PATCH 07/45] Handle dumping Unicode properly when big-endian
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump.c | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump.c
++++ acpica-unix2-20210604/source/common/dmtbdump.c
+@@ -146,6 +146,8 @@ AcpiDmDumpUnicode (
+     UINT8                   *Buffer;
+     UINT32                  Length;
+     UINT32                  i;
++    UINT16		    Tmp16;
++    UINT32                  start;
+ 
+ 
+     Buffer = ((UINT8 *) Table) + BufferOffset;
+@@ -155,7 +157,8 @@ AcpiDmDumpUnicode (
+ 
+     for (i = 0; i < Length; i += 2)
+     {
+-        if (!isprint (Buffer[i]))
++        Tmp16 = AcpiUtReadUint16 (&Buffer[i]);
++        if (!isprint (Tmp16))
+         {
+             goto DumpRawBuffer;
+         }
+@@ -163,7 +166,8 @@ AcpiDmDumpUnicode (
+ 
+     /* Ensure all high bytes are zero */
+ 
+-    for (i = 1; i < Length; i += 2)
++    start = UtIsBigEndianMachine() ? 0 : 1;
++    for (i = start; i < Length; i += 2)
+     {
+         if (Buffer[i])
+         {
+@@ -176,7 +180,8 @@ AcpiDmDumpUnicode (
+     AcpiOsPrintf ("\"");
+     for (i = 0; i < Length; i += 2)
+     {
+-        AcpiOsPrintf ("%c", Buffer[i]);
++        Tmp16 = AcpiUtReadUint16 (&Buffer[i]);
++        AcpiOsPrintf ("%c", Tmp16);
+     }
+ 
+     AcpiOsPrintf ("\"\n");
diff --git a/SOURCES/0008-Support-MADT-aka-APIC-in-a-big-endian-world.patch b/SOURCES/0008-Support-MADT-aka-APIC-in-a-big-endian-world.patch
new file mode 100644
index 0000000..ad4214d
--- /dev/null
+++ b/SOURCES/0008-Support-MADT-aka-APIC-in-a-big-endian-world.patch
@@ -0,0 +1,32 @@
+From 7b107ab7348d903108140f6033e90596b12325c4 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Thu, 15 Oct 2020 12:12:11 -0600
+Subject: [PATCH 08/45] Support MADT (aka APIC) in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20210604/source/common/dmtbdump2.c
+@@ -763,7 +763,7 @@ AcpiDmDumpMadt (
+ {
+     ACPI_STATUS             Status;
+     ACPI_SUBTABLE_HEADER    *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  Length = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_MADT);
+     ACPI_DMTABLE_INFO       *InfoTable;
+ 
+@@ -779,7 +779,7 @@ AcpiDmDumpMadt (
+     /* Subtables */
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < Length)
+     {
+         /* Common subtable header */
+ 
diff --git a/SOURCES/0009-Support-ASF-tables-in-a-big-endian-world.patch b/SOURCES/0009-Support-ASF-tables-in-a-big-endian-world.patch
new file mode 100644
index 0000000..5e21344
--- /dev/null
+++ b/SOURCES/0009-Support-ASF-tables-in-a-big-endian-world.patch
@@ -0,0 +1,55 @@
+From ce811b4c38b9a09533ee8bafa22813f6e43c023d Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Fri, 18 Sep 2020 16:41:02 -0600
+Subject: [PATCH 09/45] Support ASF! tables in a big-endian world
+
+Read the table length properly and it all works right for big-endian.
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump1.c | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20210604/source/common/dmtbdump1.c
+@@ -79,16 +79,18 @@ AcpiDmDumpAsf (
+     UINT32                  DataOffset = 0;
+     UINT32                  i;
+     UINT8                   Type;
++    UINT32                  TableLength;
+ 
+ 
+     /* No main table, only subtables */
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Table, Offset);
+-    while (Offset < Table->Length)
++    TableLength = AcpiUtReadUint32 (&Table->Length);
++    while (Offset < TableLength)
+     {
+         /* Common subtable header */
+ 
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             Subtable->Header.Length, AcpiDmTableInfoAsfHdr);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -146,7 +148,7 @@ AcpiDmDumpAsf (
+             return;
+         }
+ 
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             Subtable->Header.Length, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -163,7 +165,7 @@ AcpiDmDumpAsf (
+             for (i = 0; i < DataCount; i++)
+             {
+                 AcpiOsPrintf ("\n");
+-                Status = AcpiDmDumpTable (Table->Length, DataOffset,
++                Status = AcpiDmDumpTable (TableLength, DataOffset,
+                     DataTable, DataLength, DataInfoTable);
+                 if (ACPI_FAILURE (Status))
+                 {
diff --git a/SOURCES/0010-Support-CPEP-tables-in-a-big-endian-world.patch b/SOURCES/0010-Support-CPEP-tables-in-a-big-endian-world.patch
new file mode 100644
index 0000000..aa677b7
--- /dev/null
+++ b/SOURCES/0010-Support-CPEP-tables-in-a-big-endian-world.patch
@@ -0,0 +1,32 @@
+From 0c4be57a5e0e45b4197c2d9a0b26462d3b1a9b80 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Fri, 18 Sep 2020 16:54:13 -0600
+Subject: [PATCH 10/45] Support CPEP tables in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump1.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20210604/source/common/dmtbdump1.c
+@@ -319,7 +319,7 @@ AcpiDmDumpCpep (
+ {
+     ACPI_STATUS             Status;
+     ACPI_CPEP_POLLING       *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  Length = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_CPEP);
+ 
+ 
+@@ -334,7 +334,7 @@ AcpiDmDumpCpep (
+     /* Subtables */
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < Length)
+     {
+         AcpiOsPrintf ("\n");
+         Status = AcpiDmDumpTable (Length, Offset, Subtable,
diff --git a/SOURCES/0011-Support-DBG2-table-in-a-big-endian-world.patch b/SOURCES/0011-Support-DBG2-table-in-a-big-endian-world.patch
new file mode 100644
index 0000000..cc613fc
--- /dev/null
+++ b/SOURCES/0011-Support-DBG2-table-in-a-big-endian-world.patch
@@ -0,0 +1,256 @@
+From 2cb0b87a15682da4f19f707fa3ffece504f94b5a Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Sat, 19 Sep 2020 13:37:38 -0600
+Subject: [PATCH 11/45] Support DBG2 table in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump1.c  | 37 ++++++++++++++++++--------------
+ source/compiler/dttable1.c | 43 ++++++++++++++++++++++++--------------
+ 2 files changed, 48 insertions(+), 32 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20210604/source/common/dmtbdump1.c
+@@ -374,7 +374,7 @@ AcpiDmDumpCsrt (
+     ACPI_CSRT_GROUP         *Subtable;
+     ACPI_CSRT_SHARED_INFO   *SharedInfoTable;
+     ACPI_CSRT_DESCRIPTOR    *SubSubtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  Length = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_CSRT);
+     UINT32                  SubOffset;
+     UINT32                  SubSubOffset;
+@@ -386,7 +386,7 @@ AcpiDmDumpCsrt (
+     /* Subtables (Resource Groups) */
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < Length)
+     {
+         /* Resource group subtable */
+ 
+@@ -420,7 +420,7 @@ AcpiDmDumpCsrt (
+             Offset + SubOffset);
+ 
+         while ((SubOffset < Subtable->Length) &&
+-              ((Offset + SubOffset) < Table->Length))
++              ((Offset + SubOffset) < Length))
+         {
+             AcpiOsPrintf ("\n");
+             Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubtable,
+@@ -481,12 +481,13 @@ AcpiDmDumpDbg2 (
+ {
+     ACPI_STATUS             Status;
+     ACPI_DBG2_DEVICE        *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  Length = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_DBG2);
+     UINT32                  i;
+     UINT32                  ArrayOffset;
+     UINT32                  AbsoluteOffset;
+     UINT8                   *Array;
++    UINT16                  SubtableLength;
+ 
+ 
+     /* Main table */
+@@ -500,11 +501,12 @@ AcpiDmDumpDbg2 (
+     /* Subtables */
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < Length)
+     {
+         AcpiOsPrintf ("\n");
++        SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
+         Status = AcpiDmDumpTable (Length, Offset, Subtable,
+-            Subtable->Length, AcpiDmTableInfoDbg2Device);
++            SubtableLength, AcpiDmTableInfoDbg2Device);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+@@ -514,13 +516,13 @@ AcpiDmDumpDbg2 (
+ 
+         for (i = 0; i < Subtable->RegisterCount; i++)
+         {
+-            ArrayOffset = Subtable->BaseAddressOffset +
++            ArrayOffset = AcpiUtReadUint16 (&Subtable->BaseAddressOffset) +
+                 (sizeof (ACPI_GENERIC_ADDRESS) * i);
+             AbsoluteOffset = Offset + ArrayOffset;
+             Array = (UINT8 *) Subtable + ArrayOffset;
+ 
+             Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
+-                Subtable->Length, AcpiDmTableInfoDbg2Addr);
++                SubtableLength, AcpiDmTableInfoDbg2Addr);
+             if (ACPI_FAILURE (Status))
+             {
+                 return;
+@@ -531,13 +533,13 @@ AcpiDmDumpDbg2 (
+ 
+         for (i = 0; i < Subtable->RegisterCount; i++)
+         {
+-            ArrayOffset = Subtable->AddressSizeOffset +
++            ArrayOffset = AcpiUtReadUint16 (&Subtable->AddressSizeOffset) +
+                 (sizeof (UINT32) * i);
+             AbsoluteOffset = Offset + ArrayOffset;
+             Array = (UINT8 *) Subtable + ArrayOffset;
+ 
+             Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
+-                Subtable->Length, AcpiDmTableInfoDbg2Size);
++                SubtableLength, AcpiDmTableInfoDbg2Size);
+             if (ACPI_FAILURE (Status))
+             {
+                 return;
+@@ -547,12 +549,12 @@ AcpiDmDumpDbg2 (
+         /* Dump the Namestring (required) */
+ 
+         AcpiOsPrintf ("\n");
+-        ArrayOffset = Subtable->NamepathOffset;
++        ArrayOffset = AcpiUtReadUint16 (&Subtable->NamepathOffset);
+         AbsoluteOffset = Offset + ArrayOffset;
+         Array = (UINT8 *) Subtable + ArrayOffset;
+ 
+         Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
+-            Subtable->Length, AcpiDmTableInfoDbg2Name);
++            SubtableLength, AcpiDmTableInfoDbg2Name);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+@@ -562,8 +564,11 @@ AcpiDmDumpDbg2 (
+ 
+         if (Subtable->OemDataOffset)
+         {
+-            Status = AcpiDmDumpTable (Length, Offset + Subtable->OemDataOffset,
+-                Table, Subtable->OemDataLength,
++            Array = (UINT8 *) Subtable + AcpiUtReadUint16 (&Subtable->OemDataOffset);
++
++            Status = AcpiDmDumpTable (Length,
++                Offset + AcpiUtReadUint16 (&Subtable->OemDataOffset),
++                Array, AcpiUtReadUint16 (&Subtable->OemDataLength),
+                 AcpiDmTableInfoDbg2OemData);
+             if (ACPI_FAILURE (Status))
+             {
+@@ -573,9 +578,9 @@ AcpiDmDumpDbg2 (
+ 
+         /* Point to next subtable */
+ 
+-        Offset += Subtable->Length;
++        Offset += SubtableLength;
+         Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Subtable,
+-            Subtable->Length);
++            SubtableLength);
+     }
+ }
+ 
+Index: acpica-unix2-20210604/source/compiler/dttable1.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dttable1.c
++++ acpica-unix2-20210604/source/compiler/dttable1.c
+@@ -355,6 +355,7 @@ DtCompileCsrt (
+     DT_FIELD                **PFieldList = (DT_FIELD **) List;
+     UINT32                  DescriptorCount;
+     UINT32                  GroupLength;
++    UINT32                  Tmp;
+ 
+ 
+     /* Subtables (Resource Groups) */
+@@ -373,12 +374,13 @@ DtCompileCsrt (
+ 
+         /* Compute the number of resource descriptors */
+ 
+-        GroupLength =
+-            (ACPI_CAST_PTR (ACPI_CSRT_GROUP,
+-                Subtable->Buffer))->Length -
+-            (ACPI_CAST_PTR (ACPI_CSRT_GROUP,
+-                Subtable->Buffer))->SharedInfoLength -
+-            sizeof (ACPI_CSRT_GROUP);
++        Tmp = AcpiUtReadUint32 (&(ACPI_CAST_PTR (ACPI_CSRT_GROUP,
++                                Subtable->Buffer))->Length);
++        GroupLength = Tmp;
++        Tmp = AcpiUtReadUint32 (&(ACPI_CAST_PTR (ACPI_CSRT_GROUP,
++                                Subtable->Buffer))->SharedInfoLength);
++        GroupLength -= Tmp;
++        GroupLength -= sizeof (ACPI_CSRT_GROUP);
+ 
+         DescriptorCount = (GroupLength  /
+             sizeof (ACPI_CSRT_DESCRIPTOR));
+@@ -466,6 +468,7 @@ DtCompileDbg2 (
+     ACPI_DBG2_DEVICE        *DeviceInfo;
+     UINT16                  CurrentOffset;
+     UINT32                  i;
++    UINT32                  Tmp;
+ 
+ 
+     /* Main table */
+@@ -482,10 +485,12 @@ DtCompileDbg2 (
+     /* Main table fields */
+ 
+     Dbg2Header = ACPI_CAST_PTR (ACPI_DBG2_HEADER, Subtable->Buffer);
+-    Dbg2Header->InfoOffset = sizeof (ACPI_TABLE_HEADER) + ACPI_PTR_DIFF (
+-        ACPI_ADD_PTR (UINT8, Dbg2Header, sizeof (ACPI_DBG2_HEADER)), Dbg2Header);
++    Tmp = sizeof (ACPI_TABLE_HEADER) + ACPI_PTR_DIFF (
++       ACPI_ADD_PTR (UINT8, Dbg2Header, sizeof (ACPI_DBG2_HEADER)), Dbg2Header);
++    AcpiUtWriteUint (&Dbg2Header->InfoOffset, sizeof (UINT32),
++            &Tmp, sizeof (UINT32));
+ 
+-    SubtableCount = Dbg2Header->InfoCount;
++    SubtableCount = Tmp;
+     DtPushSubtable (Subtable);
+ 
+     /* Process all Device Information subtables (Count = InfoCount) */
+@@ -512,7 +517,8 @@ DtCompileDbg2 (
+ 
+         /* BaseAddressRegister GAS array (Required, size is RegisterCount) */
+ 
+-        DeviceInfo->BaseAddressOffset = CurrentOffset;
++        AcpiUtWriteUint (&DeviceInfo->BaseAddressOffset, sizeof (UINT16),
++                &CurrentOffset, sizeof (UINT16));
+         for (i = 0; *PFieldList && (i < DeviceInfo->RegisterCount); i++)
+         {
+             Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Addr,
+@@ -528,7 +534,8 @@ DtCompileDbg2 (
+ 
+         /* AddressSize array (Required, size = RegisterCount) */
+ 
+-        DeviceInfo->AddressSizeOffset = CurrentOffset;
++        AcpiUtWriteUint (&DeviceInfo->AddressSizeOffset, sizeof (UINT16),
++                &CurrentOffset, sizeof (UINT16));
+         for (i = 0; *PFieldList && (i < DeviceInfo->RegisterCount); i++)
+         {
+             Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Size,
+@@ -544,7 +551,8 @@ DtCompileDbg2 (
+ 
+         /* NamespaceString device identifier (Required, size = NamePathLength) */
+ 
+-        DeviceInfo->NamepathOffset = CurrentOffset;
++        AcpiUtWriteUint (&DeviceInfo->NamepathOffset, sizeof (UINT16),
++            &CurrentOffset, sizeof (UINT16));
+         Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Name,
+             &Subtable);
+         if (ACPI_FAILURE (Status))
+@@ -554,8 +562,9 @@ DtCompileDbg2 (
+ 
+         /* Update the device info header */
+ 
+-        DeviceInfo->NamepathLength = (UINT16) Subtable->Length;
+-        CurrentOffset += (UINT16) DeviceInfo->NamepathLength;
++        AcpiUtWriteUint (&DeviceInfo->NamepathLength, sizeof (UINT16),
++            &Subtable->Length, sizeof (UINT32));
++        CurrentOffset += AcpiUtReadUint16 (&DeviceInfo->NamepathLength);
+         DtInsertSubtable (ParentTable, Subtable);
+ 
+         /* OemData - Variable-length data (Optional, size = OemDataLength) */
+@@ -582,8 +591,10 @@ DtCompileDbg2 (
+ 
+         if (Subtable && Subtable->Length)
+         {
+-            DeviceInfo->OemDataOffset = CurrentOffset;
+-            DeviceInfo->OemDataLength = (UINT16) Subtable->Length;
++            AcpiUtWriteUint (&DeviceInfo->OemDataOffset, sizeof (UINT16),
++                &CurrentOffset, sizeof (UINT16));
++            AcpiUtWriteUint (&DeviceInfo->OemDataLength, sizeof (UINT16),
++                &Subtable->Length, sizeof (UINT32));
+ 
+             DtInsertSubtable (ParentTable, Subtable);
+         }
diff --git a/SOURCES/0012-Support-DMAR-in-a-big-endian-world.patch b/SOURCES/0012-Support-DMAR-in-a-big-endian-world.patch
new file mode 100644
index 0000000..3a3f33b
--- /dev/null
+++ b/SOURCES/0012-Support-DMAR-in-a-big-endian-world.patch
@@ -0,0 +1,171 @@
+From 06623392351dfea54bd69507b6672c933a5e3fd2 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Sat, 19 Sep 2020 15:22:00 -0600
+Subject: [PATCH 12/45] Support DMAR in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtable.c    |  4 ++--
+ source/common/dmtbdump1.c  | 26 +++++++++++++++-----------
+ source/compiler/dttable1.c | 12 +++++++-----
+ 3 files changed, 24 insertions(+), 18 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtable.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtable.c
++++ acpica-unix2-20210604/source/common/dmtable.c
+@@ -1341,13 +1341,13 @@ AcpiDmDumpTable (
+ 
+             /* DMAR subtable types */
+ 
+-            Temp16 = ACPI_GET16 (Target);
++            Temp16 = AcpiUtReadUint16 (Target);
+             if (Temp16 > ACPI_DMAR_TYPE_RESERVED)
+             {
+                 Temp16 = ACPI_DMAR_TYPE_RESERVED;
+             }
+ 
+-            AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target),
++            AcpiOsPrintf (UINT16_FORMAT, Temp16,
+                 AcpiDmDmarSubnames[Temp16]);
+             break;
+ 
+Index: acpica-unix2-20210604/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20210604/source/common/dmtbdump1.c
+@@ -604,13 +604,15 @@ AcpiDmDumpDmar (
+ {
+     ACPI_STATUS             Status;
+     ACPI_DMAR_HEADER        *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  Length = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_DMAR);
+     ACPI_DMTABLE_INFO       *InfoTable;
+     ACPI_DMAR_DEVICE_SCOPE  *ScopeTable;
+     UINT32                  ScopeOffset;
+     UINT8                   *PciPath;
+     UINT32                  PathOffset;
++    UINT16                  SubtableType;
++    UINT16                  SubtableLength;
+ 
+ 
+     /* Main table */
+@@ -624,13 +626,14 @@ AcpiDmDumpDmar (
+     /* Subtables */
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < Length)
+     {
+         /* Common subtable header */
+ 
+         AcpiOsPrintf ("\n");
++        SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
+         Status = AcpiDmDumpTable (Length, Offset, Subtable,
+-            Subtable->Length, AcpiDmTableInfoDmarHdr);
++            SubtableLength, AcpiDmTableInfoDmarHdr);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+@@ -638,7 +641,8 @@ AcpiDmDumpDmar (
+ 
+         AcpiOsPrintf ("\n");
+ 
+-        switch (Subtable->Type)
++        SubtableType = AcpiUtReadUint16 (&Subtable->Type);
++        switch (SubtableType)
+         {
+         case ACPI_DMAR_TYPE_HARDWARE_UNIT:
+ 
+@@ -673,12 +677,12 @@ AcpiDmDumpDmar (
+         default:
+ 
+             AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n",
+-                Subtable->Type);
++                SubtableType);
+             return;
+         }
+ 
+         Status = AcpiDmDumpTable (Length, Offset, Subtable,
+-            Subtable->Length, InfoTable);
++            SubtableLength, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+@@ -687,8 +691,8 @@ AcpiDmDumpDmar (
+         /*
+          * Dump the optional device scope entries
+          */
+-        if ((Subtable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
+-            (Subtable->Type == ACPI_DMAR_TYPE_NAMESPACE))
++        if ((SubtableType == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
++            (SubtableType == ACPI_DMAR_TYPE_NAMESPACE))
+         {
+             /* These types do not support device scopes */
+ 
+@@ -696,7 +700,7 @@ AcpiDmDumpDmar (
+         }
+ 
+         ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, Subtable, ScopeOffset);
+-        while (ScopeOffset < Subtable->Length)
++        while (ScopeOffset < SubtableLength)
+         {
+             AcpiOsPrintf ("\n");
+             Status = AcpiDmDumpTable (Length, Offset + ScopeOffset, ScopeTable,
+@@ -737,9 +741,9 @@ AcpiDmDumpDmar (
+ NextSubtable:
+         /* Point to next subtable */
+ 
+-        Offset += Subtable->Length;
++        Offset += SubtableLength;
+         Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Subtable,
+-            Subtable->Length);
++            SubtableLength);
+     }
+ }
+ 
+Index: acpica-unix2-20210604/source/compiler/dttable1.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dttable1.c
++++ acpica-unix2-20210604/source/compiler/dttable1.c
+@@ -634,6 +634,7 @@ DtCompileDmar (
+     ACPI_DMAR_DEVICE_SCOPE  *DmarDeviceScope;
+     UINT32                  DeviceScopeLength;
+     UINT32                  PciPathLength;
++    UINT16                  DmarHeaderType;
+ 
+ 
+     Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmar, &Subtable);
+@@ -664,7 +665,8 @@ DtCompileDmar (
+ 
+         DmarHeader = ACPI_CAST_PTR (ACPI_DMAR_HEADER, Subtable->Buffer);
+ 
+-        switch (DmarHeader->Type)
++        DmarHeaderType = AcpiUtReadUint16 (&DmarHeader->Type);
++        switch (DmarHeaderType)
+         {
+         case ACPI_DMAR_TYPE_HARDWARE_UNIT:
+ 
+@@ -711,8 +713,8 @@ DtCompileDmar (
+         /*
+          * Optional Device Scope subtables
+          */
+-        if ((DmarHeader->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
+-            (DmarHeader->Type == ACPI_DMAR_TYPE_NAMESPACE))
++        if ((DmarHeaderType == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
++            (DmarHeaderType == ACPI_DMAR_TYPE_NAMESPACE))
+         {
+             /* These types do not support device scopes */
+ 
+@@ -721,8 +723,8 @@ DtCompileDmar (
+         }
+ 
+         DtPushSubtable (Subtable);
+-        DeviceScopeLength = DmarHeader->Length - Subtable->Length -
+-            ParentTable->Length;
++        DeviceScopeLength = AcpiUtReadUint16 (&DmarHeader->Length) -
++                Subtable->Length - ParentTable->Length;
+         while (DeviceScopeLength)
+         {
+             Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmarScope,
diff --git a/SOURCES/0013-Support-DRTM-in-a-big-endian-world.patch b/SOURCES/0013-Support-DRTM-in-a-big-endian-world.patch
new file mode 100644
index 0000000..ac21497
--- /dev/null
+++ b/SOURCES/0013-Support-DRTM-in-a-big-endian-world.patch
@@ -0,0 +1,112 @@
+From bcdec27f562b0df37546b5e8ad2eab76348062eb Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Sat, 19 Sep 2020 15:44:06 -0600
+Subject: [PATCH 13/45] Support DRTM in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump1.c  | 25 +++++++++++++++----------
+ source/compiler/dttable1.c |  6 ++++--
+ 2 files changed, 19 insertions(+), 12 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20210604/source/common/dmtbdump1.c
+@@ -770,11 +770,14 @@ AcpiDmDumpDrtm (
+     ACPI_DRTM_RESOURCE_LIST *DrtmRl;
+     ACPI_DRTM_DPS_ID        *DrtmDps;
+     UINT32                  Count;
++    UINT32                  ResourceCount;
++    UINT32                  ValidatedTableCount;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+ 
+ 
+     /* Main table */
+ 
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0,
+         AcpiDmTableInfoDrtm);
+     if (ACPI_FAILURE (Status))
+     {
+@@ -789,7 +792,7 @@ AcpiDmDumpDrtm (
+ 
+     DrtmVtl = ACPI_ADD_PTR (ACPI_DRTM_VTABLE_LIST, Table, Offset);
+     AcpiOsPrintf ("\n");
+-    Status = AcpiDmDumpTable (Table->Length, Offset,
++    Status = AcpiDmDumpTable (TableLength, Offset,
+         DrtmVtl, ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables),
+         AcpiDmTableInfoDrtm0);
+     if (ACPI_FAILURE (Status))
+@@ -802,10 +805,11 @@ AcpiDmDumpDrtm (
+     /* Dump Validated table addresses */
+ 
+     Count = 0;
+-    while ((Offset < Table->Length) &&
+-            (DrtmVtl->ValidatedTableCount > Count))
++    ValidatedTableCount = AcpiUtReadUint32 (&DrtmVtl->ValidatedTableCount);
++    while ((Offset < TableLength) &&
++            (ValidatedTableCount > Count))
+     {
+-        Status = AcpiDmDumpTable (Table->Length, Offset,
++        Status = AcpiDmDumpTable (TableLength, Offset,
+             ACPI_ADD_PTR (void, Table, Offset), sizeof (UINT64),
+             AcpiDmTableInfoDrtm0a);
+         if (ACPI_FAILURE (Status))
+@@ -821,7 +825,7 @@ AcpiDmDumpDrtm (
+ 
+     DrtmRl = ACPI_ADD_PTR (ACPI_DRTM_RESOURCE_LIST, Table, Offset);
+     AcpiOsPrintf ("\n");
+-    Status = AcpiDmDumpTable (Table->Length, Offset,
++    Status = AcpiDmDumpTable (TableLength, Offset,
+         DrtmRl, ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources),
+         AcpiDmTableInfoDrtm1);
+     if (ACPI_FAILURE (Status))
+@@ -834,10 +838,11 @@ AcpiDmDumpDrtm (
+     /* Dump the Resource List */
+ 
+     Count = 0;
+-    while ((Offset < Table->Length) &&
+-           (DrtmRl->ResourceCount > Count))
++    ResourceCount = AcpiUtReadUint32 (&DrtmRl->ResourceCount);
++    while ((Offset < TableLength) &&
++           (ResourceCount > Count))
+     {
+-        Status = AcpiDmDumpTable (Table->Length, Offset,
++        Status = AcpiDmDumpTable (TableLength, Offset,
+             ACPI_ADD_PTR (void, Table, Offset),
+             sizeof (ACPI_DRTM_RESOURCE), AcpiDmTableInfoDrtm1a);
+         if (ACPI_FAILURE (Status))
+@@ -853,7 +858,7 @@ AcpiDmDumpDrtm (
+ 
+     DrtmDps = ACPI_ADD_PTR (ACPI_DRTM_DPS_ID, Table, Offset);
+     AcpiOsPrintf ("\n");
+-    (void) AcpiDmDumpTable (Table->Length, Offset,
++    (void) AcpiDmDumpTable (TableLength, Offset,
+         DrtmDps, sizeof (ACPI_DRTM_DPS_ID), AcpiDmTableInfoDrtm2);
+ }
+ 
+Index: acpica-unix2-20210604/source/compiler/dttable1.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dttable1.c
++++ acpica-unix2-20210604/source/compiler/dttable1.c
+@@ -849,7 +849,8 @@ DtCompileDrtm (
+         Count++;
+     }
+ 
+-    DrtmVtl->ValidatedTableCount = Count;
++    AcpiUtWriteUint (&DrtmVtl->ValidatedTableCount, sizeof (UINT32),
++            &Count, sizeof (UINT32));
+     DtPopSubtable ();
+     ParentTable = DtPeekSubtable ();
+ 
+@@ -887,7 +888,8 @@ DtCompileDrtm (
+         Count++;
+     }
+ 
+-    DrtmRl->ResourceCount = Count;
++    AcpiUtWriteUint(&DrtmRl->ResourceCount, sizeof(UINT32),
++            &Count, sizeof(UINT32));
+     DtPopSubtable ();
+     ParentTable = DtPeekSubtable ();
+ 
diff --git a/SOURCES/0014-Support-EINJ-in-a-big-endian-world.patch b/SOURCES/0014-Support-EINJ-in-a-big-endian-world.patch
new file mode 100644
index 0000000..b28a42e
--- /dev/null
+++ b/SOURCES/0014-Support-EINJ-in-a-big-endian-world.patch
@@ -0,0 +1,32 @@
+From 70d1047abe010c80c2dd74f6afdc7005b91e6163 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Sat, 19 Sep 2020 15:50:19 -0600
+Subject: [PATCH 14/45] Support EINJ in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump1.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20210604/source/common/dmtbdump1.c
+@@ -882,7 +882,7 @@ AcpiDmDumpEinj (
+ {
+     ACPI_STATUS             Status;
+     ACPI_WHEA_HEADER        *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  Length = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_EINJ);
+ 
+ 
+@@ -897,7 +897,7 @@ AcpiDmDumpEinj (
+     /* Subtables */
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < Length)
+     {
+         AcpiOsPrintf ("\n");
+         Status = AcpiDmDumpTable (Length, Offset, Subtable,
diff --git a/SOURCES/0015-Support-ERST-in-a-big-endian-world.patch b/SOURCES/0015-Support-ERST-in-a-big-endian-world.patch
new file mode 100644
index 0000000..1438b85
--- /dev/null
+++ b/SOURCES/0015-Support-ERST-in-a-big-endian-world.patch
@@ -0,0 +1,32 @@
+From e588961ca36e70c24aa1c49e96bcd1997bf98f89 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Sat, 19 Sep 2020 15:54:56 -0600
+Subject: [PATCH 15/45] Support ERST in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump1.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20210604/source/common/dmtbdump1.c
+@@ -935,7 +935,7 @@ AcpiDmDumpErst (
+ {
+     ACPI_STATUS             Status;
+     ACPI_WHEA_HEADER        *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  Length = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_ERST);
+ 
+ 
+@@ -950,7 +950,7 @@ AcpiDmDumpErst (
+     /* Subtables */
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < Length)
+     {
+         AcpiOsPrintf ("\n");
+         Status = AcpiDmDumpTable (Length, Offset, Subtable,
diff --git a/SOURCES/0016-Support-FADT-aka-FACP-in-a-big-endian-world.patch b/SOURCES/0016-Support-FADT-aka-FACP-in-a-big-endian-world.patch
new file mode 100644
index 0000000..51e4257
--- /dev/null
+++ b/SOURCES/0016-Support-FADT-aka-FACP-in-a-big-endian-world.patch
@@ -0,0 +1,189 @@
+From b3051bc2bad8988f3ad81a8307de6f1d0eef4ace Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Sun, 20 Sep 2020 11:42:21 -0600
+Subject: [PATCH 16/45] Support FADT (aka, FACP) in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump.c          | 25 ++++++++++++-----------
+ source/components/tables/tbfadt.c | 34 +++++++++++++++++++++++--------
+ 2 files changed, 38 insertions(+), 21 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump.c
++++ acpica-unix2-20210604/source/common/dmtbdump.c
+@@ -363,11 +363,12 @@ AcpiDmDumpFadt (
+     ACPI_TABLE_HEADER       *Table)
+ {
+     ACPI_STATUS             Status;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+ 
+ 
+     /* Always dump the minimum FADT revision 1 fields (ACPI 1.0) */
+ 
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0,
+         AcpiDmTableInfoFadt1);
+     if (ACPI_FAILURE (Status))
+     {
+@@ -376,10 +377,10 @@ AcpiDmDumpFadt (
+ 
+     /* Check for FADT revision 2 fields (ACPI 1.0B MS extensions) */
+ 
+-    if ((Table->Length > ACPI_FADT_V1_SIZE) &&
+-        (Table->Length <= ACPI_FADT_V2_SIZE))
++    if ((TableLength > ACPI_FADT_V1_SIZE) &&
++        (TableLength <= ACPI_FADT_V2_SIZE))
+     {
+-        Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
++        Status = AcpiDmDumpTable (TableLength, 0, Table, 0,
+             AcpiDmTableInfoFadt2);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -389,9 +390,9 @@ AcpiDmDumpFadt (
+ 
+     /* Check for FADT revision 3/4 fields and up (ACPI 2.0+ extended data) */
+ 
+-    else if (Table->Length > ACPI_FADT_V2_SIZE)
++    else if (TableLength > ACPI_FADT_V2_SIZE)
+     {
+-        Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
++        Status = AcpiDmDumpTable (TableLength, 0, Table, 0,
+             AcpiDmTableInfoFadt3);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -400,9 +401,9 @@ AcpiDmDumpFadt (
+ 
+         /* Check for FADT revision 5 fields and up (ACPI 5.0+) */
+ 
+-        if (Table->Length > ACPI_FADT_V3_SIZE)
++        if (TableLength > ACPI_FADT_V3_SIZE)
+         {
+-            Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
++            Status = AcpiDmDumpTable (TableLength, 0, Table, 0,
+                 AcpiDmTableInfoFadt5);
+             if (ACPI_FAILURE (Status))
+             {
+@@ -412,9 +413,9 @@ AcpiDmDumpFadt (
+ 
+         /* Check for FADT revision 6 fields and up (ACPI 6.0+) */
+ 
+-        if (Table->Length > ACPI_FADT_V3_SIZE)
++        if (TableLength > ACPI_FADT_V3_SIZE)
+         {
+-            Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
++            Status = AcpiDmDumpTable (TableLength, 0, Table, 0,
+                 AcpiDmTableInfoFadt6);
+             if (ACPI_FAILURE (Status))
+             {
+@@ -425,11 +426,11 @@ AcpiDmDumpFadt (
+ 
+     /* Validate various fields in the FADT, including length */
+ 
+-    AcpiTbCreateLocalFadt (Table, Table->Length);
++    AcpiTbCreateLocalFadt (Table, TableLength);
+ 
+     /* Validate FADT length against the revision */
+ 
+-    AcpiDmValidateFadtLength (Table->Revision, Table->Length);
++    AcpiDmValidateFadtLength (Table->Revision, TableLength);
+ }
+ 
+ 
+Index: acpica-unix2-20210604/source/components/tables/tbfadt.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/components/tables/tbfadt.c
++++ acpica-unix2-20210604/source/components/tables/tbfadt.c
+@@ -289,7 +289,6 @@ AcpiTbSelectAddress (
+     UINT32                  Address32,
+     UINT64                  Address64)
+ {
+-
+     if (!Address64)
+     {
+         /* 64-bit address is zero, use 32-bit address */
+@@ -520,6 +519,9 @@ AcpiTbConvertFadt (
+     UINT8                   Length;
+     UINT8                   Flags;
+     UINT32                  i;
++    UINT32                  Tmp;
++    UINT32                  Value32;
++    UINT64                  Value64;
+ 
+ 
+     /*
+@@ -533,7 +535,7 @@ AcpiTbConvertFadt (
+      * Note: The FADT revision value is unreliable. Only the length can be
+      * trusted.
+      */
+-    if (AcpiGbl_FADT.Header.Length <= ACPI_FADT_V2_SIZE)
++    if (AcpiUtReadUint32 (&AcpiGbl_FADT.Header.Length) <= ACPI_FADT_V2_SIZE)
+     {
+         AcpiGbl_FADT.PreferredProfile = 0;
+         AcpiGbl_FADT.PstateControl = 0;
+@@ -546,14 +548,19 @@ AcpiTbConvertFadt (
+      * current FADT version as defined by the ACPI specification.
+      * Thus, we will have a common FADT internally.
+      */
+-    AcpiGbl_FADT.Header.Length = sizeof (ACPI_TABLE_FADT);
++    Tmp = sizeof (ACPI_TABLE_FADT);
++    AcpiUtWriteUint (&AcpiGbl_FADT.Header.Length, sizeof (UINT32),
++            &Tmp, sizeof (UINT32));
+ 
+     /*
+      * Expand the 32-bit DSDT addresses to 64-bit as necessary.
+      * Later ACPICA code will always use the X 64-bit field.
+      */
+-    AcpiGbl_FADT.XDsdt = AcpiTbSelectAddress ("DSDT",
+-        AcpiGbl_FADT.Dsdt, AcpiGbl_FADT.XDsdt);
++    Value32 = AcpiUtReadUint32 (&AcpiGbl_FADT.Dsdt);
++    Value64 = AcpiUtReadUint64 (&AcpiGbl_FADT.XDsdt);
++    Value64 = AcpiTbSelectAddress ("DSDT", Value32, Value64);
++    AcpiUtWriteUint (&AcpiGbl_FADT.XDsdt, sizeof (UINT64),
++                &Value64, sizeof (UINT64));
+ 
+     /* If Hardware Reduced flag is set, we are all done */
+ 
+@@ -614,7 +621,11 @@ AcpiTbConvertFadt (
+         {
+             if (Address64->Address)
+             {
+-                if (Address64->Address != (UINT64) Address32)
++                Value32 = AcpiUtReadUint32 (&Address32);
++                Value64 = AcpiUtReadUint64 (&Address64->Address);
++
++                /* if (Address64->Address != (UINT64) Address32) */
++                if (Value64 != (UINT64) Value32)
+                 {
+                     /* Address mismatch */
+ 
+@@ -655,9 +666,10 @@ AcpiTbConvertFadt (
+              */
+             if (!Address64->Address || AcpiGbl_Use32BitFadtAddresses)
+             {
++                Value32 = AcpiUtReadUint32 (&Address32);
+                 AcpiTbInitGenericAddress (Address64,
+                     ACPI_ADR_SPACE_SYSTEM_IO, Length,
+-                    (UINT64) Address32, Name, Flags);
++                    (UINT64) Value32, Name, Flags);
+             }
+         }
+ 
+@@ -780,10 +792,14 @@ AcpiTbSetupFadtRegisters (
+ 
+         if (Source64->Address)
+         {
++            UINT64 Address64;
++
++            Address64 = AcpiUtReadUint64 (&Source64->Address);
++            Address64 +=
++                (FadtPmInfoTable[i].RegisterNum * Pm1RegisterByteWidth);
+             AcpiTbInitGenericAddress (FadtPmInfoTable[i].Target,
+                 Source64->SpaceId, Pm1RegisterByteWidth,
+-                Source64->Address +
+-                    (FadtPmInfoTable[i].RegisterNum * Pm1RegisterByteWidth),
++                Address64,
+                 "PmRegisters", 0);
+         }
+     }
diff --git a/SOURCES/0017-Support-most-FPDTs-in-a-big-endian-world.patch b/SOURCES/0017-Support-most-FPDTs-in-a-big-endian-world.patch
new file mode 100644
index 0000000..abeed59
--- /dev/null
+++ b/SOURCES/0017-Support-most-FPDTs-in-a-big-endian-world.patch
@@ -0,0 +1,85 @@
+From 35f533074fb78d52e87c5a14406a136480a6fe62 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Tue, 22 Sep 2020 17:51:45 -0600
+Subject: [PATCH 17/45] Support most FPDTs in a big-endian world
+
+NB: there is no support for vendor specific records even in
+the little-endian version.
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump1.c  | 12 +++++++-----
+ source/compiler/dttable1.c |  4 +++-
+ 2 files changed, 10 insertions(+), 6 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20210604/source/common/dmtbdump1.c
+@@ -988,9 +988,10 @@ AcpiDmDumpFpdt (
+ {
+     ACPI_STATUS             Status;
+     ACPI_FPDT_HEADER        *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_FPDT);
+     ACPI_DMTABLE_INFO       *InfoTable;
++    UINT16                  SubtableType;
+ 
+ 
+     /* There is no main table (other than the standard ACPI header) */
+@@ -998,19 +999,20 @@ AcpiDmDumpFpdt (
+     /* Subtables */
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         /* Common subtable header */
+ 
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             Subtable->Length, AcpiDmTableInfoFpdtHdr);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+         }
+ 
+-        switch (Subtable->Type)
++        SubtableType = AcpiUtReadUint16 (&Subtable->Type);
++        switch (SubtableType)
+         {
+         case ACPI_FPDT_TYPE_BOOT:
+ 
+@@ -1037,7 +1039,7 @@ AcpiDmDumpFpdt (
+             goto NextSubtable;
+         }
+ 
+-        Status = AcpiDmDumpTable (Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             Subtable->Length, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
+Index: acpica-unix2-20210604/source/compiler/dttable1.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dttable1.c
++++ acpica-unix2-20210604/source/compiler/dttable1.c
+@@ -1125,6 +1125,7 @@ DtCompileFpdt (
+     ACPI_DMTABLE_INFO       *InfoTable;
+     DT_FIELD                **PFieldList = (DT_FIELD **) List;
+     DT_FIELD                *SubtableStart;
++    UINT16                  SubtableType;
+ 
+ 
+     while (*PFieldList)
+@@ -1143,7 +1144,8 @@ DtCompileFpdt (
+ 
+         FpdtHeader = ACPI_CAST_PTR (ACPI_FPDT_HEADER, Subtable->Buffer);
+ 
+-        switch (FpdtHeader->Type)
++        SubtableType = AcpiUtReadUint16 (&FpdtHeader->Type);
++        switch (SubtableType)
+         {
+         case ACPI_FPDT_TYPE_BOOT:
+ 
diff --git a/SOURCES/0018-Support-GTDT-in-a-big-endian-world.patch b/SOURCES/0018-Support-GTDT-in-a-big-endian-world.patch
new file mode 100644
index 0000000..df3f181
--- /dev/null
+++ b/SOURCES/0018-Support-GTDT-in-a-big-endian-world.patch
@@ -0,0 +1,69 @@
+From 492e41a24fd088c7ab609ee8ad518f69c9cd29e3 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Tue, 22 Sep 2020 18:12:01 -0600
+Subject: [PATCH 18/45] Support GTDT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump1.c  | 13 +++++++++----
+ source/compiler/dttable1.c |  9 +++++++--
+ 2 files changed, 16 insertions(+), 6 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20210604/source/common/dmtbdump1.c
+@@ -1075,7 +1075,7 @@ AcpiDmDumpGtdt (
+ {
+     ACPI_STATUS             Status;
+     ACPI_GTDT_HEADER        *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  Length = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_GTDT);
+     ACPI_DMTABLE_INFO       *InfoTable;
+     UINT32                  SubtableLength;
+@@ -1111,7 +1111,7 @@ AcpiDmDumpGtdt (
+ 
+     /* Subtables */
+ 
+-    while (Offset < Table->Length)
++    while (Offset < Length)
+     {
+         /* Common subtable header */
+ 
+@@ -1129,8 +1129,13 @@ AcpiDmDumpGtdt (
+         case ACPI_GTDT_TYPE_TIMER_BLOCK:
+ 
+             SubtableLength = sizeof (ACPI_GTDT_TIMER_BLOCK);
+-            GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
+-                Subtable))->TimerCount;
++            {
++                UINT32 Tmp32;
++
++                Tmp32 = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
++                    Subtable))->TimerCount;
++                GtCount = AcpiUtReadUint32 (&Tmp32);
++            }
+ 
+             InfoTable = AcpiDmTableInfoGtdt0;
+             break;
+Index: acpica-unix2-20210604/source/compiler/dttable1.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dttable1.c
++++ acpica-unix2-20210604/source/compiler/dttable1.c
+@@ -1071,8 +1071,13 @@ DtCompileGtdt (
+             DtPushSubtable (Subtable);
+             ParentTable = DtPeekSubtable ();
+ 
+-            GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
+-                Subtable->Buffer - sizeof(ACPI_GTDT_HEADER)))->TimerCount;
++            {
++                UINT32 Tmp32;
++
++                Tmp32 = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
++                    Subtable->Buffer - sizeof (ACPI_GTDT_HEADER)))->TimerCount;
++                GtCount = AcpiUtReadUint32 (&Tmp32);
++            }
+ 
+             while (GtCount)
+             {
diff --git a/SOURCES/0019-Support-HEST-in-a-big-endian-world.patch b/SOURCES/0019-Support-HEST-in-a-big-endian-world.patch
new file mode 100644
index 0000000..baad30e
--- /dev/null
+++ b/SOURCES/0019-Support-HEST-in-a-big-endian-world.patch
@@ -0,0 +1,75 @@
+From 6b73a4881e436bb8cf86c05c1cc4b5360efe1c7f Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Wed, 23 Sep 2020 11:54:49 -0600
+Subject: [PATCH 19/45] Support HEST in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump1.c  | 10 ++++++----
+ source/compiler/dttable1.c |  4 +++-
+ 2 files changed, 9 insertions(+), 5 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20210604/source/common/dmtbdump1.c
+@@ -1216,12 +1216,13 @@ AcpiDmDumpHest (
+ {
+     ACPI_STATUS             Status;
+     ACPI_HEST_HEADER        *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  Length = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_HEST);
+     ACPI_DMTABLE_INFO       *InfoTable;
+     UINT32                  SubtableLength;
+     UINT32                  BankCount;
+     ACPI_HEST_IA_ERROR_BANK *BankTable;
++    UINT16                  SubtableType;
+ 
+ 
+     /* Main table */
+@@ -1235,10 +1236,11 @@ AcpiDmDumpHest (
+     /* Subtables */
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < Length)
+     {
+         BankCount = 0;
+-        switch (Subtable->Type)
++        SubtableType = Subtable->Type;
++        switch (SubtableType)
+         {
+         case ACPI_HEST_TYPE_IA32_CHECK:
+ 
+@@ -1305,7 +1307,7 @@ AcpiDmDumpHest (
+             /* Cannot continue on unknown type - no length */
+ 
+             AcpiOsPrintf ("\n**** Unknown HEST subtable type 0x%X\n",
+-                Subtable->Type);
++                SubtableType);
+             return;
+         }
+ 
+Index: acpica-unix2-20210604/source/compiler/dttable1.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dttable1.c
++++ acpica-unix2-20210604/source/compiler/dttable1.c
+@@ -1207,6 +1207,7 @@ DtCompileHest (
+     DT_FIELD                *SubtableStart;
+     ACPI_DMTABLE_INFO       *InfoTable;
+     UINT16                  Type;
++    UINT16                  Tmp16;
+     UINT32                  BankCount;
+ 
+ 
+@@ -1225,7 +1226,8 @@ DtCompileHest (
+         /* Get subtable type */
+ 
+         SubtableStart = *PFieldList;
+-        DtCompileInteger ((UINT8 *) &Type, *PFieldList, 2, 0);
++        DtCompileInteger ((UINT8 *) &Tmp16, *PFieldList, 2, 0);
++        Type = AcpiUtReadUint32 (&Tmp16);
+ 
+         switch (Type)
+         {
diff --git a/SOURCES/0020-Support-RSDT-RSD-PTR-in-a-big-endian-world.patch b/SOURCES/0020-Support-RSDT-RSD-PTR-in-a-big-endian-world.patch
new file mode 100644
index 0000000..6c2d0f0
--- /dev/null
+++ b/SOURCES/0020-Support-RSDT-RSD-PTR-in-a-big-endian-world.patch
@@ -0,0 +1,37 @@
+From 198abe6e9fcb03676513146bf2f9b8ccc49e5827 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Wed, 23 Sep 2020 12:11:46 -0600
+Subject: [PATCH 20/45] Support RSDT ('RSD PTR') in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump.c
++++ acpica-unix2-20210604/source/common/dmtbdump.c
+@@ -282,6 +282,7 @@ AcpiDmDumpRsdt (
+     UINT32                  Entries;
+     UINT32                  Offset;
+     UINT32                  i;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+ 
+ 
+     /* Point to start of table pointer array */
+@@ -291,12 +292,12 @@ AcpiDmDumpRsdt (
+ 
+     /* RSDT uses 32-bit pointers */
+ 
+-    Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT32);
++    Entries = (TableLength - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT32);
+ 
+     for (i = 0; i < Entries; i++)
+     {
+         AcpiDmLineHeader2 (Offset, sizeof (UINT32), "ACPI Table Address", i);
+-        AcpiOsPrintf ("%8.8X\n", Array[i]);
++        AcpiOsPrintf ("%8.8X\n", AcpiUtReadUint32 (&Array[i]));
+         Offset += sizeof (UINT32);
+     }
+ }
diff --git a/SOURCES/0021-Support-XSDT-in-a-big-endian-world.patch b/SOURCES/0021-Support-XSDT-in-a-big-endian-world.patch
new file mode 100644
index 0000000..83877c5
--- /dev/null
+++ b/SOURCES/0021-Support-XSDT-in-a-big-endian-world.patch
@@ -0,0 +1,38 @@
+From 75d974e42fefabfd6684d62f58bff678b55f396b Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Wed, 23 Sep 2020 12:16:37 -0600
+Subject: [PATCH 21/45] Support XSDT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump.c
++++ acpica-unix2-20210604/source/common/dmtbdump.c
+@@ -323,6 +323,7 @@ AcpiDmDumpXsdt (
+     UINT32                  Entries;
+     UINT32                  Offset;
+     UINT32                  i;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+ 
+ 
+     /* Point to start of table pointer array */
+@@ -332,12 +333,13 @@ AcpiDmDumpXsdt (
+ 
+     /* XSDT uses 64-bit pointers */
+ 
+-    Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT64);
++    Entries = (TableLength - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT64);
+ 
+     for (i = 0; i < Entries; i++)
+     {
+         AcpiDmLineHeader2 (Offset, sizeof (UINT64), "ACPI Table Address", i);
+-        AcpiOsPrintf ("%8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Array[i]));
++        AcpiOsPrintf ("%8.8X%8.8X\n",
++                ACPI_FORMAT_UINT64 (AcpiUtReadUint64 (&Array[i])));
+         Offset += sizeof (UINT64);
+     }
+ }
diff --git a/SOURCES/0022-Support-SRAT-in-a-big-endian-world.patch b/SOURCES/0022-Support-SRAT-in-a-big-endian-world.patch
new file mode 100644
index 0000000..75bcc04
--- /dev/null
+++ b/SOURCES/0022-Support-SRAT-in-a-big-endian-world.patch
@@ -0,0 +1,52 @@
+From 724fcc83d359e4c8abbd2a48755e96049afa06d6 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Wed, 23 Sep 2020 12:25:38 -0600
+Subject: [PATCH 22/45] Support SRAT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump3.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump3.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump3.c
++++ acpica-unix2-20210604/source/common/dmtbdump3.c
+@@ -173,11 +173,12 @@ AcpiDmDumpSrat (
+     UINT32                  Offset = sizeof (ACPI_TABLE_SRAT);
+     ACPI_SUBTABLE_HEADER    *Subtable;
+     ACPI_DMTABLE_INFO       *InfoTable;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+ 
+ 
+     /* Main table */
+ 
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSrat);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoSrat);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -186,12 +187,12 @@ AcpiDmDumpSrat (
+     /* Subtables */
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         /* Common subtable header */
+ 
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             Subtable->Length, AcpiDmTableInfoSratHdr);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -245,7 +246,7 @@ AcpiDmDumpSrat (
+         }
+ 
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             Subtable->Length, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
diff --git a/SOURCES/0023-Support-SLIT-in-a-big-endian-world.patch b/SOURCES/0023-Support-SLIT-in-a-big-endian-world.patch
new file mode 100644
index 0000000..e0e324f
--- /dev/null
+++ b/SOURCES/0023-Support-SLIT-in-a-big-endian-world.patch
@@ -0,0 +1,61 @@
+From b11d50752feb9f1b52db076d1fb4753b30a53642 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Wed, 23 Sep 2020 12:49:52 -0600
+Subject: [PATCH 23/45] Support SLIT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump3.c  | 8 +++++---
+ source/compiler/dttable2.c | 2 +-
+ 2 files changed, 6 insertions(+), 4 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump3.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump3.c
++++ acpica-unix2-20210604/source/common/dmtbdump3.c
+@@ -96,11 +96,12 @@ AcpiDmDumpSlit (
+     UINT32                  Localities;
+     UINT32                  i;
+     UINT32                  j;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+ 
+ 
+     /* Main table */
+ 
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSlit);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoSlit);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -108,7 +109,8 @@ AcpiDmDumpSlit (
+ 
+     /* Display the Locality NxN Matrix */
+ 
+-    Localities = (UINT32) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->LocalityCount;
++    Localities = (UINT32)
++        AcpiUtReadUint64 (&ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->LocalityCount);
+     Offset = ACPI_OFFSET (ACPI_TABLE_SLIT, Entry[0]);
+     Row = (UINT8 *) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->Entry;
+ 
+@@ -121,7 +123,7 @@ AcpiDmDumpSlit (
+         {
+             /* Check for beyond EOT */
+ 
+-            if (Offset >= Table->Length)
++            if (Offset >= TableLength)
+             {
+                 AcpiOsPrintf (
+                     "\n**** Not enough room in table for all localities\n");
+Index: acpica-unix2-20210604/source/compiler/dttable2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dttable2.c
++++ acpica-unix2-20210604/source/compiler/dttable2.c
+@@ -1837,7 +1837,7 @@ DtCompileSlit (
+     ParentTable = DtPeekSubtable ();
+     DtInsertSubtable (ParentTable, Subtable);
+ 
+-    Localities = *ACPI_CAST_PTR (UINT32, Subtable->Buffer);
++    Localities = (UINT32) AcpiUtReadUint64 (Subtable->Buffer);
+     LocalityBuffer = UtLocalCalloc (Localities);
+     LocalityListLength = 0;
+ 
diff --git a/SOURCES/0024-Support-MSCT-in-a-big-endian-world.patch b/SOURCES/0024-Support-MSCT-in-a-big-endian-world.patch
new file mode 100644
index 0000000..bb93fe2
--- /dev/null
+++ b/SOURCES/0024-Support-MSCT-in-a-big-endian-world.patch
@@ -0,0 +1,43 @@
+From ae38e1578d18abf41330bb3dbaef9ea56a52f49b Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Wed, 23 Sep 2020 15:44:21 -0600
+Subject: [PATCH 24/45] Support MSCT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20210604/source/common/dmtbdump2.c
+@@ -1133,11 +1133,12 @@ AcpiDmDumpMsct (
+     ACPI_STATUS             Status;
+     UINT32                  Offset = sizeof (ACPI_TABLE_MSCT);
+     ACPI_MSCT_PROXIMITY     *Subtable;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+ 
+ 
+     /* Main table */
+ 
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMsct);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoMsct);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -1146,12 +1147,12 @@ AcpiDmDumpMsct (
+     /* Subtables */
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         /* Common subtable header */
+ 
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             sizeof (ACPI_MSCT_PROXIMITY), AcpiDmTableInfoMsct0);
+         if (ACPI_FAILURE (Status))
+         {
diff --git a/SOURCES/0025-Support-MPST-in-a-big-endian-world.patch b/SOURCES/0025-Support-MPST-in-a-big-endian-world.patch
new file mode 100644
index 0000000..600c6ec
--- /dev/null
+++ b/SOURCES/0025-Support-MPST-in-a-big-endian-world.patch
@@ -0,0 +1,152 @@
+From 0a25688f36df62579f4dd0444ceba33a0f8d4dcc Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Wed, 23 Sep 2020 16:08:24 -0600
+Subject: [PATCH 25/45] Support MPST in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c  | 33 +++++++++++++++++++--------------
+ source/compiler/dttable2.c |  8 ++++----
+ 2 files changed, 23 insertions(+), 18 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20210604/source/common/dmtbdump2.c
+@@ -995,11 +995,13 @@ AcpiDmDumpMpst (
+     UINT16                  SubtableCount;
+     UINT32                  PowerStateCount;
+     UINT32                  ComponentCount;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
++    UINT16                  Tmp16;
+ 
+ 
+     /* Main table */
+ 
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMpst);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoMpst);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -1007,13 +1009,14 @@ AcpiDmDumpMpst (
+ 
+     /* Subtable: Memory Power Node(s) */
+ 
+-    SubtableCount = (ACPI_CAST_PTR (ACPI_TABLE_MPST, Table))->PowerNodeCount;
++    Tmp16 = (ACPI_CAST_PTR (ACPI_TABLE_MPST, Table))->PowerNodeCount;
++    SubtableCount = AcpiUtReadUint16 (&Tmp16);
+     Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Table, Offset);
+ 
+-    while ((Offset < Table->Length) && SubtableCount)
++    while ((Offset < TableLength) && SubtableCount)
+     {
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable0,
+             sizeof (ACPI_MPST_POWER_NODE), AcpiDmTableInfoMpst0);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -1022,8 +1025,8 @@ AcpiDmDumpMpst (
+ 
+         /* Extract the sub-subtable counts */
+ 
+-        PowerStateCount = Subtable0->NumPowerStates;
+-        ComponentCount = Subtable0->NumPhysicalComponents;
++        PowerStateCount = AcpiUtReadUint16 (&Subtable0->NumPowerStates);
++        ComponentCount = AcpiUtReadUint16 (&Subtable0->NumPhysicalComponents);
+         Offset += sizeof (ACPI_MPST_POWER_NODE);
+ 
+         /* Sub-subtables - Memory Power State Structure(s) */
+@@ -1034,7 +1037,7 @@ AcpiDmDumpMpst (
+         while (PowerStateCount)
+         {
+             AcpiOsPrintf ("\n");
+-            Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0A,
++            Status = AcpiDmDumpTable (TableLength, Offset, Subtable0A,
+                 sizeof (ACPI_MPST_POWER_STATE), AcpiDmTableInfoMpst0A);
+             if (ACPI_FAILURE (Status))
+             {
+@@ -1057,7 +1060,7 @@ AcpiDmDumpMpst (
+ 
+         while (ComponentCount)
+         {
+-            Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0B,
++            Status = AcpiDmDumpTable (TableLength, Offset, Subtable0B,
+                 sizeof (ACPI_MPST_COMPONENT), AcpiDmTableInfoMpst0B);
+             if (ACPI_FAILURE (Status))
+             {
+@@ -1074,22 +1077,24 @@ AcpiDmDumpMpst (
+         SubtableCount--;
+         Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Subtable0,
+             sizeof (ACPI_MPST_POWER_NODE) +
+-            (sizeof (ACPI_MPST_POWER_STATE) * Subtable0->NumPowerStates) +
+-            (sizeof (ACPI_MPST_COMPONENT) * Subtable0->NumPhysicalComponents));
++            (sizeof (ACPI_MPST_POWER_STATE) *
++                AcpiUtReadUint16 (&Subtable0->NumPowerStates)) +
++            (sizeof (ACPI_MPST_COMPONENT) *
++                AcpiUtReadUint16 (&Subtable0->NumPhysicalComponents)));
+     }
+ 
+     /* Subtable: Count of Memory Power State Characteristic structures */
+ 
+     AcpiOsPrintf ("\n");
+     Subtable1 = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, Subtable0);
+-    Status = AcpiDmDumpTable (Table->Length, Offset, Subtable1,
++    Status = AcpiDmDumpTable (TableLength, Offset, Subtable1,
+         sizeof (ACPI_MPST_DATA_HDR), AcpiDmTableInfoMpst1);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+     }
+ 
+-    SubtableCount = Subtable1->CharacteristicsCount;
++    SubtableCount = AcpiUtReadUint16 (&Subtable1->CharacteristicsCount);
+     Offset += sizeof (ACPI_MPST_DATA_HDR);
+ 
+     /* Subtable: Memory Power State Characteristics structure(s) */
+@@ -1097,10 +1102,10 @@ AcpiDmDumpMpst (
+     Subtable2 = ACPI_ADD_PTR (ACPI_MPST_POWER_DATA, Subtable1,
+         sizeof (ACPI_MPST_DATA_HDR));
+ 
+-    while ((Offset < Table->Length) && SubtableCount)
++    while ((Offset < TableLength) && SubtableCount)
+     {
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable2,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable2,
+             sizeof (ACPI_MPST_POWER_DATA), AcpiDmTableInfoMpst2);
+         if (ACPI_FAILURE (Status))
+         {
+Index: acpica-unix2-20210604/source/compiler/dttable2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dttable2.c
++++ acpica-unix2-20210604/source/compiler/dttable2.c
+@@ -350,7 +350,7 @@ DtCompileMpst (
+     DtPushSubtable (Subtable);
+ 
+     MpstChannelInfo = ACPI_CAST_PTR (ACPI_MPST_CHANNEL, Subtable->Buffer);
+-    SubtableCount = MpstChannelInfo->PowerNodeCount;
++    SubtableCount = AcpiUtReadUint16 (&MpstChannelInfo->PowerNodeCount);
+ 
+     while (*PFieldList && SubtableCount)
+     {
+@@ -368,8 +368,8 @@ DtCompileMpst (
+         DtPushSubtable (Subtable);
+ 
+         MpstPowerNode = ACPI_CAST_PTR (ACPI_MPST_POWER_NODE, Subtable->Buffer);
+-        PowerStateCount = MpstPowerNode->NumPowerStates;
+-        ComponentCount = MpstPowerNode->NumPhysicalComponents;
++        PowerStateCount = AcpiUtReadUint16 (&MpstPowerNode->NumPowerStates);
++        ComponentCount = AcpiUtReadUint16 (&MpstPowerNode->NumPhysicalComponents);
+ 
+         ParentTable = DtPeekSubtable ();
+ 
+@@ -422,7 +422,7 @@ DtCompileMpst (
+     DtPushSubtable (Subtable);
+ 
+     MpstDataHeader = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, Subtable->Buffer);
+-    SubtableCount = MpstDataHeader->CharacteristicsCount;
++    SubtableCount = AcpiUtReadUint16(&MpstDataHeader->CharacteristicsCount);
+ 
+     ParentTable = DtPeekSubtable ();
+ 
diff --git a/SOURCES/0026-Support-NFIT-in-a-big-endian-world.patch b/SOURCES/0026-Support-NFIT-in-a-big-endian-world.patch
new file mode 100644
index 0000000..cf5267d
--- /dev/null
+++ b/SOURCES/0026-Support-NFIT-in-a-big-endian-world.patch
@@ -0,0 +1,227 @@
+From 5aec8511fc433a71cb8b6d26be464355d0c3f5cc Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Thu, 24 Sep 2020 15:25:53 -0600
+Subject: [PATCH 26/45] Support NFIT in a big-endian world
+
+NB: this required correcting the starting pointer for the NFIT
+SMBIOS subtable; otherwise, disassembly did not work properly.
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtable.c    |  4 ++--
+ source/common/dmtbdump2.c  | 49 ++++++++++++++++++++++----------------
+ source/compiler/dttable2.c | 11 ++++++---
+ 3 files changed, 39 insertions(+), 25 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtable.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtable.c
++++ acpica-unix2-20210604/source/common/dmtable.c
+@@ -1526,13 +1526,13 @@ AcpiDmDumpTable (
+ 
+             /* NFIT subtable types */
+ 
+-            Temp16 = ACPI_GET16 (Target);
++            Temp16 = AcpiUtReadUint16 (Target);
+             if (Temp16 > ACPI_NFIT_TYPE_RESERVED)
+             {
+                 Temp16 = ACPI_NFIT_TYPE_RESERVED;
+             }
+ 
+-            AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target),
++            AcpiOsPrintf (UINT16_FORMAT, Temp16,
+                 AcpiDmNfitSubnames[Temp16]);
+             break;
+ 
+Index: acpica-unix2-20210604/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20210604/source/common/dmtbdump2.c
+@@ -1192,18 +1192,23 @@ AcpiDmDumpNfit (
+     ACPI_STATUS             Status;
+     UINT32                  Offset = sizeof (ACPI_TABLE_NFIT);
+     UINT32                  FieldOffset = 0;
+-    UINT32                  Length;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     ACPI_NFIT_HEADER        *Subtable;
+     ACPI_DMTABLE_INFO       *InfoTable;
+     ACPI_NFIT_INTERLEAVE    *Interleave = NULL;
+     ACPI_NFIT_SMBIOS        *SmbiosInfo = NULL;
+     ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL;
+     UINT32                  i;
++    UINT32                  Length;
++    UINT32                  LineCount;
++    UINT16                  SubtableLength;
++    UINT16                  SubtableType;
++    UINT16                  HintCount;
+ 
+ 
+     /* Main table */
+ 
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoNfit);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoNfit);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -1212,19 +1217,21 @@ AcpiDmDumpNfit (
+     /* Subtables */
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         /* NFIT subtable header */
+ 
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+-            Subtable->Length, AcpiDmTableInfoNfitHdr);
++        SubtableType = AcpiUtReadUint16 (&Subtable->Type);
++        SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
++            SubtableLength, AcpiDmTableInfoNfitHdr);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+         }
+ 
+-        switch (Subtable->Type)
++        switch (SubtableType)
+         {
+         case ACPI_NFIT_TYPE_SYSTEM_ADDRESS:
+ 
+@@ -1275,11 +1282,11 @@ AcpiDmDumpNfit (
+ 
+         default:
+             AcpiOsPrintf ("\n**** Unknown NFIT subtable type 0x%X\n",
+-                Subtable->Type);
++                SubtableType);
+ 
+             /* Attempt to continue */
+ 
+-            if (!Subtable->Length)
++            if (!SubtableLength)
+             {
+                 AcpiOsPrintf ("Invalid zero length subtable\n");
+                 return;
+@@ -1288,8 +1295,8 @@ AcpiDmDumpNfit (
+         }
+ 
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+-            Subtable->Length, InfoTable);
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
++            SubtableLength, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+@@ -1297,14 +1304,15 @@ AcpiDmDumpNfit (
+ 
+         /* Per-subtable variable-length fields */
+ 
+-        switch (Subtable->Type)
++        switch (SubtableType)
+         {
+         case ACPI_NFIT_TYPE_INTERLEAVE:
+ 
+             Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, Subtable);
+-            for (i = 0; i < Interleave->LineCount; i++)
++            LineCount = AcpiUtReadUint32 (&Interleave->LineCount);
++            for (i = 0; i < LineCount; i++)
+             {
+-                Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset,
++                Status = AcpiDmDumpTable (TableLength, Offset + FieldOffset,
+                     &Interleave->LineOffset[i],
+                     sizeof (UINT32), AcpiDmTableInfoNfit2a);
+                 if (ACPI_FAILURE (Status))
+@@ -1318,14 +1326,14 @@ AcpiDmDumpNfit (
+ 
+         case ACPI_NFIT_TYPE_SMBIOS:
+ 
+-            Length = Subtable->Length -
++            Length = SubtableLength -
+                 sizeof (ACPI_NFIT_SMBIOS) + sizeof (UINT8);
+ 
+             if (Length)
+             {
+-                Status = AcpiDmDumpTable (Table->Length,
++                Status = AcpiDmDumpTable (TableLength,
+                     sizeof (ACPI_NFIT_SMBIOS) - sizeof (UINT8),
+-                    SmbiosInfo,
++                    SmbiosInfo + Offset,
+                     Length, AcpiDmTableInfoNfit3a);
+                 if (ACPI_FAILURE (Status))
+                 {
+@@ -1338,9 +1346,10 @@ AcpiDmDumpNfit (
+         case ACPI_NFIT_TYPE_FLUSH_ADDRESS:
+ 
+             Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, Subtable);
+-            for (i = 0; i < Hint->HintCount; i++)
++            HintCount = AcpiUtReadUint16 (&Hint->HintCount);
++            for (i = 0; i < HintCount; i++)
+             {
+-                Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset,
++                Status = AcpiDmDumpTable (TableLength, Offset + FieldOffset,
+                     &Hint->HintAddress[i],
+                     sizeof (UINT64), AcpiDmTableInfoNfit6a);
+                 if (ACPI_FAILURE (Status))
+@@ -1359,8 +1368,8 @@ AcpiDmDumpNfit (
+ NextSubtable:
+         /* Point to next subtable */
+ 
+-        Offset += Subtable->Length;
+-        Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Subtable, Subtable->Length);
++        Offset += SubtableLength;
++        Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Subtable, SubtableLength);
+     }
+ }
+ 
+Index: acpica-unix2-20210604/source/compiler/dttable2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dttable2.c
++++ acpica-unix2-20210604/source/compiler/dttable2.c
+@@ -497,6 +497,7 @@ DtCompileNfit (
+     UINT32                  Count;
+     ACPI_NFIT_INTERLEAVE    *Interleave = NULL;
+     ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL;
++    UINT16                  NfitHeaderType;
+ 
+ 
+     /* Main table */
+@@ -530,7 +531,8 @@ DtCompileNfit (
+ 
+         NfitHeader = ACPI_CAST_PTR (ACPI_NFIT_HEADER, Subtable->Buffer);
+ 
+-        switch (NfitHeader->Type)
++        NfitHeaderType = AcpiUtReadUint16 (&NfitHeader->Type);
++        switch (NfitHeaderType)
+         {
+         case ACPI_NFIT_TYPE_SYSTEM_ADDRESS:
+ 
+@@ -590,7 +592,7 @@ DtCompileNfit (
+         DtInsertSubtable (ParentTable, Subtable);
+         DtPopSubtable ();
+ 
+-        switch (NfitHeader->Type)
++        switch (NfitHeaderType)
+         {
+         case ACPI_NFIT_TYPE_INTERLEAVE:
+ 
+@@ -616,7 +618,8 @@ DtCompileNfit (
+                 Count++;
+             }
+ 
+-            Interleave->LineCount = Count;
++            AcpiUtWriteUint (&Interleave->LineCount, sizeof (UINT32),
++                &Count, sizeof (UINT32));
+             break;
+ 
+         case ACPI_NFIT_TYPE_SMBIOS:
+@@ -662,6 +665,8 @@ DtCompileNfit (
+             }
+ 
+             Hint->HintCount = (UINT16) Count;
++            AcpiUtWriteUint (&Hint->HintCount, sizeof (UINT16),
++                &Count, sizeof (UINT32));
+             break;
+ 
+         default:
diff --git a/SOURCES/0027-Support-SDEV-in-a-big-endian-world.patch b/SOURCES/0027-Support-SDEV-in-a-big-endian-world.patch
new file mode 100644
index 0000000..800098e
--- /dev/null
+++ b/SOURCES/0027-Support-SDEV-in-a-big-endian-world.patch
@@ -0,0 +1,206 @@
+From 3d1ac6e76ad0c0d6454671b190ccbbfafb0cb4cc Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Tue, 29 Jun 2021 16:03:36 -0600
+Subject: [PATCH 27/45] Support SDEV in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c  | 48 +++++++++++++++++++++-----------------
+ source/compiler/dttable2.c | 27 ++++++++++++++++++++-
+ 2 files changed, 52 insertions(+), 23 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20210604/source/common/dmtbdump2.c
+@@ -2125,7 +2125,7 @@ AcpiDmDumpSdev (
+     ACPI_SDEV_NAMESPACE         *Namesp;
+     ACPI_DMTABLE_INFO           *InfoTable;
+     ACPI_DMTABLE_INFO           *SecureComponentInfoTable;
+-    UINT32                      Length = Table->Length;
++    UINT32                      TableLength = AcpiUtReadUint32 (&Table->Length);
+     UINT32                      Offset = sizeof (ACPI_TABLE_SDEV);
+     UINT16                      PathOffset;
+     UINT16                      PathLength;
+@@ -2133,11 +2133,12 @@ AcpiDmDumpSdev (
+     UINT16                      VendorDataLength;
+     ACPI_SDEV_SECURE_COMPONENT  *SecureComponent = NULL;
+     UINT32                      CurrentOffset = 0;
++    UINT16                      SubtableLength;
+ 
+ 
+     /* Main table */
+ 
+-    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSdev);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoSdev);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -2146,13 +2147,14 @@ AcpiDmDumpSdev (
+     /* Subtables */
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         /* Common subtable header */
+ 
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+-            Subtable->Length, AcpiDmTableInfoSdevHdr);
++	SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
++            SubtableLength, AcpiDmTableInfoSdevHdr);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+@@ -2175,8 +2177,8 @@ AcpiDmDumpSdev (
+         }
+ 
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, 0, Subtable,
+-            Subtable->Length, InfoTable);
++        Status = AcpiDmDumpTable (TableLength, 0, Subtable,
++            SubtableLength, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+@@ -2235,12 +2237,12 @@ AcpiDmDumpSdev (
+             /* Dump the PCIe device ID(s) */
+ 
+             Namesp = ACPI_CAST_PTR (ACPI_SDEV_NAMESPACE, Subtable);
+-            PathOffset = Namesp->DeviceIdOffset;
+-            PathLength = Namesp->DeviceIdLength;
++            PathOffset = AcpiUtReadUint16 (&Namesp->DeviceIdOffset);
++            PathLength = AcpiUtReadUint16 (&Namesp->DeviceIdLength);
+ 
+             if (PathLength)
+             {
+-                Status = AcpiDmDumpTable (Table->Length, CurrentOffset,
++                Status = AcpiDmDumpTable (TableLength, CurrentOffset,
+                     ACPI_ADD_PTR (UINT8, Namesp, PathOffset),
+                     PathLength, AcpiDmTableInfoSdev0a);
+                 if (ACPI_FAILURE (Status))
+@@ -2252,14 +2254,14 @@ AcpiDmDumpSdev (
+ 
+             /* Dump the vendor-specific data */
+ 
+-            VendorDataLength =
+-                Namesp->VendorDataLength;
++            VendorDataLength = AcpiUtReadUint16 (&Namesp->VendorDataLength);
+             VendorDataOffset =
+-                Namesp->DeviceIdOffset + Namesp->DeviceIdLength;
++                AcpiUtReadUint16 (&Namesp->DeviceIdOffset) +
++		AcpiUtReadUint16 (&Namesp->DeviceIdLength);
+ 
+             if (VendorDataLength)
+             {
+-                Status = AcpiDmDumpTable (Table->Length, 0,
++                Status = AcpiDmDumpTable (TableLength, 0,
+                     ACPI_ADD_PTR (UINT8, Namesp, VendorDataOffset),
+                     VendorDataLength, AcpiDmTableInfoSdev1b);
+                 if (ACPI_FAILURE (Status))
+@@ -2274,12 +2276,12 @@ AcpiDmDumpSdev (
+             /* PCI path substructures */
+ 
+             Pcie = ACPI_CAST_PTR (ACPI_SDEV_PCIE, Subtable);
+-            PathOffset = Pcie->PathOffset;
+-            PathLength = Pcie->PathLength;
++            PathOffset = AcpiUtReadUint16 (&Pcie->PathOffset);
++            PathLength = AcpiUtReadUint16 (&Pcie->PathLength);
+ 
+             while (PathLength)
+             {
+-                Status = AcpiDmDumpTable (Table->Length,
++                Status = AcpiDmDumpTable (TableLength,
+                     PathOffset + Offset,
+                     ACPI_ADD_PTR (UINT8, Pcie, PathOffset),
+                     sizeof (ACPI_SDEV_PCIE_PATH), AcpiDmTableInfoSdev1a);
+@@ -2294,12 +2296,14 @@ AcpiDmDumpSdev (
+ 
+             /* VendorData */
+ 
+-            VendorDataLength = Pcie->VendorDataLength;
+-            VendorDataOffset = Pcie->PathOffset + Pcie->PathLength;
++            VendorDataLength = AcpiUtReadUint16 (&Pcie->VendorDataLength);
++            VendorDataOffset = 
++	            AcpiUtReadUint16 (&Pcie->PathOffset) +
++	            AcpiUtReadUint16 (&Pcie->PathLength);
+ 
+             if (VendorDataLength)
+             {
+-                Status = AcpiDmDumpTable (Table->Length, 0,
++                Status = AcpiDmDumpTable (TableLength, 0,
+                     ACPI_ADD_PTR (UINT8, Pcie, VendorDataOffset),
+                     VendorDataLength, AcpiDmTableInfoSdev1b);
+                 if (ACPI_FAILURE (Status))
+@@ -2316,8 +2320,8 @@ AcpiDmDumpSdev (
+ NextSubtable:
+         /* Point to next subtable */
+ 
+-        Offset += Subtable->Length;
++        Offset += SubtableLength;
+         Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Subtable,
+-            Subtable->Length);
++            SubtableLength);
+     }
+ }
+Index: acpica-unix2-20210604/source/compiler/dttable2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dttable2.c
++++ acpica-unix2-20210604/source/compiler/dttable2.c
+@@ -1493,6 +1493,7 @@ DtCompileSdev (
+     UINT32                      EntryCount;
+     ACPI_SDEV_SECURE_COMPONENT  *SecureComponent = NULL;
+     UINT16                      ComponentLength = 0;
++    UINT16                      Tmp16;
+ 
+ 
+     /* Subtables */
+@@ -1514,7 +1515,7 @@ DtCompileSdev (
+         DtPushSubtable (Subtable);
+ 
+         SdevHeader = ACPI_CAST_PTR (ACPI_SDEV_HEADER, Subtable->Buffer);
+-        SdevHeader->Length = (UINT8)(sizeof (ACPI_SDEV_HEADER));
++        SdevHeader->Length = (UINT16) (sizeof (ACPI_SDEV_HEADER));
+ 
+         switch (SdevHeader->Type)
+         {
+@@ -1687,6 +1688,18 @@ DtCompileSdev (
+                 }
+             }
+ 
++            /* Make sure everything is now little-endian */
++            Tmp16 = AcpiUtReadUint16 (&SdevHeader->Length);
++            SdevHeader->Length = Tmp16;
++            Tmp16 = AcpiUtReadUint16 (&Namesp->DeviceIdOffset);
++            Namesp->DeviceIdOffset = Tmp16;
++            Tmp16 = AcpiUtReadUint16 (&Namesp->DeviceIdLength);
++            Namesp->DeviceIdLength = Tmp16;
++            Tmp16 = AcpiUtReadUint16 (&Namesp->VendorDataOffset);
++            Namesp->VendorDataOffset = Tmp16;
++            Tmp16 = AcpiUtReadUint16 (&Namesp->VendorDataLength);
++            Namesp->VendorDataLength = Tmp16;
++
+             break;
+ 
+         case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE:
+@@ -1749,6 +1762,18 @@ DtCompileSdev (
+             SdevHeader->Length =
+                 sizeof (ACPI_SDEV_PCIE) +
+                 Pcie->PathLength + Pcie->VendorDataLength;
++
++            Tmp16 = AcpiUtReadUint16 (&SdevHeader->Length);
++            SdevHeader->Length = Tmp16;
++            Tmp16 = AcpiUtReadUint16 (&Pcie->PathOffset);
++            Pcie->PathOffset = Tmp16;
++            Tmp16 = AcpiUtReadUint16 (&Pcie->PathLength);
++            Pcie->PathLength = Tmp16;
++            Tmp16 = AcpiUtReadUint16 (&Pcie->VendorDataOffset);
++            Pcie->VendorDataOffset = Tmp16;
++            Tmp16 = AcpiUtReadUint16 (&Pcie->VendorDataLength);
++            Pcie->VendorDataLength = Tmp16;
++		
+             break;
+ 
+         default:
diff --git a/SOURCES/0028-Support-HMAT-in-a-big-endian-world.patch b/SOURCES/0028-Support-HMAT-in-a-big-endian-world.patch
new file mode 100644
index 0000000..eb37f70
--- /dev/null
+++ b/SOURCES/0028-Support-HMAT-in-a-big-endian-world.patch
@@ -0,0 +1,278 @@
+From 915b8b70726fd01befdeac0c8630db528ac40552 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Fri, 25 Sep 2020 16:56:55 -0600
+Subject: [PATCH 28/45] Support HMAT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump1.c  | 70 ++++++++++++++++++++++----------------
+ source/compiler/dttable1.c | 24 ++++++++++---
+ 2 files changed, 59 insertions(+), 35 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20210604/source/common/dmtbdump1.c
+@@ -1379,37 +1379,45 @@ AcpiDmDumpHmat (
+     UINT32                  Length;
+     ACPI_DMTABLE_INFO       *InfoTable;
+     UINT32                  i, j;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
++    UINT16                  HmatStructType;
++    UINT32                  HmatStructLength;
++    UINT32                  InitPDs;
++    UINT32                  TgtPDs;
++    UINT16                  SMBIOSHandles;
+ 
+ 
+     /* Main table */
+ 
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoHmat);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoHmat);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+     }
+     Offset = sizeof (ACPI_TABLE_HMAT);
+ 
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         AcpiOsPrintf ("\n");
+ 
+         /* Dump HMAT structure header */
+ 
+         HmatStruct = ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, Table, Offset);
+-        if (HmatStruct->Length < sizeof (ACPI_HMAT_STRUCTURE))
++        HmatStructLength = AcpiUtReadUint32 (&HmatStruct->Length);
++        if (HmatStructLength < sizeof (ACPI_HMAT_STRUCTURE))
+         {
+             AcpiOsPrintf ("Invalid HMAT structure length\n");
+             return;
+         }
+-        Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct,
+-            HmatStruct->Length, AcpiDmTableInfoHmatHdr);
++        Status = AcpiDmDumpTable (TableLength, Offset, HmatStruct,
++            HmatStructLength, AcpiDmTableInfoHmatHdr);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+         }
+ 
+-        switch (HmatStruct->Type)
++        HmatStructType = AcpiUtReadUint16 (&HmatStruct->Type);
++        switch (HmatStructType)
+         {
+         case ACPI_HMAT_TYPE_ADDRESS_RANGE:
+ 
+@@ -1432,7 +1440,7 @@ AcpiDmDumpHmat (
+         default:
+ 
+             AcpiOsPrintf ("\n**** Unknown HMAT structure type 0x%X\n",
+-                HmatStruct->Type);
++                HmatStructType);
+ 
+             /* Attempt to continue */
+ 
+@@ -1441,13 +1449,13 @@ AcpiDmDumpHmat (
+ 
+         /* Dump HMAT structure body */
+ 
+-        if (HmatStruct->Length < Length)
++        if (HmatStructLength < Length)
+         {
+             AcpiOsPrintf ("Invalid HMAT structure length\n");
+             return;
+         }
+-        Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct,
+-            HmatStruct->Length, InfoTable);
++        Status = AcpiDmDumpTable (TableLength, Offset, HmatStruct,
++            HmatStructLength, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+@@ -1455,7 +1463,7 @@ AcpiDmDumpHmat (
+ 
+         /* Dump HMAT structure additionals */
+ 
+-        switch (HmatStruct->Type)
++        switch (HmatStructType)
+         {
+         case ACPI_HMAT_TYPE_LOCALITY:
+ 
+@@ -1464,15 +1472,16 @@ AcpiDmDumpHmat (
+ 
+             /* Dump initiator proximity domains */
+ 
+-            if ((UINT32)(HmatStruct->Length - SubtableOffset) <
+-                (UINT32)(HmatLocality->NumberOfInitiatorPDs * 4))
++            InitPDs = AcpiUtReadUint32 (&HmatLocality->NumberOfInitiatorPDs);
++            if ((UINT32) (HmatStructLength - SubtableOffset) <
++                (UINT32) (InitPDs * 4))
+             {
+                 AcpiOsPrintf ("Invalid initiator proximity domain number\n");
+                 return;
+             }
+-            for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++)
++            for (i = 0; i < InitPDs; i++)
+             {
+-                Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
++                Status = AcpiDmDumpTable (TableLength, Offset + SubtableOffset,
+                     ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
+                     4, AcpiDmTableInfoHmat1a);
+                 if (ACPI_FAILURE (Status))
+@@ -1485,15 +1494,16 @@ AcpiDmDumpHmat (
+ 
+             /* Dump target proximity domains */
+ 
+-            if ((UINT32)(HmatStruct->Length - SubtableOffset) <
+-                (UINT32)(HmatLocality->NumberOfTargetPDs * 4))
++            TgtPDs = AcpiUtReadUint32 (&HmatLocality->NumberOfTargetPDs);
++            if ((UINT32) (HmatStructLength - SubtableOffset) <
++                (UINT32) (TgtPDs * 4))
+             {
+                 AcpiOsPrintf ("Invalid target proximity domain number\n");
+                 return;
+             }
+-            for (i = 0; i < HmatLocality->NumberOfTargetPDs; i++)
++            for (i = 0; i < TgtPDs; i++)
+             {
+-                Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
++                Status = AcpiDmDumpTable (TableLength, Offset + SubtableOffset,
+                     ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
+                     4, AcpiDmTableInfoHmat1b);
+                 if (ACPI_FAILURE (Status))
+@@ -1506,18 +1516,17 @@ AcpiDmDumpHmat (
+ 
+             /* Dump latency/bandwidth entris */
+ 
+-            if ((UINT32)(HmatStruct->Length - SubtableOffset) <
+-                (UINT32)(HmatLocality->NumberOfInitiatorPDs *
+-                         HmatLocality->NumberOfTargetPDs * 2))
++            if ((UINT32) (HmatStructLength - SubtableOffset) <
++                (UINT32) (InitPDs * TgtPDs * 2))
+             {
+                 AcpiOsPrintf ("Invalid latency/bandwidth entry number\n");
+                 return;
+             }
+-            for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++)
++            for (i = 0; i < InitPDs; i++)
+             {
+-                for (j = 0; j < HmatLocality->NumberOfTargetPDs; j++)
++                for (j = 0; j < TgtPDs; j++)
+                 {
+-                    Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
++                    Status = AcpiDmDumpTable (TableLength, Offset + SubtableOffset,
+                         ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
+                         2, AcpiDmTableInfoHmat1c);
+                     if (ACPI_FAILURE(Status))
+@@ -1537,15 +1546,16 @@ AcpiDmDumpHmat (
+ 
+             /* Dump SMBIOS handles */
+ 
+-            if ((UINT32)(HmatStruct->Length - SubtableOffset) <
+-                (UINT32)(HmatCache->NumberOfSMBIOSHandles * 2))
++            SMBIOSHandles = AcpiUtReadUint16 (&HmatCache->NumberOfSMBIOSHandles);
++            if ((UINT32) (HmatStructLength - SubtableOffset) <
++                (UINT32) (SMBIOSHandles * 2))
+             {
+                 AcpiOsPrintf ("Invalid SMBIOS handle number\n");
+                 return;
+             }
+-            for (i = 0; i < HmatCache->NumberOfSMBIOSHandles; i++)
++            for (i = 0; i < SMBIOSHandles; i++)
+             {
+-                Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
++                Status = AcpiDmDumpTable (TableLength, Offset + SubtableOffset,
+                     ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
+                     2, AcpiDmTableInfoHmat2a);
+                 if (ACPI_FAILURE (Status))
+@@ -1565,6 +1575,6 @@ AcpiDmDumpHmat (
+ NextSubtable:
+         /* Point to next HMAT structure subtable */
+ 
+-        Offset += (HmatStruct->Length);
++        Offset += (HmatStructLength);
+     }
+ }
+Index: acpica-unix2-20210604/source/compiler/dttable1.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dttable1.c
++++ acpica-unix2-20210604/source/compiler/dttable1.c
+@@ -1369,6 +1369,8 @@ DtCompileHmat (
+     UINT32                  TgtPDNumber;
+     UINT64                  EntryNumber;
+     UINT16                  SMBIOSHandleNumber;
++    UINT16                  HmatStructType;
++    UINT32                  Length;
+ 
+ 
+     ParentTable = DtPeekSubtable ();
+@@ -1399,7 +1401,8 @@ DtCompileHmat (
+ 
+         /* Compile HMAT structure body */
+ 
+-        switch (HmatStruct->Type)
++        HmatStructType = AcpiUtReadUint16 (&HmatStruct->Type);
++        switch (HmatStructType)
+         {
+         case ACPI_HMAT_TYPE_ADDRESS_RANGE:
+ 
+@@ -1432,7 +1435,7 @@ DtCompileHmat (
+ 
+         /* Compile HMAT structure additionals */
+ 
+-        switch (HmatStruct->Type)
++        switch (HmatStructType)
+         {
+         case ACPI_HMAT_TYPE_LOCALITY:
+ 
+@@ -1458,7 +1461,7 @@ DtCompileHmat (
+                 HmatStruct->Length += Subtable->Length;
+                 IntPDNumber++;
+             }
+-            HmatLocality->NumberOfInitiatorPDs = IntPDNumber;
++            HmatLocality->NumberOfInitiatorPDs = AcpiUtReadUint32 (&IntPDNumber);
+ 
+             /* Compile target proximity domain list */
+ 
+@@ -1479,7 +1482,7 @@ DtCompileHmat (
+                 HmatStruct->Length += Subtable->Length;
+                 TgtPDNumber++;
+             }
+-            HmatLocality->NumberOfTargetPDs = TgtPDNumber;
++            HmatLocality->NumberOfTargetPDs = AcpiUtReadUint32 (&TgtPDNumber);
+ 
+             /* Save start of the entries for reporting errors */
+ 
+@@ -1505,6 +1508,9 @@ DtCompileHmat (
+                 EntryNumber++;
+             }
+ 
++            Length = AcpiUtReadUint32 (&HmatStruct->Length);
++            HmatStruct->Length = Length;
++
+             /* Validate number of entries */
+ 
+             if (EntryNumber !=
+@@ -1538,11 +1544,19 @@ DtCompileHmat (
+                 HmatStruct->Length += Subtable->Length;
+                 SMBIOSHandleNumber++;
+             }
+-            HmatCache->NumberOfSMBIOSHandles = SMBIOSHandleNumber;
++            HmatCache->NumberOfSMBIOSHandles =
++                    AcpiUtReadUint16 (&SMBIOSHandleNumber);
++
++            Length = AcpiUtReadUint32 (&HmatStruct->Length);
++            HmatStruct->Length = Length;
++
+             break;
+ 
+         default:
+ 
++        Length = AcpiUtReadUint32(&HmatStruct->Length);
++        HmatStruct->Length = Length;
++
+             break;
+         }
+     }
diff --git a/SOURCES/0029-Support-PDTT-in-a-big-endian-world.patch b/SOURCES/0029-Support-PDTT-in-a-big-endian-world.patch
new file mode 100644
index 0000000..8511288
--- /dev/null
+++ b/SOURCES/0029-Support-PDTT-in-a-big-endian-world.patch
@@ -0,0 +1,43 @@
+From 253fe3545e7d4eaa9cb93c771c9619f410109a02 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Fri, 25 Sep 2020 17:03:05 -0600
+Subject: [PATCH 29/45] Support PDTT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20210604/source/common/dmtbdump2.c
+@@ -1498,13 +1498,13 @@ AcpiDmDumpPdtt (
+ {
+     ACPI_STATUS             Status;
+     ACPI_PDTT_CHANNEL       *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_PDTT);
+ 
+ 
+     /* Main table */
+ 
+-    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPdtt);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoPdtt);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -1513,10 +1513,10 @@ AcpiDmDumpPdtt (
+     /* Subtables. Currently there is only one type, but can be multiples */
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_PDTT_CHANNEL, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             sizeof (ACPI_PDTT_CHANNEL), AcpiDmTableInfoPdtt0);
+         if (ACPI_FAILURE (Status))
+         {
diff --git a/SOURCES/0030-Support-PPTT-in-a-big-endian-world.patch b/SOURCES/0030-Support-PPTT-in-a-big-endian-world.patch
new file mode 100644
index 0000000..c4d062a
--- /dev/null
+++ b/SOURCES/0030-Support-PPTT-in-a-big-endian-world.patch
@@ -0,0 +1,105 @@
+From 8923211d8bc1b0e4d3af6ff31ed6479057f612f6 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Fri, 25 Sep 2020 17:16:12 -0600
+Subject: [PATCH 30/45] Support PPTT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c  | 17 ++++++++++-------
+ source/compiler/dttable2.c |  7 +++++--
+ 2 files changed, 15 insertions(+), 9 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20210604/source/common/dmtbdump2.c
+@@ -1785,6 +1785,8 @@ AcpiDmDumpPptt (
+     UINT32                  Offset = sizeof (ACPI_TABLE_FPDT);
+     ACPI_DMTABLE_INFO       *InfoTable;
+     UINT32                  i;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
++    UINT32                  NumPrivRes;
+ 
+ 
+     /* There is no main table (other than the standard ACPI header) */
+@@ -1792,7 +1794,7 @@ AcpiDmDumpPptt (
+     /* Subtables */
+ 
+     Offset = sizeof (ACPI_TABLE_HEADER);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         AcpiOsPrintf ("\n");
+ 
+@@ -1804,7 +1806,7 @@ AcpiDmDumpPptt (
+             AcpiOsPrintf ("Invalid subtable length\n");
+             return;
+         }
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             Subtable->Length, AcpiDmTableInfoPpttHdr);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -1846,7 +1848,7 @@ AcpiDmDumpPptt (
+             AcpiOsPrintf ("Invalid subtable length\n");
+             return;
+         }
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             Subtable->Length, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -1862,15 +1864,16 @@ AcpiDmDumpPptt (
+ 
+             /* Dump SMBIOS handles */
+ 
+-            if ((UINT8)(Subtable->Length - SubtableOffset) <
+-                (UINT8)(PpttProcessor->NumberOfPrivResources * 4))
++            NumPrivRes = AcpiUtReadUint32 (&PpttProcessor->NumberOfPrivResources);
++            if ((UINT8) (Subtable->Length - SubtableOffset) <
++                (UINT8) (NumPrivRes * 4))
+             {
+                 AcpiOsPrintf ("Invalid private resource number\n");
+                 return;
+             }
+-            for (i = 0; i < PpttProcessor->NumberOfPrivResources; i++)
++            for (i = 0; i < NumPrivRes; i++)
+             {
+-                Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
++                Status = AcpiDmDumpTable (TableLength, Offset + SubtableOffset,
+                     ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, SubtableOffset),
+                     4, AcpiDmTableInfoPptt0a);
+                 if (ACPI_FAILURE (Status))
+Index: acpica-unix2-20210604/source/compiler/dttable2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dttable2.c
++++ acpica-unix2-20210604/source/compiler/dttable2.c
+@@ -1123,6 +1123,7 @@ DtCompilePptt (
+     DT_FIELD                **PFieldList = (DT_FIELD **) List;
+     DT_FIELD                *SubtableStart;
+     ACPI_TABLE_HEADER       *PpttAcpiHeader;
++    UINT32                  NumPrivRes;
+ 
+ 
+     ParentTable = DtPeekSubtable ();
+@@ -1187,7 +1188,7 @@ DtCompilePptt (
+             {
+                 /* Compile initiator proximity domain list */
+ 
+-                PpttProcessor->NumberOfPrivResources = 0;
++                NumPrivRes = 0;
+                 while (*PFieldList)
+                 {
+                     Status = DtCompileTable (PFieldList,
+@@ -1203,8 +1204,10 @@ DtCompilePptt (
+ 
+                     DtInsertSubtable (ParentTable, Subtable);
+                     PpttHeader->Length += (UINT8)(Subtable->Length);
+-                    PpttProcessor->NumberOfPrivResources++;
++                    NumPrivRes++;
+                 }
++                PpttProcessor->NumberOfPrivResources =
++                        AcpiUtReadUint32 (&NumPrivRes);
+             }
+             break;
+ 
diff --git a/SOURCES/0031-Support-PCCT-in-a-big-endian-world.patch b/SOURCES/0031-Support-PCCT-in-a-big-endian-world.patch
new file mode 100644
index 0000000..00d908e
--- /dev/null
+++ b/SOURCES/0031-Support-PCCT-in-a-big-endian-world.patch
@@ -0,0 +1,54 @@
+From a58ff76fc6e68488d93b55016a7aeb257971a252 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Fri, 25 Sep 2020 17:39:34 -0600
+Subject: [PATCH 31/45] Support PCCT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20210604/source/common/dmtbdump2.c
+@@ -1394,13 +1394,13 @@ AcpiDmDumpPcct (
+     ACPI_STATUS             Status;
+     ACPI_PCCT_SUBSPACE      *Subtable;
+     ACPI_DMTABLE_INFO       *InfoTable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_PCCT);
+ 
+ 
+     /* Main table */
+ 
+-    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPcct);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoPcct);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -1409,12 +1409,12 @@ AcpiDmDumpPcct (
+     /* Subtables */
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         /* Common subtable header */
+ 
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             Subtable->Header.Length, AcpiDmTableInfoPcctHdr);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -1462,7 +1462,7 @@ AcpiDmDumpPcct (
+         }
+ 
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             Subtable->Header.Length, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
diff --git a/SOURCES/0032-Support-WDAT-in-a-big-endian-world.patch b/SOURCES/0032-Support-WDAT-in-a-big-endian-world.patch
new file mode 100644
index 0000000..d28ec57
--- /dev/null
+++ b/SOURCES/0032-Support-WDAT-in-a-big-endian-world.patch
@@ -0,0 +1,43 @@
+From ff1449919ee7d395d301e3a56a4ba333604d0458 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Fri, 25 Sep 2020 18:13:20 -0600
+Subject: [PATCH 32/45] Support WDAT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump3.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump3.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump3.c
++++ acpica-unix2-20210604/source/common/dmtbdump3.c
+@@ -675,11 +675,12 @@ AcpiDmDumpWdat (
+     ACPI_STATUS             Status;
+     UINT32                  Offset = sizeof (ACPI_TABLE_WDAT);
+     ACPI_WDAT_ENTRY         *Subtable;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+ 
+ 
+     /* Main table */
+ 
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWdat);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoWdat);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -688,12 +689,12 @@ AcpiDmDumpWdat (
+     /* Subtables */
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         /* Common subtable header */
+ 
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             sizeof (ACPI_WDAT_ENTRY), AcpiDmTableInfoWdat0);
+         if (ACPI_FAILURE (Status))
+         {
diff --git a/SOURCES/0033-Support-TCPA-in-a-big-endian-world.patch b/SOURCES/0033-Support-TCPA-in-a-big-endian-world.patch
new file mode 100644
index 0000000..21e8818
--- /dev/null
+++ b/SOURCES/0033-Support-TCPA-in-a-big-endian-world.patch
@@ -0,0 +1,76 @@
+From b69b833f5a9205080b27d83379a31fad7fca1575 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Sun, 27 Sep 2020 12:09:28 -0600
+Subject: [PATCH 33/45] Support TCPA in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump3.c  | 13 ++++++++-----
+ source/compiler/dttable2.c |  4 +++-
+ 2 files changed, 11 insertions(+), 6 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump3.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump3.c
++++ acpica-unix2-20210604/source/common/dmtbdump3.c
+@@ -401,11 +401,13 @@ AcpiDmDumpTcpa (
+     ACPI_TABLE_TCPA_HDR     *Subtable = ACPI_ADD_PTR (
+                                 ACPI_TABLE_TCPA_HDR, Table, Offset);
+     ACPI_STATUS             Status;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
++    UINT16                  PlatformClass;
+ 
+ 
+     /* Main table */
+ 
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table,
++    Status = AcpiDmDumpTable (TableLength, 0, Table,
+         0, AcpiDmTableInfoTcpaHdr);
+     if (ACPI_FAILURE (Status))
+     {
+@@ -416,18 +418,19 @@ AcpiDmDumpTcpa (
+      * Examine the PlatformClass field to determine the table type.
+      * Either a client or server table. Only one.
+      */
+-    switch (CommonHeader->PlatformClass)
++    PlatformClass = AcpiUtReadUint16 (&CommonHeader->PlatformClass);
++    switch (PlatformClass)
+     {
+     case ACPI_TCPA_CLIENT_TABLE:
+ 
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             Table->Length - Offset, AcpiDmTableInfoTcpaClient);
+         break;
+ 
+     case ACPI_TCPA_SERVER_TABLE:
+ 
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+-            Table->Length - Offset, AcpiDmTableInfoTcpaServer);
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
++            TableLength - Offset, AcpiDmTableInfoTcpaServer);
+         break;
+ 
+     default:
+Index: acpica-unix2-20210604/source/compiler/dttable2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dttable2.c
++++ acpica-unix2-20210604/source/compiler/dttable2.c
+@@ -2139,6 +2139,7 @@ DtCompileTcpa (
+     ACPI_TABLE_TCPA_HDR     *TcpaHeader;
+     DT_SUBTABLE             *ParentTable;
+     ACPI_STATUS             Status;
++    UINT16                  PlatformClass;
+ 
+ 
+     /* Compile the main table */
+@@ -2159,7 +2160,8 @@ DtCompileTcpa (
+      */
+     TcpaHeader = ACPI_CAST_PTR (ACPI_TABLE_TCPA_HDR, ParentTable->Buffer);
+ 
+-    switch (TcpaHeader->PlatformClass)
++    PlatformClass = AcpiUtReadUint16 (&TcpaHeader->PlatformClass);
++    switch (PlatformClass)
+     {
+     case ACPI_TCPA_CLIENT_TABLE:
+ 
diff --git a/SOURCES/0034-Support-STAO-in-a-big-endian-world.patch b/SOURCES/0034-Support-STAO-in-a-big-endian-world.patch
new file mode 100644
index 0000000..e338c5f
--- /dev/null
+++ b/SOURCES/0034-Support-STAO-in-a-big-endian-world.patch
@@ -0,0 +1,40 @@
+From c313a76ce818135f02ab158a9f0c8e4b8e96698a Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Mon, 28 Sep 2020 11:49:42 -0600
+Subject: [PATCH 34/45] Support STAO in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump3.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump3.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump3.c
++++ acpica-unix2-20210604/source/common/dmtbdump3.c
+@@ -285,14 +285,14 @@ AcpiDmDumpStao (
+ {
+     ACPI_STATUS             Status;
+     char                    *Namepath;
+-    UINT32                  Length = Table->Length;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  StringLength;
+     UINT32                  Offset = sizeof (ACPI_TABLE_STAO);
+ 
+ 
+     /* Main table */
+ 
+-    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoStao);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoStao);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -300,7 +300,7 @@ AcpiDmDumpStao (
+ 
+     /* The rest of the table consists of Namepath strings */
+ 
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         Namepath = ACPI_ADD_PTR (char, Table, Offset);
+         StringLength = strlen (Namepath) + 1;
diff --git a/SOURCES/0035-Support-SLIC-and-MSDM-in-a-big-endian-world.patch b/SOURCES/0035-Support-SLIC-and-MSDM-in-a-big-endian-world.patch
new file mode 100644
index 0000000..3f8fa6d
--- /dev/null
+++ b/SOURCES/0035-Support-SLIC-and-MSDM-in-a-big-endian-world.patch
@@ -0,0 +1,33 @@
+From 948bebd1a0999bc3481641d3fc996c49432709c6 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Mon, 28 Sep 2020 12:49:23 -0600
+Subject: [PATCH 35/45] Support SLIC and MSDM in a big-endian world
+
+When dumping the SLIC table, it was also found that the code was
+not starting at the proper offset on disassembly.  Set the offset
+to the first byte after the header instead of the very beginning
+of the table.
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump3.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump3.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump3.c
++++ acpica-unix2-20210604/source/common/dmtbdump3.c
+@@ -68,9 +68,11 @@ void
+ AcpiDmDumpSlic (
+     ACPI_TABLE_HEADER       *Table)
+ {
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+ 
+-    (void) AcpiDmDumpTable (Table->Length, sizeof (ACPI_TABLE_HEADER), Table,
+-        Table->Length - sizeof (*Table), AcpiDmTableInfoSlic);
++    (void) AcpiDmDumpTable (TableLength, sizeof (ACPI_TABLE_HEADER),
++        (void *) (Table + sizeof (*Table)),
++        TableLength - sizeof (*Table), AcpiDmTableInfoSlic);
+ }
+ 
+ 
diff --git a/SOURCES/0036-Support-MCFG-in-a-big-endian-world.patch b/SOURCES/0036-Support-MCFG-in-a-big-endian-world.patch
new file mode 100644
index 0000000..c5a30da
--- /dev/null
+++ b/SOURCES/0036-Support-MCFG-in-a-big-endian-world.patch
@@ -0,0 +1,50 @@
+From 0fb79a24fb70ab1e1e4879220af82a9fa00af586 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Mon, 28 Sep 2020 13:01:18 -0600
+Subject: [PATCH 36/45] Support MCFG in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20210604/source/common/dmtbdump2.c
+@@ -930,11 +930,12 @@ AcpiDmDumpMcfg (
+     ACPI_STATUS             Status;
+     UINT32                  Offset = sizeof (ACPI_TABLE_MCFG);
+     ACPI_MCFG_ALLOCATION    *Subtable;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+ 
+ 
+     /* Main table */
+ 
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMcfg);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoMcfg);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -943,17 +944,17 @@ AcpiDmDumpMcfg (
+     /* Subtables */
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+-        if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Table->Length)
++        if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > TableLength)
+         {
+             AcpiOsPrintf ("Warning: there are %u invalid trailing bytes\n",
+-                (UINT32) sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Table->Length));
++                (UINT32) sizeof (ACPI_MCFG_ALLOCATION) - (Offset - TableLength));
+             return;
+         }
+ 
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             sizeof (ACPI_MCFG_ALLOCATION), AcpiDmTableInfoMcfg0);
+         if (ACPI_FAILURE (Status))
+         {
diff --git a/SOURCES/0037-Support-LPIT-in-a-big-endian-world.patch b/SOURCES/0037-Support-LPIT-in-a-big-endian-world.patch
new file mode 100644
index 0000000..e5e83d3
--- /dev/null
+++ b/SOURCES/0037-Support-LPIT-in-a-big-endian-world.patch
@@ -0,0 +1,46 @@
+From d10bfd67b5352ff5587e06fc1f82b896bab49614 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Mon, 28 Sep 2020 16:49:30 -0600
+Subject: [PATCH 37/45] Support LPIT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20210604/source/common/dmtbdump2.c
+@@ -690,7 +690,7 @@ AcpiDmDumpLpit (
+ {
+     ACPI_STATUS             Status;
+     ACPI_LPIT_HEADER        *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_LPIT);
+     ACPI_DMTABLE_INFO       *InfoTable;
+     UINT32                  SubtableLength;
+@@ -699,11 +699,11 @@ AcpiDmDumpLpit (
+     /* Subtables */
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         /* Common subtable header */
+ 
+-        Status = AcpiDmDumpTable (Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             sizeof (ACPI_LPIT_HEADER), AcpiDmTableInfoLpitHdr);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -727,7 +727,7 @@ AcpiDmDumpLpit (
+             return;
+         }
+ 
+-        Status = AcpiDmDumpTable (Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             SubtableLength, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
diff --git a/SOURCES/0038-Support-PMTT-in-a-big-endian-world.patch b/SOURCES/0038-Support-PMTT-in-a-big-endian-world.patch
new file mode 100644
index 0000000..4c6338c
--- /dev/null
+++ b/SOURCES/0038-Support-PMTT-in-a-big-endian-world.patch
@@ -0,0 +1,85 @@
+From bd19995fa268ed3e93c071162d0e9c2d35ada0d4 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Tue, 29 Jun 2021 16:23:30 -0600
+Subject: [PATCH 38/45] Support PMTT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c | 18 ++++++++++--------
+ 1 file changed, 10 insertions(+), 8 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20210604/source/common/dmtbdump2.c
+@@ -1686,8 +1686,9 @@ AcpiDmDumpPmtt (
+ {
+     ACPI_STATUS             Status;
+     ACPI_PMTT_HEADER        *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  Length = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_PMTT);
++    UINT16                  SubtableLength;
+ 
+ 
+     /* Main table */
+@@ -1701,17 +1702,18 @@ AcpiDmDumpPmtt (
+     /* Subtables */
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < Length)
+     {
+         /* Each of the types below contain the common subtable header */
+ 
+         AcpiOsPrintf ("\n");
++	SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
+         switch (Subtable->Type)
+         {
+         case ACPI_PMTT_TYPE_SOCKET:
+ 
+             Status = AcpiDmDumpTable (Length, Offset, Subtable,
+-                Subtable->Length, AcpiDmTableInfoPmtt0);
++                SubtableLength, AcpiDmTableInfoPmtt0);
+             if (ACPI_FAILURE (Status))
+             {
+                 return;
+@@ -1720,7 +1722,7 @@ AcpiDmDumpPmtt (
+ 
+         case ACPI_PMTT_TYPE_CONTROLLER:
+             Status = AcpiDmDumpTable (Length, Offset, Subtable,
+-                Subtable->Length, AcpiDmTableInfoPmtt1);
++                SubtableLength, AcpiDmTableInfoPmtt1);
+             if (ACPI_FAILURE (Status))
+             {
+                 return;
+@@ -1729,7 +1731,7 @@ AcpiDmDumpPmtt (
+ 
+        case ACPI_PMTT_TYPE_DIMM:
+             Status = AcpiDmDumpTable (Length, Offset, Subtable,
+-                Subtable->Length, AcpiDmTableInfoPmtt2);
++                SubtableLength, AcpiDmTableInfoPmtt2);
+             if (ACPI_FAILURE (Status))
+             {
+                 return;
+@@ -1738,7 +1740,7 @@ AcpiDmDumpPmtt (
+ 
+         case ACPI_PMTT_TYPE_VENDOR:
+             Status = AcpiDmDumpTable (Length, Offset, Subtable,
+-                Subtable->Length, AcpiDmTableInfoPmttVendor);
++                SubtableLength, AcpiDmTableInfoPmttVendor);
+             if (ACPI_FAILURE (Status))
+             {
+                 return;
+@@ -1754,9 +1756,9 @@ AcpiDmDumpPmtt (
+ 
+         /* Point to next subtable */
+ 
+-        Offset += Subtable->Length;
++        Offset += SubtableLength;
+         Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
+-            Subtable, Subtable->Length);
++            Subtable, SubtableLength);
+     }
+ }
+ 
diff --git a/SOURCES/0039-Support-TPM2-in-a-big-endian-world.patch b/SOURCES/0039-Support-TPM2-in-a-big-endian-world.patch
new file mode 100644
index 0000000..08e3522
--- /dev/null
+++ b/SOURCES/0039-Support-TPM2-in-a-big-endian-world.patch
@@ -0,0 +1,119 @@
+From c240ab3af6a4ad4405def7188e3d64da06a69f37 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Wed, 30 Sep 2020 18:42:38 -0600
+Subject: [PATCH 39/45] Support TPM2 in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump3.c  | 18 ++++++++++--------
+ source/compiler/dttable2.c |  8 +++++---
+ 2 files changed, 15 insertions(+), 11 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump3.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump3.c
++++ acpica-unix2-20210604/source/common/dmtbdump3.c
+@@ -470,11 +470,12 @@ AcpiDmDumpTpm2Rev3 (
+     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;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+ 
+ 
+     /* Main table */
+ 
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm23);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoTpm23);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -486,8 +487,8 @@ AcpiDmDumpTpm2Rev3 (
+     {
+     case ACPI_TPM23_ACPI_START_METHOD:
+ 
+-        (void) AcpiDmDumpTable (Table->Length, Offset, Subtable,
+-            Table->Length - Offset, AcpiDmTableInfoTpm23a);
++        (void) AcpiDmDumpTable (TableLength, Offset, Subtable,
++            TableLength - Offset, AcpiDmTableInfoTpm23a);
+         break;
+ 
+     default:
+@@ -517,6 +518,7 @@ AcpiDmDumpTpm2 (
+     ACPI_TPM2_TRAILER       *Subtable = ACPI_ADD_PTR (ACPI_TPM2_TRAILER, Table, Offset);
+     ACPI_TPM2_ARM_SMC       *ArmSubtable;
+     ACPI_STATUS             Status;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+ 
+ 
+     if (Table->Revision == 3)
+@@ -527,7 +529,7 @@ AcpiDmDumpTpm2 (
+ 
+     /* Main table */
+ 
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm2);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoTpm2);
+ 
+     if (ACPI_FAILURE (Status))
+     {
+@@ -535,8 +537,8 @@ AcpiDmDumpTpm2 (
+     }
+ 
+     AcpiOsPrintf ("\n");
+-    Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+-        Table->Length - Offset, AcpiDmTableInfoTpm2a);
++    Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
++        TableLength - Offset, AcpiDmTableInfoTpm2a);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -551,8 +553,8 @@ AcpiDmDumpTpm2 (
+         Offset += sizeof (ACPI_TPM2_TRAILER);
+ 
+         AcpiOsPrintf ("\n");
+-        (void) AcpiDmDumpTable (Table->Length, Offset, ArmSubtable,
+-            Table->Length - Offset, AcpiDmTableInfoTpm211);
++        (void) AcpiDmDumpTable (TableLength, Offset, ArmSubtable,
++            TableLength - Offset, AcpiDmTableInfoTpm211);
+         break;
+ 
+     default:
+Index: acpica-unix2-20210604/source/compiler/dttable2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dttable2.c
++++ acpica-unix2-20210604/source/compiler/dttable2.c
+@@ -2267,6 +2267,7 @@ DtCompileTpm2 (
+     DT_SUBTABLE             *ParentTable;
+     ACPI_STATUS             Status = AE_OK;
+     ACPI_TABLE_HEADER       *Header;
++    UINT8                   StartMethod;
+ 
+ 
+     ParentTable = DtPeekSubtable ();
+@@ -2310,7 +2311,8 @@ DtCompileTpm2 (
+ 
+     /* Subtable type depends on the StartMethod */
+ 
+-    switch (Tpm2Header->StartMethod)
++    StartMethod = *(UINT8 *) &Tpm2Header->StartMethod;
++    switch (StartMethod)
+     {
+     case ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC:
+ 
+@@ -2341,7 +2343,7 @@ DtCompileTpm2 (
+     case ACPI_TPM2_RESERVED10:
+ 
+         AcpiOsPrintf ("\n**** Reserved TPM2 Start Method type 0x%X\n",
+-            Tpm2Header->StartMethod);
++            StartMethod);
+         Status = AE_ERROR;
+         break;
+ 
+@@ -2349,7 +2351,7 @@ DtCompileTpm2 (
+     default:
+ 
+         AcpiOsPrintf ("\n**** Unknown TPM2 Start Method type 0x%X\n",
+-            Tpm2Header->StartMethod);
++            StartMethod);
+         Status = AE_ERROR;
+         break;
+     }
diff --git a/SOURCES/0040-Support-S3PT-in-a-big-endian-world.patch b/SOURCES/0040-Support-S3PT-in-a-big-endian-world.patch
new file mode 100644
index 0000000..07e0a24
--- /dev/null
+++ b/SOURCES/0040-Support-S3PT-in-a-big-endian-world.patch
@@ -0,0 +1,96 @@
+From 9fc0e46189feb926b13713422ea2722e273a31b5 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Mon, 19 Oct 2020 17:30:30 -0400
+Subject: [PATCH 40/45] Support S3PT in a big-endian world
+
+---
+ source/common/dmtbdump2.c  | 15 +++++++++------
+ source/compiler/dttable2.c |  4 +++-
+ 2 files changed, 12 insertions(+), 7 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20210604/source/common/dmtbdump2.c
+@@ -2039,6 +2039,8 @@ AcpiDmDumpS3pt (
+     ACPI_FPDT_HEADER        *Subtable;
+     ACPI_DMTABLE_INFO       *InfoTable;
+     ACPI_TABLE_S3PT         *S3ptTable = ACPI_CAST_PTR (ACPI_TABLE_S3PT, Tables);
++    UINT32                  S3ptTableLength = AcpiUtReadUint32 (&S3ptTable->Length);
++    UINT16                  SubtableType;
+ 
+ 
+     /* Main table */
+@@ -2050,19 +2052,20 @@ AcpiDmDumpS3pt (
+     }
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, S3ptTable, Offset);
+-    while (Offset < S3ptTable->Length)
++    while (Offset < S3ptTableLength)
+     {
+         /* Common subtable header */
+ 
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (S3ptTableLength, Offset, Subtable,
+             Subtable->Length, AcpiDmTableInfoS3ptHdr);
+         if (ACPI_FAILURE (Status))
+         {
+             return 0;
+         }
+ 
+-        switch (Subtable->Type)
++        SubtableType = AcpiUtReadUint16 (&Subtable->Type);
++        switch (SubtableType)
+         {
+         case ACPI_S3PT_TYPE_RESUME:
+ 
+@@ -2077,7 +2080,7 @@ AcpiDmDumpS3pt (
+         default:
+ 
+             AcpiOsPrintf ("\n**** Unknown S3PT subtable type 0x%X\n",
+-                Subtable->Type);
++                SubtableType);
+ 
+             /* Attempt to continue */
+ 
+@@ -2090,7 +2093,7 @@ AcpiDmDumpS3pt (
+         }
+ 
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (S3ptTableLength, Offset, Subtable,
+             Subtable->Length, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -2104,7 +2107,7 @@ NextSubtable:
+         Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Subtable, Subtable->Length);
+     }
+ 
+-    return (S3ptTable->Length);
++    return (S3ptTableLength);
+ }
+ 
+ 
+Index: acpica-unix2-20210604/source/compiler/dttable2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dttable2.c
++++ acpica-unix2-20210604/source/compiler/dttable2.c
+@@ -1406,6 +1406,7 @@ DtCompileS3pt (
+     DT_SUBTABLE             *ParentTable;
+     ACPI_DMTABLE_INFO       *InfoTable;
+     DT_FIELD                *SubtableStart;
++    UINT16                  S3ptHeaderType;
+ 
+ 
+     Status = DtCompileTable (PFieldList, AcpiDmTableInfoS3pt,
+@@ -1433,7 +1434,8 @@ DtCompileS3pt (
+ 
+         S3ptHeader = ACPI_CAST_PTR (ACPI_FPDT_HEADER, Subtable->Buffer);
+ 
+-        switch (S3ptHeader->Type)
++        S3ptHeaderType = AcpiUtReadUint16 (&S3ptHeader->Type);
++        switch (S3ptHeaderType)
+         {
+         case ACPI_S3PT_TYPE_RESUME:
+ 
diff --git a/SOURCES/0041-Support-IORT-in-a-big-endian-world.patch b/SOURCES/0041-Support-IORT-in-a-big-endian-world.patch
new file mode 100644
index 0000000..ccc6e77
--- /dev/null
+++ b/SOURCES/0041-Support-IORT-in-a-big-endian-world.patch
@@ -0,0 +1,414 @@
+From 5bd43bca1708a56d32e63da0278e04caf2865927 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Tue, 29 Jun 2021 17:38:20 -0600
+Subject: [PATCH 41/45] Support IORT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c  | 85 ++++++++++++++++++++++----------------
+ source/compiler/dttable1.c | 40 ++++++++++--------
+ 2 files changed, 72 insertions(+), 53 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20210604/source/common/dmtbdump2.c
+@@ -77,17 +77,20 @@ AcpiDmDumpIort (
+     ACPI_IORT_RMR           *IortRmr = NULL;
+     UINT32                  Offset;
+     UINT32                  NodeOffset;
++    UINT32                  NodeLength;
+     UINT32                  Length;
+     ACPI_DMTABLE_INFO       *InfoTable;
+     char                    *String;
+     UINT32                  i;
+     UINT32                  MappingByteLength;
+     UINT8                   Revision;
++    UINT32                  MappingCount;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+ 
+ 
+     /* Main table */
+ 
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIort);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoIort);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -109,18 +112,19 @@ AcpiDmDumpIort (
+ 
+     /* Dump the OptionalPadding (optional) */
+ 
+-    if (Iort->NodeOffset > Offset)
++    NodeOffset = AcpiUtReadUint32 (&Iort->NodeOffset);
++    if (NodeOffset > Offset)
+     {
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Table,
+-            Iort->NodeOffset - Offset, AcpiDmTableInfoIortPad);
++        Status = AcpiDmDumpTable (TableLength, Offset, Table,
++            NodeOffset - Offset, AcpiDmTableInfoIortPad);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+         }
+     }
+ 
+-    Offset = Iort->NodeOffset;
+-    while (Offset < Table->Length)
++    Offset = AcpiUtReadUint32 (&Iort->NodeOffset);
++    while (Offset < TableLength)
+     {
+         /* Common subtable header */
+ 
+@@ -130,12 +134,12 @@ AcpiDmDumpIort (
+ 
+         if (Revision == 0)
+         {
+-            Status = AcpiDmDumpTable (Table->Length, Offset,
++            Status = AcpiDmDumpTable (TableLength, Offset,
+                 IortNode, Length, AcpiDmTableInfoIortHdr);
+         }
+         else if (Revision >= 3)
+         {
+-            Status = AcpiDmDumpTable (Table->Length, Offset,
++            Status = AcpiDmDumpTable (TableLength, Offset,
+                 IortNode, Length, AcpiDmTableInfoIortHdr3);
+         }
+ 
+@@ -166,7 +170,7 @@ AcpiDmDumpIort (
+         case ACPI_IORT_NODE_PCI_ROOT_COMPLEX:
+ 
+             InfoTable = AcpiDmTableInfoIort2;
+-            Length = IortNode->Length - NodeOffset;
++            Length = AcpiUtReadUint16 (&IortNode->Length) - NodeOffset;
+             break;
+ 
+         case ACPI_IORT_NODE_SMMU:
+@@ -179,19 +183,19 @@ AcpiDmDumpIort (
+         case ACPI_IORT_NODE_SMMU_V3:
+ 
+             InfoTable = AcpiDmTableInfoIort4;
+-            Length = IortNode->Length - NodeOffset;
++            Length = AcpiUtReadUint16 (&IortNode->Length) - NodeOffset;
+             break;
+ 
+         case ACPI_IORT_NODE_PMCG:
+ 
+             InfoTable = AcpiDmTableInfoIort5;
+-            Length = IortNode->Length - NodeOffset;
++            Length = AcpiUtReadUint16 (&IortNode->Length) - NodeOffset;
+             break;
+ 
+         case ACPI_IORT_NODE_RMR:
+ 
+             InfoTable = AcpiDmTableInfoIort6;
+-            Length = IortNode->Length - NodeOffset;
++            Length = AcpiUtReadUint16 (&IortNode->Length) - NodeOffset;
+             IortRmr = ACPI_ADD_PTR (ACPI_IORT_RMR, IortNode, NodeOffset);
+             break;
+ 
+@@ -202,7 +206,7 @@ AcpiDmDumpIort (
+ 
+             /* Attempt to continue */
+ 
+-            if (!IortNode->Length)
++            if (!AcpiUtReadUint16 (&IortNode->Length))
+             {
+                 AcpiOsPrintf ("Invalid zero length IORT node\n");
+                 return;
+@@ -213,7 +217,7 @@ AcpiDmDumpIort (
+         /* Dump the node subtable header */
+ 
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
++        Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
+             ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
+             Length, InfoTable);
+         if (ACPI_FAILURE (Status))
+@@ -233,9 +237,10 @@ AcpiDmDumpIort (
+ 
+             if (IortItsGroup)
+             {
+-                for (i = 0; i < IortItsGroup->ItsCount; i++)
++	        UINT32 ItsCount = AcpiUtReadUint32 (&IortItsGroup->ItsCount);
++                for (i = 0; i < ItsCount; i++)
+                 {
+-                    Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
++                    Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
+                         ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
+                         4, AcpiDmTableInfoIort0a);
+                     if (ACPI_FAILURE (Status))
+@@ -252,12 +257,14 @@ AcpiDmDumpIort (
+ 
+             /* Dump the Padding (optional) */
+ 
+-            if (IortNode->Length > NodeOffset)
++            NodeLength = AcpiUtReadUint16 (&IortNode->Length);
++            if (NodeLength > NodeOffset)
+             {
+                 MappingByteLength =
+-                    IortNode->MappingCount * sizeof (ACPI_IORT_ID_MAPPING);
+-                Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
+-                    Table, IortNode->Length - NodeOffset - MappingByteLength,
++                    AcpiUtReadUint32 (&IortNode->MappingCount) *
++		    sizeof (ACPI_IORT_ID_MAPPING);
++                Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
++                    Table, NodeLength - NodeOffset - MappingByteLength,
+                     AcpiDmTableInfoIort1a);
+                 if (ACPI_FAILURE (Status))
+                 {
+@@ -274,9 +281,11 @@ AcpiDmDumpIort (
+ 
+             if (IortSmmu)
+             {
++	        UINT32 InterruptCount;
++
+                 Length = 2 * sizeof (UINT64);
+-                NodeOffset = IortSmmu->GlobalInterruptOffset;
+-                Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
++                NodeOffset = AcpiUtReadUint32 (&IortSmmu->GlobalInterruptOffset);
++                Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
+                     ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
+                     Length, AcpiDmTableInfoIort3a);
+                 if (ACPI_FAILURE (Status))
+@@ -284,10 +293,11 @@ AcpiDmDumpIort (
+                     return;
+                 }
+ 
+-                NodeOffset = IortSmmu->ContextInterruptOffset;
+-                for (i = 0; i < IortSmmu->ContextInterruptCount; i++)
++                NodeOffset = AcpiUtReadUint32 (&IortSmmu->ContextInterruptOffset);
++                InterruptCount = AcpiUtReadUint32 (&IortSmmu->ContextInterruptCount);
++                for (i = 0; i < InterruptCount; i++)
+                 {
+-                    Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
++                    Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
+                         ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
+                         8, AcpiDmTableInfoIort3b);
+                     if (ACPI_FAILURE (Status))
+@@ -298,10 +308,11 @@ AcpiDmDumpIort (
+                     NodeOffset += 8;
+                 }
+ 
+-                NodeOffset = IortSmmu->PmuInterruptOffset;
+-                for (i = 0; i < IortSmmu->PmuInterruptCount; i++)
++                NodeOffset = AcpiUtReadUint32 (&IortSmmu->PmuInterruptOffset);
++                InterruptCount = AcpiUtReadUint32 (&IortSmmu->PmuInterruptCount);
++                for (i = 0; i < InterruptCount; i++)
+                 {
+-                    Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
++                    Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
+                         ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
+                         8, AcpiDmTableInfoIort3c);
+                     if (ACPI_FAILURE (Status))
+@@ -319,12 +330,15 @@ AcpiDmDumpIort (
+             /* Validate IortRmr to avoid compiler warnings */
+             if (IortRmr)
+             {
+-                NodeOffset = IortRmr->RmrOffset;
++	        UINT32 RmrCount;
++
++                NodeOffset = AcpiUtReadUint32 (&IortRmr->RmrOffset);
++                RmrCount = AcpiUtReadUint32 (&IortRmr->RmrCount);
+                 Length = sizeof (ACPI_IORT_RMR_DESC);
+-                for (i = 0; i < IortRmr->RmrCount; i++)
++                for (i = 0; i < RmrCount; i++)
+                 {
+                     AcpiOsPrintf ("\n");
+-                    Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
++                    Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
+                         ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
+                         Length, AcpiDmTableInfoIort6a);
+                     if (ACPI_FAILURE (Status))
+@@ -344,12 +358,13 @@ AcpiDmDumpIort (
+ 
+         /* Dump the ID mappings */
+ 
+-        NodeOffset = IortNode->MappingOffset;
+-        for (i = 0; i < IortNode->MappingCount; i++)
++        NodeOffset = AcpiUtReadUint32 (&IortNode->MappingOffset);
++        MappingCount = AcpiUtReadUint32 (&IortNode->MappingCount);
++        for (i = 0; i < MappingCount; i++)
+         {
+             AcpiOsPrintf ("\n");
+             Length = sizeof (ACPI_IORT_ID_MAPPING);
+-            Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
++            Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
+                 ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
+                 Length, AcpiDmTableInfoIortMap);
+             if (ACPI_FAILURE (Status))
+@@ -363,7 +378,7 @@ AcpiDmDumpIort (
+ NextSubtable:
+         /* Point to next node subtable */
+ 
+-        Offset += IortNode->Length;
++        Offset += AcpiUtReadUint16 (&IortNode->Length);
+     }
+ }
+ 
+Index: acpica-unix2-20210604/source/compiler/dttable1.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dttable1.c
++++ acpica-unix2-20210604/source/compiler/dttable1.c
+@@ -1592,6 +1592,7 @@ DtCompileIort (
+     ACPI_IORT_ITS_GROUP     *IortItsGroup;
+     ACPI_IORT_SMMU          *IortSmmu;
+     ACPI_IORT_RMR           *IortRmr;
++    UINT32                  IortNodeOffset;
+     UINT32                  NodeNumber;
+     UINT32                  NodeLength;
+     UINT32                  IdMappingNumber;
+@@ -1637,7 +1638,7 @@ DtCompileIort (
+      * Optionally allows the generic data types to be used for filling
+      * this field.
+      */
+-    Iort->NodeOffset = sizeof (ACPI_TABLE_IORT);
++    IortNodeOffset = sizeof (ACPI_TABLE_IORT);
+     Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortPad,
+         &Subtable);
+     if (ACPI_FAILURE (Status))
+@@ -1647,7 +1648,7 @@ DtCompileIort (
+     if (Subtable)
+     {
+         DtInsertSubtable (ParentTable, Subtable);
+-        Iort->NodeOffset += Subtable->Length;
++        IortNodeOffset += Subtable->Length;
+     }
+     else
+     {
+@@ -1657,7 +1658,7 @@ DtCompileIort (
+         {
+             return (Status);
+         }
+-        Iort->NodeOffset += PaddingLength;
++        IortNodeOffset += PaddingLength;
+     }
+ 
+     NodeNumber = 0;
+@@ -1721,7 +1722,7 @@ DtCompileIort (
+                 ItsNumber++;
+             }
+ 
+-            IortItsGroup->ItsCount = ItsNumber;
++            IortItsGroup->ItsCount = AcpiUtReadUint32 (&ItsNumber);
+             break;
+ 
+         case ACPI_IORT_NODE_NAMED_COMPONENT:
+@@ -1755,15 +1756,18 @@ DtCompileIort (
+             }
+             else
+             {
+-                if (NodeLength > IortNode->MappingOffset)
++	        UINT32 MappingOffset;
++
++                MappingOffset = IortNode->MappingOffset;
++                if (NodeLength > MappingOffset)
+                 {
+                     return (AE_BAD_DATA);
+                 }
+ 
+-                if (NodeLength < IortNode->MappingOffset)
++                if (NodeLength < MappingOffset)
+                 {
+                     Status = DtCompilePadding (
+-                        IortNode->MappingOffset - NodeLength,
++                        MappingOffset - NodeLength,
+                         &Subtable);
+                     if (ACPI_FAILURE (Status))
+                     {
+@@ -1771,7 +1775,7 @@ DtCompileIort (
+                     }
+ 
+                     DtInsertSubtable (ParentTable, Subtable);
+-                    NodeLength = IortNode->MappingOffset;
++                    NodeLength = MappingOffset;
+                 }
+             }
+             break;
+@@ -1804,7 +1808,7 @@ DtCompileIort (
+ 
+             /* Compile global interrupt array */
+ 
+-            IortSmmu->GlobalInterruptOffset = NodeLength;
++            IortSmmu->GlobalInterruptOffset = AcpiUtReadUint32 (&NodeLength);
+             Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3a,
+                 &Subtable);
+             if (ACPI_FAILURE (Status))
+@@ -1818,7 +1822,7 @@ DtCompileIort (
+             /* Compile context interrupt array */
+ 
+             ContextIrptNumber = 0;
+-            IortSmmu->ContextInterruptOffset = NodeLength;
++            IortSmmu->ContextInterruptOffset = AcpiUtReadUint32 (&NodeLength);
+             while (*PFieldList)
+             {
+                 Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3b,
+@@ -1838,12 +1842,12 @@ DtCompileIort (
+                 ContextIrptNumber++;
+             }
+ 
+-            IortSmmu->ContextInterruptCount = ContextIrptNumber;
++            IortSmmu->ContextInterruptCount = AcpiUtReadUint32 (&ContextIrptNumber);
+ 
+             /* Compile PMU interrupt array */
+ 
+             PmuIrptNumber = 0;
+-            IortSmmu->PmuInterruptOffset = NodeLength;
++            IortSmmu->PmuInterruptOffset = AcpiUtReadUint32 (&NodeLength);
+             while (*PFieldList)
+             {
+                 Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3c,
+@@ -1863,7 +1867,7 @@ DtCompileIort (
+                 PmuIrptNumber++;
+             }
+ 
+-            IortSmmu->PmuInterruptCount = PmuIrptNumber;
++            IortSmmu->PmuInterruptCount = AcpiUtReadUint32 (&PmuIrptNumber);
+             break;
+ 
+         case ACPI_IORT_NODE_SMMU_V3:
+@@ -1908,7 +1912,7 @@ DtCompileIort (
+             /* Compile RMR Descriptors */
+ 
+             RmrCount = 0;
+-            IortRmr->RmrOffset = NodeLength;
++            IortRmr->RmrOffset = AcpiUtReadUint32 (&NodeLength);
+             while (*PFieldList)
+             {
+                 Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort6a,
+@@ -1928,7 +1932,7 @@ DtCompileIort (
+                 RmrCount++;
+             }
+ 
+-            IortRmr->RmrCount = RmrCount;
++            IortRmr->RmrCount = AcpiUtReadUint32 (&RmrCount);
+             break;
+ 
+ 	default:
+@@ -1939,7 +1943,7 @@ DtCompileIort (
+ 
+         /* Compile Array of ID mappings */
+ 
+-        IortNode->MappingOffset = NodeLength;
++        IortNode->MappingOffset = AcpiUtReadUint32 (&NodeLength);
+         IdMappingNumber = 0;
+         while (*PFieldList)
+         {
+@@ -1960,7 +1964,7 @@ DtCompileIort (
+             IdMappingNumber++;
+         }
+ 
+-        IortNode->MappingCount = IdMappingNumber;
++        IortNode->MappingCount = AcpiUtReadUint32 (&IdMappingNumber);
+         if (!IdMappingNumber)
+         {
+             IortNode->MappingOffset = 0;
+@@ -1975,7 +1979,7 @@ DtCompileIort (
+         NodeNumber++;
+     }
+ 
+-    Iort->NodeCount = NodeNumber;
++    Iort->NodeCount = AcpiUtReadUint32 (&NodeNumber);
+     return (AE_OK);
+ }
+ 
diff --git a/SOURCES/0042-Support-IVRS-in-a-big-endian-world.patch b/SOURCES/0042-Support-IVRS-in-a-big-endian-world.patch
new file mode 100644
index 0000000..6d8bab7
--- /dev/null
+++ b/SOURCES/0042-Support-IVRS-in-a-big-endian-world.patch
@@ -0,0 +1,138 @@
+From b64cff82b2b33ed659826d777d2db039f64fd198 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Tue, 29 Jun 2021 17:45:24 -0600
+Subject: [PATCH 42/45] Support IVRS in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c | 34 +++++++++++++++++++---------------
+ 1 file changed, 19 insertions(+), 15 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20210604/source/common/dmtbdump2.c
+@@ -419,11 +419,14 @@ AcpiDmDumpIvrs (
+     ACPI_IVRS_DE_HEADER     *DeviceEntry;
+     ACPI_IVRS_HEADER        *Subtable;
+     ACPI_DMTABLE_INFO       *InfoTable;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
++    UINT16                  SubtableLength;
++
+ 
+ 
+     /* Main table */
+ 
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIvrs);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoIvrs);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -433,8 +436,9 @@ AcpiDmDumpIvrs (
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset);
+ 
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
++        SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
+         switch (Subtable->Type)
+         {
+         /* Type 10h, IVHD (I/O Virtualization Hardware Definition) */
+@@ -471,7 +475,7 @@ AcpiDmDumpIvrs (
+ 
+             /* Attempt to continue */
+ 
+-            if (!Subtable->Length)
++            if (!SubtableLength)
+             {
+                 AcpiOsPrintf ("Invalid zero length subtable\n");
+                 return;
+@@ -481,8 +485,8 @@ AcpiDmDumpIvrs (
+ 
+         /* Dump the subtable */
+ 
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+-            Subtable->Length, InfoTable);
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
++            SubtableLength, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+@@ -511,7 +515,7 @@ AcpiDmDumpIvrs (
+ 
+             /* Process all of the Device Entries */
+ 
+-            while (EntryOffset < (Offset + Subtable->Length))
++            while (EntryOffset < (Offset + SubtableLength))
+             {
+                 AcpiOsPrintf ("\n");
+ 
+@@ -581,7 +585,7 @@ AcpiDmDumpIvrs (
+ 
+                 /* Dump the Device Entry */
+ 
+-                Status = AcpiDmDumpTable (Table->Length, EntryOffset,
++                Status = AcpiDmDumpTable (TableLength, EntryOffset,
+                     DeviceEntry, EntryLength, InfoTable);
+                 if (ACPI_FAILURE (Status))
+                 {
+@@ -605,12 +609,12 @@ AcpiDmDumpIvrs (
+                      */
+                     if (UtIsIdInteger ((UINT8 *) &HidSubtable->AcpiHid))
+                     {
+-                        Status = AcpiDmDumpTable (Table->Length, EntryOffset,
++                        Status = AcpiDmDumpTable (TableLength, EntryOffset,
+                             &HidSubtable->AcpiHid, 8, AcpiDmTableInfoIvrsHidInteger);
+                     }
+                     else
+                     {
+-                        Status = AcpiDmDumpTable (Table->Length, EntryOffset,
++                        Status = AcpiDmDumpTable (TableLength, EntryOffset,
+                             &HidSubtable->AcpiHid, 8, AcpiDmTableInfoIvrsHidString);
+                     }
+                     if (ACPI_FAILURE (Status))
+@@ -628,12 +632,12 @@ AcpiDmDumpIvrs (
+                      */
+                     if (UtIsIdInteger ((UINT8 *) &HidSubtable->AcpiCid))
+                     {
+-                        Status = AcpiDmDumpTable (Table->Length, EntryOffset,
++                        Status = AcpiDmDumpTable (TableLength, EntryOffset,
+                             &HidSubtable->AcpiCid, 8, AcpiDmTableInfoIvrsCidInteger);
+                     }
+                     else
+                     {
+-                        Status = AcpiDmDumpTable (Table->Length, EntryOffset,
++                        Status = AcpiDmDumpTable (TableLength, EntryOffset,
+                             &HidSubtable->AcpiCid, 8, AcpiDmTableInfoIvrsCidString);
+                     }
+                     if (ACPI_FAILURE (Status))
+@@ -650,7 +654,7 @@ AcpiDmDumpIvrs (
+ 
+                         if (HidSubtable->UidType == ACPI_IVRS_UID_IS_STRING)
+                         {
+-                            Status = AcpiDmDumpTable (Table->Length, EntryOffset,
++                            Status = AcpiDmDumpTable (TableLength, EntryOffset,
+                                 &HidSubtable->UidType, EntryLength, AcpiDmTableInfoIvrsUidString);
+                             if (ACPI_FAILURE (Status))
+                             {
+@@ -659,7 +663,7 @@ AcpiDmDumpIvrs (
+                         }
+                         else /* ACPI_IVRS_UID_IS_INTEGER */
+                         {
+-                            Status = AcpiDmDumpTable (Table->Length, EntryOffset,
++                            Status = AcpiDmDumpTable (TableLength, EntryOffset,
+                                 &HidSubtable->UidType, EntryLength, AcpiDmTableInfoIvrsUidInteger);
+                             if (ACPI_FAILURE (Status))
+                             {
+@@ -678,8 +682,8 @@ AcpiDmDumpIvrs (
+ NextSubtable:
+         /* Point to next subtable */
+ 
+-        Offset += Subtable->Length;
+-        Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, Subtable->Length);
++        Offset += SubtableLength;
++        Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, SubtableLength);
+     }
+ }
+ 
diff --git a/SOURCES/0043-Support-DSDT-SSDT-in-a-big-endian-world.patch b/SOURCES/0043-Support-DSDT-SSDT-in-a-big-endian-world.patch
new file mode 100644
index 0000000..60a1e72
--- /dev/null
+++ b/SOURCES/0043-Support-DSDT-SSDT-in-a-big-endian-world.patch
@@ -0,0 +1,3169 @@
+From 14d220a34462e61fe69141c86f4c3cd2ae68c279 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Wed, 30 Sep 2020 18:59:57 -0600
+Subject: [PATCH 43/45] Support DSDT/SSDT in a big-endian world.
+
+NB: this is a very large diff.  The problem is that ResourceTemplates
+are treated differently during compilation and disassembly so each of
+the resource types had code that needed to be touched directly.
+
+In general, however, just reading or writing individual AML opcodes
+wasn't that much of a change, and most of it was on the codegen side.
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/adwalk.c                     |   3 +-
+ source/common/dmrestag.c                   |   2 +-
+ source/common/dmtables.c                   |  17 +-
+ source/common/dmtbdump.c                   |   3 +-
+ source/common/dmtbdump3.c                  |   8 +-
+ source/compiler/aslcodegen.c               |  59 ++++--
+ source/compiler/aslopcodes.c               |   3 +-
+ source/compiler/aslrestype1.c              |  60 ++++--
+ source/compiler/aslrestype1i.c             |  35 ++--
+ source/compiler/aslrestype2.c              |  20 +-
+ source/compiler/aslrestype2d.c             |  99 ++++++----
+ source/compiler/aslrestype2e.c             |  90 ++++++---
+ source/compiler/aslrestype2q.c             |  81 +++++---
+ source/compiler/aslrestype2s.c             | 214 +++++++++++++++++----
+ source/compiler/aslrestype2w.c             |  94 +++++----
+ source/compiler/dttable2.c                 |   3 +-
+ source/components/disassembler/dmbuffer.c  |  37 +++-
+ source/components/disassembler/dmopcode.c  |  21 +-
+ source/components/disassembler/dmresrc.c   |   2 +-
+ source/components/disassembler/dmresrcl.c  |  43 +++--
+ source/components/disassembler/dmresrcl2.c | 128 +++++++-----
+ source/components/disassembler/dmresrcs.c  |  18 +-
+ source/components/disassembler/dmwalk.c    |   2 +-
+ source/components/namespace/nsaccess.c     |   2 +-
+ source/components/namespace/nsnames.c      |   4 +-
+ source/components/namespace/nsparse.c      |   6 +-
+ source/components/namespace/nsutils.c      |   7 +-
+ source/components/utilities/utresrc.c      |   2 +-
+ 28 files changed, 721 insertions(+), 341 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/adwalk.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/adwalk.c
++++ acpica-unix2-20210604/source/common/adwalk.c
+@@ -679,7 +679,8 @@ AcpiDmLoadDescendingOp (
+ 
+         if (!Path && Op->Common.AmlOpcode == AML_INT_NAMEDFIELD_OP)
+         {
+-            *ACPI_CAST_PTR (UINT32, &FieldPath[0]) = Op->Named.Name;
++            AcpiUtWriteUint (FieldPath, ACPI_NAMESEG_SIZE,
++		             &Op->Named.Name, ACPI_NAMESEG_SIZE);
+             FieldPath[4] = 0;
+             Path = FieldPath;
+         }
+Index: acpica-unix2-20210604/source/common/dmrestag.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmrestag.c
++++ acpica-unix2-20210604/source/common/dmrestag.c
+@@ -1048,7 +1048,7 @@ AcpiDmAddResourcesToNamespace (
+      * NextOp contains the Aml pointer and the Aml length
+      */
+     AcpiUtWalkAmlResources (NULL, (UINT8 *) NextOp->Named.Data,
+-        (ACPI_SIZE) NextOp->Common.Value.Integer,
++        (ACPI_SIZE) NextOp->Common.Value.Size,
+         AcpiDmAddResourceToNamespace, (void **) BufferNode);
+ }
+ 
+Index: acpica-unix2-20210604/source/common/dmtables.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtables.c
++++ acpica-unix2-20210604/source/common/dmtables.c
+@@ -142,6 +142,10 @@ AdCreateTableHeader (
+     ACPI_TABLE_HEADER       *Table)
+ {
+     UINT8                   Checksum;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
++    UINT32                  OemRevision = AcpiUtReadUint32 (&Table->OemRevision);
++    UINT32                  CompilerRevision =
++                                AcpiUtReadUint32 (&Table->AslCompilerRevision);
+ 
+ 
+     /* Reset globals for External statements */
+@@ -156,7 +160,7 @@ AdCreateTableHeader (
+ 
+     AcpiOsPrintf (" * Original Table Header:\n");
+     AcpiOsPrintf (" *     Signature        \"%4.4s\"\n",    Table->Signature);
+-    AcpiOsPrintf (" *     Length           0x%8.8X (%u)\n", Table->Length, Table->Length);
++    AcpiOsPrintf (" *     Length           0x%8.8X (%u)\n", TableLength, TableLength);
+ 
+     /* Print and validate the revision */
+ 
+@@ -188,7 +192,7 @@ AdCreateTableHeader (
+ 
+     AcpiOsPrintf ("\n *     Checksum         0x%2.2X",        Table->Checksum);
+ 
+-    Checksum = AcpiTbChecksum (ACPI_CAST_PTR (UINT8, Table), Table->Length);
++    Checksum = AcpiTbChecksum (ACPI_CAST_PTR (UINT8, Table), TableLength);
+     if (Checksum)
+     {
+         AcpiOsPrintf (" **** Incorrect checksum, should be 0x%2.2X",
+@@ -198,9 +202,9 @@ AdCreateTableHeader (
+     AcpiOsPrintf ("\n");
+     AcpiOsPrintf (" *     OEM ID           \"%.6s\"\n",     Table->OemId);
+     AcpiOsPrintf (" *     OEM Table ID     \"%.8s\"\n",     Table->OemTableId);
+-    AcpiOsPrintf (" *     OEM Revision     0x%8.8X (%u)\n", Table->OemRevision, Table->OemRevision);
++    AcpiOsPrintf (" *     OEM Revision     0x%8.8X (%u)\n", OemRevision, OemRevision);
+     AcpiOsPrintf (" *     Compiler ID      \"%.4s\"\n",     Table->AslCompilerId);
+-    AcpiOsPrintf (" *     Compiler Version 0x%8.8X (%u)\n", Table->AslCompilerRevision, Table->AslCompilerRevision);
++    AcpiOsPrintf (" *     Compiler Version 0x%8.8X (%u)\n", CompilerRevision, CompilerRevision);
+     AcpiOsPrintf (" */\n");
+ 
+     /*
+@@ -221,7 +225,7 @@ AdCreateTableHeader (
+     AcpiOsPrintf (
+         "DefinitionBlock (\"\", \"%4.4s\", %u, \"%.6s\", \"%.8s\", 0x%8.8X)\n",
+         Table->Signature, Table->Revision,
+-        Table->OemId, Table->OemTableId, Table->OemRevision);
++        Table->OemId, Table->OemTableId, OemRevision);
+ }
+ 
+ 
+@@ -396,7 +400,8 @@ AdParseTable (
+ 
+     fprintf (stderr, "Pass 1 parse of [%4.4s]\n", (char *) Table->Signature);
+ 
+-    AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER);
++    AmlLength = AcpiUtReadUint32 (&Table->Length);
++    AmlLength -= sizeof (ACPI_TABLE_HEADER);
+     AmlStart = ((UINT8 *) Table + sizeof (ACPI_TABLE_HEADER));
+ 
+     AcpiUtSetIntegerWidth (Table->Revision);
+Index: acpica-unix2-20210604/source/common/dmtbdump.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump.c
++++ acpica-unix2-20210604/source/common/dmtbdump.c
+@@ -338,8 +338,7 @@ AcpiDmDumpXsdt (
+     for (i = 0; i < Entries; i++)
+     {
+         AcpiDmLineHeader2 (Offset, sizeof (UINT64), "ACPI Table Address", i);
+-        AcpiOsPrintf ("%8.8X%8.8X\n",
+-                ACPI_FORMAT_UINT64 (AcpiUtReadUint64 (&Array[i])));
++        AcpiOsPrintf ("%16.16lX\n", AcpiUtReadUint64 (&Array[i]));
+         Offset += sizeof (UINT64);
+     }
+ }
+Index: acpica-unix2-20210604/source/common/dmtbdump3.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump3.c
++++ acpica-unix2-20210604/source/common/dmtbdump3.c
+@@ -736,13 +736,13 @@ AcpiDmDumpWpbt (
+ {
+     ACPI_STATUS             Status;
+     ACPI_TABLE_WPBT         *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     UINT16                  ArgumentsLength;
+ 
+ 
+     /* Dump the main table */
+ 
+-    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoWpbt);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoWpbt);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -751,10 +751,10 @@ AcpiDmDumpWpbt (
+     /* Extract the arguments buffer length from the main table */
+ 
+     Subtable = ACPI_CAST_PTR (ACPI_TABLE_WPBT, Table);
+-    ArgumentsLength = Subtable->ArgumentsLength;
++    ArgumentsLength = AcpiUtReadUint16 (&Subtable->ArgumentsLength);
+ 
+     /* Dump the arguments buffer */
+ 
+-    (void) AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength,
++    (void) AcpiDmDumpTable (TableLength, 0, Table, ArgumentsLength,
+         AcpiDmTableInfoWpbt0);
+ }
+Index: acpica-unix2-20210604/source/compiler/aslcodegen.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/aslcodegen.c
++++ acpica-unix2-20210604/source/compiler/aslcodegen.c
+@@ -238,6 +238,10 @@ CgWriteAmlOpcode (
+ {
+     UINT8                   PkgLenFirstByte;
+     UINT32                  i;
++    UINT8                   Tmp8;
++    UINT16                  Tmp16;
++    UINT32                  Tmp32;
++    UINT64                  Tmp64;
+     union {
+         UINT16                  Opcode;
+         UINT8                   OpcodeBytes[2];
+@@ -312,14 +316,15 @@ CgWriteAmlOpcode (
+ 
+         /* Check for two-byte opcode */
+ 
++        Tmp16 = AcpiUtReadUint16 (&Aml.Opcode);
+         if (Aml.Opcode > 0x00FF)
+         {
+             /* Write the high byte first */
+ 
+-            CgLocalWriteAmlData (Op, &Aml.OpcodeBytes[1], 1);
++            CgLocalWriteAmlData (Op, ((UINT8 *) &Tmp16)+1, 1);
+         }
+ 
+-        CgLocalWriteAmlData (Op, &Aml.OpcodeBytes[0], 1);
++        CgLocalWriteAmlData (Op, (UINT8 *) &Tmp16, 1);
+ 
+         /* Subtreelength doesn't include length of package length bytes */
+ 
+@@ -335,7 +340,8 @@ CgWriteAmlOpcode (
+         {
+             /* Simplest case -- no bytes to follow, just write the count */
+ 
+-            CgLocalWriteAmlData (Op, &PkgLen.LenBytes[0], 1);
++            Tmp8 = (UINT8) PkgLen.Len;
++            CgLocalWriteAmlData (Op, &Tmp8, 1);
+         }
+         else if (Op->Asl.AmlPkgLenBytes != 0)
+         {
+@@ -343,9 +349,10 @@ CgWriteAmlOpcode (
+              * Encode the "bytes to follow" in the first byte, top two bits.
+              * The low-order nybble of the length is in the bottom 4 bits
+              */
++            Tmp8 = (UINT8) PkgLen.Len;
+             PkgLenFirstByte = (UINT8)
+                 (((UINT32) (Op->Asl.AmlPkgLenBytes - 1) << 6) |
+-                (PkgLen.LenBytes[0] & 0x0F));
++                (Tmp8 & 0x0F));
+ 
+             CgLocalWriteAmlData (Op, &PkgLenFirstByte, 1);
+ 
+@@ -359,6 +366,9 @@ CgWriteAmlOpcode (
+              * Now we can write the remaining bytes -
+              * either 1, 2, or 3 bytes
+              */
++            Tmp32 = PkgLen.Len;
++            AcpiUtWriteUint (&PkgLen.Len, Op->Asl.AmlPkgLenBytes,
++                &Tmp32, sizeof (UINT32));
+             for (i = 0; i < (UINT32) (Op->Asl.AmlPkgLenBytes - 1); i++)
+             {
+                 CgLocalWriteAmlData (Op, &PkgLen.LenBytes[i], 1);
+@@ -370,22 +380,30 @@ CgWriteAmlOpcode (
+     {
+     case AML_BYTE_OP:
+ 
+-        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 1);
++        Tmp64 = 0;
++        AcpiUtWriteUint (&Tmp64, 1, &Op->Asl.Value.Integer, 8);
++        CgLocalWriteAmlData (Op, &Tmp64, 1);
+         break;
+ 
+     case AML_WORD_OP:
+ 
+-        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 2);
+-       break;
++        Tmp64 = 0;
++        AcpiUtWriteUint (&Tmp64, 2, &Op->Asl.Value.Integer, 8);
++        CgLocalWriteAmlData (Op, &Tmp64, 2);
++        break;
+ 
+     case AML_DWORD_OP:
+ 
+-        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 4);
++        Tmp64 = 0;
++        AcpiUtWriteUint (&Tmp64, 4, &Op->Asl.Value.Integer, 8);
++        CgLocalWriteAmlData (Op, &Tmp64, 4);
+         break;
+ 
+     case AML_QWORD_OP:
+ 
+-        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 8);
++        Tmp64 = 0;
++        AcpiUtWriteUint (&Tmp64, 8, &Op->Asl.Value.Integer, 8);
++        CgLocalWriteAmlData (Op, &Tmp64, 8);
+         break;
+ 
+     case AML_STRING_OP:
+@@ -423,6 +441,7 @@ CgWriteTableHeader (
+     ACPI_PARSE_OBJECT       *Child;
+     UINT32                  CommentLength;
+     ACPI_COMMENT_NODE       *Current;
++    UINT32                  Tmp32;
+ 
+ 
+     memset (&AslGbl_TableHeader, 0, sizeof (ACPI_TABLE_HEADER));
+@@ -478,7 +497,9 @@ CgWriteTableHeader (
+     /* OEM Revision */
+ 
+     Child = Child->Asl.Next;
+-    AslGbl_TableHeader.OemRevision = (UINT32) Child->Asl.Value.Integer;
++    AcpiUtWriteUint (&Tmp32, sizeof (UINT32),
++           &Child->Asl.Value.Integer, sizeof (Child->Asl.Value.Integer));
++    AslGbl_TableHeader.OemRevision = Tmp32;
+ 
+     /* Compiler ID */
+ 
+@@ -486,7 +507,8 @@ CgWriteTableHeader (
+ 
+     /* Compiler version */
+ 
+-    AslGbl_TableHeader.AslCompilerRevision = ACPI_CA_VERSION;
++    Tmp32 = ACPI_CA_VERSION;
++    AslGbl_TableHeader.AslCompilerRevision = AcpiUtReadUint32 (&Tmp32);
+ 
+     /* Table length. Checksum zero for now, will rewrite later */
+ 
+@@ -541,6 +563,15 @@ CgWriteTableHeader (
+     AslGbl_TableHeader.Checksum = 0;
+     Op->Asl.FinalAmlOffset = ftell (AslGbl_Files[ASL_FILE_AML_OUTPUT].Handle);
+ 
++    /*
++     * Adjust the Table length; it will only change when big-endian
++     * but we have to wait until here in case there is arithmetic to
++     * be done on the length before this step in the function
++     */
++
++    Tmp32 = AslGbl_TableHeader.Length;
++    AslGbl_TableHeader.Length = AcpiUtReadUint32 (&Tmp32);
++
+     /* Write entire header and clear the table header global */
+ 
+     CgLocalWriteAmlData (Op, &AslGbl_TableHeader, sizeof (ACPI_TABLE_HEADER));
+@@ -625,6 +656,7 @@ CgWriteNode (
+     ACPI_PARSE_OBJECT       *Op)
+ {
+     ASL_RESOURCE_NODE       *Rnode;
++    UINT64                  Tmp64;
+ 
+ 
+     /* Write all comments here. */
+@@ -653,7 +685,10 @@ CgWriteNode (
+     case AML_RAW_DATA_DWORD:
+     case AML_RAW_DATA_QWORD:
+ 
+-        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, Op->Asl.AmlLength);
++        Tmp64 = 0;
++        AcpiUtWriteUint (&Tmp64, Op->Asl.AmlLength,
++            &Op->Asl.Value.Integer, sizeof (UINT64));
++        CgLocalWriteAmlData (Op, &Tmp64, Op->Asl.AmlLength);
+         return;
+ 
+ 
+Index: acpica-unix2-20210604/source/compiler/aslopcodes.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/aslopcodes.c
++++ acpica-unix2-20210604/source/compiler/aslopcodes.c
+@@ -511,7 +511,8 @@ OpcDoUnicode (
+ 
+     for (i = 0; i < Count; i++)
+     {
+-        UnicodeString[i] = (UINT16) AsciiString[i];
++        AcpiUtWriteUint (&UnicodeString[i], sizeof (UINT16),
++                &AsciiString[i], sizeof (UINT8));
+     }
+ 
+     /*
+Index: acpica-unix2-20210604/source/compiler/aslrestype1.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/aslrestype1.c
++++ acpica-unix2-20210604/source/compiler/aslrestype1.c
+@@ -143,6 +143,7 @@ RsDoMemory24Descriptor (
+     ASL_RESOURCE_NODE       *Rnode;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
++    UINT16                  Tmp16;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -151,7 +152,8 @@ RsDoMemory24Descriptor (
+ 
+     Descriptor = Rnode->Buffer;
+     Descriptor->Memory24.DescriptorType = ACPI_RESOURCE_NAME_MEMORY24;
+-    Descriptor->Memory24.ResourceLength = 9;
++    Tmp16 = 9;
++    Descriptor->Memory24.ResourceLength = AcpiUtReadUint16 (&Tmp16);
+ 
+     /* Process all child initialization nodes */
+ 
+@@ -168,7 +170,8 @@ RsDoMemory24Descriptor (
+ 
+         case 1: /* Min Address */
+ 
+-            Descriptor->Memory24.Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->Memory24.Minimum = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Minimum));
+             MinOp = InitializerOp;
+@@ -176,7 +179,8 @@ RsDoMemory24Descriptor (
+ 
+         case 2: /* Max Address */
+ 
+-            Descriptor->Memory24.Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->Memory24.Maximum = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Maximum));
+             MaxOp = InitializerOp;
+@@ -184,14 +188,16 @@ RsDoMemory24Descriptor (
+ 
+         case 3: /* Alignment */
+ 
+-            Descriptor->Memory24.Alignment = (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->Memory24.Alignment = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_ALIGNMENT,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Alignment));
+             break;
+ 
+         case 4: /* Length */
+ 
+-            Descriptor->Memory24.AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->Memory24.AddressLength = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.AddressLength));
+             LengthOp = InitializerOp;
+@@ -214,10 +220,10 @@ RsDoMemory24Descriptor (
+     /* Validate the Min/Max/Len/Align values (Alignment==0 means 64K) */
+ 
+     RsSmallAddressCheck (ACPI_RESOURCE_NAME_MEMORY24,
+-        Descriptor->Memory24.Minimum,
+-        Descriptor->Memory24.Maximum,
+-        Descriptor->Memory24.AddressLength,
+-        Descriptor->Memory24.Alignment,
++        (UINT32) AcpiUtReadUint16 (&Descriptor->Memory24.Minimum),
++        (UINT32) AcpiUtReadUint16 (&Descriptor->Memory24.Maximum),
++        (UINT32) AcpiUtReadUint16 (&Descriptor->Memory24.AddressLength),
++        (UINT32) AcpiUtReadUint16 (&Descriptor->Memory24.Alignment),
+         MinOp, MaxOp, LengthOp, NULL, Info->DescriptorTypeOp);
+ 
+     return (Rnode);
+@@ -249,6 +255,8 @@ RsDoMemory32Descriptor (
+     ASL_RESOURCE_NODE       *Rnode;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
++    UINT16                  Tmp16;
++    UINT32                  Tmp32;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -257,7 +265,8 @@ RsDoMemory32Descriptor (
+ 
+     Descriptor = Rnode->Buffer;
+     Descriptor->Memory32.DescriptorType = ACPI_RESOURCE_NAME_MEMORY32;
+-    Descriptor->Memory32.ResourceLength = 17;
++    Tmp16 = 17;
++    Descriptor->Memory32.ResourceLength = AcpiUtReadUint16 (&Tmp16);
+ 
+     /* Process all child initialization nodes */
+ 
+@@ -274,7 +283,8 @@ RsDoMemory32Descriptor (
+ 
+         case 1:  /* Min Address */
+ 
+-            Descriptor->Memory32.Minimum = (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->Memory32.Minimum = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Minimum));
+             MinOp = InitializerOp;
+@@ -282,7 +292,8 @@ RsDoMemory32Descriptor (
+ 
+         case 2: /* Max Address */
+ 
+-            Descriptor->Memory32.Maximum = (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->Memory32.Maximum = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Maximum));
+             MaxOp = InitializerOp;
+@@ -290,7 +301,8 @@ RsDoMemory32Descriptor (
+ 
+         case 3: /* Alignment */
+ 
+-            Descriptor->Memory32.Alignment = (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->Memory32.Alignment = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_ALIGNMENT,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Alignment));
+             AlignOp = InitializerOp;
+@@ -298,7 +310,8 @@ RsDoMemory32Descriptor (
+ 
+         case 4: /* Length */
+ 
+-            Descriptor->Memory32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->Memory32.AddressLength = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.AddressLength));
+             LengthOp = InitializerOp;
+@@ -321,10 +334,10 @@ RsDoMemory32Descriptor (
+     /* Validate the Min/Max/Len/Align values */
+ 
+     RsSmallAddressCheck (ACPI_RESOURCE_NAME_MEMORY32,
+-        Descriptor->Memory32.Minimum,
+-        Descriptor->Memory32.Maximum,
+-        Descriptor->Memory32.AddressLength,
+-        Descriptor->Memory32.Alignment,
++        AcpiUtReadUint32 (&Descriptor->Memory32.Minimum),
++        AcpiUtReadUint32 (&Descriptor->Memory32.Maximum),
++        AcpiUtReadUint32 (&Descriptor->Memory32.AddressLength),
++        AcpiUtReadUint32 (&Descriptor->Memory32.Alignment),
+         MinOp, MaxOp, LengthOp, AlignOp, Info->DescriptorTypeOp);
+ 
+     return (Rnode);
+@@ -352,6 +365,8 @@ RsDoMemory32FixedDescriptor (
+     ASL_RESOURCE_NODE       *Rnode;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
++    UINT16                  Tmp16;
++    UINT32                  Tmp32;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -360,7 +375,8 @@ RsDoMemory32FixedDescriptor (
+ 
+     Descriptor = Rnode->Buffer;
+     Descriptor->FixedMemory32.DescriptorType = ACPI_RESOURCE_NAME_FIXED_MEMORY32;
+-    Descriptor->FixedMemory32.ResourceLength = 9;
++    Tmp16 = 9;
++    Descriptor->FixedMemory32.ResourceLength = AcpiUtReadUint16 (&Tmp16);
+ 
+     /* Process all child initialization nodes */
+ 
+@@ -377,14 +393,16 @@ RsDoMemory32FixedDescriptor (
+ 
+         case 1: /* Address */
+ 
+-            Descriptor->FixedMemory32.Address = (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->FixedMemory32.Address = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_BASEADDRESS,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.Address));
+             break;
+ 
+         case 2: /* Length */
+ 
+-            Descriptor->FixedMemory32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->FixedMemory32.AddressLength = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.AddressLength));
+             break;
+Index: acpica-unix2-20210604/source/compiler/aslrestype1i.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/aslrestype1i.c
++++ acpica-unix2-20210604/source/compiler/aslrestype1i.c
+@@ -199,6 +199,7 @@ RsDoFixedDmaDescriptor (
+     ASL_RESOURCE_NODE       *Rnode;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
++    UINT16                  Tmp16;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -217,14 +218,16 @@ RsDoFixedDmaDescriptor (
+         {
+         case 0: /* DMA Request Lines [WORD] (_DMA) */
+ 
+-            Descriptor->FixedDma.RequestLines = (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->FixedDma.RequestLines = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_DMA,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedDma.RequestLines));
+             break;
+ 
+         case 1: /* DMA Channel [WORD] (_TYP) */
+ 
+-            Descriptor->FixedDma.Channels = (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->FixedDma.Channels = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_DMATYPE,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedDma.Channels));
+             break;
+@@ -275,6 +278,7 @@ RsDoFixedIoDescriptor (
+     ASL_RESOURCE_NODE       *Rnode;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
++    UINT16                  Tmp16;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -293,8 +297,8 @@ RsDoFixedIoDescriptor (
+         {
+         case 0: /* Base Address */
+ 
+-            Descriptor->FixedIo.Address =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->FixedIo.Address = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_BASEADDRESS,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedIo.Address));
+             AddressOp = InitializerOp;
+@@ -324,7 +328,7 @@ RsDoFixedIoDescriptor (
+ 
+     /* Error checks */
+ 
+-    if (Descriptor->FixedIo.Address > 0x03FF)
++    if (AcpiUtReadUint16 (&Descriptor->FixedIo.Address) > 0x03FF)
+     {
+         AslError (ASL_WARNING, ASL_MSG_ISA_ADDRESS, AddressOp, NULL);
+     }
+@@ -358,6 +362,7 @@ RsDoIoDescriptor (
+     ASL_RESOURCE_NODE       *Rnode;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
++    UINT16                  Tmp16;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -383,8 +388,8 @@ RsDoIoDescriptor (
+ 
+         case 1:  /* Min Address */
+ 
+-            Descriptor->Io.Minimum =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->Io.Minimum = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Io.Minimum));
+             MinOp = InitializerOp;
+@@ -392,8 +397,8 @@ RsDoIoDescriptor (
+ 
+         case 2: /* Max Address */
+ 
+-            Descriptor->Io.Maximum =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->Io.Maximum = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Io.Maximum));
+             MaxOp = InitializerOp;
+@@ -434,10 +439,10 @@ RsDoIoDescriptor (
+     /* Validate the Min/Max/Len/Align values */
+ 
+     RsSmallAddressCheck (ACPI_RESOURCE_NAME_IO,
+-        Descriptor->Io.Minimum,
+-        Descriptor->Io.Maximum,
+-        Descriptor->Io.AddressLength,
+-        Descriptor->Io.Alignment,
++        (UINT32) (AcpiUtReadUint16 (&Descriptor->Io.Minimum)),
++        (UINT32) (AcpiUtReadUint16 (&Descriptor->Io.Maximum)),
++        (UINT32) Descriptor->Io.AddressLength,
++        (UINT32) Descriptor->Io.Alignment,
+         MinOp, MaxOp, LengthOp, AlignOp, Info->DescriptorTypeOp);
+ 
+     return (Rnode);
+@@ -561,7 +566,7 @@ RsDoIrqDescriptor (
+ 
+     /* Now we can set the channel mask */
+ 
+-    Descriptor->Irq.IrqMask = IrqMask;
++    Descriptor->Irq.IrqMask = AcpiUtReadUint16 (&IrqMask);
+     return (Rnode);
+ }
+ 
+@@ -660,6 +665,6 @@ RsDoIrqNoFlagsDescriptor (
+ 
+     /* Now we can set the interrupt mask */
+ 
+-    Descriptor->Irq.IrqMask = IrqMask;
++    Descriptor->Irq.IrqMask = AcpiUtReadUint16(&IrqMask);
+     return (Rnode);
+ }
+Index: acpica-unix2-20210604/source/compiler/aslrestype2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/aslrestype2.c
++++ acpica-unix2-20210604/source/compiler/aslrestype2.c
+@@ -77,6 +77,8 @@ RsDoGeneralRegisterDescriptor (
+     ASL_RESOURCE_NODE       *Rnode;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
++    UINT16                  Tmp16;
++    UINT64                  Tmp64;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -85,7 +87,8 @@ RsDoGeneralRegisterDescriptor (
+ 
+     Descriptor = Rnode->Buffer;
+     Descriptor->GenericReg.DescriptorType = ACPI_RESOURCE_NAME_GENERIC_REGISTER;
+-    Descriptor->GenericReg.ResourceLength = 12;
++    Tmp16 = 12;
++    Descriptor->GenericReg.ResourceLength = AcpiUtReadUint16 (&Tmp16);
+ 
+     /* Process all child initialization nodes */
+ 
+@@ -116,7 +119,8 @@ RsDoGeneralRegisterDescriptor (
+ 
+         case 3: /* Register Address */
+ 
+-            Descriptor->GenericReg.Address = InitializerOp->Asl.Value.Integer;
++            Tmp64 = InitializerOp->Asl.Value.Integer;
++            Descriptor->GenericReg.Address = AcpiUtReadUint64 (&Tmp64);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_ADDRESS,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.Address));
+             break;
+@@ -184,6 +188,8 @@ RsDoInterruptDescriptor (
+     BOOLEAN                 HasResSourceIndex = FALSE;
+     UINT8                   ResSourceIndex = 0;
+     UINT8                   *ResSourceString = NULL;
++    UINT16                  Tmp16;
++    UINT32                  Tmp32;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -225,7 +231,7 @@ RsDoInterruptDescriptor (
+      * Initial descriptor length -- may be enlarged if there are
+      * optional fields present
+      */
+-    Descriptor->ExtendedIrq.ResourceLength  = 2;  /* Flags and table length byte */
++    Descriptor->ExtendedIrq.ResourceLength  = 2; /* Flags and table length byte */
+     Descriptor->ExtendedIrq.InterruptCount  = 0;
+ 
+     Rover = ACPI_CAST_PTR (AML_RESOURCE,
+@@ -333,7 +339,8 @@ RsDoInterruptDescriptor (
+ 
+             /* Save the integer and move pointer to the next one */
+ 
+-            Rover->DwordItem = (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Rover->DwordItem = AcpiUtReadUint32 (&Tmp32);
+             Rover = ACPI_ADD_PTR (AML_RESOURCE, &(Rover->DwordItem), 4);
+             Descriptor->ExtendedIrq.InterruptCount++;
+             Descriptor->ExtendedIrq.ResourceLength += 4;
+@@ -384,6 +391,8 @@ RsDoInterruptDescriptor (
+         Descriptor->ExtendedIrq.ResourceLength = (UINT16)
+             (Descriptor->ExtendedIrq.ResourceLength + StringLength);
+     }
++    Tmp16 = Descriptor->ExtendedIrq.ResourceLength;
++    Descriptor->ExtendedIrq.ResourceLength  = AcpiUtReadUint16 (&Tmp16);
+ 
+     Rnode->BufferLength =
+         (ASL_RESDESC_OFFSET (ExtendedIrq.Interrupts[0]) -
+@@ -436,7 +445,8 @@ RsDoVendorLargeDescriptor (
+ 
+     Descriptor = Rnode->Buffer;
+     Descriptor->VendorLarge.DescriptorType = ACPI_RESOURCE_NAME_VENDOR_LARGE;
+-    Descriptor->VendorLarge.ResourceLength = (UINT16) i;
++    AcpiUtWriteUint (&Descriptor->VendorLarge.ResourceLength, sizeof (UINT16),
++            &i, sizeof (UINT32));
+ 
+     /* Point to end-of-descriptor for vendor data */
+ 
+Index: acpica-unix2-20210604/source/compiler/aslrestype2d.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/aslrestype2d.c
++++ acpica-unix2-20210604/source/compiler/aslrestype2d.c
+@@ -84,6 +84,8 @@ RsDoDwordIoDescriptor (
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
+     BOOLEAN                 ResSourceIndex = FALSE;
++    UINT16                  Tmp16;
++    UINT32                  Tmp32;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -147,8 +149,8 @@ RsDoDwordIoDescriptor (
+ 
+         case 5: /* Address Granularity */
+ 
+-            Descriptor->Address32.Granularity =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address32.Granularity = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
+             GranOp = InitializerOp;
+@@ -156,8 +158,8 @@ RsDoDwordIoDescriptor (
+ 
+         case 6: /* Address Min */
+ 
+-            Descriptor->Address32.Minimum =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address32.Minimum = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
+             MinOp = InitializerOp;
+@@ -165,8 +167,8 @@ RsDoDwordIoDescriptor (
+ 
+         case 7: /* Address Max */
+ 
+-            Descriptor->Address32.Maximum =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address32.Maximum = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
+             MaxOp = InitializerOp;
+@@ -174,16 +176,16 @@ RsDoDwordIoDescriptor (
+ 
+         case 8: /* Translation Offset */
+ 
+-            Descriptor->Address32.TranslationOffset =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address32.TranslationOffset = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
+             break;
+ 
+         case 9: /* Address Length */
+ 
+-            Descriptor->Address32.AddressLength =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address32.AddressLength = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
+             LengthOp = InitializerOp;
+@@ -271,11 +273,14 @@ RsDoDwordIoDescriptor (
+ 
+     /* Validate the Min/Max/Len/Gran values */
+ 
++    Tmp16 = Descriptor->Address32.ResourceLength;
++    Descriptor->Address32.ResourceLength = AcpiUtReadUint16 (&Tmp16);
++
+     RsLargeAddressCheck (
+-        (UINT64) Descriptor->Address32.Minimum,
+-        (UINT64) Descriptor->Address32.Maximum,
+-        (UINT64) Descriptor->Address32.AddressLength,
+-        (UINT64) Descriptor->Address32.Granularity,
++        (UINT64) AcpiUtReadUint32 (&Descriptor->Address32.Minimum),
++        (UINT64) AcpiUtReadUint32 (&Descriptor->Address32.Maximum),
++        (UINT64) AcpiUtReadUint32 (&Descriptor->Address32.AddressLength),
++        (UINT64) AcpiUtReadUint32 (&Descriptor->Address32.Granularity),
+         Descriptor->Address32.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
+ 
+@@ -314,6 +319,8 @@ RsDoDwordMemoryDescriptor (
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
+     BOOLEAN                 ResSourceIndex = FALSE;
++    UINT16                  Tmp16;
++    UINT32                  Tmp32;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -385,8 +392,8 @@ RsDoDwordMemoryDescriptor (
+ 
+         case 6: /* Address Granularity */
+ 
+-            Descriptor->Address32.Granularity =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address32.Granularity = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
+             GranOp = InitializerOp;
+@@ -394,8 +401,8 @@ RsDoDwordMemoryDescriptor (
+ 
+         case 7: /* Min Address */
+ 
+-            Descriptor->Address32.Minimum =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address32.Minimum = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
+             MinOp = InitializerOp;
+@@ -403,8 +410,8 @@ RsDoDwordMemoryDescriptor (
+ 
+         case 8: /* Max Address */
+ 
+-            Descriptor->Address32.Maximum =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address32.Maximum = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
+             MaxOp = InitializerOp;
+@@ -412,16 +419,16 @@ RsDoDwordMemoryDescriptor (
+ 
+         case 9: /* Translation Offset */
+ 
+-            Descriptor->Address32.TranslationOffset =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address32.TranslationOffset = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
+             break;
+ 
+         case 10: /* Address Length */
+ 
+-            Descriptor->Address32.AddressLength =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address32.AddressLength = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
+             LengthOp = InitializerOp;
+@@ -506,11 +513,14 @@ RsDoDwordMemoryDescriptor (
+ 
+     /* Validate the Min/Max/Len/Gran values */
+ 
++    Tmp16 = Descriptor->Address32.ResourceLength;
++    Descriptor->Address32.ResourceLength = AcpiUtReadUint16 (&Tmp16);
++
+     RsLargeAddressCheck (
+-        (UINT64) Descriptor->Address32.Minimum,
+-        (UINT64) Descriptor->Address32.Maximum,
+-        (UINT64) Descriptor->Address32.AddressLength,
+-        (UINT64) Descriptor->Address32.Granularity,
++        (UINT64) AcpiUtReadUint32 (&Descriptor->Address32.Minimum),
++        (UINT64) AcpiUtReadUint32 (&Descriptor->Address32.Maximum),
++        (UINT64) AcpiUtReadUint32 (&Descriptor->Address32.AddressLength),
++        (UINT64) AcpiUtReadUint32 (&Descriptor->Address32.Granularity),
+         Descriptor->Address32.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
+ 
+@@ -549,6 +559,8 @@ RsDoDwordSpaceDescriptor (
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
+     BOOLEAN                 ResSourceIndex = FALSE;
++    UINT16                  Tmp16;
++    UINT32                  Tmp32;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -616,8 +628,8 @@ RsDoDwordSpaceDescriptor (
+ 
+         case 6: /* Address Granularity */
+ 
+-            Descriptor->Address32.Granularity =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address32.Granularity = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
+             GranOp = InitializerOp;
+@@ -625,8 +637,8 @@ RsDoDwordSpaceDescriptor (
+ 
+         case 7: /* Min Address */
+ 
+-            Descriptor->Address32.Minimum =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address32.Minimum = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
+             MinOp = InitializerOp;
+@@ -634,8 +646,8 @@ RsDoDwordSpaceDescriptor (
+ 
+         case 8: /* Max Address */
+ 
+-            Descriptor->Address32.Maximum =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address32.Maximum = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
+             MaxOp = InitializerOp;
+@@ -643,16 +655,16 @@ RsDoDwordSpaceDescriptor (
+ 
+         case 9: /* Translation Offset */
+ 
+-            Descriptor->Address32.TranslationOffset =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address32.TranslationOffset = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
+             break;
+ 
+         case 10: /* Address Length */
+ 
+-            Descriptor->Address32.AddressLength =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address32.AddressLength = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
+             LengthOp = InitializerOp;
+@@ -723,11 +735,14 @@ RsDoDwordSpaceDescriptor (
+ 
+     /* Validate the Min/Max/Len/Gran values */
+ 
++    Tmp16 = Descriptor->Address32.ResourceLength;
++    Descriptor->Address32.ResourceLength = AcpiUtReadUint16 (&Tmp16);
++
+     RsLargeAddressCheck (
+-        (UINT64) Descriptor->Address32.Minimum,
+-        (UINT64) Descriptor->Address32.Maximum,
+-        (UINT64) Descriptor->Address32.AddressLength,
+-        (UINT64) Descriptor->Address32.Granularity,
++        (UINT64) AcpiUtReadUint32 (&Descriptor->Address32.Minimum),
++        (UINT64) AcpiUtReadUint32 (&Descriptor->Address32.Maximum),
++        (UINT64) AcpiUtReadUint32 (&Descriptor->Address32.AddressLength),
++        (UINT64) AcpiUtReadUint32 (&Descriptor->Address32.Granularity),
+         Descriptor->Address32.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
+ 
+Index: acpica-unix2-20210604/source/compiler/aslrestype2q.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/aslrestype2q.c
++++ acpica-unix2-20210604/source/compiler/aslrestype2q.c
+@@ -84,6 +84,7 @@ RsDoQwordIoDescriptor (
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
+     BOOLEAN                 ResSourceIndex = FALSE;
++    UINT16                  Tmp16;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -147,7 +148,8 @@ RsDoQwordIoDescriptor (
+ 
+         case 5: /* Address Granularity */
+ 
+-            Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
++            Descriptor->Address64.Granularity =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
+             GranOp = InitializerOp;
+@@ -155,7 +157,8 @@ RsDoQwordIoDescriptor (
+ 
+         case 6: /* Address Min */
+ 
+-            Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
++            Descriptor->Address64.Minimum =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
+             MinOp = InitializerOp;
+@@ -163,7 +166,8 @@ RsDoQwordIoDescriptor (
+ 
+         case 7: /* Address Max */
+ 
+-            Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
++            Descriptor->Address64.Maximum =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
+             MaxOp = InitializerOp;
+@@ -171,14 +175,16 @@ RsDoQwordIoDescriptor (
+ 
+         case 8: /* Translation Offset */
+ 
+-            Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;
++            Descriptor->Address64.TranslationOffset =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset));
+             break;
+ 
+         case 9: /* Address Length */
+ 
+-            Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer;
++            Descriptor->Address64.AddressLength =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
+             LengthOp = InitializerOp;
+@@ -262,11 +268,14 @@ RsDoQwordIoDescriptor (
+ 
+     /* Validate the Min/Max/Len/Gran values */
+ 
++    Tmp16 = Descriptor->Address64.ResourceLength;
++    Descriptor->Address64.ResourceLength = AcpiUtReadUint16 (&Tmp16);
++
+     RsLargeAddressCheck (
+-        Descriptor->Address64.Minimum,
+-        Descriptor->Address64.Maximum,
+-        Descriptor->Address64.AddressLength,
+-        Descriptor->Address64.Granularity,
++        AcpiUtReadUint64 (&Descriptor->Address64.Minimum),
++        AcpiUtReadUint64 (&Descriptor->Address64.Maximum),
++        AcpiUtReadUint64 (&Descriptor->Address64.AddressLength),
++        AcpiUtReadUint64 (&Descriptor->Address64.Granularity),
+         Descriptor->Address64.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
+ 
+@@ -305,6 +314,7 @@ RsDoQwordMemoryDescriptor (
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
+     BOOLEAN                 ResSourceIndex = FALSE;
++    UINT16                  Tmp16;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -375,7 +385,8 @@ RsDoQwordMemoryDescriptor (
+ 
+         case 6: /* Address Granularity */
+ 
+-            Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
++            Descriptor->Address64.Granularity =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
+             GranOp = InitializerOp;
+@@ -383,7 +394,8 @@ RsDoQwordMemoryDescriptor (
+ 
+         case 7: /* Min Address */
+ 
+-            Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
++            Descriptor->Address64.Minimum =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
+             MinOp = InitializerOp;
+@@ -391,7 +403,8 @@ RsDoQwordMemoryDescriptor (
+ 
+         case 8: /* Max Address */
+ 
+-            Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
++            Descriptor->Address64.Maximum =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
+             MaxOp = InitializerOp;
+@@ -399,14 +412,16 @@ RsDoQwordMemoryDescriptor (
+ 
+         case 9: /* Translation Offset */
+ 
+-            Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;
++            Descriptor->Address64.TranslationOffset =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset));
+             break;
+ 
+         case 10: /* Address Length */
+ 
+-            Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer;
++            Descriptor->Address64.AddressLength =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
+             LengthOp = InitializerOp;
+@@ -491,11 +506,14 @@ RsDoQwordMemoryDescriptor (
+ 
+     /* Validate the Min/Max/Len/Gran values */
+ 
++    Tmp16 = Descriptor->Address64.ResourceLength;
++    Descriptor->Address64.ResourceLength = AcpiUtReadUint16 (&Tmp16);
++
+     RsLargeAddressCheck (
+-        Descriptor->Address64.Minimum,
+-        Descriptor->Address64.Maximum,
+-        Descriptor->Address64.AddressLength,
+-        Descriptor->Address64.Granularity,
++        AcpiUtReadUint64 (&Descriptor->Address64.Minimum),
++        AcpiUtReadUint64 (&Descriptor->Address64.Maximum),
++        AcpiUtReadUint64 (&Descriptor->Address64.AddressLength),
++        AcpiUtReadUint64 (&Descriptor->Address64.Granularity),
+         Descriptor->Address64.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
+ 
+@@ -534,6 +552,7 @@ RsDoQwordSpaceDescriptor (
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
+     BOOLEAN                 ResSourceIndex = FALSE;
++    UINT16                  Tmp16;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -601,7 +620,8 @@ RsDoQwordSpaceDescriptor (
+ 
+         case 6: /* Address Granularity */
+ 
+-            Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
++            Descriptor->Address64.Granularity =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
+             GranOp = InitializerOp;
+@@ -609,7 +629,8 @@ RsDoQwordSpaceDescriptor (
+ 
+         case 7: /* Min Address */
+ 
+-            Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
++            Descriptor->Address64.Minimum =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
+             MinOp = InitializerOp;
+@@ -617,7 +638,8 @@ RsDoQwordSpaceDescriptor (
+ 
+         case 8: /* Max Address */
+ 
+-            Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
++            Descriptor->Address64.Maximum =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
+             MaxOp = InitializerOp;
+@@ -625,14 +647,16 @@ RsDoQwordSpaceDescriptor (
+ 
+         case 9: /* Translation Offset */
+ 
+-            Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;
++            Descriptor->Address64.TranslationOffset =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset));
+             break;
+ 
+         case 10: /* Address Length */
+ 
+-            Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer;
++            Descriptor->Address64.AddressLength =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
+             LengthOp = InitializerOp;
+@@ -702,11 +726,14 @@ RsDoQwordSpaceDescriptor (
+ 
+     /* Validate the Min/Max/Len/Gran values */
+ 
++    Tmp16 = Descriptor->Address64.ResourceLength;
++    Descriptor->Address64.ResourceLength = AcpiUtReadUint16 (&Tmp16);
++
+     RsLargeAddressCheck (
+-        Descriptor->Address64.Minimum,
+-        Descriptor->Address64.Maximum,
+-        Descriptor->Address64.AddressLength,
+-        Descriptor->Address64.Granularity,
++        AcpiUtReadUint64 (&Descriptor->Address64.Minimum),
++        AcpiUtReadUint64 (&Descriptor->Address64.Maximum),
++        AcpiUtReadUint64 (&Descriptor->Address64.AddressLength),
++        AcpiUtReadUint64 (&Descriptor->Address64.Granularity),
+         Descriptor->Address64.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
+ 
+Index: acpica-unix2-20210604/source/compiler/aslrestype2w.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/aslrestype2w.c
++++ acpica-unix2-20210604/source/compiler/aslrestype2w.c
+@@ -84,6 +84,7 @@ RsDoWordIoDescriptor (
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
+     BOOLEAN                 ResSourceIndex = FALSE;
++    UINT16                  Tmp16;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -147,7 +148,8 @@ RsDoWordIoDescriptor (
+ 
+         case 5: /* Address Granularity */
+ 
+-            Descriptor->Address16.Granularity = (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address16.Granularity = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity));
+             GranOp = InitializerOp;
+@@ -155,7 +157,8 @@ RsDoWordIoDescriptor (
+ 
+         case 6: /* Address Min */
+ 
+-            Descriptor->Address16.Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address16.Minimum = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum));
+             MinOp = InitializerOp;
+@@ -163,7 +166,8 @@ RsDoWordIoDescriptor (
+ 
+         case 7: /* Address Max */
+ 
+-            Descriptor->Address16.Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address16.Maximum = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum));
+             MaxOp = InitializerOp;
+@@ -171,14 +175,16 @@ RsDoWordIoDescriptor (
+ 
+         case 8: /* Translation Offset */
+ 
+-            Descriptor->Address16.TranslationOffset = (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address16.TranslationOffset = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset));
+             break;
+ 
+         case 9: /* Address Length */
+ 
+-            Descriptor->Address16.AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address16.AddressLength = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                  CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength));
+             LengthOp = InitializerOp;
+@@ -263,13 +269,17 @@ RsDoWordIoDescriptor (
+     /* Validate the Min/Max/Len/Gran values */
+ 
+     RsLargeAddressCheck (
+-        (UINT64) Descriptor->Address16.Minimum,
+-        (UINT64) Descriptor->Address16.Maximum,
+-        (UINT64) Descriptor->Address16.AddressLength,
+-        (UINT64) Descriptor->Address16.Granularity,
++        (UINT64) AcpiUtReadUint16 (&Descriptor->Address16.Minimum),
++        (UINT64) AcpiUtReadUint16 (&Descriptor->Address16.Maximum),
++        (UINT64) AcpiUtReadUint16 (&Descriptor->Address16.AddressLength),
++        (UINT64) AcpiUtReadUint16 (&Descriptor->Address16.Granularity),
+         Descriptor->Address16.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
+ 
++    /* correct enddianness */
++    Tmp16 = Descriptor->Address16.ResourceLength;
++    Descriptor->Address16.ResourceLength = AcpiUtReadUint16 (&Tmp16);
++
+     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) +
+         OptionIndex + StringLength;
+     return (Rnode);
+@@ -305,6 +315,7 @@ RsDoWordBusNumberDescriptor (
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
+     BOOLEAN                 ResSourceIndex = FALSE;
++    UINT16                  Tmp16;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -361,8 +372,8 @@ RsDoWordBusNumberDescriptor (
+ 
+         case 4: /* Address Granularity */
+ 
+-            Descriptor->Address16.Granularity =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address16.Granularity = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity));
+             GranOp = InitializerOp;
+@@ -370,8 +381,8 @@ RsDoWordBusNumberDescriptor (
+ 
+         case 5: /* Min Address */
+ 
+-            Descriptor->Address16.Minimum =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address16.Minimum = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum));
+             MinOp = InitializerOp;
+@@ -379,8 +390,8 @@ RsDoWordBusNumberDescriptor (
+ 
+         case 6: /* Max Address */
+ 
+-            Descriptor->Address16.Maximum =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address16.Maximum = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum));
+             MaxOp = InitializerOp;
+@@ -388,16 +399,16 @@ RsDoWordBusNumberDescriptor (
+ 
+         case 7: /* Translation Offset */
+ 
+-            Descriptor->Address16.TranslationOffset =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address16.TranslationOffset = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset));
+             break;
+ 
+         case 8: /* Address Length */
+ 
+-            Descriptor->Address16.AddressLength =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address16.AddressLength = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                  CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength));
+             LengthOp = InitializerOp;
+@@ -468,13 +479,17 @@ RsDoWordBusNumberDescriptor (
+     /* Validate the Min/Max/Len/Gran values */
+ 
+     RsLargeAddressCheck (
+-        (UINT64) Descriptor->Address16.Minimum,
+-        (UINT64) Descriptor->Address16.Maximum,
+-        (UINT64) Descriptor->Address16.AddressLength,
+-        (UINT64) Descriptor->Address16.Granularity,
++        (UINT64) AcpiUtReadUint16 (&Descriptor->Address16.Minimum),
++        (UINT64) AcpiUtReadUint16 (&Descriptor->Address16.Maximum),
++        (UINT64) AcpiUtReadUint16 (&Descriptor->Address16.AddressLength),
++        (UINT64) AcpiUtReadUint16 (&Descriptor->Address16.Granularity),
+         Descriptor->Address16.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
+ 
++    /* correct enddianness */
++    Tmp16 = Descriptor->Address16.ResourceLength;
++    Descriptor->Address16.ResourceLength = AcpiUtReadUint16 (&Tmp16);
++
+     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) +
+         OptionIndex + StringLength;
+     return (Rnode);
+@@ -510,6 +525,7 @@ RsDoWordSpaceDescriptor (
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
+     BOOLEAN                 ResSourceIndex = FALSE;
++    UINT16                  Tmp16;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -577,8 +593,8 @@ RsDoWordSpaceDescriptor (
+ 
+         case 6: /* Address Granularity */
+ 
+-            Descriptor->Address16.Granularity =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address16.Granularity = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity));
+             GranOp = InitializerOp;
+@@ -586,8 +602,8 @@ RsDoWordSpaceDescriptor (
+ 
+         case 7: /* Min Address */
+ 
+-            Descriptor->Address16.Minimum =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address16.Minimum = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum));
+             MinOp = InitializerOp;
+@@ -595,8 +611,8 @@ RsDoWordSpaceDescriptor (
+ 
+         case 8: /* Max Address */
+ 
+-            Descriptor->Address16.Maximum =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address16.Maximum = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum));
+             MaxOp = InitializerOp;
+@@ -604,16 +620,16 @@ RsDoWordSpaceDescriptor (
+ 
+         case 9: /* Translation Offset */
+ 
+-            Descriptor->Address16.TranslationOffset =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address16.TranslationOffset = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset));
+             break;
+ 
+         case 10: /* Address Length */
+ 
+-            Descriptor->Address16.AddressLength =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->Address16.AddressLength = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength));
+             LengthOp = InitializerOp;
+@@ -684,13 +700,17 @@ RsDoWordSpaceDescriptor (
+     /* Validate the Min/Max/Len/Gran values */
+ 
+     RsLargeAddressCheck (
+-        (UINT64) Descriptor->Address16.Minimum,
+-        (UINT64) Descriptor->Address16.Maximum,
+-        (UINT64) Descriptor->Address16.AddressLength,
+-        (UINT64) Descriptor->Address16.Granularity,
++        (UINT64) AcpiUtReadUint16 (&Descriptor->Address16.Minimum),
++        (UINT64) AcpiUtReadUint16 (&Descriptor->Address16.Maximum),
++        (UINT64) AcpiUtReadUint16 (&Descriptor->Address16.AddressLength),
++        (UINT64) AcpiUtReadUint16 (&Descriptor->Address16.Granularity),
+         Descriptor->Address16.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
+ 
++    /* correct enddianness */
++    Tmp16 = Descriptor->Address16.ResourceLength;
++    Descriptor->Address16.ResourceLength = AcpiUtReadUint16 (&Tmp16);
++
+     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) +
+         OptionIndex + StringLength;
+     return (Rnode);
+Index: acpica-unix2-20210604/source/compiler/dttable2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dttable2.c
++++ acpica-unix2-20210604/source/compiler/dttable2.c
+@@ -2635,7 +2635,8 @@ DtCompileWpbt (
+ 
+     /* Extract the length of the Arguments buffer, insert into main table */
+ 
+-    Length = (UINT16) Subtable->TotalLength;
++    AcpiUtWriteUint (&Length, sizeof (UINT16),
++           &Subtable->TotalLength, sizeof (UINT32));
+     Table = ACPI_CAST_PTR (ACPI_TABLE_WPBT, ParentTable->Buffer);
+     Table->ArgumentsLength = Length;
+ 
+Index: acpica-unix2-20210604/source/components/disassembler/dmbuffer.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/components/disassembler/dmbuffer.c
++++ acpica-unix2-20210604/source/components/disassembler/dmbuffer.c
+@@ -204,7 +204,7 @@ AcpiDmByteList (
+ 
+ 
+     ByteData = Op->Named.Data;
+-    ByteCount = (UINT32) Op->Common.Value.Integer;
++    ByteCount = (UINT32) Op->Common.Value.Size;
+ 
+     /*
+      * The byte list belongs to a buffer, and can be produced by either
+@@ -308,7 +308,7 @@ AcpiDmIsUuidBuffer (
+     /* Extract the byte list info */
+ 
+     ByteData = NextOp->Named.Data;
+-    ByteCount = (UINT32) NextOp->Common.Value.Integer;
++    ByteCount = (UINT32) NextOp->Common.Value.Size;
+ 
+     /* Byte count must be exactly 16 */
+ 
+@@ -436,7 +436,7 @@ AcpiDmIsUnicodeBuffer (
+     /* Extract the byte list info */
+ 
+     ByteData = NextOp->Named.Data;
+-    ByteCount = (UINT32) NextOp->Common.Value.Integer;
++    ByteCount = (UINT32) NextOp->Common.Value.Size;
+     WordCount = ACPI_DIV_2 (ByteCount);
+ 
+     /*
+@@ -878,14 +878,14 @@ AcpiDmUnicode (
+     /* Extract the buffer info as a WORD buffer */
+ 
+     WordData = ACPI_CAST_PTR (UINT16, Op->Named.Data);
+-    WordCount = ACPI_DIV_2 (((UINT32) Op->Common.Value.Integer));
++    WordCount = ACPI_DIV_2 (((UINT32) Op->Common.Value.Size));
+ 
+     /* Write every other byte as an ASCII character */
+ 
+     AcpiOsPrintf ("\"");
+     for (i = 0; i < (WordCount - 1); i++)
+     {
+-        OutputValue = (int) WordData[i];
++        OutputValue = (int) AcpiUtReadUint16 (&WordData[i]);
+ 
+         /* Handle values that must be escaped */
+ 
+@@ -947,7 +947,29 @@ AcpiDmGetHardwareIdType (
+ 
+         /* Swap from little-endian to big-endian to simplify conversion */
+ 
+-        BigEndianId = AcpiUtDwordByteSwap ((UINT32) Op->Common.Value.Integer);
++        BigEndianId = (UINT32) Op->Common.Value.Integer;
++        if (UtIsBigEndianMachine())
++        {
++            /*
++             * We'll need to store the bytes in little-endian order
++             * so they can be re-used properly later since everything is
++             * assumed to be in little-endian form.
++             */
++
++	     UINT32 *Ptr = (UINT32 *)(&Op->Common.Value.Integer);
++	     *Ptr = AcpiUtDwordByteSwap (BigEndianId);
++        }
++        else
++        {
++            /*
++             * We'll need to just use the bytes in big-endian order;
++             * they're already in little-endian order.
++             */
++
++            UINT32 Tmp32 = BigEndianId;
++
++            BigEndianId = AcpiUtDwordByteSwap ((UINT32) Tmp32);
++        }
+ 
+         /* Create the 3 leading ASCII letters */
+ 
+@@ -1073,11 +1095,12 @@ AcpiDmDecompressEisaId (
+ {
+     char                    IdBuffer[ACPI_EISAID_STRING_SIZE];
+     const AH_DEVICE_ID      *Info;
++    UINT32                  Tmp32 = EncodedId;
+ 
+ 
+     /* Convert EISAID to a string an emit the statement */
+ 
+-    AcpiExEisaIdToString (IdBuffer, EncodedId);
++    AcpiExEisaIdToString (IdBuffer, AcpiUtReadUint32 (&Tmp32));
+     AcpiOsPrintf ("EisaId (\"%s\")", IdBuffer);
+ 
+     /* If we know about the ID, emit the description */
+Index: acpica-unix2-20210604/source/components/disassembler/dmopcode.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/components/disassembler/dmopcode.c
++++ acpica-unix2-20210604/source/components/disassembler/dmopcode.c
+@@ -778,7 +778,9 @@ AcpiDmDisassembleOneOp (
+         }
+         else
+         {
+-            AcpiOsPrintf ("0x%4.4X", (UINT32) Op->Common.Value.Integer);
++            UINT16 Tmp16 = (UINT16) Op->Common.Value.Integer;
++
++            AcpiOsPrintf ("0x%4.4X", (UINT32) AcpiUtReadUint16 (&Tmp16));
+         }
+         break;
+ 
+@@ -790,14 +792,19 @@ AcpiDmDisassembleOneOp (
+         }
+         else
+         {
+-            AcpiOsPrintf ("0x%8.8X", (UINT32) Op->Common.Value.Integer);
++            UINT32 Tmp32 = (UINT32) Op->Common.Value.Integer;
++
++            AcpiOsPrintf ("0x%8.8X", (UINT32) AcpiUtReadUint32 (&Tmp32));
+         }
+         break;
+ 
+     case AML_QWORD_OP:
+ 
+-        AcpiOsPrintf ("0x%8.8X%8.8X",
+-            ACPI_FORMAT_UINT64 (Op->Common.Value.Integer));
++        {
++	    UINT64 Tmp64 = AcpiUtReadUint64 (&Op->Common.Value.Integer);
++
++            AcpiOsPrintf ("0x%8.8X%8.8X", ACPI_FORMAT_UINT64 (Tmp64));
++        }
+         break;
+ 
+     case AML_STRING_OP:
+@@ -887,18 +894,18 @@ AcpiDmDisassembleOneOp (
+         AcpiOsPrintf (",");
+         ASL_CV_PRINT_ONE_COMMENT (Op, AML_NAMECOMMENT, NULL, 0);
+         AcpiOsPrintf ("%*.s  %u", (unsigned) (5 - Length), " ",
+-            (UINT32) Op->Common.Value.Integer);
++            (UINT32) Op->Common.Value.Size);
+ 
+         AcpiDmCommaIfFieldMember (Op);
+ 
+-        Info->BitOffset += (UINT32) Op->Common.Value.Integer;
++        Info->BitOffset += (UINT32) Op->Common.Value.Size;
+         break;
+ 
+     case AML_INT_RESERVEDFIELD_OP:
+ 
+         /* Offset() -- Must account for previous offsets */
+ 
+-        Offset = (UINT32) Op->Common.Value.Integer;
++        Offset = (UINT32) Op->Common.Value.Size;
+         Info->BitOffset += Offset;
+ 
+         if (Info->BitOffset % 8 == 0)
+Index: acpica-unix2-20210604/source/components/disassembler/dmresrc.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/components/disassembler/dmresrc.c
++++ acpica-unix2-20210604/source/components/disassembler/dmresrc.c
+@@ -417,7 +417,7 @@ AcpiDmIsResourceTemplate (
+         return (AE_TYPE);
+     }
+ 
+-    DeclaredBufferLength = NextOp->Common.Value.Size;
++    DeclaredBufferLength = NextOp->Common.Value.Integer;
+ 
+     /* Get the length of the raw initialization byte list */
+ 
+Index: acpica-unix2-20210604/source/components/disassembler/dmresrcl.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/components/disassembler/dmresrcl.c
++++ acpica-unix2-20210604/source/components/disassembler/dmresrcl.c
+@@ -141,6 +141,8 @@ AcpiDmMemoryFields (
+     UINT32                  Level)
+ {
+     UINT32                  i;
++    UINT16                  Tmp16;
++    UINT32                  Tmp32;
+ 
+ 
+     for (i = 0; i < 4; i++)
+@@ -151,14 +153,16 @@ AcpiDmMemoryFields (
+         {
+         case 16:
+ 
+-            AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i],
+-                AcpiDmMemoryNames[i]);
++            Tmp16 = ACPI_CAST_PTR (UINT16, Source)[i];
++            AcpiDmDumpInteger16 (AcpiUtReadUint16 (&Tmp16),
++                     AcpiDmMemoryNames[i]);
+             break;
+ 
+         case 32:
+ 
+-            AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i],
+-                AcpiDmMemoryNames[i]);
++            Tmp32 = ACPI_CAST_PTR (UINT32, Source)[i];
++            AcpiDmDumpInteger32 (AcpiUtReadUint32 (&Tmp32),
++                     AcpiDmMemoryNames[i]);
+             break;
+ 
+         default:
+@@ -190,6 +194,9 @@ AcpiDmAddressFields (
+     UINT32                  Level)
+ {
+     UINT32                  i;
++    UINT16                  Tmp16;
++    UINT32                  Tmp32;
++    UINT64                  Tmp64;
+ 
+ 
+     AcpiOsPrintf ("\n");
+@@ -202,20 +209,23 @@ AcpiDmAddressFields (
+         {
+         case 16:
+ 
+-            AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i],
+-                AcpiDmAddressNames[i]);
++            Tmp16 = ACPI_CAST_PTR (UINT16, Source)[i];
++            AcpiDmDumpInteger16 (AcpiUtReadUint16 (&Tmp16),
++                         AcpiDmAddressNames[i]);
+             break;
+ 
+         case 32:
+ 
+-            AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i],
+-                AcpiDmAddressNames[i]);
++            Tmp32 = ACPI_CAST_PTR (UINT32, Source)[i];
++            AcpiDmDumpInteger32 (AcpiUtReadUint32 (&Tmp32),
++                         AcpiDmAddressNames[i]);
+             break;
+ 
+         case 64:
+ 
+-            AcpiDmDumpInteger64 (ACPI_CAST_PTR (UINT64, Source)[i],
+-                AcpiDmAddressNames[i]);
++            Tmp64 = ACPI_CAST_PTR (UINT64, Source)[i];
++            AcpiDmDumpInteger64 (AcpiUtReadUint64 (&Tmp64),
++                         AcpiDmAddressNames[i]);
+             break;
+ 
+         default:
+@@ -749,7 +759,7 @@ AcpiDmExtendedDescriptor (
+     /* Extra field for this descriptor only */
+ 
+     AcpiDmIndent (Level + 1);
+-    AcpiDmDumpInteger64 (Resource->ExtAddress64.TypeSpecific,
++    AcpiDmDumpInteger64 (AcpiUtReadUint64 (&Resource->ExtAddress64.TypeSpecific),
+         "Type-Specific Attributes");
+ 
+     /* Insert a descriptor name */
+@@ -876,11 +886,11 @@ AcpiDmFixedMemory32Descriptor (
+         AcpiGbl_RwDecode [ACPI_GET_1BIT_FLAG (Resource->FixedMemory32.Flags)]);
+ 
+     AcpiDmIndent (Level + 1);
+-    AcpiDmDumpInteger32 (Resource->FixedMemory32.Address,
++    AcpiDmDumpInteger32 (AcpiUtReadUint32 (&Resource->FixedMemory32.Address),
+         "Address Base");
+ 
+     AcpiDmIndent (Level + 1);
+-    AcpiDmDumpInteger32 (Resource->FixedMemory32.AddressLength,
++    AcpiDmDumpInteger32 (AcpiUtReadUint32 (&Resource->FixedMemory32.AddressLength),
+         "Address Length");
+ 
+     /* Insert a descriptor name */
+@@ -926,7 +936,8 @@ AcpiDmGenericRegisterDescriptor (
+     AcpiDmDumpInteger8 (Resource->GenericReg.BitOffset, "Bit Offset");
+ 
+     AcpiDmIndent (Level + 1);
+-    AcpiDmDumpInteger64 (Resource->GenericReg.Address, "Address");
++    AcpiDmDumpInteger64 (AcpiUtReadUint64 (&Resource->GenericReg.Address),
++                 "Address");
+ 
+     /* Optional field for ACPI 3.0 */
+ 
+@@ -989,7 +1000,7 @@ AcpiDmInterruptDescriptor (
+     AcpiDmResourceSource (Resource,
+         sizeof (AML_RESOURCE_EXTENDED_IRQ) +
+             ((UINT32) Resource->ExtendedIrq.InterruptCount - 1) * sizeof (UINT32),
+-        Resource->ExtendedIrq.ResourceLength);
++            AcpiUtReadUint16 (&Resource->ExtendedIrq.ResourceLength));
+ 
+     /* Insert a descriptor name */
+ 
+@@ -1004,7 +1015,7 @@ AcpiDmInterruptDescriptor (
+     {
+         AcpiDmIndent (Level + 1);
+         AcpiOsPrintf ("0x%8.8X,\n",
+-            (UINT32) Resource->ExtendedIrq.Interrupts[i]);
++            AcpiUtReadUint32 (&Resource->ExtendedIrq.Interrupts[i]));
+     }
+ 
+     AcpiDmIndent (Level);
+Index: acpica-unix2-20210604/source/components/disassembler/dmresrcl2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/components/disassembler/dmresrcl2.c
++++ acpica-unix2-20210604/source/components/disassembler/dmresrcl2.c
+@@ -199,22 +199,27 @@ AcpiDmGpioCommon (
+     char                    *DeviceName = NULL;
+     UINT32                  PinCount;
+     UINT32                  i;
++    UINT16                  ResSourceOffset;
++    UINT16                  VendorOffset;
++    UINT16                  VendorLength;
++    UINT16                  Tmp16;
+ 
+ 
+     /* ResourceSource, ResourceSourceIndex, ResourceType */
+ 
+     AcpiDmIndent (Level + 1);
+-    if (Resource->Gpio.ResSourceOffset)
++    ResSourceOffset = AcpiUtReadUint16 (&Resource->Gpio.ResSourceOffset);
++    if (ResSourceOffset)
+     {
+         DeviceName = ACPI_ADD_PTR (char,
+-            Resource, Resource->Gpio.ResSourceOffset),
++            Resource, ResSourceOffset),
+         AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
+     }
+ 
+     AcpiOsPrintf (", ");
+     AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.ResSourceIndex);
+-    AcpiOsPrintf ("%s, ",
+-        AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.Flags)]);
++    Tmp16 = AcpiUtReadUint16 (&Resource->Gpio.Flags);
++    AcpiOsPrintf ("%s, ", AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Tmp16)]);
+ 
+     /* Insert a descriptor name */
+ 
+@@ -223,15 +228,15 @@ AcpiDmGpioCommon (
+ 
+     /* Dump the vendor data */
+ 
+-    if (Resource->Gpio.VendorOffset)
++    VendorOffset = AcpiUtReadUint16 (&Resource->Gpio.VendorOffset);
++    VendorLength = AcpiUtReadUint16 (&Resource->Gpio.VendorLength);
++    if (VendorOffset)
+     {
+         AcpiOsPrintf ("\n");
+         AcpiDmIndent (Level + 1);
+-        VendorData = ACPI_ADD_PTR (UINT8, Resource,
+-            Resource->Gpio.VendorOffset);
++        VendorData = ACPI_ADD_PTR (UINT8, Resource, VendorOffset);
+ 
+-        AcpiDmDumpRawDataBuffer (VendorData,
+-            Resource->Gpio.VendorLength, Level);
++        AcpiDmDumpRawDataBuffer (VendorData, VendorLength, Level);
+     }
+ 
+     AcpiOsPrintf (")\n");
+@@ -241,17 +246,17 @@ AcpiDmGpioCommon (
+     AcpiDmIndent (Level + 1);
+     AcpiOsPrintf ("{   // Pin list\n");
+ 
+-    PinCount = ((UINT32) (Resource->Gpio.ResSourceOffset -
+-        Resource->Gpio.PinTableOffset)) /
+-        sizeof (UINT16);
++    PinCount = (UINT32) AcpiUtReadUint16 (&Resource->Gpio.ResSourceOffset);
++    PinCount -= (UINT32) AcpiUtReadUint16 (&Resource->Gpio.PinTableOffset);
++    PinCount /= sizeof (UINT16);
+ 
+     PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
+-        Resource->Gpio.PinTableOffset);
++        AcpiUtReadUint16 (&Resource->Gpio.PinTableOffset));
+ 
+     for (i = 0; i < PinCount; i++)
+     {
+         AcpiDmIndent (Level + 2);
+-        AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],
++        AcpiOsPrintf ("0x%4.4X%s\n", AcpiUtReadUint16 (&(PinList[i])),
+             ((i + 1) < PinCount) ? "," : "");
+     }
+ 
+@@ -285,16 +290,18 @@ AcpiDmGpioIntDescriptor (
+     UINT32                  Length,
+     UINT32                  Level)
+ {
++    UINT16                  Tmp16;
+ 
+     /* Dump the GpioInt-specific portion of the descriptor */
+ 
+     /* EdgeLevel, ActiveLevel, Shared */
+ 
+     AcpiDmIndent (Level);
++    Tmp16 = AcpiUtReadUint16 (&Resource->Gpio.IntFlags);
+     AcpiOsPrintf ("GpioInt (%s, %s, %s, ",
+-        AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.IntFlags)],
+-        AcpiGbl_LlDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 1)],
+-        AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]);
++        AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Tmp16)],
++        AcpiGbl_LlDecode [ACPI_EXTRACT_2BIT_FLAG (Tmp16, 1)],
++        AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Tmp16, 3)]);
+ 
+     /* PinConfig, DebounceTimeout */
+ 
+@@ -307,7 +314,8 @@ AcpiDmGpioIntDescriptor (
+     {
+         AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig);
+     }
+-    AcpiOsPrintf ("0x%4.4X,\n", Resource->Gpio.DebounceTimeout);
++    AcpiOsPrintf ("0x%4.4X,\n",
++          AcpiUtReadUint16 (&Resource->Gpio.DebounceTimeout));
+ 
+     /* Dump the GpioInt/GpioIo common portion of the descriptor */
+ 
+@@ -337,14 +345,16 @@ AcpiDmGpioIoDescriptor (
+     UINT32                  Length,
+     UINT32                  Level)
+ {
++    UINT16                  Tmp16;
+ 
+     /* Dump the GpioIo-specific portion of the descriptor */
+ 
+     /* Shared, PinConfig */
+ 
+     AcpiDmIndent (Level);
++    Tmp16 = AcpiUtReadUint16 (&Resource->Gpio.IntFlags);
+     AcpiOsPrintf ("GpioIo (%s, ",
+-        AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]);
++        AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Tmp16, 3)]);
+ 
+     if (Resource->Gpio.PinConfig <= 3)
+     {
+@@ -358,10 +368,10 @@ AcpiDmGpioIoDescriptor (
+ 
+     /* DebounceTimeout, DriveStrength, IoRestriction */
+ 
+-    AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DebounceTimeout);
+-    AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DriveStrength);
+-    AcpiOsPrintf ("%s,\n",
+-        AcpiGbl_IorDecode [ACPI_GET_2BIT_FLAG (Resource->Gpio.IntFlags)]);
++    AcpiOsPrintf ("0x%4.4X, ", AcpiUtReadUint16 (&Resource->Gpio.DebounceTimeout));
++    AcpiOsPrintf ("0x%4.4X, ", AcpiUtReadUint16 (&Resource->Gpio.DriveStrength));
++    Tmp16 = AcpiUtReadUint16 (&Resource->Gpio.IntFlags);
++    AcpiOsPrintf ("%s,\n", AcpiGbl_IorDecode [ACPI_GET_2BIT_FLAG (Tmp16)]);
+ 
+     /* Dump the GpioInt/GpioIo common portion of the descriptor */
+ 
+@@ -442,6 +452,9 @@ AcpiDmPinFunctionDescriptor (
+     char                    *DeviceName = NULL;
+     UINT32                  PinCount;
+     UINT32                  i;
++    UINT16                  ResSourceOffset;
++    UINT16                  VendorOffset;
++    UINT16                  VendorLength;
+ 
+     AcpiDmIndent (Level);
+     AcpiOsPrintf ("PinFunction (%s, ",
+@@ -459,12 +472,14 @@ AcpiDmPinFunctionDescriptor (
+ 
+     /* FunctionNumber */
+ 
+-    AcpiOsPrintf ("0x%4.4X, ", Resource->PinFunction.FunctionNumber);
++    AcpiOsPrintf ("0x%4.4X, ",
++          AcpiUtReadUint16 (&Resource->PinFunction.FunctionNumber));
+ 
+-    if (Resource->PinFunction.ResSourceOffset)
++    ResSourceOffset = AcpiUtReadUint16 (&Resource->PinFunction.ResSourceOffset);
++    if (ResSourceOffset)
+     {
+         DeviceName = ACPI_ADD_PTR (char,
+-            Resource, Resource->PinFunction.ResSourceOffset),
++            Resource, ResSourceOffset),
+         AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
+     }
+ 
+@@ -484,15 +499,15 @@ AcpiDmPinFunctionDescriptor (
+ 
+     /* Dump the vendor data */
+ 
+-    if (Resource->PinFunction.VendorLength)
++    VendorOffset = AcpiUtReadUint16 (&Resource->PinFunction.VendorOffset);
++    VendorLength = AcpiUtReadUint16 (&Resource->PinFunction.VendorLength);
++    if (VendorLength)
+     {
+         AcpiOsPrintf ("\n");
+         AcpiDmIndent (Level + 1);
+-        VendorData = ACPI_ADD_PTR (UINT8, Resource,
+-            Resource->PinFunction.VendorOffset);
++        VendorData = ACPI_ADD_PTR (UINT8, Resource, VendorOffset);
+ 
+-        AcpiDmDumpRawDataBuffer (VendorData,
+-            Resource->PinFunction.VendorLength, Level);
++        AcpiDmDumpRawDataBuffer (VendorData, VendorLength, Level);
+     }
+ 
+     AcpiOsPrintf (")\n");
+@@ -503,17 +518,17 @@ AcpiDmPinFunctionDescriptor (
+ 
+     AcpiOsPrintf ("{   // Pin list\n");
+ 
+-    PinCount = ((UINT32) (Resource->PinFunction.ResSourceOffset -
+-        Resource->PinFunction.PinTableOffset)) /
+-        sizeof (UINT16);
++    PinCount = AcpiUtReadUint16 (&Resource->PinFunction.ResSourceOffset);
++    PinCount -= AcpiUtReadUint16 (&Resource->PinFunction.PinTableOffset);
++    PinCount /= sizeof (UINT16);
+ 
+     PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
+-        Resource->PinFunction.PinTableOffset);
++        AcpiUtReadUint16 (&Resource->PinFunction.PinTableOffset));
+ 
+     for (i = 0; i < PinCount; i++)
+     {
+         AcpiDmIndent (Level + 2);
+-        AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],
++        AcpiOsPrintf ("0x%4.4X%s\n", AcpiUtReadUint16 (&(PinList[i])),
+             ((i + 1) < PinCount) ? "," : "");
+     }
+ 
+@@ -549,7 +564,8 @@ AcpiDmDumpSerialBusVendorData (
+     {
+     case AML_RESOURCE_I2C_SERIALBUSTYPE:
+ 
+-        VendorLength = Resource->CommonSerialBus.TypeDataLength -
++        VendorLength =
++            AcpiUtReadUint16 (&Resource->CommonSerialBus.TypeDataLength) -
+             AML_RESOURCE_I2C_MIN_DATA_LEN;
+ 
+         VendorData = ACPI_ADD_PTR (UINT8, Resource,
+@@ -558,7 +574,8 @@ AcpiDmDumpSerialBusVendorData (
+ 
+     case AML_RESOURCE_SPI_SERIALBUSTYPE:
+ 
+-        VendorLength = Resource->CommonSerialBus.TypeDataLength -
++        VendorLength =
++            AcpiUtReadUint16 (&Resource->CommonSerialBus.TypeDataLength) -
+             AML_RESOURCE_SPI_MIN_DATA_LEN;
+ 
+         VendorData = ACPI_ADD_PTR (UINT8, Resource,
+@@ -567,7 +584,8 @@ AcpiDmDumpSerialBusVendorData (
+ 
+     case AML_RESOURCE_UART_SERIALBUSTYPE:
+ 
+-        VendorLength = Resource->CommonSerialBus.TypeDataLength -
++        VendorLength =
++            AcpiUtReadUint16 (&Resource->CommonSerialBus.TypeDataLength) -
+             AML_RESOURCE_UART_MIN_DATA_LEN;
+ 
+         VendorData = ACPI_ADD_PTR (UINT8, Resource,
+@@ -693,9 +711,9 @@ AcpiDmI2cSerialBusDescriptor (
+ 
+     AcpiDmIndent (Level);
+     AcpiOsPrintf ("I2cSerialBusV2 (0x%4.4X, %s, 0x%8.8X,\n",
+-        Resource->I2cSerialBus.SlaveAddress,
++        AcpiUtReadUint16 (&Resource->I2cSerialBus.SlaveAddress),
+         AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.Flags)],
+-        Resource->I2cSerialBus.ConnectionSpeed);
++        AcpiUtReadUint32 (&Resource->I2cSerialBus.ConnectionSpeed));
+ 
+     AcpiDmIndent (Level + 1);
+     AcpiOsPrintf ("%s, ",
+@@ -704,7 +722,7 @@ AcpiDmI2cSerialBusDescriptor (
+     /* ResourceSource is a required field */
+ 
+     ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
+-        Resource->CommonSerialBus.TypeDataLength;
++        AcpiUtReadUint16 (&Resource->CommonSerialBus.TypeDataLength);
+ 
+     DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);
+     AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
+@@ -761,15 +779,17 @@ AcpiDmSpiSerialBusDescriptor (
+ {
+     UINT32                  ResourceSourceOffset;
+     char                    *DeviceName;
++    UINT16                  Tmp16;
+ 
+ 
+     /* DeviceSelection, DeviceSelectionPolarity, WireMode, DataBitLength */
+ 
+     AcpiDmIndent (Level);
++    Tmp16 = AcpiUtReadUint16 (&Resource->SpiSerialBus.TypeSpecificFlags);
+     AcpiOsPrintf ("SpiSerialBusV2 (0x%4.4X, %s, %s, 0x%2.2X,\n",
+-        Resource->SpiSerialBus.DeviceSelection,
+-        AcpiGbl_DpDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags, 1)],
+-        AcpiGbl_WmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags)],
++        AcpiUtReadUint16 (&Resource->SpiSerialBus.DeviceSelection),
++        AcpiGbl_DpDecode [ACPI_EXTRACT_1BIT_FLAG (Tmp16, 1)],
++        AcpiGbl_WmDecode [ACPI_GET_1BIT_FLAG (Tmp16)],
+         Resource->SpiSerialBus.DataBitLength);
+ 
+     /* SlaveMode, ConnectionSpeed, ClockPolarity, ClockPhase */
+@@ -777,7 +797,7 @@ AcpiDmSpiSerialBusDescriptor (
+     AcpiDmIndent (Level + 1);
+     AcpiOsPrintf ("%s, 0x%8.8X, %s,\n",
+         AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.Flags)],
+-        Resource->SpiSerialBus.ConnectionSpeed,
++        AcpiUtReadUint32 (&Resource->SpiSerialBus.ConnectionSpeed),
+         AcpiGbl_CpoDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPolarity)]);
+ 
+     AcpiDmIndent (Level + 1);
+@@ -787,7 +807,7 @@ AcpiDmSpiSerialBusDescriptor (
+     /* ResourceSource is a required field */
+ 
+     ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
+-        Resource->CommonSerialBus.TypeDataLength;
++        AcpiUtReadUint16 (&Resource->CommonSerialBus.TypeDataLength);
+ 
+     DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);
+     AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
+@@ -844,15 +864,17 @@ AcpiDmUartSerialBusDescriptor (
+ {
+     UINT32                  ResourceSourceOffset;
+     char                    *DeviceName;
++    UINT16                  Tmp16;
+ 
+ 
+     /* ConnectionSpeed, BitsPerByte, StopBits */
+ 
+     AcpiDmIndent (Level);
++    Tmp16 = AcpiUtReadUint16 (&Resource->UartSerialBus.TypeSpecificFlags);
+     AcpiOsPrintf ("UartSerialBusV2 (0x%8.8X, %s, %s,\n",
+-        Resource->UartSerialBus.DefaultBaudRate,
+-        AcpiGbl_BpbDecode [ACPI_EXTRACT_3BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 4)],
+-        AcpiGbl_SbDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 2)]);
++        AcpiUtReadUint32 (&Resource->UartSerialBus.DefaultBaudRate),
++        AcpiGbl_BpbDecode [ACPI_EXTRACT_3BIT_FLAG (Tmp16, 4)],
++        AcpiGbl_SbDecode [ACPI_EXTRACT_2BIT_FLAG (Tmp16, 2)]);
+ 
+     /* LinesInUse, IsBigEndian, Parity, FlowControl */
+ 
+@@ -867,13 +889,13 @@ AcpiDmUartSerialBusDescriptor (
+ 
+     AcpiDmIndent (Level + 1);
+     AcpiOsPrintf ("0x%4.4X, 0x%4.4X, ",
+-        Resource->UartSerialBus.RxFifoSize,
+-        Resource->UartSerialBus.TxFifoSize);
++        AcpiUtReadUint16 (&Resource->UartSerialBus.RxFifoSize),
++        AcpiUtReadUint16 (&Resource->UartSerialBus.TxFifoSize));
+ 
+     /* ResourceSource is a required field */
+ 
+     ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
+-        Resource->CommonSerialBus.TypeDataLength;
++        AcpiUtReadUint16 (&Resource->CommonSerialBus.TypeDataLength);
+ 
+     DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);
+     AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
+Index: acpica-unix2-20210604/source/components/disassembler/dmresrcs.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/components/disassembler/dmresrcs.c
++++ acpica-unix2-20210604/source/components/disassembler/dmresrcs.c
+@@ -93,7 +93,7 @@ AcpiDmIrqDescriptor (
+     AcpiOsPrintf (")\n");
+ 
+     AcpiDmIndent (Level + 1);
+-    AcpiDmBitList (Resource->Irq.IrqMask);
++    AcpiDmBitList (AcpiUtReadUint16 (&Resource->Irq.IrqMask));
+ }
+ 
+ 
+@@ -161,8 +161,8 @@ AcpiDmFixedDmaDescriptor (
+ 
+     AcpiDmIndent (Level);
+     AcpiOsPrintf ("FixedDMA (0x%4.4X, 0x%4.4X, ",
+-        Resource->FixedDma.RequestLines,
+-        Resource->FixedDma.Channels);
++        AcpiUtReadUint16 (&Resource->FixedDma.RequestLines),
++        AcpiUtReadUint16 (&Resource->FixedDma.Channels));
+ 
+     if (Resource->FixedDma.Width <= 5)
+     {
+@@ -210,10 +210,12 @@ AcpiDmIoDescriptor (
+         AcpiGbl_IoDecode [ACPI_GET_1BIT_FLAG (Resource->Io.Flags)]);
+ 
+     AcpiDmIndent (Level + 1);
+-    AcpiDmDumpInteger16 (Resource->Io.Minimum, "Range Minimum");
++    AcpiDmDumpInteger16 (AcpiUtReadUint16 (&Resource->Io.Minimum),
++                 "Range Minimum");
+ 
+     AcpiDmIndent (Level + 1);
+-    AcpiDmDumpInteger16 (Resource->Io.Maximum, "Range Maximum");
++    AcpiDmDumpInteger16 (AcpiUtReadUint16 (&Resource->Io.Maximum),
++                 "Range Maximum");
+ 
+     AcpiDmIndent (Level + 1);
+     AcpiDmDumpInteger8 (Resource->Io.Alignment, "Alignment");
+@@ -256,10 +258,12 @@ AcpiDmFixedIoDescriptor (
+     AcpiOsPrintf ("FixedIO (\n");
+ 
+     AcpiDmIndent (Level + 1);
+-    AcpiDmDumpInteger16 (Resource->FixedIo.Address, "Address");
++    AcpiDmDumpInteger16 (AcpiUtReadUint16 (&Resource->FixedIo.Address),
++                 "Address");
+ 
+     AcpiDmIndent (Level + 1);
+-    AcpiDmDumpInteger8 (Resource->FixedIo.AddressLength, "Length");
++    AcpiDmDumpInteger8 (AcpiUtReadUint16 (&Resource->FixedIo.AddressLength),
++            "Length");
+ 
+     /* Insert a descriptor name */
+ 
+Index: acpica-unix2-20210604/source/components/disassembler/dmwalk.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/components/disassembler/dmwalk.c
++++ acpica-unix2-20210604/source/components/disassembler/dmwalk.c
+@@ -1155,7 +1155,7 @@ AcpiDmAscendingOp (
+         {
+             ParentOp->Common.DisasmFlags |= ACPI_PARSEOP_EMPTY_TERMLIST;
+             ASL_CV_CLOSE_PAREN (Op, Level);
+-            AcpiOsPrintf ("{");
++            AcpiOsPrintf (" {");
+         }
+     }
+ 
+Index: acpica-unix2-20210604/source/components/namespace/nsaccess.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/components/namespace/nsaccess.c
++++ acpica-unix2-20210604/source/components/namespace/nsaccess.c
+@@ -644,7 +644,7 @@ AcpiNsLookup (
+ 
+         /* Extract one ACPI name from the front of the pathname */
+ 
+-        ACPI_MOVE_32_TO_32 (&SimpleName, Path);
++        ACPI_COPY_NAMESEG (&SimpleName, Path);
+ 
+         /* Try to find the single (4 character) ACPI name */
+ 
+Index: acpica-unix2-20210604/source/components/namespace/nsnames.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/components/namespace/nsnames.c
++++ acpica-unix2-20210604/source/components/namespace/nsnames.c
+@@ -297,10 +297,10 @@ AcpiNsBuildNormalizedPath (
+     {
+         if (NextNode != Node)
+         {
+-            ACPI_PATH_PUT8(FullPath, PathSize, AML_DUAL_NAME_PREFIX, Length);
++            ACPI_PATH_PUT8 (FullPath, PathSize, AML_DUAL_NAME_PREFIX, Length);
+         }
+ 
+-        ACPI_MOVE_32_TO_32 (Name, &NextNode->Name);
++        ACPI_COPY_NAMESEG (Name, &NextNode->Name);
+         DoNoTrailing = NoTrailing;
+         for (i = 0; i < 4; i++)
+         {
+Index: acpica-unix2-20210604/source/components/namespace/nsparse.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/components/namespace/nsparse.c
++++ acpica-unix2-20210604/source/components/namespace/nsparse.c
+@@ -203,6 +203,7 @@ AcpiNsOneCompleteParse (
+     ACPI_WALK_STATE         *WalkState;
+     ACPI_TABLE_HEADER       *Table;
+     ACPI_OWNER_ID           OwnerId;
++    UINT32                  TableLength;
+ 
+ 
+     ACPI_FUNCTION_TRACE (NsOneCompleteParse);
+@@ -216,13 +217,14 @@ AcpiNsOneCompleteParse (
+ 
+     /* Table must consist of at least a complete header */
+ 
+-    if (Table->Length < sizeof (ACPI_TABLE_HEADER))
++    TableLength = AcpiUtReadUint32 (&Table->Length);
++    if (TableLength < sizeof (ACPI_TABLE_HEADER))
+     {
+         return_ACPI_STATUS (AE_BAD_HEADER);
+     }
+ 
+     AmlStart = (UINT8 *) Table + sizeof (ACPI_TABLE_HEADER);
+-    AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER);
++    AmlLength = TableLength - sizeof (ACPI_TABLE_HEADER);
+ 
+     Status = AcpiTbGetOwnerId (TableIndex, &OwnerId);
+     if (ACPI_FAILURE (Status))
+Index: acpica-unix2-20210604/source/components/namespace/nsutils.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/components/namespace/nsutils.c
++++ acpica-unix2-20210604/source/components/namespace/nsutils.c
+@@ -272,7 +272,6 @@ AcpiNsBuildInternalName (
+     const char              *ExternalName = Info->NextExternalChar;
+     char                    *Result = NULL;
+     UINT32                  i;
+-    char                    TmpSeg[ACPI_NAMESEG_SIZE+1];
+ 
+ 
+     ACPI_FUNCTION_TRACE (NsBuildInternalName);
+@@ -336,7 +335,6 @@ AcpiNsBuildInternalName (
+ 
+     for (; NumSegments; NumSegments--)
+     {
+-        memset (TmpSeg, 0, ACPI_NAMESEG_SIZE+1);
+         for (i = 0; i < ACPI_NAMESEG_SIZE; i++)
+         {
+             if (ACPI_IS_PATH_SEPARATOR (*ExternalName) ||
+@@ -344,17 +342,16 @@ AcpiNsBuildInternalName (
+             {
+                 /* Pad the segment with underscore(s) if segment is short */
+ 
+-                TmpSeg[i] = '_';
++                Result[i] = '_';
+             }
+             else
+             {
+                 /* Convert the character to uppercase and save it */
+ 
+-                TmpSeg[i] = (char) toupper ((int) *ExternalName);
++                Result[i] = (char) toupper ((int) *ExternalName);
+                 ExternalName++;
+             }
+         }
+-    AcpiUtWriteUint (Result, ACPI_NAMESEG_SIZE, TmpSeg, ACPI_NAMESEG_SIZE);
+ 
+         /* Now we must have a path separator, or the pathname is bad */
+ 
+Index: acpica-unix2-20210604/source/components/utilities/utresrc.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/components/utilities/utresrc.c
++++ acpica-unix2-20210604/source/components/utilities/utresrc.c
+@@ -541,7 +541,7 @@ AcpiUtGetResourceLength (
+     {
+         /* Large Resource type -- bytes 1-2 contain the 16-bit length */
+ 
+-        ACPI_MOVE_16_TO_16 (&ResourceLength, ACPI_ADD_PTR (UINT8, Aml, 1));
++        ResourceLength = AcpiUtReadUint16 (ACPI_ADD_PTR (UINT8, Aml, 1));
+ 
+     }
+     else
+Index: acpica-unix2-20210604/source/compiler/aslrestype2e.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/aslrestype2e.c
++++ acpica-unix2-20210604/source/compiler/aslrestype2e.c
+@@ -80,6 +80,7 @@ RsDoExtendedIoDescriptor (
+     UINT16                  StringLength = 0;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
++    UINT16                  Tmp16;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -139,7 +140,8 @@ RsDoExtendedIoDescriptor (
+ 
+         case 5: /* Address Granularity */
+ 
+-            Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer;
++            Descriptor->ExtAddress64.Granularity =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity));
+             GranOp = InitializerOp;
+@@ -147,7 +149,8 @@ RsDoExtendedIoDescriptor (
+ 
+         case 6: /* Address Min */
+ 
+-            Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer;
++            Descriptor->ExtAddress64.Minimum =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum));
+             MinOp = InitializerOp;
+@@ -155,7 +158,8 @@ RsDoExtendedIoDescriptor (
+ 
+         case 7: /* Address Max */
+ 
+-            Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer;
++            Descriptor->ExtAddress64.Maximum =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum));
+             MaxOp = InitializerOp;
+@@ -163,14 +167,16 @@ RsDoExtendedIoDescriptor (
+ 
+         case 8: /* Translation Offset */
+ 
+-            Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer;
++            Descriptor->ExtAddress64.TranslationOffset =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset));
+             break;
+ 
+         case 9: /* Address Length */
+ 
+-            Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer;
++            Descriptor->ExtAddress64.AddressLength =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength));
+             LengthOp = InitializerOp;
+@@ -178,7 +184,8 @@ RsDoExtendedIoDescriptor (
+ 
+         case 10: /* Type-Specific Attributes */
+ 
+-            Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer;
++            Descriptor->ExtAddress64.TypeSpecific =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific));
+             break;
+@@ -213,11 +220,14 @@ RsDoExtendedIoDescriptor (
+ 
+     /* Validate the Min/Max/Len/Gran values */
+ 
++    Tmp16 = Descriptor->ExtAddress64.ResourceLength;
++    Descriptor->ExtAddress64.ResourceLength = AcpiUtReadUint16 (&Tmp16);
++
+     RsLargeAddressCheck (
+-        Descriptor->ExtAddress64.Minimum,
+-        Descriptor->ExtAddress64.Maximum,
+-        Descriptor->ExtAddress64.AddressLength,
+-        Descriptor->ExtAddress64.Granularity,
++        AcpiUtReadUint64 (&Descriptor->ExtAddress64.Minimum),
++        AcpiUtReadUint64 (&Descriptor->ExtAddress64.Maximum),
++        AcpiUtReadUint64 (&Descriptor->ExtAddress64.AddressLength),
++        AcpiUtReadUint64 (&Descriptor->ExtAddress64.Granularity),
+         Descriptor->ExtAddress64.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
+ 
+@@ -253,6 +263,7 @@ RsDoExtendedMemoryDescriptor (
+     UINT16                  StringLength = 0;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
++    UINT16                  Tmp16;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -319,7 +330,8 @@ RsDoExtendedMemoryDescriptor (
+ 
+         case 6: /* Address Granularity */
+ 
+-            Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer;
++            Descriptor->ExtAddress64.Granularity =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity));
+             GranOp = InitializerOp;
+@@ -327,7 +339,8 @@ RsDoExtendedMemoryDescriptor (
+ 
+         case 7: /* Min Address */
+ 
+-            Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer;
++            Descriptor->ExtAddress64.Minimum =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum));
+             MinOp = InitializerOp;
+@@ -335,7 +348,8 @@ RsDoExtendedMemoryDescriptor (
+ 
+         case 8: /* Max Address */
+ 
+-            Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer;
++            Descriptor->ExtAddress64.Maximum =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum));
+             MaxOp = InitializerOp;
+@@ -343,14 +357,16 @@ RsDoExtendedMemoryDescriptor (
+ 
+         case 9: /* Translation Offset */
+ 
+-            Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer;
++            Descriptor->ExtAddress64.TranslationOffset =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset));
+             break;
+ 
+         case 10: /* Address Length */
+ 
+-            Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer;
++            Descriptor->ExtAddress64.AddressLength =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength));
+             LengthOp = InitializerOp;
+@@ -358,7 +374,8 @@ RsDoExtendedMemoryDescriptor (
+ 
+         case 11: /* Type-Specific Attributes */
+ 
+-            Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer;
++            Descriptor->ExtAddress64.TypeSpecific =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific));
+             break;
+@@ -394,11 +411,14 @@ RsDoExtendedMemoryDescriptor (
+ 
+     /* Validate the Min/Max/Len/Gran values */
+ 
++    Tmp16 = Descriptor->ExtAddress64.ResourceLength;
++    Descriptor->ExtAddress64.ResourceLength = AcpiUtReadUint16 (&Tmp16);
++
+     RsLargeAddressCheck (
+-        Descriptor->ExtAddress64.Minimum,
+-        Descriptor->ExtAddress64.Maximum,
+-        Descriptor->ExtAddress64.AddressLength,
+-        Descriptor->ExtAddress64.Granularity,
++        AcpiUtReadUint64 (&Descriptor->ExtAddress64.Minimum),
++        AcpiUtReadUint64 (&Descriptor->ExtAddress64.Maximum),
++        AcpiUtReadUint64 (&Descriptor->ExtAddress64.AddressLength),
++        AcpiUtReadUint64 (&Descriptor->ExtAddress64.Granularity),
+         Descriptor->ExtAddress64.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
+ 
+@@ -434,6 +454,7 @@ RsDoExtendedSpaceDescriptor (
+     UINT16                  StringLength = 0;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
++    UINT16                  Tmp16;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -497,7 +518,8 @@ RsDoExtendedSpaceDescriptor (
+ 
+         case 6: /* Address Granularity */
+ 
+-            Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer;
++            Descriptor->ExtAddress64.Granularity =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity));
+             GranOp = InitializerOp;
+@@ -505,7 +527,8 @@ RsDoExtendedSpaceDescriptor (
+ 
+         case 7: /* Min Address */
+ 
+-            Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer;
++            Descriptor->ExtAddress64.Minimum =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum));
+             MinOp = InitializerOp;
+@@ -513,7 +536,8 @@ RsDoExtendedSpaceDescriptor (
+ 
+         case 8: /* Max Address */
+ 
+-            Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer;
++            Descriptor->ExtAddress64.Maximum =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum));
+             MaxOp = InitializerOp;
+@@ -521,14 +545,16 @@ RsDoExtendedSpaceDescriptor (
+ 
+         case 9: /* Translation Offset */
+ 
+-            Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer;
++            Descriptor->ExtAddress64.TranslationOffset =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset));
+             break;
+ 
+         case 10: /* Address Length */
+ 
+-            Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer;
++            Descriptor->ExtAddress64.AddressLength =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength));
+             LengthOp = InitializerOp;
+@@ -536,7 +562,8 @@ RsDoExtendedSpaceDescriptor (
+ 
+         case 11: /* Type-Specific Attributes */
+ 
+-            Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer;
++            Descriptor->ExtAddress64.TypeSpecific =
++                AcpiUtReadUint64 (&InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific));
+             break;
+@@ -557,11 +584,14 @@ RsDoExtendedSpaceDescriptor (
+ 
+     /* Validate the Min/Max/Len/Gran values */
+ 
++    Tmp16 = Descriptor->ExtAddress64.ResourceLength;
++    Descriptor->ExtAddress64.ResourceLength = AcpiUtReadUint16 (&Tmp16);
++
+     RsLargeAddressCheck (
+-        Descriptor->ExtAddress64.Minimum,
+-        Descriptor->ExtAddress64.Maximum,
+-        Descriptor->ExtAddress64.AddressLength,
+-        Descriptor->ExtAddress64.Granularity,
++        AcpiUtReadUint64 (&Descriptor->ExtAddress64.Minimum),
++        AcpiUtReadUint64 (&Descriptor->ExtAddress64.Maximum),
++        AcpiUtReadUint64 (&Descriptor->ExtAddress64.AddressLength),
++        AcpiUtReadUint64 (&Descriptor->ExtAddress64.Granularity),
+         Descriptor->ExtAddress64.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
+ 
+Index: acpica-unix2-20210604/source/compiler/aslrestype2s.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/aslrestype2s.c
++++ acpica-unix2-20210604/source/compiler/aslrestype2s.c
+@@ -343,6 +343,7 @@ RsDoGpioIntDescriptor (
+     UINT32                  CurrentByteOffset;
+     UINT32                  PinCount = 0;
+     UINT32                  i;
++    UINT16                  Tmp16;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -485,7 +486,8 @@ RsDoGpioIntDescriptor (
+              *  (implies resource source must immediately follow the pin list.)
+              *  Name: _PIN
+              */
+-            *InterruptList = (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            *InterruptList = AcpiUtReadUint16 (&Tmp16);
+             InterruptList++;
+             PinCount++;
+ 
+@@ -518,6 +520,27 @@ RsDoGpioIntDescriptor (
+ 
+     MpSaveGpioInfo (Info->MappingOp, Descriptor,
+         PinCount, PinList, ResourceSource);
++
++    /* correct endian-ness issues */
++    Tmp16 = Descriptor->Gpio.ResourceLength;
++    Descriptor->Gpio.ResourceLength = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->Gpio.Flags;
++    Descriptor->Gpio.Flags = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->Gpio.IntFlags;
++    Descriptor->Gpio.IntFlags = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->Gpio.DriveStrength;
++    Descriptor->Gpio.DriveStrength = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->Gpio.DebounceTimeout;
++    Descriptor->Gpio.DebounceTimeout = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->Gpio.PinTableOffset;
++    Descriptor->Gpio.PinTableOffset = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->Gpio.ResSourceOffset;
++    Descriptor->Gpio.ResSourceOffset = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->Gpio.VendorOffset;
++    Descriptor->Gpio.VendorOffset = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->Gpio.VendorLength;
++    Descriptor->Gpio.VendorLength = AcpiUtReadUint16 (&Tmp16);
++
+     return (Rnode);
+ }
+ 
+@@ -552,6 +575,7 @@ RsDoGpioIoDescriptor (
+     UINT32                  CurrentByteOffset;
+     UINT32                  PinCount = 0;
+     UINT32                  i;
++    UINT16                  Tmp16;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -691,7 +715,8 @@ RsDoGpioIoDescriptor (
+              *  (implies resource source must immediately follow the pin list.)
+              *  Name: _PIN
+              */
+-            *InterruptList = (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            *InterruptList = AcpiUtReadUint16 (&Tmp16);
+             InterruptList++;
+             PinCount++;
+ 
+@@ -724,6 +749,27 @@ RsDoGpioIoDescriptor (
+ 
+     MpSaveGpioInfo (Info->MappingOp, Descriptor,
+         PinCount, PinList, ResourceSource);
++
++    /* correct endian-ness issues */
++    Tmp16 = Descriptor->Gpio.ResourceLength;
++    Descriptor->Gpio.ResourceLength = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->Gpio.Flags;
++    Descriptor->Gpio.Flags = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->Gpio.IntFlags;
++    Descriptor->Gpio.IntFlags = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->Gpio.DriveStrength;
++    Descriptor->Gpio.DriveStrength = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->Gpio.DebounceTimeout;
++    Descriptor->Gpio.DebounceTimeout = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->Gpio.PinTableOffset;
++    Descriptor->Gpio.PinTableOffset = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->Gpio.ResSourceOffset;
++    Descriptor->Gpio.ResSourceOffset = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->Gpio.VendorOffset;
++    Descriptor->Gpio.VendorOffset = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->Gpio.VendorLength;
++    Descriptor->Gpio.VendorLength = AcpiUtReadUint16 (&Tmp16);
++
+     return (Rnode);
+ }
+ 
+@@ -754,6 +800,8 @@ RsDoI2cSerialBusDescriptor (
+     UINT16                  DescriptorSize;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
++    UINT16                  Tmp16;
++    UINT32                  Tmp32;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -781,7 +829,8 @@ RsDoI2cSerialBusDescriptor (
+     Descriptor->I2cSerialBus.RevisionId = AML_RESOURCE_I2C_REVISION;
+     Descriptor->I2cSerialBus.TypeRevisionId = AML_RESOURCE_I2C_TYPE_REVISION;
+     Descriptor->I2cSerialBus.Type = AML_RESOURCE_I2C_SERIALBUSTYPE;
+-    Descriptor->I2cSerialBus.TypeDataLength = AML_RESOURCE_I2C_MIN_DATA_LEN + VendorLength;
++    Tmp16 = AML_RESOURCE_I2C_MIN_DATA_LEN + VendorLength;
++    Descriptor->I2cSerialBus.TypeDataLength = AcpiUtReadUint16 (&Tmp16);
+ 
+     if (Info->DescriptorTypeOp->Asl.ParseOpcode == PARSEOP_I2C_SERIALBUS_V2)
+     {
+@@ -795,13 +844,15 @@ RsDoI2cSerialBusDescriptor (
+ 
+     /* Process all child initialization nodes */
+ 
++    Descriptor->I2cSerialBus.TypeSpecificFlags = 0;
+     for (i = 0; InitializerOp; i++)
+     {
+         switch (i)
+         {
+         case 0: /* Slave Address [WORD] (_ADR) */
+ 
+-            Descriptor->I2cSerialBus.SlaveAddress = (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->I2cSerialBus.SlaveAddress = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_ADDRESS,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (I2cSerialBus.SlaveAddress));
+             break;
+@@ -815,16 +866,19 @@ RsDoI2cSerialBusDescriptor (
+ 
+         case 2: /* Connection Speed [DWORD] (_SPE) */
+ 
+-            Descriptor->I2cSerialBus.ConnectionSpeed = (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->I2cSerialBus.ConnectionSpeed = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_SPEED,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (I2cSerialBus.ConnectionSpeed));
+             break;
+ 
+         case 3: /* Addressing Mode [Flag] (_MOD) */
+ 
+-            RsSetFlagBits16 (&Descriptor->I2cSerialBus.TypeSpecificFlags, InitializerOp, 0, 0);
++            Tmp16 = AcpiUtReadUint16 (&Descriptor->I2cSerialBus.TypeSpecificFlags);
++            RsSetFlagBits16 (&Tmp16, InitializerOp, 0, 0);
+             RsCreateBitField (InitializerOp, ACPI_RESTAG_MODE,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (I2cSerialBus.TypeSpecificFlags), 0);
++            Descriptor->I2cSerialBus.TypeSpecificFlags = AcpiUtReadUint16 (&Tmp16);
+             break;
+ 
+         case 4: /* ResSource [Optional Field - STRING] */
+@@ -882,6 +936,8 @@ RsDoI2cSerialBusDescriptor (
+         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
+     }
+ 
++    Tmp16 = Descriptor->I2cSerialBus.ResourceLength;
++    Descriptor->I2cSerialBus.ResourceLength = AcpiUtReadUint16 (&Tmp16);
+     MpSaveSerialInfo (Info->MappingOp, Descriptor, ResourceSource);
+     return (Rnode);
+ }
+@@ -913,6 +969,8 @@ RsDoSpiSerialBusDescriptor (
+     UINT16                  DescriptorSize;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
++    UINT16                  Tmp16;
++    UINT32                  Tmp32;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -935,12 +993,13 @@ RsDoSpiSerialBusDescriptor (
+         sizeof (AML_RESOURCE_LARGE_HEADER));
+ 
+     Descriptor = Rnode->Buffer;
+-    Descriptor->SpiSerialBus.ResourceLength = DescriptorSize;
++    Descriptor->SpiSerialBus.ResourceLength = AcpiUtReadUint16 (&DescriptorSize);
+     Descriptor->SpiSerialBus.DescriptorType = ACPI_RESOURCE_NAME_SERIAL_BUS;
+     Descriptor->SpiSerialBus.RevisionId = AML_RESOURCE_SPI_REVISION;
+     Descriptor->SpiSerialBus.TypeRevisionId = AML_RESOURCE_SPI_TYPE_REVISION;
+     Descriptor->SpiSerialBus.Type = AML_RESOURCE_SPI_SERIALBUSTYPE;
+-    Descriptor->SpiSerialBus.TypeDataLength = AML_RESOURCE_SPI_MIN_DATA_LEN + VendorLength;
++    Tmp16 = AML_RESOURCE_SPI_MIN_DATA_LEN + VendorLength;
++    Descriptor->SpiSerialBus.TypeDataLength = AcpiUtReadUint16 (&Tmp16);
+ 
+     if (Info->DescriptorTypeOp->Asl.ParseOpcode == PARSEOP_SPI_SERIALBUS_V2)
+     {
+@@ -955,29 +1014,35 @@ RsDoSpiSerialBusDescriptor (
+ 
+     /* Process all child initialization nodes */
+ 
++    Descriptor->SpiSerialBus.TypeSpecificFlags = 0;
+     for (i = 0; InitializerOp; i++)
+     {
+         switch (i)
+         {
+         case 0: /* Device Selection [WORD] (_ADR) */
+ 
+-            Descriptor->SpiSerialBus.DeviceSelection = (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->SpiSerialBus.DeviceSelection = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_ADDRESS,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.DeviceSelection));
+             break;
+ 
+         case 1: /* Device Polarity [Flag] (_DPL) */
+ 
+-            RsSetFlagBits16 (&Descriptor->SpiSerialBus.TypeSpecificFlags, InitializerOp, 1, 0);
++            Tmp16 = AcpiUtReadUint16 (&Descriptor->SpiSerialBus.TypeSpecificFlags);
++            RsSetFlagBits16 (&Tmp16, InitializerOp, 1, 0);
+             RsCreateBitField (InitializerOp, ACPI_RESTAG_DEVICEPOLARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.TypeSpecificFlags), 1);
++            Descriptor->SpiSerialBus.TypeSpecificFlags = AcpiUtReadUint16 (&Tmp16);
+             break;
+ 
+         case 2: /* Wire Mode [Flag] (_MOD) */
+ 
+-            RsSetFlagBits16 (&Descriptor->SpiSerialBus.TypeSpecificFlags, InitializerOp, 0, 0);
++            Tmp16 = AcpiUtReadUint16 (&Descriptor->SpiSerialBus.TypeSpecificFlags);
++            RsSetFlagBits16 (&Tmp16, InitializerOp, 0, 0);
+             RsCreateBitField (InitializerOp, ACPI_RESTAG_MODE,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.TypeSpecificFlags), 0);
++            Descriptor->SpiSerialBus.TypeSpecificFlags = AcpiUtReadUint16 (&Tmp16);
+             break;
+ 
+         case 3: /* Device Bit Length [BYTE] (_LEN) */
+@@ -996,7 +1061,8 @@ RsDoSpiSerialBusDescriptor (
+ 
+         case 5: /* Connection Speed [DWORD] (_SPE) */
+ 
+-            Descriptor->SpiSerialBus.ConnectionSpeed = (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->SpiSerialBus.ConnectionSpeed = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_SPEED,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.ConnectionSpeed));
+             break;
+@@ -1101,6 +1167,8 @@ RsDoUartSerialBusDescriptor (
+     UINT16                  DescriptorSize;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
++    UINT16                  Tmp16;
++    UINT32                  Tmp32;
+ 
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+@@ -1123,12 +1191,13 @@ RsDoUartSerialBusDescriptor (
+         sizeof (AML_RESOURCE_LARGE_HEADER));
+ 
+     Descriptor = Rnode->Buffer;
+-    Descriptor->UartSerialBus.ResourceLength = DescriptorSize;
++    Descriptor->UartSerialBus.ResourceLength = AcpiUtReadUint16 (&DescriptorSize);
+     Descriptor->UartSerialBus.DescriptorType = ACPI_RESOURCE_NAME_SERIAL_BUS;
+     Descriptor->UartSerialBus.RevisionId = AML_RESOURCE_UART_REVISION;
+     Descriptor->UartSerialBus.TypeRevisionId = AML_RESOURCE_UART_TYPE_REVISION;
+     Descriptor->UartSerialBus.Type = AML_RESOURCE_UART_SERIALBUSTYPE;
+-    Descriptor->UartSerialBus.TypeDataLength = AML_RESOURCE_UART_MIN_DATA_LEN + VendorLength;
++    Tmp16 = AML_RESOURCE_UART_MIN_DATA_LEN + VendorLength;
++    Descriptor->UartSerialBus.TypeDataLength = AcpiUtReadUint16 (&Tmp16);
+ 
+     if (Info->DescriptorTypeOp->Asl.ParseOpcode == PARSEOP_UART_SERIALBUS_V2)
+     {
+@@ -1142,29 +1211,35 @@ RsDoUartSerialBusDescriptor (
+ 
+     /* Process all child initialization nodes */
+ 
++    Descriptor->UartSerialBus.TypeSpecificFlags = 0;
+     for (i = 0; InitializerOp; i++)
+     {
+         switch (i)
+         {
+         case 0: /* Connection Speed (Baud Rate) [DWORD] (_SPE) */
+ 
+-            Descriptor->UartSerialBus.DefaultBaudRate = (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->UartSerialBus.DefaultBaudRate = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_SPEED,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.DefaultBaudRate));
+             break;
+ 
+         case 1: /* Bits Per Byte [Flags] (_LEN) */
+ 
+-            RsSetFlagBits16 (&Descriptor->UartSerialBus.TypeSpecificFlags, InitializerOp, 4, 3);
++            Tmp16 = AcpiUtReadUint16 (&Descriptor->UartSerialBus.TypeSpecificFlags);
++            RsSetFlagBits16 (&Tmp16, InitializerOp, 4, 3);
+             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 4, 3);
++            Descriptor->UartSerialBus.TypeSpecificFlags = AcpiUtReadUint16 (&Tmp16);;
+             break;
+ 
+         case 2: /* Stop Bits [Flags] (_STB) */
+ 
+-            RsSetFlagBits16 (&Descriptor->UartSerialBus.TypeSpecificFlags, InitializerOp, 2, 1);
++            Tmp16 = AcpiUtReadUint16 (&Descriptor->UartSerialBus.TypeSpecificFlags);
++            RsSetFlagBits16 (&Tmp16, InitializerOp, 2, 1);
+             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_STOPBITS,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 2, 2);
++            Descriptor->UartSerialBus.TypeSpecificFlags = AcpiUtReadUint16 (&Tmp16);;
+             break;
+ 
+         case 3: /* Lines In Use [BYTE] (_LIN) */
+@@ -1176,9 +1251,11 @@ RsDoUartSerialBusDescriptor (
+ 
+         case 4: /* Endianness [Flag] (_END) */
+ 
+-            RsSetFlagBits16 (&Descriptor->UartSerialBus.TypeSpecificFlags, InitializerOp, 7, 0);
++            Tmp16 = AcpiUtReadUint16 (&Descriptor->UartSerialBus.TypeSpecificFlags);
++            RsSetFlagBits16 (&Tmp16, InitializerOp, 7, 0);
+             RsCreateBitField (InitializerOp, ACPI_RESTAG_ENDIANNESS,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 7);
++            Descriptor->UartSerialBus.TypeSpecificFlags = AcpiUtReadUint16 (&Tmp16);;
+             break;
+ 
+         case 5: /* Parity [BYTE] (_PAR) */
+@@ -1190,21 +1267,25 @@ RsDoUartSerialBusDescriptor (
+ 
+         case 6: /* Flow Control [Flags] (_FLC) */
+ 
+-            RsSetFlagBits16 (&Descriptor->UartSerialBus.TypeSpecificFlags, InitializerOp, 0, 0);
++            Tmp16 = AcpiUtReadUint16 (&Descriptor->UartSerialBus.TypeSpecificFlags);
++            RsSetFlagBits16 (&Tmp16, InitializerOp, 0, 0);
+             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_FLOWCONTROL,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 0, 2);
++            Descriptor->UartSerialBus.TypeSpecificFlags = AcpiUtReadUint16 (&Tmp16);;
+             break;
+ 
+         case 7: /* Rx Buffer Size [WORD] (_RXL) */
+ 
+-            Descriptor->UartSerialBus.RxFifoSize = (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->UartSerialBus.RxFifoSize = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH_RX,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.RxFifoSize));
+             break;
+ 
+         case 8: /* Tx Buffer Size [WORD] (_TXL) */
+ 
+-            Descriptor->UartSerialBus.TxFifoSize = (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->UartSerialBus.TxFifoSize = AcpiUtReadUint16 (&Tmp16);
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH_TX,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TxFifoSize));
+             break;
+@@ -1444,6 +1525,7 @@ RsDoPinFunctionDescriptor (
+     UINT32                  CurrentByteOffset;
+     UINT32                  PinCount = 0;
+     UINT32                  i;
++    UINT16                  Tmp16;
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+     CurrentByteOffset = Info->CurrentByteOffset;
+@@ -1467,7 +1549,7 @@ RsDoPinFunctionDescriptor (
+         sizeof (AML_RESOURCE_LARGE_HEADER));
+ 
+     Descriptor = Rnode->Buffer;
+-    Descriptor->PinFunction.ResourceLength = DescriptorSize;
++    Descriptor->PinFunction.ResourceLength = AcpiUtReadUint16 (&DescriptorSize);
+     Descriptor->PinFunction.DescriptorType = ACPI_RESOURCE_NAME_PIN_FUNCTION;
+     Descriptor->PinFunction.RevisionId = AML_RESOURCE_PIN_FUNCTION_REVISION;
+ 
+@@ -1507,7 +1589,8 @@ RsDoPinFunctionDescriptor (
+ 
+         case 2: /* Function Number [WORD] (_FUN) */
+ 
+-            Descriptor->PinFunction.FunctionNumber = (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->PinFunction.FunctionNumber = AcpiUtReadUint16 (&Tmp16);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_FUNCTION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (PinFunction.FunctionNumber));
+             break;
+@@ -1555,6 +1638,12 @@ RsDoPinFunctionDescriptor (
+             {
+                 Descriptor->PinFunction.VendorLength = VendorLength;
+             }
++            Tmp16 = (UINT16) ACPI_PTR_DIFF (VendorData, Descriptor);
++            Descriptor->PinFunction.VendorOffset = AcpiUtReadUint16 (&Tmp16);
++
++            Tmp16 = Descriptor->PinFunction.VendorLength;
++            Descriptor->PinFunction.VendorLength = AcpiUtReadUint16 (&Tmp16);
++
+             break;
+ 
+         default:
+@@ -1566,7 +1655,8 @@ RsDoPinFunctionDescriptor (
+              *  (implies resource source must immediately follow the pin list.)
+              *  Name: _PIN
+              */
+-            *PinList = (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            *PinList = AcpiUtReadUint16 (&Tmp16);
+             PinList++;
+             PinCount++;
+ 
+@@ -1597,6 +1687,13 @@ RsDoPinFunctionDescriptor (
+         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
+     }
+ 
++    /* correct the endian-ness of the values */
++    Tmp16 = Descriptor->PinFunction.PinTableOffset;
++    Descriptor->PinFunction.PinTableOffset = AcpiUtReadUint16 (&Tmp16);
++
++    Tmp16 = Descriptor->PinFunction.ResSourceOffset;
++    Descriptor->PinFunction.ResSourceOffset = AcpiUtReadUint16 (&Tmp16);
++
+     return (Rnode);
+ }
+ 
+@@ -1630,6 +1727,8 @@ RsDoPinConfigDescriptor (
+     UINT32                  CurrentByteOffset;
+     UINT32                  PinCount = 0;
+     UINT32                  i;
++    UINT16                  Tmp16;
++    UINT32                  Tmp32;
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+     CurrentByteOffset = Info->CurrentByteOffset;
+@@ -1653,7 +1752,7 @@ RsDoPinConfigDescriptor (
+         sizeof (AML_RESOURCE_LARGE_HEADER));
+ 
+     Descriptor = Rnode->Buffer;
+-    Descriptor->PinConfig.ResourceLength = DescriptorSize;
++    Descriptor->PinConfig.ResourceLength = AcpiUtReadUint16 (&DescriptorSize);
+     Descriptor->PinConfig.DescriptorType = ACPI_RESOURCE_NAME_PIN_CONFIG;
+     Descriptor->PinConfig.RevisionId = AML_RESOURCE_PIN_CONFIG_REVISION;
+ 
+@@ -1707,7 +1806,8 @@ RsDoPinConfigDescriptor (
+ 
+         case 2: /* Pin Config Value [DWORD] (_VAL) */
+ 
+-            Descriptor->PinConfig.PinConfigValue = (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->PinConfig.PinConfigValue = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_PINCONFIG_VALUE,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (PinConfig.PinConfigValue));
+             break;
+@@ -1766,7 +1866,8 @@ RsDoPinConfigDescriptor (
+              *  (implies resource source must immediately follow the pin list.)
+              *  Name: _PIN
+              */
+-            *PinList = (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            *PinList = AcpiUtReadUint16 (&Tmp16);
+             PinList++;
+             PinCount++;
+ 
+@@ -1797,6 +1898,16 @@ RsDoPinConfigDescriptor (
+         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
+     }
+ 
++    /* correct the endianness if needed */
++    Tmp16 = Descriptor->PinConfig.PinTableOffset;
++    Descriptor->PinConfig.PinTableOffset = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->PinConfig.ResSourceOffset;
++    Descriptor->PinConfig.ResSourceOffset = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->PinConfig.VendorOffset;
++    Descriptor->PinConfig.VendorOffset = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->PinConfig.VendorLength;
++    Descriptor->PinConfig.VendorLength = AcpiUtReadUint16 (&Tmp16);
++
+     return (Rnode);
+ }
+ 
+@@ -1830,6 +1941,7 @@ RsDoPinGroupDescriptor (
+     UINT32                  CurrentByteOffset;
+     UINT32                  PinCount = 0;
+     UINT32                  i;
++    UINT16                  Tmp16;
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+     CurrentByteOffset = Info->CurrentByteOffset;
+@@ -1853,7 +1965,7 @@ RsDoPinGroupDescriptor (
+         sizeof (AML_RESOURCE_LARGE_HEADER));
+ 
+     Descriptor = Rnode->Buffer;
+-    Descriptor->PinGroup.ResourceLength = DescriptorSize;
++    Descriptor->PinGroup.ResourceLength = AcpiUtReadUint16 (&DescriptorSize);
+     Descriptor->PinGroup.DescriptorType = ACPI_RESOURCE_NAME_PIN_GROUP;
+     Descriptor->PinGroup.RevisionId = AML_RESOURCE_PIN_GROUP_REVISION;
+ 
+@@ -1920,7 +2032,8 @@ RsDoPinGroupDescriptor (
+              *  (implies resource source must immediately follow the pin list.)
+              *  Name: _PIN
+              */
+-            *PinList = (UINT16) InitializerOp->Asl.Value.Integer;
++        Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            *PinList = AcpiUtReadUint16 (&Tmp16);
+             PinList++;
+             PinCount++;
+ 
+@@ -1951,6 +2064,16 @@ RsDoPinGroupDescriptor (
+         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
+     }
+ 
++    /* correct enddianness as needed */
++    Tmp16 = Descriptor->PinGroup.PinTableOffset;
++    Descriptor->PinGroup.PinTableOffset = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->PinGroup.LabelOffset;
++    Descriptor->PinGroup.LabelOffset = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->PinGroup.VendorOffset;
++    Descriptor->PinGroup.VendorOffset = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->PinGroup.VendorLength;
++    Descriptor->PinGroup.VendorLength = AcpiUtReadUint16 (&Tmp16);
++
+     return (Rnode);
+ }
+ 
+@@ -1983,6 +2106,7 @@ RsDoPinGroupFunctionDescriptor (
+     UINT16                  DescriptorSize;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
++    UINT16                  Tmp16;
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+     CurrentByteOffset = Info->CurrentByteOffset;
+@@ -2006,7 +2130,7 @@ RsDoPinGroupFunctionDescriptor (
+         sizeof (AML_RESOURCE_LARGE_HEADER));
+ 
+     Descriptor = Rnode->Buffer;
+-    Descriptor->PinGroupFunction.ResourceLength = DescriptorSize;
++    Descriptor->PinGroupFunction.ResourceLength = AcpiUtReadUint16 (&DescriptorSize);
+     Descriptor->PinGroupFunction.DescriptorType = ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION;
+     Descriptor->PinGroupFunction.RevisionId = AML_RESOURCE_PIN_GROUP_FUNCTION_REVISION;
+ 
+@@ -2038,7 +2162,8 @@ RsDoPinGroupFunctionDescriptor (
+ 
+         case 1: /* Function Number [WORD] */
+ 
+-            Descriptor->PinGroupFunction.FunctionNumber = (UINT16) InitializerOp->Asl.Value.Integer;
++            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
++            Descriptor->PinGroupFunction.FunctionNumber = AcpiUtReadUint16 (&Tmp16);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_FUNCTION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (PinGroupFunction.FunctionNumber));
+             break;
+@@ -2097,6 +2222,16 @@ RsDoPinGroupFunctionDescriptor (
+         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
+     }
+ 
++    /* correct enddianness as needed */
++    Tmp16 = Descriptor->PinGroupFunction.ResSourceOffset;
++    Descriptor->PinGroupFunction.ResSourceOffset = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->PinGroupFunction.ResSourceLabelOffset;
++    Descriptor->PinGroupFunction.ResSourceLabelOffset = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->PinGroupFunction.VendorOffset;
++    Descriptor->PinGroupFunction.VendorOffset = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->PinGroupFunction.VendorLength;
++    Descriptor->PinGroupFunction.VendorLength = AcpiUtReadUint16 (&Tmp16);
++
+     return (Rnode);
+ }
+ 
+@@ -2129,6 +2264,8 @@ RsDoPinGroupConfigDescriptor (
+     UINT16                  DescriptorSize;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
++    UINT16                  Tmp16;
++    UINT32                  Tmp32;
+ 
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+     CurrentByteOffset = Info->CurrentByteOffset;
+@@ -2152,7 +2289,7 @@ RsDoPinGroupConfigDescriptor (
+         sizeof (AML_RESOURCE_LARGE_HEADER));
+ 
+     Descriptor = Rnode->Buffer;
+-    Descriptor->PinGroupConfig.ResourceLength = DescriptorSize;
++    Descriptor->PinGroupConfig.ResourceLength = AcpiUtReadUint16 (&DescriptorSize);
+     Descriptor->PinGroupConfig.DescriptorType = ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG;
+     Descriptor->PinGroupConfig.RevisionId = AML_RESOURCE_PIN_GROUP_CONFIG_REVISION;
+ 
+@@ -2205,7 +2342,8 @@ RsDoPinGroupConfigDescriptor (
+ 
+         case 2: /* Pin Config Value [DWORD] (_VAL) */
+ 
+-            Descriptor->PinGroupConfig.PinConfigValue = (UINT32) InitializerOp->Asl.Value.Integer;
++            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
++            Descriptor->PinGroupConfig.PinConfigValue = AcpiUtReadUint32 (&Tmp32);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_PINCONFIG_VALUE,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (PinGroupConfig.PinConfigValue));
+             break;
+@@ -2266,5 +2404,15 @@ RsDoPinGroupConfigDescriptor (
+         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
+     }
+ 
++    /* correct enddianness as needed */
++    Tmp16 = Descriptor->PinGroupConfig.ResSourceOffset;
++    Descriptor->PinGroupConfig.ResSourceOffset = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->PinGroupConfig.ResSourceLabelOffset;
++    Descriptor->PinGroupConfig.ResSourceLabelOffset = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->PinGroupConfig.VendorOffset;
++    Descriptor->PinGroupConfig.VendorOffset = AcpiUtReadUint16 (&Tmp16);
++    Tmp16 = Descriptor->PinGroupConfig.VendorLength;
++    Descriptor->PinGroupConfig.VendorLength = AcpiUtReadUint16 (&Tmp16);
++
+     return (Rnode);
+ }
diff --git a/SOURCES/0044-Initial-support-for-WPBT-in-big-endian-needs-more.patch b/SOURCES/0044-Initial-support-for-WPBT-in-big-endian-needs-more.patch
new file mode 100644
index 0000000..1a2b1a2
--- /dev/null
+++ b/SOURCES/0044-Initial-support-for-WPBT-in-big-endian-needs-more.patch
@@ -0,0 +1,23 @@
+From bd137d3712e6bc7e4d2d11350a208a36750e4063 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Tue, 6 Jul 2021 18:26:41 -0600
+Subject: [PATCH 44/45] Initial support for WPBT in big-endian, needs more
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/compiler/dttable2.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: acpica-unix2-20210604/source/compiler/dttable2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dttable2.c
++++ acpica-unix2-20210604/source/compiler/dttable2.c
+@@ -2638,7 +2638,7 @@ DtCompileWpbt (
+     AcpiUtWriteUint (&Length, sizeof (UINT16),
+            &Subtable->TotalLength, sizeof (UINT32));
+     Table = ACPI_CAST_PTR (ACPI_TABLE_WPBT, ParentTable->Buffer);
+-    Table->ArgumentsLength = Length;
++    Table->ArgumentsLength = AcpiUtReadUint16 (&Length);
+ 
+     ParentTable = DtPeekSubtable ();
+     DtInsertSubtable (ParentTable, Subtable);
diff --git a/SOURCES/0045-CSRT-fixed-use-of-optional-ResourceInfo.patch b/SOURCES/0045-CSRT-fixed-use-of-optional-ResourceInfo.patch
new file mode 100644
index 0000000..45bfbb5
--- /dev/null
+++ b/SOURCES/0045-CSRT-fixed-use-of-optional-ResourceInfo.patch
@@ -0,0 +1,213 @@
+From 0d87ee42adda7837bec3cc0ff86e40c2f2e8dc4f Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Fri, 9 Jul 2021 14:52:55 -0600
+Subject: [PATCH 45/45] CSRT: fixed use of optional ResourceInfo
+
+In a resource sub-sub-table, there may be a ResourceInfo entry.  Neither
+the compiler nor disassembler accounted for that possibility properly.
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump1.c  | 43 +++++++++++++++++++++-----------------
+ source/compiler/dttable1.c | 28 +++++++++++++------------
+ 2 files changed, 39 insertions(+), 32 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20210604/source/common/dmtbdump1.c
+@@ -374,11 +374,13 @@ AcpiDmDumpCsrt (
+     ACPI_CSRT_GROUP         *Subtable;
+     ACPI_CSRT_SHARED_INFO   *SharedInfoTable;
+     ACPI_CSRT_DESCRIPTOR    *SubSubtable;
+-    UINT32                  Length = AcpiUtReadUint32 (&Table->Length);
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_CSRT);
+     UINT32                  SubOffset;
+     UINT32                  SubSubOffset;
+     UINT32                  InfoLength;
++    UINT32                  SubtableLength;
++    UINT32                  SubSubtableLength;
+ 
+ 
+     /* The main table only contains the ACPI header, thus already handled */
+@@ -386,13 +388,14 @@ AcpiDmDumpCsrt (
+     /* Subtables (Resource Groups) */
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset);
+-    while (Offset < Length)
++    while (Offset < TableLength)
+     {
+         /* Resource group subtable */
+ 
++        SubtableLength = AcpiUtReadUint32 (&Subtable->Length);
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Length, Offset, Subtable,
+-            Subtable->Length, AcpiDmTableInfoCsrt0);
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
++            SubtableLength, AcpiDmTableInfoCsrt0);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+@@ -405,26 +408,28 @@ AcpiDmDumpCsrt (
+             Offset + SubOffset);
+ 
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Length, Offset + SubOffset, SharedInfoTable,
+-            sizeof (ACPI_CSRT_SHARED_INFO), AcpiDmTableInfoCsrt1);
++        Status = AcpiDmDumpTable (TableLength, Offset + SubOffset,
++	    SharedInfoTable, sizeof (ACPI_CSRT_SHARED_INFO),
++	    AcpiDmTableInfoCsrt1);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+         }
+ 
+-        SubOffset += Subtable->SharedInfoLength;
++        SubOffset += AcpiUtReadUint32 (&Subtable->SharedInfoLength);
+ 
+         /* Sub-Subtables (Resource Descriptors) */
+ 
+         SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table,
+             Offset + SubOffset);
+ 
+-        while ((SubOffset < Subtable->Length) &&
+-              ((Offset + SubOffset) < Length))
++        while ((SubOffset < SubtableLength) &&
++              ((Offset + SubOffset) < TableLength))
+         {
++	    SubSubtableLength = AcpiUtReadUint32 (&SubSubtable->Length);
+             AcpiOsPrintf ("\n");
+-            Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubtable,
+-                SubSubtable->Length, AcpiDmTableInfoCsrt2);
++            Status = AcpiDmDumpTable (TableLength, Offset + SubOffset,
++	        SubSubtable, SubSubtableLength, AcpiDmTableInfoCsrt2);
+             if (ACPI_FAILURE (Status))
+             {
+                 return;
+@@ -434,11 +439,12 @@ AcpiDmDumpCsrt (
+ 
+             /* Resource-specific info buffer */
+ 
+-            InfoLength = SubSubtable->Length - SubSubOffset;
++            InfoLength = SubSubtableLength - SubSubOffset;
+             if (InfoLength)
+             {
+-                Status = AcpiDmDumpTable (Length,
+-                    Offset + SubOffset + SubSubOffset, Table,
++                Status = AcpiDmDumpTable (TableLength,
++		    Offset + SubOffset + SubSubOffset,
++		    (UINT8 *)SubSubtable + SubSubOffset,
+                     InfoLength, AcpiDmTableInfoCsrt2a);
+                 if (ACPI_FAILURE (Status))
+                 {
+@@ -448,16 +454,15 @@ AcpiDmDumpCsrt (
+ 
+             /* Point to next sub-subtable */
+ 
+-            SubOffset += SubSubtable->Length;
++            SubOffset += SubSubtableLength;
+             SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, SubSubtable,
+-                SubSubtable->Length);
++                SubSubtableLength);
+         }
+ 
+         /* Point to next subtable */
+ 
+-        Offset += Subtable->Length;
+-        Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Subtable,
+-            Subtable->Length);
++        Offset += SubtableLength;
++        Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Subtable, SubtableLength);
+     }
+ }
+ 
+Index: acpica-unix2-20210604/source/compiler/dttable1.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dttable1.c
++++ acpica-unix2-20210604/source/compiler/dttable1.c
+@@ -353,14 +353,16 @@ DtCompileCsrt (
+     DT_SUBTABLE             *Subtable;
+     DT_SUBTABLE             *ParentTable;
+     DT_FIELD                **PFieldList = (DT_FIELD **) List;
+-    UINT32                  DescriptorCount;
++    UINT32                  DescriptorLength;
+     UINT32                  GroupLength;
+     UINT32                  Tmp;
++    UINT32                  Offset;
+ 
+ 
+     /* Subtables (Resource Groups) */
+ 
+     ParentTable = DtPeekSubtable ();
++                               
+     while (*PFieldList)
+     {
+         /* Resource group subtable */
+@@ -375,16 +377,13 @@ DtCompileCsrt (
+         /* Compute the number of resource descriptors */
+ 
+         Tmp = AcpiUtReadUint32 (&(ACPI_CAST_PTR (ACPI_CSRT_GROUP,
+-                                Subtable->Buffer))->Length);
++                  Subtable->Buffer))->Length);
+         GroupLength = Tmp;
+         Tmp = AcpiUtReadUint32 (&(ACPI_CAST_PTR (ACPI_CSRT_GROUP,
+-                                Subtable->Buffer))->SharedInfoLength);
++                  Subtable->Buffer))->SharedInfoLength);
+         GroupLength -= Tmp;
+         GroupLength -= sizeof (ACPI_CSRT_GROUP);
+ 
+-        DescriptorCount = (GroupLength  /
+-            sizeof (ACPI_CSRT_DESCRIPTOR));
+-
+         DtInsertSubtable (ParentTable, Subtable);
+         DtPushSubtable (Subtable);
+         ParentTable = DtPeekSubtable ();
+@@ -399,10 +398,13 @@ DtCompileCsrt (
+         }
+ 
+         DtInsertSubtable (ParentTable, Subtable);
++        DtPushSubtable (Subtable);
++        ParentTable = DtPeekSubtable ();
+ 
+         /* Sub-Subtables (Resource Descriptors) */
+ 
+-        while (*PFieldList && DescriptorCount)
++        Offset = 0;
++        while (*PFieldList && (Offset < GroupLength))
+         {
+ 
+             Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt2,
+@@ -411,6 +413,10 @@ DtCompileCsrt (
+             {
+                 return (Status);
+             }
++	    DescriptorLength = AcpiUtReadUint32 (
++	                           &(ACPI_CAST_PTR (ACPI_CSRT_GROUP,
++                                   Subtable->Buffer))->Length);
++
+ 
+             DtInsertSubtable (ParentTable, Subtable);
+ 
+@@ -420,11 +426,7 @@ DtCompileCsrt (
+             {
+                 Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt2a,
+                     &Subtable);
+-                if (ACPI_FAILURE (Status))
+-                {
+-                    return (Status);
+-                }
+-                if (Subtable)
++                if (ACPI_SUCCESS (Status) && Subtable)
+                 {
+                     DtInsertSubtable (ParentTable, Subtable);
+                 }
+@@ -432,7 +434,7 @@ DtCompileCsrt (
+ 
+             DtPopSubtable ();
+             ParentTable = DtPeekSubtable ();
+-            DescriptorCount--;
++            Offset += DescriptorLength;
+         }
+ 
+         DtPopSubtable ();
diff --git a/SOURCES/0046-Support-PHAT-in-a-big-endian-world.patch b/SOURCES/0046-Support-PHAT-in-a-big-endian-world.patch
new file mode 100644
index 0000000..011e519
--- /dev/null
+++ b/SOURCES/0046-Support-PHAT-in-a-big-endian-world.patch
@@ -0,0 +1,180 @@
+From 5fd729c8f6c4ce295edd142fc41e03e831ba4afb Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Mon, 12 Jul 2021 09:39:38 -0600
+Subject: [PATCH] Support PHAT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c  | 36 ++++++++++++++++++++----------------
+ source/compiler/dttable2.c | 12 +++++++++---
+ 2 files changed, 29 insertions(+), 19 deletions(-)
+
+Index: acpica-unix2-20210604/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20210604/source/common/dmtbdump2.c
+@@ -1573,39 +1573,41 @@ AcpiDmDumpPhat (
+     ACPI_PHAT_HEADER        *Subtable;
+     ACPI_PHAT_VERSION_DATA  *VersionData;
+     UINT32                  RecordCount;
+-    UINT32                  Length = Table->Length;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_PHAT);
+-    UINT32                  SubtableLength;
++    UINT16                  SubtableLength;
+     UINT32                  PathLength;
+     UINT32                  VendorLength;
++    UINT16                  SubtableType;
+ 
+ 
+     Subtable = ACPI_ADD_PTR (ACPI_PHAT_HEADER, Table, sizeof (ACPI_TABLE_PHAT));
+ 
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         /* Common subtable header */
+ 
++        SubtableType = AcpiUtReadUint16 (&Subtable->Type);
++        SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
++
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Length, 0, Subtable,
++        Status = AcpiDmDumpTable (TableLength, 0, Subtable,
+             sizeof (ACPI_PHAT_HEADER), AcpiDmTableInfoPhatHdr);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+         }
+ 
+-        switch (Subtable->Type)
++        switch (SubtableType)
+         {
+         case ACPI_PHAT_TYPE_FW_VERSION_DATA:
+ 
+             InfoTable = AcpiDmTableInfoPhat0;
+-            SubtableLength = sizeof (ACPI_PHAT_VERSION_DATA);
+             break;
+ 
+         case ACPI_PHAT_TYPE_FW_HEALTH_DATA:
+ 
+             InfoTable = AcpiDmTableInfoPhat1;
+-            SubtableLength = sizeof (ACPI_PHAT_HEALTH_DATA);
+             break;
+ 
+         default:
+@@ -1616,22 +1618,22 @@ AcpiDmDumpPhat (
+             return;
+         }
+ 
+-        Status = AcpiDmDumpTable (Length, 0, Subtable,
++        Status = AcpiDmDumpTable (TableLength, 0, Subtable,
+             SubtableLength, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+         }
+ 
+-        switch (Subtable->Type)
++        switch (SubtableType)
+         {
+         case ACPI_PHAT_TYPE_FW_VERSION_DATA:
+ 
+             VersionData = ACPI_CAST_PTR (ACPI_PHAT_VERSION_DATA, Subtable);
+-            RecordCount = VersionData->ElementCount;
++            RecordCount = AcpiUtReadUint32 (&VersionData->ElementCount);
+             while (RecordCount)
+             {
+-                Status = AcpiDmDumpTable (Length, Offset,
++                Status = AcpiDmDumpTable (TableLength, Offset,
+                     ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_VERSION_DATA)),
+                     sizeof (ACPI_PHAT_VERSION_ELEMENT), AcpiDmTableInfoPhat0a);
+                 if (ACPI_FAILURE (Status))
+@@ -1649,7 +1651,7 @@ AcpiDmDumpPhat (
+             /* account for the null terminator */
+ 
+             PathLength = strlen (ACPI_ADD_PTR (char, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA))) + 1;
+-            Status = AcpiDmDumpTable (Length, Offset,
++            Status = AcpiDmDumpTable (TableLength, Offset,
+                 ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA)),
+                 PathLength, AcpiDmTableInfoPhat1a);
+             if (ACPI_FAILURE (Status))
+@@ -1660,8 +1662,8 @@ AcpiDmDumpPhat (
+             /* Get vendor data - data length is the remaining subtable length */
+ 
+             VendorLength =
+-                Subtable->Length - sizeof (ACPI_PHAT_HEALTH_DATA) - PathLength;
+-            Status = AcpiDmDumpTable (Length, 0,
++                SubtableLength - sizeof (ACPI_PHAT_HEALTH_DATA) - PathLength;
++            Status = AcpiDmDumpTable (TableLength, 0,
+                 ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA) + PathLength),
+                 VendorLength, AcpiDmTableInfoPhat1b);
+             if (ACPI_FAILURE (Status))
+@@ -1673,15 +1675,15 @@ AcpiDmDumpPhat (
+         default:
+ 
+             AcpiOsPrintf ("\n**** Unknown PHAT subtable type 0x%X\n\n",
+-                Subtable->Type);
++                SubtableType);
+             return;
+         }
+ 
+         /* Next subtable */
+ 
+-        Offset += Subtable->Length;
++        Offset += SubtableLength;
+         Subtable = ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable,
+-            Subtable->Length);
++            SubtableLength);
+     }
+ }
+ 
+Index: acpica-unix2-20210604/source/compiler/dttable2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dttable2.c
++++ acpica-unix2-20210604/source/compiler/dttable2.c
+@@ -870,6 +870,8 @@ DtCompilePhat (
+     ACPI_DMTABLE_INFO       *Info;
+     ACPI_PHAT_VERSION_DATA  *VersionData;
+     UINT32                  RecordCount;
++    UINT16                  SubtableType;
++    UINT16                  Tmp16;
+ 
+ 
+     /* The table consist of subtables */
+@@ -887,8 +889,9 @@ DtCompilePhat (
+         DtPushSubtable (Subtable);
+ 
+         PhatHeader = ACPI_CAST_PTR (ACPI_PHAT_HEADER, Subtable->Buffer);
++	SubtableType = AcpiUtReadUint16 (&PhatHeader->Type);
+ 
+-        switch (PhatHeader->Type)
++        switch (SubtableType)
+         {
+         case ACPI_PHAT_TYPE_FW_VERSION_DATA:
+ 
+@@ -919,13 +922,13 @@ DtCompilePhat (
+         ParentTable = DtPeekSubtable ();
+         DtInsertSubtable (ParentTable, Subtable);
+ 
+-        switch (PhatHeader->Type)
++        switch (SubtableType)
+         {
+         case ACPI_PHAT_TYPE_FW_VERSION_DATA:
+ 
+             VersionData = ACPI_CAST_PTR (ACPI_PHAT_VERSION_DATA,
+                 (Subtable->Buffer - sizeof (ACPI_PHAT_HEADER)));
+-            RecordCount = VersionData->ElementCount;
++            RecordCount = AcpiUtReadUint32 (&VersionData->ElementCount);
+ 
+             while (RecordCount)
+             {
+@@ -976,6 +979,9 @@ DtCompilePhat (
+             DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, *PFieldList, "PHAT");
+             return (AE_ERROR);
+         }
++
++	Tmp16 = AcpiUtReadUint16 (&PhatHeader->Length);
++	PhatHeader->Length = Tmp16;
+     }
+ 
+     return (Status);
diff --git a/SOURCES/COPYING b/SOURCES/COPYING
new file mode 100644
index 0000000..d159169
--- /dev/null
+++ b/SOURCES/COPYING
@@ -0,0 +1,339 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/SOURCES/OPT_LDFLAGS.patch b/SOURCES/OPT_LDFLAGS.patch
new file mode 100644
index 0000000..de12ce1
--- /dev/null
+++ b/SOURCES/OPT_LDFLAGS.patch
@@ -0,0 +1,26 @@
+Index: acpica-unix2-20200925/generate/unix/Makefile.config
+===================================================================
+--- acpica-unix2-20200925.orig/generate/unix/Makefile.config
++++ acpica-unix2-20200925/generate/unix/Makefile.config
+@@ -23,6 +23,9 @@
+ # OPT_CFLAGS can be overridden on the make command line by
+ #   adding OPT_CFLAGS="..." to the invocation.
+ #
++# OPT_LDFLAGS can be overridden on the make command line by
++#   adding OPT_LDFLAGS="..." to the invocation.
++#
+ # Notes:
+ #   gcc should be version 4 or greater, otherwise some of the options
+ #     used will not be recognized.
+@@ -164,6 +167,11 @@ LDFLAGS +=-m32
+ endif
+ 
+ #
++# Common linker flags
++#
++OPT_LDFLAGS ?= 
++
++#
+ # Optionally disable optimizations. Optimization causes problems on
+ # some compilers such as gcc 4.4
+ #
diff --git a/SOURCES/README.Fedora b/SOURCES/README.Fedora
new file mode 100644
index 0000000..c1c7f25
--- /dev/null
+++ b/SOURCES/README.Fedora
@@ -0,0 +1,26 @@
+Packaging Notes for Fedora
+==========================
+The upstream source contains documentation that may or may not be licensed
+in a freely redistributable manner.  In an excess of caution, the manuals in
+question have been removed from the source we start with.  You can still get
+your own copies of the documentation from here:
+
+   https://www.acpica.org/documentation/
+
+The two manuals affected are:
+
+   (1) ACPICA Reference Manual, describing the ACPI Component Architecture
+       in some detail, and
+
+   (2) ASL Compiler Reference Manual, describing how to use iasl
+
+While there are man pages for the commands, they are very brief.  The
+documents above are recommended reading.
+
+
+Test Cases
+==========
+The aapits tests do not currently build properly.  They will be added to
+this package once they do.  In the meantime, ASL, template and misc tests
+will be run as part of %check.
+
diff --git a/SOURCES/acpibin.1 b/SOURCES/acpibin.1
new file mode 100644
index 0000000..b8448a5
--- /dev/null
+++ b/SOURCES/acpibin.1
@@ -0,0 +1,64 @@
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH ACPIBIN 1 "January 23, 2013"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+acpibin \- ACPI binary AML file utility
+.SH SYNOPSIS
+.B acpibin
+.RI [ <option> ... ]
+
+.SH DESCRIPTION
+This manual page briefly documents the
+.B acpibin
+command. The option list is taken from the acpibin interactive help.
+.PP
+.\" TeX users may be more comfortable with the \fB<whatever>\fP and
+.\" \fI<whatever>\fP escape sequences to invode bold face and italics, 
+.\" respectively.
+.B acpibin
+is a command provided to perform some basic and common operations on
+AML binary files.
+.PP
+Much more detailed documentation may be found at
+http://www.acpica.org/documentation/.
+
+.SH OPTIONS
+
+.PP
+.TP
+.B \-c <file1> <file2>
+Compare two binary AML files
+.TP
+.B \-d <in> <out>
+Dump AML binary to text file
+.TP
+.B \-e <sig> <in> <out>
+Extract binary AML table from acpidump file
+.TP
+.B \-h <file>
+Display table header for binary AML file
+.TP
+.B \-s <file>
+Update checksum for binary AML file
+.TP
+.B \-t
+Terse mode
+
+.SH AUTHOR
+acpibin was written by Robert Moore <robert.moore@intel.com>.
+.PP
+This manual page was written by Al Stone <ahs3@redhat.com> for the
+Fedora project (but may be used by others).
diff --git a/SOURCES/acpidump.1 b/SOURCES/acpidump.1
new file mode 100644
index 0000000..a3ab061
--- /dev/null
+++ b/SOURCES/acpidump.1
@@ -0,0 +1,106 @@
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH ACPIDUMP 1 "July 24, 2013"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+acpidump \- ACPI table dump utility
+.SH SYNOPSIS
+.B acpidump
+.RI [ <option> ... ]
+
+.SH DESCRIPTION
+This manual page briefly documents the
+.B acpidump
+command.  The option list is taken from the interactive help.
+.PP
+The
+.B acpidump
+command extracts the ACPI tables currently in use from the running
+kernel in a form usable for later processing by the
+.B acpixtract
+command.
+.PP
+Invocation of
+.B acpidump
+without parameters will dump all available ACPI tables.  Multiple mixed
+instances of the
+.B \-a
+,
+.B \-f
+, and
+.B \-n
+parameters can be used.
+
+.SH OPTIONS
+.PP
+.TP
+.B \-b
+Dump tables in binary format (versus the default human-readable form)
+
+.PP
+.TP
+.B \-h | \-?
+Display this help message
+
+.PP
+.TP
+.B \-o <file>
+Redirect output to a file.  This file can be used later by
+.B acpixtract
+to examine the contents of the ACPI tables.
+
+.PP
+.TP
+.B \-s
+Print table summaries only.
+
+.PP
+.TP
+.B \-v
+Print the version of this utility.
+
+.PP
+.TP
+.B \-z
+Verbose mode.
+
+.PP
+.TP
+.B \-a <address>
+Get a table from a physical address (must be superuser and you must be
+careful which address you use -- dmesg will typically report the addresses
+for the various tables).
+
+.PP
+.TP
+.B \-f <binary-file>
+Get a table from a binary file (see the
+.B \-b
+option).
+
+.PP
+.TP
+.B \-n <signature>
+Get a table via it's name or signature (e.g., MADT or SSDT).
+
+.SH SEE ALSO
+.B acpixtract(1)
+
+.SH AUTHOR
+acpidump was written by Robert Moore <robert.moore@intel.com> and
+Chao Guan <chao.guan@intel.com>.
+.PP
+This manual page was written by Al Stone <ahs3@redhat.com> for the
+Fedora project (but may be used by others).
diff --git a/SOURCES/acpiexamples.1 b/SOURCES/acpiexamples.1
new file mode 100644
index 0000000..a48aad6
--- /dev/null
+++ b/SOURCES/acpiexamples.1
@@ -0,0 +1,49 @@
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH ACPIEXAMPLES 1 "August 8, 2018"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+acpiexamples \- program showing what the code examples actually do
+.SH SYNOPSIS
+.B acpiexamples
+
+.SH DESCRIPTION
+This manual page briefly documents the
+.B acpiexamples
+command. This command has no options available.
+.PP
+.\" TeX users may be more comfortable with the \fB<whatever>\fP and
+.\" \fI<whatever>\fP escape sequences to invode bold face and italics, 
+.\" respectively.
+.B acpiexamples
+prints out the results of various calls using the ACPICA source code,
+showing what happens when the calls are made.  These results are from
+building and running the code provided in the
+/usr/share/doc/acpica-tools/examples directory that illustrate the
+proper sequencing of calls and how to make them.
+.PP
+Much more detailed documentation about ACPICA may be found at
+http://www.acpica.org/documentation/.
+
+.SH OPTIONS
+
+.PP
+None
+
+.SH AUTHOR
+acpiexamples was written by Robert Moore <robert.moore@intel.com>.
+.PP
+This manual page was written by Al Stone <ahs3@redhat.com> for the
+Fedora project (but may be used by others).
diff --git a/SOURCES/acpiexec.1 b/SOURCES/acpiexec.1
new file mode 100644
index 0000000..4b77daa
--- /dev/null
+++ b/SOURCES/acpiexec.1
@@ -0,0 +1,102 @@
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH ACPIEXEC 1 "January 23, 2013"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+acpiexec \- ACPI AML execution and debug utility
+.SH SYNOPSIS
+.B acpiexec
+.RI [ <option> ... ]
+.RI <aml-file>
+.B ...
+
+.SH DESCRIPTION
+This manual page briefly documents the
+.B acpiexec
+command. The option list is taken from the acpiexec interactive help.
+.PP
+.\" TeX users may be more comfortable with the \fB<whatever>\fP and
+.\" \fI<whatever>\fP escape sequences to invode bold face and italics, 
+.\" respectively.
+.B acpiexec
+provides a simulated execution environment for AML code so that it
+can be more easily tested and debugged.
+.PP
+Much more detailed documentation may be found at
+http://www.acpica.org/documentation/.
+
+.SH OPTIONS
+
+.PP
+.TP
+.B \-?
+Display the help message
+.TP
+.B \-b "command-line"
+Batch mode command line execution (cmd1;cmd2;...)
+.TP
+.B \-M [<method>]
+Batch mode method execution (Default: MAIN)
+.TP
+.B \-da
+Disable method abort on error
+.TP
+.B \-di
+Disable execution of _STA/_INI methods during init
+.TP
+.B \-do
+Disable Operation Region address simulation
+.TP
+.B \-dr
+Disable repair of method return values
+.TP
+.B \-dt
+Disable allocation tracking (performance)
+.TP
+.B \-ef
+Enable display of final memory statistics
+.TP
+.B \-ei
+Enable additional tests for ACPICA interfaces
+.TP
+.B \-em
+Enable interpreter Serialized mode
+.TP
+.B \-es
+Enable interpreter Slack mode
+.TP
+.B \-et
+Enable debug semaphore timeour
+.TP
+.B \-f <value>
+Operation Region initialization fill value
+.TP
+.B \-r
+Use hardware-reduced FADT V5
+.TP
+.B \-vi
+Verbose initialization output
+.TP
+.B \-vr
+Verbose region handler output
+.TP
+.B \-x <debug-level>
+Debug output level
+
+.SH AUTHOR
+acpiexec was written by Robert Moore <robert.moore@intel.com>.
+.PP
+This manual page was written by Al Stone <ahs3@redhat.com> for the
+Fedora project (but may be used by others).
diff --git a/SOURCES/acpihelp.1 b/SOURCES/acpihelp.1
new file mode 100644
index 0000000..fc61014
--- /dev/null
+++ b/SOURCES/acpihelp.1
@@ -0,0 +1,80 @@
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH ACPIHELP 1 "January 23, 2013"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+acpihelp \- ACPI help utility
+.SH SYNOPSIS
+.B acpihelp
+.RI <option> ...
+.RI [<name-prefix>|<hex-value>]
+
+.SH DESCRIPTION
+This manual page briefly documents the
+.B acpihelp
+command. The option list is taken from the acpihelp interactive help.
+.PP
+.\" TeX users may be more comfortable with the \fB<whatever>\fP and
+.\" \fI<whatever>\fP escape sequences to invode bold face and italics, 
+.\" respectively.
+.B acpihelp
+provides descriptive text for AML and ASL keywords, methods, and opcodes.
+.PP
+Much more detailed documentation may be found at
+http://www.acpica.org/documentation/.
+.PP
+If neither a <name-prefix> or a <hex-value> is provided,
+.B acpihelp
+will do the logical equivalent of a "display all."
+.PP
+A default search (that is, a search with no options) and a <name-prefix>
+can mean two different things: (1) if <name-prefix> does not start with
+an underscore, find ASL operator names, or (2) if <name-prefix> does start
+with an underscore, find ASL predefined method names.
+
+.SH OPTIONS
+
+.PP
+.SS ACPI Names and Symbols
+.TP
+.B \-k [<name-prefix>]
+Find/Display ASL non-operator keyword(s)
+.TP
+.B \-m [<name-prefix>]
+Find/Display AML opcode name(s)
+.TP
+.B \-p [<name-prefix>]
+Find/Display ASL predefined method name(s)
+.TP
+.B \-s [<name-prefix>]
+Find/Display ASL operator name(s)
+
+.PP
+.SS ACPI Values
+.TP
+.B \-e [<hex-value>]
+Decode ACPICA exception code
+.TP
+.B \-i
+Display known ACPI Device IDs (_HID)
+.TP
+.B \-i [<hex-value>]
+Decode hex AML opcode
+
+.SH AUTHOR
+acpihelp was written by Robert Moore <robert.moore@intel.com>.
+.PP
+This manual page was written by Al Stone <ahs3@redhat.com> for the
+Fedora project (but may be used by others).
diff --git a/SOURCES/acpisrc.1 b/SOURCES/acpisrc.1
new file mode 100644
index 0000000..37d8971
--- /dev/null
+++ b/SOURCES/acpisrc.1
@@ -0,0 +1,72 @@
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH ACPISRC 1 "January 23, 2013"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+acpisrc \- ACPICA source code conversion utility
+.SH SYNOPSIS
+.B acpisrc
+.RI [ -c | -l | -u] [-d] [-s] [-v] [-y] <source-dir> <dest-dir>
+.RI <aml-file>
+
+.SH DESCRIPTION
+This manual page briefly documents the
+.B acpisrc
+command. The option list is taken from the acpisrc interactive help.
+.PP
+.\" TeX users may be more comfortable with the \fB<whatever>\fP and
+.\" \fI<whatever>\fP escape sequences to invode bold face and italics, 
+.\" respectively.
+.B acpisrc
+converts the ACPICA into various forms for use with different operating
+systems.
+Source for ACPICA may be obtained from http://www.acpica.org/source/.
+.PP
+Much more detailed documentation may be found at
+http://www.acpica.org/documentation/.
+
+.SH OPTIONS
+
+.PP
+.TP
+.B \-c
+Generate cleaned version of the source
+.TP
+.B \-h
+Insert dual-license header into all module
+.TP
+.B \-l
+Generate Linux version of the source
+.TP
+.B \-u
+Generate custom source translation
+.TP
+.B \-d
+Leave debug statements in code
+.TP
+.B \-s
+Generate source statistics only
+.TP
+.B \-v
+Verbose mode
+.TP
+.B \-y
+Suppress file overwrite prompts
+
+.SH AUTHOR
+acpisrc was written by Robert Moore <robert.moore@intel.com>.
+.PP
+This manual page was written by Al Stone <ahs3@redhat.com> for the
+Fedora project (but may be used by others).
diff --git a/SOURCES/acpixtract.1 b/SOURCES/acpixtract.1
new file mode 100644
index 0000000..65239e9
--- /dev/null
+++ b/SOURCES/acpixtract.1
@@ -0,0 +1,60 @@
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH ACPIXTRACT 1 "January 23, 2013"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+acpixtract \- ACPICA source code conversion utility
+.SH SYNOPSIS
+.B acpixtract
+.RI [ <option> ... ]
+.RI <acpidump-file>
+
+.SH DESCRIPTION
+This manual page briefly documents the
+.B acpixtract
+command. The option list is taken from the acpixtract interactive help.
+.PP
+.\" TeX users may be more comfortable with the \fB<whatever>\fP and
+.\" \fI<whatever>\fP escape sequences to invode bold face and italics, 
+.\" respectively.
+.B acpixtract
+extracts binary ACPI tables from the output of the
+.B acpidump
+command (see the
+.B pm-tools
+package).  A default invocation will extract the DSDT and
+all SSDTs.
+.PP
+Much more detailed documentation may be found at
+http://www.acpica.org/documentation/.
+
+.SH OPTIONS
+
+.PP
+.TP
+.B \-a
+Extract all tables, not just DSDT/SSDT
+.TP
+.B \-l
+List table summaries, do not extract
+.TP
+.B \-s <signature>
+Extract all tables with <signature>
+
+.SH AUTHOR
+acpixtract was written by Robert Moore <robert.moore@intel.com>.
+.PP
+This manual page was written by Al Stone <ahs3@redhat.com> for the
+Fedora project (but may be used by others).
diff --git a/SOURCES/arm7hl.patch b/SOURCES/arm7hl.patch
new file mode 100644
index 0000000..55d4aef
--- /dev/null
+++ b/SOURCES/arm7hl.patch
@@ -0,0 +1,21 @@
+Index: acpica-unix2-20210604/source/include/acmacros.h
+===================================================================
+--- acpica-unix2-20210604.orig/source/include/acmacros.h
++++ acpica-unix2-20210604/source/include/acmacros.h
+@@ -108,6 +108,8 @@
+ 
+ /* 16-bit source, 16/32/64 destination */
+ 
++#define ACPI_MOVE_16_TO_8(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];}
++
+ #define ACPI_MOVE_16_TO_16(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\
+                                          ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[1];}
+ 
+@@ -127,6 +129,7 @@
+ 
+ /* 64-bit source, 16/32/64 destination */
+ 
++#define ACPI_MOVE_64_TO_8(d, s)         ACPI_MOVE_16_TO_8(d, s)    /* Truncate to 8 */
+ #define ACPI_MOVE_64_TO_16(d, s)        ACPI_MOVE_16_TO_16(d, s)    /* Truncate to 16 */
+ #define ACPI_MOVE_64_TO_32(d, s)        ACPI_MOVE_32_TO_32(d, s)    /* Truncate to 32 */
+ #define ACPI_MOVE_64_TO_64(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\
diff --git a/SOURCES/armv7-str-fixes.patch b/SOURCES/armv7-str-fixes.patch
new file mode 100644
index 0000000..fdc2434
--- /dev/null
+++ b/SOURCES/armv7-str-fixes.patch
@@ -0,0 +1,13 @@
+Index: acpica-unix2-20200925/source/include/actypes.h
+===================================================================
+--- acpica-unix2-20200925.orig/source/include/actypes.h
++++ acpica-unix2-20200925/source/include/actypes.h
+@@ -561,7 +561,7 @@ typedef UINT64
+ #define ACPI_COPY_NAMESEG(dest,src)     (*ACPI_CAST_PTR (UINT32, (dest)) = *ACPI_CAST_PTR (UINT32, (src)))
+ #else
+ #define ACPI_COMPARE_NAMESEG(a,b)       (!strncmp (ACPI_CAST_PTR (char, (a)), ACPI_CAST_PTR (char, (b)), ACPI_NAMESEG_SIZE))
+-#define ACPI_COPY_NAMESEG(dest,src)     (strncpy (ACPI_CAST_PTR (char, (dest)), ACPI_CAST_PTR (char, (src)), ACPI_NAMESEG_SIZE))
++#define ACPI_COPY_NAMESEG(dest,src)     (memcpy (ACPI_CAST_PTR (char, (dest)), ACPI_CAST_PTR (char, (src)), ACPI_NAMESEG_SIZE))
+ #endif
+ 
+ /* Support for the special RSDP signature (8 characters) */
diff --git a/SOURCES/badcode.asl.result b/SOURCES/badcode.asl.result
new file mode 100644
index 0000000..100cd4b
--- /dev/null
+++ b/SOURCES/badcode.asl.result
@@ -0,0 +1,266 @@
+badcode.asl     25:     Mutex (MTX1, 32)
+Error    6125 -                      ^ SyncLevel must be in the range 0-15
+
+badcode.asl     29:     Name (BIG, 0x1234567887654321)
+Warning  3038 -                                    ^ Truncating 64-bit constant found in 32-bit table
+
+badcode.asl     33:     Name (PKG1, Package(5) {0,1})
+Remark   2063 -                            ^ Initializer list shorter than declared package length
+
+badcode.asl     37:     Name (PATH, Buffer() {"\_SB_.PCI2._CRS"})
+Warning  3046 -                                ^ Invalid or unknown escape sequence
+
+badcode.asl     41:     Name (ESC1, "abcdefg\x00hijklmn")
+Warning  3055 -                                ^ Invalid Hex/Octal Escape - Non-ASCII or NULL
+
+badcode.asl     49:         FLD1, 8
+Error    6030 -               ^ Access width of Field Unit extends beyond region limit
+
+badcode.asl     55:     Field (OPR2, DWordAcc, NoLock, Preserve)
+Error    6100 -                  ^ Host Operation Region requires ByteAcc access
+
+badcode.asl     60:     Field (OPR3, WordAcc, NoLock, Preserve)
+Error    6099 -                  ^ Host Operation Region requires BufferAcc access
+
+badcode.asl     67:     Method (MTH1, 0, NotSerialized, 32)
+Error    6125 -     SyncLevel must be in the range 0-15 ^ 
+
+badcode.asl     71:         Store (Arg3, Local0)
+Warning  3144 -                              ^ Method Local is set but never used (Local0)
+
+badcode.asl     71:         Store (Arg3, Local0)
+Error    6006 -                      ^ Method argument is not initialized (Arg3)
+
+badcode.asl     71:         Store (Arg3, Local0)
+Remark   2087 -                      ^ Not a parameter, used as local only (Arg3)
+
+badcode.asl     72:         Store (Local1, Local2)
+Warning  3144 -                                ^ Method Local is set but never used (Local2)
+
+badcode.asl     72:         Store (Local1, Local2)
+Error    6066 -                        ^ Method local variable is not initialized (Local1)
+
+badcode.asl     76:         Subtract (MTX1, 4, Local3)
+Warning  3144 - Method Local is set but never used ^  (Local3)
+
+badcode.asl     76:         Subtract (MTX1, 4, Local3)
+Error    6058 -            Invalid type ^  ([Mutex] found, Subtract operator requires [Integer|String|Buffer])
+
+badcode.asl     80:         CreateField (BUF1, 0, Subtract (4, 4), FLD1)
+Remark   2089 -                             Object is not referenced ^  (Name [FLD1] is within a method [MTH1])
+
+badcode.asl     80:         CreateField (BUF1, 0, Subtract (4, 4), FLD1)
+Warning  3083 -              Field length must be non-zero ^ 
+
+badcode.asl     84:         Acquire (MTX1, 100)
+Warning  3130 -                             ^ Result is not used, possible operator timeout will be missed
+
+badcode.asl     85:         Wait (EVT1, 1)
+Warning  3130 -                        ^ Result is not used, possible operator timeout will be missed
+
+badcode.asl     89:         Add (INT1, 8)
+Error    6114 -                    ^ Result is not used, operator has no effect
+
+badcode.asl     94:         Store (5, INT1)
+Warning  3134 -                   ^ Statement is unreachable
+
+badcode.asl     97:     Method (MTH2)
+Remark   2119 -                   ^ Control Method marked Serialized (Due to use of Switch operator)
+
+badcode.asl     97:     Method (MTH2)
+Warning  3115 -                   ^ Not all control paths return a value (\MTH2)
+
+badcode.asl    101:         Switch (ToInteger (INT1))
+Error    6078 -                            ^ No Case statements under Switch
+
+badcode.asl    120:         Store (MTH2 (), Local0)
+Warning  3144 -                                 ^ Method Local is set but never used (Local0)
+
+badcode.asl    120:         Store (MTH2 (), Local0)
+Warning  3122 -                      ^ Called method may not always return a value (\MTH2)
+
+badcode.asl    126:     Method (MTH5) {Store (MTH4(), Local0)}
+Warning  3144 -        Method Local is set but never used ^  (Local0)
+
+badcode.asl    126:     Method (MTH5) {Store (MTH4(), Local0)}
+Error    6080 -  Called method returns no value ^  (\MTH4)
+
+badcode.asl    132:         Name (_HID, "*PNP0C0A")     // Illegal leading asterisk
+Error    6061 -        Invalid leading asterisk ^  (*PNP0C0A)
+
+badcode.asl    136:         Name (_HID, "PNP")          // Too short, must be 7 or 8 chars
+Error    6033 -                            ^ _HID string must be exactly 7 or 8 characters (PNP)
+
+badcode.asl    140:         Name (_HID, "MYDEVICE01")   // Too long, must be 7 or 8 chars
+Error    6033 -                                   ^ _HID string must be exactly 7 or 8 characters (MYDEVICE01)
+
+badcode.asl    144:         Name (_HID, "acpi0001")     // non-hex chars must be uppercase
+Error    6034 -                                 ^ _HID prefix must be all uppercase or decimal digits (acpi0001)
+
+badcode.asl    148:         Name (_HID, "PNP-123")      // HID must be alphanumeric
+Error    6002 -                                ^ String must be entirely alphanumeric (PNP-123)
+
+badcode.asl    152:         Name (_HID, "")             // Illegal Null HID
+Error    6091 -                         ^ Invalid zero-length (null) string
+
+badcode.asl    153:         Name (_CID, "")             // Illegal Null CID
+Error    6091 -                         ^ Invalid zero-length (null) string
+
+badcode.asl    158:     Name (_PRW, 4)
+Error    6105 -                    ^ Invalid object type for reserved name (_PRW: found Integer, Package required)
+
+badcode.asl    159:     Name (_FDI, Buffer () {0})
+Error    6105 -                         ^ Invalid object type for reserved name (_FDI: found Buffer, Package required)
+
+badcode.asl    164:     Method (_OSC, 5)
+Warning  3101 -                   ^ Reserved method has too many arguments (_OSC requires 4)
+
+badcode.asl    164:     Method (_OSC, 5)
+Warning  3107 -                   ^ Reserved method must return a value (Buffer required for _OSC)
+
+badcode.asl    170:     Name (_L01, 1)
+Error    6103 -                 ^ Reserved name must be a control method (with zero arguments)
+
+badcode.asl    171:     Name (_E02, 2)
+Error    6103 -                 ^ Reserved name must be a control method (with zero arguments)
+
+badcode.asl    172:     Name (_Q03, 3)
+Error    6103 -                 ^ Reserved name must be a control method (with zero arguments)
+
+badcode.asl    173:     Name (_ON,  0)
+Error    6103 -                ^ Reserved name must be a control method (with zero arguments)
+
+badcode.asl    174:     Name (_INI, 1)
+Error    6103 -                 ^ Reserved name must be a control method (with zero arguments)
+
+badcode.asl    175:     Name (_PTP, 2)
+Error    6103 -                 ^ Reserved name must be a control method (with arguments)
+
+badcode.asl    184:         Method (_E1D)
+Error    6032 -                       ^ Name conflicts with a previous GPE method (_L1D)
+
+badcode.asl    193:         Return (Buffer(1){0x33})
+Warning  3104 -                         ^ Reserved method should not return a value (_FDM)
+
+badcode.asl    197:         Return ("Unexpected Return Value")
+Warning  3104 -  Reserved method should not return a value ^  (_Q22)
+
+badcode.asl    203:     Device (EC)
+Warning  3141 -                 ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+badcode.asl    205:         Method (_REG, 2)
+Warning  3079 -                       ^ _REG has no corresponding Operation Region
+
+badcode.asl    219:             StartDependentFn (0, 0)
+Error    6019 -                                  ^ Dependent function macros cannot be nested
+
+badcode.asl    225:     })
+Error    6070 -        ^ Missing EndDependentFn() macro in dependent resource list
+
+badcode.asl    242:             0x00002000,         // Length
+Error    6049 -                         ^ Length is larger than Min/Max window
+
+badcode.asl    247:             0x00001001,         // Range Minimum
+Error    6001 -                         ^ Must be a multiple of alignment/granularity value
+
+badcode.asl    248:             0x00002002,         // Range Maximum
+Error    6001 -                         ^ Must be a multiple of alignment/granularity value
+
+badcode.asl    255:             0xFFFF,             // Address
+Warning  3060 -                     ^ Maximum 10-bit ISA address (0x3FF)
+
+badcode.asl    264:             0x05                // Access Size
+Error    6042 -                   ^ Invalid AccessSize (Maximum is 4 - QWord access)
+
+badcode.asl    268:         QWordSpace (0xB0, ResourceConsumer, PosDecode, MinFixed, MaxFixed, 0xA5,
+Error    6139 -     Constant out of range ^  (0xB0, allowable: 0xC0-0xFF)
+
+badcode.asl    279:             0x0200,             // Range Minimum
+Error    6051 -                     ^ Address Min is greater than Address Max
+
+badcode.asl    291:             0x00001002,         // Length
+Error    6049 -                         ^ Length is larger than Min/Max window
+
+badcode.asl    296:             0x00000010,
+Error    6048 -                         ^ Granularity must be zero or a power of two minus one
+
+badcode.asl    305:             0x0000000000000B02, // Range Minimum
+Error    6001 -                                 ^ Must be a multiple of alignment/granularity value
+
+badcode.asl    315:             0x00000000002FFFFE, // Range Maximum
+Error    6001 -                                 ^ Must be a multiple of alignment/granularity value (-1)
+
+badcode.asl    326:             0x00000000,         // Length
+Error    6043 -                         ^ Invalid combination of Length and Min/Max fixed flags
+
+badcode.asl    335:             0x00000100,         // Length
+Error    6043 -                         ^ Invalid combination of Length and Min/Max fixed flags
+
+badcode.asl    344:             0x00000200,         // Length
+Error    6043 -                         ^ Invalid combination of Length and Min/Max fixed flags
+
+badcode.asl    349:             0x0000000F,         // Granularity
+Error    6047 -                         ^ Granularity must be zero for fixed Min/Max
+
+badcode.asl    358:         DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
+Error    6090 -                                    ^ Min/Max/Length/Gran are all zero, but no resource tag
+
+badcode.asl    368:         EndDependentFn ()
+Error    6071 -                            ^ Missing StartDependentFn() macro in dependent resource list
+
+badcode.asl    388:         CreateWordField (RSC3, \DWI1._LEN, LEN)
+Warning  3128 -              ResourceTag larger than Field ^  (Size mismatch, Tag: 32 bits, Field: 16 bits)
+
+badcode.asl    388:         CreateWordField (RSC3, \DWI1._LEN, LEN)
+Remark   2089 -                        Object is not referenced ^  (Name [LEN_] is within a method [REM1])
+
+badcode.asl    389:         CreateByteField (RSC3, \DWI1._MIN, MIN)
+Warning  3128 -              ResourceTag larger than Field ^  (Size mismatch, Tag: 32 bits, Field: 8 bits)
+
+badcode.asl    389:         CreateByteField (RSC3, \DWI1._MIN, MIN)
+Remark   2089 -                        Object is not referenced ^  (Name [MIN_] is within a method [REM1])
+
+badcode.asl    390:         CreateBitField (RSC3, \DWI1._RNG, RNG1)
+Warning  3128 -             ResourceTag larger than Field ^  (Size mismatch, Tag: 2 bits, Field: 1 bit)
+
+badcode.asl    390:         CreateBitField (RSC3, \DWI1._RNG, RNG1)
+Remark   2089 -                        Object is not referenced ^  (Name [RNG1] is within a method [REM1])
+
+badcode.asl    394:         CreateQWordField (RSC3, \DWI1._MAX, MAX)
+Warning  3129 -              ResourceTag smaller than Field ^  (Size mismatch, Tag: 32 bits, Field: 64 bits)
+
+badcode.asl    394:         CreateQWordField (RSC3, \DWI1._MAX, MAX)
+Remark   2089 -                         Object is not referenced ^  (Name [MAX_] is within a method [REM1])
+
+badcode.asl    395:         CreateBitField (RSC3, \DWI1._GRA, GRA)
+Warning  3128 -             ResourceTag larger than Field ^  (Size mismatch, Tag: 32 bits, Field: 1 bit)
+
+badcode.asl    395:         CreateBitField (RSC3, \DWI1._GRA, GRA)
+Remark   2089 -                       Object is not referenced ^  (Name [GRA_] is within a method [REM1])
+
+badcode.asl    396:         CreateField (RSC3, \DWI1._MIF, 5, MIF)
+Warning  3129 -         ResourceTag smaller than Field ^  (Size mismatch, Tag: 1 bit, Field: 5 bits)
+
+badcode.asl    396:         CreateField (RSC3, \DWI1._MIF, 5, MIF)
+Remark   2089 -                       Object is not referenced ^  (Name [MIF_] is within a method [REM1])
+
+badcode.asl    397:         CreateField (RSC3, \DWI1._RNG, 3, RNG2)
+Warning  3129 -         ResourceTag smaller than Field ^  (Size mismatch, Tag: 2 bits, Field: 3 bits)
+
+badcode.asl    397:         CreateField (RSC3, \DWI1._RNG, 3, RNG2)
+Remark   2089 -                        Object is not referenced ^  (Name [RNG2] is within a method [REM1])
+
+badcode.asl    404:         Store (40, Local0)
+Warning  3144 -                            ^ Method Local is set but never used (Local0)
+
+
+Intel ACPI Component Architecture
+ASL+ Optimizing Compiler/Disassembler version VVVVVVVV
+Copyright (c) 2000 - 2021 Intel Corporation
+
+Ignoring all errors, forcing AML file generation
+
+ASL Input:     badcode.asl -   11588 bytes     81 keywords    408 source lines
+AML Output:    badcode.aml -    1195 bytes     20 opcodes      61 named objects
+
+Compilation successful. 45 Errors, 29 Warnings, 11 Remarks, 16 Optimizations, 1 Constants Folded
diff --git a/SOURCES/converterSample.asl.result b/SOURCES/converterSample.asl.result
new file mode 100644
index 0000000..a3b6ca1
--- /dev/null
+++ b/SOURCES/converterSample.asl.result
@@ -0,0 +1,41 @@
+converterSample.asl     15:     Name (b, 5)
+Remark   2182 -                      ^ At least one lower case letter found in NameSeg, ASL is case insensitive - converting to upper case (B___)
+
+converterSample.asl     16:     Name(p008, Package()
+Remark   2182 -                        ^ At least one lower case letter found in NameSeg, ASL is case insensitive - converting to upper case (P008)
+
+converterSample.asl     37:     Method(MAIN) {
+Remark   2120 -                          ^ Control Method should be made Serialized due to creation of named objects within (\MAIN)
+
+converterSample.asl     48:             Name(b,0);
+Remark   2182 -                             ^ At least one lower case letter found in NameSeg, ASL is case insensitive - converting to upper case (B___)
+
+converterSample.asl     48:             Name(b,0);
+Remark   2089 -    Object is not referenced ^  (Name [B___] is within a method [MAIN])
+
+converterSample.asl     53:    Name (a,
+Remark   2182 -                     ^ At least one lower case letter found in NameSeg, ASL is case insensitive - converting to upper case (A___)
+
+converterSample.asl     65:     Method(SCOP)
+Remark   2120 -                          ^ Control Method should be made Serialized due to creation of named objects within (\SCOP)
+
+converterSample.asl     68:         Name (a1, 0x04)
+Remark   2182 -                           ^ At least one lower case letter found in NameSeg, ASL is case insensitive - converting to upper case (A1__)
+
+converterSample.asl     68:         Name (a1, 0x04)
+Remark   2089 -  Object is not referenced ^  (Name [A1__] is within a method [SCOP])
+
+converterSample.asl     76:         Offset(0),//c37
+Remark   2158 -                           ^ Unnecessary/redundant use of Offset operator
+
+
+Intel ACPI Component Architecture
+ASL+ Optimizing Compiler/Disassembler version VVVVVVVV
+Copyright (c) 2000 - 2021 Intel Corporation
+
+Ignoring all errors, forcing AML file generation
+
+ASL Input:     converterSample.asl -    1968 bytes     11 keywords     85 source lines
+AML Output:    converterSample.aml -     182 bytes      2 opcodes       9 named objects
+
+Compilation successful. 0 Errors, 0 Warnings, 10 Remarks, 10 Optimizations
diff --git a/SOURCES/cve-2017-13693.patch b/SOURCES/cve-2017-13693.patch
new file mode 100644
index 0000000..fcda493
--- /dev/null
+++ b/SOURCES/cve-2017-13693.patch
@@ -0,0 +1,99 @@
+From 987a3b5cf7175916e2a4b6ea5b8e70f830dfe732 Mon Sep 17 00:00:00 2001
+From: Seunghun Han <kkamagui@gmail.com>
+Date: Wed, 19 Jul 2017 16:47:53 +0900
+Subject: [PATCH] acpi: acpica: fix acpi operand cache leak in dswstate.c
+
+I found an ACPI cache leak in ACPI early termination and boot continuing case.
+
+When early termination occurs due to malicious ACPI table, Linux kernel
+terminates ACPI function and continues to boot process. While kernel terminates
+ACPI function, kmem_cache_destroy() reports Acpi-Operand cache leak.
+
+Boot log of ACPI operand cache leak is as follows:
+>[    0.585957] ACPI: Added _OSI(Module Device)
+>[    0.587218] ACPI: Added _OSI(Processor Device)
+>[    0.588530] ACPI: Added _OSI(3.0 _SCP Extensions)
+>[    0.589790] ACPI: Added _OSI(Processor Aggregator Device)
+>[    0.591534] ACPI Error: Illegal I/O port address/length above 64K: C806E00000004002/0x2 (20170303/hwvalid-155)
+>[    0.594351] ACPI Exception: AE_LIMIT, Unable to initialize fixed events (20170303/evevent-88)
+>[    0.597858] ACPI: Unable to start the ACPI Interpreter
+>[    0.599162] ACPI Error: Could not remove SCI handler (20170303/evmisc-281)
+>[    0.601836] kmem_cache_destroy Acpi-Operand: Slab cache still has objects
+>[    0.603556] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.12.0-rc5 #26
+>[    0.605159] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
+>[    0.609177] Call Trace:
+>[    0.610063]  ? dump_stack+0x5c/0x81
+>[    0.611118]  ? kmem_cache_destroy+0x1aa/0x1c0
+>[    0.612632]  ? acpi_sleep_proc_init+0x27/0x27
+>[    0.613906]  ? acpi_os_delete_cache+0xa/0x10
+>[    0.617986]  ? acpi_ut_delete_caches+0x3f/0x7b
+>[    0.619293]  ? acpi_terminate+0xa/0x14
+>[    0.620394]  ? acpi_init+0x2af/0x34f
+>[    0.621616]  ? __class_create+0x4c/0x80
+>[    0.623412]  ? video_setup+0x7f/0x7f
+>[    0.624585]  ? acpi_sleep_proc_init+0x27/0x27
+>[    0.625861]  ? do_one_initcall+0x4e/0x1a0
+>[    0.627513]  ? kernel_init_freeable+0x19e/0x21f
+>[    0.628972]  ? rest_init+0x80/0x80
+>[    0.630043]  ? kernel_init+0xa/0x100
+>[    0.631084]  ? ret_from_fork+0x25/0x30
+>[    0.633343] vgaarb: loaded
+>[    0.635036] EDAC MC: Ver: 3.0.0
+>[    0.638601] PCI: Probing PCI hardware
+>[    0.639833] PCI host bridge to bus 0000:00
+>[    0.641031] pci_bus 0000:00: root bus resource [io  0x0000-0xffff]
+> ... Continue to boot and log is omitted ...
+
+I analyzed this memory leak in detail and found acpi_ds_obj_stack_pop_and_
+delete() function miscalculated the top of the stack. acpi_ds_obj_stack_push()
+function uses walk_state->operand_index for start position of the top, but
+acpi_ds_obj_stack_pop_and_delete() function considers index 0 for it.
+Therefore, this causes acpi operand memory leak.
+
+This cache leak causes a security threat because an old kernel (<= 4.9) shows
+memory locations of kernel functions in stack dump. Some malicious users
+could use this information to neutralize kernel ASLR.
+
+I made a patch to fix ACPI operand cache leak.
+
+Signed-off-by: Seunghun Han <kkamagui@gmail.com>
+
+Github-Location: https://github.com/acpica/acpica/pull/295/commits/987a3b5cf7175916e2a4b6ea5b8e70f830dfe732
+---
+ source/components/dispatcher/dsutils.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+Index: acpica-unix2-20200925/source/components/dispatcher/dsutils.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/components/dispatcher/dsutils.c
++++ acpica-unix2-20200925/source/components/dispatcher/dsutils.c
+@@ -759,6 +759,8 @@ AcpiDsCreateOperands (
+     ACPI_PARSE_OBJECT       *Arguments[ACPI_OBJ_NUM_OPERANDS];
+     UINT32                  ArgCount = 0;
+     UINT32                  Index = WalkState->NumOperands;
++    UINT32                  PrevNumOperands = WalkState->NumOperands;
++    UINT32                  NewNumOperands;
+     UINT32                  i;
+ 
+ 
+@@ -791,6 +793,7 @@ AcpiDsCreateOperands (
+ 
+     /* Create the interpreter arguments, in reverse order */
+ 
++    NewNumOperands = Index;
+     Index--;
+     for (i = 0; i < ArgCount; i++)
+     {
+@@ -818,7 +821,11 @@ Cleanup:
+      * pop everything off of the operand stack and delete those
+      * objects
+      */
+-    AcpiDsObjStackPopAndDelete (ArgCount, WalkState);
++    WalkState->NumOperands = i;
++    AcpiDsObjStackPopAndDelete (NewNumOperands, WalkState);
++
++    /* Restore operand count */
++    WalkState->NumOperands = PrevNumOperands;
+ 
+     ACPI_EXCEPTION ((AE_INFO, Status, "While creating Arg %u", Index));
+     return_ACPI_STATUS (Status);
diff --git a/SOURCES/cve-2017-13694.patch b/SOURCES/cve-2017-13694.patch
new file mode 100644
index 0000000..40c1c08
--- /dev/null
+++ b/SOURCES/cve-2017-13694.patch
@@ -0,0 +1,216 @@
+From 4a0243ecb4c94e2d73510d096c5ea4d0711fc6c0 Mon Sep 17 00:00:00 2001
+From: Seunghun Han <kkamagui@gmail.com>
+Date: Fri, 23 Jun 2017 14:19:48 +0900
+Subject: [PATCH] acpi: acpica: fix acpi parse and parseext cache leaks
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+I'm Seunghun Han, and I work for National Security Research Institute of
+South Korea.
+
+I have been doing a research on ACPI and found an ACPI cache leak in ACPI
+early abort cases.
+
+Boot log of ACPI cache leak is as follows:
+[    0.352414] ACPI: Added _OSI(Module Device)
+[    0.353182] ACPI: Added _OSI(Processor Device)
+[    0.353182] ACPI: Added _OSI(3.0 _SCP Extensions)
+[    0.353182] ACPI: Added _OSI(Processor Aggregator Device)
+[    0.356028] ACPI: Unable to start the ACPI Interpreter
+[    0.356799] ACPI Error: Could not remove SCI handler (20170303/evmisc-281)
+[    0.360215] kmem_cache_destroy Acpi-State: Slab cache still has objects
+[    0.360648] CPU: 0 PID: 1 Comm: swapper/0 Tainted: G        W
+4.12.0-rc4-next-20170608+ #10
+[    0.361273] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS
+VirtualBox 12/01/2006
+[    0.361873] Call Trace:
+[    0.362243]  ? dump_stack+0x5c/0x81
+[    0.362591]  ? kmem_cache_destroy+0x1aa/0x1c0
+[    0.362944]  ? acpi_sleep_proc_init+0x27/0x27
+[    0.363296]  ? acpi_os_delete_cache+0xa/0x10
+[    0.363646]  ? acpi_ut_delete_caches+0x6d/0x7b
+[    0.364000]  ? acpi_terminate+0xa/0x14
+[    0.364000]  ? acpi_init+0x2af/0x34f
+[    0.364000]  ? __class_create+0x4c/0x80
+[    0.364000]  ? video_setup+0x7f/0x7f
+[    0.364000]  ? acpi_sleep_proc_init+0x27/0x27
+[    0.364000]  ? do_one_initcall+0x4e/0x1a0
+[    0.364000]  ? kernel_init_freeable+0x189/0x20a
+[    0.364000]  ? rest_init+0xc0/0xc0
+[    0.364000]  ? kernel_init+0xa/0x100
+[    0.364000]  ? ret_from_fork+0x25/0x30
+
+I analyzed this memory leak in detail. I found that “Acpi-State” cache and
+“Acpi-Parse” cache were merged because the size of cache objects was same
+slab cache size.
+
+I finally found “Acpi-Parse” cache and “Acpi-ParseExt” cache were leaked
+using SLAB_NEVER_MERGE flag in kmem_cache_create() function.
+
+Real ACPI cache leak point is as follows:
+[    0.360101] ACPI: Added _OSI(Module Device)
+[    0.360101] ACPI: Added _OSI(Processor Device)
+[    0.360101] ACPI: Added _OSI(3.0 _SCP Extensions)
+[    0.361043] ACPI: Added _OSI(Processor Aggregator Device)
+[    0.364016] ACPI: Unable to start the ACPI Interpreter
+[    0.365061] ACPI Error: Could not remove SCI handler (20170303/evmisc-281)
+[    0.368174] kmem_cache_destroy Acpi-Parse: Slab cache still has objects
+[    0.369332] CPU: 1 PID: 1 Comm: swapper/0 Tainted: G        W
+4.12.0-rc4-next-20170608+ #8
+[    0.371256] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS
+VirtualBox 12/01/2006
+[    0.372000] Call Trace:
+[    0.372000]  ? dump_stack+0x5c/0x81
+[    0.372000]  ? kmem_cache_destroy+0x1aa/0x1c0
+[    0.372000]  ? acpi_sleep_proc_init+0x27/0x27
+[    0.372000]  ? acpi_os_delete_cache+0xa/0x10
+[    0.372000]  ? acpi_ut_delete_caches+0x56/0x7b
+[    0.372000]  ? acpi_terminate+0xa/0x14
+[    0.372000]  ? acpi_init+0x2af/0x34f
+[    0.372000]  ? __class_create+0x4c/0x80
+[    0.372000]  ? video_setup+0x7f/0x7f
+[    0.372000]  ? acpi_sleep_proc_init+0x27/0x27
+[    0.372000]  ? do_one_initcall+0x4e/0x1a0
+[    0.372000]  ? kernel_init_freeable+0x189/0x20a
+[    0.372000]  ? rest_init+0xc0/0xc0
+[    0.372000]  ? kernel_init+0xa/0x100
+[    0.372000]  ? ret_from_fork+0x25/0x30
+[    0.388039] kmem_cache_destroy Acpi-ParseExt: Slab cache still has objects
+[    0.389063] CPU: 1 PID: 1 Comm: swapper/0 Tainted: G        W
+4.12.0-rc4-next-20170608+ #8
+[    0.390557] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS
+VirtualBox 12/01/2006
+[    0.392000] Call Trace:
+[    0.392000]  ? dump_stack+0x5c/0x81
+[    0.392000]  ? kmem_cache_destroy+0x1aa/0x1c0
+[    0.392000]  ? acpi_sleep_proc_init+0x27/0x27
+[    0.392000]  ? acpi_os_delete_cache+0xa/0x10
+[    0.392000]  ? acpi_ut_delete_caches+0x6d/0x7b
+[    0.392000]  ? acpi_terminate+0xa/0x14
+[    0.392000]  ? acpi_init+0x2af/0x34f
+[    0.392000]  ? __class_create+0x4c/0x80
+[    0.392000]  ? video_setup+0x7f/0x7f
+[    0.392000]  ? acpi_sleep_proc_init+0x27/0x27
+[    0.392000]  ? do_one_initcall+0x4e/0x1a0
+[    0.392000]  ? kernel_init_freeable+0x189/0x20a
+[    0.392000]  ? rest_init+0xc0/0xc0
+[    0.392000]  ? kernel_init+0xa/0x100
+[    0.392000]  ? ret_from_fork+0x25/0x30
+
+When early abort is occurred due to invalid ACPI information, Linux kernel
+terminates ACPI by calling acpi_terminate() function. The function calls
+acpi_ut_delete_caches() function to delete local caches (acpi_gbl_namespace_
+cache, state_cache, operand_cache, ps_node_cache, ps_node_ext_cache).
+
+But the deletion codes in acpi_ut_delete_caches() function only delete
+slab caches using kmem_cache_destroy() function, therefore the cache
+objects should be flushed before acpi_ut_delete_caches() function.
+
+“Acpi-Parse” cache and “Acpi-ParseExt” cache are used in an AML parse
+function, acpi_ps_parse_loop(). The function should have flush codes to
+handle an error state due to invalid AML codes.
+
+This cache leak has a security threat because an old kernel (<= 4.9) shows
+memory locations of kernel functions in stack dump. Some malicious users
+could use this information to neutralize kernel ASLR.
+
+To fix ACPI cache leak for enhancing security, I made a patch which has
+flush codes in acpi_ps_parse_loop() function.
+
+I hope that this patch improves the security of Linux kernel.
+
+Thank you.
+
+Signed-off-by: Seunghun Han <kkamagui@gmail.com>
+
+Github-Location: https://github.com/acpica/acpica/pull/278/commits/4a0243ecb4c94e2d73510d096c5ea4d0711fc6c0
+
+---
+ source/components/parser/psobject.c | 44 ++++++++++++++-----------------------
+ 1 file changed, 16 insertions(+), 28 deletions(-)
+
+Index: acpica-unix2-20200925/source/components/parser/psobject.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/components/parser/psobject.c
++++ acpica-unix2-20200925/source/components/parser/psobject.c
+@@ -707,7 +707,8 @@ AcpiPsCompleteFinalOp (
+     ACPI_PARSE_OBJECT       *Op,
+     ACPI_STATUS             Status)
+ {
+-    ACPI_STATUS             Status2;
++    ACPI_STATUS             ReturnStatus = AE_OK;
++    BOOLEAN                 Ascending = TRUE;
+ 
+ 
+     ACPI_FUNCTION_TRACE_PTR (PsCompleteFinalOp, WalkState);
+@@ -724,7 +725,7 @@ AcpiPsCompleteFinalOp (
+     {
+         if (Op)
+         {
+-            if (WalkState->AscendingCallback != NULL)
++            if (Ascending && WalkState->AscendingCallback != NULL)
+             {
+                 WalkState->Op = Op;
+                 WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
+@@ -743,41 +744,28 @@ AcpiPsCompleteFinalOp (
+ 
+                 if (Status == AE_CTRL_TERMINATE)
+                 {
+-                    Status = AE_OK;
+-
+-                    /* Clean up */
+-                    do
+-                    {
+-                        if (Op)
+-                        {
+-                            Status2 = AcpiPsCompleteThisOp (WalkState, Op);
+-                            if (ACPI_FAILURE (Status2))
+-                            {
+-                                return_ACPI_STATUS (Status2);
+-                            }
+-                        }
+-
+-                        AcpiPsPopScope (&(WalkState->ParserState), &Op,
+-                            &WalkState->ArgTypes, &WalkState->ArgCount);
+-
+-                    } while (Op);
+-
+-                    return_ACPI_STATUS (Status);
++                    Ascending = FALSE;
++                    ReturnStatus = AE_CTRL_TERMINATE;
+                 }
+ 
+                 else if (ACPI_FAILURE (Status))
+                 {
+                     /* First error is most important */
+ 
+-                    (void) AcpiPsCompleteThisOp (WalkState, Op);
+-                    return_ACPI_STATUS (Status);
++                    Ascending = FALSE;
++                    ReturnStatus = Status;
+                 }
+             }
+ 
+-            Status2 = AcpiPsCompleteThisOp (WalkState, Op);
+-            if (ACPI_FAILURE (Status2))
++            Status = AcpiPsCompleteThisOp (WalkState, Op);
++            if (ACPI_FAILURE (Status))
+             {
+-                return_ACPI_STATUS (Status2);
++                Ascending = FALSE;
++                if (ACPI_SUCCESS (ReturnStatus) ||
++                    ReturnStatus == AE_CTRL_TERMINATE)
++                {
++                    ReturnStatus = Status;
++                }
+             }
+         }
+ 
+@@ -786,5 +774,5 @@ AcpiPsCompleteFinalOp (
+ 
+     } while (Op);
+ 
+-    return_ACPI_STATUS (Status);
++    return_ACPI_STATUS (ReturnStatus);
+ }
diff --git a/SOURCES/cve-2017-13695.patch b/SOURCES/cve-2017-13695.patch
new file mode 100644
index 0000000..f521a16
--- /dev/null
+++ b/SOURCES/cve-2017-13695.patch
@@ -0,0 +1,90 @@
+From 37f2c716f2c6ab14c3ba557a539c3ee3224931b5 Mon Sep 17 00:00:00 2001
+From: Seunghun Han <kkamagui@gmail.com>
+Date: Wed, 19 Jul 2017 17:04:44 +0900
+Subject: [PATCH] acpi: acpica: fix acpi operand cache leak in nseval.c
+
+I found an ACPI cache leak in ACPI early termination and boot continuing case.
+
+When early termination occurs due to malicious ACPI table, Linux kernel
+terminates ACPI function and continues to boot process. While kernel terminates
+ACPI function, kmem_cache_destroy() reports Acpi-Operand cache leak.
+
+Boot log of ACPI operand cache leak is as follows:
+>[    0.464168] ACPI: Added _OSI(Module Device)
+>[    0.467022] ACPI: Added _OSI(Processor Device)
+>[    0.469376] ACPI: Added _OSI(3.0 _SCP Extensions)
+>[    0.471647] ACPI: Added _OSI(Processor Aggregator Device)
+>[    0.477997] ACPI Error: Null stack entry at ffff880215c0aad8 (20170303/exresop-174)
+>[    0.482706] ACPI Exception: AE_AML_INTERNAL, While resolving operands for [OpcodeName unavailable] (20170303/dswexec-461)
+>[    0.487503] ACPI Error: Method parse/execution failed [\DBG] (Node ffff88021710ab40), AE_AML_INTERNAL (20170303/psparse-543)
+>[    0.492136] ACPI Error: Method parse/execution failed [\_SB._INI] (Node ffff88021710a618), AE_AML_INTERNAL (20170303/psparse-543)
+>[    0.497683] ACPI: Interpreter enabled
+>[    0.499385] ACPI: (supports S0)
+>[    0.501151] ACPI: Using IOAPIC for interrupt routing
+>[    0.503342] ACPI Error: Null stack entry at ffff880215c0aad8 (20170303/exresop-174)
+>[    0.506522] ACPI Exception: AE_AML_INTERNAL, While resolving operands for [OpcodeName unavailable] (20170303/dswexec-461)
+>[    0.510463] ACPI Error: Method parse/execution failed [\DBG] (Node ffff88021710ab40), AE_AML_INTERNAL (20170303/psparse-543)
+>[    0.514477] ACPI Error: Method parse/execution failed [\_PIC] (Node ffff88021710ab18), AE_AML_INTERNAL (20170303/psparse-543)
+>[    0.518867] ACPI Exception: AE_AML_INTERNAL, Evaluating _PIC (20170303/bus-991)
+>[    0.522384] kmem_cache_destroy Acpi-Operand: Slab cache still has objects
+>[    0.524597] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 4.12.0-rc5 #26
+>[    0.526795] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
+>[    0.529668] Call Trace:
+>[    0.530811]  ? dump_stack+0x5c/0x81
+>[    0.532240]  ? kmem_cache_destroy+0x1aa/0x1c0
+>[    0.533905]  ? acpi_os_delete_cache+0xa/0x10
+>[    0.535497]  ? acpi_ut_delete_caches+0x3f/0x7b
+>[    0.537237]  ? acpi_terminate+0xa/0x14
+>[    0.538701]  ? acpi_init+0x2af/0x34f
+>[    0.540008]  ? acpi_sleep_proc_init+0x27/0x27
+>[    0.541593]  ? do_one_initcall+0x4e/0x1a0
+>[    0.543008]  ? kernel_init_freeable+0x19e/0x21f
+>[    0.546202]  ? rest_init+0x80/0x80
+>[    0.547513]  ? kernel_init+0xa/0x100
+>[    0.548817]  ? ret_from_fork+0x25/0x30
+>[    0.550587] vgaarb: loaded
+>[    0.551716] EDAC MC: Ver: 3.0.0
+>[    0.553744] PCI: Probing PCI hardware
+>[    0.555038] PCI host bridge to bus 0000:00
+> ... Continue to boot and log is omitted ...
+
+I analyzed this memory leak in detail and found AcpiNsEvaluate() function
+only removes Info->ReturnObject in AE_CTRL_RETURN_VALUE case. But, when errors
+occur, the status value is not AE_CTRL_RETURN_VALUE, and Info->ReturnObject is
+also not null. Therefore, this causes acpi operand memory leak.
+
+This cache leak causes a security threat because an old kernel (<= 4.9) shows
+memory locations of kernel functions in stack dump. Some malicious users
+could use this information to neutralize kernel ASLR.
+
+I made a patch to fix ACPI operand cache leak.
+
+Signed-off-by: Seunghun Han <kkamagui@gmail.com>
+
+Github-Location: https://github.com/acpica/acpica/pull/296/commits/37f2c716f2c6ab14c3ba557a539c3ee3224931b5
+
+---
+ source/components/namespace/nseval.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+Index: acpica-unix2-20200925/source/components/namespace/nseval.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/components/namespace/nseval.c
++++ acpica-unix2-20200925/source/components/namespace/nseval.c
+@@ -329,6 +329,16 @@ AcpiNsEvaluate (
+             Info->ReturnObject = NULL;
+         }
+     }
++    else if (ACPI_FAILURE(Status)) 
++    {
++        /* If ReturnObject exists, delete it */
++
++        if (Info->ReturnObject) 
++        {
++            AcpiUtRemoveReference (Info->ReturnObject);
++            Info->ReturnObject = NULL;
++        }
++    }
+ 
+     ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
+         "*** Completed evaluation of object %s ***\n",
diff --git a/SOURCES/dbtest.patch b/SOURCES/dbtest.patch
new file mode 100644
index 0000000..6cf7f28
--- /dev/null
+++ b/SOURCES/dbtest.patch
@@ -0,0 +1,40 @@
+On s390, GCC does not like the string initialization in this case.  When
+ValueToWrite is initialized this way, GCC tries to copy the entire string
+into an ACPI_OBJECT instead of just the pointer (see the use in the call
+to memcpy()).  So, move the init so GCC recognizes that ValueToWrite is
+only a pointer, and not a whole string that needs to be moved.
+
+Index: acpica-unix2-20200925/source/components/debugger/dbtest.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/components/debugger/dbtest.c
++++ acpica-unix2-20200925/source/components/debugger/dbtest.c
+@@ -719,9 +719,10 @@ AcpiDbTestStringType (
+     ACPI_OBJECT             *Temp1 = NULL;
+     ACPI_OBJECT             *Temp2 = NULL;
+     ACPI_OBJECT             *Temp3 = NULL;
+-    char                    *ValueToWrite = "Test String from AML Debugger";
++    char                    *ValueToWrite = NULL;
+     ACPI_OBJECT             WriteValue;
+     ACPI_STATUS             Status;
++    const char              *TestStr = "Test String from AML Debugger";
+ 
+ 
+     /* Read the original value */
+@@ -737,6 +738,9 @@ AcpiDbTestStringType (
+ 
+     /* Write a new value */
+ 
++    ValueToWrite = AcpiOsAllocateZeroed(strlen(TestStr)+1);
++    strncpy(ValueToWrite, TestStr, strlen(TestStr)+1);
++
+     WriteValue.Type = ACPI_TYPE_STRING;
+     WriteValue.String.Length = strlen (ValueToWrite);
+     WriteValue.String.Pointer = ValueToWrite;
+@@ -790,6 +794,7 @@ Exit:
+     if (Temp1) {AcpiOsFree (Temp1);}
+     if (Temp2) {AcpiOsFree (Temp2);}
+     if (Temp3) {AcpiOsFree (Temp3);}
++    if (ValueToWrite) {AcpiOsFree (ValueToWrite);}
+     return (Status);
+ }
+ 
diff --git a/SOURCES/f23-harden.patch b/SOURCES/f23-harden.patch
new file mode 100644
index 0000000..e1fbbbd
--- /dev/null
+++ b/SOURCES/f23-harden.patch
@@ -0,0 +1,71 @@
+Introduce build hardening flags for f23
+
+From: Al Stone <ahs3@redhat.com>
+
+
+---
+ generate/unix/Makefile.config |    2 ++
+ generate/unix/iasl/Makefile   |   13 +++++++------
+ 2 files changed, 9 insertions(+), 6 deletions(-)
+
+Index: acpica-unix2-20200925/generate/unix/Makefile.config
+===================================================================
+--- acpica-unix2-20200925.orig/generate/unix/Makefile.config
++++ acpica-unix2-20200925/generate/unix/Makefile.config
+@@ -189,6 +189,8 @@ ifneq ($(NOFORTIFY),TRUE)
+ OPT_CFLAGS += -D_FORTIFY_SOURCE=2
+ endif
+ 
++OPT_CFLAGS += -fPIC -pie
++
+ CFLAGS += \
+     -D$(ACPI_HOST)\
+     -D_GNU_SOURCE\
+Index: acpica-unix2-20200925/generate/unix/iasl/Makefile
+===================================================================
+--- acpica-unix2-20200925.orig/generate/unix/iasl/Makefile
++++ acpica-unix2-20200925/generate/unix/iasl/Makefile
+@@ -359,34 +359,35 @@ $(OBJDIR)/prparserparse.c $(OBJDIR)/prpa
+ # Cannot use the common compile warning flags since the C files are created
+ # by the utilities above and they are not necessarily ANSI C, etc.
+ #
++HARDENING_FLAGS = -fPIC -pie
+ $(OBJDIR)/aslcompilerlex.o :   $(OBJDIR)/aslcompilerlex.c
+ 	@echo "- " "Intermediate" $<
+-	@$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $<
++	@$(CC) -c $(CFLAGS) $(HARDENING_FLAGS) -Wall -Werror -o$@ $<
+ 
+ $(OBJDIR)/aslcompilerparse.o : $(OBJDIR)/aslcompilerparse.c
+ 	@echo "- " "Intermediate" $<
+-	@$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $<
++	@$(CC) -c $(CFLAGS) $(HARDENING_FLAGS) -Wall -Werror -o$@ $<
+ 
+ $(OBJDIR)/dtcompilerparserlex.o :      $(OBJDIR)/dtcompilerparserlex.c
+ 	@echo "- " "Intermediate" $<
+-	@$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $<
++	@$(CC) -c $(CFLAGS) $(HARDENING_FLAGS) -Wall -Werror -o$@ $<
+ 
+ $(OBJDIR)/dtcompilerparserparse.o :    $(OBJDIR)/dtcompilerparserparse.c
+ 	@echo "- " "Intermediate" $<
+-	@$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $<
++	@$(CC) -c $(CFLAGS) $(HARDENING_FLAGS) -Wall -Werror -o$@ $<
+ 
+ $(OBJDIR)/dtparserlex.o :      $(OBJDIR)/dtparserlex.c
+ 	@echo "- " "Intermediate" $<
+-	@$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $<
++	@$(CC) -c $(CFLAGS) $(HARDENING_FLAGS) -Wall -Werror -o$@ $<
+ 
+ $(OBJDIR)/dtparserparse.o :    $(OBJDIR)/dtparserparse.c
+ 	@echo "- " "Intermediate" $<
+-	@$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $<
++	@$(CC) -c $(CFLAGS) $(HARDENING_FLAGS) -Wall -Werror -o$@ $<
+ 
+ $(OBJDIR)/prparserlex.o :      $(OBJDIR)/prparserlex.c
+ 	@echo "- " "Intermediate" $<
+-	@$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $<
++	@$(CC) -c $(CFLAGS) $(HARDENING_FLAGS) -Wall -Werror -o$@ $<
+ 
+ $(OBJDIR)/prparserparse.o :    $(OBJDIR)/prparserparse.c
+ 	@echo "- " "Intermediate" $<
+-	@$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $<
++	@$(CC) -c $(CFLAGS) $(HARDENING_FLAGS) -Wall -Werror -o$@ $<
diff --git a/SOURCES/facp.patch b/SOURCES/facp.patch
new file mode 100644
index 0000000..1d7ffee
--- /dev/null
+++ b/SOURCES/facp.patch
@@ -0,0 +1,28 @@
+From 7670c56ebe004e698551635f9c5d48a1794066dd Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@ahs3.net>
+Date: Wed, 19 Dec 2018 16:52:41 -0700
+Subject: [PATCH] Correct DSDT Address field in FACP tables
+
+The FADT allows either the DSDT Address or XDSDT Address field to be
+zero.  However, the table definition used by the table compiler still
+requires the DSDT Address to be non-zero, which is not correct.  So,
+remove the DT_NON_ZERO flag from the field.
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbinfo.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: acpica-unix2-20200925/source/common/dmtbinfo.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/common/dmtbinfo.c
++++ acpica-unix2-20200925/source/common/dmtbinfo.c
+@@ -184,7 +184,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableI
+ ACPI_DMTABLE_INFO           AcpiDmTableInfoFadt1[] =
+ {
+     {ACPI_DMT_UINT32,   ACPI_FADT_OFFSET (Facs),                    "FACS Address", 0},
+-    {ACPI_DMT_UINT32,   ACPI_FADT_OFFSET (Dsdt),                    "DSDT Address", DT_NON_ZERO},
++    {ACPI_DMT_UINT32,   ACPI_FADT_OFFSET (Dsdt),                    "DSDT Address", 0},
+     {ACPI_DMT_UINT8,    ACPI_FADT_OFFSET (Model),                   "Model", 0},
+     {ACPI_DMT_FADTPM,   ACPI_FADT_OFFSET (PreferredProfile),        "PM Profile", 0},
+     {ACPI_DMT_UINT16,   ACPI_FADT_OFFSET (SciInterrupt),            "SCI Interrupt", 0},
diff --git a/SOURCES/grammar.asl.result b/SOURCES/grammar.asl.result
new file mode 100644
index 0000000..5269983
--- /dev/null
+++ b/SOURCES/grammar.asl.result
@@ -0,0 +1,590 @@
+grammar.asl    120:     Device (A1)
+Warning  3141 -                 ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl    135:     Device (A2)
+Warning  3141 -                 ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl    145:     Device (A3)
+Warning  3141 -                 ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl    155:     Device (A4)
+Warning  3141 -                 ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl    171:     Device (IRES)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl    199:     Name (_NPK, Package ()
+Warning  3133 -                 ^ Unknown reserved name (_NPK)
+
+grammar.asl    208:     Device (RES)
+Warning  3141 -                  ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl    247:             Name (PRT0, ResourceTemplate ()
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\RES._CRS)
+
+grammar.asl    399:             CreateByteField (PRT0, R000._ASZ, RSIZ)
+Remark   2089 -                            Object is not referenced ^  (Name [RSIZ] is within a method [_CRS])
+
+grammar.asl    406:             Name (BUF0, ResourceTemplate ()
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\RES._PRS)
+
+grammar.asl    513:         Name (_STR, Unicode ("test"))
+Remark   2089 -                     ^ Object is not referenced (Name [_STR] is within a method [TCOP])
+
+grammar.asl    515:         Store (MFLD, Local0)
+Warning  3144 -                              ^ Method Local is set but never used (Local0)
+
+grammar.asl    522:     NAME (ESC1, "abcdefg\x00hijklmn")
+Warning  3055 -                                ^ Invalid Hex/Octal Escape - Non-ASCII or NULL
+
+grammar.asl    523:     NAME (ESC2, "abcdefg\000hijklmn")
+Warning  3055 -                                ^ Invalid Hex/Octal Escape - Non-ASCII or NULL
+
+grammar.asl    552:         IRQNoFlags(xxxt){3,4,10,11}
+Remark   2182 -                          ^ At least one lower case letter found in NameSeg, ASL is case insensitive - converting to upper case (XXXT)
+
+grammar.asl    566:         Name(Bxxx,0xFFFFFFFF)
+Remark   2182 -                    ^ At least one lower case letter found in NameSeg, ASL is case insensitive - converting to upper case (BXXX)
+
+grammar.asl    620:         RCIV (Subtract (Arg0, 1))
+Remark   2098 -               ^ Recursive method call (RCIV)
+
+grammar.asl    631:         Processor(CPU0,0x0,0xFFFFFFFF,0x0) {}
+Warning  3168 -                         ^ Legacy Processor() keyword detected. Use Device() keyword instead.
+
+grammar.asl    668:     Method(SMWE, 4)
+Remark   2146 -                  ^ Method Argument is never used (Arg0)
+
+grammar.asl    668:     Method(SMWE, 4)
+Remark   2146 -                  ^ Method Argument is never used (Arg1)
+
+grammar.asl    668:     Method(SMWE, 4)
+Remark   2146 -                  ^ Method Argument is never used (Arg2)
+
+grammar.asl    668:     Method(SMWE, 4)
+Remark   2146 -                  ^ Method Argument is never used (Arg3)
+
+grammar.asl    673:     Method(SMRE, 4)
+Remark   2146 -                  ^ Method Argument is never used (Arg0)
+
+grammar.asl    673:     Method(SMRE, 4)
+Remark   2146 -                  ^ Method Argument is never used (Arg1)
+
+grammar.asl    673:     Method(SMRE, 4)
+Remark   2146 -                  ^ Method Argument is never used (Arg2)
+
+grammar.asl    673:     Method(SMRE, 4)
+Remark   2146 -                  ^ Method Argument is never used (Arg3)
+
+grammar.asl    701:             CreateField (\_SB_.SBUF, 148, 96, FLDV)
+Remark   2089 -                            Object is not referenced ^  (Name [FLDV] is within a method [_INI])
+
+grammar.asl    705:         Device(PCI0)
+Warning  3073 -       Multiple types ^  (Device object requires either a _HID or _ADR, but not both)
+
+grammar.asl    712:                 Name(PRT0, ResourceTemplate() {
+Remark   2173 -                            ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\_SB.PCI0._CRS)
+
+grammar.asl    733:             Method(_SRS)
+Warning  3102 -                          ^ Reserved method has too few arguments (_SRS requires 1)
+
+grammar.asl    738:             Device(EIO)
+Warning  3141 -      Missing dependency ^  (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl    822:                     If(LNot(SMRE(0x09,0x17,Local2,RefOf(Local3)))){
+Warning  3144 -                              Method Local is set but never used ^  (Local3)
+
+grammar.asl    913:     Device (DEV1)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl    963:         Divide (Local0, Local1, Local3)
+Warning  3144 -      Method Local is set but never used ^  (Local3)
+
+grammar.asl    988:     Method (R226, 2)
+Remark   2146 -                   ^ Method Argument is never used (Arg0)
+
+grammar.asl    988:     Method (R226, 2)
+Remark   2146 -                   ^ Method Argument is never used (Arg1)
+
+grammar.asl   1011:         Store (Local0, Local1)
+Warning  3144 -                                ^ Method Local is set but never used (Local1)
+
+grammar.asl   1296:     Method (OBJ1, 1, SERIALIZED)
+Remark   2146 -                   ^ Method Argument is never used (Arg0)
+
+grammar.asl   1300:         Name(BUFR, Buffer (Local0) {})
+Remark   2089 -                    ^ Object is not referenced (Name [BUFR] is within a method [OBJ1])
+
+grammar.asl   1300:         Name(BUFR, Buffer (Local0) {})
+Remark   2173 -                    ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\OBJ1)
+
+grammar.asl   1301:         Name(BUF1, Buffer (4) {1,2,3,4})
+Remark   2173 -                    ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\OBJ1)
+
+grammar.asl   1302:         Name(BUF2, Buffer (4) {})
+Remark   2173 -                    ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\OBJ1)
+
+grammar.asl   1307:         Alias (MTX1, MTX2)
+Remark   2089 -   Object is not referenced ^  (Name [MTX2] is within a method [OBJ1])
+
+grammar.asl   1321:         Name (BUF2, Buffer (128) {})
+Remark   2173 -                     ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\FLDS)
+
+grammar.asl   1329:         CreateField (BUF2, 148, 96, FLD3)
+Remark   2089 -                  Object is not referenced ^  (Name [FLD3] is within a method [FLDS])
+
+grammar.asl   1394:         Store (0x1234567887654321, QWD2)
+Warning  3038 -                                    ^ Truncating 64-bit constant found in 32-bit table
+
+grammar.asl   1396:         if (LNotEqual (Local0, 0x1234567887654321))
+Warning  3038 -   Truncating 64-bit constant found in 32-bit table ^ 
+
+grammar.asl   1445:         Name (BUFO, Buffer (32) {})
+Remark   2173 -                     ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\OBJ2)
+
+grammar.asl   1448:         OperationRegion (OPR2, SystemMemory, Arg0, 256)
+Remark   2173 -                                ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\OBJ2)
+
+grammar.asl   1462:         BankField (OPR2, BNK2, 0, ByteAcc, NoLock, Preserve)
+Remark   2173 -                          ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\OBJ2)
+
+grammar.asl   1469:         IndexField (IDX2, DAT2, ByteAcc, NoLock, Preserve)
+Remark   2173 -                           ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\OBJ2)
+
+grammar.asl   1476:         SizeOf (BUFO)
+Error    6114 -                       ^ Result is not used, operator has no effect
+
+grammar.asl   1490:         Event (EVT2)
+Remark   2173 -                      ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\OBJ2)
+
+grammar.asl   1496:         Alias (MTX2, MTXA)
+Remark   2089 -   Object is not referenced ^  (Name [MTXA] is within a method [OBJ2])
+
+grammar.asl   1502:         Acquire (MTX2, 1)
+Warning  3130 -                           ^ Result is not used, possible operator timeout will be missed
+
+grammar.asl   1650:         Add (Local0, Local1)
+Error    6114 -                      ^ Result is not used, operator has no effect
+
+grammar.asl   1661:         Add (Local0, Local1, Local2)
+Warning  3144 -   Method Local is set but never used ^  (Local2)
+
+grammar.asl   1777:         Store (LAnd (0xFFFFFFFF, 0x11111111), Local0)
+Warning  3144 -                    Method Local is set but never used ^  (Local0)
+
+grammar.asl   1780:         Store (LEqual (0xFFFFFFFF, 0x11111111), Local1)
+Warning  3144 -                      Method Local is set but never used ^  (Local1)
+
+grammar.asl   1783:         Store (LGreater (0xFFFFFFFF, 0x11111111), Local2)
+Warning  3144 -                        Method Local is set but never used ^  (Local2)
+
+grammar.asl   1786:         Store (LGreaterEqual (0xFFFFFFFF, 0x11111111), Local3)
+Warning  3144 -                             Method Local is set but never used ^  (Local3)
+
+grammar.asl   1789:         Store (LLess (0xFFFFFFFF, 0x11111111), Local4)
+Warning  3144 -                     Method Local is set but never used ^  (Local4)
+
+grammar.asl   1792:         Store (LLessEqual (0xFFFFFFFF, 0x11111111), Local5)
+Warning  3144 -                          Method Local is set but never used ^  (Local5)
+
+grammar.asl   1821:     Method (COND)
+Warning  3115 -                   ^ Not all control paths return a value (\COND)
+
+grammar.asl   1916:         Name (BBUF, Buffer() {0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7})
+Remark   2173 -                     ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\REFS)
+
+grammar.asl   1918:         Name (NEST, Package ()
+Remark   2173 -                     ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\REFS)
+
+grammar.asl   1930:         Store (RefOf (MAIN), Local5)
+Warning  3144 -   Method Local is set but never used ^  (Local5)
+
+grammar.asl   2005:     Device (IFEL)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   2162:     Device (NOSV)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   2168:             Name (WRD, 0x1234)
+Remark   2173 -                        ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\NOSV.TEST)
+
+grammar.asl   2583:     Device (IDXF)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   2611:             Store (IFE0, Local0)
+Warning  3144 -                                  ^ Method Local is set but never used (Local0)
+
+grammar.asl   2612:             Store (IFE1, Local1)
+Warning  3144 -                                  ^ Method Local is set but never used (Local1)
+
+grammar.asl   2613:             Store (IFE2, Local2)
+Warning  3144 -                                  ^ Method Local is set but never used (Local2)
+
+grammar.asl   2630:         Device (NSTL)
+Warning  3141 -    Missing dependency ^  (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   2658:     Device (RTBF)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   2667:             Name (ABUF, Buffer() {"ARBITRARY_BUFFER"})
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\RTBF.RBUF)
+
+grammar.asl   2695:             Name (BUFR, Buffer(Local1) {})
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\RTBF.RBUF)
+
+grammar.asl   2756:     Device (GPE2)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   2771:     Device (PRW2)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   2819:     Device (PRW1)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   2886:             Store (Arg0, Local0)
+Warning  3144 -                                  ^ Method Local is set but never used (Local0)
+
+grammar.asl   2889:         Device (RTLV)
+Warning  3141 -    Missing dependency ^  (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   2989:         Device (PCI1)
+Warning  3073 -        Multiple types ^  (Device object requires either a _HID or _ADR, but not both)
+
+grammar.asl   2993:             Name (_CRS,0)
+Error    6105 -                           ^ Invalid object type for reserved name (_CRS: found Integer, Buffer required)
+
+grammar.asl   3017:         Device (RETP)
+Warning  3141 -    Missing dependency ^  (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   3053:     Device (WHLR)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   3109:     Device (ANDO)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   3343:             Name(RSLT,1)
+Remark   2173 -                        ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\ANDO.TEST)
+
+grammar.asl   3383:     Device (BRKP)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   3420:     Device (ADSU)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   3435:             Name (DWRD, 0x12345678)
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\ADSU.TEST)
+
+grammar.asl   3436:             Name (WRD, 0x1234)
+Remark   2173 -                        ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\ADSU.TEST)
+
+grammar.asl   3437:             Name (BYT, 0x12)
+Remark   2173 -                        ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\ADSU.TEST)
+
+grammar.asl   3513:     Device (INDC)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   3528:             Name (DWRD, 0x12345678)
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\INDC.TEST)
+
+grammar.asl   3529:             Name (WRD, 0x1234)
+Remark   2173 -                        ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\INDC.TEST)
+
+grammar.asl   3530:             Name (BYT, 0x12)
+Remark   2173 -                        ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\INDC.TEST)
+
+grammar.asl   3611:     Device (LOPS)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   3956:     Device (FDSO)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   4120:     Device (MLDV)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   4135:             Name (RMDR, 0)
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\MLDV.TEST)
+
+grammar.asl   4136:             Name (DWRD, 0x12345678)
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\MLDV.TEST)
+
+grammar.asl   4137:             Name (WRD, 0x1234)
+Remark   2173 -                        ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\MLDV.TEST)
+
+grammar.asl   4138:             Name (BYT, 0x12)
+Remark   2173 -                        ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\MLDV.TEST)
+
+grammar.asl   4253:     Device (NBIT)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   4489:     Device (SHFT)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   4685:     Device (XORD)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   4693:             OperationRegion (RAM, SystemMemory, 0x800000, 256)
+Warning  3175 -                                   ^ Static OperationRegion should be declared outside control method
+
+grammar.asl   4693:             OperationRegion (RAM, SystemMemory, 0x800000, 256)
+Remark   2173 -                                   ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\XORD.TEST)
+
+grammar.asl   5022:     Device (CRBF)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   5100:     Device (IDX4)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   5117:             OperationRegion (RAM, SystemMemory, Arg0, 0x100)
+Remark   2173 -                                   ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\IDX4.MADM)
+
+grammar.asl   5639:     Device (EVNT)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   5867:     Device (SZLV)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   5960:         Device (BYTF)
+Warning  3141 -    Missing dependency ^  (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   5970:         Device (C005)
+Warning  3141 -    Missing dependency ^  (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   5972:             Device (C013)
+Warning  3141 -        Missing dependency ^  (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   6027:             Name (_HID, "*PNP0A06")
+Error    6061 -            Invalid leading asterisk ^  (*PNP0A06)
+
+grammar.asl   6166:         Name (C18C, Package (2)
+Remark   2063 -                                 ^ Initializer list shorter than declared package length
+
+grammar.asl   6190:         Device (C19B)
+Warning  3141 -    Missing dependency ^  (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   6199:                 Divide (Local1, 10, Local0, Local2) //  Local0 = Local1 / 10
+Warning  3144 -          Method Local is set but never used ^  (Local0)
+
+grammar.asl   6244:     Device (DWDF)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   6276:     Method (MKW_, 2)
+Remark   2146 -                   ^ Method Argument is never used (Arg0)
+
+grammar.asl   6276:     Method (MKW_, 2)
+Remark   2146 -                   ^ Method Argument is never used (Arg1)
+
+grammar.asl   6285:     Device (DVAX)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   6328:     Device (IDX6)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   6352:         Device (TST_)
+Warning  3141 -    Missing dependency ^  (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   6371:             Store (IFE0, Local0)
+Warning  3144 -                                  ^ Method Local is set but never used (Local0)
+
+grammar.asl   6372:             Store (IFE1, Local1)
+Warning  3144 -                                  ^ Method Local is set but never used (Local1)
+
+grammar.asl   6373:             Store (IFE2, Local2)
+Warning  3144 -                                  ^ Method Local is set but never used (Local2)
+
+grammar.asl   6376:             Store (\IDX6.IFE0, Local3)
+Warning  3144 -     Method Local is set but never used ^  (Local3)
+
+grammar.asl   6377:             Store (\IDX6.IFE1, Local4)
+Warning  3144 -     Method Local is set but never used ^  (Local4)
+
+grammar.asl   6379:             Store (\IDX6.TST_.IFE0, Local5)
+Warning  3144 -          Method Local is set but never used ^  (Local5)
+
+grammar.asl   6380:             Store (\IDX6.TST_.IFE1, Local6)
+Warning  3144 -          Method Local is set but never used ^  (Local6)
+
+grammar.asl   6393:     Device (IDX5)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   6416:             Name (BUF0, Buffer (Local0) {})
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\IDX5.MCTH)
+
+grammar.asl   6417:             Name (BUF1, Buffer (Local0) {})
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\IDX5.MCTH)
+
+grammar.asl   6474:         Device (PCI2)
+Warning  3073 -        Multiple types ^  (Device object requires either a _HID or _ADR, but not both)
+
+grammar.asl   6478:             Name (_CRS, Buffer(26)  {"\_SB_.PCI2._CRS..........."})
+Warning  3046 -        Invalid or unknown escape sequence ^ 
+
+grammar.asl   6554:                 Name (BUFR, Package(13) {})
+Remark   2173 -                             ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\_SB.IDX0._BIF)
+
+grammar.asl   6578:                 Name (BUFR, Package(4) {1, 0x100, 0x76543210, 0x180})
+Remark   2173 -                             ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\_SB.IDX0._BST)
+
+grammar.asl   6593:                 Name (PBUF, Package(4) {})  //  leave uninitialized
+Remark   2173 -                             ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\_SB.IDX0.TEST)
+
+grammar.asl   6625:                 Name (BUFR, Buffer(16)
+Remark   2173 -                             ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\_SB.IDX0.TEST)
+
+grammar.asl   6709:         Device (BITI)
+Warning  3141 -    Missing dependency ^  (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   6817:                 And (Local0, 1, Local0) //  Local0 &= 1
+Error    6066 -                              ^ Method local variable is not initialized (Local0)
+
+grammar.asl   6846:             Name (C17C, Package (13)
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\_SB.C17B)
+
+grammar.asl   6903:             Name (_HID, "*PNP0C0A")     //  Control Method Battey ID
+Error    6061 -            Invalid leading asterisk ^  (*PNP0C0A)
+
+grammar.asl   6912:         Device (IDX3)
+Warning  3141 -    Missing dependency ^  (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   6922:                 Name (BUFR, Buffer ()   {0, 1, 2, 3, 4, 5, 6, 7, 8, 9})
+Remark   2173 -                             ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\_SB.IDX3.LCLB)
+
+grammar.asl   6974:                 Name (PKG, Package ()   {0, 1, 2, 3, 4, 5, 6, 7, 8, 9})
+Remark   2173 -                            ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\_SB.IDX3.LCLP)
+
+grammar.asl   7057:     Device(IDX7)
+Warning  3141 -                  ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   7074:             Name (DEST, Buffer ()                           //  62 characters plus NULL
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\IDX7.TST1)
+
+grammar.asl   7093:             Name (BUF0, Buffer() {0x1, 0x2, 0x3, 0x4, 0x5})
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\IDX7.TST2)
+
+grammar.asl   7110:             Name (BUF1, Buffer() {0x1, 0x2, 0x3, 0x4, 0x5})
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\IDX7.TST3)
+
+grammar.asl   7301:             Name (SRCB, Buffer (12) {}) //  12 characters
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\IDX7.TSTF)
+
+grammar.asl   7304:             Name (DEST, Buffer ()                       //  62 characters plus NULL
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\IDX7.TSTF)
+
+grammar.asl   7327:             Name (SRCB, Buffer (12) {}) //  12 characters
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\IDX7.TSTG)
+
+grammar.asl   7330:             Name (DEST, Buffer ()                       //  62 characters plus NULL
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\IDX7.TSTG)
+
+grammar.asl   7412:             Name (DBUF, Buffer () {"abcdefghijklmnopqrstuvwxyz"})
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\IDX7.TSTH)
+
+grammar.asl   7448:             Name (DBUF, Buffer () {"abcdefghijklmnopqrstuvwxyz"})
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\IDX7.TSTI)
+
+grammar.asl   7484:             Name (DBUF, Buffer () {"abcdefghijklmnopqrstuvwxyz"})
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\IDX7.TSTJ)
+
+grammar.asl   7520:             Name (DBUF, Buffer () {"abcdefghijklmnopqrstuvwxyz"})
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\IDX7.TSTK)
+
+grammar.asl   7556:             Name (DBUF, Buffer () {"abcdefghijklmnopqrstuvwxyz"})
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\IDX7.TSTL)
+
+grammar.asl   7736:     Device (MTCH)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   7743:             Name (TIM0, Package ()
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\MTCH.TEST)
+
+grammar.asl   7755:             Name (TMD0, Buffer (20) {0xFF, 0xFF, 0xFF, 0xFF })
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\MTCH.TEST)
+
+grammar.asl   7757:             CreateDWordField (TMD0, 4, DMA0)
+Remark   2089 -                     Object is not referenced ^  (Name [DMA0] is within a method [TEST])
+
+grammar.asl   7758:             CreateDWordField (TMD0, 8, PIO1)
+Remark   2089 -                     Object is not referenced ^  (Name [PIO1] is within a method [TEST])
+
+grammar.asl   7759:             CreateDWordField (TMD0, 12, DMA1)
+Remark   2089 -                      Object is not referenced ^  (Name [DMA1] is within a method [TEST])
+
+grammar.asl   7760:             CreateDWordField (TMD0, 16, CHNF)
+Remark   2089 -                      Object is not referenced ^  (Name [CHNF] is within a method [TEST])
+
+grammar.asl   7934:     Device (WHLB)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   8275:                 Name (BUFR, Package (13)    {})
+Remark   2173 -                             ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\_SB.BAT1._BIF)
+
+grammar.asl   8295:         Device (IDX2)
+Warning  3141 -    Missing dependency ^  (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   8300:                 Name (SRCB, Buffer ()   {"Short Buffer"})   //  12 characters plus NULL
+Remark   2173 -                             ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\_SB.IDX2.B2IB)
+
+grammar.asl   8302:                 Name (DEST, Buffer ()                           //  62 characters plus NULL
+Remark   2173 -                             ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\_SB.IDX2.B2IB)
+
+grammar.asl   8493:                 Name (DEST, Package (2) {})
+Remark   2173 -                             ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\_SB.IDX2.FB2P)
+
+grammar.asl   8678:     Device (SIZO)
+Warning  3141 -                   ^ Missing dependency (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   8708:             Name (BUFR, Buffer (12) {}) //  uninitialized Buffer
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\SIZO.SARG)
+
+grammar.asl   8709:             Name (BUF1, Buffer() {0x01, 0x02, 0x03, 0x04, 0x05})
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\SIZO.SARG)
+
+grammar.asl   8710:             Name (PKG0, Package (4) {}) //  uninitialized Package
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\SIZO.SARG)
+
+grammar.asl   8712:             Name (PKG1, Package (4)
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\SIZO.SARG)
+
+grammar.asl   8720:             Name (PKG2, Package (4)
+Remark   2063 -                                     ^ Initializer list shorter than declared package length
+
+grammar.asl   8720:             Name (PKG2, Package (4)
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\SIZO.SARG)
+
+grammar.asl   8973:             Name (BUFR, Buffer (12) {})
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\SIZO.SBUF)
+
+grammar.asl   9034:             Name (BUFR, Buffer (12) {}) //  uninitialized Buffer
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\SIZO.SLOC)
+
+grammar.asl   9036:             Name (PKG0, Package (4) {}) //  uninitialized Package
+Remark   2173 -                         ^ Creation of named objects within a method is highly inefficient, use globals or method local variables instead (\SIZO.SLOC)
+
+grammar.asl   9132:             Store (_OS, Local0)
+Warning  3144 -                                 ^ Method Local is set but never used (Local0)
+
+grammar.asl   9262:         Device (MBIT)
+Warning  3141 -    Missing dependency ^  (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   9273:         Device (MWRD)
+Warning  3141 -    Missing dependency ^  (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   9281:         Device (MBYT)
+Warning  3141 -    Missing dependency ^  (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   9354:         Device (SMIS)
+Warning  3141 -    Missing dependency ^  (Device object requires a _HID or _ADR in same scope)
+
+grammar.asl   9408:         Device(CNDT)
+Warning  3141 -   Missing dependency ^  (Device object requires a _HID or _ADR in same scope)
+
+
+Intel ACPI Component Architecture
+ASL+ Optimizing Compiler/Disassembler version VVVVVVVV
+Copyright (c) 2000 - 2021 Intel Corporation
+
+Ignoring all errors, forcing AML file generation
+
+ASL Input:     grammar.asl -  323653 bytes   4818 keywords  10284 source lines
+AML Output:    grammar.aml -   43758 bytes   4148 opcodes     670 named objects
+
+Compilation successful. 6 Errors, 93 Warnings, 94 Remarks, 1106 Optimizations
diff --git a/SOURCES/iasl.1 b/SOURCES/iasl.1
new file mode 100644
index 0000000..1938c7b
--- /dev/null
+++ b/SOURCES/iasl.1
@@ -0,0 +1,231 @@
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH IASL 1 "January 23, 2013"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+iasl \- ACPI Source Language compiler/decompiler
+.SH SYNOPSIS
+.B iasl
+.RI [ <option> ... ]
+.RI <input-file>
+.B ...
+.SH DESCRIPTION
+This manual page briefly documents the
+.B iasl
+command. The option list is taken from the iasl interactive help.
+.PP
+.\" TeX users may be more comfortable with the \fB<whatever>\fP and
+.\" \fI<whatever>\fP escape sequences to invode bold face and italics, 
+.\" respectively.
+.B iasl
+is an ASL compiler and decompiler.  This command provides both the ability
+to translate one or more ASL source files to their corresponding AML binary
+files, and the ability to translate AML binary files back to readable
+ASL source.
+.PP
+Much more detailed documentation may be found at
+http://www.acpica.org/documentation/.
+
+.SH OPTIONS
+
+.PP
+.SS Global
+.TP
+.B \-@ <file>
+Specify command file
+.TP
+.B \-I <dir>
+Specify additional include directory
+.TP
+.B \-T <sig>|ALL|*
+Create table template file for ACPI <sig>
+.TP
+.B \-v
+Display compiler version
+
+.PP
+.SS Preprocessor
+.TP
+.B \-D <symbol>
+Define sybol for preprocessor use
+.TP
+.B \-li
+Create prepocessed output file (*.i)
+.TP
+.B \-P
+Preprocess only and create preprocessor output file (*.i)
+.TP
+.B \-Pn
+Disable preprocessor
+
+.PP
+.SS General Output
+.TP
+.B \-p <prefix>
+Specify path/filename prefix for all output files
+.TP
+.B \-va
+Disable all errors and warnings (summary only)
+.TP
+.B \-vi
+Less verbose errors and warnings for use with IDEs
+.TP
+.B \-vo
+Enable optimization comments
+.TP
+.B \-vr
+Disable remarks
+.TP
+.B \-vs
+Disable signon
+.TP
+.B \-w{1|2|3}
+Set warning reporting level
+.TP
+.B \-we
+Report warnings as errors
+
+.PP
+.SS AML and Data Output Files
+.TP
+.B \-s{a|c}
+Create assembler or C source file (*.asm or *.c)
+.TP
+.B \-i{a|c}
+Create assembler or C include file (*.inc or *.h)
+.TP
+.B \-t{a|c|s}
+Create assembler, C, or ASL hex table (*.hex)
+
+.PP
+.SS AML Code Generation
+.TP
+.B \-oa
+Disable all optimizations (compatibility mode)
+.TP
+.B \-of
+Disable constant folding
+.TP
+.B \-oi
+Disable integer optimization to Zero/One/Ones
+.TP
+.B \-on
+Disable named reference string optimization
+.TP
+.B \-cr
+Disable Resource Descriptor error checking
+.TP
+.B \-in
+Ignore NoOp operators
+.TP
+.B \-r <revision>
+Override table header Revision (1-255)
+
+.PP
+.SS ASL Listing Files
+.TP
+.B \-l
+Create mixed listing file (ASL source and AML) (*.lst)
+.TP
+.B \-ln
+Create namespace file (*.nsp)
+.TP
+.B \-ls
+Create combined source file (expanded includes) (*.src)
+
+.PP
+.SS ACPI Data Tables
+.TP
+.B \-G
+Compile custom table containing generic operators
+.TP
+.B \-vt
+Create verbose templates (full disassembly)
+
+.PP
+.SS AML Disassembler
+.TP
+.B \-d [<file>]
+Disassemble AML to ASL source code file (*.dsl)
+.TP
+.B \-da [<file1>,<file2>]
+Disassemble multiple tables from single namespace
+.TP
+.B \-db
+Do not translate Buffers to Resource Templates
+.TP
+.B \-dc [<file>]
+Disassemble AML and immediately compile it
+.br
+(Obtain DSDT from current system if no input file)
+.TP
+.B \-e [<file1>,<file2>]
+Include ACPI table(s) for external symbol resolution
+.TP
+.B \-g
+Get ACPI tables and write to files (*.dat)
+.TP
+.B \-in
+Ignore NoOp opcodes
+.TP
+.B \-vt
+Dump binary table date in hex format within output file
+
+.PP
+.SS Help
+.TP
+.B \-h
+Additional help and compiler debug options
+.TP
+.B \-hc
+Display operators allowed in constant expressions
+.TP
+.B \-hf
+Display help for output file name generation
+.TP
+.B \-hr
+Display ACPI reserved method names
+.TP
+.B \-ht
+Display currently supported ACPI table names
+
+.PP
+.SS Debug
+.TP
+.B \-b{f|t}
+Create debug file (full or parse tree only) (*.txt)
+.TP
+.B \-f
+Ignore errors, force creation of AML output file(s)
+.TP
+.B \-n
+Parse only, no output generation
+.TP
+.B \-ot
+Display compiles times and statistics
+.TP
+.B \-x <level>
+Set debug level for trace output
+.TP
+.B \-z
+Do not insert new compiler ID for DataTables
+
+.SH AUTHOR
+iasl was written by Robert Moore <robert.moore@intel.com>.
+.PP
+This manual page was written by Mattia Dongili <malattia@debian.org>,
+for the Debian project (but may be used by others).  It was updated for
+the Fedora project by Al Stone <ahs3@redhat.com> (and may also be used
+by others).
diff --git a/SOURCES/int-format.patch b/SOURCES/int-format.patch
new file mode 100644
index 0000000..f98906b
--- /dev/null
+++ b/SOURCES/int-format.patch
@@ -0,0 +1,283 @@
+Use proper integer formatting
+
+From: Al Stone <ahs3@redhat.com>
+
+
+---
+ source/compiler/aslerror.c              |    4 ++--
+ source/compiler/aslopt.c                |    2 +-
+ source/compiler/aslprepkg.c             |    2 +-
+ source/components/debugger/dbexec.c     |    2 +-
+ source/components/dispatcher/dsmthdat.c |    4 ++--
+ source/components/dispatcher/dsutils.c  |    2 +-
+ source/components/dispatcher/dswscope.c |    4 ++--
+ source/components/events/evgpe.c        |    4 ++--
+ source/components/executer/exdump.c     |    2 +-
+ source/components/executer/exfldio.c    |    4 ++--
+ source/components/executer/exnames.c    |    4 ++--
+ source/components/hardware/hwregs.c     |    2 +-
+ source/components/tables/tbfadt.c       |    6 +++---
+ source/components/tables/tbxfroot.c     |    6 +++---
+ source/components/utilities/utownerid.c |    2 +-
+ 18 files changed, 28 insertions(+), 28 deletions(-)
+
+Index: acpica-unix2-20200925/source/compiler/aslerror.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/compiler/aslerror.c
++++ acpica-unix2-20200925/source/compiler/aslerror.c
+@@ -917,7 +917,7 @@ AslLogNewError (
+     AslGbl_ExceptionCount[ModifiedLevel]++;
+     if (!AslGbl_IgnoreErrors && AslGbl_ExceptionCount[ASL_ERROR] > ASL_MAX_ERROR_COUNT)
+     {
+-        printf ("\nMaximum error count (%u) exceeded\n", ASL_MAX_ERROR_COUNT);
++        printf ("\nMaximum error count (%d) exceeded\n", ASL_MAX_ERROR_COUNT);
+ 
+         AslGbl_SourceLine = 0;
+         AslGbl_NextError = AslGbl_ErrorLog;
+Index: acpica-unix2-20200925/source/compiler/aslopt.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/compiler/aslopt.c
++++ acpica-unix2-20200925/source/compiler/aslopt.c
+@@ -583,7 +583,7 @@ OptOptimizeNamePath (
+     }
+ 
+     ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS,
+-        "PATH OPTIMIZE: Line %5d ParentOp [%12.12s] ThisOp [%12.12s] ",
++        "PATH OPTIMIZE: Line %5u ParentOp [%12.12s] ThisOp [%12.12s] ",
+         Op->Asl.LogicalLineNumber,
+         AcpiPsGetOpcodeName (Op->Common.Parent->Common.AmlOpcode),
+         AcpiPsGetOpcodeName (Op->Common.AmlOpcode)));
+Index: acpica-unix2-20200925/source/compiler/aslprepkg.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/compiler/aslprepkg.c
++++ acpica-unix2-20200925/source/compiler/aslprepkg.c
+@@ -320,7 +320,7 @@ ApCheckPackage (
+ 
+         if (Count & 1)
+         {
+-            sprintf (AslGbl_MsgBuffer, "%4.4s: Package length, %d, must be even.",
++            sprintf (AslGbl_MsgBuffer, "%4.4s: Package length, %u, must be even.",
+                 Predefined->Info.Name, Count);
+ 
+             AslError (ASL_ERROR, ASL_MSG_RESERVED_PACKAGE_LENGTH,
+Index: acpica-unix2-20200925/source/components/debugger/dbexec.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/components/debugger/dbexec.c
++++ acpica-unix2-20200925/source/components/debugger/dbexec.c
+@@ -231,7 +231,7 @@ AcpiDbExecuteMethod (
+             ACPI_ERROR ((AE_INFO,
+                 "Possible buffer overflow within AML Debugger "
+                 "buffer (size 0x%X needed 0x%X)",
+-                ACPI_DEBUG_BUFFER_SIZE, (UINT32) ReturnObj->Length));
++                (UINT32) ACPI_DEBUG_BUFFER_SIZE, (UINT32) ReturnObj->Length));
+         }
+     }
+ 
+Index: acpica-unix2-20200925/source/components/dispatcher/dsmthdat.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/components/dispatcher/dsmthdat.c
++++ acpica-unix2-20200925/source/components/dispatcher/dsmthdat.c
+@@ -291,7 +291,7 @@ AcpiDsMethodDataGetNode (
+         if (Index > ACPI_METHOD_MAX_LOCAL)
+         {
+             ACPI_ERROR ((AE_INFO,
+-                "Local index %u is invalid (max %u)",
++                "Local index %u is invalid (max %d)",
+                 Index, ACPI_METHOD_MAX_LOCAL));
+             return_ACPI_STATUS (AE_AML_INVALID_INDEX);
+         }
+@@ -306,7 +306,7 @@ AcpiDsMethodDataGetNode (
+         if (Index > ACPI_METHOD_MAX_ARG)
+         {
+             ACPI_ERROR ((AE_INFO,
+-                "Arg index %u is invalid (max %u)",
++                "Arg index %u is invalid (max %d)",
+                 Index, ACPI_METHOD_MAX_ARG));
+             return_ACPI_STATUS (AE_AML_INVALID_INDEX);
+         }
+Index: acpica-unix2-20200925/source/components/dispatcher/dsutils.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/components/dispatcher/dsutils.c
++++ acpica-unix2-20200925/source/components/dispatcher/dsutils.c
+@@ -786,7 +786,7 @@ AcpiDsCreateOperands (
+     }
+ 
+     ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
+-        "NumOperands %d, ArgCount %d, Index %d\n",
++        "NumOperands %d, ArgCount %u, Index %u\n",
+         WalkState->NumOperands, ArgCount, Index));
+ 
+     /* Create the interpreter arguments, in reverse order */
+Index: acpica-unix2-20200925/source/components/dispatcher/dswscope.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/components/dispatcher/dswscope.c
++++ acpica-unix2-20200925/source/components/dispatcher/dswscope.c
+@@ -149,7 +149,7 @@ AcpiDsScopeStackPush (
+     WalkState->ScopeDepth++;
+ 
+     ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
+-        "[%.2d] Pushed scope ", (UINT32) WalkState->ScopeDepth));
++        "[%.2d] Pushed scope ", WalkState->ScopeDepth));
+ 
+     OldScopeInfo = WalkState->ScopeInfo;
+     if (OldScopeInfo)
+@@ -211,7 +211,7 @@ AcpiDsScopeStackPop (
+     WalkState->ScopeDepth--;
+ 
+     ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
+-        "[%.2d] Popped scope [%4.4s] (%s), New scope -> ",
++        "[%.2u] Popped scope [%4.4s] (%s), New scope -> ",
+         (UINT32) WalkState->ScopeDepth,
+         AcpiUtGetNodeName (ScopeInfo->Scope.Node),
+         AcpiUtGetTypeName (ScopeInfo->Common.Value)));
+Index: acpica-unix2-20200925/source/components/events/evgpe.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/components/events/evgpe.c
++++ acpica-unix2-20200925/source/components/events/evgpe.c
+@@ -488,7 +488,7 @@ AcpiEvGpeDetect (
+                     "Ignore disabled registers for GPE %02X-%02X: "
+                     "RunEnable=%02X, WakeEnable=%02X\n",
+                     GpeRegisterInfo->BaseGpeNumber,
+-                    GpeRegisterInfo->BaseGpeNumber + (ACPI_GPE_REGISTER_WIDTH - 1),
++                    (unsigned int) (GpeRegisterInfo->BaseGpeNumber + (ACPI_GPE_REGISTER_WIDTH - 1)),
+                     GpeRegisterInfo->EnableForRun,
+                     GpeRegisterInfo->EnableForWake));
+                 continue;
+Index: acpica-unix2-20200925/source/components/executer/exdump.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/components/executer/exdump.c
++++ acpica-unix2-20200925/source/components/executer/exdump.c
+@@ -678,7 +678,7 @@ AcpiExDumpOperand (
+     if (Depth > 0)
+     {
+         ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%*s[%u] %p Refs=%u ",
+-            Depth, " ", Depth, ObjDesc, ObjDesc->Common.ReferenceCount));
++            (int) Depth, " ", Depth, ObjDesc, ObjDesc->Common.ReferenceCount));
+     }
+     else
+     {
+Index: acpica-unix2-20200925/source/components/executer/exfldio.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/components/executer/exfldio.c
++++ acpica-unix2-20200925/source/components/executer/exfldio.c
+@@ -681,8 +681,8 @@ AcpiExWriteWithUpdateRule (
+ 
+             ACPI_ERROR ((AE_INFO,
+                 "Unknown UpdateRule value: 0x%X",
+-                (ObjDesc->CommonField.FieldFlags &
+-                    AML_FIELD_UPDATE_RULE_MASK)));
++                (unsigned int) (ObjDesc->CommonField.FieldFlags &
++                                   AML_FIELD_UPDATE_RULE_MASK)));
+             return_ACPI_STATUS (AE_AML_OPERAND_VALUE);
+         }
+     }
+Index: acpica-unix2-20200925/source/components/executer/exnames.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/components/executer/exnames.c
++++ acpica-unix2-20200925/source/components/executer/exnames.c
+@@ -237,7 +237,7 @@ AcpiExNameSegment (
+          */
+         ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+             "Leading character is not alpha: %02Xh (not a name)\n",
+-            CharBuf[0]));
++            (unsigned int) CharBuf[0]));
+         Status = AE_CTRL_PENDING;
+     }
+     else
+@@ -249,7 +249,7 @@ AcpiExNameSegment (
+         Status = AE_AML_BAD_NAME;
+         ACPI_ERROR ((AE_INFO,
+             "Bad character 0x%02x in name, at %p",
+-            *AmlAddress, AmlAddress));
++            (unsigned int) (*AmlAddress), AmlAddress));
+     }
+ 
+     *InAmlAddress = ACPI_CAST_PTR (UINT8, AmlAddress);
+Index: acpica-unix2-20200925/source/components/hardware/hwregs.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/components/hardware/hwregs.c
++++ acpica-unix2-20200925/source/components/hardware/hwregs.c
+@@ -460,7 +460,7 @@ AcpiHwClearAcpiStatus (
+ 
+ 
+     ACPI_DEBUG_PRINT ((ACPI_DB_IO, "About to write %04X to %8.8X%8.8X\n",
+-        ACPI_BITMASK_ALL_FIXED_STATUS,
++        (UINT32) ACPI_BITMASK_ALL_FIXED_STATUS,
+         ACPI_FORMAT_UINT64 (AcpiGbl_XPm1aStatus.Address)));
+ 
+     LockFlags = AcpiOsAcquireLock (AcpiGbl_HardwareLock);
+Index: acpica-unix2-20200925/source/components/tables/tbfadt.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/components/tables/tbfadt.c
++++ acpica-unix2-20200925/source/components/tables/tbfadt.c
+@@ -233,7 +233,7 @@ AcpiTbInitGenericAddress (
+         if (!(Flags & ACPI_FADT_GPE_REGISTER))
+         {
+             ACPI_ERROR ((AE_INFO,
+-                "%s - 32-bit FADT register is too long (%u bytes, %u bits) "
++                "%s - 32-bit FADT register is too long (%u bytes, %d bits) "
+                 "to convert to GAS struct - 255 bits max, truncating",
+                 RegisterName, ByteWidth, (ByteWidth * 8)));
+         }
+@@ -303,7 +303,7 @@ AcpiTbSelectAddress (
+ 
+         ACPI_BIOS_WARNING ((AE_INFO,
+             "32/64X %s address mismatch in FADT: "
+-            "0x%8.8X/0x%8.8X%8.8X, using %u-bit address",
++            "0x%8.8X/0x%8.8X%8.8X, using %d-bit address",
+             RegisterName, Address32, ACPI_FORMAT_UINT64 (Address64),
+             AcpiGbl_Use32BitFadtAddresses ? 32 : 64));
+ 
+@@ -631,7 +631,7 @@ AcpiTbConvertFadt (
+ 
+                     ACPI_BIOS_WARNING ((AE_INFO,
+                         "32/64X address mismatch in FADT/%s: "
+-                        "0x%8.8X/0x%8.8X%8.8X, using %u-bit address",
++                        "0x%8.8X/0x%8.8X%8.8X, using %d-bit address",
+                         Name, Address32,
+                         ACPI_FORMAT_UINT64 (Address64->Address),
+                         AcpiGbl_Use32BitFadtAddresses ? 32 : 64));
+Index: acpica-unix2-20200925/source/components/tables/tbxfroot.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/components/tables/tbxfroot.c
++++ acpica-unix2-20200925/source/components/tables/tbxfroot.c
+@@ -177,7 +177,7 @@ AcpiFindRootPointer (
+     {
+         ACPI_ERROR ((AE_INFO,
+             "Could not map memory at 0x%8.8X for length %u",
+-            ACPI_EBDA_PTR_LOCATION, ACPI_EBDA_PTR_LENGTH));
++            (UINT32) ACPI_EBDA_PTR_LOCATION, (UINT32) ACPI_EBDA_PTR_LENGTH));
+ 
+         return_ACPI_STATUS (AE_NO_MEMORY);
+     }
+@@ -204,7 +204,7 @@ AcpiFindRootPointer (
+         {
+             ACPI_ERROR ((AE_INFO,
+                 "Could not map memory at 0x%8.8X for length %u",
+-                PhysicalAddress, ACPI_EBDA_WINDOW_SIZE));
++                PhysicalAddress, (UINT32) ACPI_EBDA_WINDOW_SIZE));
+ 
+             return_ACPI_STATUS (AE_NO_MEMORY);
+         }
+@@ -236,7 +236,7 @@ AcpiFindRootPointer (
+     {
+         ACPI_ERROR ((AE_INFO,
+             "Could not map memory at 0x%8.8X for length %u",
+-            ACPI_HI_RSDP_WINDOW_BASE, ACPI_HI_RSDP_WINDOW_SIZE));
++            (UINT32) ACPI_HI_RSDP_WINDOW_BASE, (UINT32) ACPI_HI_RSDP_WINDOW_SIZE));
+ 
+         return_ACPI_STATUS (AE_NO_MEMORY);
+     }
+Index: acpica-unix2-20200925/source/components/utilities/utownerid.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/components/utilities/utownerid.c
++++ acpica-unix2-20200925/source/components/utilities/utownerid.c
+@@ -237,7 +237,7 @@ AcpiUtReleaseOwnerId (
+     else
+     {
+         ACPI_ERROR ((AE_INFO,
+-            "Attempted release of non-allocated OwnerId: 0x%3.3X", OwnerId + 1));
++            "Release of non-allocated OwnerId: 0x%2.2X", (UINT32) OwnerId + 1));
+     }
+ 
+     (void) AcpiUtReleaseMutex (ACPI_MTX_CACHES);
diff --git a/SOURCES/mips-be-fix.patch b/SOURCES/mips-be-fix.patch
new file mode 100644
index 0000000..485fb77
--- /dev/null
+++ b/SOURCES/mips-be-fix.patch
@@ -0,0 +1,22 @@
+Index: acpica-unix2-20200925/source/compiler/aslparseop.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/compiler/aslparseop.c
++++ acpica-unix2-20200925/source/compiler/aslparseop.c
+@@ -285,7 +285,16 @@ TrCreateValuedLeafOp (
+ 
+ 
+     Op = TrAllocateOp (ParseOpcode);
+-    Op->Asl.Value.Integer = Value;
++    if (ParseOpcode == PARSEOP_NAMESTRING ||
++        ParseOpcode == PARSEOP_NAMESEG ||
++        ParseOpcode == PARSEOP_STRING_LITERAL)
++    {
++        Op->Asl.Value.String = (char *) Value;
++    }
++    else
++    {
++        Op->Asl.Value.Integer = Value;
++    }
+ 
+     DbgPrint (ASL_PARSE_OUTPUT,
+         "\nCreateValuedLeafOp  Ln/Col %u/%u NewOp %p  "
diff --git a/SOURCES/ptr-cast.patch b/SOURCES/ptr-cast.patch
new file mode 100644
index 0000000..8f32d8c
--- /dev/null
+++ b/SOURCES/ptr-cast.patch
@@ -0,0 +1,49 @@
+Index: acpica-unix2-20200925/source/components/tables/tbutils.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/components/tables/tbutils.c
++++ acpica-unix2-20200925/source/components/tables/tbutils.c
+@@ -238,9 +238,11 @@ AcpiTbGetRootTableEntry (
+          * 64-bit platform, XSDT: Move (unaligned) 64-bit to local,
+          *  return 64-bit
+          */
+-        ACPI_MOVE_64_TO_64 (&Address64, TableEntry);
+ 
+ #if ACPI_MACHINE_WIDTH == 32
++	UINT32 Tmp32 = (UINT32) TableEntry;
++
++	Address64 = (UINT64) Tmp32;
+         if (Address64 > ACPI_UINT32_MAX)
+         {
+             /* Will truncate 64-bit address to 32 bits, issue warning */
+@@ -250,8 +252,14 @@ AcpiTbGetRootTableEntry (
+                 " truncating",
+                 ACPI_FORMAT_UINT64 (Address64)));
+         }
+-#endif
++
++        return ((ACPI_PHYSICAL_ADDRESS) (*ACPI_CAST_PTR (
++            UINT32, TableEntry)));
++#else
++	Address64 = (UINT64) TableEntry;
++
+         return ((ACPI_PHYSICAL_ADDRESS) (Address64));
++#endif
+     }
+ }
+ 
+Index: acpica-unix2-20200925/source/compiler/aslparseop.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/compiler/aslparseop.c
++++ acpica-unix2-20200925/source/compiler/aslparseop.c
+@@ -289,7 +289,11 @@ TrCreateValuedLeafOp (
+         ParseOpcode == PARSEOP_NAMESEG ||
+         ParseOpcode == PARSEOP_STRING_LITERAL)
+     {
++#if ACPI_MACHINE_WIDTH == 32
++        Op->Asl.Value.String = (char *) (UINT32) Value;
++#else
+         Op->Asl.Value.String = (char *) Value;
++#endif
+     }
+     else
+     {
diff --git a/SOURCES/run-misc-tests.sh b/SOURCES/run-misc-tests.sh
new file mode 100644
index 0000000..c0da397
--- /dev/null
+++ b/SOURCES/run-misc-tests.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+#
+#       run the misc tests: we need to do this in a script since
+#       some of these are expected to fail which would normally cause
+#	the %check step to stop.  however, this is expected behavior.
+#	we are running iasl precisely because we expect it to stop when
+#	presented with faulty ASL.
+#
+#       this script assumes it is in the source 'tests' directory at
+#       start.
+#
+
+set -x
+
+BINDIR="$1"
+VERSION="$2"
+
+# create files to compare against
+$BINDIR/iasl -hZZ
+
+sed -e "s/VVVVVVVV/$VERSION/" \
+    ../badcode.asl.result > misc/badcode.asl.expected
+sed -e "s/VVVVVVVV/$VERSION/" \
+    ../grammar.asl.result > misc/grammar.asl.expected
+sed -e "s/VVVVVVVV/$VERSION/" \
+    ../converterSample.asl.result > misc/converterSample.asl.expected
+
+cd misc
+
+# see if badcode.asl failed as expected
+# NB: the -f option is required so we can see all of the errors
+$BINDIR/iasl -f badcode.asl 2>&1 | tee badcode.asl.actual
+diff badcode.asl.actual badcode.asl.expected >/dev/null 2>&1
+[ $? -eq 0 ] || exit 1
+
+# see if grammar.asl failed as expected
+# NB: the -f option is required so we can see all of the errors
+$BINDIR/iasl -f -of grammar.asl 2>&1 | tee grammar.asl.actual
+diff grammar.asl.actual grammar.asl.expected >/dev/null 2>&1
+[ $? -eq 0 ] || exit 1
+
+# see if converterSample.asl failed as expected
+# NB: the -f option is required so we can see all of the errors
+$BINDIR/iasl -f -of converterSample.asl 2>&1 | tee converterSample.asl.actual
+diff converterSample.asl.actual converterSample.asl.expected >/dev/null 2>&1
+[ $? -eq 0 ] || exit 1
+
+exit 0
diff --git a/SOURCES/simple-64bit.patch b/SOURCES/simple-64bit.patch
new file mode 100644
index 0000000..aeead35
--- /dev/null
+++ b/SOURCES/simple-64bit.patch
@@ -0,0 +1,21 @@
+Description: Stop listing all 64bit architectures
+ Check __LP64__ instead of maintaining a list of all
+ 64bit architectures.
+Author: Adrian Bunk <bunk@debian.org>
+
+Index: acpica-unix2-20200925/source/include/platform/aclinux.h
+===================================================================
+--- acpica-unix2-20200925.orig/source/include/platform/aclinux.h
++++ acpica-unix2-20200925/source/include/platform/aclinux.h
+@@ -215,10 +215,7 @@
+ #define ACPI_FLUSH_CPU_CACHE()
+ #define ACPI_CAST_PTHREAD_T(Pthread) ((ACPI_THREAD_ID) (Pthread))
+ 
+-#if defined(__ia64__)    || (defined(__x86_64__) && !defined(__ILP32__)) ||\
+-    defined(__aarch64__) || defined(__PPC64__) ||\
+-    defined(__s390x__) ||\
+-    (defined(__riscv) && (defined(__LP64__) || defined(_LP64)))
++#if defined(__LP64__)
+ #define ACPI_MACHINE_WIDTH          64
+ #define COMPILER_DEPENDENT_INT64    long
+ #define COMPILER_DEPENDENT_UINT64   unsigned long
diff --git a/SOURCES/str-trunc-warn.patch b/SOURCES/str-trunc-warn.patch
new file mode 100644
index 0000000..eeb47c3
--- /dev/null
+++ b/SOURCES/str-trunc-warn.patch
@@ -0,0 +1,112 @@
+Index: acpica-unix2-20200925/source/compiler/aslanalyze.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/compiler/aslanalyze.c
++++ acpica-unix2-20200925/source/compiler/aslanalyze.c
+@@ -358,11 +358,16 @@ AnCheckMethodReturnValue (
+          */
+         if (ThisNodeBtype != 0)
+         {
+-            sprintf (AslGbl_MsgBuffer,
++	     int cnt;
++	     char *strp;
++
++            cnt = asprintf (&strp,
+                 "Method returns [%s], %s operator requires [%s]",
+                 AslGbl_StringBuffer, OpInfo->Name, AslGbl_StringBuffer2);
+ 
+-            AslError (ASL_WARNING, ASL_MSG_INVALID_TYPE, ArgOp, AslGbl_MsgBuffer);
++            AslError (ASL_WARNING, ASL_MSG_INVALID_TYPE, ArgOp, strp);
++	     if (cnt > 0)
++	         free(strp);
+         }
+     }
+ 
+Index: acpica-unix2-20200925/source/compiler/aslpredef.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/compiler/aslpredef.c
++++ acpica-unix2-20200925/source/compiler/aslpredef.c
+@@ -159,14 +159,19 @@ ApCheckForPredefinedMethod (
+         if (MethodInfo->NumReturnNoValue &&
+             ThisName->Info.ExpectedBtypes)
+         {
++	     int cnt;
++	     char *strp;
++
+             AcpiUtGetExpectedReturnTypes (AslGbl_StringBuffer,
+                 ThisName->Info.ExpectedBtypes);
+ 
+-            sprintf (AslGbl_MsgBuffer, "%s required for %4.4s",
+-                AslGbl_StringBuffer, ThisName->Info.Name);
++            cnt = asprintf (&strp, "%s required for %4.4s",
++	        AslGbl_StringBuffer, ThisName->Info.Name);
+ 
+             AslError (ASL_WARNING, ASL_MSG_RESERVED_RETURN_VALUE, Op,
+-                AslGbl_MsgBuffer);
++                strp);
++	     if (cnt > 0)
++	        free(strp);
+         }
+         break;
+     }
+@@ -698,18 +703,26 @@ TypeErrorExit:
+ 
+     AcpiUtGetExpectedReturnTypes (AslGbl_StringBuffer, ExpectedBtypes);
+ 
+-    if (PackageIndex == ACPI_NOT_PACKAGE_ELEMENT)
+-    {
+-        sprintf (AslGbl_MsgBuffer, "%4.4s: found %s, %s required",
+-            PredefinedName, TypeName, AslGbl_StringBuffer);
+-    }
+-    else
+     {
+-        sprintf (AslGbl_MsgBuffer, "%4.4s: found %s at index %u, %s required",
+-            PredefinedName, TypeName, PackageIndex, AslGbl_StringBuffer);
++	 int cnt;
++	 char *strp;
++
++        if (PackageIndex == ACPI_NOT_PACKAGE_ELEMENT)
++        {
++            cnt = asprintf (&strp, "%4.4s: found %s, %s required",
++                PredefinedName, TypeName, AslGbl_StringBuffer);
++        }
++        else
++        {
++            cnt = asprintf (&strp, "%4.4s: found %s at index %u, %s required",
++                PredefinedName, TypeName, PackageIndex, AslGbl_StringBuffer);
++        }
++
++	 AslError (ASL_ERROR, ASL_MSG_RESERVED_OPERAND_TYPE, Op, strp);
++	 if (cnt > 0)
++	     free(strp);
+     }
+ 
+-    AslError (ASL_ERROR, ASL_MSG_RESERVED_OPERAND_TYPE, Op, AslGbl_MsgBuffer);
+     return (AE_TYPE);
+ }
+ 
+Index: acpica-unix2-20200925/source/compiler/aslwalks.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/compiler/aslwalks.c
++++ acpica-unix2-20200925/source/compiler/aslwalks.c
+@@ -515,15 +515,19 @@ AnOperandTypecheckWalkEnd (
+             else if (!CommonBtypes)
+             {
+                 /* No match -- this is a type mismatch error */
++		int cnt;
++		char *strp;
+ 
+                 AnFormatBtype (AslGbl_StringBuffer, ThisNodeBtype);
+                 AnFormatBtype (AslGbl_StringBuffer2, RequiredBtypes);
+ 
+-                sprintf (AslGbl_MsgBuffer, "[%s] found, %s operator requires [%s]",
++                cnt = asprintf (&strp, "[%s] found, %s operator requires [%s]",
+                     AslGbl_StringBuffer, OpInfo->Name, AslGbl_StringBuffer2);
+ 
+                 AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE,
+-                    ArgOp, AslGbl_MsgBuffer);
++                    ArgOp, strp);
++		if (cnt > 0)
++		    free(strp);
+             }
+ 
+         NextArgument:
diff --git a/SOURCES/template.patch b/SOURCES/template.patch
new file mode 100644
index 0000000..408541a
--- /dev/null
+++ b/SOURCES/template.patch
@@ -0,0 +1,22 @@
+Add in a needed parameter for a test file template
+
+From: Al Stone <ahs3@redhat.com>
+
+
+---
+ tests/templates/Makefile |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: acpica-unix2-20200925/tests/templates/Makefile
+===================================================================
+--- acpica-unix2-20200925.orig/tests/templates/Makefile
++++ acpica-unix2-20200925/tests/templates/Makefile
+@@ -26,7 +26,7 @@ $(aml_obj): %.aml:  %.asl
+ 
+ 
+ templates :
+-	sh templates.sh
++	sh templates.sh 1
+ 
+ .PHONY: clean
+ clean:
diff --git a/SOURCES/ull-32bit.patch b/SOURCES/ull-32bit.patch
new file mode 100644
index 0000000..7d0580b
--- /dev/null
+++ b/SOURCES/ull-32bit.patch
@@ -0,0 +1,16 @@
+Index: acpica-unix2-20210604/source/common/dmtbdump.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump.c
++++ acpica-unix2-20210604/source/common/dmtbdump.c
+@@ -338,7 +338,11 @@ AcpiDmDumpXsdt (
+     for (i = 0; i < Entries; i++)
+     {
+         AcpiDmLineHeader2 (Offset, sizeof (UINT64), "ACPI Table Address", i);
++#if ACPI_MACHINE_WIDTH == 32
++        AcpiOsPrintf ("%16.16llX\n", AcpiUtReadUint64 (&Array[i]));
++#else
+         AcpiOsPrintf ("%16.16lX\n", AcpiUtReadUint64 (&Array[i]));
++#endif
+         Offset += sizeof (UINT64);
+     }
+ }
diff --git a/SOURCES/unaligned.patch b/SOURCES/unaligned.patch
new file mode 100644
index 0000000..6d3f9c6
--- /dev/null
+++ b/SOURCES/unaligned.patch
@@ -0,0 +1,105 @@
+Patch carried over from the prior iasl package and updated.  This allows
+for builds on systems requiring aligned memory access. Please see
+http://lists.acpica.org/pipermail/devel/2010-July/000159.html.  Resolves
+BZ#865013 and BZ#856856.
+--
+
+Add more platforms to the list of the ones requiring aligned memory access.
+Also fix callsites where wrong assumptions where made in terms of aligment.
+
+Signed-off-by: Mattia Dongili <malattia@linux.it>
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+---
+ source/components/executer/exoparg2.c |   12 +++++++++---
+ source/include/actypes.h              |   26 +++++++++++++-------------
+ 3 files changed, 32 insertions(+), 21 deletions(-)
+
+Index: acpica-unix2-20200925/source/components/executer/exoparg2.c
+===================================================================
+--- acpica-unix2-20200925.orig/source/components/executer/exoparg2.c
++++ acpica-unix2-20200925/source/components/executer/exoparg2.c
+@@ -172,6 +172,8 @@ AcpiExOpcode_2A_2T_1R (
+     ACPI_OPERAND_OBJECT     **Operand = &WalkState->Operands[0];
+     ACPI_OPERAND_OBJECT     *ReturnDesc1 = NULL;
+     ACPI_OPERAND_OBJECT     *ReturnDesc2 = NULL;
++    UINT64                  ReturnValue1 = 0;
++    UINT64                  ReturnValue2 = 0;
+     ACPI_STATUS             Status;
+ 
+ 
+@@ -206,8 +208,10 @@ AcpiExOpcode_2A_2T_1R (
+         Status = AcpiUtDivide (
+             Operand[0]->Integer.Value,
+             Operand[1]->Integer.Value,
+-            &ReturnDesc1->Integer.Value,
+-            &ReturnDesc2->Integer.Value);
++            &ReturnValue1, &ReturnValue2);
++        ReturnDesc1->Integer.Value = ReturnValue1;
++        ReturnDesc2->Integer.Value = ReturnValue2;
++
+         if (ACPI_FAILURE (Status))
+         {
+             goto Cleanup;
+@@ -282,6 +286,7 @@ AcpiExOpcode_2A_1T_1R (
+     ACPI_OPERAND_OBJECT     **Operand = &WalkState->Operands[0];
+     ACPI_OPERAND_OBJECT     *ReturnDesc = NULL;
+     UINT64                  Index;
++    UINT64                  ReturnValue = 0;
+     ACPI_STATUS             Status = AE_OK;
+     ACPI_SIZE               Length = 0;
+ 
+@@ -327,7 +332,8 @@ AcpiExOpcode_2A_1T_1R (
+             Operand[0]->Integer.Value,
+             Operand[1]->Integer.Value,
+             NULL,
+-            &ReturnDesc->Integer.Value);
++            &ReturnValue);
++        ReturnDesc->Integer.Value = ReturnValue;
+         break;
+ 
+     case AML_CONCATENATE_OP: /* Concatenate (Data1, Data2, Result) */
+Index: acpica-unix2-20200925/source/include/actypes.h
+===================================================================
+--- acpica-unix2-20200925.orig/source/include/actypes.h
++++ acpica-unix2-20200925/source/include/actypes.h
+@@ -143,6 +143,19 @@ typedef COMPILER_DEPENDENT_INT64
+  */
+ #define ACPI_THREAD_ID                  UINT64
+ 
++/*
++ * In the case of the Itanium Processor Family (IPF), the hardware does not
++ * support misaligned memory transfers. Set the MISALIGNMENT_NOT_SUPPORTED flag
++ * to indicate that special precautions must be taken to avoid alignment faults.
++ * (IA64 or ia64 is currently used by existing compilers to indicate IPF.)
++ *
++ * Note: EM64T and other X86-64 processors support misaligned transfers,
++ * so there is no need to define this flag.
++ */
++#if defined (__IA64__) || defined (__ia64__) || defined(__alpha__) || defined(__sparc__) || defined(__hppa__) || defined(__arm__)
++#define ACPI_MISALIGNMENT_NOT_SUPPORTED
++#endif
++
+ 
+ /*******************************************************************************
+  *
+@@ -170,20 +183,6 @@ typedef UINT64
+ #define ACPI_USE_NATIVE_DIVIDE          /* Has native 64-bit integer support */
+ #define ACPI_USE_NATIVE_MATH64          /* Has native 64-bit integer support */
+ 
+-/*
+- * In the case of the Itanium Processor Family (IPF), the hardware does not
+- * support misaligned memory transfers. Set the MISALIGNMENT_NOT_SUPPORTED
+- * flag to indicate that special precautions must be taken to avoid alignment
+- * faults. (IA64 or ia64 is currently used by existing compilers to indicate
+- * IPF.)
+- *
+- * Note: EM64T and other X86-64 processors support misaligned transfers,
+- * so there is no need to define this flag.
+- */
+-#if defined (__IA64__) || defined (__ia64__)
+-#define ACPI_MISALIGNMENT_NOT_SUPPORTED
+-#endif
+-
+ 
+ /*******************************************************************************
+  *
diff --git a/SOURCES/wpbt-unicode.patch b/SOURCES/wpbt-unicode.patch
new file mode 100644
index 0000000..1d9c38d
--- /dev/null
+++ b/SOURCES/wpbt-unicode.patch
@@ -0,0 +1,196 @@
+Index: acpica-unix2-20210604/source/common/dmtable.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtable.c
++++ acpica-unix2-20210604/source/common/dmtable.c
+@@ -979,6 +979,12 @@ AcpiDmDumpTable (
+             ByteLength = 128;
+             break;
+ 
++        case ACPI_DMT_WPBT_UNICODE:
++
++            ByteLength = SubtableLength;
++            CurrentOffset = sizeof (ACPI_TABLE_WPBT);
++            break;
++
+         case ACPI_DMT_UNICODE:
+         case ACPI_DMT_BUFFER:
+         case ACPI_DMT_RAW_BUFFER:
+@@ -1596,6 +1602,7 @@ AcpiDmDumpTable (
+             break;
+ 
+         case ACPI_DMT_UNICODE:
++        case ACPI_DMT_WPBT_UNICODE:
+ 
+             if (ByteLength == 0)
+             {
+Index: acpica-unix2-20210604/source/common/dmtbdump3.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbdump3.c
++++ acpica-unix2-20210604/source/common/dmtbdump3.c
+@@ -753,8 +753,11 @@ AcpiDmDumpWpbt (
+     Subtable = ACPI_CAST_PTR (ACPI_TABLE_WPBT, Table);
+     ArgumentsLength = AcpiUtReadUint16 (&Subtable->ArgumentsLength);
+ 
+-    /* Dump the arguments buffer */
++    /* Dump the arguments buffer if present */
+ 
+-    (void) AcpiDmDumpTable (TableLength, 0, Table, ArgumentsLength,
+-        AcpiDmTableInfoWpbt0);
++    if (ArgumentsLength)
++    {
++        (void) AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength,
++            AcpiDmTableInfoWpbt0);
++    }
+ }
+Index: acpica-unix2-20210604/source/common/dmtbinfo3.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/common/dmtbinfo3.c
++++ acpica-unix2-20210604/source/common/dmtbinfo3.c
+@@ -651,7 +651,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableI
+ 
+ ACPI_DMTABLE_INFO           AcpiDmTableInfoWpbt0[] =
+ {
+-    {ACPI_DMT_UNICODE,     sizeof (ACPI_TABLE_WPBT),                "Command-line Arguments", 0},
++    {ACPI_DMT_WPBT_UNICODE, ACPI_WPBT2_OFFSET (UnicodeString),      "Command-line Arguments", DT_DESCRIBES_OPTIONAL},
+     ACPI_DMT_TERMINATOR
+ };
+ 
+Index: acpica-unix2-20210604/source/compiler/dttable2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dttable2.c
++++ acpica-unix2-20210604/source/compiler/dttable2.c
+@@ -2615,13 +2615,11 @@ DtCompileWpbt (
+     DT_SUBTABLE             *ParentTable;
+     ACPI_TABLE_WPBT         *Table;
+     ACPI_STATUS             Status;
+-    UINT16                  Length;
+ 
+ 
+     /* Compile the main table */
+ 
+-    Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt,
+-        &Subtable);
++    Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt, &Subtable);
+     if (ACPI_FAILURE (Status))
+     {
+         return (Status);
+@@ -2629,11 +2627,23 @@ DtCompileWpbt (
+ 
+     ParentTable = DtPeekSubtable ();
+     DtInsertSubtable (ParentTable, Subtable);
++    Table = ACPI_CAST_PTR (ACPI_TABLE_WPBT, ParentTable->Buffer);
++
++    /*
++     * Exit now if there are no arguments specified. This is indicated by:
++     * The "Command-line Arguments" field has not been specified (if specified,
++     * it will be the last field in the field list -- after the main table).
++     * Set the Argument Length in the main table to zero.
++     */
++    if (!*PFieldList)
++    {
++        Table->ArgumentsLength = 0;
++        return (AE_OK);
++    }
+ 
+     /* Compile the argument list subtable */
+ 
+-    Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt0,
+-        &Subtable);
++    Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt0, &Subtable);
+     if (ACPI_FAILURE (Status))
+     {
+         return (Status);
+@@ -2641,12 +2651,8 @@ DtCompileWpbt (
+ 
+     /* Extract the length of the Arguments buffer, insert into main table */
+ 
+-    AcpiUtWriteUint (&Length, sizeof (UINT16),
++    AcpiUtWriteUint (&Table->ArgumentsLength, sizeof (UINT16),
+            &Subtable->TotalLength, sizeof (UINT32));
+-    Table = ACPI_CAST_PTR (ACPI_TABLE_WPBT, ParentTable->Buffer);
+-    Table->ArgumentsLength = AcpiUtReadUint16 (&Length);
+-
+-    ParentTable = DtPeekSubtable ();
+     DtInsertSubtable (ParentTable, Subtable);
+     return (AE_OK);
+ }
+Index: acpica-unix2-20210604/source/compiler/dtutils.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dtutils.c
++++ acpica-unix2-20210604/source/compiler/dtutils.c
+@@ -344,6 +344,7 @@ DtGetFieldType (
+         break;
+ 
+     case ACPI_DMT_UNICODE:
++    case ACPI_DMT_WPBT_UNICODE:
+ 
+         Type = DT_FIELD_TYPE_UNICODE;
+         break;
+@@ -626,12 +627,13 @@ DtGetFieldLength (
+         break;
+ 
+     case ACPI_DMT_UNICODE:
++    case ACPI_DMT_WPBT_UNICODE:
+ 
+         Value = DtGetFieldValue (Field);
+ 
+         /* TBD: error if Value is NULL? (as below?) */
+ 
+-        ByteLength = (strlen (Value) + 1) * sizeof(UINT16);
++        ByteLength = (strlen (Value) + 1) * sizeof (UINT16);
+         break;
+ 
+     default:
+Index: acpica-unix2-20210604/source/include/acdisasm.h
+===================================================================
+--- acpica-unix2-20210604.orig/source/include/acdisasm.h
++++ acpica-unix2-20210604/source/include/acdisasm.h
+@@ -175,6 +175,7 @@ typedef enum
+     ACPI_DMT_SRAT,
+     ACPI_DMT_TPM2,
+     ACPI_DMT_VIOT,
++    ACPI_DMT_WPBT_UNICODE,
+ 
+     /* Special opcodes */
+ 
+Index: acpica-unix2-20210604/source/include/actbinfo.h
+===================================================================
+--- acpica-unix2-20210604.orig/source/include/actbinfo.h
++++ acpica-unix2-20210604/source/include/actbinfo.h
+@@ -97,6 +97,7 @@
+ #define ACPI_WDDT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_WDDT,f)
+ #define ACPI_WDRT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_WDRT,f)
+ #define ACPI_WPBT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_WPBT,f)
++#define ACPI_WPBT2_OFFSET(f)            (UINT16) ACPI_OFFSET (ACPI_WPBT_UNICODE,f)
+ #define ACPI_WSMT_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_WSMT,f)
+ #define ACPI_XENV_OFFSET(f)             (UINT16) ACPI_OFFSET (ACPI_TABLE_XENV,f)
+ 
+Index: acpica-unix2-20210604/source/include/actbl3.h
+===================================================================
+--- acpica-unix2-20210604.orig/source/include/actbl3.h
++++ acpica-unix2-20210604/source/include/actbl3.h
+@@ -847,6 +847,12 @@ typedef struct acpi_table_wpbt
+ 
+ } ACPI_TABLE_WPBT;
+ 
++typedef struct acpi_wpbt_unicode
++{
++    UINT16                  *UnicodeString;
++
++} ACPI_WPBT_UNICODE;
++
+ 
+ /*******************************************************************************
+  *
+Index: acpica-unix2-20210604/source/tools/acpisrc/astable.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/tools/acpisrc/astable.c
++++ acpica-unix2-20210604/source/tools/acpisrc/astable.c
+@@ -772,6 +772,7 @@ ACPI_TYPED_IDENTIFIER_TABLE           Ac
+     {"ACPI_VIOT_VIRTIO_IOMMU_PCI",          SRC_TYPE_STRUCT},
+     {"ACPI_VIOT_VIRTIO_IOMMU_MMIO",         SRC_TYPE_STRUCT},
+     {"ACPI_WDAT_ENTRY",                     SRC_TYPE_STRUCT},
++    {"ACPI_WPBT_UNICODE",                   SRC_TYPE_STRUCT},
+ 
+     /* Data Table compiler */
+ 
diff --git a/SPECS/acpica-tools.spec b/SPECS/acpica-tools.spec
new file mode 100644
index 0000000..4e965a5
--- /dev/null
+++ b/SPECS/acpica-tools.spec
@@ -0,0 +1,832 @@
+Name:           acpica-tools
+Version:        20210604
+Release:        3%{?dist}
+Summary:        ACPICA tools for the development and debug of ACPI tables
+
+License:        GPLv2
+URL:            https://www.acpica.org/
+
+Source0:        https://acpica.org/sites/acpica/files/acpica-unix2-%{version}.tar_0.gz
+Source1:        https://acpica.org/sites/acpica/files/acpitests-unix-%{version}.tar.gz
+Source2:        README.Fedora
+Source3:        iasl.1
+Source4:        acpibin.1
+Source5:        acpidump.1
+Source6:        acpiexec.1
+Source7:        acpihelp.1
+Source9:        acpisrc.1
+Source10:       acpixtract.1
+Source11:       acpiexamples.1
+Source12:       badcode.asl.result
+Source13:       grammar.asl.result
+Source14:       converterSample.asl.result
+Source15:       run-misc-tests.sh
+Source16:       COPYING
+
+# the big-endian patch set
+Patch0:		0001-Add-in-basic-infrastructure-for-big-endian-support.patch
+Patch1:		0002-Modify-utility-functions-to-be-endian-agnostic.patch
+Patch2:		0003-Always-display-table-header-content-in-human-readabl.patch
+Patch3:		0004-Re-enable-support-for-big-endian-machines.patch
+Patch4:		0005-Correct-an-endian-ness-problem-when-converting-ASL-t.patch
+Patch5:		0006-Use-more-reliable-ACPI_COPY_NAMSEG-in-GPE-name-check.patch
+Patch6:		0007-Handle-dumping-Unicode-properly-when-big-endian.patch
+Patch7:		0008-Support-MADT-aka-APIC-in-a-big-endian-world.patch
+Patch8:		0009-Support-ASF-tables-in-a-big-endian-world.patch
+Patch9:		0010-Support-CPEP-tables-in-a-big-endian-world.patch
+Patch10:	0011-Support-DBG2-table-in-a-big-endian-world.patch
+Patch11:	0012-Support-DMAR-in-a-big-endian-world.patch
+Patch12:	0013-Support-DRTM-in-a-big-endian-world.patch
+Patch13:	0014-Support-EINJ-in-a-big-endian-world.patch
+Patch14:	0015-Support-ERST-in-a-big-endian-world.patch
+Patch15:	0016-Support-FADT-aka-FACP-in-a-big-endian-world.patch
+Patch16:	0017-Support-most-FPDTs-in-a-big-endian-world.patch
+Patch17:	0018-Support-GTDT-in-a-big-endian-world.patch
+Patch18:	0019-Support-HEST-in-a-big-endian-world.patch
+Patch19:	0020-Support-RSDT-RSD-PTR-in-a-big-endian-world.patch
+Patch20:	0021-Support-XSDT-in-a-big-endian-world.patch
+Patch21:	0022-Support-SRAT-in-a-big-endian-world.patch
+Patch22:	0023-Support-SLIT-in-a-big-endian-world.patch
+Patch23:	0024-Support-MSCT-in-a-big-endian-world.patch
+Patch24:	0025-Support-MPST-in-a-big-endian-world.patch
+Patch25:	0026-Support-NFIT-in-a-big-endian-world.patch
+Patch26:	0027-Support-SDEV-in-a-big-endian-world.patch
+Patch27:	0028-Support-HMAT-in-a-big-endian-world.patch
+Patch28:	0029-Support-PDTT-in-a-big-endian-world.patch
+Patch29:	0030-Support-PPTT-in-a-big-endian-world.patch
+Patch30:	0031-Support-PCCT-in-a-big-endian-world.patch
+Patch31:	0032-Support-WDAT-in-a-big-endian-world.patch
+Patch32:	0033-Support-TCPA-in-a-big-endian-world.patch
+Patch33:	0034-Support-STAO-in-a-big-endian-world.patch
+Patch34:	0035-Support-SLIC-and-MSDM-in-a-big-endian-world.patch
+Patch35:	0036-Support-MCFG-in-a-big-endian-world.patch
+Patch36:	0037-Support-LPIT-in-a-big-endian-world.patch
+Patch37:	0038-Support-PMTT-in-a-big-endian-world.patch
+Patch38:	0039-Support-TPM2-in-a-big-endian-world.patch
+Patch39:	0040-Support-S3PT-in-a-big-endian-world.patch
+Patch40:	0041-Support-IORT-in-a-big-endian-world.patch
+Patch41:	0042-Support-IVRS-in-a-big-endian-world.patch
+Patch42:	0043-Support-DSDT-SSDT-in-a-big-endian-world.patch
+Patch43:	0044-Initial-support-for-WPBT-in-big-endian-needs-more.patch
+Patch44:	0045-CSRT-fixed-use-of-optional-ResourceInfo.patch
+Patch45:	0046-Support-PHAT-in-a-big-endian-world.patch
+
+# other miscellaneous patches
+Patch100:	unaligned.patch
+Patch101:	OPT_LDFLAGS.patch
+Patch102:	int-format.patch
+Patch103:	f23-harden.patch
+Patch104:	template.patch
+Patch105:       arm7hl.patch
+Patch106:       simple-64bit.patch
+Patch107:       mips-be-fix.patch
+Patch108:       cve-2017-13693.patch
+Patch109:       cve-2017-13694.patch
+Patch110:       cve-2017-13695.patch
+Patch111:       str-trunc-warn.patch
+Patch112:	ptr-cast.patch
+Patch113:	facp.patch
+Patch114:	armv7-str-fixes.patch
+Patch115:	dbtest.patch
+Patch116:	ull-32bit.patch
+Patch117:	wpbt-unicode.patch
+
+BuildRequires: make
+BuildRequires:  bison patchutils flex gcc
+
+# The previous iasl package contained only a very small subset of these tools
+# and it produced only the iasl package listed below; further, the pmtools
+# package -- which provides acpidump -- also provides a /usr/sbin/acpixtract
+# that we don't really want to collide with
+Provides:       acpixtract >= 20120913-7
+Provides:       iasl = %{version}-%{release}
+Obsoletes:      iasl < 20120913-8
+
+# The pmtools package provides an obsolete and deprecated version of the
+# acpidump command from lesswatts.org which has now been taken off-line.
+# ACPICA, however, is providing a new version and we again do not want to
+# conflict with the command name.
+Provides:       acpidump >= 20100513-5
+Provides:       pmtools = %{version}-%{release}
+Obsoletes:      pmtools < 20100513-6
+
+%description
+The ACPI Component Architecture (ACPICA) project provides an OS-independent
+reference implementation of the Advanced Configuration and Power Interface
+Specification (ACPI).  ACPICA code contains those portions of ACPI meant to
+be directly integrated into the host OS as a kernel-resident subsystem, and
+a small set of tools to assist in developing and debugging ACPI tables.
+
+This package contains only the user-space tools needed for ACPI table
+development, not the kernel implementation of ACPI.  The following commands
+are installed:
+   -- iasl: compiles ASL (ACPI Source Language) into AML (ACPI Machine
+      Language), suitable for inclusion as a DSDT in system firmware.
+      It also can disassemble AML, for debugging purposes.
+   -- acpibin: performs basic operations on binary AML files (e.g.,
+      comparison, data extraction)
+   -- acpidump: write out the current contents of ACPI tables
+   -- acpiexec: simulate AML execution in order to debug method definitions
+   -- acpihelp: display help messages describing ASL keywords and op-codes
+   -- acpisrc: manipulate the ACPICA source tree and format source files
+      for specific environments
+   -- acpixtract: extract binary ACPI tables from acpidump output (see
+      also the pmtools package)
+
+This version of the tools is being released under GPLv2 license.
+
+%prep
+%setup -q -n acpica-unix2-%{version}
+gzip -dc %{SOURCE1} | tar -x --strip-components=1 -f -
+
+%autopatch -p1
+
+cp -p %{SOURCE2} README.Fedora
+cp -p %{SOURCE3} iasl.1
+cp -p %{SOURCE4} acpibin.1
+cp -p %{SOURCE5} acpidump.1
+cp -p %{SOURCE6} acpiexec.1
+cp -p %{SOURCE7} acpihelp.1
+cp -p %{SOURCE9} acpisrc.1
+cp -p %{SOURCE10} acpixtract.1
+cp -p %{SOURCE11} acpiexamples.1
+cp -p %{SOURCE12} badcode.asl.result
+cp -p %{SOURCE13} grammar.asl.result
+cp -p %{SOURCE14} converterSample.asl.result
+cp -p %{SOURCE15} tests/run-misc-tests.sh
+chmod a+x tests/run-misc-tests.sh
+cp -p %{SOURCE16} COPYING
+
+# spurious executable permissions on text files in upstream
+chmod a-x changes.txt
+chmod a-x source/compiler/new_table.txt
+
+
+%build
+CWARNINGFLAGS="\
+    -std=c99\
+    -Wall\
+    -Wbad-function-cast\
+    -Wdeclaration-after-statement\
+    -Werror\
+    -Wformat=2\
+    -Wmissing-declarations\
+    -Wmissing-prototypes\
+    -Wstrict-aliasing=0\
+    -Wstrict-prototypes\
+    -Wswitch-default\
+    -Wpointer-arith\
+    -Wundef\
+    -Waddress\
+    -Waggregate-return\
+    -Winit-self\
+    -Winline\
+    -Wmissing-declarations\
+    -Wmissing-field-initializers\
+    -Wnested-externs\
+    -Wold-style-definition\
+    -Wno-format-nonliteral\
+    -Wredundant-decls\
+    -Wempty-body\
+    -Woverride-init\
+    -Wlogical-op\
+    -Wmissing-parameter-type\
+    -Wold-style-declaration\
+    -Wtype-limits"
+
+OPT_CFLAGS="%{optflags} $CWARNINGFLAGS"
+OPT_LDFLAGS="%{__global_ldflags}"
+export OPT_CFLAGS
+export OPT_LDFLAGS
+
+make
+
+
+%install
+# Install the binaries
+mkdir -p %{buildroot}%{_bindir}
+install -pD generate/unix/bin*/* %{buildroot}%{_bindir}/
+
+# Install the man pages
+mkdir -p %{buildroot}%{_mandir}/man1
+install -pDm 0644 *.1 %{buildroot}%{_mandir}/man1/
+
+# Install the examples source code
+mkdir -p %{buildroot}%{_docdir}/acpica-tools/examples
+install -pDm 0644 source/tools/examples/* %{buildroot}%{_docdir}/acpica-tools/examples/
+
+%check
+cd tests
+
+# ASL tests
+./aslts.sh                         # relies on non-zero exit
+[ $? -eq 0 ] || exit 1
+
+# misc tests
+./run-misc-tests.sh %{buildroot}%{_bindir} %{version}
+
+%pre
+if [ -e %{_bindir}/acpixtract-acpica ]
+then
+    alternatives --remove acpixtract %{_bindir}/acpixtract-acpica
+fi
+if [ -e %{_bindir}/acpidump-acpica ]
+then
+    alternatives --remove acpidump %{_bindir}/acpidump-acpica
+fi
+
+%postun
+if [ -e %{_bindir}/acpixtract-acpica ]
+then
+    alternatives --remove acpixtract %{_bindir}/acpixtract-acpica
+fi
+if [ -e %{_bindir}/acpidump-acpica ]
+then
+    alternatives --remove acpidump %{_bindir}/acpidump-acpica
+fi
+
+
+%files
+%doc changes.txt source/compiler/new_table.txt
+%doc README.Fedora COPYING
+%{_bindir}/*
+%{_mandir}/*/*
+%{_docdir}/*/*
+
+
+%changelog
+* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 20210604-3
+- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
+  Related: rhbz#1991688
+
+* Tue Jul 27 2021 Al Stone <ahs3@redhat.com> - 20210604-2
+- Running 'iasl -T all' would segfault when dumping the PHAT template;
+  fixed AcpiDmDumpPhat() by removing unnecessary assignments from patch
+- Borrowed a patch from upstream to fix Unicode usage in WPBTs
+
+* Fri Jul 23 2021 Dean Nelson <dnelson@redhat.com> - 20210604-1
+- Update to 20210604 source tree.
+- Bring the big-endian patches up-to-date with what has been submitted
+  upstream by Al Stone <ahs3@redhat.com> (not accepted currently).
+
+* Thu Apr 15 2021 Mohan Boddu <mboddu@redhat.com> - 20200925-3
+- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
+
+* Mon Jan 25 2021 Fedora Release Engineering <releng@fedoraproject.org> - 20200925-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
+* Mon Oct 19 2020 Al Stone <ahs3@redhat.com> - 20200925-1
+- Update to 20200925 source tree
+- Completely revamp the old big-endian patches (maintainability was the goal).
+  This results in a much larger patch set, but each patch is more clearly used
+  for a specific purpose.
+- The acpinames command has been deprecated upstream; acpiexec provides 
+  replacement functionality.
+
+* Fri Jul 31 2020 Fedora Release Engineering <releng@fedoraproject.org> - 20200430-3
+- Second attempt - Rebuilt for
+  https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 20200430-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Mon Jun 8 2020 Al Stone <ahs3@redhat.com> - 202004306-1
+- Update to 202004306 source tree, including patch refreshes
+
+* Wed Apr 1 2020 Al Stone <ahs3@redhat.com> - 20200326-1
+- Update to 20200326 source tree, including patch refreshes
+- Removed a couple of patches that got included upstream
+
+* Wed Feb 26 2020 Al Stone <ahs3@redhat.com> - 20200214-1
+- Update to 20200214 source tree, including patch refreshes
+- Add patch to fix up issues where strings and 4-byte quantities
+  get interchanged; C strings want to be null terminated now, but
+  AML does not so using strncpy is painful.
+- Add patch for s390x specific issue (dbtest), where initializing a
+  string on the stack behaves a little differently 
+- "PCC" is a defined Register() type, but "PlatformCommChannel" was
+  being used instead; put it back to "PCC" as it should be in pcc.patch
+- Add another big-endian patch to compensate for changes to nsutils.c
+
+* Mon Feb 24 2020 Al Stone <ahs3@redhat.com> - 20200110-1
+- Update to 20200110 source tree, including patch refreshes
+
+* Sun Feb 23 2020 Al Stone <ahs3@redhat.com> - 20191213-1
+- Update to 20191213 source tree, including patch refeshes.
+- badexit patch no longer needed, so removed
+- GCC10 enforces -fno-common now, catching multiple places where linkage
+  is not explicitly stated; added a patch to resolve the linker errors
+
+* Sun Feb 23 2020 Al Stone <ahs3@redhat.com> - 20191018-2
+- Upstream does not build from source -- this release not pushed into
+  the archives and noted here just for record keeping
+
+* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 20190816-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Sat Nov 23 2019 Al Stone <ahs3@redhat.com> - 20191018-1
+- Update to 20191019 source tree, including patch refeshes.
+
+* Tue Oct 29 2019 Al Stone <ahs3@redhat.com> - 20190816-1
+- Update to 20190816 source tree, including patch refeshes.
+- Add a patch to fix a non-zero exit from iasl -T ALL that actually succeeds
+- Remove the "template" tests; they have been subsumed by aslts.sh as they
+  should be
+
+* Thu Oct 24 2019 Al Stone <ahs3@redhat.com> - 20190703-1
+- Update to 20190703 source tree, including patch refeshes.
+
+* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org> - 20190509-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
+* Sun May 26 2019 Peter Robinson <pbrobinson@fedoraproject.org> 20190509-4
+- Bump release for clean upgrade from F-29
+
+* Mon May 13 2019 Al Stone <ahs3@redhat.com> - 20190509-2
+- Added an arm7hl specific fix acenv.h; GCC9 on arm7hl can now deal
+  with misalignments so the unaligned patch could be relaxed a bit
+- the templates test was failing because of the backup left behind
+  by the patch macro, so change the invocation of the macro.
+
+* Sat May 11 2019 Al Stone <ahs3@redhat.com> - 20190509-1
+- Update to 20190509 source tree, including patch refeshes.
+
+* Fri May 10 2019 Al Stone <ahs3@redhat.com> - 20190405-1
+- Update to 20190405 source tree, including patch refeshes.
+
+* Fri May 10 2019 Al Stone <ahs3@redhat.com> - 20190329-1
+- Update to 20190329 source tree, including patch refeshes.
+
+* Fri May 10 2019 Al Stone <ahs3@redhat.com> - 20190215-1
+- Update to 20190215 source tree, including patch refeshes.
+
+* Fri May 10 2019 Al Stone <ahs3@redhat.com> - 20190108-1
+- Update to 20190108 source tree, including patch refeshes.
+- Replace use of strncpy() with memcpy() when moving ASCII bytes around;
+  the tables use "strings" but they are seldom null terminated, causing
+  GCC9 to complain.  Closes BZ#1674629.
+
+* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 20181213-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
+* Wed Dec 19 2018 Al Stone <ahs3@redhat.com> - 20181213-2
+- Add a patch to allow zero DSDT addresses in the FADT when compiling
+
+* Thu Dec 13 2018 Al Stone <ahs3@redhat.com> - 20181213-1
+- Update to 20181213 source tree, including patch refeshes.
+- Refresh patches; folded be-tpm2 into the larger big-endian patch after
+
+* Thu Dec 13 2018 Al Stone <ahs3@redhat.com> - 20181031-1
+- Update to 20181031 source tree, including patch refeshes. Closes BZ#1656229
+- Refresh patches; folded be-tpm2 into the larger big-endian patch after
+  cleaning it up a bit
+- Merge in acpica-tools-tests PR
+
+* Wed Oct 24 2018 Al Stone <ahs3@redhat.com> - 20181003-1
+- Update to 20181003 source tree, including patch refeshes. Closes BZ#1634207
+- Merge in dump-tables PR
+
+* Mon Sep 17 2018 Al Stone <ahs3@redhat.com> - 20180810-1
+- Update to 20180810 source tree, including patch refeshes. Closes BZ#1614986
+
+* Wed Aug 8 2018 Al Stone <ahs3@redhat.com> - 20180629-3
+- Add in man page for acpiexamples.  So that the man page makes some sense,
+  also copy the source code used for acpiexamples to the doc directory for
+  this package.  Closes BZ#1611145.
+- Add in the converterSample.asl file from the misc tests.  Clean up the
+  run-misc-tests.sh script, too, to make it more robust by simplifying
+  the work done.
+
+* Thu Jul 12 2018 Fedora Release Engineering <releng@fedoraproject.org> - 20180629-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
+* Sun Jul 8 2018 Al Stone <ahs3@redhat.com> - 20180629-1
+- Update to 20180629 source tree, including patch refeshes. Closes BZ#1584923
+- Includes upstream fix for #1592971 (iasl segfault).
+
+* Thu Jun 21 2018 Al Stone <ahs3@redhat.com> - 20180531-1
+- Update to 20180531 source tree, including patch refeshes. Closes BZ#1584923
+
+* Tue May 22 2018 Al Stone <ahs3@redhat.com> - 20180508-2
+- %%pre and %%post scriptlets fail -- stupid thinko where I inadvertently
+  tested for alternatives not existing, vs existing 
+
+* Tue May 15 2018 Al Stone <ahs3@redhat.com> - 20180508-1
+- Update to 20180508 source tree, including patch refeshes. Closes BZ#1544048
+- acpidump/acpixtract no longer have alternatives, so remove the scriptlets
+  that maintain them and just install them directly; we do leave the pre-
+  and post- scriptlets to remove the alternatives for now.  Closes BZ#1576970
+- Typo: OPT_LDFLAGS, not OPT_LDLAGS in the build section.  Closes BZ#1560542
+
+* Mon May 14 2018 Al Stone <ahs3@redhat.com> - 20180427-1
+- Update to 20180427 source tree, including patch refeshes. Closes BZ#1544048
+
+* Mon May 14 2018 Al Stone <ahs3@redhat.com> - 20180313-1
+- Update to 20180313 source tree, including patch refeshes. Closes BZ#1544048
+
+* Fri Mar 16 2018 Al Stone <ahs3@redhat.com> - 20180209-1
+- Update to 20180209 source tree, including patch refeshes. Closes BZ#1544048
+- CVE-2017-13693: operand cache leak in dsutils.c -- applied github patch to
+  fix the leak.  Resolves BZ#1485346.
+- CVE-2017-13694: acpi parse and parseext cache leaks in psobjects.c -- applied
+  github patch to fix the leaks.  Resolves BZ#1485348.
+- CVE-2017-13695: operand cache leak in nseval.c -- applied github patch to fix
+  the leak.  Resolves BZ#1485349.
+- Security fixes for the CVEs above applied.  Closes BZ#1485355.  NOTE: these
+  patches fix acpica-tools ONLY; the kernel needs to be patch separately.
+- Added gcc to BuildRequires
+- It turns out the %%build section was incorrectly passing in OPT_CFLAGS; it
+  made the wrong assumptions about what generate/unix/Makefile.config did with
+  that value.  Added to the spec file what should happen so that a full and
+  complete set of C flags get passed in, not just the small subset that was.
+- Clean up compiler warnings for truncated strings
+- Clean up compiler warnings for pointer casting on 32-bit architectures
+
+* Fri Feb 09 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 20180105-3
+- Escape macros in %%changelog
+
+* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 20180105-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
+* Mon Jan 8 2018 Al Stone <ahs3@redhat.com> - 20180105-1
+- Update to 20180105 source tree, including patch refeshes. Closes BZ#1526651
+- Cleaned up changelog. Closes BZ#1525938
+- Pulled in a mips32/BE patch from Debian, for completeness sake
+
+* Mon Jan 8 2018 Al Stone <ahs3@redhat.com> - 20171215-1
+- Update to 20171215 source tree, including patch refeshes
+
+* Mon Nov 20 2017 Al Stone <ahs3@redhat.com> - 20171110-1
+- Update to 20171110 source tree, including patch refeshes
+- Add patch for mips64el build, should it ever be needed; it also cleans
+  up all 64-bit arches, so nice to have regardless
+- Add new patch for a TPM2 big-endian issue.
+
+* Fri Oct 6 2017 Al Stone <ahs3@redhat.com> - 20170929-1
+- Update to 20170929 source tree, including patch refeshes
+- Removed aslts-acpibin.patch to fix PATH problem in ASLTS; in upstream now
+
+* Wed Sep 27 2017 Al Stone <ahs3@redhat.com> - 20170831-1
+- Update to 20170831 source tree, including patch refeshes
+- Add aslts-acpibin.patch to fix PATH problem in ASLTS that prevents
+  some tests from being run
+
+* Fri Aug 18 2017 Al Stone <ahs3@redhat.com> - 20170728-3
+- Completed the big-endian fixes (I think)
+- Fix ppc64le.patch that inadvertently broke s390x
+- Minor patch refresh
+- Re-enable full %%check for s390x
+
+* Mon Aug 14 2017 Al Stone <ahs3@redhat.com> - 20170728-2
+- Start some long delayed clean-up
+- Temporarily disable one test section until all the big-endian issues
+  can be resolved; it provides what may be a false negative result
+- Consolidate the big-endian patches
+
+* Fri Aug 11 2017 Al Stone <ahs3@redhat.com> - 20170728-1
+- Update to 20170728 source tree, including patch refeshes
+
+* Fri Aug 11 2017 Al Stone <ahs3@redhat.com> - 20170629-1
+- Update to 20170629 source tree, including patch refeshes
+
+* Fri Aug 11 2017 Al Stone <ahs3@redhat.com> - 20170531-1
+- Update to 20170531 source tree, including patch refeshes
+
+* Wed Aug 02 2017 Fedora Release Engineering <releng@fedoraproject.org> - 20170303-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
+
+* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 20170303-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Fri May 5 2017 Al Stone <ahs3@redhat.com> - 20170303-3
+- Correct ppc64le.patch; it was not setting little-endian properly.
+
+* Tue May 2 2017 Al Stone <ahs3@redhat.com> - 20170303-2
+- Correct update-big-endian.patch; it introduced a bug due to logic being
+  replaced in the wrong order.
+
+* Fri Mar 31 2017 Al Stone <ahs3@redhat.com> - 20170303-1
+- Update to latest upstream.  Closes BZ#1381017.
+- Refresh patches.
+
+* Fri Mar 31 2017 Al Stone <ahs3@redhat.com> - 20170224-1
+- Update to latest upstream.  Closes BZ#1381017.
+- Refresh patches.
+
+* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 20170119-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
+* Mon Jan 30 2017 Al Stone <ahs3@redhat.com> - 20170119-1
+- Update to latest upstream.  Closes BZ#1381017.
+- Refresh patches.
+- Add patch to fix ASLTS.
+- Add patch to fix ppc64le build.
+- Add patch to fix arm7hl build.
+
+* Mon Jan 9 2017 Al Stone <ahs3@redhat.com> - 20161222-1
+- Update to latest upstream.  Closes BZ#1381017.
+- Refresh patches.
+
+* Mon Jan 9 2017 Al Stone <ahs3@redhat.com> - 20160930-3
+- Restructure the repairs for big-endian support to simplify patching -- it is
+  all combined into update-big-endian.patch now.  (NB: this version may still
+  have issues on big-endian)
+
+* Fri Dec 9 2016 Al Stone <ahs3@redhat.com> - 20160930-2
+- Major repairs to compiler and disassembler code to make it endian-neutral
+  again (added patches big-endian-part1 and big-endian-part2).
+
+* Fri Oct 28 2016 Al Stone <ahs3@redhat.com> - 20160930-2
+- Update to latest upstream.  Closes BZ#1381017.
+- Refresh patches.
+- Major repairs to disassembler code to make it endian-neutral again.
+
+* Thu Sep 1 2016 Al Stone <ahs3@redhat.com> - 20160831-1
+- Update to latest upstream.  Closes BZ#1372107.
+- Refresh patches.
+- Closes BZ#1365193 -- s390x FTBFS due to int/ptr size mismatch: made sure
+  the tools built with 64-bit integers for s390x
+
+* Tue Aug 2 2016 Al Stone <ahs3@redhat.com> - 20160729-1
+- Update to latest upstream.  Closes BZ#1361737.
+- Refresh patches.
+
+* Thu Jun 9 2016 Al Stone <ahs3@redhat.com> - 20160527-1
+- Update to latest upstream.  Closes BZ#1340573.
+- Refresh patches.
+
+* Tue Apr 26 2016 Al Stone <ahs3@redhat.com> - 20160422-1
+- Update to latest upstream.  Closes BZ#1329774.
+- Refresh patches.
+
+* Sat Mar 19 2016 Al Stone <ahs3@redhat.com> - 20160318-1
+- Update to latest upstream.  Closes BZ#1319359.
+- Refresh patches.
+
+* Mon Feb 22 2016 Al Stone <ahs3@redhat.com> - 20160212-1
+- Update to latest upstream.  Closes BZ#1307192.
+- Refresh patches.
+
+* Wed Feb 03 2016 Fedora Release Engineering <releng@fedoraproject.org> - 20160108-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Mon Jan 11 2016 Al Stone <ahs3@redhat.com> - 20160108-1
+- Update to latest upstream.  Closes BZ#1297078.
+- Refresh patches.
+
+* Wed Jan 6 2016 Al Stone <ahs3@redhat.com> - 20151218-1
+- Update to latest upstream.  Closes BZ#1292987.
+- Refresh patches, and remove one no longer needed (acpinames).
+
+* Tue Dec 15 2015 Al Stone <ahs3@redhat.com> - 20151124-1
+- Update to latest upstream.  Closes BZ#1267772.
+- Refresh patches.
+- Add back in a patch to rename source/tools/acpinames/AcpiNames.h to remove
+  the camel case; this is a leftover in the conversion to Un*x files, and
+  crept back in with this version.
+
+* Wed Oct 14 2015 Al Stone <ahs3@redhat.com> - 20150930-1
+- Update to latest upstream.  Closes BZ#1267772.
+- Refresh patches, and remove one no longer needed.
+
+* Thu Sep 10 2015 Al Stone <ahs3@redhat.com> - 20150818-2
+- Remove extraneous patch files for AAPITS.
+- Correct an assumption that all names are stored in little-endian format.
+  Fix is in asllookup-ppc64.patch.  Closes BZ#1251972.
+
+* Wed Sep 9 2015 Al Stone <ahs3@redhat.com> - 20150818-1
+- Update to latest upstream.  Closes BZ#1256134.
+- Refresh patches
+- This version deprecates aapits (ACPICA API Test Suite) for now; this is
+  in accordance with upstream wishes, but in this maintainer's view, may
+  not be the correct long term solution as there is no other API specific
+  test suite.
+- Add a patch to rename source/tools/acpinames/AcpiNames.h to remove the
+  camel case; this is a leftover in the conversion to Un*x files.
+
+* Tue Aug 4 2015 Al Stone <ahs3@redhat.com> - 20150717-1
+- Update to latest upstream.  Closes BZ#1244449.
+- Refresh patches
+- Bodge back together the aapits makefile after source file relocations in
+  the primary ACPICA component files
+- Update the misc test results to incorporate iasl improvements
+
+* Tue Jun 30 2015 Al Stone <ahs3@redhat.com> - 20150619-2
+- Silly error: forgot to remove patches that are no longer needed
+
+* Mon Jun 29 2015 Al Stone <ahs3@redhat.com> - 20150619-1
+- Update to latest upstream.  Closes BZ#1232512.
+- Refresh patches
+
+* Tue Jun 16 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 20150515-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
+
+* Wed Jun 3 2015 Al Stone <ahs3@redhat.com> - 20150515-2
+- Replace dev-mem patch with nodevmem; this is a much more robust version of
+  the functionality needed, and set up properly for arm64 -- the patch makes
+  it so that acpidump does not use /dev/mem at all on arm64 since it might
+  not contain the right data.
+
+* Mon Jun 1 2015 Al Stone <ahs3@redhat.com> - 20150515-1
+- Update to latest upstream.  Closes BZ#122166
+- Refresh patches
+- Add patch from upstream for incorrect UUIDs for NFIT
+- Add patch from Linaro to remove use of /dev/mem (use /sys instead)
+- Add patch from upstream to correct ARM GIC entries in MADT
+- Add patch to fix segfaults reported.  Closes BZ#1219341.
+
+* Mon Apr 13 2015 Al Stone <ahs3@redhat.com> - 20150410-1
+- Update to latest upstream.  Closes BZ#1190383
+- Refresh patches
+
+* Fri Apr 10 2015 Al Stone <ahs3@redhat.com> - 20150408-1
+- Update to latest upstream.  Closes BZ#1190383
+- Refresh patches
+
+* Mon Mar 2 2015 Al Stone <ahs3@redhat.com> - 20150204-1
+- Update to latest upstream.  Closes BZ#1190383
+- Refresh patches
+
+* Mon Nov 17 2014 Al Stone <ahs3@redhat.com> - 20141107-1
+- Update to latest upstream.  Closes BZ#1147131.
+- Refresh patches
+- Patch to ensure ASLTS always reports when an error occurs, instead
+  of glossing over it has been incorporated upstream, so remove patch.
+
+* Wed Oct 1 2014 Al Stone <ahs3@redhat.com> - 20140926-1
+- Update to latest upstream.  Closes BZ#1147131.
+- Refresh patches
+- Add patch to ensure ASLTS always reports when an error occurs, instead
+  of glossing over it.
+- Add use of %%__global_ldflags.  Closes BZ#1126134.
+
+* Fri Aug 29 2014 Al Stone <ahs3@redhat.com> - 20140828-1
+- Update to latest upstream.  Closes BZ#1135352.
+- Refresh patches.
+
+* Fri Aug 15 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 20140724-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
+
+* Mon Jul 28 2014 Al Stone <ahs3@redhat.com> - 20140724-1
+- Update to latest upstream.  Closes BZ#1114275.
+- This update adds support for the 5.1 version of the ACPI specification
+- Refresh patches so everything applies properly.
+
+* Fri Jun 6 2014 Dan Horák <dan[at]danny.cz> - 20140424-3
+- refresh the big endian patch so it applies correctly, fixes build on big endians
+
+* Thu May 22 2014 Al Stone <ahs3@redhat.com> - 20140424-2
+- Add ppc64le as a 64-bit arch in run-misc-tests.sh.  Closes BZ#1098614.
+- Re-enable big-endian support in iasl.
+
+* Wed May 7 2014 Al Stone <ahs3@redhat.com> - 20140424-1
+- Update to latest upstream.  Closes BZ#1091189.
+
+* Fri Apr 4 2014 Al Stone <ahs3@redhat.com> - 20140325-1
+- Update to latest upstream.  Closes BZ#1080791.
+- Incorporated patch to fix broken symlinks.  Closes BZ#1074256.
+- Add patch to fix missing .o files in aapits tests.
+
+* Wed Feb 26 2014 Al Stone <ahs3@redhat.com> - 20140214-1
+- Update to latest upstream.  Closes BZ#1053396.
+- Remove temporary patch so that AAPITS will build and run.
+- Add patch to print asllookup.c warning properly on big endian;
+  Closes BZ#1069178.
+
+* Tue Jan 21 2014 Al Stone <ahs3@redhat.com> - 20140114-1
+- Update to latest upstream.  Closes BZ#1053396.
+- Remove temporary patch to add Makefile missing from upstream tarball.
+- Add temporary patch so that AAPITS will build and run.
+
+* Tue Jan 7 2014 Al Stone <ahs3@redhat.com> - 20131218-1
+- Update to latest upstream.  Closes BZ#1044951.
+- Add temporary patch to add Makefile missing from upstream tarball.
+
+* Mon Nov 25 2013 Al Stone <ahs3@redhat.com> - 20131115-1
+- Update to latest upstream.  Closes BZ#1031255.
+- Add a little code to workaround build problems that can occur (the tests
+  will fail) when a build starts before midnight, but ends after midnight
+- Remove patch to include Makefile.config that was missing from tarball.
+
+* Wed Oct 09 2013 Al Stone <ahs3@redhat.com> - 20130927-1
+- Update to latest upstream.  Closes BZ#1013090.
+- Add temporary patch to include Makefile.config being missing from tarball.
+
+* Fri Sep 13 2013 Michael Schwendt <mschwendt@fedoraproject.org> - 20130823-5
+- correct iasl obs_ver
+
+* Tue Sep 10 2013 Dean Nelson <dnelson@redhat.com> - 20130823-4
+- Fix run-misc-tests.sh script to properly set the number of BITS to 64
+  when run on a s390x system.
+
+* Tue Sep 10 2013 Michael Schwendt <mschwendt@fedoraproject.org> - 20130823-3
+- correct pmtools obs_ver
+
+* Tue Aug 27 2013 Al Stone <ahs3@redhat.com> - 20130823-2
+- Add in a copy of the GPLv2 text in order to comply with the requirement
+  to always redistribute the terms of the license.
+
+* Mon Aug 26 2013 Al Stone <ahs3@redhat.com> - 20130823-1
+- Update to latest upstream source.
+
+* Tue Aug 20 2013 Al Stone <ahs3@redhat.com> - 20130725-2
+- Fix several rpmlint items (listed below)
+- Add versions to explicit provides for acpixtract, acpidump
+- Not all setup steps used -q
+- Setup executable test script (run-misc-tests.sh) differently
+- Removed unneeded commented out line with macros in it
+- Removed mixed use of spaces and tabs (all spaces now)
+- Corrected source URLs (upstream moved)
+
+* Sun Aug 18 2013 Al Stone <ahs3@redhat.com> - 20130725-1
+- Update to latest upstream source.
+
+* Wed Jul 24 2013 Al Stone <ahs3@redhat.com> - 20130626-1
+- Update to latest upstream source.
+- Move acpidump to acpidump-acpica so it be an alternative properly
+- Add basic man page for acpidump
+- Enable use of AAPITS tests during the check step
+
+* Sun Jun 02 2013 Al Stone <ahs3@redhat.com> - 20130517-2
+- Correct an oversight: we provide an acpidump in conflict with the
+  version in pmtools (which appears to be dead upstream) but had not
+  made it an alternative before
+
+* Tue May 28 2013 Al Stone <ahs3@redhat.com> - 20130517-1
+- Update to latest upstream source.
+- Remove acpica-tools-config.patch -- now in upstream
+- Remove iasl-signed-char.patch -- now in upstream
+- Updated debian-big_endian.patch
+- Updated debian-unaligned.patch
+
+* Mon May 13 2013 Al Stone <ahs3@redhat.com> - 20130328-1
+- Update to latest upstream source.
+
+* Wed Mar 20 2013 Al Stone <ahs3@redhat.com> - 20130214-2
+- Incorporate use of optflags macro in the build.
+- Remove extraneous rm -rf of buildroot.
+- Remove extraneous use of defattr in the files section.
+- Incorporate use of parallel make.
+- Remove extraneous use of the clean section.
+- Use simpler globbing in the files section.
+- Use simpler globbing in the install section.
+- Remove obsolete git notes from README.Fedora.
+- Remove ExcludeArch restrictions.
+
+* Mon Feb 18 2013 Al Stone <ahs3@redhat.com> - 20130214-1
+- New upstream.
+- Remove most of the config file patch; still need to remove -m{32,64}.
+- Clarify the licensing; this source is dual-licensed and is being released
+  under the GPLv2 as allowed by the original Intel license.
+- Redo the misc tests so they compare results properly.
+
+* Wed Feb 06 2013 Al Stone <ahs3@redhat.com> - 20130117-6
+- Added a zero-fill to a date used in comparing testing results so that the
+  comparison would be correct on days numbered < 10.
+
+* Thu Jan 31 2013 Al Stone <ahs3@redhat.com> - 20130117-5
+- Simplify versioning scheme and revert to the original scheme in use by
+  iasl, which is use the latest official tarball date (2013017) as the
+  version and 1%%{?dist} as the release, to be incremented for packaging
+  and bug fixes as needed.
+
+* Wed Jan 30 2013 Al Stone <ahs3@redhat.com> - 20130117-4
+- Do a little reset: go back to using just the original upstream tarball
+  instead of the latest git; the snapshot approach was more complicated
+  than needed.
+- Upstream tarballs split commands from test suites, so had to add the
+  test suite back in as another Source: file.
+- Change versioning scheme to include the APCI specification level (5.0),
+  the latest official tarball date (2013017) and a revision level  (the
+  .1 at the end) for packaging and bug fixes as needed.
+- Changed the License field to reflect the source tarball change; the release
+  tarball is dual-licensed, Intel ACPI or GPLv2.
+- Updated patches to apply cleanly as needed.
+- Corrected Obsoletes and Provides version numbers.
+
+* Mon Jan 28 2013 Al Stone <ahs3@redhat.com> - 20130117-3
+- Reconcile Fedora and Debian patches to be as alike as possible
+
+* Mon Jan 28 2013 Al Stone <ahs3@redhat.com> - 20130117-2
+- Verify ExcludeArch restrictions -- the architectures excluded can have
+  no use for these tools.  Hardware support for ACPI is simply not
+  implemented for them.
+- Corrected versioning to note this source came from a git pull.
+- Add License file as upstream has not yet provided one (and has not for
+  many years).
+- Insert properly versioned Provides and Obsoletes for iasl.
+- Corrected files to use man.1* (vs man.1.gz) to allow flexibility in the
+  compression being used.
+
+* Wed Jan 23 2013 Al Stone <ahs3@redhat.com> - 20130117-1
+- Clone from the current iasl package, with the intent of replacing it
+- Update source to latest upstream
+- NB: ACPICA documentation would normally be included in a source tarball.
+  But, since it is not clearly redistributable, it is not included in the
+  source RPM for this package.
+- Build all ACPICA tools, not just iasl (and hence the package replacement)
+- Add in brief man pages
+- Set up acpixtract from this package as an alternative to the same command
+  in the pmtools package
+- Run the check step once built
+