From: "Marcin Wojtas" <mw@semihalf.com>
To: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: edk2-devel-groups-io <devel@edk2.groups.io>,
"Leif Lindholm" <leif.lindholm@linaro.org>,
"Jan Dąbroś" <jsd@semihalf.com>,
"Grzegorz Jaszczyk" <jaz@semihalf.com>,
"Kostya Porotchkin" <kostap@marvell.com>,
"Jici Gao" <Jici.Gao@arm.com>,
"Kornel Duleba" <mindal@semihalf.com>
Subject: Re: [edk2-platforms: PATCH v2 3/3] Marvell/Drivers: Add non-mmio mode to MvFvbDxe
Date: Wed, 24 Apr 2019 15:48:23 +0200 [thread overview]
Message-ID: <CAPv3WKfCFPMjX=TRRW+q=LiEqSiU7EKJYZ4Y9YypOVg7sGZGwg@mail.gmail.com> (raw)
In-Reply-To: <CAKv+Gu96qSRFy2j4as65ud+3hkuK2aj5WkrALQxyzdgks+w7zg@mail.gmail.com>
Hi Ard,
śr., 24 kwi 2019 o 15:02 Ard Biesheuvel <ard.biesheuvel@linaro.org> napisał(a):
>
> On Wed, 24 Apr 2019 at 09:11, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:
> >
> > On Wed, 24 Apr 2019 at 08:52, Marcin Wojtas <mw@semihalf.com> wrote:
> > >
> > > From: Kornel Duleba <mindal@semihalf.com>
> > >
> > > This path enables support for reading variables directly from flash without
> > > relying on it to be memory mapped. It adds PcdSpiMemoryMapped PCD that
> > > allows to switch between the modes. When in non-memory-mapped mode the
> > > driver will copy the variables from flash to previously allocated buffer
> > > and set PcdFlashNvStorageVariableBase64, PcdFlashNvStorageFtwWorkingBase64
> > > and PcdFlashNvStorageFtwSpareBase64 accordingly.
> > >
> > > Contributed-under: TianoCore Contribution Agreement 1.1
> > > Signed-off-by: Marcin Wojtas <mw@semihalf.com>
> > > ---
> > > Silicon/Marvell/Marvell.dec | 8 ++
> > > Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc | 10 +-
> > > Silicon/Marvell/Drivers/Spi/MvFvbDxe/MvFvbDxe.inf | 17 ++-
> > > Silicon/Marvell/Drivers/Spi/MvFvbDxe/MvFvbDxe.h | 1 +
> > > Silicon/Marvell/Drivers/Spi/MvFvbDxe/MvFvbDxe.c | 135 +++++++++++++++-----
> > > 5 files changed, 135 insertions(+), 36 deletions(-)
> > >
> > > diff --git a/Silicon/Marvell/Marvell.dec b/Silicon/Marvell/Marvell.dec
> > > index 7210ba2..a23c329 100644
> > > --- a/Silicon/Marvell/Marvell.dec
> > > +++ b/Silicon/Marvell/Marvell.dec
> > > @@ -58,6 +58,12 @@
> > >
> > > gMarvellFvbDxeGuid = { 0x42903750, 0x7e61, 0x4aaf, { 0x83, 0x29, 0xbf, 0x42, 0x36, 0x4e, 0x24, 0x85 } }
> > > gMarvellSpiFlashDxeGuid = { 0x49d7fb74, 0x306d, 0x42bd, { 0x94, 0xc8, 0xc0, 0xc5, 0x4b, 0x18, 0x1d, 0xd7 } }
> > > + #
> > > + # Generic FaultTolerantWriteDxe driver use variables,
> > > + # whose setting is done in MvFvbDxe driver in case
> > > + # the SPI contents are not mapped in memory.
> > > + #
> > > + gFaultTolerantWriteDxeFileGuid = { 0xfe5cea76, 0x4f72, 0x49e8, { 0x98, 0x6f, 0x2c, 0xd8, 0x99, 0xdf, 0xfe, 0x5d} }
> > >
> > > [LibraryClasses]
> > > ArmadaBoardDescLib|Include/Library/ArmadaBoardDescLib.h
> > > @@ -140,6 +146,8 @@
> > > #SPI
> > > gMarvellTokenSpaceGuid.PcdSpiRegBase|0|UINT32|0x3000051
> > > gMarvellTokenSpaceGuid.PcdSpiMemoryBase|0|UINT64|0x3000059
> > > + gMarvellTokenSpaceGuid.PcdSpiMemoryMapped|TRUE|BOOLEAN|0x3000060
> > > + gMarvellTokenSpaceGuid.PcdSpiVariableOffset|0|UINT32|0x3000061
> > > gMarvellTokenSpaceGuid.PcdSpiMaxFrequency|0|UINT32|0x30000052
> > > gMarvellTokenSpaceGuid.PcdSpiClockFrequency|0|UINT32|0x30000053
> > >
> > > diff --git a/Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc b/Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc
> > > index ca3de2e..d53d128 100644
> > > --- a/Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc
> > > +++ b/Silicon/Marvell/Armada7k8k/Armada7k8k.dsc.inc
> > > @@ -256,6 +256,11 @@
> > > # USB support
> > > gEfiMdeModulePkgTokenSpaceGuid.PcdTurnOffUsbLegacySupport|TRUE
> > >
> > > +[PcdsDynamicDefault.common]
> > > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0xF93C0000
> > > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64|0xF93E0000
> > > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0xF93D0000
> > > +
> > > [PcdsFixedAtBuild.common]
> > > gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString|L"MARVELL_EFI"
> > > gArmPlatformTokenSpaceGuid.PcdCoreCount|4
> > > @@ -396,11 +401,10 @@
> > > # Variable store - default values
> > > #
> > > gMarvellTokenSpaceGuid.PcdSpiMemoryBase|0xF9000000
> > > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0xF93C0000
> > > + gMarvellTokenSpaceGuid.PcdSpiMemoryMapped|TRUE
> > > + gMarvellTokenSpaceGuid.PcdSpiVariableOffset|0x3C0000
> > > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize|0x00010000
> > > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0xF93D0000
> > > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize|0x00010000
> > > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64|0xF93E0000
> > > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize|0x00010000
> > >
> > > !if $(CAPSULE_ENABLE)
> > > diff --git a/Silicon/Marvell/Drivers/Spi/MvFvbDxe/MvFvbDxe.inf b/Silicon/Marvell/Drivers/Spi/MvFvbDxe/MvFvbDxe.inf
> > > index ef10bfd..c85e8a6 100644
> > > --- a/Silicon/Marvell/Drivers/Spi/MvFvbDxe/MvFvbDxe.inf
> > > +++ b/Silicon/Marvell/Drivers/Spi/MvFvbDxe/MvFvbDxe.inf
> > > @@ -76,13 +76,22 @@
> > > gMarvellSpiMasterProtocolGuid
> > >
> > > [FixedPcd]
> > > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64
> > > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
> > > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64
> > > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize
> > > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64
> > > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize
> > > gMarvellTokenSpaceGuid.PcdSpiMemoryBase
> > > + gMarvellTokenSpaceGuid.PcdSpiMemoryMapped
> > > + gMarvellTokenSpaceGuid.PcdSpiVariableOffset
> > > +
> > > +[Pcd]
> > > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64
> > > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64
> > > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64
> > >
> > > [Depex]
> > > - gEfiCpuArchProtocolGuid
> > > + #
> > > + # Generic FaultTolerantWriteDxe driver use variables,
> > > + # whose setting is done in MvFvbDxe driver in case
> > > + # the SPI contents are not mapped in memory.
> > > + #
> > > + BEFORE gFaultTolerantWriteDxeFileGuid
> >
> > Apologies for not spotting this before, but there is a problem here:
> > FaultTolerantWriteDxe.inf does not depend on gEfiCpuArchProtocolGuid,
> > but we do, and so we could now be dispatched before
> > gEfiCpuArchProtocolGuid becomes available. This means you need to
> > update the code to deal with that (or explain to me how if it already
> > does)
> >
>
> You should be able to fix this by adding a NULL resolution for
>
> EmbeddedPkg/Library/NvVarStoreFormattedLib/NvVarStoreFormattedLib.inf
>
> to the FTW driver, similar to what you are already doing for the
> variable driver.
>
Thanks for the hint, I'll try that.
I tried to modify dependencies within edk2-platforms to explicitly
cover FaultTolerantWriteDxe.inf and gEfiCpuArchProtocolGuid, but did
not succeed.
With this patch the things work properly, but I am wondering if only
by luck. I found following line in
BaseTools/Source/Python/UPT/Xml/XmlParser.py:
DxeObj.SetDepex("gEfiBdsArchProtocolGuid AND \ngEfiCpuArchProtocolGuid
AND\n" + \
it seems not to apply for MvFvbDxe though. So simply it may be an
order of entries in Armada7k8k.fdf file.
Best regards,
Marcin
> >
> > > diff --git a/Silicon/Marvell/Drivers/Spi/MvFvbDxe/MvFvbDxe.h b/Silicon/Marvell/Drivers/Spi/MvFvbDxe/MvFvbDxe.h
> > > index 31e6e44..e8df9a5 100644
> > > --- a/Silicon/Marvell/Drivers/Spi/MvFvbDxe/MvFvbDxe.h
> > > +++ b/Silicon/Marvell/Drivers/Spi/MvFvbDxe/MvFvbDxe.h
> > > @@ -55,6 +55,7 @@ typedef struct {
> > >
> > > UINT32 Signature;
> > >
> > > + BOOLEAN IsMemoryMapped;
> > > UINTN DeviceBaseAddress;
> > > UINTN RegionBaseAddress;
> > > UINTN Size;
> > > diff --git a/Silicon/Marvell/Drivers/Spi/MvFvbDxe/MvFvbDxe.c b/Silicon/Marvell/Drivers/Spi/MvFvbDxe/MvFvbDxe.c
> > > index cb006cd..b4fd29c 100644
> > > --- a/Silicon/Marvell/Drivers/Spi/MvFvbDxe/MvFvbDxe.c
> > > +++ b/Silicon/Marvell/Drivers/Spi/MvFvbDxe/MvFvbDxe.c
> > > @@ -52,6 +52,7 @@ STATIC CONST FVB_DEVICE mMvFvbFlashInstanceTemplate = {
> > >
> > > FVB_FLASH_SIGNATURE, // Signature
> > >
> > > + FALSE, // IsMemoryMapped ... NEED TO BE FILLED
> > > 0, // DeviceBaseAddress ... NEED TO BE FILLED
> > > 0, // RegionBaseAddress ... NEED TO BE FILLED
> > > SIZE_256KB, // Size
> > > @@ -175,11 +176,14 @@ MvFvbInitFvAndVariableStoreHeaders (
> > > FirmwareVolumeHeader->Attributes = EFI_FVB2_READ_ENABLED_CAP |
> > > EFI_FVB2_READ_STATUS |
> > > EFI_FVB2_STICKY_WRITE |
> > > - EFI_FVB2_MEMORY_MAPPED |
> > > EFI_FVB2_ERASE_POLARITY |
> > > EFI_FVB2_WRITE_STATUS |
> > > EFI_FVB2_WRITE_ENABLED_CAP;
> > >
> > > + if (FlashInstance->IsMemoryMapped) {
> > > + FirmwareVolumeHeader->Attributes |= EFI_FVB2_MEMORY_MAPPED;
> > > + }
> > > +
> > > FirmwareVolumeHeader->HeaderLength = sizeof (EFI_FIRMWARE_VOLUME_HEADER) +
> > > sizeof (EFI_FV_BLOCK_MAP_ENTRY);
> > > FirmwareVolumeHeader->Revision = EFI_FVH_REVISION;
> > > @@ -349,10 +353,13 @@ MvFvbSetAttributes (
> > > EFI_FVB_ATTRIBUTES_2 OldAttributes;
> > > EFI_FVB_ATTRIBUTES_2 FlashFvbAttributes;
> > > EFI_FVB_ATTRIBUTES_2 UnchangedAttributes;
> > > + FVB_DEVICE *FlashInstance;
> > > UINT32 Capabilities;
> > > UINT32 OldStatus;
> > > UINT32 NewStatus;
> > >
> > > + FlashInstance = INSTANCE_FROM_FVB_THIS (This);
> > > +
> > > //
> > > // Obtain attributes from FVB header
> > > //
> > > @@ -369,12 +376,15 @@ MvFvbSetAttributes (
> > > EFI_FVB2_WRITE_ENABLED_CAP | \
> > > EFI_FVB2_LOCK_CAP | \
> > > EFI_FVB2_STICKY_WRITE | \
> > > - EFI_FVB2_MEMORY_MAPPED | \
> > > EFI_FVB2_ERASE_POLARITY | \
> > > EFI_FVB2_READ_LOCK_CAP | \
> > > EFI_FVB2_WRITE_LOCK_CAP | \
> > > EFI_FVB2_ALIGNMENT;
> > >
> > > + if (FlashInstance->IsMemoryMapped) {
> > > + UnchangedAttributes |= EFI_FVB2_MEMORY_MAPPED;
> > > + }
> > > +
> > > //
> > > // Some attributes of FV is read only can *not* be set
> > > //
> > > @@ -692,6 +702,7 @@ MvFvbWrite (
> > > IN UINT8 *Buffer
> > > )
> > > {
> > > + EFI_STATUS Status;
> > > FVB_DEVICE *FlashInstance;
> > > UINTN DataOffset;
> > >
> > > @@ -701,10 +712,27 @@ MvFvbWrite (
> > > FlashInstance->StartLba + Lba,
> > > FlashInstance->Media.BlockSize);
> > >
> > > - return FlashInstance->SpiFlashProtocol->Write (&FlashInstance->SpiDevice,
> > > - DataOffset,
> > > - *NumBytes,
> > > - Buffer);
> > > + Status = FlashInstance->SpiFlashProtocol->Write (&FlashInstance->SpiDevice,
> > > + DataOffset,
> > > + *NumBytes,
> > > + Buffer);
> > > + if (EFI_ERROR (Status)) {
> > > + DEBUG ((DEBUG_ERROR,
> > > + "%a: Failed to write to Spi device\n",
> > > + __FUNCTION__));
> > > + return Status;
> > > + }
> > > +
> > > + // Update shadow buffer
> > > + if (!FlashInstance->IsMemoryMapped) {
> > > + DataOffset = GET_DATA_OFFSET (FlashInstance->RegionBaseAddress + Offset,
> > > + FlashInstance->StartLba + Lba,
> > > + FlashInstance->Media.BlockSize);
> > > +
> > > + CopyMem ((UINTN *)DataOffset, Buffer, *NumBytes);
> > > + }
> > > +
> > > + return EFI_SUCCESS;
> > > }
> > >
> > > /**
> > > @@ -975,6 +1003,9 @@ MvFvbConfigureFlashInstance (
> > > )
> > > {
> > > EFI_STATUS Status;
> > > + UINTN *NumBytes;
> > > + UINTN DataOffset;
> > > + UINTN VariableSize, FtwWorkingSize, FtwSpareSize, MemorySize;
> > >
> > >
> > > // Locate SPI protocols
> > > @@ -1009,25 +1040,62 @@ MvFvbConfigureFlashInstance (
> > > }
> > >
> > > // Fill remaining flash description
> > > - FlashInstance->DeviceBaseAddress = PcdGet64 (PcdSpiMemoryBase);
> > > - FlashInstance->RegionBaseAddress = FixedPcdGet64 (PcdFlashNvStorageVariableBase64);
> > > - FlashInstance->FvbOffset = FlashInstance->RegionBaseAddress -
> > > - FlashInstance->DeviceBaseAddress;
> > > - FlashInstance->FvbSize = PcdGet32(PcdFlashNvStorageVariableSize) +
> > > - PcdGet32(PcdFlashNvStorageFtwWorkingSize) +
> > > - PcdGet32(PcdFlashNvStorageFtwSpareSize);
> > > + VariableSize = PcdGet32 (PcdFlashNvStorageVariableSize);
> > > + FtwWorkingSize = PcdGet32 (PcdFlashNvStorageFtwWorkingSize);
> > > + FtwSpareSize = PcdGet32 (PcdFlashNvStorageFtwSpareSize);
> > > +
> > > + FlashInstance->IsMemoryMapped = PcdGetBool (PcdSpiMemoryMapped);
> > > + FlashInstance->FvbSize = VariableSize + FtwWorkingSize + FtwSpareSize;
> > > + FlashInstance->FvbOffset = PcdGet32 (PcdSpiVariableOffset);
> > >
> > > FlashInstance->Media.MediaId = 0;
> > > FlashInstance->Media.BlockSize = FlashInstance->SpiDevice.Info->SectorSize;
> > > FlashInstance->Media.LastBlock = FlashInstance->Size /
> > > FlashInstance->Media.BlockSize - 1;
> > >
> > > + if (FlashInstance->IsMemoryMapped) {
> > > + FlashInstance->DeviceBaseAddress = PcdGet64 (PcdSpiMemoryBase);
> > > + FlashInstance->RegionBaseAddress = PcdGet64 (PcdFlashNvStorageVariableBase64);
> > > + } else {
> > > + MemorySize = EFI_SIZE_TO_PAGES (FlashInstance->FvbSize);
> > > +
> > > + // FaultTolerantWriteDxe requires memory to be aligned to FtwWorkingSize
> > > + FlashInstance->RegionBaseAddress = (UINTN) AllocateAlignedRuntimePages (MemorySize,
> > > + SIZE_64KB);
> > > + if (FlashInstance->RegionBaseAddress == (UINTN) NULL) {
> > > + return EFI_OUT_OF_RESOURCES;
> > > + }
> > > +
> > > + PcdSet64 (PcdFlashNvStorageVariableBase64,
> > > + (UINT64) FlashInstance->RegionBaseAddress);
> > > + PcdSet64 (PcdFlashNvStorageFtwWorkingBase64,
> > > + (UINT64) FlashInstance->RegionBaseAddress
> > > + + VariableSize);
> > > + PcdSet64 (PcdFlashNvStorageFtwSpareBase64,
> > > + (UINT64) FlashInstance->RegionBaseAddress
> > > + + VariableSize
> > > + + FtwWorkingSize);
> > > +
> > > + // Fill the buffer with data from flash
> > > + DataOffset = GET_DATA_OFFSET (FlashInstance->FvbOffset,
> > > + FlashInstance->StartLba,
> > > + FlashInstance->Media.BlockSize);
> > > + *NumBytes = FlashInstance->FvbSize;
> > > + Status = FlashInstance->SpiFlashProtocol->Read (&FlashInstance->SpiDevice,
> > > + DataOffset,
> > > + *NumBytes,
> > > + (VOID *)FlashInstance->RegionBaseAddress);
> > > + if (EFI_ERROR (Status)) {
> > > + goto ErrorFreeAllocatedPages;
> > > + }
> > > + }
> > > +
> > > Status = gBS->InstallMultipleProtocolInterfaces (&FlashInstance->Handle,
> > > &gEfiDevicePathProtocolGuid, &FlashInstance->DevicePath,
> > > &gEfiFirmwareVolumeBlockProtocolGuid, &FlashInstance->FvbProtocol,
> > > NULL);
> > > if (EFI_ERROR (Status)) {
> > > - return Status;
> > > + goto ErrorFreeAllocatedPages;
> > > }
> > >
> > > Status = MvFvbPrepareFvHeader (FlashInstance);
> > > @@ -1043,6 +1111,12 @@ ErrorPrepareFvbHeader:
> > > &gEfiFirmwareVolumeBlockProtocolGuid,
> > > NULL);
> > >
> > > +ErrorFreeAllocatedPages:
> > > + if (!FlashInstance->IsMemoryMapped) {
> > > + FreeAlignedPages ((VOID *)FlashInstance->RegionBaseAddress,
> > > + MemorySize);
> > > + }
> > > +
> > > return Status;
> > > }
> > >
> > > @@ -1094,24 +1168,27 @@ MvFvbEntryPoint (
> > > //
> > > // Declare the Non-Volatile storage as EFI_MEMORY_RUNTIME
> > > //
> > > - RuntimeMmioRegionSize = mFvbDevice->FvbSize;
> > > RegionBaseAddress = mFvbDevice->RegionBaseAddress;
> > >
> > > - Status = gDS->AddMemorySpace (EfiGcdMemoryTypeMemoryMappedIo,
> > > - RegionBaseAddress,
> > > - RuntimeMmioRegionSize,
> > > - EFI_MEMORY_UC | EFI_MEMORY_RUNTIME);
> > > - if (EFI_ERROR (Status)) {
> > > - DEBUG ((DEBUG_ERROR, "%a: Failed to add memory space\n", __FUNCTION__));
> > > - goto ErrorAddSpace;
> > > - }
> > > + if (mFvbDevice->IsMemoryMapped) {
> > > + RuntimeMmioRegionSize = mFvbDevice->FvbSize;
> > > + Status = gDS->AddMemorySpace (EfiGcdMemoryTypeMemoryMappedIo,
> > > + RegionBaseAddress,
> > > + RuntimeMmioRegionSize,
> > > + EFI_MEMORY_UC | EFI_MEMORY_RUNTIME);
> > > + if (EFI_ERROR (Status)) {
> > > + DEBUG ((DEBUG_ERROR, "%a: Failed to add memory space\n", __FUNCTION__));
> > > + goto ErrorAddSpace;
> > > + }
> > >
> > > - Status = gDS->SetMemorySpaceAttributes (RegionBaseAddress,
> > > - RuntimeMmioRegionSize,
> > > - EFI_MEMORY_UC | EFI_MEMORY_RUNTIME);
> > > - if (EFI_ERROR (Status)) {
> > > - DEBUG ((DEBUG_ERROR, "%a: Failed to set memory attributes\n", __FUNCTION__));
> > > - goto ErrorSetMemAttr;
> > > +
> > > + Status = gDS->SetMemorySpaceAttributes (RegionBaseAddress,
> > > + RuntimeMmioRegionSize,
> > > + EFI_MEMORY_UC | EFI_MEMORY_RUNTIME);
> > > + if (EFI_ERROR (Status)) {
> > > + DEBUG ((DEBUG_ERROR, "%a: Failed to set memory attributes\n", __FUNCTION__));
> > > + goto ErrorSetMemAttr;
> > > + }
> > > }
> > >
> > > //
> > > --
> > > 2.7.4
> > >
next prev parent reply other threads:[~2019-04-24 13:48 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-24 6:51 [edk2-platforms: PATCH v2 0/3] Armada7k8k FVB improvements Marcin Wojtas
2019-04-24 6:51 ` [edk2-platforms: PATCH v2 1/3] Marvell/Drivers: MvFvbDxe: Change Pcd parameters to be 64 bit Marcin Wojtas
2019-04-24 6:51 ` [edk2-platforms: PATCH v2 2/3] Marvell/Armada7k8k: Cleanup PEI phase FV Marcin Wojtas
2019-04-24 6:51 ` [edk2-platforms: PATCH v2 3/3] Marvell/Drivers: Add non-mmio mode to MvFvbDxe Marcin Wojtas
2019-04-24 7:11 ` Ard Biesheuvel
2019-04-24 13:01 ` Ard Biesheuvel
2019-04-24 13:48 ` Marcin Wojtas [this message]
2019-04-24 13:51 ` Ard Biesheuvel
2019-04-24 14:04 ` Marcin Wojtas
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='CAPv3WKfCFPMjX=TRRW+q=LiEqSiU7EKJYZ4Y9YypOVg7sGZGwg@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