From 52bb666c3442904d74bd6dcb5eb66c3275b475e6 Mon Sep 17 00:00:00 2001
From: Savva Mitrofanov <savvamtr@gmail.com>
Date: Wed, 5 Apr 2023 14:47:44 +0600
Subject: [PATCH] ArmVirtPkg/ArmVirtQemu: Disable
 PcdPrePiProduceMemoryTypeInformationHob for ARM

The PcdPrePiProduceMemoryTypeInformationHob on ARM breaks Linux efistub
boot. The efistub for arm32 uncompresses Linux kernel into memory ranges
which occupied by DXE-phase drivers which leads to
'permission denied'-error during page write. So as a temporary solution
we use PcdPrePiProduceMemoryTypeInformationHob only for AARCH64

Signed-off-by: Savva Mitrofanov <savvamtr@gmail.com>
---
 ArmVirtPkg/ArmVirt.dsc.inc | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/ArmVirtPkg/ArmVirt.dsc.inc b/ArmVirtPkg/ArmVirt.dsc.inc
index 027fc74ae7..2e1ec48923 100644
--- a/ArmVirtPkg/ArmVirt.dsc.inc
+++ b/ArmVirtPkg/ArmVirt.dsc.inc
@@ -278,14 +278,22 @@
 [PcdsFeatureFlag.common]
   gEfiMdeModulePkgTokenSpaceGuid.PcdHiiOsRuntimeSupport|FALSE
 
-  gEmbeddedTokenSpaceGuid.PcdPrePiProduceMemoryTypeInformationHob|TRUE
-
 [PcdsFeatureFlag.AARCH64]
   #
   # Activate AcpiSdtProtocol
   #
   gEfiMdeModulePkgTokenSpaceGuid.PcdInstallAcpiSdtProtocol|TRUE
 
+  #
+  # FIXME: The PcdPrePiProduceMemoryTypeInformationHob on ARM breaks Linux efistub boot.
+  # The efistub for arm32 uncompresses Linux kernel into memory ranges which occupied
+  # by DXE-phase drivers which leads to 'permission denied'-error during page write. 
+  #
+  # So as a temporary solution we use PcdPrePiProduceMemoryTypeInformationHob 
+  # only for AARCH64
+  #
+  gEmbeddedTokenSpaceGuid.PcdPrePiProduceMemoryTypeInformationHob|TRUE
+
 [PcdsFixedAtBuild.common]
 !ifdef $(FIRMWARE_VER)
   gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString|L"$(FIRMWARE_VER)"