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