public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
To: Achin Gupta <achin.gupta@arm.com>
Cc: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
	Leif Lindholm <leif.lindholm@linaro.org>,
	nd@arm.com
Subject: Re: [PATCH] ArmPlatformPkg/NorFlashDxe: Change Flash memory attributes before writes
Date: Fri, 20 Jan 2017 11:58:12 +0000	[thread overview]
Message-ID: <CAKv+Gu_XgnXRqR-3_P2AOdmzc+78cJh=+07E1gy8zfSXzxv6OA@mail.gmail.com> (raw)
In-Reply-To: <fea47cc1f665cd657e52c7ac78fcc0de17776a90.1484913233.git.achin.gupta@arm.com>

On 20 January 2017 at 11:54,  <achin.gupta@arm.com> wrote:
> From: Achin Gupta <achin.gupta@arm.com>
>
> In NorFlashFvbInitialize() if a valid Firmware Volume header is not found at the
> start of NOR Flash, the Flash memory is written before it has been remapped with
> EFI_MEMORY_UC attributes to allow write commands. Since the flash memory was
> previously mapped with Normal and possibly cacheable memory attributes, the
> Flash commands might never reach the device.
>
> This patch fixes this issue by remapping the Flash memory region with correct
> memory attributes before writing to it.
>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Achin Gupta <achin.gupta@arm.com>

Thanks Achin!

Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

Pushed as 90d1f671cdad


> ---
>  .../Drivers/NorFlashDxe/NorFlashFvbDxe.c           | 45 +++++++++++-----------
>  1 file changed, 23 insertions(+), 22 deletions(-)
>
> diff --git a/ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashFvbDxe.c b/ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashFvbDxe.c
> index 42be5c2..12a8612 100644
> --- a/ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashFvbDxe.c
> +++ b/ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashFvbDxe.c
> @@ -719,6 +719,29 @@ NorFlashFvbInitialize (
>    UINTN       RuntimeMmioRegionSize;
>
>    DEBUG((DEBUG_BLKIO,"NorFlashFvbInitialize\n"));
> +  ASSERT((Instance != NULL));
> +
> +  //
> +  // Declare the Non-Volatile storage as EFI_MEMORY_RUNTIME
> +  //
> +
> +  // Note: all the NOR Flash region needs to be reserved into the UEFI Runtime memory;
> +  //       even if we only use the small block region at the top of the NOR Flash.
> +  //       The reason is when the NOR Flash memory is set into program mode, the command
> +  //       is written as the base of the flash region (ie: Instance->DeviceBaseAddress)
> +  RuntimeMmioRegionSize = (Instance->RegionBaseAddress - Instance->DeviceBaseAddress) + Instance->Size;
> +
> +  Status = gDS->AddMemorySpace (
> +      EfiGcdMemoryTypeMemoryMappedIo,
> +      Instance->DeviceBaseAddress, RuntimeMmioRegionSize,
> +      EFI_MEMORY_UC | EFI_MEMORY_RUNTIME
> +      );
> +  ASSERT_EFI_ERROR (Status);
> +
> +  Status = gDS->SetMemorySpaceAttributes (
> +      Instance->DeviceBaseAddress, RuntimeMmioRegionSize,
> +      EFI_MEMORY_UC | EFI_MEMORY_RUNTIME);
> +  ASSERT_EFI_ERROR (Status);
>
>    Instance->Initialized = TRUE;
>    mFlashNvStorageVariableBase = FixedPcdGet32 (PcdFlashNvStorageVariableBase);
> @@ -757,28 +780,6 @@ NorFlashFvbInitialize (
>    }
>
>    //
> -  // Declare the Non-Volatile storage as EFI_MEMORY_RUNTIME
> -  //
> -
> -  // Note: all the NOR Flash region needs to be reserved into the UEFI Runtime memory;
> -  //       even if we only use the small block region at the top of the NOR Flash.
> -  //       The reason is when the NOR Flash memory is set into program mode, the command
> -  //       is written as the base of the flash region (ie: Instance->DeviceBaseAddress)
> -  RuntimeMmioRegionSize = (Instance->RegionBaseAddress - Instance->DeviceBaseAddress) + Instance->Size;
> -
> -  Status = gDS->AddMemorySpace (
> -      EfiGcdMemoryTypeMemoryMappedIo,
> -      Instance->DeviceBaseAddress, RuntimeMmioRegionSize,
> -      EFI_MEMORY_UC | EFI_MEMORY_RUNTIME
> -      );
> -  ASSERT_EFI_ERROR (Status);
> -
> -  Status = gDS->SetMemorySpaceAttributes (
> -      Instance->DeviceBaseAddress, RuntimeMmioRegionSize,
> -      EFI_MEMORY_UC | EFI_MEMORY_RUNTIME);
> -  ASSERT_EFI_ERROR (Status);
> -
> -  //
>    // Register for the virtual address change event
>    //
>    Status = gBS->CreateEventEx (
> --
> 1.9.1
>


      reply	other threads:[~2017-01-20 11:58 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-20 11:54 [PATCH] ArmPlatformPkg/NorFlashDxe: Change Flash memory attributes before writes achin.gupta
2017-01-20 11:58 ` Ard Biesheuvel [this message]

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+Gu_XgnXRqR-3_P2AOdmzc+78cJh=+07E1gy8zfSXzxv6OA@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