X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=IntelFsp2Pkg%2FLibrary%2FBaseFspPlatformLib%2FFspPlatformNotify.c;fp=IntelFsp2Pkg%2FLibrary%2FBaseFspPlatformLib%2FFspPlatformNotify.c;h=795bb28c0f71b34e2c14a4f441f9fb89c3aae5be;hp=92747711557116d354d9235b3327296d6cf03421;hb=111f2228ddf487b0ac3491e416bb3dcdcfa4f979;hpb=45ce0a67bb4ee80f27da93777c623f51f344f23b diff --git a/IntelFsp2Pkg/Library/BaseFspPlatformLib/FspPlatformNotify.c b/IntelFsp2Pkg/Library/BaseFspPlatformLib/FspPlatformNotify.c index 9274771155..795bb28c0f 100644 --- a/IntelFsp2Pkg/Library/BaseFspPlatformLib/FspPlatformNotify.c +++ b/IntelFsp2Pkg/Library/BaseFspPlatformLib/FspPlatformNotify.c @@ -21,21 +21,21 @@ #include #include #include -extern EFI_GUID gFspPerformanceDataGuid; +extern EFI_GUID gFspPerformanceDataGuid; -EFI_PEI_PPI_DESCRIPTOR mPeiPostPciEnumerationPpi = { +EFI_PEI_PPI_DESCRIPTOR mPeiPostPciEnumerationPpi = { (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), &gEfiPciEnumerationCompleteProtocolGuid, NULL }; -EFI_PEI_PPI_DESCRIPTOR mPeiReadyToBootPpi = { +EFI_PEI_PPI_DESCRIPTOR mPeiReadyToBootPpi = { (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), &gEfiEventReadyToBootGuid, NULL }; -EFI_PEI_PPI_DESCRIPTOR mPeiEndOfFirmwarePpi = { +EFI_PEI_PPI_DESCRIPTOR mPeiEndOfFirmwarePpi = { (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), &gFspEventEndOfFirmwareGuid, NULL @@ -59,41 +59,41 @@ UINT32 mFspNotifySequence[] = { EFI_STATUS EFIAPI FspNotificationHandler ( - IN UINT32 NotificationCode + IN UINT32 NotificationCode ) { - EFI_STATUS Status; + EFI_STATUS Status; - Status = EFI_SUCCESS; + Status = EFI_SUCCESS; switch (NotificationCode) { - case EnumInitPhaseAfterPciEnumeration: - // - // Do POST PCI initialization if needed - // - DEBUG ((DEBUG_INFO | DEBUG_INIT, "FSP Post PCI Enumeration ...\n")); - PeiServicesInstallPpi (&mPeiPostPciEnumerationPpi); - break; - - case EnumInitPhaseReadyToBoot: - // - // Ready To Boot - // - DEBUG ((DEBUG_INFO| DEBUG_INIT, "FSP Ready To Boot ...\n")); - PeiServicesInstallPpi (&mPeiReadyToBootPpi); - break; - - case EnumInitPhaseEndOfFirmware: - // - // End of Firmware - // - DEBUG ((DEBUG_INFO| DEBUG_INIT, "FSP End of Firmware ...\n")); - PeiServicesInstallPpi (&mPeiEndOfFirmwarePpi); - break; - - default: - Status = EFI_INVALID_PARAMETER; - break; + case EnumInitPhaseAfterPciEnumeration: + // + // Do POST PCI initialization if needed + // + DEBUG ((DEBUG_INFO | DEBUG_INIT, "FSP Post PCI Enumeration ...\n")); + PeiServicesInstallPpi (&mPeiPostPciEnumerationPpi); + break; + + case EnumInitPhaseReadyToBoot: + // + // Ready To Boot + // + DEBUG ((DEBUG_INFO| DEBUG_INIT, "FSP Ready To Boot ...\n")); + PeiServicesInstallPpi (&mPeiReadyToBootPpi); + break; + + case EnumInitPhaseEndOfFirmware: + // + // End of Firmware + // + DEBUG ((DEBUG_INFO| DEBUG_INIT, "FSP End of Firmware ...\n")); + PeiServicesInstallPpi (&mPeiEndOfFirmwarePpi); + break; + + default: + Status = EFI_INVALID_PARAMETER; + break; } return Status; @@ -108,10 +108,10 @@ FspNotificationHandler ( VOID EFIAPI FspSiliconInitDone2 ( - IN EFI_STATUS Status + IN EFI_STATUS Status ) { - volatile EFI_STATUS FspStatus; + volatile EFI_STATUS FspStatus; FspStatus = Status; // @@ -128,6 +128,7 @@ FspSiliconInitDone2 ( Status = EFI_DEVICE_ERROR; // Force to known error. break; } + // // This is the end of the FspSiliconInit API // Give control back to the boot loader @@ -156,12 +157,12 @@ FspSiliconInitDone2 ( VOID EFIAPI FspMemoryInitDone2 ( - IN EFI_STATUS Status, - IN OUT VOID **HobListPtr + IN EFI_STATUS Status, + IN OUT VOID **HobListPtr ) { - FSP_GLOBAL_DATA *FspData; - volatile EFI_STATUS FspStatus; + FSP_GLOBAL_DATA *FspData; + volatile EFI_STATUS FspStatus; FspStatus = Status; // @@ -171,9 +172,11 @@ FspMemoryInitDone2 ( if (HobListPtr == NULL) { HobListPtr = (VOID **)GetFspApiParameter2 (); } + if (HobListPtr != NULL) { - *HobListPtr = (VOID *) GetHobList (); + *HobListPtr = (VOID *)GetHobList (); } + // // Convert to FSP EAS defined API return codes // @@ -189,6 +192,7 @@ FspMemoryInitDone2 ( Status = EFI_DEVICE_ERROR; // Force to known error. break; } + // // This is the end of the FspMemoryInit API // Give control back to the boot loader @@ -196,10 +200,10 @@ FspMemoryInitDone2 ( DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspMemoryInitApi() - [Status: 0x%08X] - End\n", Status)); SetFspMeasurePoint (FSP_PERF_ID_API_FSP_MEMORY_INIT_EXIT); FspData = GetFspGlobalDataPointer (); - PERF_START_EX(&gFspPerformanceDataGuid, "EventRec", NULL, (FspData->PerfData[0] & FSP_PERFORMANCE_DATA_TIMER_MASK), FSP_STATUS_CODE_TEMP_RAM_INIT | FSP_STATUS_CODE_COMMON_CODE| FSP_STATUS_CODE_API_ENTRY); - PERF_END_EX(&gFspPerformanceDataGuid, "EventRec", NULL, (FspData->PerfData[1] & FSP_PERFORMANCE_DATA_TIMER_MASK), FSP_STATUS_CODE_TEMP_RAM_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT); - PERF_START_EX(&gFspPerformanceDataGuid, "EventRec", NULL, (FspData->PerfData[2] & FSP_PERFORMANCE_DATA_TIMER_MASK), FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY); - PERF_END_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT); + PERF_START_EX (&gFspPerformanceDataGuid, "EventRec", NULL, (FspData->PerfData[0] & FSP_PERFORMANCE_DATA_TIMER_MASK), FSP_STATUS_CODE_TEMP_RAM_INIT | FSP_STATUS_CODE_COMMON_CODE| FSP_STATUS_CODE_API_ENTRY); + PERF_END_EX (&gFspPerformanceDataGuid, "EventRec", NULL, (FspData->PerfData[1] & FSP_PERFORMANCE_DATA_TIMER_MASK), FSP_STATUS_CODE_TEMP_RAM_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT); + PERF_START_EX (&gFspPerformanceDataGuid, "EventRec", NULL, (FspData->PerfData[2] & FSP_PERFORMANCE_DATA_TIMER_MASK), FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY); + PERF_END_EX (&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT); REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT); if (GetFspGlobalDataPointer ()->FspMode == FSP_IN_API_MODE) { do { @@ -217,13 +221,13 @@ FspMemoryInitDone2 ( if (GetFspApiCallingIndex () == TempRamExitApiIndex) { SetPhaseStatusCode (FSP_STATUS_CODE_TEMP_RAM_EXIT); SetFspMeasurePoint (FSP_PERF_ID_API_TEMP_RAM_EXIT_ENTRY); - PERF_START_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_TEMP_RAM_EXIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY); + PERF_START_EX (&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_TEMP_RAM_EXIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY); REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_TEMP_RAM_EXIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY); DEBUG ((DEBUG_INFO | DEBUG_INIT, "TempRamExitApi() - Begin\n")); } else { SetPhaseStatusCode (FSP_STATUS_CODE_SILICON_INIT); SetFspMeasurePoint (FSP_PERF_ID_API_FSP_SILICON_INIT_ENTRY); - PERF_START_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY); + PERF_START_EX (&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY); REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY); DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspSiliconInitApi() - Begin\n")); } @@ -238,11 +242,11 @@ FspMemoryInitDone2 ( VOID EFIAPI FspTempRamExitDone2 ( - IN EFI_STATUS Status + IN EFI_STATUS Status ) { // - volatile EFI_STATUS FspStatus; + volatile EFI_STATUS FspStatus; FspStatus = Status; // Convert to FSP EAS defined API return codes @@ -258,13 +262,14 @@ FspTempRamExitDone2 ( Status = EFI_DEVICE_ERROR; // Force to known error. break; } + // // This is the end of the TempRamExit API // Give control back to the boot loader // DEBUG ((DEBUG_INFO | DEBUG_INIT, "TempRamExitApi() - [Status: 0x%08X] - End\n", Status)); SetFspMeasurePoint (FSP_PERF_ID_API_TEMP_RAM_EXIT_EXIT); - PERF_END_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_TEMP_RAM_EXIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT); + PERF_END_EX (&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_TEMP_RAM_EXIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT); REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_TEMP_RAM_EXIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT); if (GetFspGlobalDataPointer ()->FspMode == FSP_IN_API_MODE) { do { @@ -275,9 +280,10 @@ FspTempRamExitDone2 ( } } while (FspStatus != EFI_SUCCESS); } + SetPhaseStatusCode (FSP_STATUS_CODE_SILICON_INIT); SetFspMeasurePoint (FSP_PERF_ID_API_FSP_SILICON_INIT_ENTRY); - PERF_START_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY); + PERF_START_EX (&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY); REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY); DEBUG ((DEBUG_INFO | DEBUG_INIT, "SiliconInitApi() - Begin\n")); } @@ -294,15 +300,14 @@ FspWaitForNotify ( VOID ) { - EFI_STATUS Status; - UINT32 NotificationValue; - UINT32 NotificationCount; - UINT8 Count; - volatile EFI_STATUS FspStatus; + EFI_STATUS Status; + UINT32 NotificationValue; + UINT32 NotificationCount; + UINT8 Count; + volatile EFI_STATUS FspStatus; NotificationCount = 0; - while (NotificationCount < sizeof(mFspNotifySequence) / sizeof(UINT32)) { - + while (NotificationCount < sizeof (mFspNotifySequence) / sizeof (UINT32)) { Count = (UINT8)((NotificationCount << 1) & 0x07); SetFspMeasurePoint (FSP_PERF_ID_API_NOTIFY_POST_PCI_ENTRY + Count); @@ -312,7 +317,7 @@ FspWaitForNotify ( REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_POST_PCIE_ENUM_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY); } else if (NotificationCount == 1) { SetPhaseStatusCode (FSP_STATUS_CODE_READY_TO_BOOT_NOTIFICATION); - PERF_START_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_READY_TO_BOOT_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY); + PERF_START_EX (&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_READY_TO_BOOT_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY); REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_READY_TO_BOOT_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY); } else if (NotificationCount == 2) { SetPhaseStatusCode (FSP_STATUS_CODE_END_OF_FIRMWARE_NOTIFICATION); @@ -333,7 +338,7 @@ FspWaitForNotify ( // Process Notification and Give control back to the boot loader framework caller // Status = FspNotificationHandler (NotificationValue); - if (!EFI_ERROR(Status)) { + if (!EFI_ERROR (Status)) { NotificationCount++; } } @@ -342,26 +347,28 @@ FspWaitForNotify ( SetFspMeasurePoint (FSP_PERF_ID_API_NOTIFY_POST_PCI_EXIT + Count); if ((NotificationCount - 1) == 0) { - PERF_END_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_POST_PCIE_ENUM_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT); + PERF_END_EX (&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_POST_PCIE_ENUM_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT); REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_POST_PCIE_ENUM_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT); } else if ((NotificationCount - 1) == 1) { - PERF_END_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_READY_TO_BOOT_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT); + PERF_END_EX (&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_READY_TO_BOOT_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT); REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_READY_TO_BOOT_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT); } else if ((NotificationCount - 1) == 2) { - PERF_END_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_END_OF_FIRMWARE_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT); + PERF_END_EX (&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_END_OF_FIRMWARE_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT); REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_END_OF_FIRMWARE_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT); } + if (GetFspGlobalDataPointer ()->FspMode == FSP_IN_API_MODE) { FspStatus = Status; do { - SetFspApiReturnStatus(Status); - Pei2LoaderSwitchStack(); + SetFspApiReturnStatus (Status); + Pei2LoaderSwitchStack (); if (Status != EFI_SUCCESS) { DEBUG ((DEBUG_ERROR, "!!!ERROR: NotifyPhaseApi() [Phase: %08X] - Failed - [Status: 0x%08X]\n", NotificationValue, Status)); } } while (FspStatus != EFI_SUCCESS); } } + // // Control goes back to the PEI Core and it dispatches further PEIMs. // DXEIPL is the final one to transfer control back to the boot loader. @@ -389,7 +396,7 @@ FspSiliconInitDone ( VOID EFIAPI FspMemoryInitDone ( - IN OUT VOID **HobListPtr + IN OUT VOID **HobListPtr ) { FspMemoryInitDone2 (EFI_SUCCESS, HobListPtr);