From 146b90337baaf11a74d6d6cdb18a0cde84c43623 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: May 09 2023 05:35:42 +0000 Subject: import acpica-tools-20210604-5.el9 --- diff --git a/SOURCES/0047-Support-PRMT-in-a-big-endian-world.patch b/SOURCES/0047-Support-PRMT-in-a-big-endian-world.patch new file mode 100644 index 0000000..67b4c55 --- /dev/null +++ b/SOURCES/0047-Support-PRMT-in-a-big-endian-world.patch @@ -0,0 +1,74 @@ +Signed-off-by: Dean Nelson +Reviewed-by: Al Stone +--- + source/common/dmtbdump2.c | 11 ++++++----- + source/compiler/dttable2.c | 4 ++-- + 2 files changed, 8 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 +@@ -1959,13 +1959,14 @@ AcpiDmDumpPrmt ( + ACPI_PRMT_MODULE_INFO *PrmtModuleInfo; + ACPI_PRMT_HANDLER_INFO *PrmtHandlerInfo; + ACPI_STATUS Status; ++ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length); + UINT32 i, j; + + + /* Main table header */ + + PrmtHeader = ACPI_ADD_PTR (ACPI_TABLE_PRMT_HEADER, Table, CurrentOffset); +- Status = AcpiDmDumpTable (Table->Length, CurrentOffset, PrmtHeader, ++ Status = AcpiDmDumpTable (TableLength, CurrentOffset, PrmtHeader, + sizeof (ACPI_TABLE_PRMT_HEADER), AcpiDmTableInfoPrmtHdr); + if (ACPI_FAILURE (Status)) + { +@@ -1977,20 +1978,20 @@ AcpiDmDumpPrmt ( + + /* PRM Module Information Structure array */ + +- for (i = 0; i < PrmtHeader->ModuleInfoCount; ++i) ++ for (i = 0; i < AcpiUtReadUint32 (&PrmtHeader->ModuleInfoCount); ++i) + { + PrmtModuleInfo = ACPI_ADD_PTR (ACPI_PRMT_MODULE_INFO, Table, CurrentOffset); +- Status = AcpiDmDumpTable (Table->Length, CurrentOffset, PrmtModuleInfo, ++ Status = AcpiDmDumpTable (TableLength, CurrentOffset, PrmtModuleInfo, + sizeof (ACPI_PRMT_MODULE_INFO), AcpiDmTableInfoPrmtModule); + + CurrentOffset += sizeof (ACPI_PRMT_MODULE_INFO); + + /* PRM handler information structure array */ + +- for (j = 0; j < PrmtModuleInfo->HandlerInfoCount; ++j) ++ for (j = 0; j < AcpiUtReadUint16 (&PrmtModuleInfo->HandlerInfoCount); ++j) + { + PrmtHandlerInfo = ACPI_ADD_PTR (ACPI_PRMT_HANDLER_INFO, Table, CurrentOffset); +- Status = AcpiDmDumpTable (Table->Length, CurrentOffset, PrmtHandlerInfo, ++ Status = AcpiDmDumpTable (TableLength, CurrentOffset, PrmtHandlerInfo, + sizeof (ACPI_PRMT_HANDLER_INFO), AcpiDmTableInfoPrmtHandler); + + CurrentOffset += sizeof (ACPI_PRMT_HANDLER_INFO); +Index: acpica-unix2-20210604/source/compiler/dttable2.c +=================================================================== +--- acpica-unix2-20210604.orig/source/compiler/dttable2.c ++++ acpica-unix2-20210604/source/compiler/dttable2.c +@@ -1278,7 +1278,7 @@ DtCompilePrmt ( + DtInsertSubtable (ParentTable, Subtable); + PrmtHeader = ACPI_CAST_PTR (ACPI_TABLE_PRMT_HEADER, Subtable->Buffer); + +- for (i = 0; i < PrmtHeader->ModuleInfoCount; i++) ++ for (i = 0; i < AcpiUtReadUint32 (&PrmtHeader->ModuleInfoCount); i++) + { + Status = DtCompileTable (PFieldList, AcpiDmTableInfoPrmtModule, + &Subtable); +@@ -1289,7 +1289,7 @@ DtCompilePrmt ( + DtInsertSubtable (ParentTable, Subtable); + PrmtModuleInfo = ACPI_CAST_PTR (ACPI_PRMT_MODULE_INFO, Subtable->Buffer); + +- for (j = 0; j < PrmtModuleInfo->HandlerInfoCount; j++) ++ for (j = 0; j < AcpiUtReadUint16 (&PrmtModuleInfo->HandlerInfoCount); j++) + { + Status = DtCompileTable (PFieldList, AcpiDmTableInfoPrmtHandler, + &Subtable); diff --git a/SOURCES/0048-Support-RGRT-in-a-big-endian-world.patch b/SOURCES/0048-Support-RGRT-in-a-big-endian-world.patch new file mode 100644 index 0000000..3f340fb --- /dev/null +++ b/SOURCES/0048-Support-RGRT-in-a-big-endian-world.patch @@ -0,0 +1,35 @@ +Signed-off-by: Dean Nelson +Reviewed-by: Al Stone +--- + 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 +@@ -2019,11 +2019,12 @@ AcpiDmDumpRgrt ( + ACPI_STATUS Status; + ACPI_TABLE_RGRT *Subtable = ACPI_CAST_PTR (ACPI_TABLE_RGRT, Table); + UINT32 Offset = sizeof (ACPI_TABLE_RGRT); ++ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length); + + + /* Main table */ + +- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoRgrt); ++ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoRgrt); + if (ACPI_FAILURE (Status)) + { + return; +@@ -2031,8 +2032,8 @@ AcpiDmDumpRgrt ( + + /* Dump the binary image as a subtable */ + +- Status = AcpiDmDumpTable (Table->Length, Offset, &Subtable->Image, +- Table->Length - Offset, AcpiDmTableInfoRgrt0); ++ Status = AcpiDmDumpTable (TableLength, Offset, &Subtable->Image, ++ TableLength - Offset, AcpiDmTableInfoRgrt0); + if (ACPI_FAILURE (Status)) + { + return; diff --git a/SOURCES/0049-Support-SVKL-in-a-big-endian-world.patch b/SOURCES/0049-Support-SVKL-in-a-big-endian-world.patch new file mode 100644 index 0000000..15f4ea3 --- /dev/null +++ b/SOURCES/0049-Support-SVKL-in-a-big-endian-world.patch @@ -0,0 +1,42 @@ +Signed-off-by: Dean Nelson +Reviewed-by: Al Stone +--- + source/common/dmtbdump3.c | 8 ++++---- + 1 file changed, 4 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 +@@ -339,14 +339,14 @@ AcpiDmDumpSvkl ( + ACPI_TABLE_HEADER *Table) + { + ACPI_STATUS Status; +- UINT32 Length = Table->Length; ++ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length); + UINT32 Offset = sizeof (ACPI_TABLE_SVKL); + ACPI_SVKL_KEY *Subtable; + + + /* Main table */ + +- Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSvkl); ++ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoSvkl); + if (ACPI_FAILURE (Status)) + { + return; +@@ -355,12 +355,12 @@ AcpiDmDumpSvkl ( + /* The rest of the table consists of subtables (single type) */ + + Subtable = ACPI_ADD_PTR (ACPI_SVKL_KEY, Table, Offset); +- while (Offset < Table->Length) ++ while (Offset < TableLength) + { + /* Dump the subtable */ + + AcpiOsPrintf ("\n"); +- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, ++ Status = AcpiDmDumpTable (TableLength, Offset, Subtable, + sizeof (ACPI_SVKL_KEY), AcpiDmTableInfoSvkl0); + if (ACPI_FAILURE (Status)) + { diff --git a/SOURCES/0050-Support-CEDT-in-a-big-endian-world.patch b/SOURCES/0050-Support-CEDT-in-a-big-endian-world.patch new file mode 100644 index 0000000..72f6cbf --- /dev/null +++ b/SOURCES/0050-Support-CEDT-in-a-big-endian-world.patch @@ -0,0 +1,91 @@ +Signed-off-by: Dean Nelson +--- + source/common/dmtbdump1.c | 29 ++++++++++++++++------------- + 1 file changed, 16 insertions(+), 13 deletions(-) + +Index: acpica-unix2-20210604/source/common/dmtbdump1.c +=================================================================== +--- acpica-unix2-20210604.orig/source/common/dmtbdump1.c ++++ acpica-unix2-20210604/source/common/dmtbdump1.c +@@ -242,20 +242,23 @@ AcpiDmDumpCedt ( + { + ACPI_STATUS Status; + ACPI_CEDT_HEADER *Subtable; +- UINT32 Length = Table->Length; ++ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length); + UINT32 Offset = sizeof (ACPI_TABLE_CEDT); ++ UINT16 SubtableLength; + + + /* There is no main table (other than the standard ACPI header) */ + + Subtable = ACPI_ADD_PTR (ACPI_CEDT_HEADER, Table, Offset); +- while (Offset < Table->Length) ++ while (Offset < TableLength) + { + /* Common subtable header */ + ++ SubtableLength = AcpiUtReadUint16 (&Subtable->Length); ++ + AcpiOsPrintf ("\n"); +- Status = AcpiDmDumpTable (Length, Offset, Subtable, +- Subtable->Length, AcpiDmTableInfoCedtHdr); ++ Status = AcpiDmDumpTable (TableLength, Offset, Subtable, ++ SubtableLength, AcpiDmTableInfoCedtHdr); + if (ACPI_FAILURE (Status)) + { + return; +@@ -264,8 +267,8 @@ AcpiDmDumpCedt ( + switch (Subtable->Type) + { + case ACPI_CEDT_TYPE_CHBS: +- Status = AcpiDmDumpTable (Length, Offset, Subtable, +- Subtable->Length, AcpiDmTableInfoCedt0); ++ Status = AcpiDmDumpTable (TableLength, Offset, Subtable, ++ SubtableLength, AcpiDmTableInfoCedt0); + if (ACPI_FAILURE (Status)) { + return; + } +@@ -277,8 +280,8 @@ AcpiDmDumpCedt ( + + /* print out table with first "Interleave target" */ + +- Status = AcpiDmDumpTable (Length, Offset, Subtable, +- Subtable->Length, AcpiDmTableInfoCedt1); ++ Status = AcpiDmDumpTable (TableLength, Offset, Subtable, ++ SubtableLength, AcpiDmTableInfoCedt1); + if (ACPI_FAILURE (Status)) { + return; + } +@@ -288,8 +291,8 @@ AcpiDmDumpCedt ( + for (i = 1; i < max; i++) { + unsigned int loc_offset = Offset + (i * 4) + ACPI_OFFSET(ACPI_CEDT_CFMWS, InterleaveTargets); + unsigned int *trg = &(ptr->InterleaveTargets[i]); +- Status = AcpiDmDumpTable (Length, loc_offset, trg, +- Subtable->Length, AcpiDmTableInfoCedt1_te); ++ Status = AcpiDmDumpTable (TableLength, loc_offset, trg, ++ SubtableLength, AcpiDmTableInfoCedt1_te); + if (ACPI_FAILURE (Status)) { + return; + } +@@ -302,7 +305,7 @@ AcpiDmDumpCedt ( + Subtable->Type); + + /* Attempt to continue */ +- if (!Subtable->Length) ++ if (!SubtableLength) + { + AcpiOsPrintf ("Invalid zero length subtable\n"); + return; +@@ -310,9 +313,9 @@ AcpiDmDumpCedt ( + } + + /* Point to next subtable */ +- Offset += Subtable->Length; ++ Offset += SubtableLength; + Subtable = ACPI_ADD_PTR (ACPI_CEDT_HEADER, Subtable, +- Subtable->Length); ++ SubtableLength); + } + } + diff --git a/SOURCES/CEDT-support_08.patch b/SOURCES/CEDT-support_08.patch new file mode 100644 index 0000000..3f10118 --- /dev/null +++ b/SOURCES/CEDT-support_08.patch @@ -0,0 +1,184 @@ +commit 19b11f91660b1a38a8e9655b0b1a4ad51ec4db1e +Author: Lawrence Hileman +Date: Fri Jan 7 16:33:40 2022 -0800 + + Add the subtable CFMWS to the CEDT table + +diff --git a/source/common/dmtbdump1.c b/source/common/dmtbdump1.c +index 105a88e..6abe8bc 100644 +--- a/source/common/dmtbdump1.c ++++ b/source/common/dmtbdump1.c +@@ -244,7 +244,6 @@ AcpiDmDumpCedt ( + ACPI_CEDT_HEADER *Subtable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_CEDT); +- ACPI_DMTABLE_INFO *InfoTable; + + + /* There is no main table (other than the standard ACPI header) */ +@@ -265,35 +264,50 @@ AcpiDmDumpCedt ( + switch (Subtable->Type) + { + case ACPI_CEDT_TYPE_CHBS: ++ Status = AcpiDmDumpTable (Length, Offset, Subtable, ++ Subtable->Length, AcpiDmTableInfoCedt0); ++ if (ACPI_FAILURE (Status)) { ++ return; ++ } ++ break; ++ ++ case ACPI_CEDT_TYPE_CFMWS: { ++ ACPI_CEDT_CFMWS *ptr = (ACPI_CEDT_CFMWS *) Subtable; ++ unsigned int i, max = 0x01 << (ptr->InterleaveWays); ++ ++ // print out table with first "Interleave target" ++ Status = AcpiDmDumpTable (Length, Offset, Subtable, ++ Subtable->Length, AcpiDmTableInfoCedt1); ++ if (ACPI_FAILURE (Status)) { ++ return; ++ } + +- InfoTable = AcpiDmTableInfoCedt0; ++ // Now, print out any interleave targets beyond the first. ++ for (i = 1; i < max; i++) { ++ unsigned int loc_offset = Offset + (i * 4) + ACPI_OFFSET(ACPI_CEDT_CFMWS, InterleaveTargets); ++ unsigned int *trg = &(ptr->InterleaveTargets[i]); ++ Status = AcpiDmDumpTable (Length, loc_offset, trg, ++ Subtable->Length, AcpiDmTableInfoCedt1_te); ++ if (ACPI_FAILURE (Status)) { ++ return; ++ } ++ } + break; ++ } + + default: +- + AcpiOsPrintf ("\n**** Unknown CEDT subtable type 0x%X\n\n", + Subtable->Type); + + /* Attempt to continue */ +- + if (!Subtable->Length) + { + AcpiOsPrintf ("Invalid zero length subtable\n"); + return; + } +- goto NextSubtable; +- } +- +- Status = AcpiDmDumpTable (Length, Offset, Subtable, +- Subtable->Length, InfoTable); +- if (ACPI_FAILURE (Status)) +- { +- return; + } + +-NextSubtable: + /* Point to next subtable */ +- + Offset += Subtable->Length; + Subtable = ACPI_ADD_PTR (ACPI_CEDT_HEADER, Subtable, + Subtable->Length); +diff --git a/source/common/dmtbinfo1.c b/source/common/dmtbinfo1.c +index 5b8ffe6..ac8e79e 100644 +--- a/source/common/dmtbinfo1.c ++++ b/source/common/dmtbinfo1.c +@@ -275,6 +275,28 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoCedt0[] = + ACPI_DMT_TERMINATOR + }; + ++/* 1: CXL Fixed Memory Window Structure */ ++ ++ACPI_DMTABLE_INFO AcpiDmTableInfoCedt1[] = ++{ ++ {ACPI_DMT_UINT32, ACPI_CEDT1_OFFSET (Reserved1), "Reserved", 0}, ++ {ACPI_DMT_UINT64, ACPI_CEDT1_OFFSET (BaseHpa), "Window base address", 0}, ++ {ACPI_DMT_UINT64, ACPI_CEDT1_OFFSET (WindowSize), "Window size", 0}, ++ {ACPI_DMT_UINT8, ACPI_CEDT1_OFFSET (InterleaveWays), "Interleave Members (2^n)", 0}, ++ {ACPI_DMT_UINT8, ACPI_CEDT1_OFFSET (InterleaveArithmetic), "Interleave Arithmetic", 0}, ++ {ACPI_DMT_UINT16, ACPI_CEDT1_OFFSET (Reserved2), "Reserved", 0}, ++ {ACPI_DMT_UINT32, ACPI_CEDT1_OFFSET (Granularity), "Granularity", 0}, ++ {ACPI_DMT_UINT16, ACPI_CEDT1_OFFSET (Restrictions), "Restrictions", 0}, ++ {ACPI_DMT_UINT16, ACPI_CEDT1_OFFSET (QtgId), "QtgId", 0}, ++ {ACPI_DMT_UINT32, ACPI_CEDT1_OFFSET (InterleaveTargets), "First Target", 0}, ++ ACPI_DMT_TERMINATOR ++}; ++ ++ACPI_DMTABLE_INFO AcpiDmTableInfoCedt1_te[] = ++{ ++ {ACPI_DMT_UINT32, ACPI_CEDT1_TE_OFFSET (InterleaveTarget), "Next Target", 0}, ++ ACPI_DMT_TERMINATOR ++}; + + /******************************************************************************* + * +diff --git a/source/compiler/dttable1.c b/source/compiler/dttable1.c +index c56f61c..972be5f 100644 +--- a/source/compiler/dttable1.c ++++ b/source/compiler/dttable1.c +@@ -282,18 +282,18 @@ DtCompileCedt ( + switch (CedtHeader->Type) + { + case ACPI_CEDT_TYPE_CHBS: +- ++ Status = DtCompileTable (PFieldList, AcpiDmTableInfoCedt0, &Subtable); ++ break; ++ case ACPI_CEDT_TYPE_CFMWS: ++ Status = DtCompileTable (PFieldList, AcpiDmTableInfoCedt1, &Subtable); + break; + + default: +- + DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "CEDT"); + return (AE_ERROR); + } + + /* CEDT Subtable */ +- +- Status = DtCompileTable (PFieldList, AcpiDmTableInfoCedt0, &Subtable); + if (ACPI_FAILURE (Status)) + { + return (Status); +diff --git a/source/include/acdisasm.h b/source/include/acdisasm.h +index 4e7c02f..c165ba0 100644 +--- a/source/include/acdisasm.h ++++ b/source/include/acdisasm.h +@@ -267,6 +267,8 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoBert[]; + extern ACPI_DMTABLE_INFO AcpiDmTableInfoBgrt[]; + extern ACPI_DMTABLE_INFO AcpiDmTableInfoCedtHdr[]; + extern ACPI_DMTABLE_INFO AcpiDmTableInfoCedt0[]; ++extern ACPI_DMTABLE_INFO AcpiDmTableInfoCedt1[]; ++extern ACPI_DMTABLE_INFO AcpiDmTableInfoCedt1_te[]; + extern ACPI_DMTABLE_INFO AcpiDmTableInfoCpep[]; + extern ACPI_DMTABLE_INFO AcpiDmTableInfoCpep0[]; + extern ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt0[]; +diff --git a/source/include/actbinfo.h b/source/include/actbinfo.h +index 80bd806..6b9f5c1 100644 +--- a/source/include/actbinfo.h ++++ b/source/include/actbinfo.h +@@ -112,6 +112,8 @@ + #define ACPI_ASF4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_ADDRESS,f) + #define ACPI_CEDT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CEDT_HEADER, f) + #define ACPI_CEDT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CEDT_CHBS, f) ++#define ACPI_CEDT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CEDT_CFMWS, f) ++#define ACPI_CEDT1_TE_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CEDT_CFMWS_TARGET_ELEMENT, f) + #define ACPI_CPEP0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CPEP_POLLING,f) + #define ACPI_CSRT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CSRT_GROUP,f) + #define ACPI_CSRT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CSRT_SHARED_INFO,f) +diff --git a/source/include/actbl1.h b/source/include/actbl1.h +index 420189e..359861f 100644 +--- a/source/include/actbl1.h ++++ b/source/include/actbl1.h +@@ -465,6 +465,11 @@ typedef struct acpi_cedt_cfmws + + } ACPI_CEDT_CFMWS; + ++typedef struct acpi_cedt_cfmws_target_element ++{ ++ UINT32 InterleaveTarget; ++} ACPI_CEDT_CFMWS_TARGET_ELEMENT; ++ + /* Values for Interleave Arithmetic field above */ + + #define ACPI_CEDT_CFMWS_ARITHMETIC_MODULO (0) diff --git a/SOURCES/CEDT-support_09.patch b/SOURCES/CEDT-support_09.patch new file mode 100644 index 0000000..e62bf04 --- /dev/null +++ b/SOURCES/CEDT-support_09.patch @@ -0,0 +1,173 @@ +commit d9798f5275bb20ab88ac854ba04e6e3bdb22cf6d +Author: Lawrence Hileman +Date: Mon Jan 17 15:24:34 2022 -0800 + + Fix Compile issue with CEDT and add template + +diff --git a/source/compiler/dttable1.c b/source/compiler/dttable1.c +index 972be5f..09aca3a 100644 +--- a/source/compiler/dttable1.c ++++ b/source/compiler/dttable1.c +@@ -262,6 +262,7 @@ DtCompileCedt ( + + while (*PFieldList) + { ++ int InsertFlag = 1; // if CFMWS and has more than one target, then set to zero later + SubtableStart = *PFieldList; + + /* CEDT Header */ +@@ -283,24 +284,68 @@ DtCompileCedt ( + { + case ACPI_CEDT_TYPE_CHBS: + Status = DtCompileTable (PFieldList, AcpiDmTableInfoCedt0, &Subtable); ++ if (ACPI_FAILURE (Status)) ++ { ++ return (Status); ++ } + break; +- case ACPI_CEDT_TYPE_CFMWS: ++ case ACPI_CEDT_TYPE_CFMWS: { ++ unsigned char *dump; ++ unsigned int idx, offset, max = 0; ++ ++ // Compile table with first "Interleave target" + Status = DtCompileTable (PFieldList, AcpiDmTableInfoCedt1, &Subtable); ++ if (ACPI_FAILURE (Status)) ++ { ++ return (Status); ++ } ++ ++ // Look in buffer for the number of targets ++ offset = (unsigned int) ACPI_OFFSET (ACPI_CEDT_CFMWS, InterleaveWays); ++ dump = (unsigned char *) Subtable->Buffer - 4; // place at beginning of cedt1 ++ max = 0x01 << dump[offset]; // 2^max, so 0=1, 1=2, 2=4, 3=8. 8 is MAX ++ if (max > 8) max=1; // Error in encoding Interleaving Ways. ++ if (max == 1) // if only one target, then break here. ++ break; // break if only one target. ++ ++ // We need to add more interleave targets, so write the current Subtable. ++ ParentTable = DtPeekSubtable (); ++ DtInsertSubtable (ParentTable, Subtable); // Insert AcpiDmTableInfoCedt1 table so we can put in ++ DtPushSubtable (Subtable); // the targets > the first. ++ ++ // Now, find out all interleave targets beyond the first. ++ for (idx = 1; idx < max; idx++) { ++ ParentTable = DtPeekSubtable (); ++ ++ if (*PFieldList) ++ { ++ Status = DtCompileTable (PFieldList, AcpiDmTableInfoCedt1_te, &Subtable); ++ if (ACPI_FAILURE (Status)) ++ { ++ return (Status); ++ } ++ if (Subtable) ++ { ++ DtInsertSubtable (ParentTable, Subtable); // got a target, so insert table. ++ InsertFlag = 0; ++ } ++ } ++ } ++ ++ DtPopSubtable (); ++ ParentTable = DtPeekSubtable (); + break; ++ } + + default: + DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "CEDT"); + return (AE_ERROR); + } + +- /* CEDT Subtable */ +- if (ACPI_FAILURE (Status)) +- { +- return (Status); +- } +- + ParentTable = DtPeekSubtable (); +- DtInsertSubtable (ParentTable, Subtable); ++ if (InsertFlag == 1) { ++ DtInsertSubtable (ParentTable, Subtable); ++ } + DtPopSubtable (); + } + +diff --git a/source/compiler/dttemplate.h b/source/compiler/dttemplate.h +index 5fdd599..a62da8b 100644 +--- a/source/compiler/dttemplate.h ++++ b/source/compiler/dttemplate.h +@@ -108,23 +108,58 @@ const unsigned char TemplateBoot[] = + + const unsigned char TemplateCedt[] = + { +- 0x43,0x45,0x44,0x54,0x84,0x00,0x00,0x00, /* 00000000 "CEDT...." */ +- 0x01,0x8B,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ +- 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ +- 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ +- 0x05,0x01,0x21,0x20,0x00,0x00,0x20,0x00, /* 00000020 "..! .. ." */ +- 0x33,0x33,0xCD,0xAB,0x01,0x00,0x00,0x00, /* 00000028 "33......" */ +- 0x00,0x00,0x00,0x00,0x00,0x21,0x43,0xD5, /* 00000030 ".....!C." */ +- 0x00,0x00,0x00,0x00,0x45,0x23,0x01,0x00, /* 00000038 "....E#.." */ ++ 0x43,0x45,0x44,0x54,0x9c,0x01,0x00,0x00, /* 00000000 "CEDT...." */ ++ 0x01,0x87,0x49,0x4e,0x54,0x45,0x4c,0x20, /* 00000008 "..INTEL " */ ++ 0x54,0x45,0x4d,0x50,0x4c,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ ++ 0x00,0x00,0x00,0x00,0x49,0x4e,0x54,0x4c, /* 00000018 "....INTL" */ ++ 0x17,0x12,0x21,0x20,0x00,0x00,0x20,0x00, /* 00000020 "..! .. ." */ ++ 0x00,0x5e,0xba,0x00,0x00,0x00,0x00,0x00, /* 00000028 ".^......" */ ++ 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00, /* 00000030 "........" */ ++ 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00, /* 00000038 "..... .." */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00, /* 00000040 "...... ." */ +- 0x44,0x44,0xCD,0xAB,0x01,0x00,0x00,0x00, /* 00000048 "DD......" */ +- 0x00,0x00,0x00,0x00,0x00,0x21,0x43,0xA5, /* 00000050 ".....!C." */ +- 0x00,0x00,0x00,0x00,0x45,0x23,0xB1,0x00, /* 00000058 "....E#.." */ ++ 0x01,0x5e,0xba,0x00,0x00,0x00,0x00,0x00, /* 00000048 ".^......" */ ++ 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00, /* 00000050 "..... .." */ ++ 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00, /* 00000058 "..... .." */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00, /* 00000060 "...... ." */ +- 0x55,0x55,0xCD,0xAB,0x01,0x00,0x00,0x00, /* 00000068 "UU......" */ +- 0x00,0x00,0x00,0x00,0x00,0x21,0x43,0xB5, /* 00000070 ".....!C." */ +- 0x00,0x00,0x00,0x00,0x45,0x23,0xB1,0x00, /* 00000078 "....E#.." */ +- 0x00,0x00,0x00,0x00 /* 00000080 "...." */ ++ 0x02,0x5e,0xba,0x00,0x00,0x00,0x00,0x00, /* 00000068 ".^......" */ ++ 0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00, /* 00000070 ".....0.." */ ++ 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00, /* 00000078 "..... .." */ ++ 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00, /* 00000080 "...... ." */ ++ 0x03,0x5e,0xba,0x00,0x00,0x00,0x00,0x00, /* 00000088 ".^......" */ ++ 0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00, /* 00000090 ".....@.." */ ++ 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00, /* 00000098 "..... .." */ ++ 0x00,0x00,0x00,0x00,0x01,0x00,0x28,0x00, /* 000000a0 "......(." */ ++ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000a8 "........" */ ++ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000b0 "........" */ ++ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000b8 "........" */ ++ 0x03,0x00,0x00,0x00,0x06,0x00,0x01,0x00, /* 000000c0 "........" */ ++ 0x00,0x5e,0xba,0x00,0x01,0x00,0x28,0x00, /* 000000c8 ".^....(." */ ++ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000d0 "........" */ ++ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000d8 "........" */ ++ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000e0 "........" */ ++ 0x03,0x00,0x00,0x00,0x06,0x00,0x01,0x00, /* 000000e8 "........" */ ++ 0x01,0x5e,0xba,0x00,0x01,0x00,0x28,0x00, /* 000000f0 ".^....(." */ ++ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000f8 "........" */ ++ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000100 "........" */ ++ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000108 "........" */ ++ 0x03,0x00,0x00,0x00,0x06,0x00,0x01,0x00, /* 00000110 "........" */ ++ 0x02,0x5e,0xba,0x00,0x01,0x00,0x28,0x00, /* 00000118 ".^....(." */ ++ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000120 "........" */ ++ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000128 "........" */ ++ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000130 "........" */ ++ 0x03,0x00,0x00,0x00,0x06,0x00,0x01,0x00, /* 00000138 "........" */ ++ 0x03,0x5e,0xba,0x00,0x01,0x00,0x2c,0x00, /* 00000140 ".^....,." */ ++ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000148 "........" */ ++ 0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000150 "........" */ ++ 0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000158 "........" */ ++ 0x03,0x00,0x00,0x00,0x06,0x00,0x01,0x00, /* 00000160 "........" */ ++ 0x00,0x5e,0xba,0x00,0x01,0x5e,0xba,0x00, /* 00000160 ".^...^.." */ ++ 0x01,0x00,0x2c,0x00,0x00,0x00,0x00,0x00, /* 00000170 "..,....." */ ++ 0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00, /* 00000178 "........" */ ++ 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /* 00000180 "........" */ ++ 0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00, /* 00000188 "........" */ ++ 0x0a,0x00,0x01,0x00,0x02,0x5e,0xba,0x00, /* 00000190 ".....^.." */ ++ 0x03,0x5e,0xba,0x00 /* 00000198 ".^.." */ + }; + + const unsigned char TemplateCpep[] = diff --git a/SOURCES/CEDT-support_10.patch b/SOURCES/CEDT-support_10.patch new file mode 100644 index 0000000..23ac3d9 --- /dev/null +++ b/SOURCES/CEDT-support_10.patch @@ -0,0 +1,127 @@ +commit 0914618b553d6f3366e568409cebf2656891ca69 +Author: Robert Moore +Date: Thu Feb 17 14:24:24 2022 -0800 + + Automated cleanup; No functional changes + Removed some tabs and // comments. + +diff --git a/source/common/dmtbdump1.c b/source/common/dmtbdump1.c +index 6abe8bc..88b7c1b 100644 +--- a/source/common/dmtbdump1.c ++++ b/source/common/dmtbdump1.c +@@ -275,14 +275,16 @@ AcpiDmDumpCedt ( + ACPI_CEDT_CFMWS *ptr = (ACPI_CEDT_CFMWS *) Subtable; + unsigned int i, max = 0x01 << (ptr->InterleaveWays); + +- // print out table with first "Interleave target" ++ /* print out table with first "Interleave target" */ ++ + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoCedt1); + if (ACPI_FAILURE (Status)) { + return; + } + +- // Now, print out any interleave targets beyond the first. ++ /* Now, print out any interleave targets beyond the first. */ ++ + for (i = 1; i < max; i++) { + unsigned int loc_offset = Offset + (i * 4) + ACPI_OFFSET(ACPI_CEDT_CFMWS, InterleaveTargets); + unsigned int *trg = &(ptr->InterleaveTargets[i]); +diff --git a/source/compiler/dttable1.c b/source/compiler/dttable1.c +index 09aca3a..c1e6b98 100644 +--- a/source/compiler/dttable1.c ++++ b/source/compiler/dttable1.c +@@ -262,7 +262,9 @@ DtCompileCedt ( + + while (*PFieldList) + { +- int InsertFlag = 1; // if CFMWS and has more than one target, then set to zero later ++ /* if CFMWS and has more than one target, then set to zero later */ ++ ++ int InsertFlag = 1; + SubtableStart = *PFieldList; + + /* CEDT Header */ +@@ -293,27 +295,30 @@ DtCompileCedt ( + unsigned char *dump; + unsigned int idx, offset, max = 0; + +- // Compile table with first "Interleave target" ++ /* Compile table with first "Interleave target" */ ++ + Status = DtCompileTable (PFieldList, AcpiDmTableInfoCedt1, &Subtable); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + +- // Look in buffer for the number of targets ++ /* Look in buffer for the number of targets */ + offset = (unsigned int) ACPI_OFFSET (ACPI_CEDT_CFMWS, InterleaveWays); +- dump = (unsigned char *) Subtable->Buffer - 4; // place at beginning of cedt1 +- max = 0x01 << dump[offset]; // 2^max, so 0=1, 1=2, 2=4, 3=8. 8 is MAX +- if (max > 8) max=1; // Error in encoding Interleaving Ways. +- if (max == 1) // if only one target, then break here. +- break; // break if only one target. ++ dump = (unsigned char *) Subtable->Buffer - 4; /* place at beginning of cedt1 */ ++ max = 0x01 << dump[offset]; /* 2^max, so 0=1, 1=2, 2=4, 3=8. 8 is MAX */ ++ if (max > 8) max=1; /* Error in encoding Interleaving Ways. */ ++ if (max == 1) /* if only one target, then break here. */ ++ break; /* break if only one target. */ ++ ++ /* We need to add more interleave targets, so write the current Subtable. */ + +- // We need to add more interleave targets, so write the current Subtable. + ParentTable = DtPeekSubtable (); +- DtInsertSubtable (ParentTable, Subtable); // Insert AcpiDmTableInfoCedt1 table so we can put in +- DtPushSubtable (Subtable); // the targets > the first. ++ DtInsertSubtable (ParentTable, Subtable); /* Insert AcpiDmTableInfoCedt1 table so we can put in */ ++ DtPushSubtable (Subtable); /* the targets > the first. */ ++ ++ /* Now, find out all interleave targets beyond the first. */ + +- // Now, find out all interleave targets beyond the first. + for (idx = 1; idx < max; idx++) { + ParentTable = DtPeekSubtable (); + +@@ -326,7 +331,7 @@ DtCompileCedt ( + } + if (Subtable) + { +- DtInsertSubtable (ParentTable, Subtable); // got a target, so insert table. ++ DtInsertSubtable (ParentTable, Subtable); /* got a target, so insert table. */ + InsertFlag = 0; + } + } +diff --git a/source/include/actbl1.h b/source/include/actbl1.h +index 359861f..ccf7c95 100644 +--- a/source/include/actbl1.h ++++ b/source/include/actbl1.h +@@ -468,19 +468,20 @@ typedef struct acpi_cedt_cfmws + typedef struct acpi_cedt_cfmws_target_element + { + UINT32 InterleaveTarget; ++ + } ACPI_CEDT_CFMWS_TARGET_ELEMENT; + + /* Values for Interleave Arithmetic field above */ + +-#define ACPI_CEDT_CFMWS_ARITHMETIC_MODULO (0) ++#define ACPI_CEDT_CFMWS_ARITHMETIC_MODULO (0) + + /* Values for Restrictions field above */ + +-#define ACPI_CEDT_CFMWS_RESTRICT_TYPE2 (1) +-#define ACPI_CEDT_CFMWS_RESTRICT_TYPE3 (1<<1) +-#define ACPI_CEDT_CFMWS_RESTRICT_VOLATILE (1<<2) +-#define ACPI_CEDT_CFMWS_RESTRICT_PMEM (1<<3) +-#define ACPI_CEDT_CFMWS_RESTRICT_FIXED (1<<4) ++#define ACPI_CEDT_CFMWS_RESTRICT_TYPE2 (1) ++#define ACPI_CEDT_CFMWS_RESTRICT_TYPE3 (1<<1) ++#define ACPI_CEDT_CFMWS_RESTRICT_VOLATILE (1<<2) ++#define ACPI_CEDT_CFMWS_RESTRICT_PMEM (1<<3) ++#define ACPI_CEDT_CFMWS_RESTRICT_FIXED (1<<4) + + + /******************************************************************************* diff --git a/SOURCES/CEDT-support_11.patch b/SOURCES/CEDT-support_11.patch new file mode 100644 index 0000000..f1205b7 --- /dev/null +++ b/SOURCES/CEDT-support_11.patch @@ -0,0 +1,18 @@ +commit 7021087eedb0d7156286e9e4f255e93c07816921 +Author: Robert Moore +Date: Fri Aug 26 12:20:07 2022 -0700 + + Remove a duplicate of ACPI_SIG_CEDT + +diff --git a/source/tools/acpisrc/astable.c b/source/tools/acpisrc/astable.c +index b984e6a..9f84aea 100644 +--- a/source/tools/acpisrc/astable.c ++++ b/source/tools/acpisrc/astable.c +@@ -541,7 +541,6 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = { + {"ACPI_TABLE_CSRT", SRC_TYPE_STRUCT}, + {"ACPI_TABLE_DBG2", SRC_TYPE_STRUCT}, + {"ACPI_TABLE_DBGP", SRC_TYPE_STRUCT}, +- {"ACPI_TABLE_CEDT", SRC_TYPE_STRUCT}, + {"ACPI_TABLE_DMAR", SRC_TYPE_STRUCT}, + {"ACPI_TABLE_DRTM", SRC_TYPE_STRUCT}, + {"ACPI_TABLE_ECDT", SRC_TYPE_STRUCT}, diff --git a/SPECS/acpica-tools.spec b/SPECS/acpica-tools.spec index 4e965a5..e24c93e 100644 --- a/SPECS/acpica-tools.spec +++ b/SPECS/acpica-tools.spec @@ -1,6 +1,6 @@ Name: acpica-tools Version: 20210604 -Release: 3%{?dist} +Release: 5%{?dist} Summary: ACPICA tools for the development and debug of ACPI tables License: GPLv2 @@ -70,6 +70,9 @@ 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 +Patch46: 0047-Support-PRMT-in-a-big-endian-world.patch +Patch47: 0048-Support-RGRT-in-a-big-endian-world.patch +Patch48: 0049-Support-SVKL-in-a-big-endian-world.patch # other miscellaneous patches Patch100: unaligned.patch @@ -90,6 +93,11 @@ Patch114: armv7-str-fixes.patch Patch115: dbtest.patch Patch116: ull-32bit.patch Patch117: wpbt-unicode.patch +Patch118: CEDT-support_08.patch +Patch119: CEDT-support_09.patch +Patch120: CEDT-support_10.patch +Patch121: CEDT-support_11.patch +Patch122: 0050-Support-CEDT-in-a-big-endian-world.patch BuildRequires: make BuildRequires: bison patchutils flex gcc @@ -255,6 +263,17 @@ fi %changelog +* Thu Oct 06 2022 Dean Nelson - 20210604-5 +- Backport 19b11f91660b ("Add the subtable CFMWS to the CEDT table"). +- Backport d9798f5275bb ("Fix Compile issue with CEDT and add template"). +- Backport 0914618b553d ("Automated cleanup; No functional changes"). +- Backport 7021087eedb0 ("Remove a duplicate of ACPI_SIG_CEDT"). +- Add in big-endian patch for CEDT tble. + +* Mon Oct 03 2022 Dean Nelson - 20210604-4 +- Add in big-endian patches for PRMT, RGRT and SVKL tables. +- Fix big-endian related prmt.asl compiler errors. + * Mon Aug 09 2021 Mohan Boddu - 20210604-3 - Rebuilt for IMA sigs, glibc 2.34, aarch64 flags Related: rhbz#1991688