From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
To: Laszlo Ersek <lersek@redhat.com>
Cc: edk2-devel-01 <edk2-devel@lists.01.org>,
Anthony Perard <anthony.perard@citrix.com>,
Jordan Justen <jordan.l.justen@intel.com>,
Julien Grall <julien.grall@linaro.org>
Subject: Re: [PATCH v2 4/8] OvmfPkg: introduce FlashNvStorageAddressLib
Date: Fri, 1 Dec 2017 08:55:31 +0000 [thread overview]
Message-ID: <CAKv+Gu8y0ED7kUYNsBq+nvWxywN+m2gQk7MdauJaay=tEFr7Hw@mail.gmail.com> (raw)
In-Reply-To: <20171130163029.19743-5-lersek@redhat.com>
On 30 November 2017 at 16:30, Laszlo Ersek <lersek@redhat.com> wrote:
> An OVMF binary built with
>
> -D SMM_REQUIRE
>
> or with
>
> -D MEM_VARSTORE_EMU_ENABLE=FALSE
>
> requires flash to be present at the expected (build-time determined)
> location; falling back to the emulated varstore is not possible.
>
> In such builds, we can replace the settings of the
> - varstore,
> - FTW working block,
> - and FTW spare area
> address PCDs in QemuFlashFvbServicesRuntimeDxe with identical settings in
> a new plug-in (NULL class) library, to be linked into variable-related
> PEIMs.
>
> This will enable such builds to access variables during the PEI phase,
> without dynamic flash detection and without ordering constraints against
> other PEIMs.
>
Why can't we set these at build time in this case?
> Cc: Anthony Perard <anthony.perard@citrix.com>
> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> Cc: Jordan Justen <jordan.l.justen@intel.com>
> Cc: Julien Grall <julien.grall@linaro.org>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Laszlo Ersek <lersek@redhat.com>
> ---
> OvmfPkg/Library/FlashNvStorageAddressLib/FlashNvStorageAddressLib.inf | 48 ++++++++++++++++++
> OvmfPkg/Library/FlashNvStorageAddressLib/FlashNvStorageAddressLib.c | 53 ++++++++++++++++++++
> 2 files changed, 101 insertions(+)
>
> diff --git a/OvmfPkg/Library/FlashNvStorageAddressLib/FlashNvStorageAddressLib.inf b/OvmfPkg/Library/FlashNvStorageAddressLib/FlashNvStorageAddressLib.inf
> new file mode 100644
> index 000000000000..f79194f80de9
> --- /dev/null
> +++ b/OvmfPkg/Library/FlashNvStorageAddressLib/FlashNvStorageAddressLib.inf
> @@ -0,0 +1,48 @@
> +## @file
> +#
> +# A hook-in library for variable-related PEIMs, in order to set
> +# - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64,
> +# - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase,
> +# - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase,
> +# from their gUefiOvmfPkgTokenSpaceGuid counterparts, just before those PEIMs
> +# consume them.
> +#
> +# Copyright (C) 2017, Red Hat, Inc.
> +#
> +# 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.
> +#
> +##
> +
> +[Defines]
> + INF_VERSION = 1.25
> + BASE_NAME = FlashNvStorageAddressLib
> + FILE_GUID = 5FF5A9F9-D01E-49EC-9A17-1682FC85122F
> + MODULE_TYPE = BASE
> + VERSION_STRING = 1.0
> + LIBRARY_CLASS = FlashNvStorageAddressLib|PEIM
> + CONSTRUCTOR = SetFlashNvStorageAddresses
> +
> +[Sources]
> + FlashNvStorageAddressLib.c
> +
> +[Packages]
> + MdePkg/MdePkg.dec
> + MdeModulePkg/MdeModulePkg.dec
> + OvmfPkg/OvmfPkg.dec
> +
> +[LibraryClasses]
> + PcdLib
> +
> +[Pcd]
> + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase
> + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase
> + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64
> + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageFtwSpareBase
> + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageFtwWorkingBase
> + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageVariableBase
> diff --git a/OvmfPkg/Library/FlashNvStorageAddressLib/FlashNvStorageAddressLib.c b/OvmfPkg/Library/FlashNvStorageAddressLib/FlashNvStorageAddressLib.c
> new file mode 100644
> index 000000000000..dc1280cc23f1
> --- /dev/null
> +++ b/OvmfPkg/Library/FlashNvStorageAddressLib/FlashNvStorageAddressLib.c
> @@ -0,0 +1,53 @@
> +/** @file
> +
> + A hook-in library for variable-related PEIMs, in order to set
> + - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64,
> + - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase,
> + - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase,
> + from their gUefiOvmfPkgTokenSpaceGuid counterparts, just before those PEIMs
> + consume them.
> +
> + Copyright (C) 2017, Red Hat, Inc.
> +
> + 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 <Library/PcdLib.h>
> +
> +RETURN_STATUS
> +EFIAPI
> +SetFlashNvStorageAddresses (
> + VOID
> + )
> +{
> + RETURN_STATUS PcdStatus;
> +
> + PcdStatus = PcdSet64S (
> + PcdFlashNvStorageVariableBase64,
> + PcdGet32 (PcdOvmfFlashNvStorageVariableBase)
> + );
> + if (RETURN_ERROR (PcdStatus)) {
> + return PcdStatus;
> + }
> +
> + PcdStatus = PcdSet32S (
> + PcdFlashNvStorageFtwWorkingBase,
> + PcdGet32 (PcdOvmfFlashNvStorageFtwWorkingBase)
> + );
> + if (RETURN_ERROR (PcdStatus)) {
> + return PcdStatus;
> + }
> +
> + PcdStatus = PcdSet32S (
> + PcdFlashNvStorageFtwSpareBase,
> + PcdGet32 (PcdOvmfFlashNvStorageFtwSpareBase)
> + );
> + return PcdStatus;
> +}
> --
> 2.14.1.3.gb7cf6e02401b
>
>
next prev parent reply other threads:[~2017-12-01 8:51 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-30 16:30 [PATCH v2 0/8] OvmfPkg: add the Variable PEIM, defragment the UEFI memmap Laszlo Ersek
2017-11-30 16:30 ` [PATCH v2 1/8] OvmfPkg: introduce PcdMemVarstoreEmuEnable feature flag Laszlo Ersek
2017-12-01 8:44 ` Ard Biesheuvel
2017-11-30 16:30 ` [PATCH v2 2/8] OvmfPkg/QemuFlashFvbServicesRuntimeDxe: check PcdMemVarstoreEmuEnable Laszlo Ersek
2017-12-01 8:44 ` Ard Biesheuvel
2017-11-30 16:30 ` [PATCH v2 3/8] OvmfPkg: conditionally disable reserved memory varstore emulation at build Laszlo Ersek
2017-12-01 8:51 ` Ard Biesheuvel
2017-12-01 10:52 ` Laszlo Ersek
2017-12-01 10:53 ` Ard Biesheuvel
2017-12-01 11:41 ` Laszlo Ersek
2017-12-02 8:53 ` Ard Biesheuvel
2017-11-30 16:30 ` [PATCH v2 4/8] OvmfPkg: introduce FlashNvStorageAddressLib Laszlo Ersek
2017-12-01 8:55 ` Ard Biesheuvel [this message]
2017-12-01 11:03 ` Laszlo Ersek
2017-12-01 11:28 ` Laszlo Ersek
2017-11-30 16:30 ` [PATCH v2 5/8] OvmfPkg: include FaultTolerantWritePei and VariablePei Laszlo Ersek
2017-11-30 16:30 ` [PATCH v2 6/8] OvmfPkg/QemuFlashFvbServicesRuntimeDxe: don't set flash PCDs if SMM or no-emu Laszlo Ersek
2017-11-30 16:30 ` [PATCH v2 7/8] OvmfPkg/PlatformPei: remedy UEFI memory map fragmentation Laszlo Ersek
2017-11-30 16:30 ` [PATCH v2 8/8] OvmfPkg/README: document MEM_VARSTORE_EMU_ENABLE and memmap defrag Laszlo Ersek
2017-11-30 19:00 ` [PATCH v2 0/8] OvmfPkg: add the Variable PEIM, defragment the UEFI memmap Jordan Justen
2017-12-01 8:42 ` Ard Biesheuvel
2017-12-01 10:48 ` Laszlo Ersek
2017-12-01 10:44 ` Laszlo Ersek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAKv+Gu8y0ED7kUYNsBq+nvWxywN+m2gQk7MdauJaay=tEFr7Hw@mail.gmail.com' \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox