qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] acpi: Update TPM2 ACPI table to more recent spe


From: Marc-André Lureau
Subject: Re: [Qemu-devel] [PATCH] acpi: Update TPM2 ACPI table to more recent specs
Date: Fri, 22 Dec 2017 15:38:15 +0100

On Fri, Dec 22, 2017 at 3:35 PM, Stefan Berger
<address@hidden> wrote:
> From: Stefan Berger <Stefan Berger address@hidden>
>
> More recent specs of the TPM2 ACPI table add fields for the log area
> start address and the log area minimum size, which we already use
> for the TCPA table.
>
> Signed-off-by: Stefan Berger <address@hidden>

I think ACPI tables change shouldn't fail migration, since tables are
loaded by firmware,

Reviewed-by: Marc-André Lureau <address@hidden>

> ---
>  hw/i386/acpi-build.c        | 19 ++++++++++++++-----
>  include/hw/acpi/acpi-defs.h |  7 +++++--
>  2 files changed, 19 insertions(+), 7 deletions(-)
>
> diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
> index 5a6dee0..18b939e 100644
> --- a/hw/i386/acpi-build.c
> +++ b/hw/i386/acpi-build.c
> @@ -2274,16 +2274,25 @@ build_tpm_tcpa(GArray *table_data, BIOSLinker 
> *linker, GArray *tcpalog)
>  }
>
>  static void
> -build_tpm2(GArray *table_data, BIOSLinker *linker)
> +build_tpm2(GArray *table_data, BIOSLinker *linker, GArray *tcpalog)
>  {
> -    Acpi20TPM2 *tpm2_ptr;
> -
> -    tpm2_ptr = acpi_data_push(table_data, sizeof *tpm2_ptr);
> +    Acpi20TPM2 *tpm2_ptr = acpi_data_push(table_data, sizeof *tpm2_ptr);
> +    unsigned log_addr_size = sizeof(tpm2_ptr->log_area_start_address);
> +    unsigned log_addr_offset =
> +        (char *)&tpm2_ptr->log_area_start_address - table_data->data;
>
>      tpm2_ptr->platform_class = cpu_to_le16(TPM2_ACPI_CLASS_CLIENT);
>      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);
> +
> +        tpm2_ptr->log_area_minimum_length =
> +            cpu_to_le32(TPM_LOG_AREA_MINIMUM_SIZE);
> +
> +        /* log area start address to be filled by Guest linker */
> +        bios_linker_loader_add_pointer(linker,
> +            ACPI_BUILD_TABLE_FILE, log_addr_offset, log_addr_size,
> +            ACPI_BUILD_TPMLOG_FILE, 0);
>      } else {
>          g_warn_if_reached();
>      }
> @@ -2695,7 +2704,7 @@ void acpi_build(AcpiBuildTables *tables, MachineState 
> *machine)
>
>          if (misc.tpm_version == TPM_VERSION_2_0) {
>              acpi_add_table(table_offsets, tables_blob);
> -            build_tpm2(tables_blob, tables->linker);
> +            build_tpm2(tables_blob, tables->linker, tables->tcpalog);
>          }
>      }
>      if (pcms->numa_nodes) {
> diff --git a/include/hw/acpi/acpi-defs.h b/include/hw/acpi/acpi-defs.h
> index 72be675..80c8099 100644
> --- a/include/hw/acpi/acpi-defs.h
> +++ b/include/hw/acpi/acpi-defs.h
> @@ -558,8 +558,8 @@ typedef struct Acpi20Tcpa Acpi20Tcpa;
>  /*
>   * TPM2
>   *
> - * Following Level 00, Rev 00.37 of specs:
> - * http://www.trustedcomputinggroup.org/resources/tcg_acpi_specification
> + * Following Version 1.2, Revision 8 of specs:
> + * https://trustedcomputinggroup.org/tcg-acpi-specification/
>   */
>  struct Acpi20TPM2 {
>      ACPI_TABLE_HEADER_DEF
> @@ -567,6 +567,9 @@ struct Acpi20TPM2 {
>      uint16_t reserved;
>      uint64_t control_area_address;
>      uint32_t start_method;
> +    uint8_t start_method_params[12];
> +    uint32_t log_area_minimum_length;
> +    uint64_t log_area_start_address;
>  } QEMU_PACKED;
>  typedef struct Acpi20TPM2 Acpi20TPM2;
>
> --
> 2.5.5
>
>



-- 
Marc-André Lureau



reply via email to

[Prev in Thread] Current Thread [Next in Thread]