Some MMU manipulation is dependent on the presence of the multiprocessing
extensions. So add a function that returns this information.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheu...@linaro.org>
---
 ArmPkg/Library/ArmLib/ArmV7/ArmLibSupportV7.S   | 7 +++++++
 ArmPkg/Library/ArmLib/ArmV7/ArmLibSupportV7.asm | 7 +++++++
 ArmPkg/Library/ArmLib/ArmV7/ArmV7Lib.h          | 6 ++++++
 3 files changed, 20 insertions(+)

diff --git a/ArmPkg/Library/ArmLib/ArmV7/ArmLibSupportV7.S 
b/ArmPkg/Library/ArmLib/ArmV7/ArmLibSupportV7.S
index b94239f785c7..d9e3c86b6907 100644
--- a/ArmPkg/Library/ArmLib/ArmV7/ArmLibSupportV7.S
+++ b/ArmPkg/Library/ArmLib/ArmV7/ArmLibSupportV7.S
@@ -19,6 +19,7 @@
 .align 2
 
 GCC_ASM_EXPORT(ArmIsMpCore)
+GCC_ASM_EXPORT(ArmHasMpExtensions)
 GCC_ASM_EXPORT(ArmEnableAsynchronousAbort)
 GCC_ASM_EXPORT(ArmDisableAsynchronousAbort)
 GCC_ASM_EXPORT(ArmEnableIrq)
@@ -44,6 +45,12 @@ ASM_PFX(ArmIsMpCore):
   movne   R0, #0
   bx      LR
 
+ASM_PFX(ArmHasMpExtensions):
+  mrc     p15,0,R0,c0,c0,5
+  // Get Multiprocessing extension (bit31)
+  lsr     R0, R0, #31
+  bx      LR
+
 ASM_PFX(ArmEnableAsynchronousAbort):
   cpsie   a
   isb
diff --git a/ArmPkg/Library/ArmLib/ArmV7/ArmLibSupportV7.asm 
b/ArmPkg/Library/ArmLib/ArmV7/ArmLibSupportV7.asm
index 82daa3ce1698..817923225353 100644
--- a/ArmPkg/Library/ArmLib/ArmV7/ArmLibSupportV7.asm
+++ b/ArmPkg/Library/ArmLib/ArmV7/ArmLibSupportV7.asm
@@ -15,6 +15,7 @@
 
 
     EXPORT  ArmIsMpCore
+    EXPORT  ArmHasMpExtensions
     EXPORT  ArmEnableAsynchronousAbort
     EXPORT  ArmDisableAsynchronousAbort
     EXPORT  ArmEnableIrq
@@ -43,6 +44,12 @@ ArmIsMpCore
   movne   R0, #0
   bx      LR
 
+ArmHasMpExtensions
+  mrc     p15,0,R0,c0,c0,5
+  // Get Multiprocessing extension (bit31)
+  lsr     R0, R0, #31
+  bx      LR
+
 ArmEnableAsynchronousAbort
   cpsie   a
   isb
diff --git a/ArmPkg/Library/ArmLib/ArmV7/ArmV7Lib.h 
b/ArmPkg/Library/ArmLib/ArmV7/ArmV7Lib.h
index df770cf7d798..e138613ca548 100644
--- a/ArmPkg/Library/ArmLib/ArmV7/ArmV7Lib.h
+++ b/ArmPkg/Library/ArmLib/ArmV7/ArmV7Lib.h
@@ -28,5 +28,11 @@ ArmReadIdMmfr0 (
   VOID
   );
 
+BOOLEAN
+EFIAPI
+ArmHasMpExtensions (
+  VOID
+  );
+
 #endif // __ARM_V7_LIB_H__
 
-- 
1.9.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to