X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=SecurityPkg%2FTcg%2FTcg2Smm%2FTcg2Smm.c;h=5a1fd3e363c7202375b93c0feb389d4da1686ca1;hb=bf3b7aae7100b60ff8a387f0b7604dbb6ff29fc9;hp=968f32710d146b736686b501c4989995bdf4bad5;hpb=a6e0e994d0e855f7f65f6fb7e113f061e0b9a242;p=mirror_edk2.git diff --git a/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c b/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c index 968f32710d..5a1fd3e363 100644 --- a/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c +++ b/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c @@ -83,7 +83,8 @@ EFI_TPM2_ACPI_TABLE mTpm2AcpiTemplate = { // These fields should be filled in in production // }, - 0, // Flags + 0, // BIT0~15: PlatformClass + // BIT16~31: Reserved 0, // Control Area EFI_TPM2_ACPI_TABLE_START_METHOD_TIS, // StartMethod }; @@ -317,7 +318,7 @@ UpdateHID ( { EFI_STATUS Status; UINT8 *DataPtr; - CHAR8 HID[TPM_HID_ACPI_SIZE]; + CHAR8 Hid[TPM_HID_ACPI_SIZE]; UINT32 ManufacturerID; UINT32 FirmwareVersion1; UINT32 FirmwareVersion2; @@ -328,7 +329,7 @@ UpdateHID ( // // Initialize HID with Default PNP string // - ZeroMem(HID, TPM_HID_ACPI_SIZE); + ZeroMem(Hid, TPM_HID_ACPI_SIZE); // // Get Manufacturer ID @@ -345,13 +346,13 @@ UpdateHID ( // HID containing PNP ID "NNN####" // NNN is uppercase letter for Vendor ID specified by manufacturer // - CopyMem(HID, &ManufacturerID, 3); + CopyMem(Hid, &ManufacturerID, 3); } else { // // HID containing ACP ID "NNNN####" // NNNN is uppercase letter for Vendor ID specified by manufacturer // - CopyMem(HID, &ManufacturerID, 4); + CopyMem(Hid, &ManufacturerID, 4); PnpHID = FALSE; } } else { @@ -368,9 +369,9 @@ UpdateHID ( // #### is Firmware Version 1 // if (PnpHID) { - AsciiSPrint(HID + 3, TPM_HID_PNP_SIZE - 3, "%02d%02d", ((FirmwareVersion1 & 0xFFFF0000) >> 16), (FirmwareVersion1 && 0x0000FFFF)); + AsciiSPrint(Hid + 3, TPM_HID_PNP_SIZE - 3, "%02d%02d", ((FirmwareVersion1 & 0xFFFF0000) >> 16), (FirmwareVersion1 & 0x0000FFFF)); } else { - AsciiSPrint(HID + 4, TPM_HID_ACPI_SIZE - 4, "%02d%02d", ((FirmwareVersion1 & 0xFFFF0000) >> 16), (FirmwareVersion1 && 0x0000FFFF)); + AsciiSPrint(Hid + 4, TPM_HID_ACPI_SIZE - 4, "%02d%02d", ((FirmwareVersion1 & 0xFFFF0000) >> 16), (FirmwareVersion1 & 0x0000FFFF)); } } else { @@ -387,14 +388,14 @@ UpdateHID ( DataPtr += 1) { if (AsciiStrCmp((CHAR8 *)DataPtr, TPM_HID_TAG) == 0) { if (PnpHID) { - CopyMem(DataPtr, HID, TPM_HID_PNP_SIZE); + CopyMem(DataPtr, Hid, TPM_HID_PNP_SIZE); // // if HID is PNP ID, patch the last byte in HID TAG to Noop // *(DataPtr + TPM_HID_PNP_SIZE) = AML_NOOP_OP; } else { - CopyMem(DataPtr, HID, TPM_HID_ACPI_SIZE); + CopyMem(DataPtr, Hid, TPM_HID_ACPI_SIZE); } DEBUG((DEBUG_INFO, "TPM2 ACPI _HID is patched to %a\n", DataPtr)); @@ -439,6 +440,12 @@ PublishAcpiTable ( Status = UpdatePPVersion(Table, (CHAR8 *)PcdGetPtr(PcdTcgPhysicalPresenceInterfaceVer)); ASSERT_EFI_ERROR (Status); + DEBUG (( + DEBUG_INFO, + "Current physical presence interface version - %a\n", + (CHAR8 *) PcdGetPtr(PcdTcgPhysicalPresenceInterfaceVer) + )); + // // Update TPM2 HID before measuring it to PCR // @@ -502,6 +509,19 @@ PublishTpm2 ( EFI_TPM2_ACPI_CONTROL_AREA *ControlArea; PTP_INTERFACE_TYPE InterfaceType; + mTpm2AcpiTemplate.Header.Revision = PcdGet8(PcdTpm2AcpiTableRev); + DEBUG((DEBUG_INFO, "Tpm2 ACPI table revision is %d\n", mTpm2AcpiTemplate.Header.Revision)); + + // + // PlatformClass is only valid for version 4 and above + // BIT0~15: PlatformClass + // BIT16~31: Reserved + // + if (mTpm2AcpiTemplate.Header.Revision >= EFI_TPM2_ACPI_TABLE_REVISION_4) { + mTpm2AcpiTemplate.Flags = (mTpm2AcpiTemplate.Flags & 0xFFFF0000) | PcdGet8(PcdTpmPlatformClass); + DEBUG((DEBUG_INFO, "Tpm2 ACPI table PlatformClass is %d\n", (mTpm2AcpiTemplate.Flags & 0x0000FFFF))); + } + // // Measure to PCR[0] with event EV_POST_CODE ACPI DATA //