Re: [PATCH 2/2] tpm: support driver-specific sysfs attrs in tpm_tis_core

2016-07-18 Thread Jarkko Sakkinen
On Thu, Jul 14, 2016 at 08:35:30PM -0700, Andrey Pronin wrote:
> On Thu, Jul 14, 2016 at 09:23:27PM -0600, Jason Gunthorpe wrote:
> > On Thu, Jul 14, 2016 at 06:51:36PM -0700, Andrey Pronin wrote:
> > > - WARN_ON(chip->groups_cnt != 0);
> > 
> > Nope.
> > 
> > > - const struct attribute_group *groups[3];
> > > + /* up to 4 attribute groups:
> > > +  * - driver-specific
> > > +  * - common TPM1.2 and TPM2.0
> > > +  * - TPM1.2/2.0-specific
> > > +  * - ppi
> > > +  */
> > > + const struct attribute_group *groups[5];
> > 
> > The prior patch needed to have groups[4], every patch much work.
> > 
> > > + if (priv->phy_ops->attr_group)
> > > + chip->groups[chip->groups_cnt++] = priv->phy_ops->attr_group;
> > 
> > I am really not excited about having driver specific sysfs
> > files.
> > 
> > What is the justification for this?
> > 
> > Jason
> 
> Justification: give access to vendor-specific properties that are
> specific to a particular chip and its registers.

Please come with a vendor specific property or have this part of a
series where the need becomes somehow obvious so that we can talk about
a real problem and not in an abstract level.

Making user API vendor wobbling is almost over my dead body type of
thing but given the context there might be alternatives to consider.

I honestly don't understand why this was even bundled with TPM2 patch.

/Jarkko


Re: [PATCH 2/2] tpm: support driver-specific sysfs attrs in tpm_tis_core

2016-07-18 Thread Jarkko Sakkinen
On Thu, Jul 14, 2016 at 08:35:30PM -0700, Andrey Pronin wrote:
> On Thu, Jul 14, 2016 at 09:23:27PM -0600, Jason Gunthorpe wrote:
> > On Thu, Jul 14, 2016 at 06:51:36PM -0700, Andrey Pronin wrote:
> > > - WARN_ON(chip->groups_cnt != 0);
> > 
> > Nope.
> > 
> > > - const struct attribute_group *groups[3];
> > > + /* up to 4 attribute groups:
> > > +  * - driver-specific
> > > +  * - common TPM1.2 and TPM2.0
> > > +  * - TPM1.2/2.0-specific
> > > +  * - ppi
> > > +  */
> > > + const struct attribute_group *groups[5];
> > 
> > The prior patch needed to have groups[4], every patch much work.
> > 
> > > + if (priv->phy_ops->attr_group)
> > > + chip->groups[chip->groups_cnt++] = priv->phy_ops->attr_group;
> > 
> > I am really not excited about having driver specific sysfs
> > files.
> > 
> > What is the justification for this?
> > 
> > Jason
> 
> Justification: give access to vendor-specific properties that are
> specific to a particular chip and its registers.

Please come with a vendor specific property or have this part of a
series where the need becomes somehow obvious so that we can talk about
a real problem and not in an abstract level.

Making user API vendor wobbling is almost over my dead body type of
thing but given the context there might be alternatives to consider.

I honestly don't understand why this was even bundled with TPM2 patch.

/Jarkko


Re: [PATCH 2/2] tpm: support driver-specific sysfs attrs in tpm_tis_core

2016-07-18 Thread Andrey Pronin
On Mon, Jul 18, 2016 at 10:11:41PM +0300, Jarkko Sakkinen wrote:
> On Thu, Jul 14, 2016 at 06:51:36PM -0700, Andrey Pronin wrote:
> > Add attr_group to phy_ops that a driver relying on tpm_tis_core_init
> > can set to have its specific attributes registered in sysfs.
> > 
> > Signed-off-by: Andrey Pronin 
> > ---
> >  drivers/char/tpm/tpm-sysfs.c| 1 -
> >  drivers/char/tpm/tpm.h  | 8 +++-
> >  drivers/char/tpm/tpm_tis_core.c | 3 +++
> >  drivers/char/tpm/tpm_tis_core.h | 1 +
> >  4 files changed, 11 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/char/tpm/tpm-sysfs.c b/drivers/char/tpm/tpm-sysfs.c
> > index 95ce90d..22c9874 100644
> > --- a/drivers/char/tpm/tpm-sysfs.c
> > +++ b/drivers/char/tpm/tpm-sysfs.c
> > @@ -304,7 +304,6 @@ void tpm_sysfs_add_device(struct tpm_chip *chip)
> >  * is called before ops is null'd and the sysfs core synchronizes this
> >  * removal so that no callbacks are running or can run again
> >  */
> > -   WARN_ON(chip->groups_cnt != 0);
> 
> You should explain this in a commit message if you want to remove it.
> 
> In general, this make user space API vendor specific, which is
> unacceptable.
> 
> /Jarkko
>

I will drop the vendor-specific part of the patchset and just submit
tpm2-specific sysfs attributes in the next rev. WARN_ON will not be
removed.



Re: [PATCH 2/2] tpm: support driver-specific sysfs attrs in tpm_tis_core

2016-07-18 Thread Andrey Pronin
On Mon, Jul 18, 2016 at 10:11:41PM +0300, Jarkko Sakkinen wrote:
> On Thu, Jul 14, 2016 at 06:51:36PM -0700, Andrey Pronin wrote:
> > Add attr_group to phy_ops that a driver relying on tpm_tis_core_init
> > can set to have its specific attributes registered in sysfs.
> > 
> > Signed-off-by: Andrey Pronin 
> > ---
> >  drivers/char/tpm/tpm-sysfs.c| 1 -
> >  drivers/char/tpm/tpm.h  | 8 +++-
> >  drivers/char/tpm/tpm_tis_core.c | 3 +++
> >  drivers/char/tpm/tpm_tis_core.h | 1 +
> >  4 files changed, 11 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/char/tpm/tpm-sysfs.c b/drivers/char/tpm/tpm-sysfs.c
> > index 95ce90d..22c9874 100644
> > --- a/drivers/char/tpm/tpm-sysfs.c
> > +++ b/drivers/char/tpm/tpm-sysfs.c
> > @@ -304,7 +304,6 @@ void tpm_sysfs_add_device(struct tpm_chip *chip)
> >  * is called before ops is null'd and the sysfs core synchronizes this
> >  * removal so that no callbacks are running or can run again
> >  */
> > -   WARN_ON(chip->groups_cnt != 0);
> 
> You should explain this in a commit message if you want to remove it.
> 
> In general, this make user space API vendor specific, which is
> unacceptable.
> 
> /Jarkko
>

I will drop the vendor-specific part of the patchset and just submit
tpm2-specific sysfs attributes in the next rev. WARN_ON will not be
removed.



Re: [PATCH 2/2] tpm: support driver-specific sysfs attrs in tpm_tis_core

2016-07-18 Thread Jarkko Sakkinen
On Thu, Jul 14, 2016 at 06:51:36PM -0700, Andrey Pronin wrote:
> Add attr_group to phy_ops that a driver relying on tpm_tis_core_init
> can set to have its specific attributes registered in sysfs.
> 
> Signed-off-by: Andrey Pronin 
> ---
>  drivers/char/tpm/tpm-sysfs.c| 1 -
>  drivers/char/tpm/tpm.h  | 8 +++-
>  drivers/char/tpm/tpm_tis_core.c | 3 +++
>  drivers/char/tpm/tpm_tis_core.h | 1 +
>  4 files changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/char/tpm/tpm-sysfs.c b/drivers/char/tpm/tpm-sysfs.c
> index 95ce90d..22c9874 100644
> --- a/drivers/char/tpm/tpm-sysfs.c
> +++ b/drivers/char/tpm/tpm-sysfs.c
> @@ -304,7 +304,6 @@ void tpm_sysfs_add_device(struct tpm_chip *chip)
>* is called before ops is null'd and the sysfs core synchronizes this
>* removal so that no callbacks are running or can run again
>*/
> - WARN_ON(chip->groups_cnt != 0);

You should explain this in a commit message if you want to remove it.

In general, this make user space API vendor specific, which is
unacceptable.

/Jarkko

>   chip->groups[chip->groups_cnt++] = _dev_group;
>   if (chip->flags & TPM_CHIP_FLAG_TPM2)
>   chip->groups[chip->groups_cnt++] = _dev_group;
> diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
> index 8890df2..8c69649 100644
> --- a/drivers/char/tpm/tpm.h
> +++ b/drivers/char/tpm/tpm.h
> @@ -173,7 +173,13 @@ struct tpm_chip {
>  
>   struct dentry **bios_dir;
>  
> - const struct attribute_group *groups[3];
> + /* up to 4 attribute groups:
> +  * - driver-specific
> +  * - common TPM1.2 and TPM2.0
> +  * - TPM1.2/2.0-specific
> +  * - ppi
> +  */
> + const struct attribute_group *groups[5];
>   unsigned int groups_cnt;
>  #ifdef CONFIG_ACPI
>   acpi_handle acpi_dev_handle;
> diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c
> index 8110b52..6d5d8f4 100644
> --- a/drivers/char/tpm/tpm_tis_core.c
> +++ b/drivers/char/tpm/tpm_tis_core.c
> @@ -796,6 +796,9 @@ int tpm_tis_core_init(struct device *dev, struct 
> tpm_tis_data *priv, int irq,
>   }
>   }
>  
> + if (priv->phy_ops->attr_group)
> + chip->groups[chip->groups_cnt++] = priv->phy_ops->attr_group;
> +
>   return tpm_chip_register(chip);
>  out_err:
>   tpm_tis_remove(chip);
> diff --git a/drivers/char/tpm/tpm_tis_core.h b/drivers/char/tpm/tpm_tis_core.h
> index 9191aab..4417ed9 100644
> --- a/drivers/char/tpm/tpm_tis_core.h
> +++ b/drivers/char/tpm/tpm_tis_core.h
> @@ -95,6 +95,7 @@ struct tpm_tis_data {
>  };
>  
>  struct tpm_tis_phy_ops {
> + const struct attribute_group *attr_group;
>   int (*read_bytes)(struct tpm_tis_data *data, u32 addr, u16 len,
> u8 *result);
>   int (*write_bytes)(struct tpm_tis_data *data, u32 addr, u16 len,
> -- 
> 2.6.6
> 


Re: [PATCH 2/2] tpm: support driver-specific sysfs attrs in tpm_tis_core

2016-07-18 Thread Jarkko Sakkinen
On Thu, Jul 14, 2016 at 06:51:36PM -0700, Andrey Pronin wrote:
> Add attr_group to phy_ops that a driver relying on tpm_tis_core_init
> can set to have its specific attributes registered in sysfs.
> 
> Signed-off-by: Andrey Pronin 
> ---
>  drivers/char/tpm/tpm-sysfs.c| 1 -
>  drivers/char/tpm/tpm.h  | 8 +++-
>  drivers/char/tpm/tpm_tis_core.c | 3 +++
>  drivers/char/tpm/tpm_tis_core.h | 1 +
>  4 files changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/char/tpm/tpm-sysfs.c b/drivers/char/tpm/tpm-sysfs.c
> index 95ce90d..22c9874 100644
> --- a/drivers/char/tpm/tpm-sysfs.c
> +++ b/drivers/char/tpm/tpm-sysfs.c
> @@ -304,7 +304,6 @@ void tpm_sysfs_add_device(struct tpm_chip *chip)
>* is called before ops is null'd and the sysfs core synchronizes this
>* removal so that no callbacks are running or can run again
>*/
> - WARN_ON(chip->groups_cnt != 0);

You should explain this in a commit message if you want to remove it.

In general, this make user space API vendor specific, which is
unacceptable.

/Jarkko

>   chip->groups[chip->groups_cnt++] = _dev_group;
>   if (chip->flags & TPM_CHIP_FLAG_TPM2)
>   chip->groups[chip->groups_cnt++] = _dev_group;
> diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
> index 8890df2..8c69649 100644
> --- a/drivers/char/tpm/tpm.h
> +++ b/drivers/char/tpm/tpm.h
> @@ -173,7 +173,13 @@ struct tpm_chip {
>  
>   struct dentry **bios_dir;
>  
> - const struct attribute_group *groups[3];
> + /* up to 4 attribute groups:
> +  * - driver-specific
> +  * - common TPM1.2 and TPM2.0
> +  * - TPM1.2/2.0-specific
> +  * - ppi
> +  */
> + const struct attribute_group *groups[5];
>   unsigned int groups_cnt;
>  #ifdef CONFIG_ACPI
>   acpi_handle acpi_dev_handle;
> diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c
> index 8110b52..6d5d8f4 100644
> --- a/drivers/char/tpm/tpm_tis_core.c
> +++ b/drivers/char/tpm/tpm_tis_core.c
> @@ -796,6 +796,9 @@ int tpm_tis_core_init(struct device *dev, struct 
> tpm_tis_data *priv, int irq,
>   }
>   }
>  
> + if (priv->phy_ops->attr_group)
> + chip->groups[chip->groups_cnt++] = priv->phy_ops->attr_group;
> +
>   return tpm_chip_register(chip);
>  out_err:
>   tpm_tis_remove(chip);
> diff --git a/drivers/char/tpm/tpm_tis_core.h b/drivers/char/tpm/tpm_tis_core.h
> index 9191aab..4417ed9 100644
> --- a/drivers/char/tpm/tpm_tis_core.h
> +++ b/drivers/char/tpm/tpm_tis_core.h
> @@ -95,6 +95,7 @@ struct tpm_tis_data {
>  };
>  
>  struct tpm_tis_phy_ops {
> + const struct attribute_group *attr_group;
>   int (*read_bytes)(struct tpm_tis_data *data, u32 addr, u16 len,
> u8 *result);
>   int (*write_bytes)(struct tpm_tis_data *data, u32 addr, u16 len,
> -- 
> 2.6.6
> 


Re: [PATCH 2/2] tpm: support driver-specific sysfs attrs in tpm_tis_core

2016-07-14 Thread Andrey Pronin
On Thu, Jul 14, 2016 at 09:23:27PM -0600, Jason Gunthorpe wrote:
> On Thu, Jul 14, 2016 at 06:51:36PM -0700, Andrey Pronin wrote:
> > -   WARN_ON(chip->groups_cnt != 0);
> 
> Nope.
> 
> > -   const struct attribute_group *groups[3];
> > +   /* up to 4 attribute groups:
> > +* - driver-specific
> > +* - common TPM1.2 and TPM2.0
> > +* - TPM1.2/2.0-specific
> > +* - ppi
> > +*/
> > +   const struct attribute_group *groups[5];
> 
> The prior patch needed to have groups[4], every patch much work.
> 
> > +   if (priv->phy_ops->attr_group)
> > +   chip->groups[chip->groups_cnt++] = priv->phy_ops->attr_group;
> 
> I am really not excited about having driver specific sysfs
> files.
> 
> What is the justification for this?
> 
> Jason

Justification: give access to vendor-specific properties that are
specific to a particular chip and its registers.

Andrey


Re: [PATCH 2/2] tpm: support driver-specific sysfs attrs in tpm_tis_core

2016-07-14 Thread Andrey Pronin
On Thu, Jul 14, 2016 at 09:23:27PM -0600, Jason Gunthorpe wrote:
> On Thu, Jul 14, 2016 at 06:51:36PM -0700, Andrey Pronin wrote:
> > -   WARN_ON(chip->groups_cnt != 0);
> 
> Nope.
> 
> > -   const struct attribute_group *groups[3];
> > +   /* up to 4 attribute groups:
> > +* - driver-specific
> > +* - common TPM1.2 and TPM2.0
> > +* - TPM1.2/2.0-specific
> > +* - ppi
> > +*/
> > +   const struct attribute_group *groups[5];
> 
> The prior patch needed to have groups[4], every patch much work.
> 
> > +   if (priv->phy_ops->attr_group)
> > +   chip->groups[chip->groups_cnt++] = priv->phy_ops->attr_group;
> 
> I am really not excited about having driver specific sysfs
> files.
> 
> What is the justification for this?
> 
> Jason

Justification: give access to vendor-specific properties that are
specific to a particular chip and its registers.

Andrey


Re: [PATCH 2/2] tpm: support driver-specific sysfs attrs in tpm_tis_core

2016-07-14 Thread Jason Gunthorpe
On Thu, Jul 14, 2016 at 06:51:36PM -0700, Andrey Pronin wrote:
> - WARN_ON(chip->groups_cnt != 0);

Nope.

> - const struct attribute_group *groups[3];
> + /* up to 4 attribute groups:
> +  * - driver-specific
> +  * - common TPM1.2 and TPM2.0
> +  * - TPM1.2/2.0-specific
> +  * - ppi
> +  */
> + const struct attribute_group *groups[5];

The prior patch needed to have groups[4], every patch much work.

> + if (priv->phy_ops->attr_group)
> + chip->groups[chip->groups_cnt++] = priv->phy_ops->attr_group;

I am really not excited about having driver specific sysfs
files.

What is the justification for this?

Jason


Re: [PATCH 2/2] tpm: support driver-specific sysfs attrs in tpm_tis_core

2016-07-14 Thread Jason Gunthorpe
On Thu, Jul 14, 2016 at 06:51:36PM -0700, Andrey Pronin wrote:
> - WARN_ON(chip->groups_cnt != 0);

Nope.

> - const struct attribute_group *groups[3];
> + /* up to 4 attribute groups:
> +  * - driver-specific
> +  * - common TPM1.2 and TPM2.0
> +  * - TPM1.2/2.0-specific
> +  * - ppi
> +  */
> + const struct attribute_group *groups[5];

The prior patch needed to have groups[4], every patch much work.

> + if (priv->phy_ops->attr_group)
> + chip->groups[chip->groups_cnt++] = priv->phy_ops->attr_group;

I am really not excited about having driver specific sysfs
files.

What is the justification for this?

Jason


[PATCH 2/2] tpm: support driver-specific sysfs attrs in tpm_tis_core

2016-07-14 Thread Andrey Pronin
Add attr_group to phy_ops that a driver relying on tpm_tis_core_init
can set to have its specific attributes registered in sysfs.

Signed-off-by: Andrey Pronin 
---
 drivers/char/tpm/tpm-sysfs.c| 1 -
 drivers/char/tpm/tpm.h  | 8 +++-
 drivers/char/tpm/tpm_tis_core.c | 3 +++
 drivers/char/tpm/tpm_tis_core.h | 1 +
 4 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/char/tpm/tpm-sysfs.c b/drivers/char/tpm/tpm-sysfs.c
index 95ce90d..22c9874 100644
--- a/drivers/char/tpm/tpm-sysfs.c
+++ b/drivers/char/tpm/tpm-sysfs.c
@@ -304,7 +304,6 @@ void tpm_sysfs_add_device(struct tpm_chip *chip)
 * is called before ops is null'd and the sysfs core synchronizes this
 * removal so that no callbacks are running or can run again
 */
-   WARN_ON(chip->groups_cnt != 0);
chip->groups[chip->groups_cnt++] = _dev_group;
if (chip->flags & TPM_CHIP_FLAG_TPM2)
chip->groups[chip->groups_cnt++] = _dev_group;
diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
index 8890df2..8c69649 100644
--- a/drivers/char/tpm/tpm.h
+++ b/drivers/char/tpm/tpm.h
@@ -173,7 +173,13 @@ struct tpm_chip {
 
struct dentry **bios_dir;
 
-   const struct attribute_group *groups[3];
+   /* up to 4 attribute groups:
+* - driver-specific
+* - common TPM1.2 and TPM2.0
+* - TPM1.2/2.0-specific
+* - ppi
+*/
+   const struct attribute_group *groups[5];
unsigned int groups_cnt;
 #ifdef CONFIG_ACPI
acpi_handle acpi_dev_handle;
diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c
index 8110b52..6d5d8f4 100644
--- a/drivers/char/tpm/tpm_tis_core.c
+++ b/drivers/char/tpm/tpm_tis_core.c
@@ -796,6 +796,9 @@ int tpm_tis_core_init(struct device *dev, struct 
tpm_tis_data *priv, int irq,
}
}
 
+   if (priv->phy_ops->attr_group)
+   chip->groups[chip->groups_cnt++] = priv->phy_ops->attr_group;
+
return tpm_chip_register(chip);
 out_err:
tpm_tis_remove(chip);
diff --git a/drivers/char/tpm/tpm_tis_core.h b/drivers/char/tpm/tpm_tis_core.h
index 9191aab..4417ed9 100644
--- a/drivers/char/tpm/tpm_tis_core.h
+++ b/drivers/char/tpm/tpm_tis_core.h
@@ -95,6 +95,7 @@ struct tpm_tis_data {
 };
 
 struct tpm_tis_phy_ops {
+   const struct attribute_group *attr_group;
int (*read_bytes)(struct tpm_tis_data *data, u32 addr, u16 len,
  u8 *result);
int (*write_bytes)(struct tpm_tis_data *data, u32 addr, u16 len,
-- 
2.6.6



[PATCH 2/2] tpm: support driver-specific sysfs attrs in tpm_tis_core

2016-07-14 Thread Andrey Pronin
Add attr_group to phy_ops that a driver relying on tpm_tis_core_init
can set to have its specific attributes registered in sysfs.

Signed-off-by: Andrey Pronin 
---
 drivers/char/tpm/tpm-sysfs.c| 1 -
 drivers/char/tpm/tpm.h  | 8 +++-
 drivers/char/tpm/tpm_tis_core.c | 3 +++
 drivers/char/tpm/tpm_tis_core.h | 1 +
 4 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/char/tpm/tpm-sysfs.c b/drivers/char/tpm/tpm-sysfs.c
index 95ce90d..22c9874 100644
--- a/drivers/char/tpm/tpm-sysfs.c
+++ b/drivers/char/tpm/tpm-sysfs.c
@@ -304,7 +304,6 @@ void tpm_sysfs_add_device(struct tpm_chip *chip)
 * is called before ops is null'd and the sysfs core synchronizes this
 * removal so that no callbacks are running or can run again
 */
-   WARN_ON(chip->groups_cnt != 0);
chip->groups[chip->groups_cnt++] = _dev_group;
if (chip->flags & TPM_CHIP_FLAG_TPM2)
chip->groups[chip->groups_cnt++] = _dev_group;
diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
index 8890df2..8c69649 100644
--- a/drivers/char/tpm/tpm.h
+++ b/drivers/char/tpm/tpm.h
@@ -173,7 +173,13 @@ struct tpm_chip {
 
struct dentry **bios_dir;
 
-   const struct attribute_group *groups[3];
+   /* up to 4 attribute groups:
+* - driver-specific
+* - common TPM1.2 and TPM2.0
+* - TPM1.2/2.0-specific
+* - ppi
+*/
+   const struct attribute_group *groups[5];
unsigned int groups_cnt;
 #ifdef CONFIG_ACPI
acpi_handle acpi_dev_handle;
diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c
index 8110b52..6d5d8f4 100644
--- a/drivers/char/tpm/tpm_tis_core.c
+++ b/drivers/char/tpm/tpm_tis_core.c
@@ -796,6 +796,9 @@ int tpm_tis_core_init(struct device *dev, struct 
tpm_tis_data *priv, int irq,
}
}
 
+   if (priv->phy_ops->attr_group)
+   chip->groups[chip->groups_cnt++] = priv->phy_ops->attr_group;
+
return tpm_chip_register(chip);
 out_err:
tpm_tis_remove(chip);
diff --git a/drivers/char/tpm/tpm_tis_core.h b/drivers/char/tpm/tpm_tis_core.h
index 9191aab..4417ed9 100644
--- a/drivers/char/tpm/tpm_tis_core.h
+++ b/drivers/char/tpm/tpm_tis_core.h
@@ -95,6 +95,7 @@ struct tpm_tis_data {
 };
 
 struct tpm_tis_phy_ops {
+   const struct attribute_group *attr_group;
int (*read_bytes)(struct tpm_tis_data *data, u32 addr, u16 len,
  u8 *result);
int (*write_bytes)(struct tpm_tis_data *data, u32 addr, u16 len,
-- 
2.6.6