From 550c38a29961ab1c9cc4f9a17cdd3346566c4bef Mon Sep 17 00:00:00 2001 From: Linus Liu Date: Wed, 2 Oct 2024 18:49:56 -0700 Subject: UefiPayloadPkg : Roll back the sequence of gEfiEndOfPeiSignalPpiGuid. Adjust the sequence of gEfiEndOfPeiSignalPpiGuid notify function when FDT is disabled , or some of notify functions won't work cause the debug message print twice. Signed-off-by: Linus Liu --- .../PayloadLoaderPeim/FitPayloadLoaderPeim.c | 43 +++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/UefiPayloadPkg/PayloadLoaderPeim/FitPayloadLoaderPeim.c b/UefiPayloadPkg/PayloadLoaderPeim/FitPayloadLoaderPeim.c index 72586dbcaa..7885a52fed 100644 --- a/UefiPayloadPkg/PayloadLoaderPeim/FitPayloadLoaderPeim.c +++ b/UefiPayloadPkg/PayloadLoaderPeim/FitPayloadLoaderPeim.c @@ -35,6 +35,43 @@ EFI_PEI_PPI_DESCRIPTOR mEndOfPeiSignalPpi = { NULL }; +#if (FixedPcdGetBool (PcdHandOffFdtEnable) == 0) + +/** + Notify ReadyToPayLoad signal. + @param[in] PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation. + @param[in] NotifyDescriptor Address of the notification descriptor data structure. + @param[in] Ppi Address of the PPI that was installed. + @retval EFI_SUCCESS Hobs data is discovered. + @return Others No Hobs data is discovered. +**/ +EFI_STATUS +EFIAPI +EndOfPeiPpiNotifyCallback ( + IN EFI_PEI_SERVICES **PeiServices, + IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor, + IN VOID *Ppi + ) +{ + EFI_STATUS Status; + + // + // Ready to Payload phase signal + // + Status = PeiServicesInstallPpi (&gReadyToPayloadSignalPpi); + + return Status; +} + +EFI_PEI_NOTIFY_DESCRIPTOR mEndOfPeiNotifyList[] = { + { + (EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), + &gEfiEndOfPeiSignalPpiGuid, + EndOfPeiPpiNotifyCallback + } +}; +#endif + /** The wrapper function of PeiLoadImageLoadImage(). @param This - Pointer to EFI_PEI_LOAD_FILE_PPI. @@ -144,13 +181,14 @@ PeiLoadFileLoadPayload ( *ImageSizeArg = Context.PayloadSize; *EntryPoint = Context.PayloadEntryPoint; + #if (FixedPcdGetBool (PcdHandOffFdtEnable)) + Status = PeiServicesInstallPpi (&mEndOfPeiSignalPpi); ASSERT_EFI_ERROR (Status); Status = PeiServicesInstallPpi (&gReadyToPayloadSignalPpi); ASSERT_EFI_ERROR (Status); - #if (FixedPcdGetBool (PcdHandOffFdtEnable)) Hob = GetFirstGuidHob (&gUniversalPayloadDeviceTreeGuid); if (Hob != NULL) { Fdt = (UNIVERSAL_PAYLOAD_DEVICE_TREE *)GET_GUID_HOB_DATA (Hob); @@ -178,6 +216,9 @@ PeiLoadFileLoadPayload ( NULL, TopOfStack ); + #else + Status = PeiServicesNotifyPpi (&mEndOfPeiNotifyList[0]); + ASSERT_EFI_ERROR (Status); #endif return EFI_SUCCESS; -- cgit