Re: [edk2] [PATCH v2 2/2] OvmfPkg: build OVMF_VARS.fd, OVMF_CODE.fd, OVMF.fd

Subject: Re: [edk2] [PATCH v2 2/2] OvmfPkg: build OVMF_VARS.fd, OVMF_CODE.fd, OVMF.fd

From: Jordan Justen <jljusten@gmail.com>

To: Laszlo Ersek <lersek@redhat.com>

Date: 2014-07-22 09:42:17

On Fri, Jul 18, 2014 at 6:28 PM, Laszlo Ersek  wrote:
> OVMF_VARS.fd and OVMF_CODE.fd split the variable store and the firmware
> code in separate files.
>
> The PCDs' values continue to depend only on FD_SIZE_1MB vs. FD_SIZE_2MB.
> With the split files, it must be ensured on the QEMU command line that
> OVMF_VARS.fd and OVMF_CODE.fd be contiguously mapped so that they end
> exactly at 4GB. See QEMU commit 637a5acb (first released in v2.0.0).
>
> In this patch we must take care to assign each PCD only once.
>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Laszlo Ersek 
> ---
>  OvmfPkg/OvmfPkg.fdf.inc    | 57 ++++++++++++++++++++++++++++++++++++++++++++
>  OvmfPkg/OvmfPkgIa32.fdf    | 59 ++++++++++++++++++++++++++++++++++++----------
>  OvmfPkg/OvmfPkgIa32X64.fdf | 59 ++++++++++++++++++++++++++++++++++++----------
>  OvmfPkg/OvmfPkgX64.fdf     | 59 ++++++++++++++++++++++++++++++++++++----------
>  OvmfPkg/VarStore.fdf.inc   |  5 ----
>  5 files changed, 195 insertions(+), 44 deletions(-)
>  create mode 100644 OvmfPkg/OvmfPkg.fdf.inc
>
> diff --git a/OvmfPkg/OvmfPkg.fdf.inc b/OvmfPkg/OvmfPkg.fdf.inc
> new file mode 100644
> index 0000000..6cc810e
> --- /dev/null
> +++ b/OvmfPkg/OvmfPkg.fdf.inc
> @@ -0,0 +1,57 @@
> +## @file
> +#  FDF include file that defines the main macros and sets the dependent PCDs.
> +#
> +#  Copyright (C) 2014, Red Hat, Inc.
> +#
> +#  Copyright (c) 2006 - 2013, 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 > +# 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. > +# > +## > + > +DEFINE BLOCK_SIZE = 0x1000 > +DEFINE VARS_SIZE = 0x20000 > +DEFINE VARS_BLOCKS = 0x20 > + > +!ifdef $(FD_SIZE_1MB) > + > +DEFINE FW_BASE_ADDRESS = 0xFFF00000 > +DEFINE FW_SIZE = 0x00100000 > +DEFINE FW_BLOCKS = 0x100 > +DEFINE CODE_BASE_ADDRESS = 0xFFF20000 > +DEFINE CODE_SIZE = 0x000E0000 > +DEFINE CODE_BLOCKS = 0xE0 > + > +!else > + > +DEFINE FW_BASE_ADDRESS = 0xFFE00000 > +DEFINE FW_SIZE = 0x00200000 > +DEFINE FW_BLOCKS = 0x200 > +DEFINE CODE_BASE_ADDRESS = 0xFFE20000 > +DEFINE CODE_SIZE = 0x001E0000 > +DEFINE CODE_BLOCKS = 0x1E0 > + > +!endif > + > +SET gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFdBaseAddress = $(FW_BASE_ADDRESS) > +SET gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFirmwareFdSize = $(FW_SIZE) > +SET gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFirmwareBlockSize = $(BLOCK_SIZE) > + > +SET gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageVariableBase = $(FW_BASE_ADDRESS) > +SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize = 0xE000 > + > +SET gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageEventLogBase = gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageVariableBase + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize > +SET gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageEventLogSize = $(BLOCK_SIZE) > + > +SET gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageFtwWorkingBase = gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageEventLogBase + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageEventLogSize > +SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize = $(BLOCK_SIZE) > + > +SET gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageFtwSpareBase = gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageFtwWorkingBase + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize > +SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize = 0x10000 > diff --git a/OvmfPkg/OvmfPkgIa32.fdf b/OvmfPkg/OvmfPkgIa32.fdf > index f47655c..cd0e9cc 100644 > --- a/OvmfPkg/OvmfPkgIa32.fdf > +++ b/OvmfPkg/OvmfPkgIa32.fdf > @@ -28,21 +28,18 @@ DEFINE FD_SIZE_1MB= > !endif > !endif > > -!ifdef $(FD_SIZE_1MB) > +!include OvmfPkg.fdf.inc > + > +# > +# Build the variable store and the firmware code as one unified flash device > +# image. > +# > [FD.OVMF] > -BaseAddress = 0xFFF00000|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFdBaseAddress > -Size = 0x00100000|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFirmwareFdSize > +BaseAddress = $(FW_BASE_ADDRESS) > +Size = $(FW_SIZE) > ErasePolarity = 1 > -BlockSize = 0x1000|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFirmwareBlockSize > -NumBlocks = 0x100 > -!else > -[FD.OVMF] > -BaseAddress = 0xFFE00000|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFdBaseAddress > -Size = 0x00200000|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFirmwareFdSize > -ErasePolarity = 1 > -BlockSize = 0x1000|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFirmwareBlockSize > -NumBlocks = 0x200 > -!endif > +BlockSize = $(BLOCK_SIZE) > +NumBlocks = $(FW_BLOCKS) > > !include VarStore.fdf.inc > > @@ -61,6 +58,42 @@ FV = FVMAIN_COMPACT > FV = SECFV > !endif > > +# > +# Build the variable store and the firmware code as separate flash device > +# images. > +# > +[FD.OVMF_VARS] > +BaseAddress = $(FW_BASE_ADDRESS) > +Size = $(VARS_SIZE) > +ErasePolarity = 1 > +BlockSize = $(BLOCK_SIZE) > +NumBlocks = $(VARS_BLOCKS) > + > +!include VarStore.fdf.inc > + > +[FD.OVMF_CODE] > +BaseAddress = $(CODE_BASE_ADDRESS) > +Size = $(CODE_SIZE) > +ErasePolarity = 1 > +BlockSize = $(BLOCK_SIZE) > +NumBlocks = $(CODE_BLOCKS) > + > +!ifdef $(FD_SIZE_1MB) > + > +0x00000000|0x000CC000 > +FV = FVMAIN_COMPACT > +0x000CC000|0x14000 > +FV = SECFV > + > +!else > + > +0x00000000|0x001AC000 > +FV = FVMAIN_COMPACT > +0x001AC000|0x34000 How about adding two more variables in OvmfPkg.fdf.inc to allow these if/else chunks to be collapsed? With that change, the series is Reviewed-by: Jordan Justen https://github.com/lersek/edk2 branch? ------------------------------------------------------------------------------ Want fast and easy access to all the code in your enterprise? Index and search up to 200,000 lines of code with a free copy of Black Duck Code Sight - the same software that powers the world's largest code search on Ohloh, the Black Duck Open Hub! Try it now. http://p.sf.net/sfu/bds _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel