qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Igor Mammedov <imammedo@redhat.com>
To: Stefan Berger <stefanb@linux.vnet.ibm.com>
Cc: "Eduardo Habkost" <ehabkost@redhat.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	qemu-devel@nongnu.org, "Paolo Bonzini" <pbonzini@redhat.com>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Richard Henderson" <rth@twiddle.net>
Subject: Re: [Qemu-devel] [PATCH v4 4/5] acpi: build TPM Physical Presence interface
Date: Fri, 22 Jun 2018 15:56:42 +0200	[thread overview]
Message-ID: <20180622155642.3f05423b@redhat.com> (raw)
In-Reply-To: <aa7b8eb8-3353-cac1-8c17-43f928cc3ff6@linux.vnet.ibm.com>

On Fri, 22 Jun 2018 09:26:45 -0400
Stefan Berger <stefanb@linux.vnet.ibm.com> wrote:

> On 06/22/2018 05:03 AM, Igor Mammedov wrote:
> > I'd prefer a table format to describe layout, like in
> > docs/specs/acpi_nvdimm.txt or docs/specs/acpi_mem_hotplug.txt  
> 
> diff --git a/docs/specs/tpm.txt b/docs/specs/tpm.txt
> index c230c4c93e..5bf4e892a0 100644
> --- a/docs/specs/tpm.txt
> +++ b/docs/specs/tpm.txt
> @@ -42,6 +42,76 @@ URL:
> 
>   https://trustedcomputinggroup.org/tcg-acpi-specification/
> 
> +== ACPI PPI Interface ==
> +
> +QEMU supports the Physical Presence Interface (PPI) for TPM 1.2 and TPM 
> 2. This
> +interface requires ACPI and firmware support. The specification can be 
> found at
> +the following URL:
> +
> +https://trustedcomputinggroup.org/resource/tcg-physical-presence-interface-specification/
> +
> +PPI enables a system administrator (root) to request a modification to the
> +TPM upon reboot. The PPI specification defines the operation requests 
> and the
> +actions the firmware has to take. The system administrator passes the 
> operation
> +request number to the firmware through an ACPI interface which writes this
> +number to a memory location that the firmware knows. Upon reboot, the 
> firmware
> +finds the number and sends commands to the the TPM. The firmware writes 
> the TPM
> +result code and the operation request number to a memory location that 
> ACPI can
> +read from and pass the result on to the administrator.
> +
> +The PPI specification defines a set of mandatory and optional 
> operations for
> +the firmware to implement. The ACPI interface also allows an 
> administrator to
> +list the supported operations. In QEMU the ACPI code is generated by 
> QEMU, yet
> +the firmware needs to implement support on a per-operations basis, and
> +different firmwares may support a different subset. Therefore, QEMU 
> introduces
> +the virtual memory device for PPI where the firmware can indicate which
> +operations it supports and ACPI can enable the ones that are supported and
> +disable all others. This interface lies in main memory and has the 
> following
what about usecase when it's mapped in isa address space?
  tpm_tis_realizefn() ->
       tpm_ppi_init_io(&s->ppi, isa_address_space(ISA_DEVICE(dev))

> +layout:
> +
> + +----------+--------+--------+-------------------------------------------+
> +   |  Field   | Length | Offset | Description               |
> + +----------+--------+--------+-------------------------------------------+
> +   | func     |  0x100 |  0x000 | Firmware sets values for each 
> supported   |
> +   |          |        |        | operation. See defined values 
> below.      |
> + +----------+--------+--------+-------------------------------------------+
> +   | ppin     |   0x1  |  0x100 | SMI interrupt to use. Set by 
> firmware.    |
> +   |          |        |        | Not 
> supported.                            |
> + +----------+--------+--------+-------------------------------------------+
> +   | ppip     |   0x4  |  0x101 | ACPI function index to pass to SMM 
> code.  |
> +   |          |        |        | Set by ACPI. Not 
> supported.               |
> + +----------+--------+--------+-------------------------------------------+
> +   | pprp     |   0x4  |  0x105 | Result of last executed operation. 
> Set by |
> +   |          |        |        | 
> firmware.                                 |
> + +----------+--------+--------+-------------------------------------------+
> +   | pprq     |   0x4  |  0x109 | Operation request number to execute. 
> Set  |
> +   |          |        |        | by 
> ACPI.                                  |
> + +----------+--------+--------+-------------------------------------------+
> +   | pprm     |   0x4  |  0x10d | Operation request optional parameter. 
> Set |
> +   |          |        |        | by 
> ACPI.                                  |
> + +----------+--------+--------+-------------------------------------------+
> +   | lppr     |   0x4  |  0x111 | Last execute request number. Set 
> by       |
> +   |          |        |        | 
> firmware.                                 |
> + +----------+--------+--------+-------------------------------------------+
> +   | fret     |   0x4  |  0x115 | Result code from SMM 
> function.            |
> +   |          |        |        | Not 
> supported.                            |
> + +----------+--------+--------+-------------------------------------------+
> +   | res1     |  0x40  |  0x119 | Reserved for future 
> use                   |
> + +----------+--------+--------+-------------------------------------------+
> +   | next_step|   0x1  |  0x159 | Operation to execute after reboot 
> by      |
> +   |          |        |        | firmware. Used by 
> firmware.               |
> + +----------+--------+--------+-------------------------------------------+
if there is relevant match/description in PPI spec for above fields
it would be better to put reference to it in description fields and
as field name that could be easily grepped for in PPI spec,
like we we do with ACPI primitives:

  "ACPI 1.0b: 16.2.5.1 Namespace Modifier Objects Encoding: DefScope"

so reader could easily match spec with parts he/she is interested in.

> +
> +   The following values are supported for the 'func' field. They correspond
> +   to the values used by ACPI function index 8.
> +
> +    #define TPM_PPI_FUNC_NOT_IMPLEMENTED     (0 << 0)
> +    #define TPM_PPI_FUNC_BIOS_ONLY           (1 << 0)
> +    #define TPM_PPI_FUNC_BLOCKED             (2 << 0)
> +    #define TPM_PPI_FUNC_ALLOWED_USR_REQ     (3 << 0)
> +    #define TPM_PPI_FUNC_ALLOWED_USR_NOT_REQ (4 << 0)
> +    #define TPM_PPI_FUNC_MASK                (7 << 0)
> +

looks good to me
PS:
maybe drop #define part and make a table from it too so reader
won't have to do shift on his own, like

  0x0  | function is not implemented
  0x1  | ...
  ...


>   QEMU files related to TPM ACPI tables:
>    - hw/i386/acpi-build.c
> 

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

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-21 11:55 [Qemu-devel] [PATCH v4 0/5] Add support for TPM Physical Presence interface Marc-André Lureau
2018-06-21 11:55 ` [Qemu-devel] [PATCH v4 1/5] tpm: add a "ppi" boolean property Marc-André Lureau
2018-06-21 12:11   ` Stefan Berger
2018-06-21 12:19     ` Stefan Berger
2018-06-28 11:21     ` Marc-André Lureau
2018-06-21 11:55 ` [Qemu-devel] [PATCH v4 2/5] tpm: implement virtual memory device for TPM PPI Marc-André Lureau
2018-06-21 12:10   ` Stefan Berger
2018-06-21 12:24     ` Marc-André Lureau
2018-06-21 11:55 ` [Qemu-devel] [PATCH v4 3/5] acpi: add fw_cfg file for TPM and PPI virtual memory device Marc-André Lureau
2018-06-21 11:55 ` [Qemu-devel] [PATCH v4 4/5] acpi: build TPM Physical Presence interface Marc-André Lureau
2018-06-21 20:11   ` Stefan Berger
2018-06-22  9:03     ` Igor Mammedov
2018-06-22 13:26       ` Stefan Berger
2018-06-22 13:56         ` Igor Mammedov [this message]
2018-06-22 14:23           ` Stefan Berger
2018-06-25  9:31             ` Igor Mammedov
2018-06-25 13:57               ` Stefan Berger
2018-06-25 14:23               ` Stefan Berger
2018-06-21 11:55 ` [Qemu-devel] [PATCH v4 5/5] tpm: add a fake ACPI memory clear interface 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=20180622155642.3f05423b@redhat.com \
    --to=imammedo@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=marcandre.lureau@redhat.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 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).