Reviewed-By: Olivier Martin <olivier.mar...@arm.com>

-----Original Message-----
From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org]
Sent: 08 April 2015 08:11
To: edk2-devel@lists.sourceforge.net; ler...@redhat.com; Olivier Martin
Cc: roy.fr...@linaro.org; leif.lindh...@linaro.org; Ard Biesheuvel
Subject: [PATCH v3 4/5] ArmVirtualizationPkg: invalidate PEI memory region by VA

This updates ArmVirtualizationMemoryInitPeiLib so that the PEI memory region, 
i.e., the region that is used both before and after the MMU and caches are 
enabled, is invalidated by virtual address before enabling the MMU.

This prevents issues where data we modified with the caches and MMU off may be 
shadowed by clean cachelines in system caches or in lower level caches on other 
CPUs, resulting in the this data to become invisible once we turn the MMU and 
caches on.

Also reduce the size of the region to 16 MB (from 64 MB), to reduce the 
potential performance hit from invalidating the entire region by virtual 
address.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheu...@linaro.org>
---
 ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.dsc                  
                                     |  4 ++--
 ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationXen.dsc                   
                                     |  4 ++--
 
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.c
   | 10 ++++++++++
 
ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.inf
 |  1 +
 4 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.dsc 
b/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.dsc
index cad7353442f7..0b9a46f0197f 100644
--- a/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.dsc
+++ b/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.dsc
@@ -103,8 +103,8 @@
   gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase|0x4007c000
   gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize|0x4000

-  # Size of the region used by UEFI in permanent memory (Reserved 64MB)
-  gArmPlatformTokenSpaceGuid.PcdSystemMemoryUefiRegionSize|0x04000000
+  # Size of the region used by UEFI in permanent memory (Reserved 16MB)
+  gArmPlatformTokenSpaceGuid.PcdSystemMemoryUefiRegionSize|0x01000000

   #
   # ARM Pcds
diff --git a/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationXen.dsc 
b/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationXen.dsc
index d01b3e9c8494..71869845a857 100644
--- a/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationXen.dsc
+++ b/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationXen.dsc
@@ -89,8 +89,8 @@

   gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize|0x4000

-  # Size of the region used by UEFI in permanent memory (Reserved 64MB)
-  gArmPlatformTokenSpaceGuid.PcdSystemMemoryUefiRegionSize|0x04000000
+  # Size of the region used by UEFI in permanent memory (Reserved 16MB)
+  gArmPlatformTokenSpaceGuid.PcdSystemMemoryUefiRegionSize|0x01000000

   #
   # ARM Virtual Architectural Timer
diff --git 
a/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.c
 
b/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.c
index 5f6cd059c47f..8ce63b4596e2 100644
--- 
a/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.c
+++ b/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemor
+++ yInitPeiLib/ArmVirtualizationMemoryInitPeiLib.c
@@ -20,6 +20,7 @@
 #include <Library/HobLib.h>
 #include <Library/MemoryAllocationLib.h>  #include <Library/PcdLib.h>
+#include <Library/CacheMaintenanceLib.h>

 VOID
 BuildMemoryTypeInformationHob (
@@ -79,6 +80,15 @@ MemoryPeim (
       PcdGet64 (PcdSystemMemorySize)
   );

+  //
+  // When running under virtualization, the PI/UEFI memory region may
+ be  // clean but not invalidated in system caches or in lower level
+ caches  // on other CPUs. So invalidate the region by virtual address,
+ to ensure  // that the contents we put there with the caches and MMU
+ off will still  // be visible after turning them on.
+  //
+  InvalidateDataCacheRange ((VOID*)(UINTN)UefiMemoryBase,
+ UefiMemorySize);
+
   // Build Memory Allocation Hob
   InitMmu ();

diff --git 
a/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.inf
 
b/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.inf
index fcdae06de7c2..b8a19c993d91 100644
--- 
a/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.inf
+++ b/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemor
+++ yInitPeiLib/ArmVirtualizationMemoryInitPeiLib.inf
@@ -35,6 +35,7 @@
   HobLib
   ArmLib
   ArmPlatformLib
+  CacheMaintenanceLib

 [Guids]
   gEfiMemoryTypeInformationGuid
--
1.8.3.2


-- IMPORTANT NOTICE: The contents of this email and any attachments are 
confidential and may also be privileged. If you are not the intended recipient, 
please notify the sender immediately and do not disclose the contents to any 
other person, use it for any purpose, or store or copy the information in any 
medium.  Thank you.

ARM Limited, Registered office 110 Fulbourn Road, Cambridge CB1 9NJ, Registered 
in England & Wales, Company No:  2557590
ARM Holdings plc, Registered office 110 Fulbourn Road, Cambridge CB1 9NJ, 
Registered in England & Wales, Company No:  2548782


------------------------------------------------------------------------------
BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT
Develop your own process in accordance with the BPMN 2 standard
Learn Process modeling best practices with Bonita BPM through live exercises
http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_
source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to