X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=SecurityPkg%2FTcg%2FTcgPei%2FTcgPei.c;h=466caf66c21282426c37cb83dfd6eabe298144b4;hp=dcf4b0bbbd62b21279e8fc2c8604b3506cbb535f;hb=83a276f61342d0b0d94e96f7d0636bf9474b5ed1;hpb=57ce74ac5ff4950b4bebd5bb1d8fa2024ecc1010 diff --git a/SecurityPkg/Tcg/TcgPei/TcgPei.c b/SecurityPkg/Tcg/TcgPei/TcgPei.c index dcf4b0bbbd..466caf66c2 100644 --- a/SecurityPkg/Tcg/TcgPei/TcgPei.c +++ b/SecurityPkg/Tcg/TcgPei/TcgPei.c @@ -50,6 +50,12 @@ EFI_PEI_PPI_DESCRIPTOR mTpmInitializedPpiList = { NULL }; +EFI_PEI_PPI_DESCRIPTOR mTpmInitializationDonePpiList = { + EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, + &gPeiTpmInitializationDonePpiGuid, + NULL +}; + EFI_PLATFORM_FIRMWARE_BLOB *mMeasuredBaseFvInfo; UINT32 mMeasuredBaseFvIndex = 0; @@ -737,6 +743,7 @@ PeimEntryMA ( ) { EFI_STATUS Status; + EFI_STATUS Status2; EFI_BOOT_MODE BootMode; TIS_TPM_HANDLE TpmHandle; @@ -768,13 +775,13 @@ PeimEntryMA ( Status = TisPcRequestUseTpm ((TIS_PC_REGISTERS_PTR)TpmHandle); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "TPM not detected!\n")); - return Status; + goto Done; } if (PcdGet8 (PcdTpmInitializationPolicy) == 1) { Status = TpmCommStartup ((EFI_PEI_SERVICES**)PeiServices, TpmHandle, BootMode); if (EFI_ERROR (Status) ) { - return Status; + goto Done; } } @@ -784,20 +791,29 @@ PeimEntryMA ( if (BootMode != BOOT_ON_S3_RESUME) { Status = TpmCommContinueSelfTest ((EFI_PEI_SERVICES**)PeiServices, TpmHandle); if (EFI_ERROR (Status)) { - return Status; + goto Done; } } + // + // Only intall TpmInitializedPpi on success + // Status = PeiServicesInstallPpi (&mTpmInitializedPpiList); ASSERT_EFI_ERROR (Status); } if (mImageInMemory) { Status = PeimEntryMP ((EFI_PEI_SERVICES**)PeiServices); - if (EFI_ERROR (Status)) { - return Status; - } + return Status; } +Done: + // + // Always intall TpmInitializationDonePpi no matter success or fail. + // Other driver can know TPM initialization state by TpmInitializedPpi. + // + Status2 = PeiServicesInstallPpi (&mTpmInitializationDonePpiList); + ASSERT_EFI_ERROR (Status2); + return Status; }