mirror of https://github.com/xemu-project/xemu.git
hw/riscv: Enable TPM backends
Imply the TPM sysbus devices. This allows users to add TPM devices to the RISC-V virt board. This was tested by first creating an emulated TPM device: swtpm socket --tpm2 -t -d --tpmstate dir=/tmp/tpm \ --ctrl type=unixio,path=swtpm-sock Then launching QEMU with: -chardev socket,id=chrtpm,path=swtpm-sock \ -tpmdev emulator,id=tpm0,chardev=chrtpm \ -device tpm-tis-device,tpmdev=tpm0 The TPM device can be seen in the memory tree and the generated device tree. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/942 Signed-off-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Edgar E. Iglesias <edgar.iglesias@amd.com> Reviewed-by: Bin Meng <bmeng.cn@gmail.com> Message-Id: <20220427234146.1130752-7-alistair.francis@opensource.wdc.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
58d5a5a78c
commit
325b7c4e75
|
@ -162,3 +162,23 @@ The minimal QEMU commands to run U-Boot SPL are:
|
||||||
To test 32-bit U-Boot images, switch to use qemu-riscv32_smode_defconfig and
|
To test 32-bit U-Boot images, switch to use qemu-riscv32_smode_defconfig and
|
||||||
riscv32_spl_defconfig builds, and replace ``qemu-system-riscv64`` with
|
riscv32_spl_defconfig builds, and replace ``qemu-system-riscv64`` with
|
||||||
``qemu-system-riscv32`` in the command lines above to boot the 32-bit U-Boot.
|
``qemu-system-riscv32`` in the command lines above to boot the 32-bit U-Boot.
|
||||||
|
|
||||||
|
Enabling TPM
|
||||||
|
------------
|
||||||
|
|
||||||
|
A TPM device can be connected to the virt board by following the steps below.
|
||||||
|
|
||||||
|
First launch the TPM emulator
|
||||||
|
|
||||||
|
swtpm socket --tpm2 -t -d --tpmstate dir=/tmp/tpm \
|
||||||
|
--ctrl type=unixio,path=swtpm-sock
|
||||||
|
|
||||||
|
Then launch QEMU with:
|
||||||
|
|
||||||
|
...
|
||||||
|
-chardev socket,id=chrtpm,path=swtpm-sock \
|
||||||
|
-tpmdev emulator,id=tpm0,chardev=chrtpm \
|
||||||
|
-device tpm-tis-device,tpmdev=tpm0
|
||||||
|
|
||||||
|
The TPM device can be seen in the memory tree and the generated device
|
||||||
|
tree and should be accessible from the guest software.
|
||||||
|
|
|
@ -34,6 +34,7 @@ config RISCV_VIRT
|
||||||
imply PCI_DEVICES
|
imply PCI_DEVICES
|
||||||
imply VIRTIO_VGA
|
imply VIRTIO_VGA
|
||||||
imply TEST_DEVICES
|
imply TEST_DEVICES
|
||||||
|
imply TPM_TIS_SYSBUS
|
||||||
select RISCV_NUMA
|
select RISCV_NUMA
|
||||||
select GOLDFISH_RTC
|
select GOLDFISH_RTC
|
||||||
select MSI_NONBROKEN
|
select MSI_NONBROKEN
|
||||||
|
|
|
@ -43,6 +43,7 @@
|
||||||
#include "sysemu/device_tree.h"
|
#include "sysemu/device_tree.h"
|
||||||
#include "sysemu/sysemu.h"
|
#include "sysemu/sysemu.h"
|
||||||
#include "sysemu/kvm.h"
|
#include "sysemu/kvm.h"
|
||||||
|
#include "sysemu/tpm.h"
|
||||||
#include "hw/pci/pci.h"
|
#include "hw/pci/pci.h"
|
||||||
#include "hw/pci-host/gpex.h"
|
#include "hw/pci-host/gpex.h"
|
||||||
#include "hw/display/ramfb.h"
|
#include "hw/display/ramfb.h"
|
||||||
|
@ -1617,6 +1618,9 @@ static void virt_machine_class_init(ObjectClass *oc, void *data)
|
||||||
hc->plug = virt_machine_device_plug_cb;
|
hc->plug = virt_machine_device_plug_cb;
|
||||||
|
|
||||||
machine_class_allow_dynamic_sysbus_dev(mc, TYPE_RAMFB_DEVICE);
|
machine_class_allow_dynamic_sysbus_dev(mc, TYPE_RAMFB_DEVICE);
|
||||||
|
#ifdef CONFIG_TPM
|
||||||
|
machine_class_allow_dynamic_sysbus_dev(mc, TYPE_TPM_TIS_SYSBUS);
|
||||||
|
#endif
|
||||||
|
|
||||||
object_class_property_add_bool(oc, "aclint", virt_get_aclint,
|
object_class_property_add_bool(oc, "aclint", virt_get_aclint,
|
||||||
virt_set_aclint);
|
virt_set_aclint);
|
||||||
|
|
Loading…
Reference in New Issue