All of lore.kernel.org
 help / color / mirror / Atom feed
From: Igor Mammedov <imammedo@redhat.com>
To: Eric Auger <eric.auger@redhat.com>
Cc: peter.maydell@linaro.org, thuth@redhat.com, drjones@redhat.com,
	mst@redhat.com, lersek@redhat.com, qemu-devel@nongnu.org,
	shannon.zhaosl@gmail.com, qemu-arm@nongnu.org,
	marcandre.lureau@redhat.com, eric.auger.pro@gmail.com,
	philmd@redhat.com, ardb@kernel.org, stefanb@linux.ibm.com
Subject: Re: [PATCH v6 1/3] acpi: Some build_tpm2() code reshape
Date: Mon, 22 Jun 2020 14:51:54 +0200	[thread overview]
Message-ID: <20200622145154.07f1b3de@redhat.com> (raw)
In-Reply-To: <20200619141851.16272-2-eric.auger@redhat.com>

On Fri, 19 Jun 2020 16:18:49 +0200
Eric Auger <eric.auger@redhat.com> wrote:

> Remove any reference to Acpi20TPM2 and adopt an implementation
> similar to build_ghes_v2().
> 
> Signed-off-by: Eric Auger <eric.auger@redhat.com>
> Suggested-by: Igor Mammedov <imammedo@redhat.com>

with struct Acpi20TPM2 removed completely and pointer to the spec as we discussed ealier

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> 
> ---
> 
> v5 -> v6:
> - add reference to the spec + comment about LAML and LASA fields
> - also moved LASA intro comment above build_append_int_noprefix()
>   as requested by Igor
> ---
>  hw/acpi/aml-build.c | 54 +++++++++++++++++++++++++++++----------------
>  1 file changed, 35 insertions(+), 19 deletions(-)
> 
> diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c
> index 2cb7b991ef..1cc08a3eb9 100644
> --- a/hw/acpi/aml-build.c
> +++ b/hw/acpi/aml-build.c
> @@ -1878,48 +1878,64 @@ build_hdr:
>                   "FACP", tbl->len - fadt_start, f->rev, oem_id, oem_table_id);
>  }
>  
> +/*
> + * build_tpm2 - Build the TPM2 table as specified in table 7 of
> + * "TCG ACPI Specification; Family 1.2 and 2.0;
> + * Level 00 Revision 00.37, December 19, 2014"
> + * Note: the LASA and LAML fields are optional for TPM-2.0 (the above
> + * table does not mention them) but are needed at least for SeaBIOS.
> + * See the Acpi20TPM2 struct for the corresponding layout.
> + */
>  void build_tpm2(GArray *table_data, BIOSLinker *linker, GArray *tcpalog)
>  {
> -    Acpi20TPM2 *tpm2_ptr = acpi_data_push(table_data, sizeof(AcpiTableHeader));
> -    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;
>      uint8_t start_method_params[12] = {};
> +    unsigned log_addr_offset, tpm2_start;
> +    uint64_t control_area_start_address;
>      TPMIf *tpmif = tpm_find();
> +    uint32_t start_method;
> +    void *tpm2_ptr;
>  
> -    /* platform class */
> +    tpm2_start = table_data->len;
> +    tpm2_ptr = acpi_data_push(table_data, sizeof(AcpiTableHeader));
> +
> +    /* Platform Class */
>      build_append_int_noprefix(table_data, TPM2_ACPI_CLASS_CLIENT, 2);
> -    /* reserved */
> +    /* Reserved */
>      build_append_int_noprefix(table_data, 0, 2);
>      if (TPM_IS_TIS_ISA(tpmif) || TPM_IS_TIS_SYSBUS(tpmif)) {
> -        /* address of control area */
> -        build_append_int_noprefix(table_data, 0, 8);
> -        /* start method */
> -        build_append_int_noprefix(table_data, TPM2_START_METHOD_MMIO, 4);
> +        control_area_start_address = 0;
> +        start_method = TPM2_START_METHOD_MMIO;
>      } else if (TPM_IS_CRB(tpmif)) {
> -        build_append_int_noprefix(table_data, TPM_CRB_ADDR_CTRL, 8);
> -        build_append_int_noprefix(table_data, TPM2_START_METHOD_CRB, 4);
> +        control_area_start_address = TPM_CRB_ADDR_CTRL;
> +        start_method = TPM2_START_METHOD_CRB;
>      } else {
> -        g_warn_if_reached();
> +        g_assert_not_reached();
>      }
> +    /* Address of Control Area */
> +    build_append_int_noprefix(table_data, control_area_start_address, 8);
> +    /* Start Method */
> +    build_append_int_noprefix(table_data, start_method, 4);
>  
> -    /* platform specific parameters */
> -    g_array_append_vals(table_data, &start_method_params, 12);
> +    /* Platform Specific Parameters */
> +    g_array_append_vals(table_data, &start_method_params,
> +                        ARRAY_SIZE(start_method_params));
>  
> -    /* log area minimum length */
> +    /* Log Area Minimum Length */
>      build_append_int_noprefix(table_data, TPM_LOG_AREA_MINIMUM_SIZE, 4);
>  
>      acpi_data_push(tcpalog, TPM_LOG_AREA_MINIMUM_SIZE);
>      bios_linker_loader_alloc(linker, ACPI_BUILD_TPMLOG_FILE, tcpalog, 1,
>                               false);
>  
> -    /* log area start address to be filled by Guest linker */
> +    log_addr_offset = table_data->len;
> +
> +    /* Log Area Start Address to be filled by Guest linker */
>      build_append_int_noprefix(table_data, 0, 8);
>      bios_linker_loader_add_pointer(linker, ACPI_BUILD_TABLE_FILE,
> -                                   log_addr_offset, log_addr_size,
> +                                   log_addr_offset, 8,
>                                     ACPI_BUILD_TPMLOG_FILE, 0);
>      build_header(linker, table_data,
> -                 (void *)tpm2_ptr, "TPM2", sizeof(*tpm2_ptr), 4, NULL, NULL);
> +                 tpm2_ptr, "TPM2", table_data->len - tpm2_start, 4, NULL, NULL);
>  }
>  
>  /* ACPI 5.0: 6.4.3.8.2 Serial Bus Connection Descriptors */


  parent reply	other threads:[~2020-06-22 12:52 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-19 14:18 [PATCH v6 0/3] vTPM/aarch64 ACPI support Eric Auger
2020-06-19 14:18 ` [PATCH v6 1/3] acpi: Some build_tpm2() code reshape Eric Auger
2020-06-19 15:07   ` Stefan Berger
2020-06-19 15:34     ` Auger Eric
2020-06-19 16:09   ` Stefan Berger
2020-06-19 16:14     ` Auger Eric
2020-06-22 12:51   ` Igor Mammedov [this message]
2020-06-19 14:18 ` [PATCH v6 2/3] arm/acpi: Add the TPM2.0 device under the DSDT Eric Auger
2020-06-22 12:48   ` Igor Mammedov
2020-06-19 14:18 ` [PATCH v6 3/3] docs/specs/tpm: ACPI boot now supported for TPM/ARM Eric Auger
2020-06-19 16:10   ` Stefan Berger
2020-06-22 12:47   ` Igor Mammedov
2020-06-19 15:13 ` [PATCH v6 0/3] vTPM/aarch64 ACPI support no-reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200622145154.07f1b3de@redhat.com \
    --to=imammedo@redhat.com \
    --cc=ardb@kernel.org \
    --cc=drjones@redhat.com \
    --cc=eric.auger.pro@gmail.com \
    --cc=eric.auger@redhat.com \
    --cc=lersek@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=mst@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=philmd@redhat.com \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=shannon.zhaosl@gmail.com \
    --cc=stefanb@linux.ibm.com \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.