1*4882a593Smuzhiyun============================================= 2*4882a593SmuzhiyunFirmware TPM Driver 3*4882a593Smuzhiyun============================================= 4*4882a593Smuzhiyun 5*4882a593SmuzhiyunThis document describes the firmware Trusted Platform Module (fTPM) 6*4882a593Smuzhiyundevice driver. 7*4882a593Smuzhiyun 8*4882a593SmuzhiyunIntroduction 9*4882a593Smuzhiyun============ 10*4882a593Smuzhiyun 11*4882a593SmuzhiyunThis driver is a shim for firmware implemented in ARM's TrustZone 12*4882a593Smuzhiyunenvironment. The driver allows programs to interact with the TPM in the same 13*4882a593Smuzhiyunway they would interact with a hardware TPM. 14*4882a593Smuzhiyun 15*4882a593SmuzhiyunDesign 16*4882a593Smuzhiyun====== 17*4882a593Smuzhiyun 18*4882a593SmuzhiyunThe driver acts as a thin layer that passes commands to and from a TPM 19*4882a593Smuzhiyunimplemented in firmware. The driver itself doesn't contain much logic and is 20*4882a593Smuzhiyunused more like a dumb pipe between firmware and kernel/userspace. 21*4882a593Smuzhiyun 22*4882a593SmuzhiyunThe firmware itself is based on the following paper: 23*4882a593Smuzhiyunhttps://www.microsoft.com/en-us/research/wp-content/uploads/2017/06/ftpm1.pdf 24*4882a593Smuzhiyun 25*4882a593SmuzhiyunWhen the driver is loaded it will expose ``/dev/tpmX`` character devices to 26*4882a593Smuzhiyunuserspace which will enable userspace to communicate with the firmware TPM 27*4882a593Smuzhiyunthrough this device. 28