]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Remove PI SMM IPL's dependency on CPU AP so that PI SMM IPL can be dispatched before...
authorrsun3 <rsun3@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 3 Nov 2010 01:14:51 +0000 (01:14 +0000)
committerrsun3 <rsun3@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 3 Nov 2010 01:14:51 +0000 (01:14 +0000)
If PI SMM IPL will be dispatched before the CPU AP is installed for a platform, the platform developer is expected to set cache-ability of SMRAM to WB earlier to improve performance of SMM initialization.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10998 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Core/PiSmmCore/PiSmmIpl.c
MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf

index 61ed062d27b5b8df5db7f018f84c0b5cde4c662a..5cdb5bdeab27b65223c0882c99d32a19937cd0da 100644 (file)
@@ -20,6 +20,7 @@
 #include <Protocol/SmmConfiguration.h>\r
 #include <Protocol/SmmControl2.h>\r
 #include <Protocol/DxeSmmReadyToLock.h>\r
+#include <Protocol/Cpu.h>\r
 \r
 #include <Guid/EventGroup.h>\r
 #include <Guid/EventLegacyBios.h>\r
@@ -963,8 +964,9 @@ SmmIplEntry (
   EFI_SMM_RESERVED_SMRAM_REGION   *SmramResRegion;\r
   UINT64                          MaxSize;\r
   VOID                            *Registration;\r
-  UINT64                           SmmCodeSize;\r
+  UINT64                          SmmCodeSize;\r
   EFI_LOAD_FIXED_ADDRESS_CONFIGURATION_TABLE    *LMFAConfigurationTable;\r
+  EFI_CPU_ARCH_PROTOCOL           *CpuArch;\r
 \r
   //\r
   // Fill in the image handle of the SMM IPL so the SMM Core can use this as the \r
@@ -1063,16 +1065,21 @@ SmmIplEntry (
 \r
     GetSmramCacheRange (mCurrentSmramRange, &mSmramCacheBase, &mSmramCacheSize);\r
     //\r
-    // Attempt to set SMRAM cacheability to WB\r
+    // If CPU AP is present, attempt to set SMRAM cacheability to WB\r
+    // Note that it is expected that cacheability of SMRAM has been set to WB if CPU AP\r
+    // is not available here.\r
     //\r
-    Status = gDS->SetMemorySpaceAttributes(\r
-                    mSmramCacheBase, \r
-                    mSmramCacheSize,\r
-                    EFI_MEMORY_WB\r
-                    );\r
-    if (EFI_ERROR (Status)) {\r
-      DEBUG ((DEBUG_WARN, "SMM IPL failed to set SMRAM window to EFI_MEMORY_WB\n"));\r
-    }  \r
+    Status = gBS->LocateProtocol (&gEfiCpuArchProtocolGuid, NULL, (VOID **)&CpuArch);\r
+    if (!EFI_ERROR (Status)) {\r
+      Status = gDS->SetMemorySpaceAttributes(\r
+                      mSmramCacheBase, \r
+                      mSmramCacheSize,\r
+                      EFI_MEMORY_WB\r
+                      );\r
+      if (EFI_ERROR (Status)) {\r
+        DEBUG ((DEBUG_WARN, "SMM IPL failed to set SMRAM window to EFI_MEMORY_WB\n"));\r
+      }  \r
+    }\r
     //\r
     // if Loading module at Fixed Address feature is enabled, save the SMRAM base to Load\r
     // Modules At Fixed Address Configuration Table.\r
index 8cbaf8d5d31cb45cb8cc10828131025fd9b88204..73507cd239f62e5cd491c0db5fb348899506887c 100644 (file)
@@ -56,7 +56,7 @@
   gEfiSmmConfigurationProtocolGuid              # PROTOCOL ALWAYS_CONSUMED\r
   gEfiSmmControl2ProtocolGuid                   # PROTOCOL ALWAYS_CONSUMED\r
   gEfiDxeSmmReadyToLockProtocolGuid             # PROTOCOL ALWAYS_CONSUMED\r
-  gEfiCpuArchProtocolGuid                       # PROTOCOL ALWAYS_CONSUMED\r
+  gEfiCpuArchProtocolGuid                       # PROTOCOL SIMETIMES_CONSUMED\r
 \r
 [Guids]\r
   gEfiEventDxeDispatchGuid                      # ALWAYS_CONSUMED\r
@@ -71,4 +71,4 @@
 \r
  \r
 [Depex]\r
-  gEfiSmmAccess2ProtocolGuid AND gEfiSmmControl2ProtocolGuid AND gEfiCpuArchProtocolGuid\r
+  gEfiSmmAccess2ProtocolGuid AND gEfiSmmControl2ProtocolGuid\r