public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Sami Mujawar" <sami.mujawar@arm.com>
To: <devel@edk2.groups.io>
Cc: Sami Mujawar <sami.mujawar@arm.com>, <ard.biesheuvel@arm.com>,
	<leif@nuviainc.com>, <Alexandru.Elisei@arm.com>,
	<Andre.Przywara@arm.com>, <Matteo.Carlini@arm.com>,
	<Laura.Moretta@arm.com>, <nd@arm.com>
Subject: [PATCH v1 04/11] ArmPlatformPkg: Use MMIO to read device memory
Date: Thu, 14 May 2020 09:40:12 +0100	[thread overview]
Message-ID: <20200514084019.71368-5-sami.mujawar@arm.com> (raw)
In-Reply-To: <20200514084019.71368-1-sami.mujawar@arm.com>

NorFlashDxe must use aligned MMIO accesses to
read data from flash as this is device memory.

The AlignedCopyMem() was used to copy the flash
data which prevented unaligned access to device
memory. However, the compiler could optimize the
code to generate pre/post indexed or LDP
operations. This is a problem for guest/virtual
firmware as the hypervisor code cannot get the
syndrome information for the trapped accesses.

Similarly, the GUIDS FwVolHeader->FileSystemGuid
and VariableStoreHeader->Signature in
ValidateFvHeader() are compared using
CompareGuid(). These GUIDs point to flash data
(which is device memory) and therefore need
aligned MMIO accesses.

To address the above issues, BaseMemoryLibMmio
library has been introduced to perform aligned
MMIO accesses.

This patch removes the usage of AlignedCopyMem()
and replaces it with CopyMem() with an expectation
that the BaseMemoryLibMmio will be linked
with NorFlashDxe.

Signed-off-by: Sami Mujawar <sami.mujawar@arm.com>
---
 ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe.c | 65 +-------------------
 1 file changed, 3 insertions(+), 62 deletions(-)

diff --git a/ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe.c b/ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe.c
index d9e196cbf18c32fe5306cc3c0674a7b5798a9191..f9890de8244d37e0e860fd183bb216ff7d1e7035 100644
--- a/ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe.c
+++ b/ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe.c
@@ -1,6 +1,6 @@
 /** @file  NorFlashDxe.c
 
-  Copyright (c) 2011 - 2014, ARM Ltd. All rights reserved.<BR>
+  Copyright (c) 2011 - 2020, ARM Ltd. All rights reserved.<BR>
 
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
@@ -735,65 +735,6 @@ NorFlashWriteBlocks (
   return Status;
 }
 
-#define BOTH_ALIGNED(a, b, align) ((((UINTN)(a) | (UINTN)(b)) & ((align) - 1)) == 0)
-
-/**
-  Copy Length bytes from Source to Destination, using aligned accesses only.
-  Note that this implementation uses memcpy() semantics rather then memmove()
-  semantics, i.e., SourceBuffer and DestinationBuffer should not overlap.
-
-  @param  DestinationBuffer The target of the copy request.
-  @param  SourceBuffer      The place to copy from.
-  @param  Length            The number of bytes to copy.
-
-  @return Destination
-
-**/
-STATIC
-VOID *
-AlignedCopyMem (
-  OUT     VOID                      *DestinationBuffer,
-  IN      CONST VOID                *SourceBuffer,
-  IN      UINTN                     Length
-  )
-{
-  UINT8             *Destination8;
-  CONST UINT8       *Source8;
-  UINT32            *Destination32;
-  CONST UINT32      *Source32;
-  UINT64            *Destination64;
-  CONST UINT64      *Source64;
-
-  if (BOTH_ALIGNED(DestinationBuffer, SourceBuffer, 8) && Length >= 8) {
-    Destination64 = DestinationBuffer;
-    Source64 = SourceBuffer;
-    while (Length >= 8) {
-      *Destination64++ = *Source64++;
-      Length -= 8;
-    }
-
-    Destination8 = (UINT8 *)Destination64;
-    Source8 = (CONST UINT8 *)Source64;
-  } else if (BOTH_ALIGNED(DestinationBuffer, SourceBuffer, 4) && Length >= 4) {
-    Destination32 = DestinationBuffer;
-    Source32 = SourceBuffer;
-    while (Length >= 4) {
-      *Destination32++ = *Source32++;
-      Length -= 4;
-    }
-
-    Destination8 = (UINT8 *)Destination32;
-    Source8 = (CONST UINT8 *)Source32;
-  } else {
-    Destination8 = DestinationBuffer;
-    Source8 = SourceBuffer;
-  }
-  while (Length-- != 0) {
-    *Destination8++ = *Source8++;
-  }
-  return DestinationBuffer;
-}
-
 EFI_STATUS
 NorFlashReadBlocks (
   IN NOR_FLASH_INSTANCE   *Instance,
@@ -841,7 +782,7 @@ NorFlashReadBlocks (
   SEND_NOR_COMMAND (Instance->DeviceBaseAddress, 0, P30_CMD_READ_ARRAY);
 
   // Readout the data
-  AlignedCopyMem (Buffer, (VOID *)StartAddress, BufferSizeInBytes);
+  CopyMem (Buffer, (VOID *)StartAddress, BufferSizeInBytes);
 
   return EFI_SUCCESS;
 }
@@ -882,7 +823,7 @@ NorFlashRead (
   SEND_NOR_COMMAND (Instance->DeviceBaseAddress, 0, P30_CMD_READ_ARRAY);
 
   // Readout the data
-  AlignedCopyMem (Buffer, (VOID *)(StartAddress + Offset), BufferSizeInBytes);
+  CopyMem (Buffer, (VOID *)(StartAddress + Offset), BufferSizeInBytes);
 
   return EFI_SUCCESS;
 }
-- 
'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)'


  parent reply	other threads:[~2020-05-14  8:44 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-14  8:40 [PATCH v2 00/11] Kvmtool guest firmware support for Arm Sami Mujawar
2020-05-14  8:40 ` [PATCH v2 01/11] PcAtChipsetPkg: Add MMIO Support to RTC driver Sami Mujawar
2020-05-14  9:24   ` Ard Biesheuvel
2020-05-15 10:50   ` André Przywara
2020-05-27  0:37     ` [edk2-devel] " Guomin Jiang
2020-05-14  8:40 ` [PATCH v1 02/11] MdePkg: Add NULL implementation for PCILib Sami Mujawar
2020-05-14  9:23   ` Ard Biesheuvel
2020-05-14 16:21   ` Michael D Kinney
2020-05-14  8:40 ` [PATCH v1 03/11] MdePkg: Base Memory Lib instance using MMIO Sami Mujawar
2020-05-14  9:22   ` Ard Biesheuvel
2020-05-14 17:21     ` Ard Biesheuvel
2020-05-14 16:33   ` [edk2-devel] " Michael D Kinney
2020-05-14  8:40 ` Sami Mujawar [this message]
2020-05-14  8:40 ` [PATCH v1 05/11] ArmPlatformPkg: Dynamic flash variable base Sami Mujawar
2020-05-14  9:24   ` Ard Biesheuvel
2020-05-27 11:48   ` [edk2-devel] " Philippe Mathieu-Daudé
2020-05-14  8:40 ` [PATCH v2 06/11] ArmVirtPkg: Add kvmtool platform driver Sami Mujawar
2020-05-14  9:29   ` Ard Biesheuvel
2020-05-14 12:12     ` [edk2-devel] " Laszlo Ersek
2020-05-14 12:17       ` Ard Biesheuvel
2020-05-14 16:05         ` Laszlo Ersek
2020-05-14 17:25           ` Ard Biesheuvel
2020-05-15  7:28             ` Laszlo Ersek
2020-05-14 12:20       ` Laszlo Ersek
2020-05-14  8:40 ` [PATCH v1 07/11] ArmVirtPkg: kvmtool platform memory map Sami Mujawar
2020-05-14  9:30   ` Ard Biesheuvel
2020-05-14 12:15   ` [edk2-devel] " Laszlo Ersek
2020-05-14  8:40 ` [PATCH v1 08/11] ArmVirtPkg: Add Kvmtool NOR flash lib Sami Mujawar
2020-05-14  9:32   ` Ard Biesheuvel
2020-05-14 12:17     ` [edk2-devel] " Laszlo Ersek
2020-05-27 11:59   ` Philippe Mathieu-Daudé
2020-06-04  6:30     ` Philippe Mathieu-Daudé
2020-06-04 15:00       ` Sami Mujawar
2020-05-14  8:40 ` [PATCH v2 09/11] ArmVirtPkg: Support for kvmtool emulated platform Sami Mujawar
2020-05-14  9:56   ` Ard Biesheuvel
2020-05-14 12:24   ` [edk2-devel] " Laszlo Ersek
2020-05-14  8:40 ` [PATCH v1 10/11] ArmVirtPkg: Link NorFlashDxe with BaseMemoryLibMmio Sami Mujawar
2020-05-14 12:28   ` [edk2-devel] " Laszlo Ersek
2020-05-14  8:40 ` [PATCH v1 11/11] Maintainer.txt: Add Kvmtool emulated plat maintainer Sami Mujawar
2020-05-14 12:31   ` [edk2-devel] " 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=20200514084019.71368-5-sami.mujawar@arm.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