\r
\r
#include <PiPei.h>\r
+#include <Ppi/ReadOnlyVariable2.h>\r
\r
#include <Library/BaseLib.h>\r
#include <Library/BaseMemoryLib.h>\r
{\r
EFI_STATUS Status;\r
EFI_BOOT_MODE BootMode;\r
+ TREE_DEVICE_DETECTION TrEEDeviceDetection;\r
+ EFI_PEI_READ_ONLY_VARIABLE2_PPI *VariablePpi;\r
+ UINTN Size;\r
+\r
+ if (PcdGetBool (PcdHideTpmSupport) && PcdGetBool (PcdHideTpm)) {\r
+ DEBUG ((EFI_D_ERROR, "DetectTpmDevice: Tpm is hide\n"));\r
+ return TPM_DEVICE_NULL;\r
+ }\r
\r
Status = PeiServicesGetBootMode (&BootMode);\r
ASSERT_EFI_ERROR (Status);\r
\r
//\r
- // In S3, we rely on Setup option, because we save to Setup in normal boot.\r
+ // In S3, we rely on normal boot Detection, because we save to ReadOnly Variable in normal boot.\r
//\r
if (BootMode == BOOT_ON_S3_RESUME) {\r
DEBUG ((EFI_D_ERROR, "DetectTpmDevice: S3 mode\n"));\r
- return SetupTpmDevice;\r
- }\r
\r
- if (PcdGetBool (PcdHideTpmSupport) && PcdGetBool (PcdHideTpm)) {\r
- DEBUG ((EFI_D_ERROR, "DetectTpmDevice: Tpm is hide\n"));\r
- return TPM_DEVICE_NULL;\r
+ Status = PeiServicesLocatePpi (&gEfiPeiReadOnlyVariable2PpiGuid, 0, NULL, (VOID **) &VariablePpi);\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ Size = sizeof(TREE_DEVICE_DETECTION);\r
+ ZeroMem (&TrEEDeviceDetection, sizeof(TrEEDeviceDetection));\r
+ Status = VariablePpi->GetVariable (\r
+ VariablePpi,\r
+ TREE_DEVICE_DETECTION_NAME,\r
+ &gTrEEConfigFormSetGuid,\r
+ NULL,\r
+ &Size,\r
+ &TrEEDeviceDetection\r
+ );\r
+ if (!EFI_ERROR (Status) &&\r
+ (TrEEDeviceDetection.TpmDeviceDetected >= TPM_DEVICE_MIN) &&\r
+ (TrEEDeviceDetection.TpmDeviceDetected <= TPM_DEVICE_MAX)) {\r
+ DEBUG ((EFI_D_ERROR, "TpmDevice from DeviceDetection: %x\n", TrEEDeviceDetection.TpmDeviceDetected));\r
+ return TrEEDeviceDetection.TpmDeviceDetected;\r
+ }\r
}\r
\r
DEBUG ((EFI_D_ERROR, "DetectTpmDevice:\n"));\r
- if ((!IsDtpmPresent ()) || (SetupTpmDevice == TPM_DEVICE_NULL)) {\r
+ if (!IsDtpmPresent ()) {\r
// dTPM not available\r
return TPM_DEVICE_NULL;\r
}\r
return TPM_DEVICE_2_0_DTPM;\r
}\r
\r
- Status = Tpm12Startup (TPM_ST_CLEAR);\r
+ if (BootMode == BOOT_ON_S3_RESUME) {\r
+ Status = Tpm12Startup (TPM_ST_STATE);\r
+ } else {\r
+ Status = Tpm12Startup (TPM_ST_CLEAR);\r
+ }\r
if (EFI_ERROR (Status)) {\r
return TPM_DEVICE_2_0_DTPM;\r
}\r