qemu/hw/tpm
Ninad Palsule 139fdb3ed8 tpm: Add support for TPM device over I2C bus
Qemu already supports devices attached to ISA and sysbus. This drop adds
support for the I2C bus attached TPM devices. I2C model only supports
TPM2 protocol.

This commit includes changes for the common code.
- Added I2C emulation model. Logic was added in the model to temporarily
  cache the data as I2C interface works per byte basis.
- New tpm type "tpm-tis-i2c" added for I2C support. The user has to
  provide this string on command line.

Testing:
  TPM I2C device module is tested using SWTPM (software based TPM
  package). Qemu uses the rainier machine and is connected to swtpm over
  the socket interface.

  The command to start swtpm is as follows:
  $ swtpm socket --tpmstate dir=/tmp/mytpm1    \
                 --ctrl type=unixio,path=/tmp/mytpm1/swtpm-sock  \
                 --tpm2 --log level=100

  The command to start qemu is as follows:
  $ qemu-system-arm -M rainier-bmc -nographic \
            -kernel ${IMAGEPATH}/fitImage-linux.bin \
            -dtb ${IMAGEPATH}/aspeed-bmc-ibm-rainier.dtb \
            -initrd ${IMAGEPATH}/obmc-phosphor-initramfs.rootfs.cpio.xz \
            -drive file=${IMAGEPATH}/obmc-phosphor-image.rootfs.wic.qcow2,if=sd,index=2 \
            -net nic -net user,hostfwd=:127.0.0.1:2222-:22,hostfwd=:127.0.0.1:2443-:443 \
            -chardev socket,id=chrtpm,path=/tmp/mytpm1/swtpm-sock \
            -tpmdev emulator,id=tpm0,chardev=chrtpm \
            -device tpm-tis-i2c,tpmdev=tpm0,bus=aspeed.i2c.bus.12,address=0x2e

Signed-off-by: Ninad Palsule <ninad@linux.ibm.com>
Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
Tested-by: Stefan Berger <stefanb@linux.ibm.com>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: Joel Stanley <joel@jms.id.au>
Tested-by: Joel Stanley <joel@jms.id.au>
Message-id: 20230414220754.1191476-4-ninadpalsule@us.ibm.com
2023-04-20 08:17:15 -04:00
..
Kconfig tpm: Add support for TPM device over I2C bus 2023-04-20 08:17:15 -04:00
meson.build tpm: Add support for TPM device over I2C bus 2023-04-20 08:17:15 -04:00
tpm_crb.c tpm_crb: Avoid backend startup just before shutdown under Xen 2022-09-09 17:55:59 -04:00
tpm_ppi.c Replace qemu_real_host_page variables with inlined functions 2022-04-06 10:50:38 +02:00
tpm_ppi.h hw/tpm: Clean includes 2022-02-21 10:18:06 +01:00
tpm_prop.h qdev: Move qdev_prop_tpm declaration to tpm_prop.h 2020-12-18 15:20:17 -05:00
tpm_spapr.c tpm: tpm_spapr: Remove unused tracepoint 2021-01-25 20:56:38 -05:00
tpm_tis_common.c tpm: Extend common APIs to support TPM TIS I2C 2023-04-20 08:17:15 -04:00
tpm_tis_i2c.c tpm: Add support for TPM device over I2C bus 2023-04-20 08:17:15 -04:00
tpm_tis_isa.c acpi: tpm-tis: use AcpiDevAmlIfClass:build_dev_aml to provide device's AML 2022-06-09 19:32:49 -04:00
tpm_tis_sysbus.c tpm: put some tpm devices into the correct category 2021-02-20 12:36:19 +01:00
tpm_tis.h tpm: Extend common APIs to support TPM TIS I2C 2023-04-20 08:17:15 -04:00
trace-events tpm: Add support for TPM device over I2C bus 2023-04-20 08:17:15 -04:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00