X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=SecurityPkg%2FTcg%2FTrEEPei%2FTrEEPei.c;h=a7bc903436976bc36544db601777d0a57a659447;hp=eea40847c5e648299fe5a27c9ed0d26afa4a5a20;hb=83a276f61342d0b0d94e96f7d0636bf9474b5ed1;hpb=6f785cfcc304c48ec04e542ee429df95e7b51bc5 diff --git a/SecurityPkg/Tcg/TrEEPei/TrEEPei.c b/SecurityPkg/Tcg/TrEEPei/TrEEPei.c index eea40847c5..a7bc903436 100644 --- a/SecurityPkg/Tcg/TrEEPei/TrEEPei.c +++ b/SecurityPkg/Tcg/TrEEPei/TrEEPei.c @@ -62,6 +62,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; @@ -621,6 +627,7 @@ PeimEntryMA ( ) { EFI_STATUS Status; + EFI_STATUS Status2; EFI_BOOT_MODE BootMode; if (CompareGuid (PcdGetPtr(PcdTpmInstanceGuid), &gEfiTpmDeviceInstanceNoneGuid) || @@ -629,15 +636,6 @@ PeimEntryMA ( return EFI_UNSUPPORTED; } - // - // Update for Performance optimization - // - Status = Tpm2RequestUseTpm (); - if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "TPM not detected!\n")); - return Status; - } - Status = PeiServicesGetBootMode (&BootMode); ASSERT_EFI_ERROR (Status); @@ -658,6 +656,12 @@ PeimEntryMA ( // // Initialize TPM device // + Status = Tpm2RequestUseTpm (); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "TPM2 not detected!\n")); + goto Done; + } + if (PcdGet8 (PcdTpm2InitializationPolicy) == 1) { if (BootMode == BOOT_ON_S3_RESUME) { Status = Tpm2Startup (TPM_SU_STATE); @@ -668,7 +672,7 @@ PeimEntryMA ( Status = Tpm2Startup (TPM_SU_CLEAR); } if (EFI_ERROR (Status) ) { - return Status; + goto Done; } } @@ -679,21 +683,30 @@ PeimEntryMA ( if (PcdGet8 (PcdTpm2SelfTestPolicy) == 1) { Status = Tpm2SelfTest (NO); 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; }