|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 1/2] acpi: Make TPM version configurable.
On 25.04.2023 19:47, Jennifer Herbert wrote:
> This patch makes the TPM version, for which the ACPI libary probes,
> configurable.
> If acpi_config.tpm_verison is set to 1, it indicates that 1.2 (TCPA) should
> be probed.
> I have also added to hvmloader an option to allow setting this new config,
> which can
> be triggered by setting the platform/tpm_version xenstore key.
>
> Signed-off-by: Jennifer Herbert <jennifer.herbert@xxxxxxxxxx>
> ---
> docs/misc/xenstore-paths.pandoc | 9 +++++
> tools/firmware/hvmloader/util.c | 19 ++++++---
> tools/libacpi/build.c | 69 +++++++++++++++++++--------------
> tools/libacpi/libacpi.h | 3 +-
> 4 files changed, 64 insertions(+), 36 deletions(-)
Please can you get used to providing a brief rev log somewhere here?
> --- a/tools/firmware/hvmloader/util.c
> +++ b/tools/firmware/hvmloader/util.c
> @@ -994,13 +994,22 @@ void hvmloader_acpi_build_tables(struct acpi_config
> *config,
> if ( !strncmp(xenstore_read("platform/acpi_laptop_slate", "0"), "1", 1)
> )
> config->table_flags |= ACPI_HAS_SSDT_LAPTOP_SLATE;
>
> - config->table_flags |= (ACPI_HAS_TCPA | ACPI_HAS_IOAPIC |
> - ACPI_HAS_WAET | ACPI_HAS_PMTIMER |
> - ACPI_HAS_BUTTONS | ACPI_HAS_VGA |
> - ACPI_HAS_8042 | ACPI_HAS_CMOS_RTC);
> + config->table_flags |= (ACPI_HAS_IOAPIC | ACPI_HAS_WAET |
> + ACPI_HAS_PMTIMER | ACPI_HAS_BUTTONS |
> + ACPI_HAS_VGA | ACPI_HAS_8042 |
> + ACPI_HAS_CMOS_RTC);
> config->acpi_revision = 4;
>
> - config->tis_hdr = (uint16_t *)ACPI_TIS_HDR_ADDRESS;
> + s = xenstore_read("platform/tpm_version", "1");
> + config->tpm_version = strtoll(s, NULL, 0);
Due to field width, someone specifying 257 will also get a 1.2 TPM,
if I'm not mistaken.
> + switch( config->tpm_version )
Nit: Style (missing blank).
> --- a/tools/libacpi/build.c
> +++ b/tools/libacpi/build.c
> @@ -409,38 +409,47 @@ static int construct_secondary_tables(struct acpi_ctxt
> *ctxt,
> memcpy(ssdt, ssdt_laptop_slate, sizeof(ssdt_laptop_slate));
> table_ptrs[nr_tables++] = ctxt->mem_ops.v2p(ctxt, ssdt);
> }
> -
> - /* TPM TCPA and SSDT. */
> - if ( (config->table_flags & ACPI_HAS_TCPA) &&
> - (config->tis_hdr[0] != 0 && config->tis_hdr[0] != 0xffff) &&
> - (config->tis_hdr[1] != 0 && config->tis_hdr[1] != 0xffff) )
> + /* TPM and its SSDT. */
> + if ( config->table_flags & ACPI_HAS_TPM )
> {
> - ssdt = ctxt->mem_ops.alloc(ctxt, sizeof(ssdt_tpm), 16);
> - if (!ssdt) return -1;
> - memcpy(ssdt, ssdt_tpm, sizeof(ssdt_tpm));
> - table_ptrs[nr_tables++] = ctxt->mem_ops.v2p(ctxt, ssdt);
> -
> - tcpa = ctxt->mem_ops.alloc(ctxt, sizeof(struct acpi_20_tcpa), 16);
> - if (!tcpa) return -1;
> - memset(tcpa, 0, sizeof(*tcpa));
> - table_ptrs[nr_tables++] = ctxt->mem_ops.v2p(ctxt, tcpa);
> -
> - tcpa->header.signature = ACPI_2_0_TCPA_SIGNATURE;
> - tcpa->header.length = sizeof(*tcpa);
> - tcpa->header.revision = ACPI_2_0_TCPA_REVISION;
> - fixed_strcpy(tcpa->header.oem_id, ACPI_OEM_ID);
> - fixed_strcpy(tcpa->header.oem_table_id, ACPI_OEM_TABLE_ID);
> - tcpa->header.oem_revision = ACPI_OEM_REVISION;
> - tcpa->header.creator_id = ACPI_CREATOR_ID;
> - tcpa->header.creator_revision = ACPI_CREATOR_REVISION;
> - if ( (lasa = ctxt->mem_ops.alloc(ctxt, ACPI_2_0_TCPA_LAML_SIZE, 16))
> != NULL )
> + switch ( config->tpm_version )
> {
> - tcpa->lasa = ctxt->mem_ops.v2p(ctxt, lasa);
> - tcpa->laml = ACPI_2_0_TCPA_LAML_SIZE;
> - memset(lasa, 0, tcpa->laml);
> - set_checksum(tcpa,
> - offsetof(struct acpi_header, checksum),
> - tcpa->header.length);
> + case 0: /* Assume legacy code wanted tpm 1.2 */
Along the lines of what Jason said: Unless this is known to be needed for
anything, I'd prefer if it was omitted.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |