Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1300339 > unrolled thread

Re: [PATCH v3 1/7] tpm_crb: Use the common ACPI definition of struct acpi_tpm2

Started byJarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
First post2016-01-03 18:10 +0100
Last post2016-01-04 19:50 +0100
Articles 3 — 2 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  Re: [PATCH v3 1/7] tpm_crb: Use the common ACPI definition of struct  acpi_tpm2 Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com> - 2016-01-03 18:10 +0100
    Re: [PATCH v3 1/7] tpm_crb: Use the common ACPI definition of struct  acpi_tpm2 Jason Gunthorpe <jgunthorpe@obsidianresearch.com> - 2016-01-04 19:30 +0100
      Re: [PATCH v3 1/7] tpm_crb: Use the common ACPI definition of struct  acpi_tpm2 Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com> - 2016-01-04 19:50 +0100

#1300339 — Re: [PATCH v3 1/7] tpm_crb: Use the common ACPI definition of struct acpi_tpm2

FromJarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Date2016-01-03 18:10 +0100
SubjectRe: [PATCH v3 1/7] tpm_crb: Use the common ACPI definition of struct acpi_tpm2
Message-ID<qMUki-8e4-7@gated-at.bofh.it>
On Thu, Dec 17, 2015 at 11:23:14AM -0700, Jason Gunthorpe wrote:
> include/acpi/actbl2.h is the proper place for these definitions
> and the needed TPM2 ones have been there since
> commit 413d4a6defe0 ("ACPICA: Update TPM2 ACPI table")
> 
> This also drops a couple of le32_to_cpu's for members of this table,
> the existing swapping was not done consistently, and the definitions
> in actbl2.h do not have endianness annotations, declaring that no swap
> is required. Note that the TPM ACPI spec defines all of these
> values to be little endian, both in crb2 and ppi.

I think this patch mixes two separate changes to the driver: removing
l32_to_cpu's and moving to common headers and that is not right.

Even if they should be removed I think what you say about actbl2.h is
wrong. Annotations are probably missing because it is imported code (I'm
happy to be corrected if this is not the case).

/Jarkko

> Signed-off-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
> Tested-by: Wilck, Martin <martin.wilck@ts.fujitsu.com>
> Tested-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
> ---
>  drivers/char/tpm/tpm.h     |  7 -------
>  drivers/char/tpm/tpm_crb.c | 31 +++++++++----------------------
>  drivers/char/tpm/tpm_tis.c |  2 +-
>  3 files changed, 10 insertions(+), 30 deletions(-)
> 
> diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
> index 542a80cbfd9c..28b477e8da6a 100644
> --- a/drivers/char/tpm/tpm.h
> +++ b/drivers/char/tpm/tpm.h
> @@ -128,13 +128,6 @@ enum tpm2_startup_types {
>  	TPM2_SU_STATE	= 0x0001,
>  };
>  
> -enum tpm2_start_method {
> -	TPM2_START_ACPI = 2,
> -	TPM2_START_FIFO = 6,
> -	TPM2_START_CRB = 7,
> -	TPM2_START_CRB_WITH_ACPI = 8,
> -};
> -
>  struct tpm_chip;
>  
>  struct tpm_vendor_specific {
> diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
> index 8342cf51ffdc..8dd70696ebe8 100644
> --- a/drivers/char/tpm/tpm_crb.c
> +++ b/drivers/char/tpm/tpm_crb.c
> @@ -34,14 +34,6 @@ enum crb_defaults {
>  	CRB_ACPI_START_INDEX = 1,
>  };
>  
> -struct acpi_tpm2 {
> -	struct acpi_table_header hdr;
> -	u16 platform_class;
> -	u16 reserved;
> -	u64 control_area_pa;
> -	u32 start_method;
> -} __packed;
> -
>  enum crb_ca_request {
>  	CRB_CA_REQ_GO_IDLE	= BIT(0),
>  	CRB_CA_REQ_CMD_READY	= BIT(1),
> @@ -207,7 +199,7 @@ static const struct tpm_class_ops tpm_crb = {
>  static int crb_acpi_add(struct acpi_device *device)
>  {
>  	struct tpm_chip *chip;
> -	struct acpi_tpm2 *buf;
> +	struct acpi_table_tpm2 *buf;
>  	struct crb_priv *priv;
>  	struct device *dev = &device->dev;
>  	acpi_status status;
> @@ -217,13 +209,14 @@ static int crb_acpi_add(struct acpi_device *device)
>  
>  	status = acpi_get_table(ACPI_SIG_TPM2, 1,
>  				(struct acpi_table_header **) &buf);
> -	if (ACPI_FAILURE(status)) {
> -		dev_err(dev, "failed to get TPM2 ACPI table\n");
> +	if (ACPI_FAILURE(status) || buf->header.length < sizeof(*buf)) {
> +		dev_err(dev, FW_BUG "failed to get TPM2 ACPI table\n");
>  		return -ENODEV;
>  	}
>  
>  	/* Should the FIFO driver handle this? */
> -	if (buf->start_method == TPM2_START_FIFO)
> +	sm = buf->start_method;
> +	if (sm == ACPI_TPM2_MEMORY_MAPPED)
>  		return -ENODEV;
>  
>  	chip = tpmm_chip_alloc(dev, &tpm_crb);
> @@ -232,11 +225,6 @@ static int crb_acpi_add(struct acpi_device *device)
>  
>  	chip->flags = TPM_CHIP_FLAG_TPM2;
>  
> -	if (buf->hdr.length < sizeof(struct acpi_tpm2)) {
> -		dev_err(dev, "TPM2 ACPI table has wrong size");
> -		return -EINVAL;
> -	}
> -
>  	priv = (struct crb_priv *) devm_kzalloc(dev, sizeof(struct crb_priv),
>  						GFP_KERNEL);
>  	if (!priv) {
> @@ -244,21 +232,20 @@ static int crb_acpi_add(struct acpi_device *device)
>  		return -ENOMEM;
>  	}
>  
> -	sm = le32_to_cpu(buf->start_method);
> -
>  	/* The reason for the extra quirk is that the PTT in 4th Gen Core CPUs
>  	 * report only ACPI start but in practice seems to require both
>  	 * ACPI start and CRB start.
>  	 */
> -	if (sm == TPM2_START_CRB || sm == TPM2_START_FIFO ||
> +	if (sm == ACPI_TPM2_COMMAND_BUFFER || sm == ACPI_TPM2_MEMORY_MAPPED ||
>  	    !strcmp(acpi_device_hid(device), "MSFT0101"))
>  		priv->flags |= CRB_FL_CRB_START;
>  
> -	if (sm == TPM2_START_ACPI || sm == TPM2_START_CRB_WITH_ACPI)
> +	if (sm == ACPI_TPM2_START_METHOD ||
> +	    sm == ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD)
>  		priv->flags |= CRB_FL_ACPI_START;
>  
>  	priv->cca = (struct crb_control_area __iomem *)
> -		devm_ioremap_nocache(dev, buf->control_area_pa, 0x1000);
> +		devm_ioremap_nocache(dev, buf->control_address, 0x1000);
>  	if (!priv->cca) {
>  		dev_err(dev, "ioremap of the control area failed\n");
>  		return -ENOMEM;
> diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
> index 8a3509cb10da..304323bdcaaa 100644
> --- a/drivers/char/tpm/tpm_tis.c
> +++ b/drivers/char/tpm/tpm_tis.c
> @@ -135,7 +135,7 @@ static inline int is_fifo(struct acpi_device *dev)
>  		return 0;
>  	}
>  
> -	if (le32_to_cpu(tbl->start_method) != TPM2_START_FIFO)
> +	if (tbl->start_method != ACPI_TPM2_MEMORY_MAPPED)
>  		return 0;
>  
>  	/* TPM 2.0 FIFO */
> -- 
> 2.1.4
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [next] | [standalone]


#1300932

FromJason Gunthorpe <jgunthorpe@obsidianresearch.com>
Date2016-01-04 19:30 +0100
Message-ID<qNi3g-76n-11@gated-at.bofh.it>
In reply to#1300339
On Sun, Jan 03, 2016 at 07:09:06PM +0200, Jarkko Sakkinen wrote:
> On Thu, Dec 17, 2015 at 11:23:14AM -0700, Jason Gunthorpe wrote:
> > include/acpi/actbl2.h is the proper place for these definitions
> > and the needed TPM2 ones have been there since
> > commit 413d4a6defe0 ("ACPICA: Update TPM2 ACPI table")
> > 
> > This also drops a couple of le32_to_cpu's for members of this table,
> > the existing swapping was not done consistently, and the definitions
> > in actbl2.h do not have endianness annotations, declaring that no swap
> > is required. Note that the TPM ACPI spec defines all of these
> > values to be little endian, both in crb2 and ppi.
> 
> I think this patch mixes two separate changes to the driver: removing
> l32_to_cpu's and moving to common headers and that is not right.

No, it is only one change: Move to the common kernel way of working
with these structures.

> Even if they should be removed I think what you say about actbl2.h is
> wrong. Annotations are probably missing because it is imported code (I'm
> happy to be corrected if this is not the case).

Edit the comments if you like.

Annotations are missing because BE is not supported at all, nothing to
do with imported code.

Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1300961

FromJarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Date2016-01-04 19:50 +0100
Message-ID<qNimC-7d3-7@gated-at.bofh.it>
In reply to#1300932
On Mon, Jan 04, 2016 at 11:23:17AM -0700, Jason Gunthorpe wrote:
> On Sun, Jan 03, 2016 at 07:09:06PM +0200, Jarkko Sakkinen wrote:
> > On Thu, Dec 17, 2015 at 11:23:14AM -0700, Jason Gunthorpe wrote:
> > > include/acpi/actbl2.h is the proper place for these definitions
> > > and the needed TPM2 ones have been there since
> > > commit 413d4a6defe0 ("ACPICA: Update TPM2 ACPI table")
> > > 
> > > This also drops a couple of le32_to_cpu's for members of this table,
> > > the existing swapping was not done consistently, and the definitions
> > > in actbl2.h do not have endianness annotations, declaring that no swap
> > > is required. Note that the TPM ACPI spec defines all of these
> > > values to be little endian, both in crb2 and ppi.
> > 
> > I think this patch mixes two separate changes to the driver: removing
> > l32_to_cpu's and moving to common headers and that is not right.
> 
> No, it is only one change: Move to the common kernel way of working
> with these structures.

I'm now cool with this.

> > Even if they should be removed I think what you say about actbl2.h is
> > wrong. Annotations are probably missing because it is imported code (I'm
> > happy to be corrected if this is not the case).
> 
> Edit the comments if you like.
> 
> Annotations are missing because BE is not supported at all, nothing to
> do with imported code.

The code change is OK but the argumentation in the commit messsage is
bogus.

ACPICA will probably do the conversions internally when moved to BE
architecture as I now remember we discussed in December. That's the
only right argument to rip off le32_to_cpu()'s.

Missing annotations are not related of BE support being missing or not.
ACPICA cannot use Linux annotations in it APIs because it is imported
code but can use in the Linux driver for it (drivers/acpi) for
internals.

> Jason

/Jarkko
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web