|
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 |
|