Add support for E820 Soft Reserved Memory regions in OVMF firmware.
This memory type is used by QEMU to expose Specific Purpose Memory (SPM).

Changes:
- Add EfiAcpiAddressRangeSoftReserved to EFI_ACPI_MEMORY_TYPE enum
- Handle SoftReserved in PlatformAddHobCB() by creating Resource HOBs
  with standard memory attributes plus EFI_RESOURCE_ATTRIBUTE_SPECIAL_PURPOSE

Signed-off-by: FangSheng Huang <[email protected]>
---
 OvmfPkg/Include/IndustryStandard/E820.h     |  3 ++-
 OvmfPkg/Library/PlatformInitLib/MemDetect.c | 16 ++++++++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/OvmfPkg/Include/IndustryStandard/E820.h 
b/OvmfPkg/Include/IndustryStandard/E820.h
index e41be5af3c..34baf5c35f 100644
--- a/OvmfPkg/Include/IndustryStandard/E820.h
+++ b/OvmfPkg/Include/IndustryStandard/E820.h
@@ -16,7 +16,8 @@ typedef enum {
   EfiAcpiAddressRangeMemory   = 1,

   EfiAcpiAddressRangeReserved = 2,

   EfiAcpiAddressRangeACPI     = 3,

-  EfiAcpiAddressRangeNVS      = 4

+  EfiAcpiAddressRangeNVS      = 4,

+  EfiAcpiAddressRangeSoftReserved = 0xEFFFFFFF

 } EFI_ACPI_MEMORY_TYPE;

 

 typedef struct {

diff --git a/OvmfPkg/Library/PlatformInitLib/MemDetect.c 
b/OvmfPkg/Library/PlatformInitLib/MemDetect.c
index 937e2b77a5..a3753dda58 100644
--- a/OvmfPkg/Library/PlatformInitLib/MemDetect.c
+++ b/OvmfPkg/Library/PlatformInitLib/MemDetect.c
@@ -218,6 +218,22 @@ PlatformAddHobCB (
       BuildResourceDescriptorHob (EFI_RESOURCE_MEMORY_RESERVED, 0, Base, End - 
Base);

       DEBUG ((DEBUG_INFO, "%a: Reserved [0x%Lx, 0x%Lx)\n", __func__, Base, 
End));

       break;

+    case EfiAcpiAddressRangeSoftReserved:

+      BuildResourceDescriptorHob (

+        EFI_RESOURCE_SYSTEM_MEMORY,

+        EFI_RESOURCE_ATTRIBUTE_PRESENT |

+        EFI_RESOURCE_ATTRIBUTE_INITIALIZED |

+        EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |

+        EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE |

+        EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |

+        EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE |

+        EFI_RESOURCE_ATTRIBUTE_TESTED |

+        EFI_RESOURCE_ATTRIBUTE_SPECIAL_PURPOSE,

+        Base,

+        End - Base

+        );

+      DEBUG ((DEBUG_INFO, "%a: SoftReserved [0x%Lx, 0x%Lx)\n", __func__, Base, 
End));

+      break;

     default:

       DEBUG ((

         DEBUG_WARN,

-- 
2.34.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#121739): https://edk2.groups.io/g/devel/message/121739
Mute This Topic: https://groups.io/mt/117084418/21656
Group Owner: [email protected]
Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to