From nobody Sat Nov 2 12:28:24 2024 Delivered-To: importer@patchew.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Authentication-Results: mx.zoho.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org; Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1489492695863111.4765389715111; Tue, 14 Mar 2017 04:58:15 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 02121803E1; Tue, 14 Mar 2017 04:58:14 -0700 (PDT) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id DD19F802A7 for ; Tue, 14 Mar 2017 04:58:12 -0700 (PDT) Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 Mar 2017 04:58:12 -0700 Received: from shwdeopenpsi068.ccr.corp.intel.com ([10.239.9.22]) by orsmga004.jf.intel.com with ESMTP; 14 Mar 2017 04:58:10 -0700 X-Original-To: edk2-devel@lists.01.org DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=intel.com; i=@intel.com; q=dns/txt; s=intel; t=1489492693; x=1521028693; h=from:to:cc:subject:date:message-id; bh=r3W6SEdaDbO84wzHJmiw2/Q34c5qXh6dzNcTPo+x+bs=; b=C3xjW3jRmEODzQk7dQJ5pYFWOhByGfvqfi4ckbx/MeDeFNHdcyqaiqNZ rkxuzSvUAKey8jZSeenA+omb73bLvw==; X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,163,1486454400"; d="scan'208";a="67245875" From: Star Zeng To: edk2-devel@lists.01.org Date: Tue, 14 Mar 2017 19:58:08 +0800 Message-Id: <1489492688-95040-1-git-send-email-star.zeng@intel.com> X-Mailer: git-send-email 2.7.0.windows.1 Subject: [edk2] [PATCH] MdeModulePkg PCD: Allow SkuId to be changed only once X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Michael Kinney , Feng Tian , Liming Gao , Star Zeng MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Current PI spec has no clear description about whether the SkuId could be changed multiple times or not during one boot. If the SkuId could be changed multiple times during one boot, different modules may get inconsistent PCD values. And DynamicHii PCD maps to UEFI variable, once one DynamicHii PCD(UEFI variable) is set for one SkuId, then the PCD value will be always from UEFI variable but not PCD database, even the SkuId is set to other value. This patch is to update PCD drivers to allow SkuId to be changed only once during one boot. Cc: Liming Gao Cc: Michael Kinney Cc: Feng Tian Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Star Zeng Reviewed-by: Liming Gao --- MdeModulePkg/Universal/PCD/Dxe/Pcd.c | 27 +++++++++++++++++++++++---- MdeModulePkg/Universal/PCD/Pei/Pcd.c | 28 ++++++++++++++++++++++++---- 2 files changed, 47 insertions(+), 8 deletions(-) diff --git a/MdeModulePkg/Universal/PCD/Dxe/Pcd.c b/MdeModulePkg/Universal/= PCD/Dxe/Pcd.c index 1bb9098c04cf..9d710bbf1fb7 100644 --- a/MdeModulePkg/Universal/PCD/Dxe/Pcd.c +++ b/MdeModulePkg/Universal/PCD/Dxe/Pcd.c @@ -3,7 +3,7 @@ produce the implementation of native PCD protocol and EFI_PCD_PROTOCOL d= efined in PI 1.4a Vol3. =20 -Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD = License which accompanies this distribution. The full text of the license may be = found at @@ -272,19 +272,38 @@ DxePcdSetSku ( SKU_ID *SkuIdTable; UINTN Index; =20 + if (SkuId =3D=3D mPcdDatabase.DxeDb->SystemSkuId) { + // + // The input SKU Id is equal to current SKU Id, return directly. + // + return; + } + + if (mPcdDatabase.DxeDb->SystemSkuId !=3D (SKU_ID) 0) { + DEBUG ((DEBUG_ERROR, "PcdDxe - The SKU Id could be changed only once."= )); + DEBUG (( + DEBUG_ERROR, + "PcdDxe - The SKU Id was set to 0x%lx already, it could not be set t= o 0x%lx any more.", + mPcdDatabase.DxeDb->SystemSkuId, + (SKU_ID) SkuId + )); + ASSERT (FALSE); + return; + } + SkuIdTable =3D (SKU_ID *) ((UINT8 *) mPcdDatabase.DxeDb + mPcdDatabase.D= xeDb->SkuIdTableOffset); for (Index =3D 0; Index < SkuIdTable[0]; Index++) { if (SkuId =3D=3D SkuIdTable[Index + 1]) { + DEBUG ((EFI_D_INFO, "PcdDxe - Set current SKU Id to 0x%lx.\n", (SKU_= ID) SkuId)); mPcdDatabase.DxeDb->SystemSkuId =3D (SKU_ID) SkuId; return; } } =20 // - // Invalid input SkuId, the default SKU Id will be used for the system. + // Invalid input SkuId, the default SKU Id will be still used for the sy= stem. // - DEBUG ((EFI_D_INFO, "PcdDxe - Invalid input SkuId, the default SKU Id wi= ll be used.\n")); - mPcdDatabase.DxeDb->SystemSkuId =3D (SKU_ID) 0; + DEBUG ((EFI_D_INFO, "PcdDxe - Invalid input SkuId, the default SKU Id wi= ll be still used.\n")); return; } =20 diff --git a/MdeModulePkg/Universal/PCD/Pei/Pcd.c b/MdeModulePkg/Universal/= PCD/Pei/Pcd.c index 668860b61c6c..a3f7337ceca3 100644 --- a/MdeModulePkg/Universal/PCD/Pei/Pcd.c +++ b/MdeModulePkg/Universal/PCD/Pei/Pcd.c @@ -1,7 +1,7 @@ /** @file=20 All Pcd Ppi services are implemented here. =20 -Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.
(C) Copyright 2016 Hewlett Packard Enterprise Development LP
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD = License @@ -262,19 +262,39 @@ PeiPcdSetSku ( UINTN Index; =20 PeiPcdDb =3D GetPcdDatabase(); + + if (SkuId =3D=3D PeiPcdDb->SystemSkuId) { + // + // The input SKU Id is equal to current SKU Id, return directly. + // + return; + } + + if (PeiPcdDb->SystemSkuId !=3D (SKU_ID) 0) { + DEBUG ((DEBUG_ERROR, "PcdPei - The SKU Id could be changed only once."= )); + DEBUG (( + DEBUG_ERROR, + "PcdPei - The SKU Id was set to 0x%lx already, it could not be set t= o 0x%lx any more.", + PeiPcdDb->SystemSkuId, + (SKU_ID) SkuId + )); + ASSERT (FALSE); + return; + } + SkuIdTable =3D (SKU_ID *) ((UINT8 *) PeiPcdDb + PeiPcdDb->SkuIdTableOffs= et); for (Index =3D 0; Index < SkuIdTable[0]; Index++) { if (SkuId =3D=3D SkuIdTable[Index + 1]) { + DEBUG ((EFI_D_INFO, "PcdPei - Set current SKU Id to 0x%lx.\n", (SKU_= ID) SkuId)); PeiPcdDb->SystemSkuId =3D (SKU_ID) SkuId; return; } } =20 // - // Invalid input SkuId, the default SKU Id will be used for the system. + // Invalid input SkuId, the default SKU Id will be still used for the sy= stem. // - DEBUG ((EFI_D_INFO, "PcdPei - Invalid input SkuId, the default SKU Id wi= ll be used.\n")); - PeiPcdDb->SystemSkuId =3D (SKU_ID) 0; + DEBUG ((EFI_D_INFO, "PcdPei - Invalid input SkuId, the default SKU Id wi= ll be still used.\n")); return; } =20 --=20 2.7.0.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel