]> git.proxmox.com Git - mirror_edk2.git/blobdiff - SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2DeviceLibDTpm.c
SecurityPkg: Tpm2DeviceLib: Enable CapCRBIdleBypass support
[mirror_edk2.git] / SecurityPkg / Library / Tpm2DeviceLibDTpm / Tpm2DeviceLibDTpm.c
index 3feb64df7edfde5f1c0ac987f7e69018980818e6..e6fe563b4000213aec9dc16695ce272630cd748f 100644 (file)
@@ -31,6 +31,18 @@ Tpm2GetPtpInterface (
   IN VOID *Register\r
   );\r
 \r
+/**\r
+  Return PTP CRB interface IdleByPass state.\r
+\r
+  @param[in] Register                Pointer to PTP register.\r
+\r
+  @return PTP CRB interface IdleByPass state.\r
+**/\r
+UINT8\r
+Tpm2GetIdleByPass (\r
+  IN VOID *Register\r
+  );\r
+\r
 /**\r
   This service enables the sending of commands to the TPM2.\r
 \r
@@ -140,6 +152,7 @@ Tpm2DeviceLibConstructor (
   )\r
 {\r
   TPM2_PTP_INTERFACE_TYPE  PtpInterface;\r
+  UINT8                    IdleByPass;\r
 \r
   //\r
   // Cache current active TpmInterfaceType only when needed\r
@@ -148,5 +161,11 @@ Tpm2DeviceLibConstructor (
     PtpInterface = Tpm2GetPtpInterface ((VOID *) (UINTN) PcdGet64 (PcdTpmBaseAddress));\r
     PcdSet8S(PcdActiveTpmInterfaceType, PtpInterface);\r
   }\r
+\r
+  if (PcdGet8(PcdActiveTpmInterfaceType) == PtpInterfaceCrb && PcdGet8(PcdCRBIdleByPass) == 0xFF) {\r
+    IdleByPass = Tpm2GetIdleByPass((VOID *) (UINTN) PcdGet64 (PcdTpmBaseAddress));\r
+    PcdSet8S(PcdCRBIdleByPass, IdleByPass);\r
+  }\r
+\r
   return EFI_SUCCESS;\r
 }\r