From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mx.groups.io with SMTP id smtpd.web11.99336.1683516192925611220 for ; Sun, 07 May 2023 20:23:13 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=ezq8052c; spf=pass (domain: intel.com, ip: 192.55.52.88, mailfrom: ray.ni@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1683516192; x=1715052192; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=BJy7l4OiBf9OAYT/09rEeyVSfAE6+rut9zfYlVbqQVE=; b=ezq8052cTxr0TCSJz0jdllEg2Vmm4tC2oiirq1gw66X7f05m8IOtypZ6 6Ej2zM/vW2sVIH5ZtcLsmJua1dMQxmZWYT0jUnhTGIIFHhD1ly034KaSu VhdJttuwdBHSglh9NvuAnHHncpVhE8mrOcPSN4YKMUqj4M97KsBkga1dD eWGhUmew3mIE49wdWJk0IJjFjFxzfIRTSVjSKkPiA37uycTy4wLe/gDjH ZNn2h9xfkUcNUNrS3pskz5L/zazDW6yzLHSTSFknNQ9WbxgEkXEXMugfz URSbZyqYMm0AdrfZD4pGcyagf+zS8vzSe8viuZKxTxBQ9qRB2TRJsaTDZ Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10703"; a="377636505" X-IronPort-AV: E=Sophos;i="5.99,258,1677571200"; d="scan'208";a="377636505" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 May 2023 20:23:12 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10703"; a="1028268029" X-IronPort-AV: E=Sophos;i="5.99,258,1677571200"; d="scan'208";a="1028268029" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by fmsmga005.fm.intel.com with ESMTP; 07 May 2023 20:23:12 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) 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.23; Sun, 7 May 2023 20:23:12 -0700 Received: from orsmsx602.amr.corp.intel.com (10.22.229.15) by ORSMSX610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Sun, 7 May 2023 20:23:11 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) 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.23 via Frontend Transport; Sun, 7 May 2023 20:23:11 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.169) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.23; Sun, 7 May 2023 20:23:11 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=S0Rdjng0AKMCB1kXFH5vRKCS725CgnTZYsPTl1GQV6UCGdBThSDFo3dIRZvtSz7h4nF92vf4w3E3ZRZxK241yhty448BRH3SCaOAAASvFrTOpL0BiHZX2R8CNxkwOVxZyUaU7YWDuNW+wemnzeToB9GSTECSu1tbntDULEhRsoanUw5KhlmYomgtrv+rqF9zWmHoBn7EgXkgzAzZVse9qzzE3X5d/CuuAhRBN+ei+WW6cy1O3VUWCaCseZ8buGQpGZ40zKncvfiKOztRRvxAPmz17wf1VfZrv4yWA/YTfxvFxr6sVLJ/eJqdf2SLtwSfFSDvYMn1M2ziVhw4jBPW+Q== 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=8VnOr6CdQFpFUP4Qx+ZfHdNTDBvb3v1XTxdHMvDbjaU=; b=T+MXJ2uDBVt/uGKsIxDiuXAd155CYrMggM0j0iaj2RwLPqso8btVEVTKxMdAN0pNT6zsfwKmwQ+FdlgWYdgLd8ZvsLa/l0smcTDvG7YFO/sbJO10QTTj5zQZaBVFlliI8ENsZtwFu0kdcNmHDgscQD9lOcv2buko3LyFBh486KFYwn5Nt6JJznRfaKqLFbBNY1ftD5J5SngtAxThD6Cit2BwyrKbhheGcHQUwdbAUO7dsPGRmxo4Bra9WAcP29U8rkidc7kfOSPnrrWsTQexlLSO9kkDslIPeW9PcGBiYmftA19g7aJSt4bWsx6NQa5GsXZ+Kc4gNtSuFxRw9KWfXg== 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 MN6PR11MB8244.namprd11.prod.outlook.com (2603:10b6:208:470::14) by PH7PR11MB6030.namprd11.prod.outlook.com (2603:10b6:510:1d1::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.30; Mon, 8 May 2023 03:23:08 +0000 Received: from MN6PR11MB8244.namprd11.prod.outlook.com ([fe80::892b:b8e6:bab7:635d]) by MN6PR11MB8244.namprd11.prod.outlook.com ([fe80::892b:b8e6:bab7:635d%5]) with mapi id 15.20.6363.032; Mon, 8 May 2023 03:23:07 +0000 From: "Ni, Ray" 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 v5] MinPlatformPkg: Update HWSignature filed in FACS Thread-Topic: [edk2-devel] [PATCH v5] MinPlatformPkg: Update HWSignature filed in FACS Thread-Index: AQHZfWigFVKF0warA0CWZQ4Mbeycg69Pu0GQ Date: Mon, 8 May 2023 03:23:07 +0000 Message-ID: References: <20230503023954.119-1-vincentx.ke@intel.com> In-Reply-To: <20230503023954.119-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: MN6PR11MB8244:EE_|PH7PR11MB6030:EE_ x-ms-office365-filtering-correlation-id: 7e179d85-0777-44a0-a021-08db4f738b18 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: PNFntnMR+uOKRLSh4zFh+tcJvPe5/p4dMTqQySyM7NE/NZd1/nhpp3I5gEGS0IZLjTEqs8w3lKv543aFoHK6HoEURrw8TRCg/IwPlssCOxddekUD86c4UcX8lTkQ55ALNHsFdp0BNVZNE/6srwMEBIiAbdzjVC5b/5lgMm6EVALe2riua0MzFie84aZ2cChrdVIC1WFJD2JliPZ7R236RBUgo8uXCGXQL6J3fGji9X8Z8KuGEGr8vWOK/4KlGR+H1cX3njC3gEnWI/qrvPoMY0Vf0EWD9KczuPRqsSwzM8rR/boTsXwjOdGfDmOjqTCc2QPLcV27aZZjI/BdON7+SIAIf5XE7cxiHKaaxp9masiHxncHDurE1huuCbRP6y6Bwt5+qM1Lsf0ACZGiUMqXCC7JztdPjhXuedgPaOLzfYuEWAavWWD6A8N1ahIeOylhckg2qMrNHC8/ufgCAcJPr+3NOSv+ouVKXc5pr3IYciHYF/hO4yuR2PpI2uM4GgthbZ4SU/upLDt7Zxzjn4SPRVcZrEgIhhvmX9kyCKEryk7gWDP0YJvQPTwdJCVHYuBn5sZ2BAg3DGdzte2wNmjNNUUo4d1qE7/Oqk5GqTKCyA55eF/10QYeoxLLPy4KjaigOFGyUzjt1mS41kwS3fHVTQ== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN6PR11MB8244.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(39860400002)(376002)(136003)(346002)(396003)(366004)(451199021)(86362001)(33656002)(966005)(54906003)(110136005)(316002)(66556008)(66476007)(66446008)(64756008)(6636002)(4326008)(66946007)(7696005)(76116006)(478600001)(55016003)(8676002)(5660300002)(52536014)(15650500001)(2906002)(8936002)(41300700001)(30864003)(38070700005)(38100700002)(82960400001)(122000001)(9686003)(26005)(53546011)(6506007)(107886003)(83380400001)(71200400001)(186003)(66899021);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?VL8PMLSEzwPO9Q3YBm8UWYR0uZI5051I2yfa/3bEBkwQNAfFIiIyolMT9Tc2?= =?us-ascii?Q?63/+4IT1h/l6nGoLomeUYXETvEP5TgJ9DAsN6uzxeWuiy8cvb6erx8dGhboj?= =?us-ascii?Q?04x17FoCBkOYRLQzQoZzxoTrlp+T6AmVXJ3qHt9p3AAYEk9Gt2LhpZtmYFDB?= =?us-ascii?Q?NAJ/5L2J4MvovIUvxrpfEsGSnG+mfrhqwoIBCsVGAJtd0yl0o5Df0iYjGyuM?= =?us-ascii?Q?g+JhUV0YMMK/QVTW+tBRF95yremr6vAnk6zeJ2/Ne9CvtSAAFrlZ9mlNUs2C?= =?us-ascii?Q?/8TlQsyFuYB9L0FTSBuK0Y0xTjoBxcsWKLTnK6oHFhkttqFbefO3h+k76yOX?= =?us-ascii?Q?LgtaZWdDR3eH4OIqBqUKyLbIR5S/yLaL689UnO+O4lpL/15HmbIuvYvdzFyz?= =?us-ascii?Q?DXgDa80CWl+2+zPpWNX1cfixQVuIBxkHRzz9IGrmXFW9mkvYCRuoe1VFwtlB?= =?us-ascii?Q?yNjUVizDNCcNZOAh4tm2mRRxYYUKgkkphZKVa0dJ3RL0LIqPihOo3w3zv58V?= =?us-ascii?Q?7S2zZwrqb2IsIFa45sNt3d1P2Zuw3g2U9hhKZ7g8vb/x1mUp/Q6TaLIqYC9v?= =?us-ascii?Q?G62gcP6R7RV6Ky/9C4o9zbXkVoI7W9AQdfit5BSmckDrroRTKS4hKxz0h1Vr?= =?us-ascii?Q?x9MPccf+GC3jty1oTJq8/7BleYvjvPDW36M+NqvTBn5RirIMcfUcNeFZdCa6?= =?us-ascii?Q?py35HsNwLLFPUNYQTWenmqwCpXpTKbJAQomG/mv+3ZDKAN5SLWfoyCfVa1O+?= =?us-ascii?Q?mVI+v77uEr0AQlrlQJkUrGW/qtbWIew6oudeciB0909nrxV+sEsw/fXW91Fl?= =?us-ascii?Q?8DgeMrvHtt0uGHV+IsHqd5wWZokELjmX/6eMmBSfRnxXZlqas8DH3T0+v5Fk?= =?us-ascii?Q?QRWO8b24HYmtR2FN9ox65tK6v2W8INtoAjCckGDPuY16u6ph07AA/q3Kxe34?= =?us-ascii?Q?zHfR8ZKbc6VLrRnMznPqJ4BJQi+BbX/bwIOcB7mxg/b+daVGJo5AX4SqA9Y4?= =?us-ascii?Q?Qbz4sgD5imu+PY5m2SQivpnry+zcC74Xqff6f9EmSsrsW5PAxJdkBr5lxIuk?= =?us-ascii?Q?g39yUqueri8Tc+vlm7mNsWy6mnrArOXqQvD3pmS2WIzY0N+AtUKEHFYQ2fWh?= =?us-ascii?Q?2UuKIF2L4DSMQ2Qdv2CLgA4OaBnnOPYQlxi52XLnWl4K/kvXp4sqQIniG+Bf?= =?us-ascii?Q?oVp54DZIkSWpulmmlfiS23FvfiuvcshuAhnB/IHXVwMtl91x44vQ2R+XaPfI?= =?us-ascii?Q?nSFFlf0G4QKl+PRKZ+4OPX8EqGhdVdPFiC+S1JnE7oR5Os4wByhaCRwaKDQr?= =?us-ascii?Q?YBvZU8kqo9WxTBiGcRfWR9h85BYraDZlRyn4LIXw/BJ2sZipDFytTOzmaG0L?= =?us-ascii?Q?zxZ6GPPaWnxj8AuxenflbvKqTRibNdAtPOIDzirHsu74lwex2vQqm6c80qNL?= =?us-ascii?Q?Aw/Xhf/g2vOWvNGUf7M7/+gnBXvjA+UshY3I8ERcaCmzYZanO/bb1rWCwcsW?= =?us-ascii?Q?ILe8AAzqzSrfgV51qMHsalDLk1Q/47bfVNV7wmN9W9NfATjEVp1pb3z9XcgE?= =?us-ascii?Q?w1//1cJTBMbEcsvoCAo=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN6PR11MB8244.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7e179d85-0777-44a0-a021-08db4f738b18 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 May 2023 03:23:07.6374 (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: +22picfJe91HlvG3kWw0DFiWn7G3I8ZjN/FXqkePP6Tijin9PJvwrVfsSsNO/HAHw/gql2BIJV1uETl8RC/Esg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR11MB6030 Return-Path: ray.ni@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Vincent, I don't quite understand your code logic. For example: 1. Why you use XSDT only? What if there is only RSDT? 2. Why there is a do-while in AcpiTableCrcCalculator()? 3. Why (VOID *) is converted to (UINTN) then to (EFI_ACPI_DESCRIPTION_HEAD= ER*)? 4. Why you "measure" the XSDT and RSDT table? The two tables only contain p= ointers. 5. Can you please review " MdePkg/Library/UefiLib/Acpi.c" which contains l= ogic that iterates the acpi tables? Thanks, Ray > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of > VincentX Ke > Sent: Wednesday, May 3, 2023 10:40 AM > To: devel@edk2.groups.io > Cc: Ke, VincentX ; Chiu, Chasel > ; Desimone, Nathaniel L > ; Oram, Isaac W > ; Gao, Liming ; Dong, > Eric > Subject: [edk2-devel] [PATCH v5] 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 > Signed-off-by: VincentX Ke > --- > Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c | 182 > +++++++++++++------- > Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.inf | 1 + > 2 files changed, 118 insertions(+), 65 deletions(-) >=20 > diff --git a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > b/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > index e967031a3b..a940424ced 100644 > --- a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > +++ b/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > @@ -1191,98 +1191,150 @@ 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 pointer to ACPI table that >=20 > + 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 VOID *Table >=20 > + ) >=20 > +{ >=20 > + UINT32 CRC; >=20 > + >=20 > + CRC =3D 0; >=20 > + >=20 > + // >=20 > + // Calculate CRC value. >=20 > + // >=20 > + if (((EFI_ACPI_6_5_COMMON_HEADER *)(UINTN)Table)->Signature =3D=3D > EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE) { >=20 > + // >=20 > + // Zero HardwareSignature field before Calculating FACS CRC >=20 > + // >=20 > + do { >=20 > + ((EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE > *)(UINTN)Table)->HardwareSignature =3D 0; >=20 > + } while (((EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE > *)(UINTN)Table)->HardwareSignature); >=20 > + >=20 > + gBS->CalculateCrc32 ((UINT8 *)Table, > (UINTN)((EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE > *)(UINTN)Table)->Length, &CRC); >=20 > + } else { >=20 > + gBS->CalculateCrc32 ((UINT8 *)Table, > (UINTN)((EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Table)->Length, &CRC); >=20 > + } >=20 > + >=20 > + return CRC; >=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 > + UINT32 Table; >=20 > + UINT32 HWSignature; >=20 > + UINT32 *AcpiTableCrc; >=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 > + EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE *pFADT; >=20 > + >=20 > + AcpiTableCount =3D 0; >=20 > + AcpiTableCrc =3D NULL; >=20 > + Rsdp =3D NULL; >=20 > + Rsdt =3D NULL; >=20 > + Xsdt =3D NULL; >=20 > + FacsPtr =3D NULL; >=20 > + pFADT =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 2 as RSDT and XSDT are already located= . >=20 > + // Then add ACPI tables found by 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 > + AcpiTableCount +=3D 2; >=20 > + AcpiTableCount =3D AcpiTableCount + (Xsdt->Length - sizeof > (EFI_ACPI_DESCRIPTION_HEADER))/sizeof (UINT64); >=20 >=20 >=20 > - if (HWChange =3D=3D NULL) return; >=20 > + for (Index =3D sizeof (EFI_ACPI_DESCRIPTION_HEADER); Index < (Xsdt- > >Length); Index =3D Index + sizeof (UINT64)) { >=20 > + Table =3D *((UINT32 *)((UINT8 *)Xsdt + Index)); >=20 > + if (((EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Table)->Signature =3D=3D > EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE) { >=20 > + pFADT =3D (EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE > *)(UINTN)Table; >=20 > + if (pFADT->FirmwareCtrl) { >=20 > + AcpiTableCount++; >=20 > + } >=20 >=20 >=20 > - // >=20 > - // add HWChange inputs: PCI devices >=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 > + if ((pFADT->XDsdt) || (pFADT->Dsdt)) { >=20 > + AcpiTableCount++; >=20 > } >=20 > - HWChange[Index++] =3D PciId; >=20 > } >=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_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 > + AcpiTableCrc =3D AllocateZeroPool (sizeof (UINT32) * AcpiTableCount); >=20 > + if (AcpiTableCrc =3D=3D NULL) { >=20 > + return; >=20 > + } >=20 > + >=20 > + AcpiTableCount =3D 0; >=20 > + AcpiTableCrc[AcpiTableCount++] =3D AcpiTableCrcCalculator ((VOID > *)(UINTN)Rsdt); >=20 > + AcpiTableCrc[AcpiTableCount++] =3D AcpiTableCrcCalculator ((VOID > *)(UINTN)Xsdt); >=20 > + >=20 > + for (Index =3D sizeof (EFI_ACPI_DESCRIPTION_HEADER); Index < (Xsdt- > >Length); Index =3D Index + sizeof (UINT64)) { >=20 > + Table =3D *((UINT32 *)((UINT8 *)Xsdt + Inde= x)); >=20 > + AcpiTableCrc[AcpiTableCount++] =3D AcpiTableCrcCalculator ((VOID > *)(UINTN)Table); >=20 > + if (((EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Table)->Signature =3D=3D > EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE) { >=20 > + pFADT =3D (EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE > *)(UINTN)Table; >=20 > + if (pFADT->FirmwareCtrl) { >=20 > + AcpiTableCrc[AcpiTableCount++] =3D AcpiTableCrcCalculator ((VOID > *)(UINTN)pFADT->FirmwareCtrl); >=20 > + } >=20 > + >=20 > + if (pFADT->XDsdt) { >=20 > + AcpiTableCrc[AcpiTableCount++] =3D AcpiTableCrcCalculator ((VOID > *)(UINTN)pFADT->XDsdt); >=20 > + } else { >=20 > + AcpiTableCrc[AcpiTableCount++] =3D AcpiTableCrcCalculator ((VOID > *)(UINTN)pFADT->Dsdt); >=20 > + } >=20 > + } >=20 > } >=20 >=20 >=20 > // >=20 > - // add HWChange inputs: others >=20 > + // pFADT table not found. >=20 > // >=20 > - HWChange[Index++] =3D (UINT32)pFADT->XDsdt; >=20 > + if (pFADT =3D=3D NULL) { >=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 (AcpiTableCrc, 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 =3D > (EFI_ACPI_6_5_FIRMWARE_ACPI_CONTROL_STRUCTURE *)(UINTN)pFADT- > >FirmwareCtrl; >=20 > + FacsPtr->HardwareSignature =3D HWSignature; >=20 > + FreePool (AcpiTableCrc); >=20 > + DEBUG ((DEBUG_INFO, "%a() - End\n", __FUNCTION__)); >=20 > } >=20 >=20 >=20 > VOID >=20 > @@ -1329,7 +1381,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 >=20 >=20 >=20 > -=3D-=3D-=3D-=3D-=3D-=3D > Groups.io Links: You receive all messages sent to this group. > View/Reply Online (#103877): > https://edk2.groups.io/g/devel/message/103877 > Mute This Topic: https://groups.io/mt/98654282/1712937 > Group Owner: devel+owner@edk2.groups.io > Unsubscribe: https://edk2.groups.io/g/devel/unsub [ray.ni@intel.com] > -=3D-=3D-=3D-=3D-=3D-=3D >=20