[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3 1/2] acpi: Make TPM version configurable.
- To: Jan Beulich <jbeulich@xxxxxxxx>
- From: Jennifer Herbert <jennifer.herbert@xxxxxxxxxx>
- Date: Tue, 2 May 2023 23:40:15 +0100
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=mlq3SnBA/2XciEPKI0qXHiISzju/CjJhWkRkawbwRwk=; b=E2eu+u4eIq+fS6OWReydzqs0MUv63TkR3RXJMMVqVsmO7lOdqE+P+DWiYjXVtLapLs12ZrwNpF1VgSvnmEMMLUzswUTECLWpApnFEVF8CmuZv8SWMiFY4jLA/8ZcYCX32CUsNn6k+jPRGXjn4VIDThWV0RsWSskrRi9xzDpqsp6aZZQh3sZC2bDhwsfHOQR//q8fO78snhzhaX5UxglrTj2Od1PISUTWTnHW66rSVwu9ynlwFCxUpGpU/FHbpJMFn+Mkwi6dxUWviYI8mDmmGZm0hF6W2ydbkBJoC6GZAtIsNJ8nzOCFxElX6ZWfJKrsgmxSUHXvFCHrdfta8rq4/A==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FhynCaDbmxKP3i5Gsz3FwyM3xKKVa562v2Ee/d8QYLd0md19dchnifKlm9R2WOqMBEJLdUbVMXkbLC/O260MjJtMdmkZXwTLvi3aCiVZsqD2J/GSNeKaIgDKAJlXefMnEI3G+3v6hRJseHPn8bY6m46dhXBOMLJD38gg3ZnYcNyT48WSGotQcYwzOJwpZfS+k81/XIgBBWwcp3xYEaUX2vrTaky/J6ICl6LsyJ11mFD4inW2AkfTBXpCB9zbVWkztsLGNKC6aoz78PFnETApQ06kuD2nrra/Eow0/lEd/IGmcvDazF0gqIvSjnn0GHt/RoQgHfk8yPManXy7EV1XJA==
- Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
- Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxxx>
- Delivery-date: Tue, 02 May 2023 22:41:00 +0000
- Ironport-data: A9a23:3ILQr66FAqk+9ypsawsoVAxRtCPGchMFZxGqfqrLsTDasY5as4F+v mNJDzyHO/3ZNDP8eYhza9vj9kxXu8DQxtBjSQM6pSgxHi5G8cbLO4+Ufxz6V8+wwm8vb2o8t plDNYOQRCwQZiWBzvt4GuG59RGQ7YnRGvynTraCYnsrLeNdYH9JoQp5nOIkiZJfj9G8Agec0 fv/uMSaM1K+s9JOGjt8B5mr9VU+7ZwehBtC5gZlPa0T5geF/5UoJMl3yZ+ZfiOQrrZ8RoZWd 86bpJml82XQ+QsaC9/Nut4XpWVTH9Y+lSDX4pZnc/DKbipq/0Te4Y5iXBYoUm9Fii3hojxE4 I4lWapc6+seFvakdOw1C3G0GszlVEFM0OevzXOX6aR/w6BaGpdFLjoH4EweZOUlFuhL7W5m7 O4TDjQQdUm/rsWx7OyFEtYyupsCFZy+VG8fkikIITDxK98DGMqGb4CUoNhS0XE3m9xEGuvYa 4wBcz1zYR/cYhpJfFAKFJY5m+TujX76G9FagAvN+exrvC6OnUooj+WF3Nn9I7RmQe1Xk0Cep 2zL5SL5DwsQOcaD4TGE7mitlqnEmiaTtIc6TeXmqqYy3gHIroAVIBJOCFaGk/mBsHajXPYCd UsvpRE37pFnoSRHSfG4BXVUukWsvBQRRt5RGO0S8xyWx+zf5APxLngJSHtNZcIrsOcyRCc2z RmZktXxHzttvbaJD3WH+d+pQSiaPCEUKSoOYHECRA5cud37+ths01TIU8ppF7OzgpvtAzbsz juWrS84wbIOkcoM0Kb99lfC696xmqX0oscOzl2/dgqYAslRPeZJu6TABYDn0Mt9
- Ironport-hdrordr: A9a23:EeK/za7YLSgKAYek3QPXwOTXdLJyesId70hD6qkXc3Bom62j+P xG+c5x6faaslgssR0b+OxoWpPwIk80hKQU3WB5B97LNmTbUQCTXeNfBOXZslvdMhy72ulB1b pxN4hSYeeAdGSSVPyKhDVQxexQp+Wv+qauguvV0ndqSgFmApsQijtENg==
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
On 02/05/2023 12:54, Jan Beulich wrote:
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?
Yes, ok.
--- 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.
Seems likely. And i few other wacky values would give you 1.2 as well
I'd think. There could also be trailing junk on the version number.
I was a bit phased by the lack of any real error cases in
hvmloader_acpi_build_tables. It seemed the approch was if you put in
junk, you'll get something, but possibly not what your expecting.
Do I take it you'd prefer it to only accept a strict '1' for 1.2 and any
other value would result in no TPM being probed? Or is it only the
overflow cases your concerned about?
+ switch( config->tpm_version )
Nit: Style (missing blank).
yup
--- 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.
I'm not awair of anything, but your comment 2 lines down from version 2
made me think you knew of some. So if your happy with me removing this
line, I am!
Jan
|