]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/CpuMpPei/CpuBist.c
UefiCpuPkg: Change use of EFI_D_* to DEBUG_*
[mirror_edk2.git] / UefiCpuPkg / CpuMpPei / CpuBist.c
index 641eb10ca5809fba555963c7d9391f1a641b78b5..bb35bb434728bd97af9af5537eadb122f88f0ef5 100644 (file)
@@ -1,14 +1,8 @@
 /** @file\r
   Update and publish processors' BIST information.\r
 \r
-  Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
@@ -44,34 +38,29 @@ SecPlatformInformation2 (
      OUT EFI_SEC_PLATFORM_INFORMATION_RECORD2 *PlatformInformationRecord2\r
   )\r
 {\r
-  UINTN                                BistInformationSize;\r
-  UINTN                                CpuIndex;\r
-  EFI_SEC_PLATFORM_INFORMATION_CPU     *CpuInstance;\r
-  EFI_PROCESSOR_INFORMATION            ProcessorInfo;\r
-  EFI_HEALTH_FLAGS                     BistData;\r
-  UINTN                                NumberOfProcessors;\r
-  UINTN                                NumberOfEnabledProcessors;\r
+  EFI_HOB_GUID_TYPE       *GuidHob;\r
+  VOID                    *DataInHob;\r
+  UINTN                   DataSize;\r
 \r
-  MpInitLibGetNumberOfProcessors(&NumberOfProcessors, &NumberOfEnabledProcessors);\r
+  GuidHob = GetFirstGuidHob (&gEfiSecPlatformInformation2PpiGuid);\r
+  if (GuidHob == NULL) {\r
+    *StructureSize = 0;\r
+    return EFI_SUCCESS;\r
+  }\r
+\r
+  DataInHob = GET_GUID_HOB_DATA (GuidHob);\r
+  DataSize  = GET_GUID_HOB_DATA_SIZE (GuidHob);\r
 \r
-  BistInformationSize = sizeof (EFI_SEC_PLATFORM_INFORMATION_RECORD2) +\r
-                        sizeof (EFI_SEC_PLATFORM_INFORMATION_CPU) * NumberOfProcessors;\r
   //\r
-  // return the information size if input buffer size is too small\r
+  // return the information from BistHob\r
   //\r
-  if ((*StructureSize) < (UINT64) BistInformationSize) {\r
-    *StructureSize = (UINT64) BistInformationSize;\r
+  if ((*StructureSize) < (UINT64) DataSize) {\r
+    *StructureSize = (UINT64) DataSize;\r
     return EFI_BUFFER_TOO_SMALL;\r
   }\r
 \r
-  PlatformInformationRecord2->NumberOfCpus = (UINT32)NumberOfProcessors;\r
-  CpuInstance = PlatformInformationRecord2->CpuInstance;\r
-  for (CpuIndex = 0; CpuIndex < NumberOfProcessors; CpuIndex ++) {\r
-    MpInitLibGetProcessorInfo (CpuIndex, &ProcessorInfo, &BistData);\r
-    CpuInstance[CpuIndex].CpuLocation = (UINT32) ProcessorInfo.ProcessorId;\r
-    CpuInstance[CpuIndex].InfoRecord.IA32HealthFlags = BistData;\r
-  }\r
-\r
+  *StructureSize = (UINT64) DataSize;\r
+  CopyMem (PlatformInformationRecord2, DataInHob, DataSize);\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -84,6 +73,7 @@ SecPlatformInformation2 (
   @param  PpiDescriptor       Return a pointer to instance of the\r
                               EFI_PEI_PPI_DESCRIPTOR\r
   @param  BistInformationData Pointer to BIST information data\r
+  @param  BistInformationSize Return the size in bytes of BIST information\r
 \r
   @retval EFI_SUCCESS         Retrieve of the BIST data successfully\r
   @retval EFI_NOT_FOUND       No sec platform information(2) ppi export\r
@@ -95,7 +85,8 @@ GetBistInfoFromPpi (
   IN CONST EFI_PEI_SERVICES     **PeiServices,\r
   IN CONST EFI_GUID             *Guid,\r
      OUT EFI_PEI_PPI_DESCRIPTOR **PpiDescriptor,\r
-     OUT VOID                   **BistInformationData\r
+     OUT VOID                   **BistInformationData,\r
+     OUT UINT64                 *BistInformationSize OPTIONAL\r
   )\r
 {\r
   EFI_STATUS                            Status;\r
@@ -140,6 +131,9 @@ GetBistInfoFromPpi (
                                                );\r
         if (Status == EFI_SUCCESS) {\r
           *BistInformationData = SecPlatformInformation2;\r
+          if (BistInformationSize != NULL) {\r
+            *BistInformationSize = InformationSize;\r
+          }\r
           return EFI_SUCCESS;\r
         }\r
       }\r
@@ -176,14 +170,26 @@ CollectBistDataFromPpi (
   EFI_HEALTH_FLAGS                      BistData;\r
   UINTN                                 NumberOfProcessors;\r
   UINTN                                 NumberOfEnabledProcessors;\r
+  UINTN                                 BistInformationSize;\r
+  EFI_SEC_PLATFORM_INFORMATION_RECORD2  *PlatformInformationRecord2;\r
+  EFI_SEC_PLATFORM_INFORMATION_CPU      *CpuInstanceInHob;\r
+\r
 \r
   MpInitLibGetNumberOfProcessors(&NumberOfProcessors, &NumberOfEnabledProcessors);\r
 \r
+  BistInformationSize = sizeof (EFI_SEC_PLATFORM_INFORMATION_RECORD2) +\r
+                        sizeof (EFI_SEC_PLATFORM_INFORMATION_CPU) * NumberOfProcessors;\r
+  Status = PeiServicesAllocatePool (\r
+             (UINTN) BistInformationSize,\r
+             (VOID **) &PlatformInformationRecord2\r
+             );\r
+  ASSERT_EFI_ERROR (Status);\r
+  PlatformInformationRecord2->NumberOfCpus = (UINT32)NumberOfProcessors;\r
+\r
   SecPlatformInformation2 = NULL;\r
   SecPlatformInformation  = NULL;\r
   NumberOfData            = 0;\r
   CpuInstance             = NULL;\r
-\r
   //\r
   // Get BIST information from Sec Platform Information2 Ppi firstly\r
   //\r
@@ -191,7 +197,8 @@ CollectBistDataFromPpi (
              PeiServices,\r
              &gEfiSecPlatformInformation2PpiGuid,\r
              &SecInformationDescriptor,\r
-             (VOID *) &SecPlatformInformation2\r
+             (VOID *) &SecPlatformInformation2,\r
+             NULL\r
              );\r
   if (Status == EFI_SUCCESS) {\r
     //\r
@@ -207,7 +214,8 @@ CollectBistDataFromPpi (
                PeiServices,\r
                &gEfiSecPlatformInformationPpiGuid,\r
                &SecInformationDescriptor,\r
-               (VOID *) &SecPlatformInformation\r
+               (VOID *) &SecPlatformInformation,\r
+               NULL\r
                );\r
     if (Status == EFI_SUCCESS) {\r
       NumberOfData = 1;\r
@@ -219,7 +227,7 @@ CollectBistDataFromPpi (
       BspCpuInstance.InfoRecord.IA32HealthFlags.Uint32  = SecPlatformInformation->IA32HealthFlags.Uint32;\r
       CpuInstance = &BspCpuInstance;\r
     } else {\r
-      DEBUG ((EFI_D_INFO, "Does not find any stored CPU BIST information from PPI!\n"));\r
+      DEBUG ((DEBUG_INFO, "Does not find any stored CPU BIST information from PPI!\n"));\r
     }\r
   }\r
   for (ProcessorNumber = 0; ProcessorNumber < NumberOfProcessors; ProcessorNumber ++) {\r
@@ -242,27 +250,41 @@ CollectBistDataFromPpi (
         (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_EC_SELF_TEST)\r
         );\r
     }\r
-    DEBUG ((EFI_D_INFO, "  APICID - 0x%08x, BIST - 0x%08x\n",\r
-            ProcessorInfo.ProcessorId,\r
+    DEBUG ((DEBUG_INFO, "  APICID - 0x%08x, BIST - 0x%08x\n",\r
+            (UINT32) ProcessorInfo.ProcessorId,\r
             BistData\r
             ));\r
+    CpuInstanceInHob = PlatformInformationRecord2->CpuInstance;\r
+    CpuInstanceInHob[ProcessorNumber].CpuLocation = (UINT32) ProcessorInfo.ProcessorId;\r
+    CpuInstanceInHob[ProcessorNumber].InfoRecord.IA32HealthFlags = BistData;\r
   }\r
 \r
-  if (SecPlatformInformation2 != NULL && NumberOfData < NumberOfProcessors) {\r
-    //\r
-    // Reinstall SecPlatformInformation2 PPI to include new BIST information\r
-    //\r
-    Status = PeiServicesReInstallPpi (\r
-               SecInformationDescriptor,\r
-               &mPeiSecPlatformInformation2Ppi\r
-               );\r
-    ASSERT_EFI_ERROR (Status);\r
+  //\r
+  // Build SecPlatformInformation2 PPI GUIDed HOB that also could be consumed\r
+  // by CPU MP driver to get CPU BIST data\r
+  //\r
+  BuildGuidDataHob (\r
+    &gEfiSecPlatformInformation2PpiGuid,\r
+    PlatformInformationRecord2,\r
+    (UINTN) BistInformationSize\r
+    );\r
+\r
+  if (SecPlatformInformation2 != NULL) {\r
+    if (NumberOfData < NumberOfProcessors) {\r
+      //\r
+      // Reinstall SecPlatformInformation2 PPI to include new BIST information\r
+      //\r
+      Status = PeiServicesReInstallPpi (\r
+                 SecInformationDescriptor,\r
+                 &mPeiSecPlatformInformation2Ppi\r
+                 );\r
+      ASSERT_EFI_ERROR (Status);\r
+    }\r
   } else {\r
     //\r
-    // Install SecPlatformInformation2 PPI to include new BIST information\r
+    // Install SecPlatformInformation2 PPI\r
     //\r
     Status = PeiServicesInstallPpi (&mPeiSecPlatformInformation2Ppi);\r
     ASSERT_EFI_ERROR(Status);\r
   }\r
 }\r
-\r