All of lore.kernel.org
 help / color / mirror / Atom feed
From: Igor Mammedov <imammedo@redhat.com>
To: "Marc-André Lureau" <marcandre.lureau@gmail.com>
Cc: Stefan Berger <stefanb@linux.vnet.ibm.com>,
	Eduardo Habkost <ehabkost@redhat.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	QEMU <qemu-devel@nongnu.org>, Paolo Bonzini <pbonzini@redhat.com>,
	Richard Henderson <rth@twiddle.net>
Subject: Re: [Qemu-devel] [PATCH v5 3/4] acpi: add fw_cfg file for TPM and PPI virtual memory device
Date: Thu, 28 Jun 2018 15:06:30 +0200	[thread overview]
Message-ID: <20180628150630.2ce03743@redhat.com> (raw)
In-Reply-To: <CAJ+F1CJMfaC04c7UW31ASWoZYJK8VhfLuPK2qCiAp3TNF0Oitw@mail.gmail.com>

On Thu, 28 Jun 2018 14:42:34 +0200
Marc-André Lureau <marcandre.lureau@gmail.com> wrote:

> Hi
> 
> On Wed, Jun 27, 2018 at 4:26 PM, Igor Mammedov <imammedo@redhat.com> wrote:
> > On Wed, 27 Jun 2018 08:59:55 -0400
> > Stefan Berger <stefanb@linux.vnet.ibm.com> wrote:
> >  
> >> On 06/27/2018 08:01 AM, Igor Mammedov wrote:  
> >> > On Tue, 26 Jun 2018 14:23:42 +0200
> >> > Marc-André Lureau <marcandre.lureau@redhat.com> wrote:
> >> >  
> >> >> 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>
> >> >>
> >> >> ---
> >> >>
> >> >> v4:
> >> >>   - add ACPI only if PPI is enabled
> >> >> v3:
> >> >>   - renamed to etc/tpm/config, made it static, document it
> >> >> ---
> >> >>   include/hw/acpi/tpm.h |  3 +++
> >> >>   hw/i386/acpi-build.c  | 19 +++++++++++++++++++
> >> >>   docs/specs/tpm.txt    | 20 ++++++++++++++++++++
> >> >>   3 files changed, 42 insertions(+)
> >> >>
> >> >> diff --git a/include/hw/acpi/tpm.h b/include/hw/acpi/tpm.h
> >> >> index c082df7d1d..f79d68a77a 100644
> >> >> --- a/include/hw/acpi/tpm.h
> >> >> +++ b/include/hw/acpi/tpm.h
> >> >> @@ -193,4 +193,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 9bc6d97ea1..d9320845ed 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;  
> >> > is 32bit enough (what if on ARM or somewhere else area would be above 4Gb)?
> >> > to be future proof I'd make it 64bit field so we won't have to change ABI
> >> > later on.
> >> >  
> >> >> +    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);
> >> >> @@ -2873,6 +2879,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");
> >> >> @@ -2907,6 +2915,17 @@ void acpi_setup(void)  
> >> > what about vart-arm machine?
> >> > (it also has some TPM stuff but it doesn't use acpi_setup())
> >> > maybe add common helper and reuse it for both?  
> >>
> >> I have never used ARM with it. I am not sure whether the firmware on ARM
> >> is instrumented to have support for PPI. If someone wanted to enable
> >> that, I would leave these parts up to them.
> >>  
> >> >
> >> >  
> >> >>       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 = cpu_to_le32(tpm_get_version(tpm_find())),  
> >> > Have it actually been tested on big endian host?  
> >>
> >> At some point I did, yes.
> >>  
> >> >  
> >> >> +            .tpmppi_version = cpu_to_le32(TPM_PPI_VERSION_NONE)  
> >> > ditto
> >> >
> >> > (that's why I don't welcome packed structures in random places)  
> >>
> >> I thought a packed structure at least ensures that the offsets of the
> >> fields are agreed upon by 32 and 64bit, no ? So the firmware can use 64
> >> bit or 32bit and the offsets would be ensured.  
> >
> > I think layout for this structure is:
> >   0-3 : tpmppi_address
> >     4 : tpm_version
> >     5 : tpmppi_version
> >
> > but that's not a problem,
> >
> >   unit8_t foo = cpu_to_le32(bar)
> >
> > wouldn't it produce different results depending on host endianness?  
> 
> My understanding of C conversion from longer int to shorter ones is
> that excessive higher order bits are dropped.
> 
> I think we could just remove the cpu_to_le32() call.
Yep, that should fix the bug

  reply	other threads:[~2018-06-28 13:06 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-26 12:23 [Qemu-devel] [PATCH v5 0/4] Add support for TPM Physical Presence interface Marc-André Lureau
2018-06-26 12:23 ` [Qemu-devel] [PATCH v5 1/4] tpm: add a "ppi" boolean property Marc-André Lureau
2018-06-27 11:32   ` Igor Mammedov
2018-06-26 12:23 ` [Qemu-devel] [PATCH v5 2/4] tpm: implement virtual memory device for TPM PPI Marc-André Lureau
2018-06-27 11:44   ` Igor Mammedov
2018-06-27 12:53     ` Stefan Berger
2018-06-27 14:19       ` Igor Mammedov
2018-06-27 14:29         ` Marc-André Lureau
2018-06-27 15:10           ` Igor Mammedov
2018-06-27 14:36         ` Stefan Berger
2018-06-27 15:05           ` Igor Mammedov
2018-06-27 16:08             ` Laszlo Ersek
2018-06-26 12:23 ` [Qemu-devel] [PATCH v5 3/4] acpi: add fw_cfg file for TPM and PPI virtual memory device Marc-André Lureau
2018-06-27 12:01   ` Igor Mammedov
2018-06-27 12:59     ` Stefan Berger
2018-06-27 14:26       ` Igor Mammedov
2018-06-28 12:42         ` Marc-André Lureau
2018-06-28 13:06           ` Igor Mammedov [this message]
2018-06-26 12:23 ` [Qemu-devel] [PATCH v5 4/4] acpi: build TPM Physical Presence interface Marc-André Lureau
2018-06-26 18:57   ` Michael S. Tsirkin
2018-06-27 13:19   ` Igor Mammedov
2018-06-27 14:06     ` Stefan Berger
2018-06-27 14:29       ` Igor Mammedov
2018-06-28 15:24     ` Marc-André Lureau
2018-06-28 15:53       ` Stefan Berger
2018-06-29 14:09       ` Igor Mammedov
2018-06-29 14:19         ` Marc-André Lureau

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=20180628150630.2ce03743@redhat.com \
    --to=imammedo@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=marcandre.lureau@gmail.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    --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 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.