From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mx.groups.io with SMTP id smtpd.web11.55312.1683800615737954616 for ; Thu, 11 May 2023 03:23:35 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=HRnvPGJA; spf=pass (domain: intel.com, ip: 192.55.52.151, mailfrom: vincentx.ke@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1683800615; x=1715336615; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=LJ1dZC55dhuI4BeGDiNwlT0aoBnMDMdWyL4EawxjeHw=; b=HRnvPGJAcz7KEUHPDvs3AQZt35Xn9I3Nfh6cQN5TYOw28GZlssS5EMjT EBKuyHIYppIguvb79mu56n5oHAVuTP2yWyvzLAbsNrXZ5tq/nf8NcecyY e5K0Kv6GQRbrdoq3HSOUJSOoHs0y8DFWu2O0X1ADS+9wKxMI6o+tk+00d EVzPhJlezTfUSL7ZtNpmq834Yu6NUPatOcmSPiJ3izaFNZdcXMLyPG084 WDy7Jxx1e4oODaUD5v7hAoBUUEbE9QLzMHpRFqIWvPe51X7AB7aW7xzin KzcBeomrMlDOKvJUXRZzewhXusfF34zWrJmT1CEZs5YA+QylE+gH21/Lk Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10706"; a="330817659" X-IronPort-AV: E=Sophos;i="5.99,266,1677571200"; d="scan'208";a="330817659" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 May 2023 03:23:35 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10706"; a="702677637" X-IronPort-AV: E=Sophos;i="5.99,266,1677571200"; d="scan'208";a="702677637" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by fmsmga007.fm.intel.com with ESMTP; 11 May 2023 03:23:34 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Thu, 11 May 2023 03:23:34 -0700 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23 via Frontend Transport; Thu, 11 May 2023 03:23:34 -0700 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (104.47.56.171) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.23; Thu, 11 May 2023 03:23:34 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DlzND+NiI38KeG4GZcZQf1UN2Hk+p5+1SKSEzWt3ZRjHEr85pHeYftk+LEK4+FGkOsTjk+bHcaPBg5yPXosAE8ZSiixfW/u1v3ZOpHoANd9k7/9MXasGQoQj3eE1Siu2IaxGsYFSBYL3GGilhMTx8l5F6UAxtvb1y9SiqpFfZ79VvRRTcCUucmElkgc/2VA5D+WgNF3b55gH5PaynI5esB1rVlPItIK5+dV6wfxBssW/1qSALZ82UaDRstUDPYj7lb8an7aSgEFWozWQ80EjhGydS6gpUu8oiCJB79LGQwCLo8nlRqLHJGUIWsS7R/NvZxaInVqMJpQ7xducJGtJng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=P/gSr6olFwdmpcjUIstsdrhjDIwGwETrBxfwDqBK2sc=; b=bXxzRK0DgWdlEgV42PzrS43yk4fKS/CmUuZWZDv+NSXIvpQDRiu5zkNHHb0O5PNceJw6pR1OQb65p7gIy0pScBU3woHoOa5/FiYv+onzupvfPTPpuDb3m/OYMknbluQFT5R7RQNieAzIXxWJdM9SBHfoCkAmZcm65n+65zoJyckDcPrDB34XYT3p122MqbtD9RVlJZiUai7RyS0nBsxM6FDXfCVvM42VKLp//ntnG6By8YmS7RnJS913t4KKSlfQ027kTMVyrM/JI0NJI1hb3VkrhsQbRvaIePO1HQFS8ptXEWxWl4ZDdiGQ/nOagK9oe8bqWo3mVH/C2WNBUKU1Ag== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from DM4PR11MB5487.namprd11.prod.outlook.com (2603:10b6:5:39f::22) by SJ0PR11MB8270.namprd11.prod.outlook.com (2603:10b6:a03:479::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.32; Thu, 11 May 2023 10:23:31 +0000 Received: from DM4PR11MB5487.namprd11.prod.outlook.com ([fe80::5b26:2660:6aaf:37f9]) by DM4PR11MB5487.namprd11.prod.outlook.com ([fe80::5b26:2660:6aaf:37f9%3]) with mapi id 15.20.6387.022; Thu, 11 May 2023 10:23:31 +0000 From: "VincentX Ke" To: "Ni, Ray" , "devel@edk2.groups.io" CC: "Chiu, Chasel" , "Desimone, Nathaniel L" , "Oram, Isaac W" , "Gao, Liming" , "Dong, Eric" , "Sinha, Ankit" Subject: Re: [edk2-devel] [PATCH v6] MinPlatformPkg: Update HWSignature filed in FACS Thread-Topic: [edk2-devel] [PATCH v6] MinPlatformPkg: Update HWSignature filed in FACS Thread-Index: AQHZgyX2tFhhTcwRHEeCzU7mkJmB0q9UbumAgABrFiA= Date: Thu, 11 May 2023 10:23:31 +0000 Message-ID: References: <20230510095815.575-1-vincentx.ke@intel.com> In-Reply-To: Accept-Language: zh-TW, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM4PR11MB5487:EE_|SJ0PR11MB8270:EE_ x-ms-office365-filtering-correlation-id: 199c1433-9cef-4078-599f-08db5209c4de x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: z4Mnm+QcoTJdrBUjNRdORydYln+62gDNu6h01lx9EzSewfMZkHLxTXTR+qwHjEJ9o85P8bd8IZ2tVngCjGigCU2+b1cara+QD1ERht4/4vhl5WsVPNkigI+rsOnpwJRpCti1vxWjG0IGFMvC5/EZpdOWJTjkRqWU6kVhiP3WNAQRdWgaJvBQdTz46+8/EZotBC+WSxnLZETEgX8iQ56AonJbgeJI9AyY2UKPX58Z7VZ+/Yz7KgIqm4jXjyduB5mf3ipEPEloiJJywyEU/VDS1sG8WtbXfLuT3pDnFH0WmH5BzStxsZ9y967d/P2sMekvk4vQgxTH0y872GgRm2SU7KgTmai3WqMZ5DYWZX/1KCTp6NA42g995T8onx47cJxLDO/DxVSntodK+8T5CX9zXaaFG38mp2P7AlH4S5Cd7+pO2xR7KuyNlVBkG49NMid9c76FJ3vOUb9wT/T1wh+XESJGeSg+OdQViFqAJ/PYEIoNQVpiVx6Fl0CGw6grOwLx6EIZz+n8ZHJ5zttY5r+Jef/0IcxHtsJFTsqKYARyvccIEEOHzp6n4+06NzmEpkiotFJh5ozr1FFO5SPGG1ylEBuE6GEQRsCTK0Dyiiekf0DkzWhRDSubHlavrz3E5L9YlQlCb8Hpjf9hjKcXjK0OkA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR11MB5487.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(136003)(396003)(346002)(39860400002)(376002)(366004)(451199021)(9686003)(66446008)(33656002)(86362001)(966005)(4326008)(66476007)(64756008)(54906003)(7696005)(316002)(71200400001)(66556008)(478600001)(66946007)(76116006)(110136005)(2906002)(83380400001)(38070700005)(52536014)(8936002)(8676002)(5660300002)(30864003)(15650500001)(38100700002)(82960400001)(186003)(122000001)(26005)(53546011)(41300700001)(107886003)(6506007)(55016003)(66899021);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?ZpP8KIVb70uOKowVFLLPqXd3bkLT+ShGhpbsZbvDrVUdsNqQaj9YY8Lppoyg?= =?us-ascii?Q?Vtgvhd5V7dKNjGG92HjRW31JrcaZzXlZDNTf+3LVavYydTvIcBHltToLQssb?= =?us-ascii?Q?l8ZwAo28w4h1s5TakcW13MUnv9g+fMesHYSpAVZ23FOZnkxwojoKji0bM5T6?= =?us-ascii?Q?65tdr1f2YcVJXnPKTr+zDswKZS9bohAQQ17Wn+9HbLZYTHbYKqJUTFHuYByU?= =?us-ascii?Q?Ra82tgnxlnlZcvhKV3/FA3EvDPVRPCpX9Q8qy6fp5JoqzHnJpoFQ72xX/qNm?= =?us-ascii?Q?kZY2Ij/r7Ip3cnQ4HuyzWw7FrgS0HQoHNoeAvFynSkREo59gc+8mep8eLQG7?= =?us-ascii?Q?yC0fRLgD0va493JV4x2XMwkhWJnY+HYmszQKXCCZTwTR0XHxgF885z/Xk70d?= =?us-ascii?Q?eWpn1EfaFUigwsjnT6tAoWWCWquqIF+HrIDfvAktEziOqdsY+M9H6EXOb7Uv?= =?us-ascii?Q?pWl6Gmj9qOXDyGS7CDmNlwJoY0pV3yV7yC9fviB15XKoQg0ssN6b9tzyE8BX?= =?us-ascii?Q?aqK6CyCp9dyISJtPW7X/sw4RKzQALkW4TjMnGd4jShrcsvNpwf0oudHlDeZ9?= =?us-ascii?Q?IhRaBwDEGDB5MPGzBepAP69ezONSzQI1Gdu7fJJ5IMqeXCIEcKW85DM1PUgK?= =?us-ascii?Q?SdQkmR/y7sxcjlV+tw4ei9GM49Qeui4VsMu1tDVttfqpCG/NBphAhd06TlPo?= =?us-ascii?Q?r9n9pjmByDvXcfIYqk8gN2Q3T8YUnawfqQmsZEwWuBEvxUyVzMcF7FqbAIuF?= =?us-ascii?Q?JKkApfSvzPKDPn1HOJHBCVduNSdUMiKc3kmEISU/I40id8NgAtxhTX3VEkE2?= =?us-ascii?Q?HGcM+Ih+MBgUR44hGWKrXYEsI6UZ46GJxkXi/BS4l2/W0C5cqhDn13KwVOca?= =?us-ascii?Q?9tQuEyqGI4A807HfhN5usin29JE6d1W6NI9fa4q97J8WC4fBfL0KPfUb+SV2?= =?us-ascii?Q?8Co+eyeEdsAfdsttWFKirzLBxGHw5ns5nAuTP5miGdNriXDKQ9zbCVSn+ifP?= =?us-ascii?Q?KOgDGSphdN3TRbcYUWUVFQ3f4KZk2diJazJuU/SqLTrx1sdA+YGCoGOcy5yD?= =?us-ascii?Q?hovpXoFp3jP/3m4PbpIC5lf4rIbxx+zoH0TAC0TjzKycheI67zhCXX2UQm8w?= =?us-ascii?Q?aQSEy6t/R2PVTSIMyEWLMxccnMatLB7IWJP5INdrY7OhXtml2HfBbR1dH3dx?= =?us-ascii?Q?qUZAkR+abDQOa1AZgfFD/Jw0ZlKAgOftpvkuR3xRnRqxjxoFxi4BFQ0bPdRj?= =?us-ascii?Q?Zl5bwDjeRB9ghALxi8J8z+tVBZcvI0Q9FWRR66QRSDurFrK4TW/2aofOU+cS?= =?us-ascii?Q?hq2FPoyWOiOrIaxGk9if/1RM7v1oiDBiCMjxO0buNVe7WsuU21CMjCVflFDv?= =?us-ascii?Q?I0iZjx76cKGCyyvCkzJBztL1VS6CEO3DIQEXVGuGMQGGUG9LfrpRK6vvc4NZ?= =?us-ascii?Q?Ob+g454U2FfrciPkCMDIQGvnM9I1ABP7Wbq/WohMcnhHy9Zr7bIA+DzDsDWq?= =?us-ascii?Q?bJa1OY9JuRvYlFlNDswFlH0Kcr6fJZyO/A1tDg3pnYLtE37C1l0ytlyhZeFX?= =?us-ascii?Q?ml+jcfY+Gw2kOCBKrS66EIkyNu4ixHOSNwv6L6Bg?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB5487.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 199c1433-9cef-4078-599f-08db5209c4de X-MS-Exchange-CrossTenant-originalarrivaltime: 11 May 2023 10:23:31.3615 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: NWp4ho2DR5cmHVwFHdBwzKQ5y8gBbq967uw9jhe+LLrArueU3Y0Rt4B69833zfIGKiTIKDbPEGC0oC5aSR5q5g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR11MB8270 Return-Path: vincentx.ke@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi, Ray Thanks for the correction and those suggestion in previous patches. As your suggestion, the best way is keep following the logic of ACPI spec d= efinition. [Patch V7] updated with https://edk2.groups.io/g/devel/message/104685 I apologize for those flaws in previous patches. Sincerely, Vincent -----Original Message----- From: Ni, Ray =20 Sent: Thursday, May 11, 2023 11:42 AM To: devel@edk2.groups.io; Ke, VincentX Cc: Chiu, Chasel ; Desimone, Nathaniel L ; Oram, Isaac W ; Gao, Liming = ; Dong, Eric ; Sinha, Ankit = Subject: RE: [edk2-devel] [PATCH v6] MinPlatformPkg: Update HWSignature fil= ed in FACS Vincent, ACPI spec contains following: The XSDT provides identical functionality to the RSDT but accommodates ph= ysical addresses of DESCRIPTION HEADERs that are larger than 32 bits. Notice that both the XSDT and the R= SDT can be pointed to by the RSDP structure. An ACPI-compatible OS must use the XSDT if present. Which means, XSDT is used over RSDT when it exists. But your code measures both XSDT and RSDT. It's not right. This change is not a simple change. I suggest you review the ACPI spec in d= etail and close the opens within your team before sending another version o= f patches. Thanks, Ray > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of=20 > VincentX Ke > Sent: Wednesday, May 10, 2023 5:58 PM > To: devel@edk2.groups.io > Cc: Ke, VincentX ; Chiu, Chasel=20 > ; Desimone, Nathaniel L=20 > ; Oram, Isaac W=20 > ; Gao, Liming ;=20 > Dong, Eric ; Sinha, Ankit > Subject: [edk2-devel] [PATCH v6] MinPlatformPkg: Update HWSignature=20 > filed in FACS >=20 > From: VincentX Ke >=20 > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D4428 >=20 > Calculating CRC based on each ACPI table. > Update HWSignature filed in FACS based on CRC while ACPI table changed. >=20 > Change-Id: Ic0ca66ff10cda0fbcd0683020fab1bc9aea9b78c > Signed-off-by: VincentX Ke > Cc: Chasel Chiu > Cc: Nate DeSimone > Cc: Isaac Oram > Cc: Liming Gao > Cc: Eric Dong > Cc: Ankit Sinha > Signed-off-by: VincentX Ke > --- > Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c | 271 > +++++++++++++++----- > Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.inf | 1 + > 2 files changed, 209 insertions(+), 63 deletions(-) >=20 > diff --git=20 > a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > b/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > index e967031a3b..bb0f4a1f04 100644 > --- a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > +++ b/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > @@ -1191,98 +1191,243 @@ PlatformUpdateTables ( } >=20 >=20 >=20 > /** >=20 > - This function calculates RCR based on PCI Device ID and Vendor ID=20 > from the devices >=20 > - available on the platform. >=20 > - It also includes other instances of BIOS change to calculate CRC=20 > and provides as >=20 > - HWSignature filed in FADT table. >=20 > + This function calculates CRC based on each offset in the ACPI table. >=20 > + >=20 > + @param[in] Table The ACPI table required to calculate CRC. >=20 > + >=20 > + @retval CRC A pointer to allocate UINT32 that >=20 > + contains the CRC32 data. >=20 > +**/ >=20 > +UINT32 >=20 > +AcpiTableCrcCalculator ( >=20 > + IN EFI_ACPI_COMMON_HEADER *Table >=20 > + ) >=20 > +{ >=20 > + EFI_STATUS Status; >=20 > + UINT32 CRC; >=20 > + >=20 > + Status =3D EFI_SUCCESS; >=20 > + CRC =3D 0; >=20 > + >=20 > + // >=20 > + // Calculate CRC value. >=20 > + // >=20 > + if (Table->Signature =3D=3D > EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE) { >=20 > + // >=20 > + // Zero HardwareSignature field before Calculating FACS CRC >=20 > + // >=20 > + ((EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE *)Table)- > >HardwareSignature =3D 0; >=20 > + } >=20 > + >=20 > + Status =3D gBS->CalculateCrc32 ((UINT8 *)Table, (UINTN)Table->Length,= =20 > + &CRC); >=20 > + return CRC; >=20 > +} >=20 > + >=20 > +/** >=20 > + This function count ACPI tables in RSDT/XSDT and return the result. >=20 > + >=20 > + @param[in] Sdt ACPI XSDT/RSDT. >=20 > + @param[in] TablePointerSize Size of table pointer: >=20 > + 4(RSDT) or 8(XSDT). >=20 > + >=20 > + @retval TableCount The total number of ACPI tables in >=20 > + RSDT or XSDT. >=20 > +**/ >=20 > +UINTN >=20 > +CountTableInSDT ( >=20 > + IN EFI_ACPI_DESCRIPTION_HEADER *Sdt, >=20 > + IN UINTN TablePointerSize >=20 > + ) >=20 > +{ >=20 > + UINTN Index; >=20 > + UINTN TableCount; >=20 > + UINTN EntryCount; >=20 > + UINT64 EntryPtr; >=20 > + UINTN BasePtr; >=20 > + EFI_ACPI_COMMON_HEADER *Table; >=20 > + >=20 > + EntryCount =3D (Sdt->Length - sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / > TablePointerSize; >=20 > + BasePtr =3D (UINTN)(Sdt + 1); >=20 > + >=20 > + for (Index =3D 0, TableCount =3D 0; Index < EntryCount; Index++) { >=20 > + EntryPtr =3D 0; >=20 > + Table =3D NULL; >=20 > + CopyMem (&EntryPtr, (VOID *)(BasePtr + Index * TablePointerSize), > TablePointerSize); >=20 > + Table =3D (EFI_ACPI_COMMON_HEADER *)((UINTN)(EntryPtr)); >=20 > + if (Table) { >=20 > + TableCount++; >=20 > + } >=20 > + >=20 > + if (Table->Signature =3D=3D > EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE) { >=20 > + CopyMem ((VOID *)&Fadt, (VOID *)Table, sizeof > (EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE)); >=20 > + if (Fadt.FirmwareCtrl || Fadt.XFirmwareCtrl) { >=20 > + TableCount++; >=20 > + } >=20 > + >=20 > + if (Fadt.Dsdt || Fadt.XDsdt) { >=20 > + TableCount++; >=20 > + } >=20 > + } >=20 > + } >=20 > + >=20 > + return TableCount; >=20 > +} >=20 > + >=20 > +/** >=20 > + This function calculates CRC based on each ACPI table. >=20 > + It also calculates CRC and provides as HWSignature filed in FACS. >=20 > **/ >=20 > VOID >=20 > -IsHardwareChange ( >=20 > +IsAcpiTableChange ( >=20 > VOID >=20 > ) >=20 > { >=20 > - EFI_STATUS Status; >=20 > - UINTN Index; >=20 > - UINTN HandleCount; >=20 > - EFI_HANDLE *HandleBuffer; >=20 > - EFI_PCI_IO_PROTOCOL *PciIo; >=20 > - UINT32 CRC; >=20 > - UINT32 *HWChange; >=20 > - UINTN HWChangeSize; >=20 > - UINT32 PciId; >=20 > - UINTN Handle; >=20 > - EFI_ACPI_6_3_FIRMWARE_ACPI_CONTROL_STRUCTURE *FacsPtr; >=20 > - EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TABLE *pFADT; >=20 > - >=20 > - HandleCount =3D 0; >=20 > - HandleBuffer =3D NULL; >=20 > - >=20 > - Status =3D gBS->LocateHandleBuffer ( >=20 > - ByProtocol, >=20 > - &gEfiPciIoProtocolGuid, >=20 > - NULL, >=20 > - &HandleCount, >=20 > - &HandleBuffer >=20 > - ); >=20 > - if (EFI_ERROR (Status)) { >=20 > - return; // PciIO protocol not installed yet! >=20 > + EFI_STATUS Status; >=20 > + UINTN Index; >=20 > + UINTN AcpiTableCount; >=20 > + UINTN EntryCount; >=20 > + UINTN BasePtr; >=20 > + UINT64 EntryPtr; >=20 > + UINT32 *TableCrcRecord; >=20 > + UINT32 HWSignature; >=20 > + EFI_ACPI_COMMON_HEADER *Table; >=20 > + EFI_ACPI_6_5_ROOT_SYSTEM_DESCRIPTION_POINTER *Rsdp; >=20 > + EFI_ACPI_DESCRIPTION_HEADER *Rsdt; >=20 > + EFI_ACPI_DESCRIPTION_HEADER *Xsdt; >=20 > + >=20 > + Index =3D 0; >=20 > + AcpiTableCount =3D 0; >=20 > + EntryCount =3D 0; >=20 > + BasePtr =3D 0; >=20 > + EntryPtr =3D 0; >=20 > + HWSignature =3D 0; >=20 > + TableCrcRecord =3D NULL; >=20 > + Rsdp =3D NULL; >=20 > + Rsdt =3D NULL; >=20 > + Xsdt =3D NULL; >=20 > + >=20 > + DEBUG ((DEBUG_INFO, "%a() - Start\n", __FUNCTION__)); >=20 > + >=20 > + Status =3D EfiGetSystemConfigurationTable (&gEfiAcpiTableGuid, (VOID > **)&Rsdp); >=20 > + if (EFI_ERROR (Status) || (Rsdp =3D=3D NULL)) { >=20 > + return; >=20 > } >=20 >=20 >=20 > // >=20 > - // Allocate memory for HWChange and add additional entrie for >=20 > - // pFADT->XDsdt >=20 > + // ACPI table count starts with 0. >=20 > + // Then add ACPI tables found by RSDT/XSDT and FADT. >=20 > // >=20 > - HWChangeSize =3D HandleCount + 1; >=20 > - HWChange =3D AllocateZeroPool (sizeof(UINT32) * HWChangeSize); >=20 > - ASSERT(HWChange !=3D NULL); >=20 > + Rsdt =3D (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Rsdp->RsdtAddress; >=20 > + Xsdt =3D (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Rsdp->XsdtAddress; >=20 >=20 >=20 > - if (HWChange =3D=3D NULL) return; >=20 > + AcpiTableCount +=3D CountTableInSDT (Rsdt, sizeof (UINT32)); >=20 > + AcpiTableCount +=3D CountTableInSDT (Xsdt, sizeof (UINT64)); >=20 >=20 >=20 > // >=20 > - // add HWChange inputs: PCI devices >=20 > + // Allocate memory for founded ACPI tables. >=20 > + // >=20 > + TableCrcRecord =3D AllocateZeroPool (sizeof (UINT32) *=20 > + AcpiTableCount); >=20 > + if (TableCrcRecord =3D=3D NULL) { >=20 > + return; >=20 > + } >=20 > + >=20 > // >=20 > - for (Index =3D 0; HandleCount > 0; HandleCount--) { >=20 > - PciId =3D 0; >=20 > - Status =3D gBS->HandleProtocol (HandleBuffer[Index], &gEfiPciIoProto= colGuid, > (VOID **) &PciIo); >=20 > - if (!EFI_ERROR (Status)) { >=20 > - Status =3D PciIo->Pci.Read (PciIo, EfiPciIoWidthUint32, 0, 1, &Pci= Id); >=20 > - if (EFI_ERROR (Status)) { >=20 > - continue; >=20 > + // Search RSDT >=20 > + // >=20 > + AcpiTableCount =3D 0; >=20 > + EntryCount =3D (Rsdt->Length - sizeof (EFI_ACPI_DESCRIPTION_HEADER= )) / > sizeof (UINT32); >=20 > + BasePtr =3D (UINTN)(Rsdt + 1); >=20 > + for (Index =3D 0; Index < EntryCount; Index++) { >=20 > + EntryPtr =3D 0; >=20 > + Table =3D NULL; >=20 > + CopyMem ((VOID *)&EntryPtr, (VOID *)(BasePtr + Index * sizeof=20 > + (UINT32)), > sizeof (UINT32)); >=20 > + Table =3D (EFI_ACPI_COMMON_HEADER *)((UINTN)(EntryPtr)); >=20 > + if (Table) { >=20 > + TableCrcRecord[AcpiTableCount++] =3D AcpiTableCrcCalculator=20 > + (Table); >=20 > + } >=20 > + >=20 > + if (Table->Signature =3D=3D > EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE) { >=20 > + CopyMem ((VOID *)&Fadt, (VOID *)Table, sizeof > (EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE)); >=20 > + // >=20 > + // Locate FACS in FADT >=20 > + // >=20 > + if (Fadt.FirmwareCtrl) { >=20 > + CopyMem ((VOID *)&Facs, (VOID *)(UINTN)Fadt.FirmwareCtrl,=20 > + sizeof > (EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE)); >=20 > + TableCrcRecord[AcpiTableCount++] =3D AcpiTableCrcCalculator > ((EFI_ACPI_COMMON_HEADER *)(UINTN)Fadt.FirmwareCtrl); >=20 > + } >=20 > + >=20 > + // >=20 > + // Locate DSDT in FADT >=20 > + // >=20 > + if (Fadt.Dsdt) { >=20 > + TableCrcRecord[AcpiTableCount++] =3D AcpiTableCrcCalculator > ((EFI_ACPI_COMMON_HEADER *)(UINTN)Fadt.Dsdt); >=20 > } >=20 > - HWChange[Index++] =3D PciId; >=20 > } >=20 > } >=20 >=20 >=20 > // >=20 > - // Locate FACP Table >=20 > + // Search XSDT >=20 > // >=20 > - Handle =3D 0; >=20 > - Status =3D LocateAcpiTableBySignature ( >=20 > - EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE, >=20 > - (EFI_ACPI_DESCRIPTION_HEADER **) &pFADT, >=20 > - &Handle >=20 > - ); >=20 > - if (EFI_ERROR (Status) || (pFADT =3D=3D NULL)) { >=20 > - return; //Table not found or out of memory resource for pFADT table >=20 > + EntryCount =3D (Xsdt->Length - sizeof (EFI_ACPI_DESCRIPTION_HEADER))=20 > + / > sizeof (UINT64); >=20 > + BasePtr =3D (UINTN)(Xsdt + 1); >=20 > + for (Index =3D 0; Index < EntryCount; Index++) { >=20 > + EntryPtr =3D 0; >=20 > + Table =3D NULL; >=20 > + CopyMem ((VOID *)&EntryPtr, (VOID *)(BasePtr + Index * sizeof=20 > + (UINT64)), > sizeof (UINT64)); >=20 > + Table =3D (EFI_ACPI_COMMON_HEADER *)((UINTN)(EntryPtr)); >=20 > + if (Table) { >=20 > + TableCrcRecord[AcpiTableCount++] =3D AcpiTableCrcCalculator=20 > + (Table); >=20 > + } >=20 > + >=20 > + if (Table->Signature =3D=3D > EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE) { >=20 > + CopyMem ((VOID *)&Fadt, (VOID *)Table, sizeof > (EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE)); >=20 > + // >=20 > + // Locate FACS in FADT >=20 > + // >=20 > + CopyMem ((VOID *)&EntryPtr, &Fadt.XFirmwareCtrl, sizeof=20 > + (UINT64)); >=20 > + if (EntryPtr !=3D 0) { >=20 > + CopyMem ((VOID *)&Facs, (VOID *)EntryPtr, sizeof > (EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE)); >=20 > + TableCrcRecord[AcpiTableCount++] =3D AcpiTableCrcCalculator > ((EFI_ACPI_COMMON_HEADER *)(UINTN)EntryPtr); >=20 > + } else { >=20 > + CopyMem ((VOID *)&Facs, (VOID *)(UINTN)Fadt.FirmwareCtrl,=20 > + sizeof > (EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE)); >=20 > + TableCrcRecord[AcpiTableCount++] =3D AcpiTableCrcCalculator > ((EFI_ACPI_COMMON_HEADER *)(UINTN)Fadt.FirmwareCtrl); >=20 > + } >=20 > + >=20 > + // >=20 > + // Locate DSDT in FADT >=20 > + // >=20 > + CopyMem ((VOID *)&EntryPtr, &Fadt.XDsdt, sizeof (UINT64)); >=20 > + if (EntryPtr !=3D 0) { >=20 > + TableCrcRecord[AcpiTableCount++] =3D AcpiTableCrcCalculator > ((EFI_ACPI_COMMON_HEADER *)(UINTN)EntryPtr); >=20 > + } else { >=20 > + TableCrcRecord[AcpiTableCount++] =3D AcpiTableCrcCalculator > ((EFI_ACPI_COMMON_HEADER *)(UINTN)Fadt.Dsdt); >=20 > + } >=20 > + } >=20 > } >=20 >=20 >=20 > // >=20 > - // add HWChange inputs: others >=20 > + // FADT/FACS not found >=20 > // >=20 > - HWChange[Index++] =3D (UINT32)pFADT->XDsdt; >=20 > + if (Fadt.Header.Signature !=3D > EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE) { >=20 > + return; >=20 > + } >=20 > + >=20 > + if (Facs.Signature !=3D > EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE) { >=20 > + return; >=20 > + } >=20 >=20 >=20 > // >=20 > - // Calculate CRC value with HWChange data. >=20 > + // Calculate HWSignature data. >=20 > // >=20 > - Status =3D gBS->CalculateCrc32(HWChange, HWChangeSize, &CRC); >=20 > - DEBUG ((DEBUG_INFO, "CRC =3D %x and Status =3D %r\n", CRC, Status)); >=20 > + Status =3D gBS->CalculateCrc32 (TableCrcRecord, AcpiTableCount, > &HWSignature); >=20 > + DEBUG ((DEBUG_INFO, "HardwareSignature =3D %x and Status =3D %r\n", > HWSignature, Status)); >=20 >=20 >=20 > // >=20 > // Set HardwareSignature value based on CRC value. >=20 > // >=20 > - FacsPtr =3D (EFI_ACPI_6_3_FIRMWARE_ACPI_CONTROL_STRUCTURE > *)(UINTN)pFADT->FirmwareCtrl; >=20 > - FacsPtr->HardwareSignature =3D CRC; >=20 > - FreePool (HWChange); >=20 > + Facs.HardwareSignature =3D HWSignature; >=20 > + FreePool (TableCrcRecord); >=20 > + DEBUG ((DEBUG_INFO, "%a() - End\n", __FUNCTION__)); >=20 > } >=20 >=20 >=20 > VOID >=20 > @@ -1329,7 +1474,7 @@ AcpiEndOfDxeEvent ( > // >=20 > // Calculate Hardware Signature value based on current platform=20 > configurations >=20 > // >=20 > - IsHardwareChange (); >=20 > + IsAcpiTableChange (); >=20 > } >=20 >=20 >=20 > /** >=20 > diff --git=20 > a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.inf > b/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.inf > index 694492112b..f47cc3908d 100644 > --- a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.inf > +++ b/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.inf > @@ -128,6 +128,7 @@ > gEfiGlobalVariableGuid ## CONSUMES >=20 > gEfiHobListGuid ## CONSUMES >=20 > gEfiEndOfDxeEventGroupGuid ## CONSUMES >=20 > + gEfiAcpiTableGuid ## CONSUMES >=20 >=20 >=20 > [Depex] >=20 > gEfiAcpiTableProtocolGuid AND >=20 > -- > 2.39.2.windows.1 >=20 >=20 >=20 > -=3D-=3D-=3D-=3D-=3D-=3D > Groups.io Links: You receive all messages sent to this group. > View/Reply Online (#104537):=20 > https://edk2.groups.io/g/devel/message/104537 > Mute This Topic: https://groups.io/mt/98802410/1712937 > Group Owner: devel+owner@edk2.groups.io > Unsubscribe: https://edk2.groups.io/g/devel/unsub [ray.ni@intel.com]=20 > -=3D-=3D-=3D-=3D-=3D-=3D >=20