]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmVirtPkg/HighMemDxe/HighMemDxe.c
ArmVirtPkg/HighMemDxe: check new regions against GCD memory space map
[mirror_edk2.git] / ArmVirtPkg / HighMemDxe / HighMemDxe.c
index 4e41120deff3a198b83739d9f1b869ff8ed72cf6..aa3f5f6d8956c4d8ca28ef1b6dcc9cb9973a9d65 100644 (file)
@@ -30,16 +30,17 @@ InitializeHighMemDxe (
   IN EFI_SYSTEM_TABLE     *SystemTable\r
   )\r
 {\r
-  FDT_CLIENT_PROTOCOL   *FdtClient;\r
-  EFI_CPU_ARCH_PROTOCOL *Cpu;\r
-  EFI_STATUS            Status, FindNodeStatus;\r
-  INT32                 Node;\r
-  CONST UINT32          *Reg;\r
-  UINT32                RegSize;\r
-  UINTN                 AddressCells, SizeCells;\r
-  UINT64                CurBase;\r
-  UINT64                CurSize;\r
-  UINT64                Attributes;\r
+  FDT_CLIENT_PROTOCOL               *FdtClient;\r
+  EFI_CPU_ARCH_PROTOCOL             *Cpu;\r
+  EFI_STATUS                        Status, FindNodeStatus;\r
+  INT32                             Node;\r
+  CONST UINT32                      *Reg;\r
+  UINT32                            RegSize;\r
+  UINTN                             AddressCells, SizeCells;\r
+  UINT64                            CurBase;\r
+  UINT64                            CurSize;\r
+  UINT64                            Attributes;\r
+  EFI_GCD_MEMORY_SPACE_DESCRIPTOR   GcdDescriptor;\r
 \r
   Status = gBS->LocateProtocol (&gFdtClientProtocolGuid, NULL,\r
                   (VOID **)&FdtClient);\r
@@ -73,7 +74,14 @@ InitializeHighMemDxe (
       }\r
       RegSize -= (AddressCells + SizeCells) * sizeof (UINT32);\r
 \r
-      if (PcdGet64 (PcdSystemMemoryBase) != CurBase) {\r
+      Status = gDS->GetMemorySpaceDescriptor (CurBase, &GcdDescriptor);\r
+      if (EFI_ERROR (Status)) {\r
+        DEBUG ((DEBUG_WARN,\r
+          "%a: Region 0x%lx - 0x%lx not found in the GCD memory space map\n",\r
+          __FUNCTION__, CurBase, CurBase + CurSize - 1));\r
+          continue;\r
+      }\r
+      if (GcdDescriptor.GcdMemoryType == EfiGcdMemoryTypeNonExistent) {\r
         Status = gDS->AddMemorySpace (EfiGcdMemoryTypeSystemMemory, CurBase,\r
                         CurSize, EFI_MEMORY_WB);\r
 \r