/** @file This library provides an interfaces to access DynamicPcds used in Tpm2DeviceLibFfa. Copyright (c) 2025, Arm Ltd. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include #include #include "Tpm2DeviceLibFfa.h" TPM2_PTP_INTERFACE_TYPE mActiveTpmInterfaceType; /** This function validate TPM interface type for TPM service over FF-A. @retval EFI_SUCCESS TPM interface type is valid. @retval EFI_UNSUPPORTED TPM interface type is invalid. **/ EFI_STATUS ValidateTpmInterfaceType ( VOID ) { mActiveTpmInterfaceType = PcdGet8 (PcdActiveTpmInterfaceType); // // Start by checking the PCD out of the gate and read from the CRB if it is invalid // if (mActiveTpmInterfaceType == TPM2_FFA_INTERFACE_TYPE_UNKNOWN) { mActiveTpmInterfaceType = Tpm2GetPtpInterface ((VOID *)(UINTN)PcdGet64 (PcdTpmBaseAddress)); PcdSet8S (PcdActiveTpmInterfaceType, mActiveTpmInterfaceType); } if (mActiveTpmInterfaceType != Tpm2PtpInterfaceCrb) { return EFI_UNSUPPORTED; } DEBUG ((DEBUG_INFO, "Setting Tpm Active Interface Type %d\n", mActiveTpmInterfaceType)); return EFI_SUCCESS; } /** This function is used to get the TPM service partition id. @param[out] PartitionId - Supplies the pointer to the TPM service partition id. @retval EFI_SUCCESS The TPM command was successfully sent to the TPM and the response was copied to the Output buffer. @retval EFI_INVALID_PARAMETER The TPM command buffer is NULL or the TPM command buffer size is 0. @retval EFI_DEVICE_ERROR An error occurred in communication with the TPM. **/ EFI_STATUS EFIAPI GetTpmServicePartitionId ( OUT UINT16 *PartitionId ) { EFI_STATUS Status; if (PartitionId == NULL) { return EFI_INVALID_PARAMETER; } if (PcdGet16 (PcdTpmServiceFfaPartitionId) != TPM2_FFA_PARTITION_ID_INVALID) { *PartitionId = PcdGet16 (PcdTpmServiceFfaPartitionId); return EFI_SUCCESS; } Status = FfaTpm2GetServicePartitionId (PartitionId); if (!EFI_ERROR (Status)) { PcdSet16S (PcdTpmServiceFfaPartitionId, *PartitionId); } return Status; }