From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=helo; client-ip=104.47.37.74; helo=nam02-cy1-obe.outbound.protection.outlook.com; envelope-from=brijesh.singh@amd.com; receiver=edk2-devel@lists.01.org Received: from NAM02-CY1-obe.outbound.protection.outlook.com (mail-cys01nam02on0074.outbound.protection.outlook.com [104.47.37.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 85CC621ED1C74 for ; Fri, 9 Mar 2018 08:00:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=vGJ2XPiI2vcMXGgFOb2IJgvTl2jrAtziCdydTRPe7I0=; b=FNJ1WNonHiTD/UOsgBBdnLutmomEQDDLi/MqCdbeHa920okvrzvwULZmsdNIN0nsR+LBEtKHCNmpYDykYb8GhcggqymuQ7BK9AkRXBbsJMjLZbvkBxITL43myLF4vO3r9lkovi+hBo6RC9i9DzfK5lKh7+E8cBLRybPgfJTxpbU= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=brijesh.singh@amd.com; Received: from wsp141597wss.amd.com (165.204.78.1) by CY1PR12MB0151.namprd12.prod.outlook.com (10.161.173.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.548.13; Fri, 9 Mar 2018 16:06:23 +0000 From: Brijesh Singh To: edk2-devel@lists.01.org Cc: Tom Lendacky , Brijesh Singh , Jordan Justen , Laszlo Ersek , Ard Biesheuvel Date: Fri, 9 Mar 2018 10:06:03 -0600 Message-Id: <20180309160603.37482-1-brijesh.singh@amd.com> X-Mailer: git-send-email 2.14.3 MIME-Version: 1.0 X-Originating-IP: [165.204.78.1] X-ClientProxiedBy: MWHPR21CA0071.namprd21.prod.outlook.com (10.172.93.161) To CY1PR12MB0151.namprd12.prod.outlook.com (10.161.173.21) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 6c877e62-4c7c-4c0a-72e0-08d585d7b4cc X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:CY1PR12MB0151; X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0151; 3:VURnWtZ6R6feBp5+vpZulXLQQgIw+m/mJtWmVA//TvPOTXs2LolQwOxlb8lt0l5dk0EOPLSk+YFFO+J+fbKGhMJuHwKaunx3bBKLKb6CTs4DHaPsnrDfttmTzl60EkuP49CBkPROW8pGDT0CLn1JyeZEs4m/CwvTzwMCxiMClTtzZEaf111jfyqqUHPa7ExEHnPEnuCZlZGw0Kq3E4qReWziBm8Sh8qVrGOCNO1Za0iPVcaN+BvL0TRt8CVR32y6; 25:7Ed8y85XgOIk2lDYVptnC4HUxAMRzRLwEIMvQueIpEoMVUR/lghxxQ0wAy3dvLRdr8ly8427hndc5aQhq9gvL8MSdLjml45MYg/70uRc6EEhEY021eSErjTW5Yk+zB3GmrGEiKUTXKOYdW41NTqbHQTCt5xidmCT08YHOBo4rYqWzS65rACmMB/kGZnGaltbpDSRqJfIjHQqtsnW7FUIt1UJp+Sp099fi1p+QGsGkyGm/T8w5bWWMKoxYitol3m/9e4Hn3kH+Iogqe1bv7WzlMmLIT81Bns7ihg1MqQ7mU/XoeaWSd31WjEqGk8kdgUvuTkPchm43xAAEvPrMu6F+Q==; 31:6OX7DF0dBaKALvz+6s+JZ/Z3hWLn7R2oaTXqEiX0KsCHGYHAr9pof5oydc/jogigUpgKRD0DNvV8W3+KAgeMOi8KjaHAykmCX0E4/Sykc9B7AxrWISX6HVYz7izdNpxgbc4hfMvCoBxHUoIGMfor1VCEVRHWbjp+tyRq/uO1iuT4ySY85u20gtNGkz0IAp147T5hp37ctDYowCO5RJuMoSp6H7O85nZYmbukIKU84tI= X-MS-TrafficTypeDiagnostic: CY1PR12MB0151: X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0151; 20:dywbxSx6/GpL+wmDJBXEXGzurlWWX2Ec9iP9Hej2oaTq6ULs0Cxb6hRo0geQzGv11JMez3dx/J3RAb6KhiKtfzcNy7YA5HZ2M+7AYgOGysWNSHDQcb9JELaEhPqFBcMdSn1AS3DSvapDrOoLkxeQZqCHPz3gPYZqArsey8BeYcn4BozMGT53QZ81QivqhtOOIxeWzVjrqvKdQmCOerVp6PGbVZb/txNgRfrNYxYzEomvzmWEYS2/VCogeh0HVjnZmiI7keRq7QqN+XucWkILmzOa8CDuY9WkoQpwOXAS9leQ+uhqx6Fuft7nDLBr5dby0rRazTOJmwOdj+CWM54/xWzcmkHn7sUiWw+BXy+buFTVfE7EGCfeZKgrhErWlg4XMIUodBCOYXMecB33G40nwwNxzIpnjJMHEAkI2xqQbYZSz4/XkMnE8Af3f/jGKedJQFAu9TOoSVPwc9zUqP90G8HjSUIvOh3wdFPgwe5E078V4JaxBPdi1bpOWKyZb2d/; 4:dnx+zzGjKeWHPYaun4NVWdtTj2WbBnlJxkLtfIXxy5k+krXGFlOAuTUwgCbBuCK2RI7t6TNmpoDNkba9sq8uJua82kAoqjnffxdiJqhRFwxt1EmgnaRmskDzzTKsc3xO0Jwv9BermeRhGXqOFaOwyoilTu0fWQVijOHli7LellyaFM4+ekiwxq2fR7dwIjSGcX3pb89ws08gVpG9h0b68VOVQ6y869l5CcOpjcRgCCFi9lT0709XvMjDPE3VXcrzpNXaFsRuSuHpVd7mH4Sh3qtWI9QuUCjYWud9ZBvIqsK9jkesvXsKBJapFzKT4gjRXaA0Hpt1yLl50cG9GGhQPlgsJFQSUuKbw1hFmi/BjABPzZl1JAa9rxdDdi4Iqum3 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(166708455590820)(767451399110)(228905959029699); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231220)(944501244)(52105095)(3002001)(10201501046)(93006095)(93001095)(6055026)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(20161123558120)(20161123560045)(6072148)(201708071742011); SRVR:CY1PR12MB0151; BCL:0; PCL:0; RULEID:; SRVR:CY1PR12MB0151; X-Forefront-PRVS: 0606BBEB39 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39380400002)(396003)(346002)(366004)(376002)(39860400002)(189003)(199004)(53376002)(3846002)(6486002)(50466002)(59450400001)(4326008)(386003)(5660300001)(6666003)(6916009)(25786009)(36756003)(16526019)(86362001)(1076002)(6306002)(53936002)(316002)(16586007)(186003)(6116002)(26005)(54906003)(66066001)(47776003)(16799955002)(68736007)(2361001)(52116002)(105586002)(15188155005)(2906002)(2351001)(106356001)(97736004)(51416003)(478600001)(48376002)(7736002)(81156014)(305945005)(81166006)(8936002)(50226002)(7696005)(966005)(53416004)(8676002)(213903007); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR12MB0151; H:wsp141597wss.amd.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR12MB0151; 23:7s40bIuAQ4AsWZDdu+OGWEE3ybIGQ/kuMF2S8jRjL?= =?us-ascii?Q?lNowT5n03VSF/hzj+fduwY8PQKBvHTz4XmlHTwmqs59IeB+f+9PO9z4f8po3?= =?us-ascii?Q?x5bpM1BdMhUPUCqe/fQTiUw3BaYFKiTV11/p02s3tgotM4IglNagYBG4nRe/?= =?us-ascii?Q?2D10YLPUEiOSOodymqZiCxNQi6gl18hJUKQymJNFpWHozAQTpClM+Tbb6dJm?= =?us-ascii?Q?5az8JOw0XupEA7ebqsJXwiIjFeY7pug+xdApoYhR6/3rnrgaO++ioRGJatpN?= =?us-ascii?Q?0DpVUoxmxEXzDRElbYOqCpVyUhgUSkZeZKlLCAlziDOplebCTPBItKj1HxJI?= =?us-ascii?Q?t2lr/fSz9Wuhgy6ybvlAygiS5y4XdAg5OgV8YmD8adgcTCRtcd5scoCw4Rz2?= =?us-ascii?Q?BDPMAVTD4DRBt66d1wuS44PJX4AWUrG+3AohpTz47Ya4RKRX5nV3exZX45O3?= =?us-ascii?Q?qfKGQ5fNWKWgp/61twzz3rFRbmo+bwSgTXRmMxRGsdDbchL6Fhl/g1yDoQQX?= =?us-ascii?Q?spw9gcbHDEpuZIsbrMX2VCZrN183+oW45NMd+L26w9cUfrfZQOo+TcRL6pFf?= =?us-ascii?Q?LSwbpn7k1scke9nPQqq97w5dko4YKNQl9S268i7mJIlSt1hngWmDigFckGKr?= =?us-ascii?Q?STN3sZU4Ylr/f9EiL8N/9aF13heyq9FgSZj1LZdbl0rR/rTBh4A8a3NwvNn0?= =?us-ascii?Q?e1+knIqUIC23KAmSjkp7KGPrPqhkz0bcx769367WJKUBwbqrRUZBRLisdN6n?= =?us-ascii?Q?Tsi2mFFW058JnoG9js/1SoE+y7NQ5vWs10SY5cHIUFr2Ucbas5Urtp2rTzlE?= =?us-ascii?Q?qsEwZovFs88IeQiAShFUatFXMElXacLLNA8uEAUBWnYq0w+D51A/9Vp4eKwy?= =?us-ascii?Q?abZFLXzBHOlqP1yNM4ixx86FFQzGOmuII20TJqa+xgKdyi8MTAXHUmO9pi43?= =?us-ascii?Q?lh5PTe4KVF36MGQLNdxJI7vg+l/qCR+adLSQZ/1jXSILmEq1oFOHONescXsr?= =?us-ascii?Q?0LrCPrxbfsUtdL30OabG1kMouCxszOKrO8Ckr9GIhXE4hN0Jn2HDsCfO8vTj?= =?us-ascii?Q?YLyKIP1Mq5u25Jw3D/hq+q5TYL33q4r03s7JiZ9iWvHAy3VQt+fmVcxWoKOm?= =?us-ascii?Q?tERi96SLPqI7Ua0yx4bnWxN1aFK+5s9PN+5o6o9aXN3gmRWI3A6qwx04lPw6?= =?us-ascii?Q?0+Q7PQfhjnQeP+EARAYMJpsUhgar2/zFFavAxYcJjSkW58NSeRJewKd8zPT5?= =?us-ascii?Q?CQZGyV6peZKBA7/6OspVhAtsjzsrgb/T67ghkJxvXsdE5dLP6BYNwKNrcn7/?= =?us-ascii?B?UT09?= X-Microsoft-Antispam-Message-Info: RudyB1klB+op38uqBGQbhbTrW1EaXO7rAhyEYrOmA4tPMC9US7TrElr/jCtV9t6OpWzZ1e9TMl1tW26diC87xnEtjIyPHlIa+8b7Pg2gOIh7aFPpykuMHQv/m4jpZBACxGKe8TnwjMMia0Zhx+ANhmjRYCUXygHfh4wPuB3k+Ax6JAbE+mAoJL7DwcoVBh6i X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0151; 6:V9Wx88bRGG/mDXl74xOM85A8GpK6K03Xo9qz1AAFJmPvKBn8EQbzboZqXZr73Spvz6obLWg6xz5lTpHp2yASsZC4mEm2nxhIhUzaWbZDD9t8gVZM/RP3bTGm3NvvCelbJVtegMFQq7mJqGVWDtPxkmisZ14iPHeSykPBpBOBOCDr1/uHv/SQFNhCZkuObTmtlxgUWm4TzbiFTalpeihg6SEU3FRMdLWhhES2WeTgTZpGibSNP1bXQ7wKEb3s3PFEb8Ab+ctwt+Hm9C4A7FEOA7xXXJuMaBUAFjqronSyK9nHJ+nsHlgY64h+C4foAYEJXgCYgHZ9R/4FDJhuVa8fHm2HKp40NR2FnyO2cSIMQl8=; 5:feUMayVNyTFDyTIQXjRWNqNBJLY3CiI0hC+WzlEq5mqfXWdcyU3b40/n0nDhtF96m4HyrBIbSywYvAKf48hqML5v2hQDim/s50wm+5pGfiB4z3r9aGbM1J2g/HyLYHcSwTNNU6yEfRpgSbU9LSZfxMHJBj3RsdlHwQs0MEE4S4g=; 24:MOD6fTPtrs0zzyCxPXTwebBO7IytEAdfnUbuoVB/TCuLEbBun3mF69qc1tWRptSWM7mMljBO9xqJZisjgrVZrcK0bgCz0mCYwqehepOau0o=; 7:vCnLPDyxrVKOv7htBFcxsE6c4oAufcg78pKXsHo8CTQA+MdqjdOECdzwclCnDVGc5e4wf1SWGhiMvUf0Y0g3mdyW7siVY2vgVebgFWJ3P039jZmneXHANTU9ywP9BDlP/I9rvvBMbz4vKJlIKzQTZfbklR4/pa/sP8aPEpYMJjzCWNCQ1jbA5g+MWn7spy5rePWmWG3qcikaRszlz2ogE3xNzutLwFfIGi3bCIsg4U4fHLpLO5JFzykbjUGiV6OT SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0151; 20:VR2Qkw4Jfpg19AFAwpaUZcGyYGnhqVI2PnuS20DvZMf+C95CCUpyRjlBzMKHJOatyKylNgbklXN4E0yGNfCU8UOywvZGO743D4KYGVwKUbO0iyxdltGuwrTg+v33W6cRRNpHugBAMl5DZHIFsUUyU26NEMMuExnzqLghBBrS+8wfTVQfVbgAsHausMZ58X/a+Wnp27zuAsuokN/iD9iZhayMa6IU/cY8+rz87pn99B2+oZNqRjYMUSoQ0fLsG3ti X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Mar 2018 16:06:23.0085 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6c877e62-4c7c-4c0a-72e0-08d585d7b4cc X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR12MB0151 Subject: [PATCH v3 1/1] OvmfPkg/QemuFlashFvbServicesRuntimeDxe: Clear C-bit when SEV is active X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Mar 2018 16:00:09 -0000 Content-Type: text/plain Commit:24e4ad7 (OvmfPkg: Add AmdSevDxe driver) added a driver which runs early in DXE phase and clears the C-bit from NonExistent entry -- which is later split and accommodate the flash MMIO. When SMM is enabled, we build two sets of page tables; first page table is used when executing code in non SMM mode (SMM-less-pgtable) and second page table is used when we are executing code in SMM mode (SMM-pgtable). During boot time, AmdSevDxe driver clears the C-bit from the SMM-less-pgtable. But when SMM is enabled, Qemu Flash services are used from SMM mode. In this patch we explicitly clear the C-bit from Qemu flash MMIO range before we probe the flash. When OVMF is built with SMM_REQUIRE then call to initialize the flash services happen after the SMM-pgtable is created and processor has served the first SMI. At this time we will have access to the SMM-pgtable. Cc: Jordan Justen Cc: Laszlo Ersek Cc: Ard Biesheuvel Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Brijesh Singh --- Changes since v2: - rename BeforeFlashProbe() -> QemuFlashBeforeProbe() - add new file to define Smm specific QemuFlashBeforeProbe() - update commit message and comment in the code Patch is also available at url: github.com/codomania/edk2.git branch: smm-v3 OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbServicesSmm.inf | 2 + OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.h | 7 +++ OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.c | 8 +++ OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashDxe.c | 12 +++++ OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashSmm.c | 54 ++++++++++++++++++++ 5 files changed, 83 insertions(+) diff --git a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbServicesSmm.inf b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbServicesSmm.inf index ba2d3679a46d..b5c79762c23f 100644 --- a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbServicesSmm.inf +++ b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbServicesSmm.inf @@ -40,6 +40,7 @@ [Sources] FwBlockService.c FwBlockServiceSmm.c QemuFlash.c + QemuFlashSmm.c [Packages] MdePkg/MdePkg.dec @@ -53,6 +54,7 @@ [LibraryClasses] DevicePathLib DxeServicesTableLib MemoryAllocationLib + MemEncryptSevLib PcdLib SmmServicesTableLib UefiBootServicesTableLib diff --git a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.h b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.h index 8d83dca7a52c..d34a8a19a039 100644 --- a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.h +++ b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.h @@ -88,5 +88,12 @@ QemuFlashConvertPointers ( VOID ); +VOID +QemuFlashBeforeProbe ( + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN UINTN FdBlockSize, + IN UINTN FdBlockCount + ); + #endif diff --git a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.c b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.c index 5677b5ee119c..3f057918298d 100644 --- a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.c +++ b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.c @@ -244,6 +244,14 @@ QemuFlashInitialize ( ASSERT(PcdGet32 (PcdOvmfFirmwareFdSize) % mFdBlockSize == 0); mFdBlockCount = PcdGet32 (PcdOvmfFirmwareFdSize) / mFdBlockSize; + // + // execute module specific hooks before probing the flash + // + QemuFlashBeforeProbe ( + (EFI_PHYSICAL_ADDRESS)(UINTN) mFlashBase, + mFdBlockSize, mFdBlockCount + ); + if (!QemuFlashDetected ()) { ASSERT (!FeaturePcdGet (PcdSmmSmramRequire)); return EFI_WRITE_PROTECTED; diff --git a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashDxe.c b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashDxe.c index 08ece2beaeca..332ceafd3f78 100644 --- a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashDxe.c +++ b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashDxe.c @@ -26,3 +26,15 @@ QemuFlashConvertPointers ( { EfiConvertPointer (0x0, (VOID **) &mFlashBase); } + +VOID +QemuFlashBeforeProbe ( + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN UINTN FdBlockSize, + IN UINTN FdBlockCount + ) +{ + // + // Do nothing + // +} diff --git a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashSmm.c b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashSmm.c new file mode 100644 index 000000000000..193fcec3690e --- /dev/null +++ b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashSmm.c @@ -0,0 +1,54 @@ +/** @file + Define the module hooks used while probing the QEMU flash device. + + Copyright (C) 2018, Advanced Micro Devices. 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 + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#include +#include +#include +#include + +#include "QemuFlash.h" + +VOID +QemuFlashBeforeProbe ( + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN UINTN FdBlockSize, + IN UINTN FdBlockCount + ) +{ + EFI_STATUS Status; + + ASSERT (FeaturePcdGet (PcdSmmSmramRequire)); + + if (!MemEncryptSevIsEnabled()) { + return; + } + + // + // When SEV is enabled, AmdSevDxe runs early in DXE phase and clears the C-bit + // from the NonExistent entry -- which is later split and accommodate the + // flash MMIO but the driver runs in non SMM context hence it cleared the + // flash ranges from non SMM page table. When SMM is enabled, the flash + // services are accessed from the SMM mode hence we explicitly clear the + // C-bit on flash ranges from SMM page table. + // + + Status = MemEncryptSevClearPageEncMask ( + 0, + BaseAddress, + EFI_SIZE_TO_PAGES (FdBlockSize * FdBlockCount), + FALSE + ); + ASSERT_EFI_ERROR (Status); +} -- 2.14.3