diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index b65fea084d98139de446415cf6e807b9b7429bdd..6a0110e91dd6aa859ecf0d6adcbc885bb581e92c 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -7625,7 +7625,8 @@ qemu-kvm -net nic,model=? /dev/null
The TPM device enables a QEMU guest to have access to TPM
- functionality.
+ functionality. The TPM device may either be a TPM 1.2 or
+ a TPM 2.
The TPM passthrough device type provides access to the host's TPM
@@ -7655,6 +7656,9 @@ qemu-kvm -net nic,model=? /dev/null
The model
attribute specifies what device
model QEMU provides to the guest. If no model name is provided,
tpm-tis
will automatically be chosen.
+ Since 4.4.0 , another available choice
+ is the tpm-crb
, which should only be used when the
+ backend device is a TPM 2.
backend
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 7c02edb7f8a3ff5c16ae21115eedc6b0b1152a4a..7bad7dd27b35c0bd687b0c7b769ee6f534cb7e3c 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -4115,7 +4115,10 @@
- tpm-tis
+
+ tpm-tis
+ tpm-crb
+
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index b0257068dabba1ffdccbdfd5000a391b8b492905..6a2e28a1e7d92850392ea9c3ec9fde370b8d1643 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -860,7 +860,8 @@ VIR_ENUM_IMPL(virDomainRNGBackend,
"egd");
VIR_ENUM_IMPL(virDomainTPMModel, VIR_DOMAIN_TPM_MODEL_LAST,
- "tpm-tis")
+ "tpm-tis",
+ "tpm-crb")
VIR_ENUM_IMPL(virDomainTPMBackend, VIR_DOMAIN_TPM_TYPE_LAST,
"passthrough")
@@ -12606,8 +12607,6 @@ virDomainTPMDefParseXML(virDomainXMLOptionPtr xmlopt,
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Unknown TPM frontend model '%s'"), model);
goto error;
- } else {
- def->model = VIR_DOMAIN_TPM_MODEL_TIS;
}
ctxt->node = node;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 3e135c63640fbf2bcbf27a4a85ac647444660923..4c4c50488797e5744370817baa4a93b8e681fecf 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1279,6 +1279,7 @@ struct _virDomainHubDef {
typedef enum {
VIR_DOMAIN_TPM_MODEL_TIS,
+ VIR_DOMAIN_TPM_MODEL_CRB,
VIR_DOMAIN_TPM_MODEL_LAST
} virDomainTPMModel;
diff --git a/tests/qemuxml2argvdata/tpm-passthrough-crb.xml b/tests/qemuxml2argvdata/tpm-passthrough-crb.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2fce5ca342513266c81a7065dfbe4a6fddd54d92
--- /dev/null
+++ b/tests/qemuxml2argvdata/tpm-passthrough-crb.xml
@@ -0,0 +1,32 @@
+
+ TPM-VM
+ 11d7cd22-da89-3094-6212-079a48a309a1
+ 2097152
+ 512288
+ 1
+
+ hvm
+
+
+
+
+
+
+
+ destroy
+ restart
+ destroy
+
+ /usr/bin/qemu-system-x86_64
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemuxml2xmloutdata/tpm-passthrough-crb.xml b/tests/qemuxml2xmloutdata/tpm-passthrough-crb.xml
new file mode 100644
index 0000000000000000000000000000000000000000..67ada46846eaccd4e675c52f168172bc19b85def
--- /dev/null
+++ b/tests/qemuxml2xmloutdata/tpm-passthrough-crb.xml
@@ -0,0 +1,36 @@
+
+ TPM-VM
+ 11d7cd22-da89-3094-6212-079a48a309a1
+ 2097152
+ 512288
+ 1
+
+ hvm
+
+
+
+
+
+
+
+ destroy
+ restart
+ destroy
+
+ /usr/bin/qemu-system-x86_64
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
index 4b5aa2315e5d61d46f8a2840aba09f7470ce4bbd..21fb4112471be5a8b34394e94c996979d036b224 100644
--- a/tests/qemuxml2xmltest.c
+++ b/tests/qemuxml2xmltest.c
@@ -672,6 +672,7 @@ mymain(void)
DO_TEST("usb-ich9-ehci-addr", NONE);
DO_TEST("disk-copy_on_read", NONE);
DO_TEST("tpm-passthrough", NONE);
+ DO_TEST("tpm-passthrough-crb", NONE);
DO_TEST("metadata", NONE);
DO_TEST("metadata-duplicate", NONE);