Add performance optimization for Tcg/TrEE.
authorYao, Jiewen <jiewen.yao@intel.com>
Wed, 4 Mar 2015 01:15:08 +0000 (01:15 +0000)
committerjyao1 <jyao1@Edk2>
Wed, 4 Mar 2015 01:15:08 +0000 (01:15 +0000)
Add error check for Tcg/TrEE Pei/Dxe driver to avoid unnecessary hardware check for performance optimization.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: "Yao, Jiewen" <jiewen.yao@intel.com>
Reviewed-by: "Zeng, Star" <star.zeng@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17004 6f19259b-4bc3-4df7-8a09-765794883524

SecurityPkg/SecurityPkg.dec
SecurityPkg/Tcg/TcgDxe/TcgDxe.c
SecurityPkg/Tcg/TcgPei/TcgPei.c
SecurityPkg/Tcg/TrEEDxe/TrEEDxe.c
SecurityPkg/Tcg/TrEEPei/TrEEPei.c

index b15cd62..11c1d84 100644 (file)
 # [Error.gEfiSecurityPkgTokenSpaceGuid]\r
 #   0x80000001 | Invalid value provided.\r
 #   0x80000002 | Reserved bits must be set to zero.\r
+#   0x80000003 | Incorrect progress or error code provided.\r
 #\r
 \r
 [PcdsFixedAtBuild, PcdsPatchableInModule]\r
index db7951c..f15e943 100644 (file)
@@ -1355,6 +1355,11 @@ DriverEntry (
     return EFI_UNSUPPORTED;\r
   }\r
 \r
+  if (GetFirstGuidHob (&gTpmErrorHobGuid) != NULL) {\r
+    DEBUG ((EFI_D_ERROR, "TPM error!\n"));\r
+    return EFI_DEVICE_ERROR;\r
+  }\r
+\r
   mTcgDxeData.TpmHandle = (TIS_TPM_HANDLE)(UINTN)TPM_BASE_ADDRESS;\r
   Status = TisPcRequestUseTpm (mTcgDxeData.TpmHandle);\r
   if (EFI_ERROR (Status)) {\r
@@ -1362,10 +1367,6 @@ DriverEntry (
     return Status;\r
   }\r
 \r
-  if (GetFirstGuidHob (&gTpmErrorHobGuid) != NULL) {\r
-    mTcgDxeData.BsCap.TPMPresentFlag = FALSE;\r
-  }\r
-\r
   Status = GetTpmStatus (&mTcgDxeData.BsCap.TPMDeactivatedFlag);\r
   if (EFI_ERROR (Status)) {\r
     DEBUG ((\r
index 466caf6..419eacf 100644 (file)
@@ -752,6 +752,11 @@ PeimEntryMA (
     return EFI_UNSUPPORTED;\r
   }\r
 \r
+  if (GetFirstGuidHob (&gTpmErrorHobGuid) != NULL) {\r
+    DEBUG ((EFI_D_ERROR, "TPM error!\n"));\r
+    return EFI_DEVICE_ERROR;\r
+  }\r
+\r
   //\r
   // Initialize TPM device\r
   //\r
@@ -808,6 +813,14 @@ PeimEntryMA (
   }\r
 \r
 Done:\r
+  if (EFI_ERROR (Status)) {\r
+    DEBUG ((EFI_D_ERROR, "TPM error! Build Hob\n"));\r
+    BuildGuidHob (&gTpmErrorHobGuid,0);\r
+    REPORT_STATUS_CODE (\r
+      EFI_ERROR_CODE | EFI_ERROR_MINOR,\r
+      (PcdGet32 (PcdStatusCodeSubClassTpmDevice) | EFI_P_EC_INTERFACE_ERROR)\r
+      );\r
+  }\r
   //\r
   // Always intall TpmInitializationDonePpi no matter success or fail.\r
   // Other driver can know TPM initialization state by TpmInitializedPpi.\r
index 58c4aff..6126bd8 100644 (file)
@@ -1815,16 +1815,17 @@ DriverEntry (
     return EFI_UNSUPPORTED;\r
   }\r
 \r
+  if (GetFirstGuidHob (&gTpmErrorHobGuid) != NULL) {\r
+    DEBUG ((EFI_D_ERROR, "TPM2 error!\n"));\r
+    return EFI_DEVICE_ERROR;\r
+  }\r
+  \r
   Status = Tpm2RequestUseTpm ();\r
   if (EFI_ERROR (Status)) {\r
-    DEBUG ((EFI_D_ERROR, "TPM not detected!\n"));\r
+    DEBUG ((EFI_D_ERROR, "TPM2 not detected!\n"));\r
     return Status;\r
   }\r
   \r
-  if (GetFirstGuidHob (&gTpmErrorHobGuid) != NULL) {\r
-    mTcgDxeData.BsCap.TrEEPresentFlag = FALSE;\r
-  }\r
-\r
   //\r
   // Fill information\r
   //\r
index a7bc903..7a17b0a 100644 (file)
@@ -636,6 +636,11 @@ PeimEntryMA (
     return EFI_UNSUPPORTED;\r
   }\r
 \r
+  if (GetFirstGuidHob (&gTpmErrorHobGuid) != NULL) {\r
+    DEBUG ((EFI_D_ERROR, "TPM2 error!\n"));\r
+    return EFI_DEVICE_ERROR;\r
+  }\r
+\r
   Status = PeiServicesGetBootMode (&BootMode);\r
   ASSERT_EFI_ERROR (Status);\r
 \r
@@ -701,6 +706,14 @@ PeimEntryMA (
   }\r
 \r
 Done:\r
+  if (EFI_ERROR (Status)) {\r
+    DEBUG ((EFI_D_ERROR, "TPM2 error! Build Hob\n"));\r
+    BuildGuidHob (&gTpmErrorHobGuid,0);\r
+    REPORT_STATUS_CODE (\r
+      EFI_ERROR_CODE | EFI_ERROR_MINOR,\r
+      (PcdGet32 (PcdStatusCodeSubClassTpmDevice) | EFI_P_EC_INTERFACE_ERROR)\r
+      );\r
+  }\r
   //\r
   // Always intall TpmInitializationDonePpi no matter success or fail.\r
   // Other driver can know TPM initialization state by TpmInitializedPpi.\r