diff mbox series

[40/42] acpi: change TPM TIS data conditions

Message ID 20171009225623.29232-41-marcandre.lureau@redhat.com
State New
Headers show
Series TPM: code cleanup & CRB device | expand

Commit Message

Marc-André Lureau Oct. 9, 2017, 10:56 p.m. UTC
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.lureau@redhat.com>
---
 include/sysemu/tpm.h |  3 +++
 hw/i386/acpi-build.c | 12 ++++++++----
 2 files changed, 11 insertions(+), 4 deletions(-)

Comments

Stefan Berger Oct. 10, 2017, 6:22 p.m. UTC | #1
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.lureau@redhat.com>

Reviewed-by: Stefan Berger <stefanb@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);
diff mbox series

Patch

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);