• Peter Huewe's avatar
    char/tpm: Add new driver for Infineon I2C TIS TPM · aad628c1
    Peter Huewe authored
    This patch adds a driver to support Infineon's SLB 9635 TT 1.2 Soft I2C TPMs
    which follow the TGC TIS 1.2 TPM specification[1] and Infineon's I2C Protocol
    Stack Specification 0.20.
    The I2C Protocol Stack Specification is a simple adaption of the LPC TIS
    Protocol to the I2C Bus.
    The I2C TPMs can be used when LPC Bus is not available (i.e. non x86
    architectures like ARM).
    
    The driver is based on the tpm_tis.c driver by Leendert van Dorn and Kyleen
    Hall and has quite similar functionality.
    
    Tested on Nvidia ARM Tegra2 Development Platform and Beagleboard (ARM OMAP)
    Tested with the Trousers[2] TSS API Testsuite v 0.3 [3]
    Compile-tested on x86 (32/64-bit)
    
    Updates since version 2.1.4:
    - included "Lock the I2C adapter for a sequence of requests", by Bryan Freed
    - use __i2c_transfer instead of own implementation of unlocked i2c_transfer
    - use struct dev_pm_ops for power management via SIMPLE_DEV_PM_OPS
    
    Updates since version 2.1.3:
    - use proper probing mechanism
    * either add the tpm using I2C_BOARD_INFO to your board file or probe it
    * during runtime e.g on BeagleBoard using :
    * "echo tpm_i2c_infineon 0x20 > /sys/bus/i2c/devices/i2c-2/new_device"
    - fix possible endless loop if hardware misbehaves
    - improved return codes
    - consistent spelling i2c/tpm -> I2C/TPM
    - remove hardcoded sleep values and msleep usage
    - removed debug statements
    - added check for I2C functionality
    - renaming to tpm_i2c_infineon
    
    Updates since version 2.1.2:
    - added sysfs entries for duration and timeouts
    - updated to new tpm_do_selftest
    
    Updates since version 2.1.0:
    - improved error handling
    - implemented workarounds needed by the tpm
    - fixed typos
    
    References:
    [1]
    http://www.trustedcomputinggroup.org/resources/pc_client_work_group_pc_client_
    specific_tpm_interface_specification_tis_version_12/
    [2] http://trousers.sourceforge.net/
    [3]
    http://sourceforge.net/projects/trousers/files/TSS%20API%20test%20suite/0.3/Reviewed-by: default avatarAndi Shyti <andi.shyti@gmail.com>
    Acked-by: default avatarMarcel Selhorst <tpmdd@selhorst.net>
    Signed-off-by: default avatarPeter Huewe <peter.huewe@infineon.com>
    Signed-off-by: default avatarBryan Freed <bfreed@chromium.org>
    Signed-off-by: default avatarKent Yoder <key@linux.vnet.ibm.com>
    aad628c1
tpm_i2c_infineon.c 17 KB