From 5fee574a515cef15bf52ed49e1569e9f42e7a49c Mon Sep 17 00:00:00 2001 From: Mikhail Krichanov Date: Tue, 22 Oct 2024 13:18:11 +0300 Subject: [PATCH] ArmPkg: Disabled UserSpace by default to fix CI, as WinPE and Linux EFI stub can not boot in EL2&0 translation regime. --- ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuLibCore.c | 13 +++++++++++-- ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf | 5 +++++ ArmPkg/Library/ArmMmuLib/ArmMmuPeiLib.inf | 5 +++++ ArmVirtPkg/ArmVirt.dsc.inc | 2 +- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuLibCore.c b/ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuLibCore.c index 3f89ad4816..4d88bf6064 100644 --- a/ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuLibCore.c +++ b/ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuLibCore.c @@ -20,6 +20,8 @@ #include #include #include +#include + #include "ArmMmuLibInternal.h" STATIC ARM_REPLACE_LIVE_TRANSLATION_ENTRY mReplaceLiveEntryFunc = ArmReplaceLiveTranslationEntry; @@ -489,7 +491,9 @@ GcdAttributeToPageAttribute ( PageAttributes |= TT_AP_RW_RW; } } else { - PageAttributes |= TT_UXN_MASK; + if (PcdGetBool (PcdEnableUserSpace) || (ArmReadCurrentEL () == AARCH64_EL1)) { + PageAttributes |= TT_UXN_MASK; + } if ((GcdAttributes & EFI_MEMORY_RO) != 0) { PageAttributes |= TT_AP_NO_RO; @@ -624,7 +628,12 @@ ArmConfigureMmu ( T0SZ = 64 - MaxAddressBits; RootTableEntryCount = GetRootTableEntryCount (T0SZ); - if (ArmReadCurrentEL () == AARCH64_EL2) { + // + // Set TCR that allows us to retrieve T0SZ in the subsequent functions + // + // Ideally we will be running at EL2, but should support EL1 as well. + // UEFI should not run at EL3. + if (PcdGetBool (PcdEnableUserSpace) && (ArmReadCurrentEL () == AARCH64_EL2)) { // // Switch to EL2&0 translation regime. // diff --git a/ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf b/ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf index 510511bd41..babab4dca6 100644 --- a/ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf +++ b/ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf @@ -34,15 +34,20 @@ ArmPkg/ArmPkg.dec EmbeddedPkg/EmbeddedPkg.dec MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec [LibraryClasses] ArmLib CacheMaintenanceLib HobLib MemoryAllocationLib + PcdLib [Guids] gArmMmuReplaceLiveTranslationEntryFuncGuid [Pcd.ARM] gArmTokenSpaceGuid.PcdNormalMemoryNonshareableOverride + +[Pcd] + gEfiMdeModulePkgTokenSpaceGuid.PcdEnableUserSpace ## CONSUMES diff --git a/ArmPkg/Library/ArmMmuLib/ArmMmuPeiLib.inf b/ArmPkg/Library/ArmMmuLib/ArmMmuPeiLib.inf index 37424628aa..be33f6b37a 100644 --- a/ArmPkg/Library/ArmMmuLib/ArmMmuPeiLib.inf +++ b/ArmPkg/Library/ArmMmuLib/ArmMmuPeiLib.inf @@ -26,12 +26,17 @@ ArmPkg/ArmPkg.dec EmbeddedPkg/EmbeddedPkg.dec MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec [LibraryClasses] ArmLib CacheMaintenanceLib HobLib MemoryAllocationLib + PcdLib [Guids] gArmMmuReplaceLiveTranslationEntryFuncGuid + +[Pcd] + gEfiMdeModulePkgTokenSpaceGuid.PcdEnableUserSpace ## CONSUMES diff --git a/ArmVirtPkg/ArmVirt.dsc.inc b/ArmVirtPkg/ArmVirt.dsc.inc index 19a874645a..ab1ca08104 100644 --- a/ArmVirtPkg/ArmVirt.dsc.inc +++ b/ArmVirtPkg/ArmVirt.dsc.inc @@ -382,7 +382,7 @@ gEfiMdeModulePkgTokenSpaceGuid.PcdDxeNxMemoryProtectionPolicy|0xC000000000007FD5 gEfiMdeModulePkgTokenSpaceGuid.PcdCpuStackGuard|TRUE - gEfiMdeModulePkgTokenSpaceGuid.PcdEnableUserSpace|TRUE + gEfiMdeModulePkgTokenSpaceGuid.PcdEnableUserSpace|FALSE gEfiMdeModulePkgTokenSpaceGuid.PcdSerialUseMmio|TRUE [Components.common]