From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mx.groups.io with SMTP id smtpd.web10.2582.1684185395457711003 for ; Mon, 15 May 2023 14:16:36 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=N04T/ScQ; spf=pass (domain: intel.com, ip: 134.134.136.100, mailfrom: ankit.sinha@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1684185395; x=1715721395; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=rm/kr+XwcPXgAbUnqRu76auiustaE1oCVEPdJ8zb2vg=; b=N04T/ScQu/By1w9YwyO8Ho+MVqpHbk/su+s5ij6Q13d71aTpDtuXMBoC 9L97SGjhkkyfH3KdiB9WqwkwYybi3pnGWQCwupszA6zUVPGOrUb4b0qrB 5VPJFRLyezLAxFU9mPw0adCISQy/DNQEhRMKAdtTZIjd9VVRGU7xoYLtN 9EgPMuMWww3QPHfx+Gl+Zgmc983rbAvVh/1w+3STqPDUtW8tReWJ0HMhJ AFuhIYksGfEwMWUyCSevB5/nhZC4nFGUF8pKHnSiqNZKq39IaxRWO2lG6 7Drt+k5Gc00wvLJiap7L42/iYCD1KCdxhdfeKndzTm6yNCJgxOG+Rov00 w==; X-IronPort-AV: E=McAfee;i="6600,9927,10711"; a="416967439" X-IronPort-AV: E=Sophos;i="5.99,277,1677571200"; d="scan'208";a="416967439" Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 May 2023 14:16:34 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10711"; a="947563172" X-IronPort-AV: E=Sophos;i="5.99,277,1677571200"; d="scan'208";a="947563172" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by fmsmga006.fm.intel.com with ESMTP; 15 May 2023 14:16:34 -0700 Received: from fmsmsx602.amr.corp.intel.com (10.18.126.82) 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; Mon, 15 May 2023 14:16:33 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) 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 via Frontend Transport; Mon, 15 May 2023 14:16:33 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.104) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.23; Mon, 15 May 2023 14:16:33 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UTbcXe0L01CZM8+trDldK+XPH3kGvnmZBfIHkLfTINH4gs9KWpdqn5RwJ/3ApeQrveHmpj68nElypEPIeulzFhwAWaZN960xh93k/Kj7LUWfczr/EkTdzZvTjqNCVubJ5NjLiVGOVTcikPGSYILsvj+op49GqmNaIfJvvFr/VY6VAKYjZVx580uP3VMJMPHq91EnXInsFrz6loNrNIzQr1V/Fx9i+pyXkfyNpYHNHXDBpxmhysPCA8XSMh0Wbbqg0Jgvs5vjaVA6KM7Se9XAdRtt6bdS/nVt3geV4dh5TiEBDpcmSJZGV2LYyrqLDysECnie+/jL5wx5xtYNc1uTVg== 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=jDpzVboKAk/52MDvpcDbrqnhT9Kbotoz0Qa4yQeHPmc=; b=nh/UIDSoTgQpXk3zErip6Ns2i3vL05P1KOfR/PuzOObWTsoAwQnBB7TztEv4FGTZHAN8oq88fYugZNaA8QgmYv7Mu6Fg9XcRfA0JhOc9H5Mi02agQPyeDteORe/i0A1Hws9BeBmBzEUpefUyLAhZc5zf0kdyUS/JgMVVaLBl8C0ex/6koUPKmgRmW1kDtzmYulvjpzeL0/VN4aX+oDSvIICUb6y9Ou3W0Ff5FJXTTVx9rTLXisqLM8LPaSTPXx+RVsTBJ1FLYkiw+vAqKD+/j2sRCtyhf+1MMKXvH694Yi+sPSEhqnVpFdbxdC3Hdlw/ZS3ThU4tKMGtNEps0y6GrQ== 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 MW5PR11MB5908.namprd11.prod.outlook.com (2603:10b6:303:194::10) by SA2PR11MB4972.namprd11.prod.outlook.com (2603:10b6:806:fb::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6387.30; Mon, 15 May 2023 21:16:30 +0000 Received: from MW5PR11MB5908.namprd11.prod.outlook.com ([fe80::bbc5:f013:1f53:10a9]) by MW5PR11MB5908.namprd11.prod.outlook.com ([fe80::bbc5:f013:1f53:10a9%3]) with mapi id 15.20.6387.030; Mon, 15 May 2023 21:16:30 +0000 From: "Ankit Sinha" To: "Ke, VincentX" , "devel@edk2.groups.io" CC: "Chiu, Chasel" , "Desimone, Nathaniel L" , "Oram, Isaac W" , "Gao, Liming" , "Dong, Eric" Subject: Re: [PATCH v7] MinPlatformPkg: Update HWSignature filed in FACS Thread-Topic: [PATCH v7] MinPlatformPkg: Update HWSignature filed in FACS Thread-Index: AQHZg+9riQ7KTjBQbkW6gEsZjnIJZK9b3QUw Date: Mon, 15 May 2023 21:16:29 +0000 Message-ID: References: <20230511095959.562-1-vincentx.ke@intel.com> In-Reply-To: <20230511095959.562-1-vincentx.ke@intel.com> Accept-Language: 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: MW5PR11MB5908:EE_|SA2PR11MB4972:EE_ x-ms-office365-filtering-correlation-id: 854033f1-1d4e-474c-9c17-08db5589a6c5 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: KLdDFLtqfKhkHQabrHYx3ojMHvt9EU8RIOpVbypN6/jG3Mzr3ucO21KNSB34CiCGz5i8A4QDBEyncCgqM8US3fhZekVxtKhHeQ4S2o6fF647M8S1skguRl4TxkFVEvOaxAkROzyhPztBa94FdvJWNfmvJDz2wveHXrgh0cA+JKZv/q74XXLjr7CYLRLlHdC6z5LtpxPLTpka5pkR0oSChFEU/SMrSSmbXHKjVUexFusFygQrSog5DNvKgNt2Qs7KsDzmcol0Ncacbauq+3aHDk1ZPe6rsB/ZMnmlSMuOJmuHxViMgpv5XZAvKoGoASfGLiHAzulnI7l99881bXtmh28qEqcSg8B3VAFCIhFXDs3gb+INujxJM7f02o6xN1NIdSIIJo3j6o9r+YxrWrwnvROsClpUQlJxWrOxesS64Iv7P32mrFWFoE4bj3mYbYjTd/zOPRulgej3foWAluD93GnNzEcG/NPXRtPNuCVCBlM1fXpk+V1weTWsjCYTBuBUgdAmJ3SLFnqdb9v8bF7SaIGg1Dwdkag87OW4aR9wWDpo6a8ABRQ70c0w7lvICcxrn+NKTpjZtH8ylO6oYubxGWVtgTeIs7H2+1i2QWXPBAQ= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW5PR11MB5908.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(376002)(396003)(39860400002)(346002)(136003)(366004)(451199021)(83380400001)(4326008)(82960400001)(122000001)(38100700002)(38070700005)(41300700001)(53546011)(966005)(26005)(6506007)(7696005)(478600001)(107886003)(33656002)(316002)(66946007)(9686003)(66446008)(66476007)(66556008)(64756008)(55016003)(76116006)(8936002)(8676002)(15650500001)(30864003)(5660300002)(52536014)(110136005)(54906003)(2906002)(86362001)(186003)(71200400001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?kXbsbmUYNCDvS3dsa89scqP7j0+6qYLGfRmJdeJQm/ry5KuFysfQ4q+kXrOl?= =?us-ascii?Q?UyE97YNMJlagbW28hMNW3ku6n0fyCP6fMcv4KZ3T+cM3m3RmVJCfWS9ufPqd?= =?us-ascii?Q?3JbLUzd/nhGSdgOf2r7yvskwmgPfA/mbFYl1olQQe7yXFpY7ou34XehdkLgz?= =?us-ascii?Q?d1TgLTkDGEZ9Je/j436OjT+FTaj4So8sUR4hlQWN174SZTH1VYD/6WLfKas4?= =?us-ascii?Q?J5SIIDYWj4JQmA0sV6QHRL7tU020ig90yvkB/m6/A8JgHOuSGnCp1/5bhvAa?= =?us-ascii?Q?hzVHIVRSkyKRJ2VbWi1X7CNmtQialc8zsydV/WSVsApq45cS4dqykua3Lm++?= =?us-ascii?Q?Jmyzebgf1o8DEgWerQejCCBce70D1A8zjagqd0Fw82YfnmPxpUWgDnFTFuor?= =?us-ascii?Q?nbBeYDqDJWjP3HfbjxXp/oAoRTMLbrzPjia3V6Lwq4dB+j9Fc1xTqfAyHI+F?= =?us-ascii?Q?T5z8LO5M9WyqDwpujBCX0FubEx2qmnIkPmcKOPAW/kmUCRdrjB/Q5F3gEFuY?= =?us-ascii?Q?oEpfog4bbb9TIUuY/S2LgI9KZYJqnddNnucnlgw2MVKuN1AoFuRyJx4cTH2i?= =?us-ascii?Q?niKXYyDlXJwZWQF7OP24nMgkTtSMxBm6F2OStET8EfcksNXpk0vXo6YA1q4o?= =?us-ascii?Q?7RpUmdCsjN7dISpqfg2l8cTm/DX9dNsjaL3YpVheZuwJBcEeE5a/U/KxSibo?= =?us-ascii?Q?qB0w0Go0gyrTLcJQWnE5y2Mqhgz0DU78zeQhvsxOsO4jmVI4VSzS3rrnZjmF?= =?us-ascii?Q?xa+rZ7SIRl4/IHVek5D7HSGBczN2fZTcFp/TbgIu+eiYQLaakxM98G0CR+wD?= =?us-ascii?Q?Fn+kKFJmaxhBJOd9/YZ8DmO+dq9vBAB3vGIxHuP2Y8G45syTJiDHQAl8YVkh?= =?us-ascii?Q?H6wcbiULOKU5TkckQHYXl1ruszAQ/RXr+cImyFzTCKF55j2GSYI0/oRLt6JJ?= =?us-ascii?Q?KDqBgNGYGjGWspdSedjKNRJQPOrr60tHxYNLZWR/kksHGf5sgtMI9BO9FwXm?= =?us-ascii?Q?G42Y+Dmydi8D4D5ZhNtXkeUYGz7rUaPMtz3JLY2Xz7VfnoMI6kjDX2VfNRwr?= =?us-ascii?Q?cylRKlhnGDmZZBVqBKjs/+hL4pRe46Bjzrd4lrtpvIdSKSUABb1gOCRqcUfA?= =?us-ascii?Q?6CiPMKmczeF08HKxf3MVcqbZQQn59sY8znbPggqbWn1cgqkhX+s1PouG43pj?= =?us-ascii?Q?Sd2zfapgHcRg3GA6+OI03IjnyteMDxRMNKd8lYhZyBBEfgS0LXzjiJKWV0t3?= =?us-ascii?Q?kkcSANKUx0mw6ANlogMoY2uj6g0DDVyBwUt2rhSA7VcCpXxFU+XM00TbqPma?= =?us-ascii?Q?tJIiizsoER7rcAkytoPem1nyIFfV0saRJzRfE8k3HtK6UcPxNyJ7jPeau7bO?= =?us-ascii?Q?lYo26pPGhf/r7Agpy8NMw9g/Eec+S+9gUN58GOhdCbWwc/G06xTUbpA+bJQF?= =?us-ascii?Q?OLhPRfk29fsk0HxcQ+DbXgGLTZkewBi6MC+Zq1PnUeS6oZNYltM5UtkTQbWl?= =?us-ascii?Q?IGk0iRO4/FX5lfp4t5jVQUHBFs/jqFLKQuY+nuHPRujY4yc4ZT0gpEfyH5ry?= =?us-ascii?Q?P3eDjOZfB3p+7WVM/f6fmx6WQrN6zryvU6IuJIAW?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW5PR11MB5908.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 854033f1-1d4e-474c-9c17-08db5589a6c5 X-MS-Exchange-CrossTenant-originalarrivaltime: 15 May 2023 21:16:29.9374 (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: CtPDcmSyLgAN6l7MSdf6Scq0HHzqSHcRHiV61st4bQDO2fVh6b/ac4g4yS5tr7g04b2LMRUIKsI97IKsW2clJQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR11MB4972 Return-Path: ankit.sinha@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Ankit Sinha > -----Original Message----- > From: Ke, VincentX > Sent: Thursday, May 11, 2023 3:00 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 v7] 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 | 287 > +++++++++++++++----- > Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.inf | 1 + > 2 files changed, 223 insertions(+), 65 deletions(-) >=20 > diff --git a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > b/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > index e967031a3b..3dca6f99f7 100644 > --- a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > +++ b/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > @@ -1191,98 +1191,255 @@ 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 > 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, > &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 > + EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE *FacsPtr; >=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 > + 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 > + Rsdt =3D (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Rsdp->RsdtAddress; >=20 > + Xsdt =3D (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Rsdp->XsdtAddress; >=20 > + >=20 > + if (Xsdt->Signature !=3D > EFI_ACPI_6_5_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE) { >=20 > + if (Rsdt->Signature !=3D > EFI_ACPI_6_5_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE) { >=20 > + return; >=20 > + } >=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 > + AcpiTableCount =3D CountTableInSDT (Xsdt, sizeof (UINT64)); >=20 > + if (AcpiTableCount =3D=3D 0) { >=20 > + AcpiTableCount =3D CountTableInSDT (Rsdt, sizeof (UINT32)); >=20 > + } >=20 >=20 >=20 > - if (HWChange =3D=3D NULL) return; >=20 > + // >=20 > + // Allocate memory for founded ACPI tables. >=20 > + // >=20 > + TableCrcRecord =3D AllocateZeroPool (sizeof (UINT32) * AcpiTableCount)= ; >=20 > + if (TableCrcRecord =3D=3D NULL) { >=20 > + return; >=20 > + } >=20 >=20 >=20 > // >=20 > - // add HWChange inputs: PCI devices >=20 > + // Search XSDT >=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 > + AcpiTableCount =3D 0; >=20 > + EntryCount =3D (Xsdt->Length - sizeof (EFI_ACPI_DESCRIPTION_HEADER= )) > / 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) { >=20 > + TableCrcRecord[AcpiTableCount++] =3D AcpiTableCrcCalculator (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, (VOID *)&Fadt.XFirmwareCtrl, sizeof > (UINT64)); >=20 > + if (EntryPtr !=3D 0) { >=20 > + FacsPtr =3D (EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE > *)(UINTN)((EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE *)Table)- > >XFirmwareCtrl; >=20 > + >=20 > + TableCrcRecord[AcpiTableCount++] =3D AcpiTableCrcCalculator > ((EFI_ACPI_COMMON_HEADER *)(UINTN)EntryPtr); >=20 > + } else { >=20 > + FacsPtr =3D (EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE > *)(UINTN)((EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE *)Table)- > >FirmwareCtrl; >=20 > + >=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, (VOID *)&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 > - HWChange[Index++] =3D PciId; >=20 > } >=20 > } >=20 >=20 >=20 > - // >=20 > - // Locate FACP Table >=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 > + if (FacsPtr->Signature !=3D > EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE) { >=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) { >=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 > + 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 > + FacsPtr =3D (EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE > *)(UINTN)((EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE *)Table)- > >FirmwareCtrl; >=20 > + >=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 > + } >=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_3_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 +1486,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