From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail05.groups.io (mail05.groups.io [45.79.224.7]) by spool.mail.gandi.net (Postfix) with ESMTPS id 6ACC4941E5A for ; Tue, 14 May 2024 23:41:48 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=G7r/WrGhlcSz4EkDbQEjY7MRPbddm0O9EEIWbLe0PdE=; c=relaxed/simple; d=groups.io; h=From:To:CC:Subject:Thread-Topic:Thread-Index:Importance:Date:Message-ID:References:In-Reply-To:Accept-Language:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Resent-Date:Resent-From:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Language:Content-Type:Content-Transfer-Encoding; s=20240206; t=1715730106; v=1; b=hHEcqwIkY+FweMuVNfhXesaLIrbC/cZsJCt44Q7ukSZ9V0sW82U1KQRyuOKw6uD9O/ahKUg+ 0aHEu7KDtRA9EiukzasjIChoa2tqj45WfdrgLEJh4fpMg9c0pHwhJPeMFATicfL0JGuq3MMAKT8 EKb5CaRJ7aDzRJIC1BCkMwbxksYHSboR/X25qtpA2Sz5Vg7Jao81M99vzwGuh4eXo1LCZwzQyJU 0iofptIKWHVzdgiqPFdkbhM4JaPyYmhYH/ID/h/f8dCD+pcls1Kvi4mrwXCLYRFunx0m39kjwoS 7GrJ8xY9V+ysZ8c9yjNwp/exvHiTiZNfu+hg27FrSOY/Q== X-Received: by 127.0.0.2 with SMTP id gJwgYY7687511xpiKLCozftk; Tue, 14 May 2024 16:41:46 -0700 X-Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.19]) by mx.groups.io with SMTP id smtpd.web11.2427.1715730105840859232 for ; Tue, 14 May 2024 16:41:45 -0700 X-CSE-ConnectionGUID: pdCvbwxQRUCSeTRP5HhmZw== X-CSE-MsgGUID: tShKtmefSlOD0S/xGbiVyQ== X-IronPort-AV: E=McAfee;i="6600,9927,11073"; a="11608153" X-IronPort-AV: E=Sophos;i="6.08,160,1712646000"; d="scan'208";a="11608153" X-Received: from fmviesa010.fm.intel.com ([10.60.135.150]) by fmvoesa113.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 May 2024 16:41:45 -0700 X-CSE-ConnectionGUID: /jFIyykkQ0mD2SneF2DWww== X-CSE-MsgGUID: HUa1KF8MS4maYdyteR1QcA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,160,1712646000"; d="scan'208";a="30934084" X-Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by fmviesa010.fm.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 14 May 2024 16:41:46 -0700 X-Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Tue, 14 May 2024 16:41:45 -0700 X-Received: from orsmsx603.amr.corp.intel.com (10.22.229.16) by ORSMSX611.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Tue, 14 May 2024 16:41:44 -0700 X-Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35 via Frontend Transport; Tue, 14 May 2024 16:41:44 -0700 X-Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.40) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Tue, 14 May 2024 16:41:44 -0700 X-Received: from MW4PR11MB5821.namprd11.prod.outlook.com (2603:10b6:303:184::5) by PH0PR11MB5141.namprd11.prod.outlook.com (2603:10b6:510:3c::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7587.27; Tue, 14 May 2024 23:41:41 +0000 X-Received: from MW4PR11MB5821.namprd11.prod.outlook.com ([fe80::18ff:958c:8bd:aed6]) by MW4PR11MB5821.namprd11.prod.outlook.com ([fe80::18ff:958c:8bd:aed6%4]) with mapi id 15.20.7544.052; Tue, 14 May 2024 23:41:41 +0000 From: "Nate DeSimone" To: "Ke, VincentX" , "devel@edk2.groups.io" CC: "Chiu, Chasel" , "Gao, Liming" , "Dong, Eric" , "Sinha, Ankit" Subject: Re: [edk2-devel] [PATCH v8] MinPlatformPkg: Update HWSignature filed in FACS Thread-Topic: [PATCH v8] MinPlatformPkg: Update HWSignature filed in FACS Thread-Index: AQHZijzeQlIeEyfSkEm4ohsv9sa7t7GZm6+g Importance: high X-Priority: 1 Date: Tue, 14 May 2024 23:41:41 +0000 Message-ID: References: <20230519102928.155-1-vincentx.ke@intel.com> In-Reply-To: <20230519102928.155-1-vincentx.ke@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MW4PR11MB5821:EE_|PH0PR11MB5141:EE_ x-ms-office365-filtering-correlation-id: dc11f637-1175-4f03-b423-08dc746f67ed x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam-message-info: =?us-ascii?Q?sFFK4KB+Xx6ODh9tfu4xj6hlsloVYTxcmzpQQMzXdm/iOymXLgN2OcUldNi7?= =?us-ascii?Q?Ax76m2VBTiJbUh+Z/5D5OZbs+NnNOiwStEwboGU0udTPrcKegTukUC6vT6lc?= =?us-ascii?Q?/cfBNMHT2uDBHSHxfrgfiFxmYMwaZZH1ACcyb9uboFITuXbax0ZUozlk0S9O?= =?us-ascii?Q?Uj/Yk265rGgA+ICmMpk+SkuFvbrwJmo+LGmZMJ+5t/E3MnYUQCuYh7/yfTfT?= =?us-ascii?Q?woX8C0jqLLk8fFC4Xt+bAX0F+uBC8pRk1yLhRmvG5AttOBcu9nvOpBLetiac?= =?us-ascii?Q?0Ejtx1SLkm4mdm763fAXu2VhxYH17sgdu41MADGE31zfhg4y3V7VLUIzt4uJ?= =?us-ascii?Q?w/7gUV2E55nyCIkQJEr+HFX6MXL771C08TAjRII067KtCA7wi/dWegXBQd8u?= =?us-ascii?Q?0DNTRdqtJptuY8tC/guBA9EiwPrIbEdQ4Jm4hX5qFvbSZdux2AK2CF8tj4dV?= =?us-ascii?Q?e1XiAjb5HGj9zQgoESHYEFLTsUjxJTl4xp6KoElTP3rNUAStKxID6vNFdwd8?= =?us-ascii?Q?3HdkF+HZIm2HgpmOR9g8A3R//vPP/AgmVtGyAxDIx3jfVL6aPFZElw6gWUiq?= =?us-ascii?Q?Wa2Ce1EE0SybprpxZ5cmK8pNrMOjiqGE8KOugU+HZ0kin8kG7Szl9tIkEmkf?= =?us-ascii?Q?ExWYh0ytXVUDCnki0P53xnj0ywl9o4GChMjoKq2+Gd3P9BJOSRPlGB2hfhXG?= =?us-ascii?Q?cJuunx3O/ih5FayekkGjv+VTHFHAkf7qK6CAsbJHCTy5XwJCX9cBXOUS51UR?= =?us-ascii?Q?CDJLTzmXveUkrcKwYlEqgKf9cwnGILnsob4syPd5RvFaM0s6OR3Ate7Uevjt?= =?us-ascii?Q?03WWqvJY+Gpuue0N0KTLPoZPe+HIoEqwYxHxQDby6GdnxoHOIDzNfwzr1DHm?= =?us-ascii?Q?f0TYcZtZz7jamr8vlio/BXfoAiLjfTHdYwE6s20PbefdshmcUdgXlOtv17dZ?= =?us-ascii?Q?gp0OCeguTeRQGglAyuOdW3n6tMcrW3n6MlYfiDEpFW45EHAfvNZXyJqR5yuw?= =?us-ascii?Q?6OINGYYbMIvU2EVByxWiPOgxtAx8Y7ZTGjrHmsEjT6iAe/FnCiJ7IVYothK7?= =?us-ascii?Q?/zESxdRGAx7WhX12cHWBQMa3I2KEpqrUGJu4K3sPzDvmpkT0WEmQeuA3auUr?= =?us-ascii?Q?anP/xHOpBNMU4D+hV2VBjcTv7r3/4URcj7bC5WiP7gfX6qzHSWVEeVxgTiOS?= =?us-ascii?Q?+yZVcHB9NDdBBOtIRe01xHCSbIM4zRRo1wCIxBIlEPEth7tmYCIyyGcxrv9t?= =?us-ascii?Q?5ZHEfW5DNzJ1OngeE37yqlkjjcCoqYvyVtV7KqvQHA=3D=3D?= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?tPRo9giZ4jpIMZ8Z2f0DWZQLFW5DaFYwdEGl3lEWUWIAn0RGPNA6jffpckby?= =?us-ascii?Q?mfZPSI5xgToC+BQb7X8i9LoC5DkiF6FmA5R9fhs4RaTUOU7yIti1VC9jvWhA?= =?us-ascii?Q?84uDzd0VTPwUQ1ryLx1/0L8J15tU5RnmZtd5Hi3XYUSJrLaPVvFlvIoOv6O1?= =?us-ascii?Q?u7iemMczmFh8LW/ehSujUVpRSlJujXFjZ46w4X8wFACeWQzt6FJN56g0Qgck?= =?us-ascii?Q?BfKFrvkyBs9GAuE8cIH+58mNbAOdNd9HqR79Ob/qxDH+QoU71XO8E+Wvfl69?= =?us-ascii?Q?eb0u2RdKNfDIcuDwHfJVFepM4FszapshHrwoe3bDwEsVADbY+0axm15n8q73?= =?us-ascii?Q?WJFIOMyGkgP8ryPByn82m/tU6ohU3/wmPCt/BcjNCTkKEnQEIXveYHdnZjMG?= =?us-ascii?Q?GH/GTZyPqmO9axmNwwH2gAt8tvrqPeODX+3tzu/p4Rp8P8FQd79hhI/SLzjw?= =?us-ascii?Q?RvVuISXkxTEfkkVo1xXtKubi8MfOYoxo/56eBB2cDDN6eFRu1OW0G4+lWAVT?= =?us-ascii?Q?eX1ehxecVfqELM3lb4RCKt8Qq3ZG9Q5G0KlIUy+tXPQrlXvZETvvE2iB3bc9?= =?us-ascii?Q?xl0jx3tK9BNRpG/xsdw7M7Ek3hYXH4M/71nIxpWPHiD745CF9F4GWXYkJut0?= =?us-ascii?Q?g8LvbK5x/LP3sQQp8roVc/MvC2WzAFVhOI1HKurDA2GoqgO3BpgKAkHhmOEs?= =?us-ascii?Q?oHF5pIMT2+CRMecNAT3yQUubzcLTsYEWT1eZ5JkbpoJx9xuOg4Cu4f4fCp2j?= =?us-ascii?Q?R3HLK4TOIjU4jsf9stekqDzJITpf4nlAO5L9NnjJbZ5tEFCQrXkE282EwSPs?= =?us-ascii?Q?ynrRVzU7k91ea86ZW03/ipMKy6A9KTkHo5ENERsrssFzeCE3/zrdzRiTLTnG?= =?us-ascii?Q?ckGMLSw0yTIfesyr53X+vs6ZbodgdTh58inBb5q5Rtpn42kGByXaM+CFll1T?= =?us-ascii?Q?MYdLlDDBGiBJ4Wy67sTOs02T0QBLiH91/RixqMXQ4r4INPUKf7/q90gVqixB?= =?us-ascii?Q?TJaYRfm1GlhpnMamtmIWMXdjAl264TAsQJTp47IRsJUBuP9JKyOSMFGGSQcZ?= =?us-ascii?Q?SYadgj92BIUkPQuMS7/grUifAKpQ4LZKSNHnJLnt8DG3N4d+UOdps2zJgshn?= =?us-ascii?Q?8+kGAkX8iiMNssdKFDnXg88rgd7yAQpTGXhnwN946vBXc28DREjh1dLZFKeV?= =?us-ascii?Q?5bfk6OdJEwe0St8wiAYCJtT2BQA5pMrOwGoc8BlUzY8uWyTe5Zu6g1DsVABe?= =?us-ascii?Q?QwWCLrB939CvJJ4fhJzu3P517dNzS5oKcL/WsJzsojFvQ5g1hBBx/oA4AWce?= =?us-ascii?Q?9LniRw1/n2Cu44YPv/2ol0CX6tsKtNLM5vO1Gq43xcJUqV9+Sh7A2tTSHS+8?= =?us-ascii?Q?hX0n2EGMzHp3JbBPWwp3sxjdOUqa1tAd7bayKE0lqJwylVmjNbk6d1e9DJKt?= =?us-ascii?Q?VA9/FJZTrMMowc2lrHsKQlneCvfwTMDYMOXRaf+VFhQUn2/IdZY0zpLYmM65?= =?us-ascii?Q?wla2upDVcCT8ypArQxbeTqAhmoW1LmhTnIri5A+faUxNTC6qrtDncI4Csk+j?= =?us-ascii?Q?JqasL/J6pc17c6ndfsAN98NpuEmZ3l2hz8bUXS7GxLWaso3wnqV4Un4HOtXH?= =?us-ascii?Q?tw=3D=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW4PR11MB5821.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: dc11f637-1175-4f03-b423-08dc746f67ed X-MS-Exchange-CrossTenant-originalarrivaltime: 14 May 2024 23:41:41.3374 (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: zRlcT+3lPrg6vq040RJ5QQEFa32HvG3IIgmhSbM629WN4oZUTYPctPxhcrtQi6Upab79rBT3Sdf5iVkemres3zzLJ4mqIzBOshxPLmVyVXo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR11MB5141 X-OriginatorOrg: intel.com Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Resent-Date: Tue, 14 May 2024 16:41:45 -0700 Resent-From: nathaniel.l.desimone@intel.com Reply-To: devel@edk2.groups.io,nathaniel.l.desimone@intel.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: FG1jgYeSpQpEPhiVaKEwUgCQx7686176AA= Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20240206 header.b=hHEcqwIk; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=intel.com (policy=none); spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 45.79.224.7 as permitted sender) smtp.mailfrom=bounce@groups.io Hi Vincent, This patch has merge conflicts with the newest edk2-platforms. Is this chan= ge still needed? If yes, please rebase it to latest and re-send the patch. Thank You, Nate > -----Original Message----- > From: Ke, VincentX > Sent: Friday, May 19, 2023 3:29 AM > To: devel@edk2.groups.io > Cc: Ke, VincentX ; Chiu, Chasel > ; Desimone, Nathaniel L > ; Oram, Isaac W > ; Gao, Liming ; Dong, > Eric ; Sinha, Ankit > Subject: [PATCH v8] MinPlatformPkg: Update HWSignature 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 | 299 > +++++++++++++++----- > Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.inf | 1 + > 2 files changed, 233 insertions(+), 67 deletions(-) >=20 > diff --git a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > b/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > index 2f2c96f907..5005d1a524 100644 > --- a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > +++ b/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > @@ -1191,98 +1191,263 @@ PlatformUpdateTables ( > } >=20 >=20 >=20 > /** >=20 > - This function calculates RCR based on PCI Device ID and Vendor ID from= the > devices >=20 > - available on the platform. >=20 > - It also includes other instances of BIOS change to calculate CRC and p= rovides > 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, > &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 > + EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE *FadtPtr; >=20 > + >=20 > + EntryCount =3D (Sdt->Length - sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / > TablePointerSize; >=20 > + BasePtr =3D (UINTN)(Sdt + 1); >=20 > + FadtPtr =3D NULL; >=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 !=3D NULL) { >=20 > + TableCount++; >=20 > + } >=20 > + >=20 > + if (Table->Signature =3D=3D > EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE) { >=20 > + FadtPtr =3D (EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE *)Table; >=20 > + if (FadtPtr->FirmwareCtrl || FadtPtr->XFirmwareCtrl) { >=20 > + TableCount++; >=20 > + } >=20 > + >=20 > + if (FadtPtr->Dsdt || FadtPtr->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_5_FIRMWARE_ACPI_CONTROL_STRUCTURE *FacsPtr; >=20 > - EFI_ACPI_6_5_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 > + BOOLEAN IsRsdt; >=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 > + EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE *FadtPtr; >=20 > + EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE *FacsPtr; >=20 > + >=20 > + IsRsdt =3D FALSE; >=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 > + FadtPtr =3D NULL; >=20 > + FacsPtr =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 > - // >=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 > + if (Xsdt->Signature !=3D > EFI_ACPI_6_5_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE) { >=20 > + if (Rsdt->Signature =3D=3D > EFI_ACPI_6_5_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE) { >=20 > + IsRsdt =3D TRUE; >=20 > + } else { >=20 > + return; >=20 > + } >=20 > + } >=20 >=20 >=20 > // >=20 > - // add HWChange inputs: PCI devices >=20 > + // Count the ACPI tables found by RSDT/XSDT and FADT. >=20 > // >=20 > - for (Index =3D 0; HandleCount > 0; HandleCount--) { >=20 > - PciId =3D 0; >=20 > - Status =3D gBS->HandleProtocol (HandleBuffer[Index], > &gEfiPciIoProtocolGuid, (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 > - } >=20 > - HWChange[Index++] =3D PciId; >=20 > - } >=20 > + if (IsRsdt =3D=3D TRUE) { >=20 > + AcpiTableCount =3D CountTableInSDT (Rsdt, sizeof (UINT32)); >=20 > + } else { >=20 > + AcpiTableCount =3D CountTableInSDT (Xsdt, sizeof (UINT64)); >=20 > } >=20 >=20 >=20 > // >=20 > - // Locate FACP Table >=20 > + // Allocate memory for founded ACPI tables. >=20 > // >=20 > - Handle =3D 0; >=20 > - Status =3D LocateAcpiTableBySignature ( >=20 > - EFI_ACPI_6_5_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 > + TableCrcRecord =3D AllocateZeroPool (sizeof (UINT32) * AcpiTableCount)= ; >=20 > + if (TableCrcRecord =3D=3D NULL) { >=20 > + return; >=20 > + } >=20 > + >=20 > + if (IsRsdt =3D=3D TRUE) { >=20 > + // >=20 > + // Search RSDT >=20 > + // >=20 > + AcpiTableCount =3D 0; >=20 > + EntryCount =3D (Rsdt->Length - sizeof (EFI_ACPI_DESCRIPTION_HEAD= ER)) / > 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 > (UINT32)), sizeof (UINT32)); >=20 > + Table =3D (EFI_ACPI_COMMON_HEADER *)((UINTN)(EntryPtr)); >=20 > + if (Table !=3D NULL) { >=20 > + TableCrcRecord[AcpiTableCount++] =3D AcpiTableCrcCalculator (Tab= le); >=20 > + } >=20 > + >=20 > + if (Table->Signature =3D=3D > EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE) { >=20 > + FadtPtr =3D (EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE *)Table; >=20 > + // >=20 > + // Locate FACS in FADT >=20 > + // >=20 > + if (FadtPtr->FirmwareCtrl) { >=20 > + FacsPtr =3D (EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE > *)(UINTN)FadtPtr->FirmwareCtrl; >=20 > + >=20 > + TableCrcRecord[AcpiTableCount++] =3D AcpiTableCrcCalculator > ((EFI_ACPI_COMMON_HEADER *)(UINTN)FadtPtr->FirmwareCtrl); >=20 > + } >=20 > + >=20 > + // >=20 > + // Locate DSDT in FADT >=20 > + // >=20 > + if (FadtPtr->Dsdt) { >=20 > + TableCrcRecord[AcpiTableCount++] =3D AcpiTableCrcCalculator > ((EFI_ACPI_COMMON_HEADER *)(UINTN)FadtPtr->Dsdt); >=20 > + } >=20 > + } >=20 > + } >=20 > + } else { >=20 > + // >=20 > + // Search XSDT >=20 > + // >=20 > + AcpiTableCount =3D 0; >=20 > + EntryCount =3D (Xsdt->Length - sizeof (EFI_ACPI_DESCRIPTION_HEAD= ER)) / > 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 > (UINT64)), sizeof (UINT64)); >=20 > + Table =3D (EFI_ACPI_COMMON_HEADER *)((UINTN)(EntryPtr)); >=20 > + if (Table !=3D NULL) { >=20 > + TableCrcRecord[AcpiTableCount++] =3D AcpiTableCrcCalculator (Tab= le); >=20 > + } >=20 > + >=20 > + if (Table->Signature =3D=3D > EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE) { >=20 > + FadtPtr =3D (EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE *)Table; >=20 > + // >=20 > + // Locate FACS in FADT >=20 > + // >=20 > + CopyMem ((VOID *)&EntryPtr, (VOID *)FadtPtr->XFirmwareCtrl, size= of > (UINT64)); >=20 > + if (EntryPtr !=3D 0) { >=20 > + FacsPtr =3D (EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE > *)(UINTN)FadtPtr->XFirmwareCtrl; >=20 > + >=20 > + TableCrcRecord[AcpiTableCount++] =3D AcpiTableCrcCalculator > ((EFI_ACPI_COMMON_HEADER *)(UINTN)FadtPtr->XFirmwareCtrl); >=20 > + } else { >=20 > + FacsPtr =3D (EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE > *)(UINTN)FadtPtr->FirmwareCtrl; >=20 > + >=20 > + TableCrcRecord[AcpiTableCount++] =3D AcpiTableCrcCalculator > ((EFI_ACPI_COMMON_HEADER *)(UINTN)FadtPtr->FirmwareCtrl); >=20 > + } >=20 > + >=20 > + // >=20 > + // Locate DSDT in FADT >=20 > + // >=20 > + CopyMem ((VOID *)&EntryPtr, (VOID *)FadtPtr->XDsdt, sizeof > (UINT64)); >=20 > + if (EntryPtr !=3D 0) { >=20 > + TableCrcRecord[AcpiTableCount++] =3D AcpiTableCrcCalculator > ((EFI_ACPI_COMMON_HEADER *)(UINTN)FadtPtr->XDsdt); >=20 > + } else { >=20 > + TableCrcRecord[AcpiTableCount++] =3D AcpiTableCrcCalculator > ((EFI_ACPI_COMMON_HEADER *)(UINTN)FadtPtr->Dsdt); >=20 > + } >=20 > + } >=20 > + } >=20 > } >=20 >=20 >=20 > // >=20 > - // add HWChange inputs: others >=20 > + // FACS not found >=20 > // >=20 > - HWChange[Index++] =3D (UINT32)pFADT->XDsdt; >=20 > + if (FacsPtr->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_5_FIRMWARE_ACPI_CONTROL_STRUCTURE > *)(UINTN) pFADT->FirmwareCtrl; >=20 > - FacsPtr->HardwareSignature =3D CRC; >=20 > - FreePool (HWChange); >=20 > + FacsPtr->HardwareSignature =3D HWSignature; >=20 > + FreePool (TableCrcRecord); >=20 > + DEBUG ((DEBUG_INFO, "%a() - End\n", __FUNCTION__)); >=20 > } >=20 >=20 >=20 > VOID >=20 > @@ -1329,7 +1494,7 @@ AcpiEndOfDxeEvent ( > // >=20 > // Calculate Hardware Signature value based on current platform > configurations >=20 > // >=20 > - IsHardwareChange (); >=20 > + IsAcpiTableChange (); >=20 > } >=20 >=20 >=20 > /** >=20 > diff --git a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.i= nf > 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 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#118894): https://edk2.groups.io/g/devel/message/118894 Mute This Topic: https://groups.io/mt/99009355/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-