qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
	"Stefan Berger" <stefanb@linux.vnet.ibm.com>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Philippe Mathieu-Daudé" <philmd@redhat.com>,
	"Stefan Berger" <stefanb@linux.ibm.com>,
	"Igor Mammedov" <imammedo@redhat.com>,
	"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Richard Henderson" <rth@twiddle.net>,
	"Eduardo Habkost" <ehabkost@redhat.com>
Subject: [Qemu-devel] [PULL 39/44] acpi: expose TPM/PPI configuration parameters to firmware via fw_cfg
Date: Mon, 14 Jan 2019 20:37:14 -0500	[thread overview]
Message-ID: <20190115003812.11329-40-mst@redhat.com> (raw)
In-Reply-To: <20190115003812.11329-1-mst@redhat.com>

From: Stefan Berger <stefanb@linux.vnet.ibm.com>

To avoid having to hard code the base address of the PPI virtual
memory device we introduce a fw_cfg file etc/tpm/config that holds the
base address of the PPI device, the version of the PPI interface and
the version of the attached TPM.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
[ Marc-André: renamed to etc/tpm/config, made it static, document it ]
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Tested-by: Stefan Berger <stefanb@linux.ibm.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 docs/specs/tpm.txt    | 19 +++++++++++++++++++
 include/hw/acpi/tpm.h |  3 +++
 hw/i386/acpi-build.c  | 19 +++++++++++++++++++
 3 files changed, 41 insertions(+)

diff --git a/docs/specs/tpm.txt b/docs/specs/tpm.txt
index 1af82bba86..e4bb094700 100644
--- a/docs/specs/tpm.txt
+++ b/docs/specs/tpm.txt
@@ -34,6 +34,25 @@ The CRB interface makes a memory mapped IO region in the area 0xfed40000 -
 QEMU files related to TPM CRB interface:
  - hw/tpm/tpm_crb.c
 
+= fw_cfg interface =
+
+The bios/firmware may read the "etc/tpm/config" fw_cfg entry for
+configuring the guest appropriately.
+
+The entry of 6 bytes has the following content, in little-endian:
+
+    #define TPM_VERSION_UNSPEC          0
+    #define TPM_VERSION_1_2             1
+    #define TPM_VERSION_2_0             2
+
+    #define TPM_PPI_VERSION_NONE        0
+    #define TPM_PPI_VERSION_1_30        1
+
+    struct FwCfgTPMConfig {
+        uint32_t tpmppi_address;         /* PPI memory location */
+        uint8_t tpm_version;             /* TPM version */
+        uint8_t tpmppi_version;          /* PPI version */
+    };
 
 = ACPI Interface =
 
diff --git a/include/hw/acpi/tpm.h b/include/hw/acpi/tpm.h
index b8796df916..a6109a97fc 100644
--- a/include/hw/acpi/tpm.h
+++ b/include/hw/acpi/tpm.h
@@ -194,4 +194,7 @@ REG32(CRB_DATA_BUFFER, 0x80)
 #define TPM_PPI_ADDR_SIZE           0x400
 #define TPM_PPI_ADDR_BASE           0xFED45000
 
+#define TPM_PPI_VERSION_NONE        0
+#define TPM_PPI_VERSION_1_30        1
+
 #endif /* HW_ACPI_TPM_H */
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
index 14f757fc36..9898247705 100644
--- a/hw/i386/acpi-build.c
+++ b/hw/i386/acpi-build.c
@@ -119,6 +119,12 @@ typedef struct AcpiBuildPciBusHotplugState {
     bool pcihp_bridge_en;
 } AcpiBuildPciBusHotplugState;
 
+typedef struct FwCfgTPMConfig {
+    uint32_t tpmppi_address;
+    uint8_t tpm_version;
+    uint8_t tpmppi_version;
+} QEMU_PACKED FwCfgTPMConfig;
+
 static void init_common_fadt_data(Object *o, AcpiFadtData *data)
 {
     uint32_t io = object_property_get_uint(o, ACPI_PM_PROP_PM_IO_BASE, NULL);
@@ -2847,6 +2853,8 @@ void acpi_setup(void)
     AcpiBuildTables tables;
     AcpiBuildState *build_state;
     Object *vmgenid_dev;
+    TPMIf *tpm;
+    static FwCfgTPMConfig tpm_config;
 
     if (!pcms->fw_cfg) {
         ACPI_BUILD_DPRINTF("No fw cfg. Bailing out.\n");
@@ -2881,6 +2889,17 @@ void acpi_setup(void)
     fw_cfg_add_file(pcms->fw_cfg, ACPI_BUILD_TPMLOG_FILE,
                     tables.tcpalog->data, acpi_data_len(tables.tcpalog));
 
+    tpm = tpm_find();
+    if (tpm && object_property_get_bool(OBJECT(tpm), "ppi", &error_abort)) {
+        tpm_config = (FwCfgTPMConfig) {
+            .tpmppi_address = cpu_to_le32(TPM_PPI_ADDR_BASE),
+            .tpm_version = tpm_get_version(tpm),
+            .tpmppi_version = TPM_PPI_VERSION_NONE
+        };
+        fw_cfg_add_file(pcms->fw_cfg, "etc/tpm/config",
+                        &tpm_config, sizeof tpm_config);
+    }
+
     vmgenid_dev = find_vmgenid_dev();
     if (vmgenid_dev) {
         vmgenid_add_fw_cfg(VMGENID(vmgenid_dev), pcms->fw_cfg,
-- 
MST

  parent reply	other threads:[~2019-01-15  1:41 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-15  1:35 [Qemu-devel] [PULL 00/44] pci, pc, virtio: fixes, features Michael S. Tsirkin
2019-01-15  1:35 ` [Qemu-devel] [PULL 01/44] pci/pcie: stop plug/unplug if the slot is locked Michael S. Tsirkin
2019-01-15  1:35 ` [Qemu-devel] [PULL 02/44] msix: make pba size math more uniform Michael S. Tsirkin
2019-01-15  1:35 ` [Qemu-devel] [PULL 03/44] hw/misc/ivshmem: Remove deprecated "ivshmem" legacy device Michael S. Tsirkin
2019-01-15  1:35 ` [Qemu-devel] [PULL 04/44] qemu: avoid memory leak while remove disk Michael S. Tsirkin
2019-01-15  1:35 ` [Qemu-devel] [PULL 05/44] tests: vhost-user-test: initialize 'fd' in chr_read Michael S. Tsirkin
2019-01-15  1:35 ` [Qemu-devel] [PULL 06/44] vhost-user: fix ioeventfd_enabled Michael S. Tsirkin
2019-01-15  1:35 ` [Qemu-devel] [PULL 07/44] util: check the return value of fcntl in qemu_set_{block, nonblock} Michael S. Tsirkin
2019-01-15  1:35 ` [Qemu-devel] [PULL 08/44] tests: acpi: use AcpiSdtTable::aml in consistent way Michael S. Tsirkin
2019-01-15  1:35 ` [Qemu-devel] [PULL 09/44] tests: acpi: make sure FADT is fetched only once Michael S. Tsirkin
2019-01-15  1:35 ` [Qemu-devel] [PULL 10/44] tests: acpi: simplify rsdt handling Michael S. Tsirkin
2019-01-15  1:35 ` [Qemu-devel] [PULL 11/44] tests: acpi: reuse fetch_table() for fetching FACS and DSDT Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 12/44] tests: acpi: reuse fetch_table() in vmgenid-test Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 13/44] tests: smbios: fetch whole table in one step instead of reading it step by step Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 14/44] tests: acpi: squash sanitize_fadt_ptrs() into test_acpi_fadt_table() Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 15/44] tests: acpi: use AcpiSdtTable::aml instead of AcpiSdtTable::header::signature Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 16/44] virtio-net: support RSC v4/v6 tcp traffic for Windows HCK Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 17/44] virtio-net: changed VIRTIO_NET_F_RSC_EXT to be 61 Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 18/44] virtio: split vhost vsock bits from virtio-pci Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 19/44] virtio: split virtio input host " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 20/44] virtio: split virtio input " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 21/44] virtio: split virtio rng " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 22/44] virtio: split virtio balloon " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 23/44] virtio: split virtio 9p " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 24/44] virtio: split vhost user blk " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 25/44] virtio: split vhost user scsi " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 26/44] virtio: split vhost " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 27/44] virtio: split virtio " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 28/44] virtio: split virtio blk " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 29/44] virtio: split virtio net " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 30/44] virtio: split virtio serial " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 31/44] virtio: split virtio gpu bits from virtio-pci.h Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 32/44] virtio: split virtio crypto " Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 33/44] virtio: virtio 9p really requires CONFIG_VIRTFS to work Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 34/44] globals: Allow global properties to be optional Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 35/44] virtio: Make disable-legacy/disable-modern compat properties optional Michael S. Tsirkin
2019-01-15  1:36 ` [Qemu-devel] [PULL 36/44] hw/misc/edu: add msi_uninit() for pci_edu_uninit() Michael S. Tsirkin
2019-01-15  1:37 ` [Qemu-devel] [PULL 37/44] tpm: add a "ppi" boolean property Michael S. Tsirkin
2019-01-15  1:37 ` [Qemu-devel] [PULL 38/44] tpm: allocate/map buffer for TPM Physical Presence interface Michael S. Tsirkin
2019-01-15  1:37 ` Michael S. Tsirkin [this message]
2019-01-15  1:37 ` [Qemu-devel] [PULL 40/44] acpi: build " Michael S. Tsirkin
2019-01-15  1:37 ` [Qemu-devel] [PULL 41/44] acpi: add ACPI memory clear interface Michael S. Tsirkin
2019-01-15  1:37 ` [Qemu-devel] [PULL 42/44] tpm: clear RAM when "memory overwrite" requested Michael S. Tsirkin
2019-01-15  1:37 ` [Qemu-devel] [PULL 43/44] hw: acpi: Fix memory hotplug AML generation error Michael S. Tsirkin
2019-01-15  1:37 ` [Qemu-devel] [PULL 44/44] acpi: update expected files Michael S. Tsirkin
2019-01-15  5:38 ` [Qemu-devel] [PULL 00/44] pci, pc, virtio: fixes, features Peter Xu
2019-01-15 12:49   ` Michael S. Tsirkin

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=20190115003812.11329-40-mst@redhat.com \
    --to=mst@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=imammedo@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=philmd@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    --cc=stefanb@linux.ibm.com \
    --cc=stefanb@linux.vnet.ibm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).