Blame 0056-OvmfPkg-QemuFlashFvbServicesRuntimeDxe-Do-not-expose.patch

Paolo Bonzini 83f3ca
From 3b3d016b7b867d7e4782af9a6b54e110d155a1b3 Mon Sep 17 00:00:00 2001
Paolo Bonzini 83f3ca
From: Brijesh Singh <brijesh.singh@amd.com>
Paolo Bonzini 83f3ca
Date: Fri, 6 Jul 2018 10:00:41 -0500
Paolo Bonzini 83f3ca
Subject: [PATCH] OvmfPkg/QemuFlashFvbServicesRuntimeDxe: Do not expose
Paolo Bonzini 83f3ca
 MMIO in SMM build
Paolo Bonzini 83f3ca
Paolo Bonzini 83f3ca
In the SMM build, only an SMM driver is using the address range hence we
Paolo Bonzini 83f3ca
do not need to expose the flash MMIO range in EFI runtime mapping.
Paolo Bonzini 83f3ca
Paolo Bonzini 83f3ca
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Paolo Bonzini 83f3ca
Cc: Anthony Perard <anthony.perard@citrix.com>
Paolo Bonzini 83f3ca
Cc: Julien Grall <julien.grall@linaro.org>
Paolo Bonzini 83f3ca
Cc: Justen Jordan L <jordan.l.justen@intel.com>
Paolo Bonzini 83f3ca
Cc: Laszlo Ersek <lersek@redhat.com>
Paolo Bonzini 83f3ca
Contributed-under: TianoCore Contribution Agreement 1.1
Paolo Bonzini 83f3ca
Signed-off-by: Brijesh Singh <brijesh.singh@amd.com>
Paolo Bonzini 83f3ca
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Paolo Bonzini 83f3ca
Regression-tested-by: Laszlo Ersek <lersek@redhat.com>
Paolo Bonzini 83f3ca
---
Paolo Bonzini 83f3ca
 .../FwBlockService.h                          |  7 +++
Paolo Bonzini 83f3ca
 .../FwBlockService.c                          | 50 -------------------
Paolo Bonzini 83f3ca
 .../FwBlockServiceDxe.c                       | 50 +++++++++++++++++++
Paolo Bonzini 83f3ca
 .../FwBlockServiceSmm.c                       | 13 +++++
Paolo Bonzini 83f3ca
 4 files changed, 70 insertions(+), 50 deletions(-)
Paolo Bonzini 83f3ca
Paolo Bonzini 83f3ca
diff --git a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.h b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.h
Paolo Bonzini 83f3ca
index 1f9287b087..178f578d49 100644
Paolo Bonzini 83f3ca
--- a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.h
Paolo Bonzini 83f3ca
+++ b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.h
Paolo Bonzini 83f3ca
@@ -189,4 +189,11 @@ VOID
Paolo Bonzini 83f3ca
 InstallVirtualAddressChangeHandler (
Paolo Bonzini 83f3ca
   VOID
Paolo Bonzini 83f3ca
   );
Paolo Bonzini 83f3ca
+
Paolo Bonzini 83f3ca
+EFI_STATUS
Paolo Bonzini 83f3ca
+MarkIoMemoryRangeForRuntimeAccess (
Paolo Bonzini 83f3ca
+  IN EFI_PHYSICAL_ADDRESS   BaseAddress,
Paolo Bonzini 83f3ca
+  IN UINTN                  Length
Paolo Bonzini 83f3ca
+  );
Paolo Bonzini 83f3ca
+
Paolo Bonzini 83f3ca
 #endif
Paolo Bonzini 83f3ca
diff --git a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.c b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.c
Paolo Bonzini 83f3ca
index b3f428bb42..eec8b1b1ae 100644
Paolo Bonzini 83f3ca
--- a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.c
Paolo Bonzini 83f3ca
+++ b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.c
Paolo Bonzini 83f3ca
@@ -829,56 +829,6 @@ ValidateFvHeader (
Paolo Bonzini 83f3ca
   return EFI_SUCCESS;
Paolo Bonzini 83f3ca
 }
Paolo Bonzini 83f3ca
 
Paolo Bonzini 83f3ca
-STATIC
Paolo Bonzini 83f3ca
-EFI_STATUS
Paolo Bonzini 83f3ca
-MarkIoMemoryRangeForRuntimeAccess (
Paolo Bonzini 83f3ca
-  EFI_PHYSICAL_ADDRESS                BaseAddress,
Paolo Bonzini 83f3ca
-  UINTN                               Length
Paolo Bonzini 83f3ca
-  )
Paolo Bonzini 83f3ca
-{
Paolo Bonzini 83f3ca
-  EFI_STATUS                          Status;
Paolo Bonzini 83f3ca
-  EFI_GCD_MEMORY_SPACE_DESCRIPTOR     GcdDescriptor;
Paolo Bonzini 83f3ca
-
Paolo Bonzini 83f3ca
-  //
Paolo Bonzini 83f3ca
-  // Mark flash region as runtime memory
Paolo Bonzini 83f3ca
-  //
Paolo Bonzini 83f3ca
-  Status = gDS->RemoveMemorySpace (
Paolo Bonzini 83f3ca
-                  BaseAddress,
Paolo Bonzini 83f3ca
-                  Length
Paolo Bonzini 83f3ca
-                  );
Paolo Bonzini 83f3ca
-
Paolo Bonzini 83f3ca
-  Status = gDS->AddMemorySpace (
Paolo Bonzini 83f3ca
-                  EfiGcdMemoryTypeMemoryMappedIo,
Paolo Bonzini 83f3ca
-                  BaseAddress,
Paolo Bonzini 83f3ca
-                  Length,
Paolo Bonzini 83f3ca
-                  EFI_MEMORY_UC | EFI_MEMORY_RUNTIME
Paolo Bonzini 83f3ca
-                  );
Paolo Bonzini 83f3ca
-  ASSERT_EFI_ERROR (Status);
Paolo Bonzini 83f3ca
-
Paolo Bonzini 83f3ca
-  Status = gDS->AllocateMemorySpace (
Paolo Bonzini 83f3ca
-                  EfiGcdAllocateAddress,
Paolo Bonzini 83f3ca
-                  EfiGcdMemoryTypeMemoryMappedIo,
Paolo Bonzini 83f3ca
-                  0,
Paolo Bonzini 83f3ca
-                  Length,
Paolo Bonzini 83f3ca
-                  &BaseAddress,
Paolo Bonzini 83f3ca
-                  gImageHandle,
Paolo Bonzini 83f3ca
-                  NULL
Paolo Bonzini 83f3ca
-                  );
Paolo Bonzini 83f3ca
-  ASSERT_EFI_ERROR (Status);
Paolo Bonzini 83f3ca
-
Paolo Bonzini 83f3ca
-  Status = gDS->GetMemorySpaceDescriptor (BaseAddress, &GcdDescriptor);
Paolo Bonzini 83f3ca
-  ASSERT_EFI_ERROR (Status);
Paolo Bonzini 83f3ca
-
Paolo Bonzini 83f3ca
-  Status = gDS->SetMemorySpaceAttributes (
Paolo Bonzini 83f3ca
-                  BaseAddress,
Paolo Bonzini 83f3ca
-                  Length,
Paolo Bonzini 83f3ca
-                  GcdDescriptor.Attributes | EFI_MEMORY_RUNTIME
Paolo Bonzini 83f3ca
-                  );
Paolo Bonzini 83f3ca
-  ASSERT_EFI_ERROR (Status);
Paolo Bonzini 83f3ca
-
Paolo Bonzini 83f3ca
-  return Status;
Paolo Bonzini 83f3ca
-}
Paolo Bonzini 83f3ca
-
Paolo Bonzini 83f3ca
 STATIC
Paolo Bonzini 83f3ca
 EFI_STATUS
Paolo Bonzini 83f3ca
 InitializeVariableFvHeader (
Paolo Bonzini 83f3ca
diff --git a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockServiceDxe.c b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockServiceDxe.c
Paolo Bonzini 83f3ca
index 63b308658e..37deece363 100644
Paolo Bonzini 83f3ca
--- a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockServiceDxe.c
Paolo Bonzini 83f3ca
+++ b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockServiceDxe.c
Paolo Bonzini 83f3ca
@@ -17,6 +17,7 @@
Paolo Bonzini 83f3ca
 #include <Guid/EventGroup.h>
Paolo Bonzini 83f3ca
 #include <Library/DebugLib.h>
Paolo Bonzini 83f3ca
 #include <Library/DevicePathLib.h>
Paolo Bonzini 83f3ca
+#include <Library/DxeServicesTableLib.h>
Paolo Bonzini 83f3ca
 #include <Library/PcdLib.h>
Paolo Bonzini 83f3ca
 #include <Library/UefiBootServicesTableLib.h>
Paolo Bonzini 83f3ca
 #include <Library/UefiRuntimeLib.h>
Paolo Bonzini 83f3ca
@@ -155,3 +156,52 @@ InstallVirtualAddressChangeHandler (
Paolo Bonzini 83f3ca
                   );
Paolo Bonzini 83f3ca
   ASSERT_EFI_ERROR (Status);
Paolo Bonzini 83f3ca
 }
Paolo Bonzini 83f3ca
+
Paolo Bonzini 83f3ca
+EFI_STATUS
Paolo Bonzini 83f3ca
+MarkIoMemoryRangeForRuntimeAccess (
Paolo Bonzini 83f3ca
+  IN EFI_PHYSICAL_ADDRESS                BaseAddress,
Paolo Bonzini 83f3ca
+  IN UINTN                               Length
Paolo Bonzini 83f3ca
+  )
Paolo Bonzini 83f3ca
+{
Paolo Bonzini 83f3ca
+  EFI_STATUS                          Status;
Paolo Bonzini 83f3ca
+  EFI_GCD_MEMORY_SPACE_DESCRIPTOR     GcdDescriptor;
Paolo Bonzini 83f3ca
+
Paolo Bonzini 83f3ca
+  //
Paolo Bonzini 83f3ca
+  // Mark flash region as runtime memory
Paolo Bonzini 83f3ca
+  //
Paolo Bonzini 83f3ca
+  Status = gDS->RemoveMemorySpace (
Paolo Bonzini 83f3ca
+                  BaseAddress,
Paolo Bonzini 83f3ca
+                  Length
Paolo Bonzini 83f3ca
+                  );
Paolo Bonzini 83f3ca
+
Paolo Bonzini 83f3ca
+  Status = gDS->AddMemorySpace (
Paolo Bonzini 83f3ca
+                  EfiGcdMemoryTypeMemoryMappedIo,
Paolo Bonzini 83f3ca
+                  BaseAddress,
Paolo Bonzini 83f3ca
+                  Length,
Paolo Bonzini 83f3ca
+                  EFI_MEMORY_UC | EFI_MEMORY_RUNTIME
Paolo Bonzini 83f3ca
+                  );
Paolo Bonzini 83f3ca
+  ASSERT_EFI_ERROR (Status);
Paolo Bonzini 83f3ca
+
Paolo Bonzini 83f3ca
+  Status = gDS->AllocateMemorySpace (
Paolo Bonzini 83f3ca
+                  EfiGcdAllocateAddress,
Paolo Bonzini 83f3ca
+                  EfiGcdMemoryTypeMemoryMappedIo,
Paolo Bonzini 83f3ca
+                  0,
Paolo Bonzini 83f3ca
+                  Length,
Paolo Bonzini 83f3ca
+                  &BaseAddress,
Paolo Bonzini 83f3ca
+                  gImageHandle,
Paolo Bonzini 83f3ca
+                  NULL
Paolo Bonzini 83f3ca
+                  );
Paolo Bonzini 83f3ca
+  ASSERT_EFI_ERROR (Status);
Paolo Bonzini 83f3ca
+
Paolo Bonzini 83f3ca
+  Status = gDS->GetMemorySpaceDescriptor (BaseAddress, &GcdDescriptor);
Paolo Bonzini 83f3ca
+  ASSERT_EFI_ERROR (Status);
Paolo Bonzini 83f3ca
+
Paolo Bonzini 83f3ca
+  Status = gDS->SetMemorySpaceAttributes (
Paolo Bonzini 83f3ca
+                  BaseAddress,
Paolo Bonzini 83f3ca
+                  Length,
Paolo Bonzini 83f3ca
+                  GcdDescriptor.Attributes | EFI_MEMORY_RUNTIME
Paolo Bonzini 83f3ca
+                  );
Paolo Bonzini 83f3ca
+  ASSERT_EFI_ERROR (Status);
Paolo Bonzini 83f3ca
+
Paolo Bonzini 83f3ca
+  return Status;
Paolo Bonzini 83f3ca
+}
Paolo Bonzini 83f3ca
diff --git a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockServiceSmm.c b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockServiceSmm.c
Paolo Bonzini 83f3ca
index e0617f2503..af08fa69d4 100644
Paolo Bonzini 83f3ca
--- a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockServiceSmm.c
Paolo Bonzini 83f3ca
+++ b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockServiceSmm.c
Paolo Bonzini 83f3ca
@@ -67,3 +67,16 @@ InstallVirtualAddressChangeHandler (
Paolo Bonzini 83f3ca
   // Nothing.
Paolo Bonzini 83f3ca
   //
Paolo Bonzini 83f3ca
 }
Paolo Bonzini 83f3ca
+
Paolo Bonzini 83f3ca
+EFI_STATUS
Paolo Bonzini 83f3ca
+MarkIoMemoryRangeForRuntimeAccess (
Paolo Bonzini 83f3ca
+  IN EFI_PHYSICAL_ADDRESS                BaseAddress,
Paolo Bonzini 83f3ca
+  IN UINTN                               Length
Paolo Bonzini 83f3ca
+  )
Paolo Bonzini 83f3ca
+{
Paolo Bonzini 83f3ca
+  //
Paolo Bonzini 83f3ca
+  // Nothing
Paolo Bonzini 83f3ca
+  //
Paolo Bonzini 83f3ca
+
Paolo Bonzini 83f3ca
+  return EFI_SUCCESS;
Paolo Bonzini 83f3ca
+}
Paolo Bonzini 83f3ca
-- 
Paolo Bonzini 83f3ca
2.17.1
Paolo Bonzini 83f3ca