On Fri, Jul 18, 2014 at 6:28 PM, Laszlo Ersek <ler...@redhat.com> 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 <ler...@redhat.com>
> ---
>  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.<BR>
> +#
> +#  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 <jordan.l.jus...@intel.com>

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

Reply via email to