[PATCH v9 0/6] Add vTPM emulator support for ppc64 platform

Stefan Berger posted 6 patches 4 years, 3 months ago
Test FreeBSD passed
Test docker-mingw@fedora passed
Test checkpatch passed
Test docker-quick@centos7 passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20200121152935.649898-1-stefanb@linux.ibm.com
Maintainers: Eric Blake <eblake@redhat.com>, Markus Armbruster <armbru@redhat.com>, Stefan Berger <stefanb@linux.ibm.com>, David Gibson <david@gibson.dropbear.id.au>
docs/specs/index.rst       |   1 +
docs/specs/tpm.rst         | 503 +++++++++++++++++++++++++++++++++++++
docs/specs/tpm.txt         | 427 -------------------------------
hw/ppc/Kconfig             |   1 +
hw/ppc/spapr_vio.c         |  11 +-
hw/tpm/Kconfig             |   6 +
hw/tpm/Makefile.objs       |   1 +
hw/tpm/tpm_spapr.c         | 429 +++++++++++++++++++++++++++++++
hw/tpm/tpm_tis.c           |  32 +--
hw/tpm/tpm_util.c          |  25 ++
hw/tpm/tpm_util.h          |   3 +
hw/tpm/trace-events        |  16 +-
include/hw/ppc/spapr_vio.h |   1 +
include/sysemu/tpm.h       |   3 +
qapi/tpm.json              |   6 +-
15 files changed, 1004 insertions(+), 461 deletions(-)
create mode 100644 docs/specs/tpm.rst
delete mode 100644 docs/specs/tpm.txt
create mode 100644 hw/tpm/tpm_spapr.c
[PATCH v9 0/6] Add vTPM emulator support for ppc64 platform
Posted by Stefan Berger 4 years, 3 months ago
The following series of patches adds vTPM emulator support for the
ppc64 platform (pSeries). 

It can be tested as follows with swtpm/libtpms:

mkdir /tmp/mytpm1
swtpm socket --tpmstate dir=/tmp/mytpm1 \
  --ctrl type=unixio,path=/tmp/mytpm1/swtpm-sock \
  --log level=20

If TPM 2 is desired, add --tpm2 as parameter to the above.

In another terminal start QEMU:

sudo ./ppc64-softmmu/qemu-system-ppc64 -display sdl \
	-machine pseries,accel=kvm \
	-m 1024 -bios slof.bin -boot menu=on \
	-nodefaults -device VGA -device pci-ohci -device usb-kbd \
	-chardev socket,id=chrtpm,path=/tmp/mytpm1/swtpm-sock \
	-tpmdev emulator,id=tpm0,chardev=chrtpm \
	-device tpm-spapr,tpmdev=tpm0 \
	-device spapr-vscsi,id=scsi0,reg=0x00002000 \
	-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x3,drive=drive-virtio-disk0,id=virtio-disk0 \
	-drive file=test.img,format=raw,if=none,id=drive-virtio-disk0

Links:
 - libtpms: https://github.com/stefanberger/libtpms/wiki
 - swtpm: https://github.com/stefanberger/swtpm/wiki

Changes:
 v8->v9:
  - Allocating buffer now so we can use VMSTATE_VBUFFER_UINT32 for the regular
    buffer (no more suspend buffer)

 v7->v8:
  - Folded documentation patch into 3rd patch
  - Added Marc-André's patch to end of series

 v6->v7:
  - Implemented get_dt_compatible() and using it
  - Moved tpm_this_show_buffer to tpm_util.c

 v5->v6:
  - adjusted names of structures and simplified
  - only transmitting min. necessary bytes to pass to VM after resume
  - addressed other issues pointed out by D. Gibson

 v4->v5:
  - use runstate_check(RUN_STATE_FINISH_MIGRATE) to check whether devices
    are suspending; ditch 3 patches in this series that tried to do similar

 v3->v4:
  - addressed comments to v3
  - reworked suspend/resume support that requires extensions to backends

 v2->v3:
  - patch 1: a TPM 2 is identified by IBM,vtpm20 in the compatible node
  - patch 1: convert to tracing to display Tx and Rx buffers
  - added documentation patch
  - added patch to enable TPM device as part of pSeries

 v1->v2:
  - followed Cedric Le Goater's suggestions to patch 1
  - send appropriate CRQ error responses if DMA read or write fails
  - renamed tpm_spapr_got_payload to tpm_spapr_process_cmd and
    pass endianess-adjusted data pointer from CRQ to it

Regards,
    Stefan


Marc-André Lureau (1):
  docs/specs/tpm: reST-ify TPM documentation

Stefan Berger (5):
  tpm: Move tpm_tis_show_buffer to tpm_util.c
  spapr: Implement get_dt_compatible() callback
  tpm_spapr: Support TPM for ppc64 using CRQ based interface
  tpm_spapr: Support suspend and resume
  hw/ppc/Kconfig: Enable TPM_SPAPR as part of PSERIES config

 docs/specs/index.rst       |   1 +
 docs/specs/tpm.rst         | 503 +++++++++++++++++++++++++++++++++++++
 docs/specs/tpm.txt         | 427 -------------------------------
 hw/ppc/Kconfig             |   1 +
 hw/ppc/spapr_vio.c         |  11 +-
 hw/tpm/Kconfig             |   6 +
 hw/tpm/Makefile.objs       |   1 +
 hw/tpm/tpm_spapr.c         | 429 +++++++++++++++++++++++++++++++
 hw/tpm/tpm_tis.c           |  32 +--
 hw/tpm/tpm_util.c          |  25 ++
 hw/tpm/tpm_util.h          |   3 +
 hw/tpm/trace-events        |  16 +-
 include/hw/ppc/spapr_vio.h |   1 +
 include/sysemu/tpm.h       |   3 +
 qapi/tpm.json              |   6 +-
 15 files changed, 1004 insertions(+), 461 deletions(-)
 create mode 100644 docs/specs/tpm.rst
 delete mode 100644 docs/specs/tpm.txt
 create mode 100644 hw/tpm/tpm_spapr.c

-- 
2.24.1


Re: [PATCH v9 0/6] Add vTPM emulator support for ppc64 platform
Posted by David Gibson 4 years, 3 months ago
On Tue, Jan 21, 2020 at 10:29:29AM -0500, Stefan Berger wrote:
> 
> The following series of patches adds vTPM emulator support for the
> ppc64 platform (pSeries). 
> 
> It can be tested as follows with swtpm/libtpms:
> 
> mkdir /tmp/mytpm1
> swtpm socket --tpmstate dir=/tmp/mytpm1 \
>   --ctrl type=unixio,path=/tmp/mytpm1/swtpm-sock \
>   --log level=20
> 
> If TPM 2 is desired, add --tpm2 as parameter to the above.
> 
> In another terminal start QEMU:
> 
> sudo ./ppc64-softmmu/qemu-system-ppc64 -display sdl \
> 	-machine pseries,accel=kvm \
> 	-m 1024 -bios slof.bin -boot menu=on \
> 	-nodefaults -device VGA -device pci-ohci -device usb-kbd \
> 	-chardev socket,id=chrtpm,path=/tmp/mytpm1/swtpm-sock \
> 	-tpmdev emulator,id=tpm0,chardev=chrtpm \
> 	-device tpm-spapr,tpmdev=tpm0 \
> 	-device spapr-vscsi,id=scsi0,reg=0x00002000 \
> 	-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x3,drive=drive-virtio-disk0,id=virtio-disk0 \
> 	-drive file=test.img,format=raw,if=none,id=drive-virtio-disk0
> 
> Links:
>  - libtpms: https://github.com/stefanberger/libtpms/wiki
>  - swtpm: https://github.com/stefanberger/swtpm/wiki

Applied to ppc-for-5.0, thanks.

> 
> Changes:
>  v8->v9:
>   - Allocating buffer now so we can use VMSTATE_VBUFFER_UINT32 for the regular
>     buffer (no more suspend buffer)
> 
>  v7->v8:
>   - Folded documentation patch into 3rd patch
>   - Added Marc-André's patch to end of series
> 
>  v6->v7:
>   - Implemented get_dt_compatible() and using it
>   - Moved tpm_this_show_buffer to tpm_util.c
> 
>  v5->v6:
>   - adjusted names of structures and simplified
>   - only transmitting min. necessary bytes to pass to VM after resume
>   - addressed other issues pointed out by D. Gibson
> 
>  v4->v5:
>   - use runstate_check(RUN_STATE_FINISH_MIGRATE) to check whether devices
>     are suspending; ditch 3 patches in this series that tried to do similar
> 
>  v3->v4:
>   - addressed comments to v3
>   - reworked suspend/resume support that requires extensions to backends
> 
>  v2->v3:
>   - patch 1: a TPM 2 is identified by IBM,vtpm20 in the compatible node
>   - patch 1: convert to tracing to display Tx and Rx buffers
>   - added documentation patch
>   - added patch to enable TPM device as part of pSeries
> 
>  v1->v2:
>   - followed Cedric Le Goater's suggestions to patch 1
>   - send appropriate CRQ error responses if DMA read or write fails
>   - renamed tpm_spapr_got_payload to tpm_spapr_process_cmd and
>     pass endianess-adjusted data pointer from CRQ to it
> 
> Regards,
>     Stefan
> 
> 
> Marc-André Lureau (1):
>   docs/specs/tpm: reST-ify TPM documentation
> 
> Stefan Berger (5):
>   tpm: Move tpm_tis_show_buffer to tpm_util.c
>   spapr: Implement get_dt_compatible() callback
>   tpm_spapr: Support TPM for ppc64 using CRQ based interface
>   tpm_spapr: Support suspend and resume
>   hw/ppc/Kconfig: Enable TPM_SPAPR as part of PSERIES config
> 
>  docs/specs/index.rst       |   1 +
>  docs/specs/tpm.rst         | 503 +++++++++++++++++++++++++++++++++++++
>  docs/specs/tpm.txt         | 427 -------------------------------
>  hw/ppc/Kconfig             |   1 +
>  hw/ppc/spapr_vio.c         |  11 +-
>  hw/tpm/Kconfig             |   6 +
>  hw/tpm/Makefile.objs       |   1 +
>  hw/tpm/tpm_spapr.c         | 429 +++++++++++++++++++++++++++++++
>  hw/tpm/tpm_tis.c           |  32 +--
>  hw/tpm/tpm_util.c          |  25 ++
>  hw/tpm/tpm_util.h          |   3 +
>  hw/tpm/trace-events        |  16 +-
>  include/hw/ppc/spapr_vio.h |   1 +
>  include/sysemu/tpm.h       |   3 +
>  qapi/tpm.json              |   6 +-
>  15 files changed, 1004 insertions(+), 461 deletions(-)
>  create mode 100644 docs/specs/tpm.rst
>  delete mode 100644 docs/specs/tpm.txt
>  create mode 100644 hw/tpm/tpm_spapr.c
> 

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson