On 10/09/2017 06:56 PM, Marc-André Lureau wrote:
The device should be exposed if present. It shouldn't have an
undefined version (or else backend init failed, and device should fail
too). Finally, make the fields specific to TIS device model.

Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com>

Reviewed-by: Stefan Berger <stef...@linux.vnet.ibm.com>


---
  include/sysemu/tpm.h |  3 +++
  hw/i386/acpi-build.c | 12 ++++++++----
  2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/include/sysemu/tpm.h b/include/sysemu/tpm.h
index 9439330cf1..8223ec621c 100644
--- a/include/sysemu/tpm.h
+++ b/include/sysemu/tpm.h
@@ -47,6 +47,9 @@ void tpm_cleanup(void);
#define TYPE_TPM_TIS "tpm-tis" +#define TPM_IS_TIS(chr) \
+    object_dynamic_cast(OBJECT(chr), TYPE_TPM_TIS)
+
  static inline TPMIf *tpm_find(void)
  {
      Object *obj = object_resolve_path_type("", TYPE_TPM_IF, NULL);
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
index 40371b6f75..ee38b00e31 100644
--- a/hw/i386/acpi-build.c
+++ b/hw/i386/acpi-build.c
@@ -2038,7 +2038,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker,
          }
      }
- if (misc->tpm_version != TPM_VERSION_UNSPEC) {
+    if (TPM_IS_TIS(tpm_find())) {
          aml_append(crs, aml_memory32_fixed(TPM_TIS_ADDR_BASE,
                     TPM_TIS_ADDR_SIZE, AML_READ_WRITE));
      }
@@ -2204,7 +2204,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker,
              /* Scan all PCI buses. Generate tables to support hotplug. */
              build_append_pci_bus_devices(scope, bus, pm->pcihp_bridge_en);
- if (misc->tpm_version != TPM_VERSION_UNSPEC) {
+            if (TPM_IS_TIS(tpm_find())) {
                  dev = aml_device("ISA.TPM");
                  aml_append(dev, aml_name_decl("_HID", aml_eisaid("PNP0C31")));
                  aml_append(dev, aml_name_decl("_STA", aml_int(0xF)));
@@ -2281,8 +2281,12 @@ build_tpm2(GArray *table_data, BIOSLinker *linker)
      tpm2_ptr = acpi_data_push(table_data, sizeof *tpm2_ptr);
tpm2_ptr->platform_class = cpu_to_le16(TPM2_ACPI_CLASS_CLIENT);
-    tpm2_ptr->control_area_address = cpu_to_le64(0);
-    tpm2_ptr->start_method = cpu_to_le32(TPM2_START_METHOD_MMIO);
+    if (TPM_IS_TIS(tpm_find())) {
+        tpm2_ptr->control_area_address = cpu_to_le64(0);
+        tpm2_ptr->start_method = cpu_to_le32(TPM2_START_METHOD_MMIO);
+    } else {
+        g_warn_if_reached();
+    }
build_header(linker, table_data,
                   (void *)tpm2_ptr, "TPM2", sizeof(*tpm2_ptr), 4, NULL, NULL);



Reply via email to