if (EFI_ERROR (Status)) {\r
DEBUG ((EFI_D_ERROR, "Tpm2GetCapabilityPcrs fail!\n"));\r
TpmHashAlgorithmBitmap = EFI_TCG2_BOOT_HASH_ALG_SHA1;\r
- NumberOfPCRBanks = 1;\r
ActivePCRBanks = EFI_TCG2_BOOT_HASH_ALG_SHA1;\r
} else {\r
DEBUG ((EFI_D_INFO, "Tpm2GetCapabilityPcrs Count - %08x\n", Pcrs.count));\r
- NumberOfPCRBanks = 0;\r
TpmHashAlgorithmBitmap = 0;\r
ActivePCRBanks = 0;\r
for (Index = 0; Index < Pcrs.count; Index++) {\r
switch (Pcrs.pcrSelections[Index].hash) {\r
case TPM_ALG_SHA1:\r
TpmHashAlgorithmBitmap |= EFI_TCG2_BOOT_HASH_ALG_SHA1;\r
- NumberOfPCRBanks ++;\r
if (!IsZeroBuffer (Pcrs.pcrSelections[Index].pcrSelect, Pcrs.pcrSelections[Index].sizeofSelect)) {\r
ActivePCRBanks |= EFI_TCG2_BOOT_HASH_ALG_SHA1;\r
} \r
break;\r
case TPM_ALG_SHA256:\r
TpmHashAlgorithmBitmap |= EFI_TCG2_BOOT_HASH_ALG_SHA256;\r
- NumberOfPCRBanks ++;\r
if (!IsZeroBuffer (Pcrs.pcrSelections[Index].pcrSelect, Pcrs.pcrSelections[Index].sizeofSelect)) {\r
ActivePCRBanks |= EFI_TCG2_BOOT_HASH_ALG_SHA256;\r
}\r
break;\r
case TPM_ALG_SHA384:\r
TpmHashAlgorithmBitmap |= EFI_TCG2_BOOT_HASH_ALG_SHA384;\r
- NumberOfPCRBanks ++;\r
if (!IsZeroBuffer (Pcrs.pcrSelections[Index].pcrSelect, Pcrs.pcrSelections[Index].sizeofSelect)) {\r
ActivePCRBanks |= EFI_TCG2_BOOT_HASH_ALG_SHA384;\r
}\r
break;\r
case TPM_ALG_SHA512:\r
TpmHashAlgorithmBitmap |= EFI_TCG2_BOOT_HASH_ALG_SHA512;\r
- NumberOfPCRBanks ++;\r
if (!IsZeroBuffer (Pcrs.pcrSelections[Index].pcrSelect, Pcrs.pcrSelections[Index].sizeofSelect)) {\r
ActivePCRBanks |= EFI_TCG2_BOOT_HASH_ALG_SHA512;\r
}\r
break;\r
case TPM_ALG_SM3_256:\r
TpmHashAlgorithmBitmap |= EFI_TCG2_BOOT_HASH_ALG_SM3_256;\r
- NumberOfPCRBanks ++;\r
if (!IsZeroBuffer (Pcrs.pcrSelections[Index].pcrSelect, Pcrs.pcrSelections[Index].sizeofSelect)) {\r
ActivePCRBanks |= EFI_TCG2_BOOT_HASH_ALG_SM3_256;\r
}\r
mTcgDxeData.BsCap.HashAlgorithmBitmap = TpmHashAlgorithmBitmap & PcdGet32 (PcdTcg2HashAlgorithmBitmap);\r
mTcgDxeData.BsCap.ActivePcrBanks = ActivePCRBanks & PcdGet32 (PcdTcg2HashAlgorithmBitmap);\r
\r
+ //\r
+ // Need calculate NumberOfPCRBanks here, because HashAlgorithmBitmap might be removed by PCD.\r
+ //\r
+ NumberOfPCRBanks = 0;\r
+ for (Index = 0; Index < 32; Index++) {\r
+ if ((mTcgDxeData.BsCap.HashAlgorithmBitmap & (1u << Index)) != 0) {\r
+ NumberOfPCRBanks++;\r
+ }\r
+ }\r
+\r
if (PcdGet32 (PcdTcg2NumberOfPCRBanks) == 0) {\r
mTcgDxeData.BsCap.NumberOfPCRBanks = NumberOfPCRBanks;\r
} else {\r