From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (EUR05-DB8-obe.outbound.protection.outlook.com [40.107.20.71]) by mx.groups.io with SMTP id smtpd.web08.31802.1650902762914974085 for ; Mon, 25 Apr 2022 09:06:03 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=MjBSOULe; spf=pass (domain: arm.com, ip: 40.107.20.71, mailfrom: sami.mujawar@arm.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kv5gZ2gdblLq4rOIytshesUm8I1c4ShDTynzNDaiwQg=; b=MjBSOULex5zHJ1RphH2ILMNxAgY0504bICvWV/q5wB6qBHJjPRCbvvNJDRTE5VDpwn6/0PvAv086R5qzQACOW8CpDOyTQnOipV5gpbOTS8JIsTqfU1yUwfOxi9K5nHAGp9L4GIXlSj2Si2vMh7qQPDlT70kklK9c2d/VBb0/mvY= Received: from AM5PR1001CA0017.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:206:2::30) by AS8PR08MB6743.eurprd08.prod.outlook.com (2603:10a6:20b:399::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.15; Mon, 25 Apr 2022 16:05:59 +0000 Received: from AM5EUR03FT003.eop-EUR03.prod.protection.outlook.com (2603:10a6:206:2:cafe::cb) by AM5PR1001CA0017.outlook.office365.com (2603:10a6:206:2::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.13 via Frontend Transport; Mon, 25 Apr 2022 16:05:59 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AM5EUR03FT003.mail.protection.outlook.com (10.152.16.149) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.14 via Frontend Transport; Mon, 25 Apr 2022 16:05:59 +0000 Received: ("Tessian outbound 62985e3c34b6:v118"); Mon, 25 Apr 2022 16:05:59 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 32e8286923d9b4d7 X-CR-MTA-TID: 64aa7808 Received: from f239547057d2.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 3E0A54C2-F349-434D-AB04-EA59C6ECA982.1; Mon, 25 Apr 2022 16:05:52 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id f239547057d2.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Mon, 25 Apr 2022 16:05:52 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EF+hQiQDTFZd+UPamoCqLZXZZRvMFqI6zSVMKfJL8Ji7y1PXxeYNb5cAZrLyd8XoB7aoPU8c5/ffEvA0J2kbbmZjoId0uMXsFFBmRRPk+OR9hoJ3FJZ228R7eO6lTHqMHounRJQL9ksMC4NrWpuffs02Rb4/VovDC3pchQ82dGYeulYjSF3nJNKj+sbgA2eMZNLTL49khUd+vx5w6WQZinVZB0ndkV1ttPnFXvwBRdw/WGi6GJxGV90tumuKlETEAttSgcnIN5QTFHLYm5kisb5Z7gZAoDIQONYK0hCD4g908plxjHas7DBn4rhMG50w04JzQsvjMrn/BzsyBYDzXA== 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=kv5gZ2gdblLq4rOIytshesUm8I1c4ShDTynzNDaiwQg=; b=exD3xEYRJ7ingxDagcoMAvUKHWR487KCy+CLFbRim8ZvRX/zWeWpAViE89bDrGgB+0ZWLtJjohAlav+qYUQ1Cbz0ZhJkWncvMNajVZrKgze3Dj0LxQR0IfbTxdSPDk4TbOjp2nO/DyX1/3UN/5rx5oiicp+4nRzNKvcRfArBopYfsU/MP4bIv6WgdLFt1P4bnM/HFxjchEOQqVqTyTbjcgjEo9GqMHyp5LSJFJESG/c2xdToLutiWboadyoxslKg1+Qszga8QReFnMcv8qlwriGawBC0mxh//4qNDa/IXGKw3XmhT0LaQc/RqwU//c1qoOyjj5ahbdzd4oqaNvm45A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kv5gZ2gdblLq4rOIytshesUm8I1c4ShDTynzNDaiwQg=; b=MjBSOULex5zHJ1RphH2ILMNxAgY0504bICvWV/q5wB6qBHJjPRCbvvNJDRTE5VDpwn6/0PvAv086R5qzQACOW8CpDOyTQnOipV5gpbOTS8JIsTqfU1yUwfOxi9K5nHAGp9L4GIXlSj2Si2vMh7qQPDlT70kklK9c2d/VBb0/mvY= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from AS8PR08MB6806.eurprd08.prod.outlook.com (2603:10a6:20b:39b::12) by AS8PR08MB6693.eurprd08.prod.outlook.com (2603:10a6:20b:39c::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.13; Mon, 25 Apr 2022 16:05:48 +0000 Received: from AS8PR08MB6806.eurprd08.prod.outlook.com ([fe80::fd9a:40d3:976a:5a95]) by AS8PR08MB6806.eurprd08.prod.outlook.com ([fe80::fd9a:40d3:976a:5a95%4]) with mapi id 15.20.5186.021; Mon, 25 Apr 2022 16:05:48 +0000 Message-ID: <3b7ae621-01b2-7600-df0e-a84b81279078@arm.com> Date: Mon, 25 Apr 2022 17:05:48 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.8.1 Subject: Re: [edk2-devel] [PATCH v4 4/8] MdeModulePkg/FaultTolerantWrite: Consume Variable Flash Info To: devel@edk2.groups.io, mikuback@linux.microsoft.com Cc: Jian J Wang , Hao A Wu , Liming Gao , nd@arm.com References: <20220412162940.4978-1-mikuback@linux.microsoft.com> <20220412162940.4978-5-mikuback@linux.microsoft.com> From: "Sami Mujawar" In-Reply-To: <20220412162940.4978-5-mikuback@linux.microsoft.com> X-ClientProxiedBy: LO2P265CA0235.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:b::31) To AS8PR08MB6806.eurprd08.prod.outlook.com (2603:10a6:20b:39b::12) MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: 9b4175b6-afcc-4f59-0023-08da26d57d22 X-MS-TrafficTypeDiagnostic: AS8PR08MB6693:EE_|AM5EUR03FT003:EE_|AS8PR08MB6743:EE_ X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: IPAm0Wq0++xA0U7JhgKbR+FFNVJN9mNkBTJpknEKxooOxxRjkjU+z3y+xiZrFfbp3oyP/2q5n1vbg7IU91d0RPP5PauM68Iva0eGFg5eGwuWQ3HD9QAT7Fiek7vaeMZb5gJRNozTKEI5gA0wNgH8aByNxNU48XOSsRd2ie2LYP7pXoK63jHvFrGvlRqRUkYgL+LWcdwao1Z0XS0bPnvYYMNw4UFwD+TFZXDnBbILVr9cYdIRy/7gZuA1JfBYgtNZKqmYSreSNR9MBTr2tu+jGjknc/yzb3H4JG61pn7YIzJjQmZYg+uK7UtnFQYhHBVLru76oG5kjVeMoDbTKpkDKpJCIkE/nF+0llMx51UFREc/U33+FT8TPwMKCKC9wcMXDvhChvZJkgAslz8Fa/p9ypf7WAqQb0cR6+jva24fWGPSNCY83o3wvS8NQtiN/CZTCXdjyXcx4/OCMxI8qdss2WrPo7APGh+6JwUmSl9u/xwPJP1qr19g15FncFr+IDXblulRnWOBUq7qOgLZSIsiCF8Zq/1g/C3fifYTXeEqvPxsHBPDUjFKQg06oHAUVec/a34MTcmihSyB8V3wBsSreRpB93h+THvuQo6KAwQYMOSMsFR6kthSxU8n4d/+7yi5Bs3y/HvEWlHjGZ8FmzDgOO0FswnbD24VwG5oVNOH3T3UV9oCaAfGR8BdTA2tw4TH/2SemMwl2x5lA+hZGpz0SsUUrb6XcZoG9Uas4nTou02YK4Q1vbSp8dRyOseweqwKNPpJIajvox64CoqBAoPPF7qd1qDkDPN+0QcHmgcnrId5i/ICT329Ontq4aCcs5cd X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR08MB6806.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(6486002)(45080400002)(36756003)(5660300002)(316002)(53546011)(30864003)(31686004)(6506007)(26005)(8676002)(2906002)(508600001)(54906003)(6512007)(44832011)(2616005)(4326008)(66946007)(66556008)(66476007)(31696002)(86362001)(38100700002)(8936002)(83380400001)(186003)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6693 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Return-Path: Sami.Mujawar@arm.com X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM5EUR03FT003.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: b702652a-a194-4e5a-5126-08da26d57642 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: NJOWJ+kDuoeVQyWaZS80sgNNWJyRp3mB6wtN4DuQjgbHBpTlGYV8lwvCZYBGapriCJyF+MYgWO+ACNOSSffCGpwFPF5Zupgp9nMlu6R07J/uy90qtXqyZlw3rqIBytAYIeppoo6Ba1YKhlDImJRUF1b+5vmQDa+PF4JWw45mgCw4dhkXio4jZgS5g1uYWAnPzO3Afmgk5etPSj8MHSt5nIAm2ZOCzDIVk1W1s+ZOKy4LomnPeeQYhMOO8J+mu8gYe+o72JiZeDwnD3l3M1RxW+Wv0gHe2uqEdGf1tjP4aJV/SUkzHl8QmBGzAdvzx6yKx/5srxs+EeQTUWceok+UrdsAmVtQpB1zIfjz8M622wqK6ogA8depVJsUKm90gGqtSRMSKEKRu0GsOejlpITRWwzXql5NU4IuZLUy2uo+zVzDSFbYLKKyim5MZTDI3lewbtGrPb6rVN9Qyq7vSCcbpM5rYBm91wLTDHgBKMQRL/kne9cRVIiiHfiHX9LPJkjHGqOQjHaGU3wyQAoQIxDRd6Ts46Xk6GJUmQXFqLYeeY5FLkOxVBWrszhYONPCl55l/BYdSvNTpJjTCWSgJS1j5mfuNhEPeRFjzoHhxBrO6ZwJSAIuqwjTO4RhoSQdM/T3Q61PJ3U6jFc9M3ZK5of1g/5kF80CfRxmKF9JI136zKCbyfkzIbMKv47blyXfLZLLGDDZPgzWoGOEaX0cMT4R/y8DEhjYqxpIpuwlsYRAJMAbFuwECT+7Rl4SjPXBka6E9IEY9X9cYg/L+fYPieRWWuxyYdZUAsVMsB1UVX22WqY= X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230001)(4636009)(40470700004)(46966006)(36840700001)(8936002)(44832011)(83380400001)(31686004)(6512007)(26005)(86362001)(54906003)(316002)(5660300002)(36860700001)(45080400002)(47076005)(336012)(36756003)(186003)(6506007)(53546011)(2616005)(30864003)(82310400005)(2906002)(31696002)(508600001)(6486002)(356005)(40460700003)(8676002)(4326008)(70586007)(70206006)(81166007)(43740500002);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Apr 2022 16:05:59.4835 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9b4175b6-afcc-4f59-0023-08da26d57d22 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: AM5EUR03FT003.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6743 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi Michael, Thank you for this patch. These changes look good to me. Reviewed-by: Sami Mujawar Regards, Sami Mujawar On 12/04/2022 05:29 pm, Michael Kubacki via groups.io wrote: > From: Michael Kubacki > > REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3479 > > Adds support to the UEFI variable fault tolerant write (FTW) drivers > to receive FTW base and size information dynamically via the Variable > Flash Information library. > > Cc: Jian J Wang > Cc: Hao A Wu > Cc: Liming Gao > Signed-off-by: Michael Kubacki > --- > MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c | 41 +++++++++++++------- > MdeModulePkg/Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c | 7 +++- > MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.c | 28 ++++++++----- > MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWrite.h | 7 +++- > MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf | 10 +---- > MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf | 10 +---- > MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteStandaloneMm.inf | 10 +---- > MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf | 10 +---- > 8 files changed, 63 insertions(+), 60 deletions(-) > > diff --git a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c > index 661e1487673b..f1335870e797 100644 > --- a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c > +++ b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c > @@ -987,22 +987,43 @@ InitFtwDevice ( > OUT EFI_FTW_DEVICE **FtwData > ) > { > - EFI_FTW_DEVICE *FtwDevice; > + EFI_STATUS Status; > + EFI_PHYSICAL_ADDRESS WorkSpaceAddress; > + UINT64 Size; > + UINTN FtwWorkingSize; > + EFI_FTW_DEVICE *FtwDevice; > + > + FtwWorkingSize = 0; > + > + Status = GetVariableFlashFtwWorkingInfo (&WorkSpaceAddress, &Size); > + ASSERT_EFI_ERROR (Status); > + > + Status = SafeUint64ToUintn (Size, &FtwWorkingSize); > + // This driver currently assumes the size will be UINTN so assert the value is safe for now. > + ASSERT_EFI_ERROR (Status); > > // > // Allocate private data of this driver, > // Including the FtwWorkSpace[FTW_WORK_SPACE_SIZE]. > // > - FtwDevice = AllocateZeroPool (sizeof (EFI_FTW_DEVICE) + PcdGet32 (PcdFlashNvStorageFtwWorkingSize)); > + FtwDevice = AllocateZeroPool (sizeof (EFI_FTW_DEVICE) + FtwWorkingSize); > if (FtwDevice == NULL) { > return EFI_OUT_OF_RESOURCES; > } > > + FtwDevice->WorkSpaceAddress = WorkSpaceAddress; > + FtwDevice->WorkSpaceLength = FtwWorkingSize; > + > + Status = GetVariableFlashFtwSpareInfo (&FtwDevice->SpareAreaAddress, &Size); > + ASSERT_EFI_ERROR (Status); > + > + Status = SafeUint64ToUintn (Size, &FtwDevice->SpareAreaLength); > + // This driver currently assumes the size will be UINTN so assert the value is safe for now. > + ASSERT_EFI_ERROR (Status); > + > // > // Initialize other parameters, and set WorkSpace as FTW_ERASED_BYTE. > // > - FtwDevice->WorkSpaceLength = (UINTN)PcdGet32 (PcdFlashNvStorageFtwWorkingSize); > - FtwDevice->SpareAreaLength = (UINTN)PcdGet32 (PcdFlashNvStorageFtwSpareSize); > if ((FtwDevice->WorkSpaceLength == 0) || (FtwDevice->SpareAreaLength == 0)) { > DEBUG ((DEBUG_ERROR, "Ftw: Workspace or Spare block does not exist!\n")); > FreePool (FtwDevice); > @@ -1015,16 +1036,6 @@ InitFtwDevice ( > FtwDevice->FtwWorkSpaceLba = (EFI_LBA)(-1); > FtwDevice->FtwSpareLba = (EFI_LBA)(-1); > > - FtwDevice->WorkSpaceAddress = (EFI_PHYSICAL_ADDRESS)PcdGet64 (PcdFlashNvStorageFtwWorkingBase64); > - if (FtwDevice->WorkSpaceAddress == 0) { > - FtwDevice->WorkSpaceAddress = (EFI_PHYSICAL_ADDRESS)PcdGet32 (PcdFlashNvStorageFtwWorkingBase); > - } > - > - FtwDevice->SpareAreaAddress = (EFI_PHYSICAL_ADDRESS)PcdGet64 (PcdFlashNvStorageFtwSpareBase64); > - if (FtwDevice->SpareAreaAddress == 0) { > - FtwDevice->SpareAreaAddress = (EFI_PHYSICAL_ADDRESS)PcdGet32 (PcdFlashNvStorageFtwSpareBase); > - } > - > *FtwData = FtwDevice; > return EFI_SUCCESS; > } > @@ -1277,7 +1288,7 @@ InitFtwProtocol ( > FtwDevice->FtwLastWriteHeader = NULL; > FtwDevice->FtwLastWriteRecord = NULL; > > - InitializeLocalWorkSpaceHeader (); > + InitializeLocalWorkSpaceHeader (FtwDevice->WorkSpaceLength); > > // > // Refresh the working space data from working block > diff --git a/MdeModulePkg/Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c b/MdeModulePkg/Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c > index 61e7a92ccea1..fd563643eb63 100644 > --- a/MdeModulePkg/Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c > +++ b/MdeModulePkg/Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c > @@ -16,10 +16,13 @@ EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER mWorkingBlockHeader = { ZERO_GUID, 0, 0 > > Since Signature and WriteQueueSize have been known, Crc can be calculated out, > then the work space header will be fixed. > + > + @param[in] WorkSpaceLength Length in bytes of the FTW workspace area. > + > **/ > VOID > InitializeLocalWorkSpaceHeader ( > - VOID > + IN UINTN WorkSpaceLength > ) > { > // > @@ -46,7 +49,7 @@ InitializeLocalWorkSpaceHeader ( > &gEdkiiWorkingBlockSignatureGuid, > sizeof (EFI_GUID) > ); > - mWorkingBlockHeader.WriteQueueSize = PcdGet32 (PcdFlashNvStorageFtwWorkingSize) - sizeof (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER); > + mWorkingBlockHeader.WriteQueueSize = WorkSpaceLength - sizeof (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER); > > // > // Crc is calculated with all the fields except Crc and STATE, so leave them as FTW_ERASED_BYTE. > diff --git a/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.c b/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.c > index 15543f12ed29..8c152dcbad98 100644 > --- a/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.c > +++ b/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.c > @@ -16,6 +16,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent > #include > #include > #include > +#include > +#include > > EFI_PEI_PPI_DESCRIPTOR mPpiListVariable = { > (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), > @@ -212,25 +214,31 @@ PeimFaultTolerantWriteInitialize ( > EFI_PHYSICAL_ADDRESS SpareAreaAddress; > UINTN SpareAreaLength; > EFI_PHYSICAL_ADDRESS WorkSpaceInSpareArea; > + UINT64 Size; > FAULT_TOLERANT_WRITE_LAST_WRITE_DATA FtwLastWrite; > > FtwWorkingBlockHeader = NULL; > FtwLastWriteHeader = NULL; > FtwLastWriteRecord = NULL; > > - WorkSpaceAddress = (EFI_PHYSICAL_ADDRESS)PcdGet64 (PcdFlashNvStorageFtwWorkingBase64); > - if (WorkSpaceAddress == 0) { > - WorkSpaceAddress = (EFI_PHYSICAL_ADDRESS)PcdGet32 (PcdFlashNvStorageFtwWorkingBase); > - } > + SpareAreaAddress = 0; > + SpareAreaLength = 0; > + WorkSpaceAddress = 0; > + WorkSpaceLength = 0; > > - WorkSpaceLength = (UINTN)PcdGet32 (PcdFlashNvStorageFtwWorkingSize); > + Status = GetVariableFlashFtwWorkingInfo (&WorkSpaceAddress, &Size); > + ASSERT_EFI_ERROR (Status); > > - SpareAreaAddress = (EFI_PHYSICAL_ADDRESS)PcdGet64 (PcdFlashNvStorageFtwSpareBase64); > - if (SpareAreaAddress == 0) { > - SpareAreaAddress = (EFI_PHYSICAL_ADDRESS)PcdGet32 (PcdFlashNvStorageFtwSpareBase); > - } > + Status = SafeUint64ToUintn (Size, &WorkSpaceLength); > + // This driver currently assumes the size will be UINTN so assert the value is safe for now. > + ASSERT_EFI_ERROR (Status); > > - SpareAreaLength = (UINTN)PcdGet32 (PcdFlashNvStorageFtwSpareSize); > + Status = GetVariableFlashFtwSpareInfo (&SpareAreaAddress, &Size); > + ASSERT_EFI_ERROR (Status); > + > + Status = SafeUint64ToUintn (Size, &SpareAreaLength); > + // This driver currently assumes the size will be UINTN so assert the value is safe for now. > + ASSERT_EFI_ERROR (Status); > > // > // The address of FTW working base and spare base must not be 0. > diff --git a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWrite.h b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWrite.h > index c14e47b5c7b2..5b84d062c294 100644 > --- a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWrite.h > +++ b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWrite.h > @@ -26,6 +26,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent > #include > #include > #include > +#include > +#include > > // > // Flash erase polarity is 1 > @@ -708,10 +710,13 @@ InitFtwProtocol ( > > Since Signature and WriteQueueSize have been known, Crc can be calculated out, > then the work space header will be fixed. > + > + @param[in] WorkSpaceLength Length in bytes of the FTW workspace area. > + > **/ > VOID > InitializeLocalWorkSpaceHeader ( > - VOID > + IN UINTN WorkSpaceLength > ); > > /** > diff --git a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf > index 96165614d178..d524e1849a2e 100644 > --- a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf > +++ b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf > @@ -46,6 +46,8 @@ [LibraryClasses] > UefiLib > PcdLib > ReportStatusCodeLib > + SafeIntLib > + VariableFlashInfoLib > > [Guids] > # > @@ -65,14 +67,6 @@ [Protocols] > [FeaturePcd] > gEfiMdeModulePkgTokenSpaceGuid.PcdFullFtwServiceEnable ## CONSUMES > > -[Pcd] > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase ## SOMETIMES_CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64 ## CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize ## CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase ## SOMETIMES_CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64 ## CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize ## CONSUMES > - > # > # gBS->CalculateCrc32() is consumed in EntryPoint. > # PI spec said: When the DXE Foundation is notified that the EFI_RUNTIME_ARCH_PROTOCOL > diff --git a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf > index 8cc6028470d8..8a4b9ad24657 100644 > --- a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf > +++ b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf > @@ -52,6 +52,8 @@ [LibraryClasses] > ReportStatusCodeLib > SmmMemLib > BaseLib > + SafeIntLib > + VariableFlashInfoLib > > [Guids] > # > @@ -74,14 +76,6 @@ [Protocols] > [FeaturePcd] > gEfiMdeModulePkgTokenSpaceGuid.PcdFullFtwServiceEnable ## CONSUMES > > -[Pcd] > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase ## SOMETIMES_CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64 ## CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize ## CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase ## SOMETIMES_CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64 ## CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize ## CONSUMES > - > # > # gBS->CalculateCrc32() is consumed in EntryPoint. > # PI spec said: When the DXE Foundation is notified that the EFI_RUNTIME_ARCH_PROTOCOL > diff --git a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteStandaloneMm.inf b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteStandaloneMm.inf > index d0fab7d9414f..0ac6edf771ab 100644 > --- a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteStandaloneMm.inf > +++ b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteStandaloneMm.inf > @@ -50,7 +50,9 @@ [LibraryClasses] > MmServicesTableLib > PcdLib > ReportStatusCodeLib > + SafeIntLib > StandaloneMmDriverEntryPoint > + VariableFlashInfoLib > > [Guids] > # > @@ -73,13 +75,5 @@ [Protocols] > [FeaturePcd] > gEfiMdeModulePkgTokenSpaceGuid.PcdFullFtwServiceEnable ## CONSUMES > > -[Pcd] > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase ## SOMETIMES_CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64 ## CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize ## CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase ## SOMETIMES_CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64 ## CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize ## CONSUMES > - > [Depex] > TRUE > diff --git a/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf b/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf > index f90892ad4493..230138272c3a 100644 > --- a/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf > +++ b/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf > @@ -39,6 +39,8 @@ [LibraryClasses] > HobLib > BaseMemoryLib > PcdLib > + SafeIntLib > + VariableFlashInfoLib > > [Guids] > ## SOMETIMES_PRODUCES ## HOB > @@ -47,14 +49,6 @@ [Guids] > gEdkiiWorkingBlockSignatureGuid ## SOMETIMES_CONSUMES ## GUID > gEfiSystemNvDataFvGuid ## SOMETIMES_CONSUMES ## GUID > > -[Pcd] > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase ## SOMETIMES_CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64 ## CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize ## CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase ## SOMETIMES_CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64 ## CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize ## CONSUMES > - > [Depex] > TRUE >