tpmdd-devel.lists.sourceforge.net archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/7] Remove the tpm_vendor_specific structure
@ 2016-03-26  7:00 Christophe Ricard
       [not found] ` <1458975615-8095-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
  0 siblings, 1 reply; 17+ messages in thread
From: Christophe Ricard @ 2016-03-26  7:00 UTC (permalink / raw)
  To: jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA
  Cc: jean-luc.blanc-qxv4g6HH51o, ashley-fm2HMyfA2y6tG0bUXCXiUA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
	christophe-h.ricard-qxv4g6HH51o, benoit.houyere-qxv4g6HH51o

Hi Jarkko,

This is the latest steps to cleanup tpm_vendor_specific structure.

I have also included some few obvious cleanup inside the drivers.
I have been able to test tpm_tis on a HP Desktop machine.

In v2 i have added a patch fixing:
'tpm: drop 'iobase' from struct tpm_vendor_specific' 691f211398bb93878b727be0c5c523e2371074f5

It may be merged with the mention commit.

Best Regards
Christophe


Christophe Ricard (7):
  tpm/tpm_atmel: drop remaining 'iobase' usage
  tpm: Remove useless priv field in struct tpm_vendor_specific
  tpm/tpm_i2c_atmel: simplify patch to get tpm_chip from an i2c_client
  tpm/tpm_i2c_atmel: Few code style fixes
  tpm: drop 'irq' from struct tpm_vendor_specific
  tpm: Move remaining tpm_vendor_specific structure data to tpm_chip
  tpm: drop 'read_queue' from struct tpm_vendor_specific

 drivers/char/tpm/st33zp24/i2c.c      |  15 ++-
 drivers/char/tpm/st33zp24/spi.c      |  15 ++-
 drivers/char/tpm/st33zp24/st33zp24.c | 113 ++++++++--------------
 drivers/char/tpm/st33zp24/st33zp24.h |   9 ++
 drivers/char/tpm/tpm-interface.c     |  52 +++++-----
 drivers/char/tpm/tpm-sysfs.c         |  20 ++--
 drivers/char/tpm/tpm.h               |  24 ++---
 drivers/char/tpm/tpm2-cmd.c          |   2 +-
 drivers/char/tpm/tpm_atmel.c         |  12 +--
 drivers/char/tpm/tpm_atmel.h         |   9 +-
 drivers/char/tpm/tpm_crb.c           |  12 +--
 drivers/char/tpm/tpm_i2c_atmel.c     |  30 +++---
 drivers/char/tpm/tpm_i2c_infineon.c  |  47 +++++----
 drivers/char/tpm/tpm_i2c_nuvoton.c   |  73 ++++++++------
 drivers/char/tpm/tpm_ibmvtpm.c       |  38 +++-----
 drivers/char/tpm/tpm_nsc.c           |  48 ++++-----
 drivers/char/tpm/tpm_tis.c           | 182 ++++++++++++++++++-----------------
 drivers/char/tpm/xen-tpmfront.c      |  36 +++----
 18 files changed, 356 insertions(+), 381 deletions(-)

-- 
2.5.0


------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH v2 1/7] tpm/tpm_atmel: drop remaining 'iobase' usage
       [not found] ` <1458975615-8095-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
@ 2016-03-26  7:00   ` Christophe Ricard
       [not found]     ` <1458975615-8095-2-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
  2016-03-26  7:00   ` [PATCH v2 2/7] tpm: Remove useless priv field in struct tpm_vendor_specific Christophe Ricard
                     ` (6 subsequent siblings)
  7 siblings, 1 reply; 17+ messages in thread
From: Christophe Ricard @ 2016-03-26  7:00 UTC (permalink / raw)
  To: jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA
  Cc: jean-luc.blanc-qxv4g6HH51o, ashley-fm2HMyfA2y6tG0bUXCXiUA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
	christophe-h.ricard-qxv4g6HH51o, benoit.houyere-qxv4g6HH51o

Remove some sporadic iobase

Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
---
 drivers/char/tpm/tpm_atmel.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/char/tpm/tpm_atmel.h b/drivers/char/tpm/tpm_atmel.h
index c5618ea..7e37c16 100644
--- a/drivers/char/tpm/tpm_atmel.h
+++ b/drivers/char/tpm/tpm_atmel.h
@@ -38,8 +38,8 @@ static inline struct tpm_atmel_priv *atmel_get_priv(struct tpm_chip *chip)
 
 #include <asm/prom.h>
 
-#define atmel_getb(chip, offset) readb(chip->vendor->iobase + offset);
-#define atmel_putb(val, chip, offset) writeb(val, chip->vendor->iobase + offset)
+#define atmel_getb(priv, offset) readb(priv->iobase + offset);
+#define atmel_putb(val, priv, offset) writeb(val, priv->iobase + offset)
 #define atmel_request_region request_mem_region
 #define atmel_release_region release_mem_region
 
-- 
2.5.0


------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 2/7] tpm: Remove useless priv field in struct tpm_vendor_specific
       [not found] ` <1458975615-8095-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
  2016-03-26  7:00   ` [PATCH v2 1/7] tpm/tpm_atmel: drop remaining 'iobase' usage Christophe Ricard
@ 2016-03-26  7:00   ` Christophe Ricard
       [not found]     ` <1458975615-8095-3-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
  2016-03-26  7:00   ` [PATCH v2 3/7] tpm/tpm_i2c_atmel: simplify patch to get tpm_chip from an i2c_client Christophe Ricard
                     ` (5 subsequent siblings)
  7 siblings, 1 reply; 17+ messages in thread
From: Christophe Ricard @ 2016-03-26  7:00 UTC (permalink / raw)
  To: jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA
  Cc: jean-luc.blanc-qxv4g6HH51o, ashley-fm2HMyfA2y6tG0bUXCXiUA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
	christophe-h.ricard-qxv4g6HH51o, benoit.houyere-qxv4g6HH51o

Remove useless priv field in struct tpm_vendor_specific and take benefit
of chip->dev.driver_data.

Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
---
 drivers/char/tpm/st33zp24/i2c.c      | 15 ++++++----
 drivers/char/tpm/st33zp24/spi.c      | 15 ++++++----
 drivers/char/tpm/st33zp24/st33zp24.c | 58 +++++++++---------------------------
 drivers/char/tpm/st33zp24/st33zp24.h |  7 +++++
 drivers/char/tpm/tpm.h               |  3 --
 drivers/char/tpm/tpm_atmel.c         | 12 ++++----
 drivers/char/tpm/tpm_atmel.h         |  5 ----
 drivers/char/tpm/tpm_crb.c           | 12 ++++----
 drivers/char/tpm/tpm_i2c_atmel.c     | 14 +++++----
 drivers/char/tpm/tpm_i2c_nuvoton.c   | 16 +++++-----
 drivers/char/tpm/tpm_ibmvtpm.c       | 38 +++++++----------------
 drivers/char/tpm/tpm_nsc.c           | 48 +++++++++++++++--------------
 drivers/char/tpm/tpm_tis.c           | 48 +++++++++++++++--------------
 drivers/char/tpm/xen-tpmfront.c      | 14 ++++-----
 14 files changed, 139 insertions(+), 166 deletions(-)

diff --git a/drivers/char/tpm/st33zp24/i2c.c b/drivers/char/tpm/st33zp24/i2c.c
index f8e8123..028a9cd 100644
--- a/drivers/char/tpm/st33zp24/i2c.c
+++ b/drivers/char/tpm/st33zp24/i2c.c
@@ -26,6 +26,7 @@
 #include <linux/tpm.h>
 #include <linux/platform_data/st33zp24.h>
 
+#include "../tpm.h"
 #include "st33zp24.h"
 
 #define TPM_DUMMY_BYTE			0xAA
@@ -112,7 +113,9 @@ static const struct st33zp24_phy_ops i2c_phy_ops = {
 
 static int st33zp24_i2c_acpi_request_resources(struct i2c_client *client)
 {
-	struct st33zp24_i2c_phy *phy = i2c_get_clientdata(client);
+	struct tpm_chip *chip = i2c_get_clientdata(client);
+	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
+	struct st33zp24_i2c_phy *phy = tpm_dev->phy_id;
 	struct gpio_desc *gpiod_lpcpd;
 	struct device *dev = &client->dev;
 
@@ -138,7 +141,9 @@ static int st33zp24_i2c_acpi_request_resources(struct i2c_client *client)
 
 static int st33zp24_i2c_of_request_resources(struct i2c_client *client)
 {
-	struct st33zp24_i2c_phy *phy = i2c_get_clientdata(client);
+	struct tpm_chip *chip = i2c_get_clientdata(client);
+	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
+	struct st33zp24_i2c_phy *phy = tpm_dev->phy_id;
 	struct device_node *pp;
 	int gpio;
 	int ret;
@@ -176,8 +181,10 @@ static int st33zp24_i2c_of_request_resources(struct i2c_client *client)
 
 static int st33zp24_i2c_request_resources(struct i2c_client *client)
 {
+	struct tpm_chip *chip = i2c_get_clientdata(client);
+	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
+	struct st33zp24_i2c_phy *phy = tpm_dev->phy_id;
 	struct st33zp24_platform_data *pdata;
-	struct st33zp24_i2c_phy *phy = i2c_get_clientdata(client);
 	int ret;
 
 	pdata = client->dev.platform_data;
@@ -234,8 +241,6 @@ static int st33zp24_i2c_probe(struct i2c_client *client,
 
 	phy->client = client;
 
-	i2c_set_clientdata(client, phy);
-
 	pdata = client->dev.platform_data;
 	if (!pdata && client->dev.of_node) {
 		ret = st33zp24_i2c_of_request_resources(client);
diff --git a/drivers/char/tpm/st33zp24/spi.c b/drivers/char/tpm/st33zp24/spi.c
index 608dbc6..9f5a011 100644
--- a/drivers/char/tpm/st33zp24/spi.c
+++ b/drivers/char/tpm/st33zp24/spi.c
@@ -26,6 +26,7 @@
 #include <linux/tpm.h>
 #include <linux/platform_data/st33zp24.h>
 
+#include "../tpm.h"
 #include "st33zp24.h"
 
 #define TPM_DATA_FIFO           0x24
@@ -231,7 +232,9 @@ static const struct st33zp24_phy_ops spi_phy_ops = {
 
 static int st33zp24_spi_acpi_request_resources(struct spi_device *spi_dev)
 {
-	struct st33zp24_spi_phy *phy = spi_get_drvdata(spi_dev);
+	struct tpm_chip *chip = spi_get_drvdata(spi_dev);
+	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
+	struct st33zp24_spi_phy *phy = tpm_dev->phy_id;
 	struct gpio_desc *gpiod_lpcpd;
 	struct device *dev = &spi_dev->dev;
 
@@ -256,7 +259,9 @@ static int st33zp24_spi_acpi_request_resources(struct spi_device *spi_dev)
 
 static int st33zp24_spi_of_request_resources(struct spi_device *spi_dev)
 {
-	struct st33zp24_spi_phy *phy = spi_get_drvdata(spi_dev);
+	struct tpm_chip *chip = spi_get_drvdata(spi_dev);
+	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
+	struct st33zp24_spi_phy *phy = tpm_dev->phy_id;
 	struct device_node *pp;
 	int gpio;
 	int ret;
@@ -294,7 +299,9 @@ static int st33zp24_spi_of_request_resources(struct spi_device *spi_dev)
 
 static int st33zp24_spi_request_resources(struct spi_device *dev)
 {
-	struct st33zp24_spi_phy *phy = spi_get_drvdata(dev);
+	struct tpm_chip *chip = spi_get_drvdata(dev);
+	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
+	struct st33zp24_spi_phy *phy = tpm_dev->phy_id;
 	struct st33zp24_platform_data *pdata;
 	int ret;
 
@@ -347,8 +354,6 @@ static int st33zp24_spi_probe(struct spi_device *dev)
 
 	phy->spi_device = dev;
 
-	spi_set_drvdata(dev, phy);
-
 	pdata = dev->dev.platform_data;
 	if (!pdata && dev->dev.of_node) {
 		ret = st33zp24_spi_of_request_resources(dev);
diff --git a/drivers/char/tpm/st33zp24/st33zp24.c b/drivers/char/tpm/st33zp24/st33zp24.c
index 9e91ca7..3c0625c 100644
--- a/drivers/char/tpm/st33zp24/st33zp24.c
+++ b/drivers/char/tpm/st33zp24/st33zp24.c
@@ -73,14 +73,6 @@ enum tis_defaults {
 	TIS_LONG_TIMEOUT = 2000,
 };
 
-struct st33zp24_dev {
-	struct tpm_chip *chip;
-	void *phy_id;
-	const struct st33zp24_phy_ops *ops;
-	u32 intrs;
-	int io_lpcpd;
-};
-
 /*
  * clear_interruption clear the pending interrupt.
  * @param: tpm_dev, the tpm device device.
@@ -102,11 +94,9 @@ static u8 clear_interruption(struct st33zp24_dev *tpm_dev)
  */
 static void st33zp24_cancel(struct tpm_chip *chip)
 {
-	struct st33zp24_dev *tpm_dev;
+	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
 	u8 data;
 
-	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
-
 	data = TPM_STS_COMMAND_READY;
 	tpm_dev->ops->send(tpm_dev->phy_id, TPM_STS, &data, 1);
 } /* st33zp24_cancel() */
@@ -118,10 +108,9 @@ static void st33zp24_cancel(struct tpm_chip *chip)
  */
 static u8 st33zp24_status(struct tpm_chip *chip)
 {
-	struct st33zp24_dev *tpm_dev;
-	u8 data;
+	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
 
-	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
+	u8 data;
 
 	tpm_dev->ops->recv(tpm_dev->phy_id, TPM_STS, &data, 1);
 	return data;
@@ -134,12 +123,10 @@ static u8 st33zp24_status(struct tpm_chip *chip)
  */
 static int check_locality(struct tpm_chip *chip)
 {
-	struct st33zp24_dev *tpm_dev;
+	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
 	u8 data;
 	u8 status;
 
-	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
-
 	status = tpm_dev->ops->recv(tpm_dev->phy_id, TPM_ACCESS, &data, 1);
 	if (status && (data &
 		(TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID)) ==
@@ -158,14 +145,12 @@ static int request_locality(struct tpm_chip *chip)
 {
 	unsigned long stop;
 	long ret;
-	struct st33zp24_dev *tpm_dev;
+	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
 	u8 data;
 
 	if (check_locality(chip) == chip->vendor.locality)
 		return chip->vendor.locality;
 
-	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
-
 	data = TPM_ACCESS_REQUEST_USE;
 	ret = tpm_dev->ops->send(tpm_dev->phy_id, TPM_ACCESS, &data, 1);
 	if (ret < 0)
@@ -190,10 +175,9 @@ static int request_locality(struct tpm_chip *chip)
  */
 static void release_locality(struct tpm_chip *chip)
 {
-	struct st33zp24_dev *tpm_dev;
+	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
 	u8 data;
 
-	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
 	data = TPM_ACCESS_ACTIVE_LOCALITY;
 
 	tpm_dev->ops->send(tpm_dev->phy_id, TPM_ACCESS, &data, 1);
@@ -206,12 +190,10 @@ static void release_locality(struct tpm_chip *chip)
  */
 static int get_burstcount(struct tpm_chip *chip)
 {
+	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
 	unsigned long stop;
 	int burstcnt, status;
 	u8 temp;
-	struct st33zp24_dev *tpm_dev;
-
-	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
 
 	stop = jiffies + chip->vendor.timeout_d;
 	do {
@@ -271,15 +253,13 @@ static bool wait_for_tpm_stat_cond(struct tpm_chip *chip, u8 mask,
 static int wait_for_stat(struct tpm_chip *chip, u8 mask, unsigned long timeout,
 			wait_queue_head_t *queue, bool check_cancel)
 {
+	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
 	unsigned long stop;
 	int ret = 0;
 	bool canceled = false;
 	bool condition;
 	u32 cur_intrs;
 	u8 status;
-	struct st33zp24_dev *tpm_dev;
-
-	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
 
 	/* check current status */
 	status = st33zp24_status(chip);
@@ -337,10 +317,8 @@ static int wait_for_stat(struct tpm_chip *chip, u8 mask, unsigned long timeout,
  */
 static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
 {
+	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
 	int size = 0, burstcnt, len, ret;
-	struct st33zp24_dev *tpm_dev;
-
-	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
 
 	while (size < count &&
 	       wait_for_stat(chip,
@@ -370,9 +348,7 @@ static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
 static irqreturn_t tpm_ioserirq_handler(int irq, void *dev_id)
 {
 	struct tpm_chip *chip = dev_id;
-	struct st33zp24_dev *tpm_dev;
-
-	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
+	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
 
 	tpm_dev->intrs++;
 	wake_up_interruptible(&chip->vendor.read_queue);
@@ -393,19 +369,17 @@ static irqreturn_t tpm_ioserirq_handler(int irq, void *dev_id)
 static int st33zp24_send(struct tpm_chip *chip, unsigned char *buf,
 			 size_t len)
 {
+	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
 	u32 status, i, size, ordinal;
 	int burstcnt = 0;
 	int ret;
 	u8 data;
-	struct st33zp24_dev *tpm_dev;
 
 	if (!chip)
 		return -EBUSY;
 	if (len < TPM_HEADER_SIZE)
 		return -EBUSY;
 
-	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
-
 	ret = request_locality(chip);
 	if (ret < 0)
 		return ret;
@@ -565,9 +539,9 @@ int st33zp24_probe(void *phy_id, const struct st33zp24_phy_ops *ops,
 	if (!tpm_dev)
 		return -ENOMEM;
 
-	TPM_VPRIV(chip) = tpm_dev;
 	tpm_dev->phy_id = phy_id;
 	tpm_dev->ops = ops;
+	dev_set_drvdata(&chip->dev, tpm_dev);
 
 	chip->vendor.timeout_a = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
 	chip->vendor.timeout_b = msecs_to_jiffies(TIS_LONG_TIMEOUT);
@@ -650,11 +624,9 @@ EXPORT_SYMBOL(st33zp24_remove);
 int st33zp24_pm_suspend(struct device *dev)
 {
 	struct tpm_chip *chip = dev_get_drvdata(dev);
-	struct st33zp24_dev *tpm_dev;
+	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
 	int ret = 0;
 
-	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
-
 	if (gpio_is_valid(tpm_dev->io_lpcpd))
 		gpio_set_value(tpm_dev->io_lpcpd, 0);
 	else
@@ -672,11 +644,9 @@ EXPORT_SYMBOL(st33zp24_pm_suspend);
 int st33zp24_pm_resume(struct device *dev)
 {
 	struct tpm_chip *chip = dev_get_drvdata(dev);
-	struct st33zp24_dev *tpm_dev;
+	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
 	int ret = 0;
 
-	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
-
 	if (gpio_is_valid(tpm_dev->io_lpcpd)) {
 		gpio_set_value(tpm_dev->io_lpcpd, 1);
 		ret = wait_for_stat(chip,
diff --git a/drivers/char/tpm/st33zp24/st33zp24.h b/drivers/char/tpm/st33zp24/st33zp24.h
index bcbd5ff..b242263 100644
--- a/drivers/char/tpm/st33zp24/st33zp24.h
+++ b/drivers/char/tpm/st33zp24/st33zp24.h
@@ -21,6 +21,13 @@
 #define TPM_WRITE_DIRECTION             0x80
 #define TPM_BUFSIZE                     2048
 
+struct st33zp24_dev {
+	void *phy_id;
+	const struct st33zp24_phy_ops *ops;
+	u32 intrs;
+	int io_lpcpd;
+};
+
 struct st33zp24_phy_ops {
 	int (*send)(void *phy_id, u8 tpm_register, u8 *tpm_data, int tpm_size);
 	int (*recv)(void *phy_id, u8 tpm_register, u8 *tpm_data, int tpm_size);
diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
index 357ac14..c4d3f41 100644
--- a/drivers/char/tpm/tpm.h
+++ b/drivers/char/tpm/tpm.h
@@ -138,13 +138,10 @@ struct tpm_vendor_specific {
 	bool timeout_adjusted;
 	unsigned long duration[3]; /* jiffies */
 	bool duration_adjusted;
-	void *priv;
 
 	wait_queue_head_t read_queue;
 };
 
-#define TPM_VPRIV(c)     ((c)->vendor.priv)
-
 #define TPM_VID_INTEL    0x8086
 #define TPM_VID_WINBOND  0x1050
 #define TPM_VID_STM      0x104A
diff --git a/drivers/char/tpm/tpm_atmel.c b/drivers/char/tpm/tpm_atmel.c
index b769299..0d322ab 100644
--- a/drivers/char/tpm/tpm_atmel.c
+++ b/drivers/char/tpm/tpm_atmel.c
@@ -37,7 +37,7 @@ enum tpm_atmel_read_status {
 
 static int tpm_atml_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 {
-	struct tpm_atmel_priv *priv = chip->vendor.priv;
+	struct tpm_atmel_priv *priv = dev_get_drvdata(&chip->dev);
 	u8 status, *hdr = buf;
 	u32 size;
 	int i;
@@ -96,7 +96,7 @@ static int tpm_atml_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 
 static int tpm_atml_send(struct tpm_chip *chip, u8 *buf, size_t count)
 {
-	struct tpm_atmel_priv *priv = chip->vendor.priv;
+	struct tpm_atmel_priv *priv = dev_get_drvdata(&chip->dev);
 	int i;
 
 	dev_dbg(&chip->dev, "tpm_atml_send:\n");
@@ -110,14 +110,14 @@ static int tpm_atml_send(struct tpm_chip *chip, u8 *buf, size_t count)
 
 static void tpm_atml_cancel(struct tpm_chip *chip)
 {
-	struct tpm_atmel_priv *priv = chip->vendor.priv;
+	struct tpm_atmel_priv *priv = dev_get_drvdata(&chip->dev);
 
 	iowrite8(ATML_STATUS_ABORT, priv->iobase + 1);
 }
 
 static u8 tpm_atml_status(struct tpm_chip *chip)
 {
-	struct tpm_atmel_priv *priv = chip->vendor.priv;
+	struct tpm_atmel_priv *priv = dev_get_drvdata(&chip->dev);
 
 	return ioread8(priv->iobase + 1);
 }
@@ -142,7 +142,7 @@ static struct platform_device *pdev;
 static void atml_plat_remove(void)
 {
 	struct tpm_chip *chip = dev_get_drvdata(&pdev->dev);
-	struct tpm_atmel_priv *priv = chip->vendor.priv;
+	struct tpm_atmel_priv *priv = dev_get_drvdata(&chip->dev);
 
 	if (chip) {
 		tpm_chip_unregister(chip);
@@ -207,7 +207,7 @@ static int __init init_atmel(void)
 		goto err_unreg_dev;
 	}
 
-	chip->vendor.priv = priv;
+	dev_set_drvdata(&chip->dev, priv);
 
 	rc = tpm_chip_register(chip);
 	if (rc)
diff --git a/drivers/char/tpm/tpm_atmel.h b/drivers/char/tpm/tpm_atmel.h
index 7e37c16..c786e01 100644
--- a/drivers/char/tpm/tpm_atmel.h
+++ b/drivers/char/tpm/tpm_atmel.h
@@ -29,11 +29,6 @@ struct tpm_atmel_priv {
 	void __iomem *iobase;
 };
 
-static inline struct tpm_atmel_priv *atmel_get_priv(struct tpm_chip *chip)
-{
-	return chip->vendor.priv;
-}
-
 #ifdef CONFIG_PPC64
 
 #include <asm/prom.h>
diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
index 8767da6..20155d5 100644
--- a/drivers/char/tpm/tpm_crb.c
+++ b/drivers/char/tpm/tpm_crb.c
@@ -87,7 +87,7 @@ static SIMPLE_DEV_PM_OPS(crb_pm, tpm_pm_suspend, tpm_pm_resume);
 
 static u8 crb_status(struct tpm_chip *chip)
 {
-	struct crb_priv *priv = chip->vendor.priv;
+	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
 	u8 sts = 0;
 
 	if ((ioread32(&priv->cca->start) & CRB_START_INVOKE) !=
@@ -99,7 +99,7 @@ static u8 crb_status(struct tpm_chip *chip)
 
 static int crb_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 {
-	struct crb_priv *priv = chip->vendor.priv;
+	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
 	unsigned int expected;
 
 	/* sanity check */
@@ -139,7 +139,7 @@ static int crb_do_acpi_start(struct tpm_chip *chip)
 
 static int crb_send(struct tpm_chip *chip, u8 *buf, size_t len)
 {
-	struct crb_priv *priv = chip->vendor.priv;
+	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
 	int rc = 0;
 
 	if (len > ioread32(&priv->cca->cmd_size)) {
@@ -163,7 +163,7 @@ static int crb_send(struct tpm_chip *chip, u8 *buf, size_t len)
 
 static void crb_cancel(struct tpm_chip *chip)
 {
-	struct crb_priv *priv = chip->vendor.priv;
+	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
 
 	iowrite32(cpu_to_le32(CRB_CANCEL_INVOKE), &priv->cca->cancel);
 
@@ -175,7 +175,7 @@ static void crb_cancel(struct tpm_chip *chip)
 
 static bool crb_req_canceled(struct tpm_chip *chip, u8 status)
 {
-	struct crb_priv *priv = chip->vendor.priv;
+	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
 	u32 cancel = ioread32(&priv->cca->cancel);
 
 	return (cancel & CRB_CANCEL_INVOKE) == CRB_CANCEL_INVOKE;
@@ -200,7 +200,7 @@ static int crb_init(struct acpi_device *device, struct crb_priv *priv)
 	if (IS_ERR(chip))
 		return PTR_ERR(chip);
 
-	chip->vendor.priv = priv;
+	dev_set_drvdata(&chip->dev, priv);
 	chip->acpi_dev_handle = device->handle;
 	chip->flags = TPM_CHIP_FLAG_TPM2;
 
diff --git a/drivers/char/tpm/tpm_i2c_atmel.c b/drivers/char/tpm/tpm_i2c_atmel.c
index dd8f0eb..f311aaf 100644
--- a/drivers/char/tpm/tpm_i2c_atmel.c
+++ b/drivers/char/tpm/tpm_i2c_atmel.c
@@ -51,7 +51,7 @@ struct priv_data {
 
 static int i2c_atmel_send(struct tpm_chip *chip, u8 *buf, size_t len)
 {
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 	struct i2c_client *client = to_i2c_client(chip->dev.parent);
 	s32 status;
 
@@ -70,7 +70,7 @@ static int i2c_atmel_send(struct tpm_chip *chip, u8 *buf, size_t len)
 
 static int i2c_atmel_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 {
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 	struct i2c_client *client = to_i2c_client(chip->dev.parent);
 	struct tpm_output_header *hdr =
 		(struct tpm_output_header *)priv->buffer;
@@ -111,7 +111,7 @@ static void i2c_atmel_cancel(struct tpm_chip *chip)
 
 static u8 i2c_atmel_read_status(struct tpm_chip *chip)
 {
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 	struct i2c_client *client = to_i2c_client(chip->dev.parent);
 	int rc;
 
@@ -155,6 +155,7 @@ static int i2c_atmel_probe(struct i2c_client *client,
 {
 	struct tpm_chip *chip;
 	struct device *dev = &client->dev;
+	struct priv_data *priv;
 
 	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C))
 		return -ENODEV;
@@ -163,9 +164,8 @@ static int i2c_atmel_probe(struct i2c_client *client,
 	if (IS_ERR(chip))
 		return PTR_ERR(chip);
 
-	chip->vendor.priv = devm_kzalloc(dev, sizeof(struct priv_data),
-					 GFP_KERNEL);
-	if (!chip->vendor.priv)
+	priv = devm_kzalloc(dev, sizeof(struct priv_data), GFP_KERNEL);
+	if (!priv)
 		return -ENOMEM;
 
 	/* Default timeouts */
@@ -175,6 +175,8 @@ static int i2c_atmel_probe(struct i2c_client *client,
 	chip->vendor.timeout_d = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
 	chip->vendor.irq = 0;
 
+	dev_set_drvdata(&chip->dev, priv);
+
 	/* There is no known way to probe for this device, and all version
 	 * information seems to be read via TPM commands. Thus we rely on the
 	 * TPM startup process in the common code to detect the device. */
diff --git a/drivers/char/tpm/tpm_i2c_nuvoton.c b/drivers/char/tpm/tpm_i2c_nuvoton.c
index a43b5f3..76ac21d 100644
--- a/drivers/char/tpm/tpm_i2c_nuvoton.c
+++ b/drivers/char/tpm/tpm_i2c_nuvoton.c
@@ -178,7 +178,7 @@ static int i2c_nuvoton_wait_for_stat(struct tpm_chip *chip, u8 mask, u8 value,
 {
 	if (chip->vendor.irq && queue) {
 		s32 rc;
-		struct priv_data *priv = chip->vendor.priv;
+		struct priv_data *priv = dev_get_drvdata(&chip->dev);
 		unsigned int cur_intrs = priv->intrs;
 
 		enable_irq(chip->vendor.irq);
@@ -473,7 +473,7 @@ static const struct tpm_class_ops tpm_i2c = {
 static irqreturn_t i2c_nuvoton_int_handler(int dummy, void *dev_id)
 {
 	struct tpm_chip *chip = dev_id;
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 
 	priv->intrs++;
 	wake_up(&chip->vendor.read_queue);
@@ -520,6 +520,7 @@ static int i2c_nuvoton_probe(struct i2c_client *client,
 {
 	int rc;
 	struct tpm_chip *chip;
+	struct priv_data *priv;
 	struct device *dev = &client->dev;
 	u32 vid = 0;
 
@@ -534,9 +535,8 @@ static int i2c_nuvoton_probe(struct i2c_client *client,
 	if (IS_ERR(chip))
 		return PTR_ERR(chip);
 
-	chip->vendor.priv = devm_kzalloc(dev, sizeof(struct priv_data),
-					 GFP_KERNEL);
-	if (!chip->vendor.priv)
+	priv = devm_kzalloc(dev, sizeof(struct priv_data), GFP_KERNEL);
+	if (!priv)
 		return -ENOMEM;
 
 	init_waitqueue_head(&chip->vendor.read_queue);
@@ -547,6 +547,8 @@ static int i2c_nuvoton_probe(struct i2c_client *client,
 	chip->vendor.timeout_c = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
 	chip->vendor.timeout_d = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
 
+	dev_set_drvdata(&chip->dev, priv);
+
 	/*
 	 * I2C intfcaps (interrupt capabilitieis) in the chip are hard coded to:
 	 *   TPM_INTF_INT_LEVEL_LOW | TPM_INTF_DATA_AVAIL_INT
@@ -611,8 +613,8 @@ static int i2c_nuvoton_probe(struct i2c_client *client,
 
 static int i2c_nuvoton_remove(struct i2c_client *client)
 {
-	struct device *dev = &(client->dev);
-	struct tpm_chip *chip = dev_get_drvdata(dev);
+	struct tpm_chip *chip = i2c_get_clientdata(client);
+
 	tpm_chip_unregister(chip);
 	return 0;
 }
diff --git a/drivers/char/tpm/tpm_ibmvtpm.c b/drivers/char/tpm/tpm_ibmvtpm.c
index b0a9a9e..6b22826 100644
--- a/drivers/char/tpm/tpm_ibmvtpm.c
+++ b/drivers/char/tpm/tpm_ibmvtpm.c
@@ -54,21 +54,6 @@ static int ibmvtpm_send_crq(struct vio_dev *vdev, u64 w1, u64 w2)
 }
 
 /**
- * ibmvtpm_get_data - Retrieve ibm vtpm data
- * @dev:	device struct
- *
- * Return value:
- *	vtpm device struct
- */
-static struct ibmvtpm_dev *ibmvtpm_get_data(const struct device *dev)
-{
-	struct tpm_chip *chip = dev_get_drvdata(dev);
-	if (chip)
-		return (struct ibmvtpm_dev *)TPM_VPRIV(chip);
-	return NULL;
-}
-
-/**
  * tpm_ibmvtpm_recv - Receive data after send
  * @chip:	tpm chip struct
  * @buf:	buffer to read
@@ -79,12 +64,10 @@ static struct ibmvtpm_dev *ibmvtpm_get_data(const struct device *dev)
  */
 static int tpm_ibmvtpm_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 {
-	struct ibmvtpm_dev *ibmvtpm;
+	struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
 	u16 len;
 	int sig;
 
-	ibmvtpm = (struct ibmvtpm_dev *)TPM_VPRIV(chip);
-
 	if (!ibmvtpm->rtce_buf) {
 		dev_err(ibmvtpm->dev, "ibmvtpm device is not ready\n");
 		return 0;
@@ -122,13 +105,11 @@ static int tpm_ibmvtpm_recv(struct tpm_chip *chip, u8 *buf, size_t count)
  */
 static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)
 {
-	struct ibmvtpm_dev *ibmvtpm;
+	struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
 	struct ibmvtpm_crq crq;
 	__be64 *word = (__be64 *)&crq;
 	int rc, sig;
 
-	ibmvtpm = (struct ibmvtpm_dev *)TPM_VPRIV(chip);
-
 	if (!ibmvtpm->rtce_buf) {
 		dev_err(ibmvtpm->dev, "ibmvtpm device is not ready\n");
 		return 0;
@@ -289,8 +270,8 @@ static int ibmvtpm_crq_send_init(struct ibmvtpm_dev *ibmvtpm)
  */
 static int tpm_ibmvtpm_remove(struct vio_dev *vdev)
 {
-	struct ibmvtpm_dev *ibmvtpm = ibmvtpm_get_data(&vdev->dev);
-	struct tpm_chip *chip = dev_get_drvdata(ibmvtpm->dev);
+	struct tpm_chip *chip = dev_get_drvdata(&vdev->dev);
+	struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
 	int rc = 0;
 
 	tpm_chip_unregister(chip);
@@ -327,7 +308,8 @@ static int tpm_ibmvtpm_remove(struct vio_dev *vdev)
  */
 static unsigned long tpm_ibmvtpm_get_desired_dma(struct vio_dev *vdev)
 {
-	struct ibmvtpm_dev *ibmvtpm = ibmvtpm_get_data(&vdev->dev);
+	struct tpm_chip *chip = dev_get_drvdata(&vdev->dev);
+	struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
 
 	/* ibmvtpm initializes at probe time, so the data we are
 	* asking for may not be set yet. Estimate that 4K required
@@ -348,7 +330,8 @@ static unsigned long tpm_ibmvtpm_get_desired_dma(struct vio_dev *vdev)
  */
 static int tpm_ibmvtpm_suspend(struct device *dev)
 {
-	struct ibmvtpm_dev *ibmvtpm = ibmvtpm_get_data(dev);
+	struct tpm_chip *chip = dev_get_drvdata(dev);
+	struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
 	struct ibmvtpm_crq crq;
 	u64 *buf = (u64 *) &crq;
 	int rc = 0;
@@ -400,7 +383,8 @@ static int ibmvtpm_reset_crq(struct ibmvtpm_dev *ibmvtpm)
  */
 static int tpm_ibmvtpm_resume(struct device *dev)
 {
-	struct ibmvtpm_dev *ibmvtpm = ibmvtpm_get_data(dev);
+	struct tpm_chip *chip = dev_get_drvdata(dev);
+	struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
 	int rc = 0;
 
 	do {
@@ -643,7 +627,7 @@ static int tpm_ibmvtpm_probe(struct vio_dev *vio_dev,
 
 	crq_q->index = 0;
 
-	TPM_VPRIV(chip) = (void *)ibmvtpm;
+	dev_set_drvdata(&chip->dev, ibmvtpm)
 
 	spin_lock_init(&ibmvtpm->rtce_lock);
 
diff --git a/drivers/char/tpm/tpm_nsc.c b/drivers/char/tpm/tpm_nsc.c
index 07163a4..9ff0e07 100644
--- a/drivers/char/tpm/tpm_nsc.c
+++ b/drivers/char/tpm/tpm_nsc.c
@@ -69,20 +69,16 @@ struct tpm_nsc_priv {
 	unsigned long base;
 };
 
-static inline struct tpm_nsc_priv *nsc_get_priv(struct tpm_chip *chip)
-{
-	return chip->vendor.priv;
-}
-
 /*
  * Wait for a certain status to appear
  */
 static int wait_for_stat(struct tpm_chip *chip, u8 mask, u8 val, u8 * data)
 {
+	struct tpm_nsc_priv *priv = dev_get_drvdata(&chip->dev);
 	unsigned long stop;
 
 	/* status immediately available check */
-	*data = inb(nsc_get_priv(chip)->base + NSC_STATUS);
+	*data = inb(priv->base + NSC_STATUS);
 	if ((*data & mask) == val)
 		return 0;
 
@@ -90,7 +86,7 @@ static int wait_for_stat(struct tpm_chip *chip, u8 mask, u8 val, u8 * data)
 	stop = jiffies + 10 * HZ;
 	do {
 		msleep(TPM_TIMEOUT);
-		*data = inb(nsc_get_priv(chip)->base + 1);
+		*data = inb(priv->base + 1);
 		if ((*data & mask) == val)
 			return 0;
 	}
@@ -101,13 +97,14 @@ static int wait_for_stat(struct tpm_chip *chip, u8 mask, u8 val, u8 * data)
 
 static int nsc_wait_for_ready(struct tpm_chip *chip)
 {
+	struct tpm_nsc_priv *priv = dev_get_drvdata(&chip->dev);
 	int status;
 	unsigned long stop;
 
 	/* status immediately available check */
-	status = inb(nsc_get_priv(chip)->base + NSC_STATUS);
+	status = inb(priv->base + NSC_STATUS);
 	if (status & NSC_STATUS_OBF)
-		status = inb(nsc_get_priv(chip)->base + NSC_DATA);
+		status = inb(priv->base + NSC_DATA);
 	if (status & NSC_STATUS_RDY)
 		return 0;
 
@@ -115,9 +112,9 @@ static int nsc_wait_for_ready(struct tpm_chip *chip)
 	stop = jiffies + 100;
 	do {
 		msleep(TPM_TIMEOUT);
-		status = inb(nsc_get_priv(chip)->base + NSC_STATUS);
+		status = inb(priv->base + NSC_STATUS);
 		if (status & NSC_STATUS_OBF)
-			status = inb(nsc_get_priv(chip)->base + NSC_DATA);
+			status = inb(priv->base + NSC_DATA);
 		if (status & NSC_STATUS_RDY)
 			return 0;
 	}
@@ -130,6 +127,7 @@ static int nsc_wait_for_ready(struct tpm_chip *chip)
 
 static int tpm_nsc_recv(struct tpm_chip *chip, u8 * buf, size_t count)
 {
+	struct tpm_nsc_priv *priv = dev_get_drvdata(&chip->dev);
 	u8 *buffer = buf;
 	u8 data, *p;
 	u32 size;
@@ -143,7 +141,7 @@ static int tpm_nsc_recv(struct tpm_chip *chip, u8 * buf, size_t count)
 		return -EIO;
 	}
 
-	data = inb(nsc_get_priv(chip)->base + NSC_DATA);
+	data = inb(priv->base + NSC_DATA);
 	if (data != NSC_COMMAND_NORMAL) {
 		dev_err(&chip->dev, "not in normal mode (0x%x)\n",
 			data);
@@ -160,7 +158,7 @@ static int tpm_nsc_recv(struct tpm_chip *chip, u8 * buf, size_t count)
 		}
 		if (data & NSC_STATUS_F0)
 			break;
-		*p = inb(nsc_get_priv(chip)->base + NSC_DATA);
+		*p = inb(priv->base + NSC_DATA);
 	}
 
 	if ((data & NSC_STATUS_F0) == 0 &&
@@ -169,7 +167,7 @@ static int tpm_nsc_recv(struct tpm_chip *chip, u8 * buf, size_t count)
 		return -EIO;
 	}
 
-	data = inb(nsc_get_priv(chip)->base + NSC_DATA);
+	data = inb(priv->base + NSC_DATA);
 	if (data != NSC_COMMAND_EOC) {
 		dev_err(&chip->dev,
 			"expected end of command(0x%x)\n", data);
@@ -187,6 +185,7 @@ static int tpm_nsc_recv(struct tpm_chip *chip, u8 * buf, size_t count)
 
 static int tpm_nsc_send(struct tpm_chip *chip, u8 * buf, size_t count)
 {
+	struct tpm_nsc_priv *priv = dev_get_drvdata(&chip->dev);
 	u8 data;
 	int i;
 
@@ -196,7 +195,7 @@ static int tpm_nsc_send(struct tpm_chip *chip, u8 * buf, size_t count)
 	 * fix it. Not sure why this is needed, we followed the flow
 	 * chart in the manual to the letter.
 	 */
-	outb(NSC_COMMAND_CANCEL, nsc_get_priv(chip)->base + NSC_COMMAND);
+	outb(NSC_COMMAND_CANCEL, priv->base + NSC_COMMAND);
 
 	if (nsc_wait_for_ready(chip) != 0)
 		return -EIO;
@@ -206,7 +205,7 @@ static int tpm_nsc_send(struct tpm_chip *chip, u8 * buf, size_t count)
 		return -EIO;
 	}
 
-	outb(NSC_COMMAND_NORMAL, nsc_get_priv(chip)->base + NSC_COMMAND);
+	outb(NSC_COMMAND_NORMAL, priv->base + NSC_COMMAND);
 	if (wait_for_stat(chip, NSC_STATUS_IBR, NSC_STATUS_IBR, &data) < 0) {
 		dev_err(&chip->dev, "IBR timeout\n");
 		return -EIO;
@@ -218,26 +217,30 @@ static int tpm_nsc_send(struct tpm_chip *chip, u8 * buf, size_t count)
 				"IBF timeout (while writing data)\n");
 			return -EIO;
 		}
-		outb(buf[i], nsc_get_priv(chip)->base + NSC_DATA);
+		outb(buf[i], priv->base + NSC_DATA);
 	}
 
 	if (wait_for_stat(chip, NSC_STATUS_IBF, 0, &data) < 0) {
 		dev_err(&chip->dev, "IBF timeout\n");
 		return -EIO;
 	}
-	outb(NSC_COMMAND_EOC, nsc_get_priv(chip)->base + NSC_COMMAND);
+	outb(NSC_COMMAND_EOC, priv->base + NSC_COMMAND);
 
 	return count;
 }
 
 static void tpm_nsc_cancel(struct tpm_chip *chip)
 {
-	outb(NSC_COMMAND_CANCEL, nsc_get_priv(chip)->base + NSC_COMMAND);
+	struct tpm_nsc_priv *priv = dev_get_drvdata(&chip->dev);
+
+	outb(NSC_COMMAND_CANCEL, priv->base + NSC_COMMAND);
 }
 
 static u8 tpm_nsc_status(struct tpm_chip *chip)
 {
-	return inb(nsc_get_priv(chip)->base + NSC_STATUS);
+	struct tpm_nsc_priv *priv = dev_get_drvdata(&chip->dev);
+
+	return inb(priv->base + NSC_STATUS);
 }
 
 static bool tpm_nsc_req_canceled(struct tpm_chip *chip, u8 status)
@@ -260,9 +263,10 @@ static struct platform_device *pdev = NULL;
 static void tpm_nsc_remove(struct device *dev)
 {
 	struct tpm_chip *chip = dev_get_drvdata(dev);
+	struct tpm_nsc_priv *priv = dev_get_drvdata(&chip->dev);
 
 	tpm_chip_unregister(chip);
-	release_region(nsc_get_priv(chip)->base, 2);
+	release_region(priv->base, 2);
 }
 
 static SIMPLE_DEV_PM_OPS(tpm_nsc_pm, tpm_pm_suspend, tpm_pm_resume);
@@ -334,7 +338,7 @@ static int __init init_nsc(void)
 		goto err_rel_reg;
 	}
 
-	chip->vendor.priv = priv;
+	dev_set_drvdata(&chip->dev, priv);
 
 	rc = tpm_chip_register(chip);
 	if (rc)
diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
index 19dac62..bf333cf 100644
--- a/drivers/char/tpm/tpm_tis.c
+++ b/drivers/char/tpm/tpm_tis.c
@@ -129,8 +129,9 @@ static inline int is_itpm(struct acpi_device *dev)
  * correct values in the other bits.' */
 static int wait_startup(struct tpm_chip *chip, int l)
 {
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 	unsigned long stop = jiffies + chip->vendor.timeout_a;
+
 	do {
 		if (ioread8(priv->iobase + TPM_ACCESS(l)) &
 		    TPM_ACCESS_VALID)
@@ -142,7 +143,7 @@ static int wait_startup(struct tpm_chip *chip, int l)
 
 static int check_locality(struct tpm_chip *chip, int l)
 {
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 
 	if ((ioread8(priv->iobase + TPM_ACCESS(l)) &
 	     (TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID)) ==
@@ -154,7 +155,7 @@ static int check_locality(struct tpm_chip *chip, int l)
 
 static void release_locality(struct tpm_chip *chip, int l, int force)
 {
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 
 	if (force || (ioread8(priv->iobase + TPM_ACCESS(l)) &
 		      (TPM_ACCESS_REQUEST_PENDING | TPM_ACCESS_VALID)) ==
@@ -165,7 +166,7 @@ static void release_locality(struct tpm_chip *chip, int l, int force)
 
 static int request_locality(struct tpm_chip *chip, int l)
 {
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 	unsigned long stop, timeout;
 	long rc;
 
@@ -206,7 +207,7 @@ again:
 
 static u8 tpm_tis_status(struct tpm_chip *chip)
 {
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 
 	return ioread8(priv->iobase +
 		       TPM_STS(chip->vendor.locality));
@@ -214,7 +215,7 @@ static u8 tpm_tis_status(struct tpm_chip *chip)
 
 static void tpm_tis_ready(struct tpm_chip *chip)
 {
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 
 	/* this causes the current command to be aborted */
 	iowrite8(TPM_STS_COMMAND_READY,
@@ -223,7 +224,7 @@ static void tpm_tis_ready(struct tpm_chip *chip)
 
 static int get_burstcount(struct tpm_chip *chip)
 {
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 	unsigned long stop;
 	int burstcnt;
 
@@ -245,7 +246,7 @@ static int get_burstcount(struct tpm_chip *chip)
 
 static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
 {
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 	int size = 0, burstcnt;
 	while (size < count &&
 	       wait_for_tpm_stat(chip,
@@ -264,7 +265,7 @@ static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
 
 static int tpm_tis_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 {
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 	int size = 0;
 	int expected, status;
 
@@ -320,7 +321,7 @@ MODULE_PARM_DESC(itpm, "Force iTPM workarounds (found on some Lenovo laptops)");
  */
 static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
 {
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 	int rc, status, burstcnt;
 	size_t count = 0;
 
@@ -376,7 +377,7 @@ out_err:
 
 static void disable_interrupts(struct tpm_chip *chip)
 {
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 	u32 intmask;
 
 	intmask =
@@ -396,7 +397,7 @@ static void disable_interrupts(struct tpm_chip *chip)
  */
 static int tpm_tis_send_main(struct tpm_chip *chip, u8 *buf, size_t len)
 {
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 	int rc;
 	u32 ordinal;
 	unsigned long dur;
@@ -434,7 +435,7 @@ out_err:
 static int tpm_tis_send(struct tpm_chip *chip, u8 *buf, size_t len)
 {
 	int rc, irq;
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 
 	if (!chip->vendor.irq || priv->irq_tested)
 		return tpm_tis_send_main(chip, buf, len);
@@ -466,7 +467,7 @@ static const struct tis_vendor_timeout_override vendor_timeout_overrides[] = {
 static bool tpm_tis_update_timeouts(struct tpm_chip *chip,
 				    unsigned long *timeout_cap)
 {
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 	int i;
 	u32 did_vid;
 
@@ -490,7 +491,7 @@ static bool tpm_tis_update_timeouts(struct tpm_chip *chip,
  */
 static int probe_itpm(struct tpm_chip *chip)
 {
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 	int rc = 0;
 	u8 cmd_getticks[] = {
 		0x00, 0xc1, 0x00, 0x00, 0x00, 0x0a,
@@ -532,7 +533,7 @@ out:
 
 static bool tpm_tis_req_canceled(struct tpm_chip *chip, u8 status)
 {
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 
 	switch (priv->manufacturer_id) {
 	case TPM_VID_WINBOND:
@@ -559,7 +560,7 @@ static const struct tpm_class_ops tpm_tis = {
 static irqreturn_t tis_int_handler(int dummy, void *dev_id)
 {
 	struct tpm_chip *chip = dev_id;
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 	u32 interrupt;
 	int i;
 
@@ -569,7 +570,7 @@ static irqreturn_t tis_int_handler(int dummy, void *dev_id)
 	if (interrupt == 0)
 		return IRQ_NONE;
 
-	((struct priv_data *)chip->vendor.priv)->irq_tested = true;
+	priv->irq_tested = true;
 	if (interrupt & TPM_INTF_DATA_AVAIL_INT)
 		wake_up_interruptible(&chip->vendor.read_queue);
 	if (interrupt & TPM_INTF_LOCALITY_CHANGE_INT)
@@ -596,7 +597,7 @@ static irqreturn_t tis_int_handler(int dummy, void *dev_id)
 static int tpm_tis_probe_irq_single(struct tpm_chip *chip, u32 intmask,
 				    int flags, int irq)
 {
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 	u8 original_int_vec;
 
 	if (devm_request_irq(&chip->dev, irq, tis_int_handler, flags,
@@ -649,7 +650,7 @@ static int tpm_tis_probe_irq_single(struct tpm_chip *chip, u32 intmask,
  */
 static void tpm_tis_probe_irq(struct tpm_chip *chip, u32 intmask)
 {
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 	u8 original_int_vec;
 	int i;
 
@@ -673,7 +674,7 @@ MODULE_PARM_DESC(interrupts, "Enable interrupts");
 
 static void tpm_tis_remove(struct tpm_chip *chip)
 {
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 
 	if (chip->flags & TPM_CHIP_FLAG_TPM2)
 		tpm2_shutdown(chip, TPM2_SU_CLEAR);
@@ -702,7 +703,6 @@ static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info,
 	if (IS_ERR(chip))
 		return PTR_ERR(chip);
 
-	chip->vendor.priv = priv;
 #ifdef CONFIG_ACPI
 	chip->acpi_dev_handle = acpi_dev_handle;
 #endif
@@ -717,6 +717,8 @@ static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info,
 	chip->vendor.timeout_c = TIS_TIMEOUT_C_MAX;
 	chip->vendor.timeout_d = TIS_TIMEOUT_D_MAX;
 
+	dev_set_drvdata(&chip->dev, priv);
+
 	if (wait_startup(chip, 0) != 0) {
 		rc = -ENODEV;
 		goto out_err;
@@ -841,7 +843,7 @@ out_err:
 #ifdef CONFIG_PM_SLEEP
 static void tpm_tis_reenable_interrupts(struct tpm_chip *chip)
 {
-	struct priv_data *priv = chip->vendor.priv;
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 	u32 intmask;
 
 	/* reenable interrupts that device may have lost or
diff --git a/drivers/char/tpm/xen-tpmfront.c b/drivers/char/tpm/xen-tpmfront.c
index 3111f27..efd7d99 100644
--- a/drivers/char/tpm/xen-tpmfront.c
+++ b/drivers/char/tpm/xen-tpmfront.c
@@ -39,7 +39,7 @@ enum status_bits {
 
 static u8 vtpm_status(struct tpm_chip *chip)
 {
-	struct tpm_private *priv = TPM_VPRIV(chip);
+	struct tpm_private *priv = dev_get_drvdata(&chip->dev);
 	switch (priv->shr->state) {
 	case VTPM_STATE_IDLE:
 		return VTPM_STATUS_IDLE | VTPM_STATUS_CANCELED;
@@ -60,7 +60,7 @@ static bool vtpm_req_canceled(struct tpm_chip *chip, u8 status)
 
 static void vtpm_cancel(struct tpm_chip *chip)
 {
-	struct tpm_private *priv = TPM_VPRIV(chip);
+	struct tpm_private *priv = dev_get_drvdata(&chip->dev);
 	priv->shr->state = VTPM_STATE_CANCEL;
 	wmb();
 	notify_remote_via_evtchn(priv->evtchn);
@@ -73,7 +73,7 @@ static unsigned int shr_data_offset(struct vtpm_shared_page *shr)
 
 static int vtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)
 {
-	struct tpm_private *priv = TPM_VPRIV(chip);
+	struct tpm_private *priv = dev_get_drvdata(&chip->dev);
 	struct vtpm_shared_page *shr = priv->shr;
 	unsigned int offset = shr_data_offset(shr);
 
@@ -115,7 +115,7 @@ static int vtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)
 
 static int vtpm_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 {
-	struct tpm_private *priv = TPM_VPRIV(chip);
+	struct tpm_private *priv = dev_get_drvdata(&chip->dev);
 	struct vtpm_shared_page *shr = priv->shr;
 	unsigned int offset = shr_data_offset(shr);
 	size_t length = shr->length;
@@ -182,7 +182,7 @@ static int setup_chip(struct device *dev, struct tpm_private *priv)
 	init_waitqueue_head(&chip->vendor.read_queue);
 
 	priv->chip = chip;
-	TPM_VPRIV(chip) = priv;
+	dev_set_drvdata(&chip->dev, priv);
 
 	return 0;
 }
@@ -318,10 +318,10 @@ static int tpmfront_probe(struct xenbus_device *dev,
 static int tpmfront_remove(struct xenbus_device *dev)
 {
 	struct tpm_chip *chip = dev_get_drvdata(&dev->dev);
-	struct tpm_private *priv = TPM_VPRIV(chip);
+	struct tpm_private *priv = dev_get_drvdata(&chip->dev);
 	tpm_chip_unregister(chip);
 	ring_free(priv);
-	TPM_VPRIV(chip) = NULL;
+	dev_set_drvdata(&chip->dev, NULL);
 	return 0;
 }
 
-- 
2.5.0


------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 3/7] tpm/tpm_i2c_atmel: simplify patch to get tpm_chip from an i2c_client
       [not found] ` <1458975615-8095-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
  2016-03-26  7:00   ` [PATCH v2 1/7] tpm/tpm_atmel: drop remaining 'iobase' usage Christophe Ricard
  2016-03-26  7:00   ` [PATCH v2 2/7] tpm: Remove useless priv field in struct tpm_vendor_specific Christophe Ricard
@ 2016-03-26  7:00   ` Christophe Ricard
  2016-03-26  7:00   ` [PATCH v2 4/7] tpm/tpm_i2c_atmel: Few code style fixes Christophe Ricard
                     ` (4 subsequent siblings)
  7 siblings, 0 replies; 17+ messages in thread
From: Christophe Ricard @ 2016-03-26  7:00 UTC (permalink / raw)
  To: jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA
  Cc: jean-luc.blanc-qxv4g6HH51o, ashley-fm2HMyfA2y6tG0bUXCXiUA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
	christophe-h.ricard-qxv4g6HH51o, benoit.houyere-qxv4g6HH51o

i2c_get_clientdata allows to simplify the current way to retrieve a tpm_chip
structure.

Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
---
 drivers/char/tpm/tpm_i2c_atmel.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/char/tpm/tpm_i2c_atmel.c b/drivers/char/tpm/tpm_i2c_atmel.c
index f311aaf..5426c9d 100644
--- a/drivers/char/tpm/tpm_i2c_atmel.c
+++ b/drivers/char/tpm/tpm_i2c_atmel.c
@@ -191,8 +191,7 @@ static int i2c_atmel_probe(struct i2c_client *client,
 
 static int i2c_atmel_remove(struct i2c_client *client)
 {
-	struct device *dev = &(client->dev);
-	struct tpm_chip *chip = dev_get_drvdata(dev);
+	struct tpm_chip *chip = i2c_get_clientdata(client);
 	tpm_chip_unregister(chip);
 	return 0;
 }
-- 
2.5.0


------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 4/7] tpm/tpm_i2c_atmel: Few code style fixes
       [not found] ` <1458975615-8095-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
                     ` (2 preceding siblings ...)
  2016-03-26  7:00   ` [PATCH v2 3/7] tpm/tpm_i2c_atmel: simplify patch to get tpm_chip from an i2c_client Christophe Ricard
@ 2016-03-26  7:00   ` Christophe Ricard
       [not found]     ` <1458975615-8095-5-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
  2016-03-26  7:00   ` [PATCH v2 5/7] tpm: drop 'irq' from struct tpm_vendor_specific Christophe Ricard
                     ` (3 subsequent siblings)
  7 siblings, 1 reply; 17+ messages in thread
From: Christophe Ricard @ 2016-03-26  7:00 UTC (permalink / raw)
  To: jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA
  Cc: jean-luc.blanc-qxv4g6HH51o, ashley-fm2HMyfA2y6tG0bUXCXiUA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
	christophe-h.ricard-qxv4g6HH51o, benoit.houyere-qxv4g6HH51o

Few code style fixes.

Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
---
 drivers/char/tpm/tpm_i2c_atmel.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/char/tpm/tpm_i2c_atmel.c b/drivers/char/tpm/tpm_i2c_atmel.c
index 5426c9d..d357065 100644
--- a/drivers/char/tpm/tpm_i2c_atmel.c
+++ b/drivers/char/tpm/tpm_i2c_atmel.c
@@ -125,8 +125,7 @@ static u8 i2c_atmel_read_status(struct tpm_chip *chip)
 	/* Once the TPM has completed the command the command remains readable
 	 * until another command is issued. */
 	rc = i2c_master_recv(client, priv->buffer, sizeof(priv->buffer));
-	dev_dbg(&chip->dev,
-		"%s: sts=%d", __func__, rc);
+	dev_dbg(&chip->dev, "%s: sts=%d", __func__, rc);
 	if (rc <= 0)
 		return 0;
 
@@ -192,6 +191,7 @@ static int i2c_atmel_probe(struct i2c_client *client,
 static int i2c_atmel_remove(struct i2c_client *client)
 {
 	struct tpm_chip *chip = i2c_get_clientdata(client);
+
 	tpm_chip_unregister(chip);
 	return 0;
 }
-- 
2.5.0


------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 5/7] tpm: drop 'irq' from struct tpm_vendor_specific
       [not found] ` <1458975615-8095-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
                     ` (3 preceding siblings ...)
  2016-03-26  7:00   ` [PATCH v2 4/7] tpm/tpm_i2c_atmel: Few code style fixes Christophe Ricard
@ 2016-03-26  7:00   ` Christophe Ricard
       [not found]     ` <1458975615-8095-6-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
  2016-03-26  7:00   ` [PATCH v2 6/7] tpm: Move remaining tpm_vendor_specific structure data to tpm_chip Christophe Ricard
                     ` (2 subsequent siblings)
  7 siblings, 1 reply; 17+ messages in thread
From: Christophe Ricard @ 2016-03-26  7:00 UTC (permalink / raw)
  To: jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA
  Cc: jean-luc.blanc-qxv4g6HH51o, ashley-fm2HMyfA2y6tG0bUXCXiUA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
	christophe-h.ricard-qxv4g6HH51o, benoit.houyere-qxv4g6HH51o

Dropped the field 'irq' from struct tpm_vendor_specific and make it available
to the various private structures in the drivers using irqs.

A dedicated flag TPM_CHIP_FLAG_USES_IRQ is added for the upper layers.

Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
---
 drivers/char/tpm/st33zp24/st33zp24.c | 15 ++++++++-------
 drivers/char/tpm/st33zp24/st33zp24.h |  1 +
 drivers/char/tpm/tpm-interface.c     |  4 ++--
 drivers/char/tpm/tpm.h               |  3 +--
 drivers/char/tpm/tpm_i2c_atmel.c     |  1 -
 drivers/char/tpm/tpm_i2c_infineon.c  |  3 ---
 drivers/char/tpm/tpm_i2c_nuvoton.c   | 21 ++++++++++++---------
 drivers/char/tpm/tpm_tis.c           | 30 +++++++++++++++++-------------
 drivers/char/tpm/xen-tpmfront.c      |  7 ++++---
 9 files changed, 45 insertions(+), 40 deletions(-)

diff --git a/drivers/char/tpm/st33zp24/st33zp24.c b/drivers/char/tpm/st33zp24/st33zp24.c
index 3c0625c..7a5de0e 100644
--- a/drivers/char/tpm/st33zp24/st33zp24.c
+++ b/drivers/char/tpm/st33zp24/st33zp24.c
@@ -268,10 +268,10 @@ static int wait_for_stat(struct tpm_chip *chip, u8 mask, unsigned long timeout,
 
 	stop = jiffies + timeout;
 
-	if (chip->vendor.irq) {
+	if (chip->flags & TPM_CHIP_FLAG_USES_IRQ) {
 		cur_intrs = tpm_dev->intrs;
 		clear_interruption(tpm_dev);
-		enable_irq(chip->vendor.irq);
+		enable_irq(tpm_dev->irq);
 
 		do {
 			if (ret == -ERESTARTSYS && freezing(current))
@@ -294,7 +294,7 @@ static int wait_for_stat(struct tpm_chip *chip, u8 mask, unsigned long timeout,
 			}
 		} while (ret == -ERESTARTSYS && freezing(current));
 
-		disable_irq_nosync(chip->vendor.irq);
+		disable_irq_nosync(tpm_dev->irq);
 
 	} else {
 		do {
@@ -352,7 +352,7 @@ static irqreturn_t tpm_ioserirq_handler(int irq, void *dev_id)
 
 	tpm_dev->intrs++;
 	wake_up_interruptible(&chip->vendor.read_queue);
-	disable_irq_nosync(chip->vendor.irq);
+	disable_irq_nosync(tpm_dev->irq);
 
 	return IRQ_HANDLED;
 } /* tpm_ioserirq_handler() */
@@ -430,7 +430,7 @@ static int st33zp24_send(struct tpm_chip *chip, unsigned char *buf,
 	if (ret < 0)
 		goto out_err;
 
-	if (chip->vendor.irq) {
+	if (chip->flags & TPM_CHIP_FLAG_USES_IRQ) {
 		ordinal = be32_to_cpu(*((__be32 *) (buf + 6)));
 
 		ret = wait_for_stat(chip, TPM_STS_DATA_AVAIL | TPM_STS_VALID,
@@ -585,9 +585,10 @@ int st33zp24_probe(void *phy_id, const struct st33zp24_phy_ops *ops,
 		if (ret < 0)
 			goto _tpm_clean_answer;
 
-		chip->vendor.irq = irq;
+		tpm_dev->irq = irq;
+		chip->flags |= TPM_CHIP_FLAG_USES_IRQ;
 
-		disable_irq_nosync(chip->vendor.irq);
+		disable_irq_nosync(tpm_dev->irq);
 
 		tpm_gen_interrupt(chip);
 	}
diff --git a/drivers/char/tpm/st33zp24/st33zp24.h b/drivers/char/tpm/st33zp24/st33zp24.h
index b242263..b139a8d 100644
--- a/drivers/char/tpm/st33zp24/st33zp24.h
+++ b/drivers/char/tpm/st33zp24/st33zp24.h
@@ -24,6 +24,7 @@
 struct st33zp24_dev {
 	void *phy_id;
 	const struct st33zp24_phy_ops *ops;
+	int irq;
 	u32 intrs;
 	int io_lpcpd;
 };
diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
index 5397b64..0bdd25b 100644
--- a/drivers/char/tpm/tpm-interface.c
+++ b/drivers/char/tpm/tpm-interface.c
@@ -359,7 +359,7 @@ ssize_t tpm_transmit(struct tpm_chip *chip, const char *buf,
 		goto out;
 	}
 
-	if (chip->vendor.irq)
+	if (chip->flags & TPM_CHIP_FLAG_USES_IRQ)
 		goto out_recv;
 
 	if (chip->flags & TPM_CHIP_FLAG_TPM2)
@@ -890,7 +890,7 @@ int wait_for_tpm_stat(struct tpm_chip *chip, u8 mask, unsigned long timeout,
 
 	stop = jiffies + timeout;
 
-	if (chip->vendor.irq) {
+	if (chip->flags & TPM_CHIP_FLAG_USES_IRQ) {
 again:
 		timeout = stop - jiffies;
 		if ((long)timeout <= 0)
diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
index c4d3f41..26c8d62 100644
--- a/drivers/char/tpm/tpm.h
+++ b/drivers/char/tpm/tpm.h
@@ -131,8 +131,6 @@ enum tpm2_startup_types {
 struct tpm_chip;
 
 struct tpm_vendor_specific {
-	int irq;
-
 	int locality;
 	unsigned long timeout_a, timeout_b, timeout_c, timeout_d; /* jiffies */
 	bool timeout_adjusted;
@@ -151,6 +149,7 @@ struct tpm_vendor_specific {
 enum tpm_chip_flags {
 	TPM_CHIP_FLAG_REGISTERED	= BIT(0),
 	TPM_CHIP_FLAG_TPM2		= BIT(1),
+	TPM_CHIP_FLAG_USES_IRQ		= BIT(2),
 };
 
 struct tpm_chip {
diff --git a/drivers/char/tpm/tpm_i2c_atmel.c b/drivers/char/tpm/tpm_i2c_atmel.c
index d357065..fe06885 100644
--- a/drivers/char/tpm/tpm_i2c_atmel.c
+++ b/drivers/char/tpm/tpm_i2c_atmel.c
@@ -172,7 +172,6 @@ static int i2c_atmel_probe(struct i2c_client *client,
 	chip->vendor.timeout_b = msecs_to_jiffies(TPM_I2C_LONG_TIMEOUT);
 	chip->vendor.timeout_c = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
 	chip->vendor.timeout_d = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
-	chip->vendor.irq = 0;
 
 	dev_set_drvdata(&chip->dev, priv);
 
diff --git a/drivers/char/tpm/tpm_i2c_infineon.c b/drivers/char/tpm/tpm_i2c_infineon.c
index e74f1c1..093daf9 100644
--- a/drivers/char/tpm/tpm_i2c_infineon.c
+++ b/drivers/char/tpm/tpm_i2c_infineon.c
@@ -585,9 +585,6 @@ static int tpm_tis_i2c_init(struct device *dev)
 	if (IS_ERR(chip))
 		return PTR_ERR(chip);
 
-	/* Disable interrupts */
-	chip->vendor.irq = 0;
-
 	/* Default timeouts */
 	chip->vendor.timeout_a = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
 	chip->vendor.timeout_b = msecs_to_jiffies(TIS_LONG_TIMEOUT);
diff --git a/drivers/char/tpm/tpm_i2c_nuvoton.c b/drivers/char/tpm/tpm_i2c_nuvoton.c
index 76ac21d..bf3ba18 100644
--- a/drivers/char/tpm/tpm_i2c_nuvoton.c
+++ b/drivers/char/tpm/tpm_i2c_nuvoton.c
@@ -55,6 +55,7 @@
 #define I2C_DRIVER_NAME "tpm_i2c_nuvoton"
 
 struct priv_data {
+	int irq;
 	unsigned int intrs;
 };
 
@@ -176,12 +177,12 @@ static bool i2c_nuvoton_check_status(struct tpm_chip *chip, u8 mask, u8 value)
 static int i2c_nuvoton_wait_for_stat(struct tpm_chip *chip, u8 mask, u8 value,
 				     u32 timeout, wait_queue_head_t *queue)
 {
-	if (chip->vendor.irq && queue) {
+	if (chip->flags & TPM_CHIP_FLAG_USES_IRQ && queue) {
 		s32 rc;
 		struct priv_data *priv = dev_get_drvdata(&chip->dev);
 		unsigned int cur_intrs = priv->intrs;
 
-		enable_irq(chip->vendor.irq);
+		enable_irq(priv->irq);
 		rc = wait_event_interruptible_timeout(*queue,
 						      cur_intrs != priv->intrs,
 						      timeout);
@@ -477,7 +478,7 @@ static irqreturn_t i2c_nuvoton_int_handler(int dummy, void *dev_id)
 
 	priv->intrs++;
 	wake_up(&chip->vendor.read_queue);
-	disable_irq_nosync(chip->vendor.irq);
+	disable_irq_nosync(priv->irq);
 	return IRQ_HANDLED;
 }
 
@@ -554,19 +555,21 @@ static int i2c_nuvoton_probe(struct i2c_client *client,
 	 *   TPM_INTF_INT_LEVEL_LOW | TPM_INTF_DATA_AVAIL_INT
 	 * The IRQ should be set in the i2c_board_info (which is done
 	 * automatically in of_i2c_register_devices, for device tree users */
-	chip->vendor.irq = client->irq;
+	chip->flags |= TPM_CHIP_FLAG_USES_IRQ;
+	priv->irq = client->irq;
 
-	if (chip->vendor.irq) {
-		dev_dbg(dev, "%s() chip-vendor.irq\n", __func__);
-		rc = devm_request_irq(dev, chip->vendor.irq,
+	if (chip->flags & TPM_CHIP_FLAG_USES_IRQ) {
+		dev_dbg(dev, "%s() priv->irq\n", __func__);
+		rc = devm_request_irq(dev, client->irq,
 				      i2c_nuvoton_int_handler,
 				      IRQF_TRIGGER_LOW,
 				      dev_name(&chip->dev),
 				      chip);
 		if (rc) {
 			dev_err(dev, "%s() Unable to request irq: %d for use\n",
-				__func__, chip->vendor.irq);
-			chip->vendor.irq = 0;
+				__func__, priv->irq);
+			chip->flags &= ~TPM_CHIP_FLAG_USES_IRQ;
+			priv->irq = 0;
 		} else {
 			/* Clear any pending interrupt */
 			i2c_nuvoton_ready(chip);
diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
index bf333cf..79edfc3 100644
--- a/drivers/char/tpm/tpm_tis.c
+++ b/drivers/char/tpm/tpm_tis.c
@@ -96,6 +96,7 @@ struct tpm_info {
 struct priv_data {
 	void __iomem *iobase;
 	u16 manufacturer_id;
+	int irq;
 	bool irq_tested;
 	wait_queue_head_t int_queue;
 };
@@ -178,7 +179,7 @@ static int request_locality(struct tpm_chip *chip, int l)
 
 	stop = jiffies + chip->vendor.timeout_a;
 
-	if (chip->vendor.irq) {
+	if (chip->flags & TPM_CHIP_FLAG_USES_IRQ) {
 again:
 		timeout = stop - jiffies;
 		if ((long)timeout <= 0)
@@ -386,8 +387,9 @@ static void disable_interrupts(struct tpm_chip *chip)
 	intmask &= ~TPM_GLOBAL_INT_ENABLE;
 	iowrite32(intmask,
 		  priv->iobase + TPM_INT_ENABLE(chip->vendor.locality));
-	devm_free_irq(&chip->dev, chip->vendor.irq, chip);
-	chip->vendor.irq = 0;
+	devm_free_irq(&chip->dev, priv->irq, chip);
+	priv->irq = 0;
+	chip->flags &= ~TPM_CHIP_FLAG_USES_IRQ;
 }
 
 /*
@@ -410,7 +412,7 @@ static int tpm_tis_send_main(struct tpm_chip *chip, u8 *buf, size_t len)
 	iowrite8(TPM_STS_GO,
 		 priv->iobase + TPM_STS(chip->vendor.locality));
 
-	if (chip->vendor.irq) {
+	if (chip->flags & TPM_CHIP_FLAG_USES_IRQ) {
 		ordinal = be32_to_cpu(*((__be32 *) (buf + 6)));
 
 		if (chip->flags & TPM_CHIP_FLAG_TPM2)
@@ -437,14 +439,16 @@ static int tpm_tis_send(struct tpm_chip *chip, u8 *buf, size_t len)
 	int rc, irq;
 	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 
-	if (!chip->vendor.irq || priv->irq_tested)
+	if (!(chip->flags & TPM_CHIP_FLAG_USES_IRQ) || priv->irq_tested)
 		return tpm_tis_send_main(chip, buf, len);
 
 	/* Verify receipt of the expected IRQ */
-	irq = chip->vendor.irq;
-	chip->vendor.irq = 0;
+	irq = priv->irq;
+	priv->irq = 0;
+	chip->flags &= ~TPM_CHIP_FLAG_USES_IRQ;
 	rc = tpm_tis_send_main(chip, buf, len);
-	chip->vendor.irq = irq;
+	priv->irq = irq;
+	chip->flags |= TPM_CHIP_FLAG_USES_IRQ;
 	if (!priv->irq_tested)
 		msleep(1);
 	if (!priv->irq_tested)
@@ -606,7 +610,7 @@ static int tpm_tis_probe_irq_single(struct tpm_chip *chip, u32 intmask,
 			 irq);
 		return -1;
 	}
-	chip->vendor.irq = irq;
+	priv->irq = irq;
 
 	original_int_vec = ioread8(priv->iobase +
 				   TPM_INT_VECTOR(chip->vendor.locality));
@@ -635,7 +639,7 @@ static int tpm_tis_probe_irq_single(struct tpm_chip *chip, u32 intmask,
 	/* tpm_tis_send will either confirm the interrupt is working or it
 	 * will call disable_irq which undoes all of the above.
 	 */
-	if (!chip->vendor.irq) {
+	if (!(chip->flags & TPM_CHIP_FLAG_USES_IRQ)) {
 		iowrite8(original_int_vec,
 			 priv->iobase + TPM_INT_VECTOR(chip->vendor.locality));
 		return 1;
@@ -804,7 +808,7 @@ static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info,
 		if (tpm_info->irq) {
 			tpm_tis_probe_irq_single(chip, intmask, IRQF_SHARED,
 						 tpm_info->irq);
-			if (!chip->vendor.irq)
+			if (!(chip->flags & TPM_CHIP_FLAG_USES_IRQ))
 				dev_err(&chip->dev, FW_BUG
 					"TPM interrupt not working, polling instead\n");
 		} else
@@ -848,7 +852,7 @@ static void tpm_tis_reenable_interrupts(struct tpm_chip *chip)
 
 	/* reenable interrupts that device may have lost or
 	   BIOS/firmware may have disabled */
-	iowrite8(chip->vendor.irq, priv->iobase +
+	iowrite8(priv->irq, priv->iobase +
 		 TPM_INT_VECTOR(chip->vendor.locality));
 
 	intmask =
@@ -867,7 +871,7 @@ static int tpm_tis_resume(struct device *dev)
 	struct tpm_chip *chip = dev_get_drvdata(dev);
 	int ret;
 
-	if (chip->vendor.irq)
+	if (chip->flags & TPM_CHIP_FLAG_USES_IRQ)
 		tpm_tis_reenable_interrupts(chip);
 
 	ret = tpm_pm_resume(dev);
diff --git a/drivers/char/tpm/xen-tpmfront.c b/drivers/char/tpm/xen-tpmfront.c
index efd7d99..a903f86 100644
--- a/drivers/char/tpm/xen-tpmfront.c
+++ b/drivers/char/tpm/xen-tpmfront.c
@@ -28,6 +28,7 @@ struct tpm_private {
 	unsigned int evtchn;
 	int ring_ref;
 	domid_t backend_id;
+	int irq;
 };
 
 enum status_bits {
@@ -217,7 +218,7 @@ static int setup_ring(struct xenbus_device *dev, struct tpm_private *priv)
 		xenbus_dev_fatal(dev, rv, "allocating TPM irq");
 		return rv;
 	}
-	priv->chip->vendor.irq = rv;
+	priv->irq = rv;
 
  again:
 	rv = xenbus_transaction_start(&xbt);
@@ -277,8 +278,8 @@ static void ring_free(struct tpm_private *priv)
 	else
 		free_page((unsigned long)priv->shr);
 
-	if (priv->chip && priv->chip->vendor.irq)
-		unbind_from_irqhandler(priv->chip->vendor.irq, priv);
+	if (priv->irq)
+		unbind_from_irqhandler(priv->irq, priv);
 
 	kfree(priv);
 }
-- 
2.5.0


------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 6/7] tpm: Move remaining tpm_vendor_specific structure data to tpm_chip
       [not found] ` <1458975615-8095-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
                     ` (4 preceding siblings ...)
  2016-03-26  7:00   ` [PATCH v2 5/7] tpm: drop 'irq' from struct tpm_vendor_specific Christophe Ricard
@ 2016-03-26  7:00   ` Christophe Ricard
       [not found]     ` <1458975615-8095-7-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
  2016-03-26  7:00   ` [PATCH v2 7/7] tpm: drop 'read_queue' from struct tpm_vendor_specific Christophe Ricard
  2016-03-29 14:10   ` [PATCH v2 0/7] Remove the tpm_vendor_specific structure Jarkko Sakkinen
  7 siblings, 1 reply; 17+ messages in thread
From: Christophe Ricard @ 2016-03-26  7:00 UTC (permalink / raw)
  To: jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA
  Cc: jean-luc.blanc-qxv4g6HH51o, ashley-fm2HMyfA2y6tG0bUXCXiUA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
	christophe-h.ricard-qxv4g6HH51o, benoit.houyere-qxv4g6HH51o

As no more information in tpm_vendor_specific structure are
available in tpm_vendor_specific structure move them to tpm_chip structure.

Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
---
 drivers/char/tpm/st33zp24/st33zp24.c | 28 +++++------
 drivers/char/tpm/tpm-interface.c     | 48 +++++++++---------
 drivers/char/tpm/tpm-sysfs.c         | 20 ++++----
 drivers/char/tpm/tpm.h               | 12 ++---
 drivers/char/tpm/tpm2-cmd.c          |  2 +-
 drivers/char/tpm/tpm_i2c_atmel.c     |  8 +--
 drivers/char/tpm/tpm_i2c_infineon.c  | 44 ++++++++---------
 drivers/char/tpm/tpm_i2c_nuvoton.c   | 24 ++++-----
 drivers/char/tpm/tpm_tis.c           | 95 ++++++++++++++++++------------------
 drivers/char/tpm/xen-tpmfront.c      |  4 +-
 10 files changed, 141 insertions(+), 144 deletions(-)

diff --git a/drivers/char/tpm/st33zp24/st33zp24.c b/drivers/char/tpm/st33zp24/st33zp24.c
index 7a5de0e..2834c6f 100644
--- a/drivers/char/tpm/st33zp24/st33zp24.c
+++ b/drivers/char/tpm/st33zp24/st33zp24.c
@@ -131,7 +131,7 @@ static int check_locality(struct tpm_chip *chip)
 	if (status && (data &
 		(TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID)) ==
 		(TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID))
-		return chip->vendor.locality;
+		return chip->locality;
 
 	return -EACCES;
 } /* check_locality() */
@@ -148,20 +148,20 @@ static int request_locality(struct tpm_chip *chip)
 	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
 	u8 data;
 
-	if (check_locality(chip) == chip->vendor.locality)
-		return chip->vendor.locality;
+	if (check_locality(chip) == chip->locality)
+		return chip->locality;
 
 	data = TPM_ACCESS_REQUEST_USE;
 	ret = tpm_dev->ops->send(tpm_dev->phy_id, TPM_ACCESS, &data, 1);
 	if (ret < 0)
 		return ret;
 
-	stop = jiffies + chip->vendor.timeout_a;
+	stop = jiffies + chip->timeout_a;
 
 	/* Request locality is usually effective after the request */
 	do {
 		if (check_locality(chip) >= 0)
-			return chip->vendor.locality;
+			return chip->locality;
 		msleep(TPM_TIMEOUT);
 	} while (time_before(jiffies, stop));
 
@@ -195,7 +195,7 @@ static int get_burstcount(struct tpm_chip *chip)
 	int burstcnt, status;
 	u8 temp;
 
-	stop = jiffies + chip->vendor.timeout_d;
+	stop = jiffies + chip->timeout_d;
 	do {
 		status = tpm_dev->ops->recv(tpm_dev->phy_id, TPM_STS + 1,
 					    &temp, 1);
@@ -323,7 +323,7 @@ static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
 	while (size < count &&
 	       wait_for_stat(chip,
 			     TPM_STS_DATA_AVAIL | TPM_STS_VALID,
-			     chip->vendor.timeout_c,
+			     chip->timeout_c,
 			     &chip->vendor.read_queue, true) == 0) {
 		burstcnt = get_burstcount(chip);
 		if (burstcnt < 0)
@@ -388,7 +388,7 @@ static int st33zp24_send(struct tpm_chip *chip, unsigned char *buf,
 	if ((status & TPM_STS_COMMAND_READY) == 0) {
 		st33zp24_cancel(chip);
 		if (wait_for_stat
-		    (chip, TPM_STS_COMMAND_READY, chip->vendor.timeout_b,
+		    (chip, TPM_STS_COMMAND_READY, chip->timeout_b,
 		     &chip->vendor.read_queue, false) < 0) {
 			ret = -ETIME;
 			goto out_err;
@@ -543,12 +543,12 @@ int st33zp24_probe(void *phy_id, const struct st33zp24_phy_ops *ops,
 	tpm_dev->ops = ops;
 	dev_set_drvdata(&chip->dev, tpm_dev);
 
-	chip->vendor.timeout_a = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
-	chip->vendor.timeout_b = msecs_to_jiffies(TIS_LONG_TIMEOUT);
-	chip->vendor.timeout_c = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
-	chip->vendor.timeout_d = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
+	chip->timeout_a = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
+	chip->timeout_b = msecs_to_jiffies(TIS_LONG_TIMEOUT);
+	chip->timeout_c = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
+	chip->timeout_d = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
 
-	chip->vendor.locality = LOCALITY0;
+	chip->locality = LOCALITY0;
 
 	if (irq) {
 		/* INTERRUPT Setup */
@@ -651,7 +651,7 @@ int st33zp24_pm_resume(struct device *dev)
 	if (gpio_is_valid(tpm_dev->io_lpcpd)) {
 		gpio_set_value(tpm_dev->io_lpcpd, 1);
 		ret = wait_for_stat(chip,
-				TPM_STS_VALID, chip->vendor.timeout_b,
+				TPM_STS_VALID, chip->timeout_b,
 				&chip->vendor.read_queue, false);
 	} else {
 		ret = tpm_pm_resume(dev);
diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
index 0bdd25b..69cb082 100644
--- a/drivers/char/tpm/tpm-interface.c
+++ b/drivers/char/tpm/tpm-interface.c
@@ -319,7 +319,7 @@ unsigned long tpm_calc_ordinal_duration(struct tpm_chip *chip,
 		duration_idx = tpm_ordinal_duration[ordinal];
 
 	if (duration_idx != TPM_UNDEFINED)
-		duration = chip->vendor.duration[duration_idx];
+		duration = chip->duration[duration_idx];
 	if (duration <= 0)
 		return 2 * 60 * HZ;
 	else
@@ -505,15 +505,15 @@ int tpm_get_timeouts(struct tpm_chip *chip)
 
 	if (chip->flags & TPM_CHIP_FLAG_TPM2) {
 		/* Fixed timeouts for TPM2 */
-		chip->vendor.timeout_a = msecs_to_jiffies(TPM2_TIMEOUT_A);
-		chip->vendor.timeout_b = msecs_to_jiffies(TPM2_TIMEOUT_B);
-		chip->vendor.timeout_c = msecs_to_jiffies(TPM2_TIMEOUT_C);
-		chip->vendor.timeout_d = msecs_to_jiffies(TPM2_TIMEOUT_D);
-		chip->vendor.duration[TPM_SHORT] =
+		chip->timeout_a = msecs_to_jiffies(TPM2_TIMEOUT_A);
+		chip->timeout_b = msecs_to_jiffies(TPM2_TIMEOUT_B);
+		chip->timeout_c = msecs_to_jiffies(TPM2_TIMEOUT_C);
+		chip->timeout_d = msecs_to_jiffies(TPM2_TIMEOUT_D);
+		chip->duration[TPM_SHORT] =
 		    msecs_to_jiffies(TPM2_DURATION_SHORT);
-		chip->vendor.duration[TPM_MEDIUM] =
+		chip->duration[TPM_MEDIUM] =
 		    msecs_to_jiffies(TPM2_DURATION_MEDIUM);
-		chip->vendor.duration[TPM_LONG] =
+		chip->duration[TPM_LONG] =
 		    msecs_to_jiffies(TPM2_DURATION_LONG);
 		return 0;
 	}
@@ -561,10 +561,10 @@ int tpm_get_timeouts(struct tpm_chip *chip)
 	 * of misreporting.
 	 */
 	if (chip->ops->update_timeouts != NULL)
-		chip->vendor.timeout_adjusted =
+		chip->timeout_adjusted =
 			chip->ops->update_timeouts(chip, new_timeout);
 
-	if (!chip->vendor.timeout_adjusted) {
+	if (!chip->timeout_adjusted) {
 		/* Don't overwrite default if value is 0 */
 		if (new_timeout[0] != 0 && new_timeout[0] < 1000) {
 			int i;
@@ -572,12 +572,12 @@ int tpm_get_timeouts(struct tpm_chip *chip)
 			/* timeouts in msec rather usec */
 			for (i = 0; i != ARRAY_SIZE(new_timeout); i++)
 				new_timeout[i] *= 1000;
-			chip->vendor.timeout_adjusted = true;
+			chip->timeout_adjusted = true;
 		}
 	}
 
 	/* Report adjusted timeouts */
-	if (chip->vendor.timeout_adjusted) {
+	if (chip->timeout_adjusted) {
 		dev_info(&chip->dev,
 			 HW_ERR "Adjusting reported timeouts: A %lu->%luus B %lu->%luus C %lu->%luus D %lu->%luus\n",
 			 old_timeout[0], new_timeout[0],
@@ -586,10 +586,10 @@ int tpm_get_timeouts(struct tpm_chip *chip)
 			 old_timeout[3], new_timeout[3]);
 	}
 
-	chip->vendor.timeout_a = usecs_to_jiffies(new_timeout[0]);
-	chip->vendor.timeout_b = usecs_to_jiffies(new_timeout[1]);
-	chip->vendor.timeout_c = usecs_to_jiffies(new_timeout[2]);
-	chip->vendor.timeout_d = usecs_to_jiffies(new_timeout[3]);
+	chip->timeout_a = usecs_to_jiffies(new_timeout[0]);
+	chip->timeout_b = usecs_to_jiffies(new_timeout[1]);
+	chip->timeout_c = usecs_to_jiffies(new_timeout[2]);
+	chip->timeout_d = usecs_to_jiffies(new_timeout[3]);
 
 duration:
 	tpm_cmd.header.in = tpm_getcap_header;
@@ -608,11 +608,11 @@ duration:
 		return -EINVAL;
 
 	duration_cap = &tpm_cmd.params.getcap_out.cap.duration;
-	chip->vendor.duration[TPM_SHORT] =
+	chip->duration[TPM_SHORT] =
 	    usecs_to_jiffies(be32_to_cpu(duration_cap->tpm_short));
-	chip->vendor.duration[TPM_MEDIUM] =
+	chip->duration[TPM_MEDIUM] =
 	    usecs_to_jiffies(be32_to_cpu(duration_cap->tpm_medium));
-	chip->vendor.duration[TPM_LONG] =
+	chip->duration[TPM_LONG] =
 	    usecs_to_jiffies(be32_to_cpu(duration_cap->tpm_long));
 
 	/* The Broadcom BCM0102 chipset in a Dell Latitude D820 gets the above
@@ -620,11 +620,11 @@ duration:
 	 * fix up the resulting too-small TPM_SHORT value to make things work.
 	 * We also scale the TPM_MEDIUM and -_LONG values by 1000.
 	 */
-	if (chip->vendor.duration[TPM_SHORT] < (HZ / 100)) {
-		chip->vendor.duration[TPM_SHORT] = HZ;
-		chip->vendor.duration[TPM_MEDIUM] *= 1000;
-		chip->vendor.duration[TPM_LONG] *= 1000;
-		chip->vendor.duration_adjusted = true;
+	if (chip->duration[TPM_SHORT] < (HZ / 100)) {
+		chip->duration[TPM_SHORT] = HZ;
+		chip->duration[TPM_MEDIUM] *= 1000;
+		chip->duration[TPM_LONG] *= 1000;
+		chip->duration_adjusted = true;
 		dev_info(&chip->dev, "Adjusting TPM timeout parameters.");
 	}
 	return 0;
diff --git a/drivers/char/tpm/tpm-sysfs.c b/drivers/char/tpm/tpm-sysfs.c
index 34e7fc7..a7c3473 100644
--- a/drivers/char/tpm/tpm-sysfs.c
+++ b/drivers/char/tpm/tpm-sysfs.c
@@ -236,14 +236,14 @@ static ssize_t durations_show(struct device *dev, struct device_attribute *attr,
 {
 	struct tpm_chip *chip = dev_get_drvdata(dev);
 
-	if (chip->vendor.duration[TPM_LONG] == 0)
+	if (chip->duration[TPM_LONG] == 0)
 		return 0;
 
 	return sprintf(buf, "%d %d %d [%s]\n",
-		       jiffies_to_usecs(chip->vendor.duration[TPM_SHORT]),
-		       jiffies_to_usecs(chip->vendor.duration[TPM_MEDIUM]),
-		       jiffies_to_usecs(chip->vendor.duration[TPM_LONG]),
-		       chip->vendor.duration_adjusted
+		       jiffies_to_usecs(chip->duration[TPM_SHORT]),
+		       jiffies_to_usecs(chip->duration[TPM_MEDIUM]),
+		       jiffies_to_usecs(chip->duration[TPM_LONG]),
+		       chip->duration_adjusted
 		       ? "adjusted" : "original");
 }
 static DEVICE_ATTR_RO(durations);
@@ -254,11 +254,11 @@ static ssize_t timeouts_show(struct device *dev, struct device_attribute *attr,
 	struct tpm_chip *chip = dev_get_drvdata(dev);
 
 	return sprintf(buf, "%d %d %d %d [%s]\n",
-		       jiffies_to_usecs(chip->vendor.timeout_a),
-		       jiffies_to_usecs(chip->vendor.timeout_b),
-		       jiffies_to_usecs(chip->vendor.timeout_c),
-		       jiffies_to_usecs(chip->vendor.timeout_d),
-		       chip->vendor.timeout_adjusted
+		       jiffies_to_usecs(chip->timeout_a),
+		       jiffies_to_usecs(chip->timeout_b),
+		       jiffies_to_usecs(chip->timeout_c),
+		       jiffies_to_usecs(chip->timeout_d),
+		       chip->timeout_adjusted
 		       ? "adjusted" : "original");
 }
 static DEVICE_ATTR_RO(timeouts);
diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
index 26c8d62..cfd5420 100644
--- a/drivers/char/tpm/tpm.h
+++ b/drivers/char/tpm/tpm.h
@@ -131,12 +131,6 @@ enum tpm2_startup_types {
 struct tpm_chip;
 
 struct tpm_vendor_specific {
-	int locality;
-	unsigned long timeout_a, timeout_b, timeout_c, timeout_d; /* jiffies */
-	bool timeout_adjusted;
-	unsigned long duration[3]; /* jiffies */
-	bool duration_adjusted;
-
 	wait_queue_head_t read_queue;
 };
 
@@ -170,7 +164,11 @@ struct tpm_chip {
 
 	struct mutex tpm_mutex;	/* tpm is processing */
 
-	struct tpm_vendor_specific vendor;
+	int locality;
+	unsigned long timeout_a, timeout_b, timeout_c, timeout_d; /* jiffies */
+	bool timeout_adjusted;
+	unsigned long duration[3]; /* jiffies */
+	bool duration_adjusted;
 
 	struct dentry **bios_dir;
 
diff --git a/drivers/char/tpm/tpm2-cmd.c b/drivers/char/tpm/tpm2-cmd.c
index 5fc0e7c..9ce8031 100644
--- a/drivers/char/tpm/tpm2-cmd.c
+++ b/drivers/char/tpm/tpm2-cmd.c
@@ -793,7 +793,7 @@ unsigned long tpm2_calc_ordinal_duration(struct tpm_chip *chip, u32 ordinal)
 		index = tpm2_ordinal_duration[ordinal - TPM2_CC_FIRST];
 
 	if (index != TPM_UNDEFINED)
-		duration = chip->vendor.duration[index];
+		duration = chip->duration[index];
 
 	if (duration <= 0)
 		duration = 2 * 60 * HZ;
diff --git a/drivers/char/tpm/tpm_i2c_atmel.c b/drivers/char/tpm/tpm_i2c_atmel.c
index fe06885..648c0b1 100644
--- a/drivers/char/tpm/tpm_i2c_atmel.c
+++ b/drivers/char/tpm/tpm_i2c_atmel.c
@@ -168,10 +168,10 @@ static int i2c_atmel_probe(struct i2c_client *client,
 		return -ENOMEM;
 
 	/* Default timeouts */
-	chip->vendor.timeout_a = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
-	chip->vendor.timeout_b = msecs_to_jiffies(TPM_I2C_LONG_TIMEOUT);
-	chip->vendor.timeout_c = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
-	chip->vendor.timeout_d = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
+	chip->timeout_a = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
+	chip->timeout_b = msecs_to_jiffies(TPM_I2C_LONG_TIMEOUT);
+	chip->timeout_c = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
+	chip->timeout_d = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
 
 	dev_set_drvdata(&chip->dev, priv);
 
diff --git a/drivers/char/tpm/tpm_i2c_infineon.c b/drivers/char/tpm/tpm_i2c_infineon.c
index 093daf9..163d823 100644
--- a/drivers/char/tpm/tpm_i2c_infineon.c
+++ b/drivers/char/tpm/tpm_i2c_infineon.c
@@ -288,7 +288,7 @@ static int check_locality(struct tpm_chip *chip, int loc)
 
 	if ((buf & (TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID)) ==
 	    (TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID)) {
-		chip->vendor.locality = loc;
+		chip->locality = loc;
 		return loc;
 	}
 
@@ -320,7 +320,7 @@ static int request_locality(struct tpm_chip *chip, int loc)
 	iic_tpm_write(TPM_ACCESS(loc), &buf, 1);
 
 	/* wait for burstcount */
-	stop = jiffies + chip->vendor.timeout_a;
+	stop = jiffies + chip->timeout_a;
 	do {
 		if (check_locality(chip, loc) >= 0)
 			return loc;
@@ -337,7 +337,7 @@ static u8 tpm_tis_i2c_status(struct tpm_chip *chip)
 	u8 i = 0;
 
 	do {
-		if (iic_tpm_read(TPM_STS(chip->vendor.locality), &buf, 1) < 0)
+		if (iic_tpm_read(TPM_STS(chip->locality), &buf, 1) < 0)
 			return 0;
 
 		i++;
@@ -351,7 +351,7 @@ static void tpm_tis_i2c_ready(struct tpm_chip *chip)
 {
 	/* this causes the current command to be aborted */
 	u8 buf = TPM_STS_COMMAND_READY;
-	iic_tpm_write_long(TPM_STS(chip->vendor.locality), &buf, 1);
+	iic_tpm_write_long(TPM_STS(chip->locality), &buf, 1);
 }
 
 static ssize_t get_burstcount(struct tpm_chip *chip)
@@ -362,10 +362,10 @@ static ssize_t get_burstcount(struct tpm_chip *chip)
 
 	/* wait for burstcount */
 	/* which timeout value, spec has 2 answers (c & d) */
-	stop = jiffies + chip->vendor.timeout_d;
+	stop = jiffies + chip->timeout_d;
 	do {
 		/* Note: STS is little endian */
-		if (iic_tpm_read(TPM_STS(chip->vendor.locality)+1, buf, 3) < 0)
+		if (iic_tpm_read(TPM_STS(chip->locality)+1, buf, 3) < 0)
 			burstcnt = 0;
 		else
 			burstcnt = (buf[2] << 16) + (buf[1] << 8) + buf[0];
@@ -419,7 +419,7 @@ static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
 		if (burstcnt > (count - size))
 			burstcnt = count - size;
 
-		rc = iic_tpm_read(TPM_DATA_FIFO(chip->vendor.locality),
+		rc = iic_tpm_read(TPM_DATA_FIFO(chip->locality),
 				  &(buf[size]), burstcnt);
 		if (rc == 0)
 			size += burstcnt;
@@ -464,7 +464,7 @@ static int tpm_tis_i2c_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 		goto out;
 	}
 
-	wait_for_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c, &status);
+	wait_for_stat(chip, TPM_STS_VALID, chip->timeout_c, &status);
 	if (status & TPM_STS_DATA_AVAIL) {	/* retry? */
 		dev_err(&chip->dev, "Error left over data\n");
 		size = -EIO;
@@ -477,7 +477,7 @@ out:
 	 * so we sleep rather than keeping the bus busy
 	 */
 	usleep_range(SLEEP_DURATION_RESET_LOW, SLEEP_DURATION_RESET_HI);
-	release_locality(chip, chip->vendor.locality, 0);
+	release_locality(chip, chip->locality, 0);
 	return size;
 }
 
@@ -500,7 +500,7 @@ static int tpm_tis_i2c_send(struct tpm_chip *chip, u8 *buf, size_t len)
 		tpm_tis_i2c_ready(chip);
 		if (wait_for_stat
 		    (chip, TPM_STS_COMMAND_READY,
-		     chip->vendor.timeout_b, &status) < 0) {
+		     chip->timeout_b, &status) < 0) {
 			rc = -ETIME;
 			goto out_err;
 		}
@@ -516,7 +516,7 @@ static int tpm_tis_i2c_send(struct tpm_chip *chip, u8 *buf, size_t len)
 		if (burstcnt > (len - 1 - count))
 			burstcnt = len - 1 - count;
 
-		rc = iic_tpm_write(TPM_DATA_FIFO(chip->vendor.locality),
+		rc = iic_tpm_write(TPM_DATA_FIFO(chip->locality),
 				   &(buf[count]), burstcnt);
 		if (rc == 0)
 			count += burstcnt;
@@ -530,7 +530,7 @@ static int tpm_tis_i2c_send(struct tpm_chip *chip, u8 *buf, size_t len)
 		}
 
 		wait_for_stat(chip, TPM_STS_VALID,
-			      chip->vendor.timeout_c, &status);
+			      chip->timeout_c, &status);
 
 		if ((status & TPM_STS_DATA_EXPECT) == 0) {
 			rc = -EIO;
@@ -539,15 +539,15 @@ static int tpm_tis_i2c_send(struct tpm_chip *chip, u8 *buf, size_t len)
 	}
 
 	/* write last byte */
-	iic_tpm_write(TPM_DATA_FIFO(chip->vendor.locality), &(buf[count]), 1);
-	wait_for_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c, &status);
+	iic_tpm_write(TPM_DATA_FIFO(chip->locality), &(buf[count]), 1);
+	wait_for_stat(chip, TPM_STS_VALID, chip->timeout_c, &status);
 	if ((status & TPM_STS_DATA_EXPECT) != 0) {
 		rc = -EIO;
 		goto out_err;
 	}
 
 	/* go and do it */
-	iic_tpm_write(TPM_STS(chip->vendor.locality), &sts, 1);
+	iic_tpm_write(TPM_STS(chip->locality), &sts, 1);
 
 	return len;
 out_err:
@@ -556,7 +556,7 @@ out_err:
 	 * so we sleep rather than keeping the bus busy
 	 */
 	usleep_range(SLEEP_DURATION_RESET_LOW, SLEEP_DURATION_RESET_HI);
-	release_locality(chip, chip->vendor.locality, 0);
+	release_locality(chip, chip->locality, 0);
 	return rc;
 }
 
@@ -586,10 +586,10 @@ static int tpm_tis_i2c_init(struct device *dev)
 		return PTR_ERR(chip);
 
 	/* Default timeouts */
-	chip->vendor.timeout_a = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
-	chip->vendor.timeout_b = msecs_to_jiffies(TIS_LONG_TIMEOUT);
-	chip->vendor.timeout_c = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
-	chip->vendor.timeout_d = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
+	chip->timeout_a = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
+	chip->timeout_b = msecs_to_jiffies(TIS_LONG_TIMEOUT);
+	chip->timeout_c = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
+	chip->timeout_d = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
 
 	if (request_locality(chip, 0) != 0) {
 		dev_err(dev, "could not request locality\n");
@@ -623,7 +623,7 @@ static int tpm_tis_i2c_init(struct device *dev)
 
 	return tpm_chip_register(chip);
 out_release:
-	release_locality(chip, chip->vendor.locality, 1);
+	release_locality(chip, chip->locality, 1);
 	tpm_dev.client = NULL;
 out_err:
 	return rc;
@@ -695,7 +695,7 @@ static int tpm_tis_i2c_remove(struct i2c_client *client)
 	struct tpm_chip *chip = tpm_dev.chip;
 
 	tpm_chip_unregister(chip);
-	release_locality(chip, chip->vendor.locality, 1);
+	release_locality(chip, chip->locality, 1);
 	tpm_dev.client = NULL;
 
 	return 0;
diff --git a/drivers/char/tpm/tpm_i2c_nuvoton.c b/drivers/char/tpm/tpm_i2c_nuvoton.c
index bf3ba18..97f0e1a 100644
--- a/drivers/char/tpm/tpm_i2c_nuvoton.c
+++ b/drivers/char/tpm/tpm_i2c_nuvoton.c
@@ -143,7 +143,7 @@ static void i2c_nuvoton_ready(struct tpm_chip *chip)
 static int i2c_nuvoton_get_burstcount(struct i2c_client *client,
 				      struct tpm_chip *chip)
 {
-	unsigned long stop = jiffies + chip->vendor.timeout_d;
+	unsigned long stop = jiffies + chip->timeout_d;
 	s32 status;
 	int burst_count = -1;
 	u8 data;
@@ -237,7 +237,7 @@ static int i2c_nuvoton_recv_data(struct i2c_client *client,
 
 	while (size < count &&
 	       i2c_nuvoton_wait_for_data_avail(chip,
-					       chip->vendor.timeout_c,
+					       chip->timeout_c,
 					       &chip->vendor.read_queue) == 0) {
 		burst_count = i2c_nuvoton_get_burstcount(client, chip);
 		if (burst_count < 0) {
@@ -286,7 +286,7 @@ static int i2c_nuvoton_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 		 * tag, paramsize, and result
 		 */
 		status = i2c_nuvoton_wait_for_data_avail(
-			chip, chip->vendor.timeout_c, &chip->vendor.read_queue);
+			chip, chip->timeout_c, &chip->vendor.read_queue);
 		if (status != 0) {
 			dev_err(dev, "%s() timeout on dataAvail\n", __func__);
 			size = -ETIMEDOUT;
@@ -326,7 +326,7 @@ static int i2c_nuvoton_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 		}
 		if (i2c_nuvoton_wait_for_stat(
 			    chip, TPM_STS_VALID | TPM_STS_DATA_AVAIL,
-			    TPM_STS_VALID, chip->vendor.timeout_c,
+			    TPM_STS_VALID, chip->timeout_c,
 			    NULL)) {
 			dev_err(dev, "%s() error left over data\n", __func__);
 			size = -ETIMEDOUT;
@@ -358,7 +358,7 @@ static int i2c_nuvoton_send(struct tpm_chip *chip, u8 *buf, size_t len)
 		i2c_nuvoton_ready(chip);
 		if (i2c_nuvoton_wait_for_stat(chip, TPM_STS_COMMAND_READY,
 					      TPM_STS_COMMAND_READY,
-					      chip->vendor.timeout_b, NULL)) {
+					      chip->timeout_b, NULL)) {
 			dev_err(dev, "%s() timeout on commandReady\n",
 				__func__);
 			rc = -EIO;
@@ -390,7 +390,7 @@ static int i2c_nuvoton_send(struct tpm_chip *chip, u8 *buf, size_t len)
 						       TPM_STS_EXPECT,
 						       TPM_STS_VALID |
 						       TPM_STS_EXPECT,
-						       chip->vendor.timeout_c,
+						       chip->timeout_c,
 						       NULL);
 			if (rc < 0) {
 				dev_err(dev, "%s() timeout on Expect\n",
@@ -415,7 +415,7 @@ static int i2c_nuvoton_send(struct tpm_chip *chip, u8 *buf, size_t len)
 		rc = i2c_nuvoton_wait_for_stat(chip,
 					       TPM_STS_VALID | TPM_STS_EXPECT,
 					       TPM_STS_VALID,
-					       chip->vendor.timeout_c, NULL);
+					       chip->timeout_c, NULL);
 		if (rc) {
 			dev_err(dev, "%s() timeout on Expect to clear\n",
 				__func__);
@@ -543,10 +543,10 @@ static int i2c_nuvoton_probe(struct i2c_client *client,
 	init_waitqueue_head(&chip->vendor.read_queue);
 
 	/* Default timeouts */
-	chip->vendor.timeout_a = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
-	chip->vendor.timeout_b = msecs_to_jiffies(TPM_I2C_LONG_TIMEOUT);
-	chip->vendor.timeout_c = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
-	chip->vendor.timeout_d = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
+	chip->timeout_a = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
+	chip->timeout_b = msecs_to_jiffies(TPM_I2C_LONG_TIMEOUT);
+	chip->timeout_c = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
+	chip->timeout_d = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
 
 	dev_set_drvdata(&chip->dev, priv);
 
@@ -577,7 +577,7 @@ static int i2c_nuvoton_probe(struct i2c_client *client,
 			rc = i2c_nuvoton_wait_for_stat(chip,
 						       TPM_STS_COMMAND_READY,
 						       TPM_STS_COMMAND_READY,
-						       chip->vendor.timeout_b,
+						       chip->timeout_b,
 						       NULL);
 			if (rc == 0) {
 				/*
diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
index 79edfc3..1ec4992 100644
--- a/drivers/char/tpm/tpm_tis.c
+++ b/drivers/char/tpm/tpm_tis.c
@@ -131,7 +131,7 @@ static inline int is_itpm(struct acpi_device *dev)
 static int wait_startup(struct tpm_chip *chip, int l)
 {
 	struct priv_data *priv = dev_get_drvdata(&chip->dev);
-	unsigned long stop = jiffies + chip->vendor.timeout_a;
+	unsigned long stop = jiffies + chip->timeout_a;
 
 	do {
 		if (ioread8(priv->iobase + TPM_ACCESS(l)) &
@@ -149,7 +149,7 @@ static int check_locality(struct tpm_chip *chip, int l)
 	if ((ioread8(priv->iobase + TPM_ACCESS(l)) &
 	     (TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID)) ==
 	    (TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID))
-		return chip->vendor.locality = l;
+		return chip->locality = l;
 
 	return -1;
 }
@@ -177,7 +177,7 @@ static int request_locality(struct tpm_chip *chip, int l)
 	iowrite8(TPM_ACCESS_REQUEST_USE,
 		 priv->iobase + TPM_ACCESS(l));
 
-	stop = jiffies + chip->vendor.timeout_a;
+	stop = jiffies + chip->timeout_a;
 
 	if (chip->flags & TPM_CHIP_FLAG_USES_IRQ) {
 again:
@@ -211,7 +211,7 @@ static u8 tpm_tis_status(struct tpm_chip *chip)
 	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 
 	return ioread8(priv->iobase +
-		       TPM_STS(chip->vendor.locality));
+		       TPM_STS(chip->locality));
 }
 
 static void tpm_tis_ready(struct tpm_chip *chip)
@@ -220,7 +220,7 @@ static void tpm_tis_ready(struct tpm_chip *chip)
 
 	/* this causes the current command to be aborted */
 	iowrite8(TPM_STS_COMMAND_READY,
-		 priv->iobase + TPM_STS(chip->vendor.locality));
+		 priv->iobase + TPM_STS(chip->locality));
 }
 
 static int get_burstcount(struct tpm_chip *chip)
@@ -231,12 +231,12 @@ static int get_burstcount(struct tpm_chip *chip)
 
 	/* wait for burstcount */
 	/* which timeout value, spec has 2 answers (c & d) */
-	stop = jiffies + chip->vendor.timeout_d;
+	stop = jiffies + chip->timeout_d;
 	do {
 		burstcnt = ioread8(priv->iobase +
-				   TPM_STS(chip->vendor.locality) + 1);
+				   TPM_STS(chip->locality) + 1);
 		burstcnt += ioread8(priv->iobase +
-				    TPM_STS(chip->vendor.locality) +
+				    TPM_STS(chip->locality) +
 				    2) << 8;
 		if (burstcnt)
 			return burstcnt;
@@ -252,14 +252,13 @@ static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
 	while (size < count &&
 	       wait_for_tpm_stat(chip,
 				 TPM_STS_DATA_AVAIL | TPM_STS_VALID,
-				 chip->vendor.timeout_c,
+				 chip->timeout_c,
 				 &chip->vendor.read_queue, true)
 	       == 0) {
 		burstcnt = get_burstcount(chip);
 		for (; burstcnt > 0 && size < count; burstcnt--)
 			buf[size++] = ioread8(priv->iobase +
-					      TPM_DATA_FIFO(chip->vendor.
-							    locality));
+					      TPM_DATA_FIFO(chip->locality));
 	}
 	return size;
 }
@@ -296,7 +295,7 @@ static int tpm_tis_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 		goto out;
 	}
 
-	wait_for_tpm_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c,
+	wait_for_tpm_stat(chip, TPM_STS_VALID, chip->timeout_c,
 			  &priv->int_queue, false);
 	status = tpm_tis_status(chip);
 	if (status & TPM_STS_DATA_AVAIL) {	/* retry? */
@@ -307,7 +306,7 @@ static int tpm_tis_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 
 out:
 	tpm_tis_ready(chip);
-	release_locality(chip, chip->vendor.locality, 0);
+	release_locality(chip, chip->locality, 0);
 	return size;
 }
 
@@ -333,7 +332,7 @@ static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
 	if ((status & TPM_STS_COMMAND_READY) == 0) {
 		tpm_tis_ready(chip);
 		if (wait_for_tpm_stat
-		    (chip, TPM_STS_COMMAND_READY, chip->vendor.timeout_b,
+		    (chip, TPM_STS_COMMAND_READY, chip->timeout_b,
 		     &priv->int_queue, false) < 0) {
 			rc = -ETIME;
 			goto out_err;
@@ -344,11 +343,11 @@ static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
 		burstcnt = get_burstcount(chip);
 		for (; burstcnt > 0 && count < len - 1; burstcnt--) {
 			iowrite8(buf[count], priv->iobase +
-				 TPM_DATA_FIFO(chip->vendor.locality));
+				 TPM_DATA_FIFO(chip->locality));
 			count++;
 		}
 
-		wait_for_tpm_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c,
+		wait_for_tpm_stat(chip, TPM_STS_VALID, chip->timeout_c,
 				  &priv->int_queue, false);
 		status = tpm_tis_status(chip);
 		if (!itpm && (status & TPM_STS_DATA_EXPECT) == 0) {
@@ -359,8 +358,8 @@ static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
 
 	/* write last byte */
 	iowrite8(buf[count],
-		 priv->iobase + TPM_DATA_FIFO(chip->vendor.locality));
-	wait_for_tpm_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c,
+		 priv->iobase + TPM_DATA_FIFO(chip->locality));
+	wait_for_tpm_stat(chip, TPM_STS_VALID, chip->timeout_c,
 			  &priv->int_queue, false);
 	status = tpm_tis_status(chip);
 	if ((status & TPM_STS_DATA_EXPECT) != 0) {
@@ -372,7 +371,7 @@ static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
 
 out_err:
 	tpm_tis_ready(chip);
-	release_locality(chip, chip->vendor.locality, 0);
+	release_locality(chip, chip->locality, 0);
 	return rc;
 }
 
@@ -383,10 +382,10 @@ static void disable_interrupts(struct tpm_chip *chip)
 
 	intmask =
 	    ioread32(priv->iobase +
-		     TPM_INT_ENABLE(chip->vendor.locality));
+		     TPM_INT_ENABLE(chip->locality));
 	intmask &= ~TPM_GLOBAL_INT_ENABLE;
 	iowrite32(intmask,
-		  priv->iobase + TPM_INT_ENABLE(chip->vendor.locality));
+		  priv->iobase + TPM_INT_ENABLE(chip->locality));
 	devm_free_irq(&chip->dev, priv->irq, chip);
 	priv->irq = 0;
 	chip->flags &= ~TPM_CHIP_FLAG_USES_IRQ;
@@ -410,7 +409,7 @@ static int tpm_tis_send_main(struct tpm_chip *chip, u8 *buf, size_t len)
 
 	/* go and do it */
 	iowrite8(TPM_STS_GO,
-		 priv->iobase + TPM_STS(chip->vendor.locality));
+		 priv->iobase + TPM_STS(chip->locality));
 
 	if (chip->flags & TPM_CHIP_FLAG_USES_IRQ) {
 		ordinal = be32_to_cpu(*((__be32 *) (buf + 6)));
@@ -430,7 +429,7 @@ static int tpm_tis_send_main(struct tpm_chip *chip, u8 *buf, size_t len)
 	return len;
 out_err:
 	tpm_tis_ready(chip);
-	release_locality(chip, chip->vendor.locality, 0);
+	release_locality(chip, chip->locality, 0);
 	return rc;
 }
 
@@ -516,7 +515,7 @@ static int probe_itpm(struct tpm_chip *chip)
 		goto out;
 
 	tpm_tis_ready(chip);
-	release_locality(chip, chip->vendor.locality, 0);
+	release_locality(chip, chip->locality, 0);
 
 	itpm = true;
 
@@ -530,7 +529,7 @@ static int probe_itpm(struct tpm_chip *chip)
 out:
 	itpm = rem_itpm;
 	tpm_tis_ready(chip);
-	release_locality(chip, chip->vendor.locality, 0);
+	release_locality(chip, chip->locality, 0);
 
 	return rc;
 }
@@ -569,7 +568,7 @@ static irqreturn_t tis_int_handler(int dummy, void *dev_id)
 	int i;
 
 	interrupt = ioread32(priv->iobase +
-			     TPM_INT_STATUS(chip->vendor.locality));
+			     TPM_INT_STATUS(chip->locality));
 
 	if (interrupt == 0)
 		return IRQ_NONE;
@@ -589,8 +588,8 @@ static irqreturn_t tis_int_handler(int dummy, void *dev_id)
 	/* Clear interrupts handled with TPM_EOI */
 	iowrite32(interrupt,
 		  priv->iobase +
-		  TPM_INT_STATUS(chip->vendor.locality));
-	ioread32(priv->iobase + TPM_INT_STATUS(chip->vendor.locality));
+		  TPM_INT_STATUS(chip->locality));
+	ioread32(priv->iobase + TPM_INT_STATUS(chip->locality));
 	return IRQ_HANDLED;
 }
 
@@ -613,18 +612,18 @@ static int tpm_tis_probe_irq_single(struct tpm_chip *chip, u32 intmask,
 	priv->irq = irq;
 
 	original_int_vec = ioread8(priv->iobase +
-				   TPM_INT_VECTOR(chip->vendor.locality));
+				   TPM_INT_VECTOR(chip->locality));
 	iowrite8(irq,
-		 priv->iobase + TPM_INT_VECTOR(chip->vendor.locality));
+		 priv->iobase + TPM_INT_VECTOR(chip->locality));
 
 	/* Clear all existing */
 	iowrite32(ioread32(priv->iobase +
-			   TPM_INT_STATUS(chip->vendor.locality)),
-		  priv->iobase + TPM_INT_STATUS(chip->vendor.locality));
+			   TPM_INT_STATUS(chip->locality)),
+		  priv->iobase + TPM_INT_STATUS(chip->locality));
 
 	/* Turn on */
 	iowrite32(intmask | TPM_GLOBAL_INT_ENABLE,
-		  priv->iobase + TPM_INT_ENABLE(chip->vendor.locality));
+		  priv->iobase + TPM_INT_ENABLE(chip->locality));
 
 	priv->irq_tested = false;
 
@@ -641,7 +640,7 @@ static int tpm_tis_probe_irq_single(struct tpm_chip *chip, u32 intmask,
 	 */
 	if (!(chip->flags & TPM_CHIP_FLAG_USES_IRQ)) {
 		iowrite8(original_int_vec,
-			 priv->iobase + TPM_INT_VECTOR(chip->vendor.locality));
+			 priv->iobase + TPM_INT_VECTOR(chip->locality));
 		return 1;
 	}
 
@@ -659,7 +658,7 @@ static void tpm_tis_probe_irq(struct tpm_chip *chip, u32 intmask)
 	int i;
 
 	original_int_vec = ioread8(priv->iobase +
-				   TPM_INT_VECTOR(chip->vendor.locality));
+				   TPM_INT_VECTOR(chip->locality));
 
 	if (!original_int_vec) {
 		if (IS_ENABLED(CONFIG_X86))
@@ -685,10 +684,10 @@ static void tpm_tis_remove(struct tpm_chip *chip)
 
 	iowrite32(~TPM_GLOBAL_INT_ENABLE &
 		  ioread32(priv->iobase +
-			   TPM_INT_ENABLE(chip->vendor.
+			   TPM_INT_ENABLE(chip->
 					  locality)),
-			   priv->iobase + TPM_INT_ENABLE(chip->vendor.locality));
-	release_locality(chip, chip->vendor.locality, 1);
+			   priv->iobase + TPM_INT_ENABLE(chip->locality));
+	release_locality(chip, chip->locality, 1);
 }
 
 static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info,
@@ -716,10 +715,10 @@ static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info,
 		return PTR_ERR(priv->iobase);
 
 	/* Maximum timeouts */
-	chip->vendor.timeout_a = TIS_TIMEOUT_A_MAX;
-	chip->vendor.timeout_b = TIS_TIMEOUT_B_MAX;
-	chip->vendor.timeout_c = TIS_TIMEOUT_C_MAX;
-	chip->vendor.timeout_d = TIS_TIMEOUT_D_MAX;
+	chip->timeout_a = TIS_TIMEOUT_A_MAX;
+	chip->timeout_b = TIS_TIMEOUT_B_MAX;
+	chip->timeout_c = TIS_TIMEOUT_C_MAX;
+	chip->timeout_d = TIS_TIMEOUT_D_MAX;
 
 	dev_set_drvdata(&chip->dev, priv);
 
@@ -730,12 +729,12 @@ static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info,
 
 	/* Take control of the TPM's interrupt hardware and shut it off */
 	intmask = ioread32(priv->iobase +
-			   TPM_INT_ENABLE(chip->vendor.locality));
+			   TPM_INT_ENABLE(chip->locality));
 	intmask |= TPM_INTF_CMD_READY_INT | TPM_INTF_LOCALITY_CHANGE_INT |
 		   TPM_INTF_DATA_AVAIL_INT | TPM_INTF_STS_VALID_INT;
 	intmask &= ~TPM_GLOBAL_INT_ENABLE;
 	iowrite32(intmask,
-		  priv->iobase + TPM_INT_ENABLE(chip->vendor.locality));
+		  priv->iobase + TPM_INT_ENABLE(chip->locality));
 
 	if (request_locality(chip, 0) != 0) {
 		rc = -ENODEV;
@@ -769,7 +768,7 @@ static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info,
 	/* Figure out the capabilities */
 	intfcaps =
 	    ioread32(priv->iobase +
-		     TPM_INTF_CAPS(chip->vendor.locality));
+		     TPM_INTF_CAPS(chip->locality));
 	dev_dbg(dev, "TPM interface capabilities (0x%x):\n",
 		intfcaps);
 	if (intfcaps & TPM_INTF_BURST_COUNT_STATIC)
@@ -853,17 +852,17 @@ static void tpm_tis_reenable_interrupts(struct tpm_chip *chip)
 	/* reenable interrupts that device may have lost or
 	   BIOS/firmware may have disabled */
 	iowrite8(priv->irq, priv->iobase +
-		 TPM_INT_VECTOR(chip->vendor.locality));
+		 TPM_INT_VECTOR(chip->locality));
 
 	intmask =
-	    ioread32(priv->iobase + TPM_INT_ENABLE(chip->vendor.locality));
+	    ioread32(priv->iobase + TPM_INT_ENABLE(chip->locality));
 
 	intmask |= TPM_INTF_CMD_READY_INT
 	    | TPM_INTF_LOCALITY_CHANGE_INT | TPM_INTF_DATA_AVAIL_INT
 	    | TPM_INTF_STS_VALID_INT | TPM_GLOBAL_INT_ENABLE;
 
 	iowrite32(intmask,
-		  priv->iobase + TPM_INT_ENABLE(chip->vendor.locality));
+		  priv->iobase + TPM_INT_ENABLE(chip->locality));
 }
 
 static int tpm_tis_resume(struct device *dev)
diff --git a/drivers/char/tpm/xen-tpmfront.c b/drivers/char/tpm/xen-tpmfront.c
index a903f86..0bdebe9 100644
--- a/drivers/char/tpm/xen-tpmfront.c
+++ b/drivers/char/tpm/xen-tpmfront.c
@@ -88,7 +88,7 @@ static int vtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)
 		return -EINVAL;
 
 	/* Wait for completion of any existing command or cancellation */
-	if (wait_for_tpm_stat(chip, VTPM_STATUS_IDLE, chip->vendor.timeout_c,
+	if (wait_for_tpm_stat(chip, VTPM_STATUS_IDLE, chip->timeout_c,
 			&chip->vendor.read_queue, true) < 0) {
 		vtpm_cancel(chip);
 		return -ETIME;
@@ -125,7 +125,7 @@ static int vtpm_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 		return -ECANCELED;
 
 	/* In theory the wait at the end of _send makes this one unnecessary */
-	if (wait_for_tpm_stat(chip, VTPM_STATUS_RESULT, chip->vendor.timeout_c,
+	if (wait_for_tpm_stat(chip, VTPM_STATUS_RESULT, chip->timeout_c,
 			&chip->vendor.read_queue, true) < 0) {
 		vtpm_cancel(chip);
 		return -ETIME;
-- 
2.5.0


------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 7/7] tpm: drop 'read_queue' from struct tpm_vendor_specific
       [not found] ` <1458975615-8095-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
                     ` (5 preceding siblings ...)
  2016-03-26  7:00   ` [PATCH v2 6/7] tpm: Move remaining tpm_vendor_specific structure data to tpm_chip Christophe Ricard
@ 2016-03-26  7:00   ` Christophe Ricard
  2016-03-29 14:10   ` [PATCH v2 0/7] Remove the tpm_vendor_specific structure Jarkko Sakkinen
  7 siblings, 0 replies; 17+ messages in thread
From: Christophe Ricard @ 2016-03-26  7:00 UTC (permalink / raw)
  To: jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA
  Cc: jean-luc.blanc-qxv4g6HH51o, ashley-fm2HMyfA2y6tG0bUXCXiUA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
	christophe-h.ricard-qxv4g6HH51o, benoit.houyere-qxv4g6HH51o

Dropped the field 'read_queue' from struct tpm_vendor_specific and make it
available to the various private structures in the drivers.

Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
---
 drivers/char/tpm/st33zp24/st33zp24.c | 12 ++++++------
 drivers/char/tpm/st33zp24/st33zp24.h |  1 +
 drivers/char/tpm/tpm.h               |  6 ------
 drivers/char/tpm/tpm_i2c_nuvoton.c   | 14 +++++++++-----
 drivers/char/tpm/tpm_tis.c           |  9 +++++----
 drivers/char/tpm/xen-tpmfront.c      | 11 ++++++-----
 6 files changed, 27 insertions(+), 26 deletions(-)

diff --git a/drivers/char/tpm/st33zp24/st33zp24.c b/drivers/char/tpm/st33zp24/st33zp24.c
index 2834c6f..ca3bad1 100644
--- a/drivers/char/tpm/st33zp24/st33zp24.c
+++ b/drivers/char/tpm/st33zp24/st33zp24.c
@@ -324,7 +324,7 @@ static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
 	       wait_for_stat(chip,
 			     TPM_STS_DATA_AVAIL | TPM_STS_VALID,
 			     chip->timeout_c,
-			     &chip->vendor.read_queue, true) == 0) {
+			     &tpm_dev->read_queue, true) == 0) {
 		burstcnt = get_burstcount(chip);
 		if (burstcnt < 0)
 			return burstcnt;
@@ -351,7 +351,7 @@ static irqreturn_t tpm_ioserirq_handler(int irq, void *dev_id)
 	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
 
 	tpm_dev->intrs++;
-	wake_up_interruptible(&chip->vendor.read_queue);
+	wake_up_interruptible(&tpm_dev->read_queue);
 	disable_irq_nosync(tpm_dev->irq);
 
 	return IRQ_HANDLED;
@@ -389,7 +389,7 @@ static int st33zp24_send(struct tpm_chip *chip, unsigned char *buf,
 		st33zp24_cancel(chip);
 		if (wait_for_stat
 		    (chip, TPM_STS_COMMAND_READY, chip->timeout_b,
-		     &chip->vendor.read_queue, false) < 0) {
+		     &tpm_dev->read_queue, false) < 0) {
 			ret = -ETIME;
 			goto out_err;
 		}
@@ -435,7 +435,7 @@ static int st33zp24_send(struct tpm_chip *chip, unsigned char *buf,
 
 		ret = wait_for_stat(chip, TPM_STS_DATA_AVAIL | TPM_STS_VALID,
 				tpm_calc_ordinal_duration(chip, ordinal),
-				&chip->vendor.read_queue, false);
+				&tpm_dev->read_queue, false);
 		if (ret < 0)
 			goto out_err;
 	}
@@ -552,7 +552,7 @@ int st33zp24_probe(void *phy_id, const struct st33zp24_phy_ops *ops,
 
 	if (irq) {
 		/* INTERRUPT Setup */
-		init_waitqueue_head(&chip->vendor.read_queue);
+		init_waitqueue_head(&tpm_dev->read_queue);
 		tpm_dev->intrs = 0;
 
 		if (request_locality(chip) != LOCALITY0) {
@@ -652,7 +652,7 @@ int st33zp24_pm_resume(struct device *dev)
 		gpio_set_value(tpm_dev->io_lpcpd, 1);
 		ret = wait_for_stat(chip,
 				TPM_STS_VALID, chip->timeout_b,
-				&chip->vendor.read_queue, false);
+				&tpm_dev->read_queue, false);
 	} else {
 		ret = tpm_pm_resume(dev);
 		if (!ret)
diff --git a/drivers/char/tpm/st33zp24/st33zp24.h b/drivers/char/tpm/st33zp24/st33zp24.h
index b139a8d..e687942 100644
--- a/drivers/char/tpm/st33zp24/st33zp24.h
+++ b/drivers/char/tpm/st33zp24/st33zp24.h
@@ -27,6 +27,7 @@ struct st33zp24_dev {
 	int irq;
 	u32 intrs;
 	int io_lpcpd;
+	wait_queue_head_t read_queue;
 };
 
 struct st33zp24_phy_ops {
diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
index cfd5420..765ac0c 100644
--- a/drivers/char/tpm/tpm.h
+++ b/drivers/char/tpm/tpm.h
@@ -128,12 +128,6 @@ enum tpm2_startup_types {
 	TPM2_SU_STATE	= 0x0001,
 };
 
-struct tpm_chip;
-
-struct tpm_vendor_specific {
-	wait_queue_head_t read_queue;
-};
-
 #define TPM_VID_INTEL    0x8086
 #define TPM_VID_WINBOND  0x1050
 #define TPM_VID_STM      0x104A
diff --git a/drivers/char/tpm/tpm_i2c_nuvoton.c b/drivers/char/tpm/tpm_i2c_nuvoton.c
index 97f0e1a..fda5e22 100644
--- a/drivers/char/tpm/tpm_i2c_nuvoton.c
+++ b/drivers/char/tpm/tpm_i2c_nuvoton.c
@@ -57,6 +57,7 @@
 struct priv_data {
 	int irq;
 	unsigned int intrs;
+	wait_queue_head_t read_queue;
 };
 
 static s32 i2c_nuvoton_read_buf(struct i2c_client *client, u8 offset, u8 size,
@@ -232,13 +233,14 @@ static int i2c_nuvoton_wait_for_data_avail(struct tpm_chip *chip, u32 timeout,
 static int i2c_nuvoton_recv_data(struct i2c_client *client,
 				 struct tpm_chip *chip, u8 *buf, size_t count)
 {
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 	s32 rc;
 	int burst_count, bytes2read, size = 0;
 
 	while (size < count &&
 	       i2c_nuvoton_wait_for_data_avail(chip,
 					       chip->timeout_c,
-					       &chip->vendor.read_queue) == 0) {
+					       &priv->read_queue) == 0) {
 		burst_count = i2c_nuvoton_get_burstcount(client, chip);
 		if (burst_count < 0) {
 			dev_err(&chip->dev,
@@ -265,6 +267,7 @@ static int i2c_nuvoton_recv_data(struct i2c_client *client,
 /* Read TPM command results */
 static int i2c_nuvoton_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 {
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 	struct device *dev = chip->dev.parent;
 	struct i2c_client *client = to_i2c_client(dev);
 	s32 rc;
@@ -286,7 +289,7 @@ static int i2c_nuvoton_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 		 * tag, paramsize, and result
 		 */
 		status = i2c_nuvoton_wait_for_data_avail(
-			chip, chip->timeout_c, &chip->vendor.read_queue);
+			chip, chip->timeout_c, &priv->read_queue);
 		if (status != 0) {
 			dev_err(dev, "%s() timeout on dataAvail\n", __func__);
 			size = -ETIMEDOUT;
@@ -348,6 +351,7 @@ static int i2c_nuvoton_recv(struct tpm_chip *chip, u8 *buf, size_t count)
  */
 static int i2c_nuvoton_send(struct tpm_chip *chip, u8 *buf, size_t len)
 {
+	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 	struct device *dev = chip->dev.parent;
 	struct i2c_client *client = to_i2c_client(dev);
 	u32 ordinal;
@@ -440,7 +444,7 @@ static int i2c_nuvoton_send(struct tpm_chip *chip, u8 *buf, size_t len)
 	rc = i2c_nuvoton_wait_for_data_avail(chip,
 					     tpm_calc_ordinal_duration(chip,
 								       ordinal),
-					     &chip->vendor.read_queue);
+					     &priv->read_queue);
 	if (rc) {
 		dev_err(dev, "%s() timeout command duration\n", __func__);
 		i2c_nuvoton_ready(chip);
@@ -477,7 +481,7 @@ static irqreturn_t i2c_nuvoton_int_handler(int dummy, void *dev_id)
 	struct priv_data *priv = dev_get_drvdata(&chip->dev);
 
 	priv->intrs++;
-	wake_up(&chip->vendor.read_queue);
+	wake_up(&priv->read_queue);
 	disable_irq_nosync(priv->irq);
 	return IRQ_HANDLED;
 }
@@ -540,7 +544,7 @@ static int i2c_nuvoton_probe(struct i2c_client *client,
 	if (!priv)
 		return -ENOMEM;
 
-	init_waitqueue_head(&chip->vendor.read_queue);
+	init_waitqueue_head(&priv->read_queue);
 
 	/* Default timeouts */
 	chip->timeout_a = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
index 1ec4992..5416ad8 100644
--- a/drivers/char/tpm/tpm_tis.c
+++ b/drivers/char/tpm/tpm_tis.c
@@ -99,6 +99,7 @@ struct priv_data {
 	int irq;
 	bool irq_tested;
 	wait_queue_head_t int_queue;
+	wait_queue_head_t read_queue;
 };
 
 #if defined(CONFIG_PNP) && defined(CONFIG_ACPI)
@@ -253,7 +254,7 @@ static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
 	       wait_for_tpm_stat(chip,
 				 TPM_STS_DATA_AVAIL | TPM_STS_VALID,
 				 chip->timeout_c,
-				 &chip->vendor.read_queue, true)
+				 &priv->read_queue, true)
 	       == 0) {
 		burstcnt = get_burstcount(chip);
 		for (; burstcnt > 0 && size < count; burstcnt--)
@@ -421,7 +422,7 @@ static int tpm_tis_send_main(struct tpm_chip *chip, u8 *buf, size_t len)
 
 		if (wait_for_tpm_stat
 		    (chip, TPM_STS_DATA_AVAIL | TPM_STS_VALID, dur,
-		     &chip->vendor.read_queue, false) < 0) {
+		     &priv->read_queue, false) < 0) {
 			rc = -ETIME;
 			goto out_err;
 		}
@@ -575,7 +576,7 @@ static irqreturn_t tis_int_handler(int dummy, void *dev_id)
 
 	priv->irq_tested = true;
 	if (interrupt & TPM_INTF_DATA_AVAIL_INT)
-		wake_up_interruptible(&chip->vendor.read_queue);
+		wake_up_interruptible(&priv->read_queue);
 	if (interrupt & TPM_INTF_LOCALITY_CHANGE_INT)
 		for (i = 0; i < 5; i++)
 			if (check_locality(chip, i) >= 0)
@@ -801,7 +802,7 @@ static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info,
 	}
 
 	/* INTERRUPT Setup */
-	init_waitqueue_head(&chip->vendor.read_queue);
+	init_waitqueue_head(&priv->read_queue);
 	init_waitqueue_head(&priv->int_queue);
 	if (interrupts && tpm_info->irq != -1) {
 		if (tpm_info->irq) {
diff --git a/drivers/char/tpm/xen-tpmfront.c b/drivers/char/tpm/xen-tpmfront.c
index 0bdebe9..6daa66f 100644
--- a/drivers/char/tpm/xen-tpmfront.c
+++ b/drivers/char/tpm/xen-tpmfront.c
@@ -29,6 +29,7 @@ struct tpm_private {
 	int ring_ref;
 	domid_t backend_id;
 	int irq;
+	wait_queue_head_t read_queue;
 };
 
 enum status_bits {
@@ -89,7 +90,7 @@ static int vtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)
 
 	/* Wait for completion of any existing command or cancellation */
 	if (wait_for_tpm_stat(chip, VTPM_STATUS_IDLE, chip->timeout_c,
-			&chip->vendor.read_queue, true) < 0) {
+			&priv->read_queue, true) < 0) {
 		vtpm_cancel(chip);
 		return -ETIME;
 	}
@@ -105,7 +106,7 @@ static int vtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)
 	duration = tpm_calc_ordinal_duration(chip, ordinal);
 
 	if (wait_for_tpm_stat(chip, VTPM_STATUS_IDLE, duration,
-			&chip->vendor.read_queue, true) < 0) {
+			&priv->read_queue, true) < 0) {
 		/* got a signal or timeout, try to cancel */
 		vtpm_cancel(chip);
 		return -ETIME;
@@ -126,7 +127,7 @@ static int vtpm_recv(struct tpm_chip *chip, u8 *buf, size_t count)
 
 	/* In theory the wait at the end of _send makes this one unnecessary */
 	if (wait_for_tpm_stat(chip, VTPM_STATUS_RESULT, chip->timeout_c,
-			&chip->vendor.read_queue, true) < 0) {
+			&priv->read_queue, true) < 0) {
 		vtpm_cancel(chip);
 		return -ETIME;
 	}
@@ -162,7 +163,7 @@ static irqreturn_t tpmif_interrupt(int dummy, void *dev_id)
 	switch (priv->shr->state) {
 	case VTPM_STATE_IDLE:
 	case VTPM_STATE_FINISH:
-		wake_up_interruptible(&priv->chip->vendor.read_queue);
+		wake_up_interruptible(&priv->priv->read_queue);
 		break;
 	case VTPM_STATE_SUBMIT:
 	case VTPM_STATE_CANCEL:
@@ -180,7 +181,7 @@ static int setup_chip(struct device *dev, struct tpm_private *priv)
 	if (IS_ERR(chip))
 		return PTR_ERR(chip);
 
-	init_waitqueue_head(&chip->vendor.read_queue);
+	init_waitqueue_head(&priv->read_queue);
 
 	priv->chip = chip;
 	dev_set_drvdata(&chip->dev, priv);
-- 
2.5.0


------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 1/7] tpm/tpm_atmel: drop remaining 'iobase' usage
       [not found]     ` <1458975615-8095-2-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
@ 2016-03-29 14:08       ` Jarkko Sakkinen
       [not found]         ` <20160329140814.GA12764-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
  0 siblings, 1 reply; 17+ messages in thread
From: Jarkko Sakkinen @ 2016-03-29 14:08 UTC (permalink / raw)
  To: Christophe Ricard
  Cc: jean-luc.blanc-qxv4g6HH51o, ashley-fm2HMyfA2y6tG0bUXCXiUA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
	christophe-h.ricard-qxv4g6HH51o, benoit.houyere-qxv4g6HH51o

On Sat, Mar 26, 2016 at 08:00:09AM +0100, Christophe Ricard wrote:
> Remove some sporadic iobase

This description of this commit is total crap to be honest (saying
this with a polite tone but that's how it is). For me the commit meessage
is the most important part of the commit and the sentence above contains
exactly zero amount of information.

A proper commit message would have stated that this fixes the PPC64
builds that your earlier patch breaks. Have you tested that PPC64 builds
work now?

Actually what you should have *really* done would have updated your
older patch and put a remark into change log in the cover letter.

/Jarkko

> Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
> ---
>  drivers/char/tpm/tpm_atmel.h | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/char/tpm/tpm_atmel.h b/drivers/char/tpm/tpm_atmel.h
> index c5618ea..7e37c16 100644
> --- a/drivers/char/tpm/tpm_atmel.h
> +++ b/drivers/char/tpm/tpm_atmel.h
> @@ -38,8 +38,8 @@ static inline struct tpm_atmel_priv *atmel_get_priv(struct tpm_chip *chip)
>  
>  #include <asm/prom.h>
>  
> -#define atmel_getb(chip, offset) readb(chip->vendor->iobase + offset);
> -#define atmel_putb(val, chip, offset) writeb(val, chip->vendor->iobase + offset)
> +#define atmel_getb(priv, offset) readb(priv->iobase + offset);
> +#define atmel_putb(val, priv, offset) writeb(val, priv->iobase + offset)
>  #define atmel_request_region request_mem_region
>  #define atmel_release_region release_mem_region
>  
> -- 
> 2.5.0
> 

------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785471&iu=/4140

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 0/7] Remove the tpm_vendor_specific structure
       [not found] ` <1458975615-8095-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
                     ` (6 preceding siblings ...)
  2016-03-26  7:00   ` [PATCH v2 7/7] tpm: drop 'read_queue' from struct tpm_vendor_specific Christophe Ricard
@ 2016-03-29 14:10   ` Jarkko Sakkinen
       [not found]     ` <20160329141029.GB12764-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
  7 siblings, 1 reply; 17+ messages in thread
From: Jarkko Sakkinen @ 2016-03-29 14:10 UTC (permalink / raw)
  To: Christophe Ricard
  Cc: jean-luc.blanc-qxv4g6HH51o, ashley-fm2HMyfA2y6tG0bUXCXiUA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
	christophe-h.ricard-qxv4g6HH51o, benoit.houyere-qxv4g6HH51o

On Sat, Mar 26, 2016 at 08:00:08AM +0100, Christophe Ricard wrote:
> Hi Jarkko,
> 
> This is the latest steps to cleanup tpm_vendor_specific structure.
> 
> I have also included some few obvious cleanup inside the drivers.
> I have been able to test tpm_tis on a HP Desktop machine.
> 
> In v2 i have added a patch fixing:
> 'tpm: drop 'iobase' from struct tpm_vendor_specific' 691f211398bb93878b727be0c5c523e2371074f5

You give zero information here what you are fixing and why. For the next
version of the patch set just put a remark about fixing PPC64 builds and
include the full patch. I'll drop the current iobase patch from my
master branch.

/Jarkko

> It may be merged with the mention commit.
> 
> Best Regards
> Christophe
> 
> 
> Christophe Ricard (7):
>   tpm/tpm_atmel: drop remaining 'iobase' usage
>   tpm: Remove useless priv field in struct tpm_vendor_specific
>   tpm/tpm_i2c_atmel: simplify patch to get tpm_chip from an i2c_client
>   tpm/tpm_i2c_atmel: Few code style fixes
>   tpm: drop 'irq' from struct tpm_vendor_specific
>   tpm: Move remaining tpm_vendor_specific structure data to tpm_chip
>   tpm: drop 'read_queue' from struct tpm_vendor_specific
> 
>  drivers/char/tpm/st33zp24/i2c.c      |  15 ++-
>  drivers/char/tpm/st33zp24/spi.c      |  15 ++-
>  drivers/char/tpm/st33zp24/st33zp24.c | 113 ++++++++--------------
>  drivers/char/tpm/st33zp24/st33zp24.h |   9 ++
>  drivers/char/tpm/tpm-interface.c     |  52 +++++-----
>  drivers/char/tpm/tpm-sysfs.c         |  20 ++--
>  drivers/char/tpm/tpm.h               |  24 ++---
>  drivers/char/tpm/tpm2-cmd.c          |   2 +-
>  drivers/char/tpm/tpm_atmel.c         |  12 +--
>  drivers/char/tpm/tpm_atmel.h         |   9 +-
>  drivers/char/tpm/tpm_crb.c           |  12 +--
>  drivers/char/tpm/tpm_i2c_atmel.c     |  30 +++---
>  drivers/char/tpm/tpm_i2c_infineon.c  |  47 +++++----
>  drivers/char/tpm/tpm_i2c_nuvoton.c   |  73 ++++++++------
>  drivers/char/tpm/tpm_ibmvtpm.c       |  38 +++-----
>  drivers/char/tpm/tpm_nsc.c           |  48 ++++-----
>  drivers/char/tpm/tpm_tis.c           | 182 ++++++++++++++++++-----------------
>  drivers/char/tpm/xen-tpmfront.c      |  36 +++----
>  18 files changed, 356 insertions(+), 381 deletions(-)
> 
> -- 
> 2.5.0
> 

------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785471&iu=/4140

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 4/7] tpm/tpm_i2c_atmel: Few code style fixes
       [not found]     ` <1458975615-8095-5-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
@ 2016-03-29 14:17       ` Jarkko Sakkinen
  0 siblings, 0 replies; 17+ messages in thread
From: Jarkko Sakkinen @ 2016-03-29 14:17 UTC (permalink / raw)
  To: Christophe Ricard
  Cc: jean-luc.blanc-qxv4g6HH51o, ashley-fm2HMyfA2y6tG0bUXCXiUA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
	christophe-h.ricard-qxv4g6HH51o, benoit.houyere-qxv4g6HH51o

On Sat, Mar 26, 2016 at 08:00:12AM +0100, Christophe Ricard wrote:
> Few code style fixes.

Sorry but I don't care to apply this patch as there is much more
This just adds noise and brings almost no benefit.

/Jarkko

> Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
> ---
>  drivers/char/tpm/tpm_i2c_atmel.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/char/tpm/tpm_i2c_atmel.c b/drivers/char/tpm/tpm_i2c_atmel.c
> index 5426c9d..d357065 100644
> --- a/drivers/char/tpm/tpm_i2c_atmel.c
> +++ b/drivers/char/tpm/tpm_i2c_atmel.c
> @@ -125,8 +125,7 @@ static u8 i2c_atmel_read_status(struct tpm_chip *chip)
>  	/* Once the TPM has completed the command the command remains readable
>  	 * until another command is issued. */
>  	rc = i2c_master_recv(client, priv->buffer, sizeof(priv->buffer));
> -	dev_dbg(&chip->dev,
> -		"%s: sts=%d", __func__, rc);
> +	dev_dbg(&chip->dev, "%s: sts=%d", __func__, rc);
>  	if (rc <= 0)
>  		return 0;
>  
> @@ -192,6 +191,7 @@ static int i2c_atmel_probe(struct i2c_client *client,
>  static int i2c_atmel_remove(struct i2c_client *client)
>  {
>  	struct tpm_chip *chip = i2c_get_clientdata(client);
> +
>  	tpm_chip_unregister(chip);
>  	return 0;
>  }
> -- 
> 2.5.0
> 

------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785471&iu=/4140

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 2/7] tpm: Remove useless priv field in struct tpm_vendor_specific
       [not found]     ` <1458975615-8095-3-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
@ 2016-03-29 14:19       ` Jarkko Sakkinen
  0 siblings, 0 replies; 17+ messages in thread
From: Jarkko Sakkinen @ 2016-03-29 14:19 UTC (permalink / raw)
  To: Christophe Ricard
  Cc: jean-luc.blanc-qxv4g6HH51o, ashley-fm2HMyfA2y6tG0bUXCXiUA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
	christophe-h.ricard-qxv4g6HH51o, benoit.houyere-qxv4g6HH51o

On Sat, Mar 26, 2016 at 08:00:10AM +0100, Christophe Ricard wrote:
> Remove useless priv field in struct tpm_vendor_specific and take benefit
> of chip->dev.driver_data.

NAK. The order should be take all the fields from vendor specific and
then as a final step remove it when there is only the field 'priv'.

/Jarkko

> Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
> ---
>  drivers/char/tpm/st33zp24/i2c.c      | 15 ++++++----
>  drivers/char/tpm/st33zp24/spi.c      | 15 ++++++----
>  drivers/char/tpm/st33zp24/st33zp24.c | 58 +++++++++---------------------------
>  drivers/char/tpm/st33zp24/st33zp24.h |  7 +++++
>  drivers/char/tpm/tpm.h               |  3 --
>  drivers/char/tpm/tpm_atmel.c         | 12 ++++----
>  drivers/char/tpm/tpm_atmel.h         |  5 ----
>  drivers/char/tpm/tpm_crb.c           | 12 ++++----
>  drivers/char/tpm/tpm_i2c_atmel.c     | 14 +++++----
>  drivers/char/tpm/tpm_i2c_nuvoton.c   | 16 +++++-----
>  drivers/char/tpm/tpm_ibmvtpm.c       | 38 +++++++----------------
>  drivers/char/tpm/tpm_nsc.c           | 48 +++++++++++++++--------------
>  drivers/char/tpm/tpm_tis.c           | 48 +++++++++++++++--------------
>  drivers/char/tpm/xen-tpmfront.c      | 14 ++++-----
>  14 files changed, 139 insertions(+), 166 deletions(-)
> 
> diff --git a/drivers/char/tpm/st33zp24/i2c.c b/drivers/char/tpm/st33zp24/i2c.c
> index f8e8123..028a9cd 100644
> --- a/drivers/char/tpm/st33zp24/i2c.c
> +++ b/drivers/char/tpm/st33zp24/i2c.c
> @@ -26,6 +26,7 @@
>  #include <linux/tpm.h>
>  #include <linux/platform_data/st33zp24.h>
>  
> +#include "../tpm.h"
>  #include "st33zp24.h"
>  
>  #define TPM_DUMMY_BYTE			0xAA
> @@ -112,7 +113,9 @@ static const struct st33zp24_phy_ops i2c_phy_ops = {
>  
>  static int st33zp24_i2c_acpi_request_resources(struct i2c_client *client)
>  {
> -	struct st33zp24_i2c_phy *phy = i2c_get_clientdata(client);
> +	struct tpm_chip *chip = i2c_get_clientdata(client);
> +	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
> +	struct st33zp24_i2c_phy *phy = tpm_dev->phy_id;
>  	struct gpio_desc *gpiod_lpcpd;
>  	struct device *dev = &client->dev;
>  
> @@ -138,7 +141,9 @@ static int st33zp24_i2c_acpi_request_resources(struct i2c_client *client)
>  
>  static int st33zp24_i2c_of_request_resources(struct i2c_client *client)
>  {
> -	struct st33zp24_i2c_phy *phy = i2c_get_clientdata(client);
> +	struct tpm_chip *chip = i2c_get_clientdata(client);
> +	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
> +	struct st33zp24_i2c_phy *phy = tpm_dev->phy_id;
>  	struct device_node *pp;
>  	int gpio;
>  	int ret;
> @@ -176,8 +181,10 @@ static int st33zp24_i2c_of_request_resources(struct i2c_client *client)
>  
>  static int st33zp24_i2c_request_resources(struct i2c_client *client)
>  {
> +	struct tpm_chip *chip = i2c_get_clientdata(client);
> +	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
> +	struct st33zp24_i2c_phy *phy = tpm_dev->phy_id;
>  	struct st33zp24_platform_data *pdata;
> -	struct st33zp24_i2c_phy *phy = i2c_get_clientdata(client);
>  	int ret;
>  
>  	pdata = client->dev.platform_data;
> @@ -234,8 +241,6 @@ static int st33zp24_i2c_probe(struct i2c_client *client,
>  
>  	phy->client = client;
>  
> -	i2c_set_clientdata(client, phy);
> -
>  	pdata = client->dev.platform_data;
>  	if (!pdata && client->dev.of_node) {
>  		ret = st33zp24_i2c_of_request_resources(client);
> diff --git a/drivers/char/tpm/st33zp24/spi.c b/drivers/char/tpm/st33zp24/spi.c
> index 608dbc6..9f5a011 100644
> --- a/drivers/char/tpm/st33zp24/spi.c
> +++ b/drivers/char/tpm/st33zp24/spi.c
> @@ -26,6 +26,7 @@
>  #include <linux/tpm.h>
>  #include <linux/platform_data/st33zp24.h>
>  
> +#include "../tpm.h"
>  #include "st33zp24.h"
>  
>  #define TPM_DATA_FIFO           0x24
> @@ -231,7 +232,9 @@ static const struct st33zp24_phy_ops spi_phy_ops = {
>  
>  static int st33zp24_spi_acpi_request_resources(struct spi_device *spi_dev)
>  {
> -	struct st33zp24_spi_phy *phy = spi_get_drvdata(spi_dev);
> +	struct tpm_chip *chip = spi_get_drvdata(spi_dev);
> +	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
> +	struct st33zp24_spi_phy *phy = tpm_dev->phy_id;
>  	struct gpio_desc *gpiod_lpcpd;
>  	struct device *dev = &spi_dev->dev;
>  
> @@ -256,7 +259,9 @@ static int st33zp24_spi_acpi_request_resources(struct spi_device *spi_dev)
>  
>  static int st33zp24_spi_of_request_resources(struct spi_device *spi_dev)
>  {
> -	struct st33zp24_spi_phy *phy = spi_get_drvdata(spi_dev);
> +	struct tpm_chip *chip = spi_get_drvdata(spi_dev);
> +	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
> +	struct st33zp24_spi_phy *phy = tpm_dev->phy_id;
>  	struct device_node *pp;
>  	int gpio;
>  	int ret;
> @@ -294,7 +299,9 @@ static int st33zp24_spi_of_request_resources(struct spi_device *spi_dev)
>  
>  static int st33zp24_spi_request_resources(struct spi_device *dev)
>  {
> -	struct st33zp24_spi_phy *phy = spi_get_drvdata(dev);
> +	struct tpm_chip *chip = spi_get_drvdata(dev);
> +	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
> +	struct st33zp24_spi_phy *phy = tpm_dev->phy_id;
>  	struct st33zp24_platform_data *pdata;
>  	int ret;
>  
> @@ -347,8 +354,6 @@ static int st33zp24_spi_probe(struct spi_device *dev)
>  
>  	phy->spi_device = dev;
>  
> -	spi_set_drvdata(dev, phy);
> -
>  	pdata = dev->dev.platform_data;
>  	if (!pdata && dev->dev.of_node) {
>  		ret = st33zp24_spi_of_request_resources(dev);
> diff --git a/drivers/char/tpm/st33zp24/st33zp24.c b/drivers/char/tpm/st33zp24/st33zp24.c
> index 9e91ca7..3c0625c 100644
> --- a/drivers/char/tpm/st33zp24/st33zp24.c
> +++ b/drivers/char/tpm/st33zp24/st33zp24.c
> @@ -73,14 +73,6 @@ enum tis_defaults {
>  	TIS_LONG_TIMEOUT = 2000,
>  };
>  
> -struct st33zp24_dev {
> -	struct tpm_chip *chip;
> -	void *phy_id;
> -	const struct st33zp24_phy_ops *ops;
> -	u32 intrs;
> -	int io_lpcpd;
> -};
> -
>  /*
>   * clear_interruption clear the pending interrupt.
>   * @param: tpm_dev, the tpm device device.
> @@ -102,11 +94,9 @@ static u8 clear_interruption(struct st33zp24_dev *tpm_dev)
>   */
>  static void st33zp24_cancel(struct tpm_chip *chip)
>  {
> -	struct st33zp24_dev *tpm_dev;
> +	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
>  	u8 data;
>  
> -	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
> -
>  	data = TPM_STS_COMMAND_READY;
>  	tpm_dev->ops->send(tpm_dev->phy_id, TPM_STS, &data, 1);
>  } /* st33zp24_cancel() */
> @@ -118,10 +108,9 @@ static void st33zp24_cancel(struct tpm_chip *chip)
>   */
>  static u8 st33zp24_status(struct tpm_chip *chip)
>  {
> -	struct st33zp24_dev *tpm_dev;
> -	u8 data;
> +	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
>  
> -	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
> +	u8 data;
>  
>  	tpm_dev->ops->recv(tpm_dev->phy_id, TPM_STS, &data, 1);
>  	return data;
> @@ -134,12 +123,10 @@ static u8 st33zp24_status(struct tpm_chip *chip)
>   */
>  static int check_locality(struct tpm_chip *chip)
>  {
> -	struct st33zp24_dev *tpm_dev;
> +	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
>  	u8 data;
>  	u8 status;
>  
> -	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
> -
>  	status = tpm_dev->ops->recv(tpm_dev->phy_id, TPM_ACCESS, &data, 1);
>  	if (status && (data &
>  		(TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID)) ==
> @@ -158,14 +145,12 @@ static int request_locality(struct tpm_chip *chip)
>  {
>  	unsigned long stop;
>  	long ret;
> -	struct st33zp24_dev *tpm_dev;
> +	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
>  	u8 data;
>  
>  	if (check_locality(chip) == chip->vendor.locality)
>  		return chip->vendor.locality;
>  
> -	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
> -
>  	data = TPM_ACCESS_REQUEST_USE;
>  	ret = tpm_dev->ops->send(tpm_dev->phy_id, TPM_ACCESS, &data, 1);
>  	if (ret < 0)
> @@ -190,10 +175,9 @@ static int request_locality(struct tpm_chip *chip)
>   */
>  static void release_locality(struct tpm_chip *chip)
>  {
> -	struct st33zp24_dev *tpm_dev;
> +	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
>  	u8 data;
>  
> -	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
>  	data = TPM_ACCESS_ACTIVE_LOCALITY;
>  
>  	tpm_dev->ops->send(tpm_dev->phy_id, TPM_ACCESS, &data, 1);
> @@ -206,12 +190,10 @@ static void release_locality(struct tpm_chip *chip)
>   */
>  static int get_burstcount(struct tpm_chip *chip)
>  {
> +	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
>  	unsigned long stop;
>  	int burstcnt, status;
>  	u8 temp;
> -	struct st33zp24_dev *tpm_dev;
> -
> -	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
>  
>  	stop = jiffies + chip->vendor.timeout_d;
>  	do {
> @@ -271,15 +253,13 @@ static bool wait_for_tpm_stat_cond(struct tpm_chip *chip, u8 mask,
>  static int wait_for_stat(struct tpm_chip *chip, u8 mask, unsigned long timeout,
>  			wait_queue_head_t *queue, bool check_cancel)
>  {
> +	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
>  	unsigned long stop;
>  	int ret = 0;
>  	bool canceled = false;
>  	bool condition;
>  	u32 cur_intrs;
>  	u8 status;
> -	struct st33zp24_dev *tpm_dev;
> -
> -	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
>  
>  	/* check current status */
>  	status = st33zp24_status(chip);
> @@ -337,10 +317,8 @@ static int wait_for_stat(struct tpm_chip *chip, u8 mask, unsigned long timeout,
>   */
>  static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
>  {
> +	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
>  	int size = 0, burstcnt, len, ret;
> -	struct st33zp24_dev *tpm_dev;
> -
> -	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
>  
>  	while (size < count &&
>  	       wait_for_stat(chip,
> @@ -370,9 +348,7 @@ static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
>  static irqreturn_t tpm_ioserirq_handler(int irq, void *dev_id)
>  {
>  	struct tpm_chip *chip = dev_id;
> -	struct st33zp24_dev *tpm_dev;
> -
> -	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
> +	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
>  
>  	tpm_dev->intrs++;
>  	wake_up_interruptible(&chip->vendor.read_queue);
> @@ -393,19 +369,17 @@ static irqreturn_t tpm_ioserirq_handler(int irq, void *dev_id)
>  static int st33zp24_send(struct tpm_chip *chip, unsigned char *buf,
>  			 size_t len)
>  {
> +	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
>  	u32 status, i, size, ordinal;
>  	int burstcnt = 0;
>  	int ret;
>  	u8 data;
> -	struct st33zp24_dev *tpm_dev;
>  
>  	if (!chip)
>  		return -EBUSY;
>  	if (len < TPM_HEADER_SIZE)
>  		return -EBUSY;
>  
> -	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
> -
>  	ret = request_locality(chip);
>  	if (ret < 0)
>  		return ret;
> @@ -565,9 +539,9 @@ int st33zp24_probe(void *phy_id, const struct st33zp24_phy_ops *ops,
>  	if (!tpm_dev)
>  		return -ENOMEM;
>  
> -	TPM_VPRIV(chip) = tpm_dev;
>  	tpm_dev->phy_id = phy_id;
>  	tpm_dev->ops = ops;
> +	dev_set_drvdata(&chip->dev, tpm_dev);
>  
>  	chip->vendor.timeout_a = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
>  	chip->vendor.timeout_b = msecs_to_jiffies(TIS_LONG_TIMEOUT);
> @@ -650,11 +624,9 @@ EXPORT_SYMBOL(st33zp24_remove);
>  int st33zp24_pm_suspend(struct device *dev)
>  {
>  	struct tpm_chip *chip = dev_get_drvdata(dev);
> -	struct st33zp24_dev *tpm_dev;
> +	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
>  	int ret = 0;
>  
> -	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
> -
>  	if (gpio_is_valid(tpm_dev->io_lpcpd))
>  		gpio_set_value(tpm_dev->io_lpcpd, 0);
>  	else
> @@ -672,11 +644,9 @@ EXPORT_SYMBOL(st33zp24_pm_suspend);
>  int st33zp24_pm_resume(struct device *dev)
>  {
>  	struct tpm_chip *chip = dev_get_drvdata(dev);
> -	struct st33zp24_dev *tpm_dev;
> +	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
>  	int ret = 0;
>  
> -	tpm_dev = (struct st33zp24_dev *)TPM_VPRIV(chip);
> -
>  	if (gpio_is_valid(tpm_dev->io_lpcpd)) {
>  		gpio_set_value(tpm_dev->io_lpcpd, 1);
>  		ret = wait_for_stat(chip,
> diff --git a/drivers/char/tpm/st33zp24/st33zp24.h b/drivers/char/tpm/st33zp24/st33zp24.h
> index bcbd5ff..b242263 100644
> --- a/drivers/char/tpm/st33zp24/st33zp24.h
> +++ b/drivers/char/tpm/st33zp24/st33zp24.h
> @@ -21,6 +21,13 @@
>  #define TPM_WRITE_DIRECTION             0x80
>  #define TPM_BUFSIZE                     2048
>  
> +struct st33zp24_dev {
> +	void *phy_id;
> +	const struct st33zp24_phy_ops *ops;
> +	u32 intrs;
> +	int io_lpcpd;
> +};
> +
>  struct st33zp24_phy_ops {
>  	int (*send)(void *phy_id, u8 tpm_register, u8 *tpm_data, int tpm_size);
>  	int (*recv)(void *phy_id, u8 tpm_register, u8 *tpm_data, int tpm_size);
> diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
> index 357ac14..c4d3f41 100644
> --- a/drivers/char/tpm/tpm.h
> +++ b/drivers/char/tpm/tpm.h
> @@ -138,13 +138,10 @@ struct tpm_vendor_specific {
>  	bool timeout_adjusted;
>  	unsigned long duration[3]; /* jiffies */
>  	bool duration_adjusted;
> -	void *priv;
>  
>  	wait_queue_head_t read_queue;
>  };
>  
> -#define TPM_VPRIV(c)     ((c)->vendor.priv)
> -
>  #define TPM_VID_INTEL    0x8086
>  #define TPM_VID_WINBOND  0x1050
>  #define TPM_VID_STM      0x104A
> diff --git a/drivers/char/tpm/tpm_atmel.c b/drivers/char/tpm/tpm_atmel.c
> index b769299..0d322ab 100644
> --- a/drivers/char/tpm/tpm_atmel.c
> +++ b/drivers/char/tpm/tpm_atmel.c
> @@ -37,7 +37,7 @@ enum tpm_atmel_read_status {
>  
>  static int tpm_atml_recv(struct tpm_chip *chip, u8 *buf, size_t count)
>  {
> -	struct tpm_atmel_priv *priv = chip->vendor.priv;
> +	struct tpm_atmel_priv *priv = dev_get_drvdata(&chip->dev);
>  	u8 status, *hdr = buf;
>  	u32 size;
>  	int i;
> @@ -96,7 +96,7 @@ static int tpm_atml_recv(struct tpm_chip *chip, u8 *buf, size_t count)
>  
>  static int tpm_atml_send(struct tpm_chip *chip, u8 *buf, size_t count)
>  {
> -	struct tpm_atmel_priv *priv = chip->vendor.priv;
> +	struct tpm_atmel_priv *priv = dev_get_drvdata(&chip->dev);
>  	int i;
>  
>  	dev_dbg(&chip->dev, "tpm_atml_send:\n");
> @@ -110,14 +110,14 @@ static int tpm_atml_send(struct tpm_chip *chip, u8 *buf, size_t count)
>  
>  static void tpm_atml_cancel(struct tpm_chip *chip)
>  {
> -	struct tpm_atmel_priv *priv = chip->vendor.priv;
> +	struct tpm_atmel_priv *priv = dev_get_drvdata(&chip->dev);
>  
>  	iowrite8(ATML_STATUS_ABORT, priv->iobase + 1);
>  }
>  
>  static u8 tpm_atml_status(struct tpm_chip *chip)
>  {
> -	struct tpm_atmel_priv *priv = chip->vendor.priv;
> +	struct tpm_atmel_priv *priv = dev_get_drvdata(&chip->dev);
>  
>  	return ioread8(priv->iobase + 1);
>  }
> @@ -142,7 +142,7 @@ static struct platform_device *pdev;
>  static void atml_plat_remove(void)
>  {
>  	struct tpm_chip *chip = dev_get_drvdata(&pdev->dev);
> -	struct tpm_atmel_priv *priv = chip->vendor.priv;
> +	struct tpm_atmel_priv *priv = dev_get_drvdata(&chip->dev);
>  
>  	if (chip) {
>  		tpm_chip_unregister(chip);
> @@ -207,7 +207,7 @@ static int __init init_atmel(void)
>  		goto err_unreg_dev;
>  	}
>  
> -	chip->vendor.priv = priv;
> +	dev_set_drvdata(&chip->dev, priv);
>  
>  	rc = tpm_chip_register(chip);
>  	if (rc)
> diff --git a/drivers/char/tpm/tpm_atmel.h b/drivers/char/tpm/tpm_atmel.h
> index 7e37c16..c786e01 100644
> --- a/drivers/char/tpm/tpm_atmel.h
> +++ b/drivers/char/tpm/tpm_atmel.h
> @@ -29,11 +29,6 @@ struct tpm_atmel_priv {
>  	void __iomem *iobase;
>  };
>  
> -static inline struct tpm_atmel_priv *atmel_get_priv(struct tpm_chip *chip)
> -{
> -	return chip->vendor.priv;
> -}
> -
>  #ifdef CONFIG_PPC64
>  
>  #include <asm/prom.h>
> diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
> index 8767da6..20155d5 100644
> --- a/drivers/char/tpm/tpm_crb.c
> +++ b/drivers/char/tpm/tpm_crb.c
> @@ -87,7 +87,7 @@ static SIMPLE_DEV_PM_OPS(crb_pm, tpm_pm_suspend, tpm_pm_resume);
>  
>  static u8 crb_status(struct tpm_chip *chip)
>  {
> -	struct crb_priv *priv = chip->vendor.priv;
> +	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
>  	u8 sts = 0;
>  
>  	if ((ioread32(&priv->cca->start) & CRB_START_INVOKE) !=
> @@ -99,7 +99,7 @@ static u8 crb_status(struct tpm_chip *chip)
>  
>  static int crb_recv(struct tpm_chip *chip, u8 *buf, size_t count)
>  {
> -	struct crb_priv *priv = chip->vendor.priv;
> +	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
>  	unsigned int expected;
>  
>  	/* sanity check */
> @@ -139,7 +139,7 @@ static int crb_do_acpi_start(struct tpm_chip *chip)
>  
>  static int crb_send(struct tpm_chip *chip, u8 *buf, size_t len)
>  {
> -	struct crb_priv *priv = chip->vendor.priv;
> +	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
>  	int rc = 0;
>  
>  	if (len > ioread32(&priv->cca->cmd_size)) {
> @@ -163,7 +163,7 @@ static int crb_send(struct tpm_chip *chip, u8 *buf, size_t len)
>  
>  static void crb_cancel(struct tpm_chip *chip)
>  {
> -	struct crb_priv *priv = chip->vendor.priv;
> +	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
>  
>  	iowrite32(cpu_to_le32(CRB_CANCEL_INVOKE), &priv->cca->cancel);
>  
> @@ -175,7 +175,7 @@ static void crb_cancel(struct tpm_chip *chip)
>  
>  static bool crb_req_canceled(struct tpm_chip *chip, u8 status)
>  {
> -	struct crb_priv *priv = chip->vendor.priv;
> +	struct crb_priv *priv = dev_get_drvdata(&chip->dev);
>  	u32 cancel = ioread32(&priv->cca->cancel);
>  
>  	return (cancel & CRB_CANCEL_INVOKE) == CRB_CANCEL_INVOKE;
> @@ -200,7 +200,7 @@ static int crb_init(struct acpi_device *device, struct crb_priv *priv)
>  	if (IS_ERR(chip))
>  		return PTR_ERR(chip);
>  
> -	chip->vendor.priv = priv;
> +	dev_set_drvdata(&chip->dev, priv);
>  	chip->acpi_dev_handle = device->handle;
>  	chip->flags = TPM_CHIP_FLAG_TPM2;
>  
> diff --git a/drivers/char/tpm/tpm_i2c_atmel.c b/drivers/char/tpm/tpm_i2c_atmel.c
> index dd8f0eb..f311aaf 100644
> --- a/drivers/char/tpm/tpm_i2c_atmel.c
> +++ b/drivers/char/tpm/tpm_i2c_atmel.c
> @@ -51,7 +51,7 @@ struct priv_data {
>  
>  static int i2c_atmel_send(struct tpm_chip *chip, u8 *buf, size_t len)
>  {
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  	struct i2c_client *client = to_i2c_client(chip->dev.parent);
>  	s32 status;
>  
> @@ -70,7 +70,7 @@ static int i2c_atmel_send(struct tpm_chip *chip, u8 *buf, size_t len)
>  
>  static int i2c_atmel_recv(struct tpm_chip *chip, u8 *buf, size_t count)
>  {
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  	struct i2c_client *client = to_i2c_client(chip->dev.parent);
>  	struct tpm_output_header *hdr =
>  		(struct tpm_output_header *)priv->buffer;
> @@ -111,7 +111,7 @@ static void i2c_atmel_cancel(struct tpm_chip *chip)
>  
>  static u8 i2c_atmel_read_status(struct tpm_chip *chip)
>  {
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  	struct i2c_client *client = to_i2c_client(chip->dev.parent);
>  	int rc;
>  
> @@ -155,6 +155,7 @@ static int i2c_atmel_probe(struct i2c_client *client,
>  {
>  	struct tpm_chip *chip;
>  	struct device *dev = &client->dev;
> +	struct priv_data *priv;
>  
>  	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C))
>  		return -ENODEV;
> @@ -163,9 +164,8 @@ static int i2c_atmel_probe(struct i2c_client *client,
>  	if (IS_ERR(chip))
>  		return PTR_ERR(chip);
>  
> -	chip->vendor.priv = devm_kzalloc(dev, sizeof(struct priv_data),
> -					 GFP_KERNEL);
> -	if (!chip->vendor.priv)
> +	priv = devm_kzalloc(dev, sizeof(struct priv_data), GFP_KERNEL);
> +	if (!priv)
>  		return -ENOMEM;
>  
>  	/* Default timeouts */
> @@ -175,6 +175,8 @@ static int i2c_atmel_probe(struct i2c_client *client,
>  	chip->vendor.timeout_d = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
>  	chip->vendor.irq = 0;
>  
> +	dev_set_drvdata(&chip->dev, priv);
> +
>  	/* There is no known way to probe for this device, and all version
>  	 * information seems to be read via TPM commands. Thus we rely on the
>  	 * TPM startup process in the common code to detect the device. */
> diff --git a/drivers/char/tpm/tpm_i2c_nuvoton.c b/drivers/char/tpm/tpm_i2c_nuvoton.c
> index a43b5f3..76ac21d 100644
> --- a/drivers/char/tpm/tpm_i2c_nuvoton.c
> +++ b/drivers/char/tpm/tpm_i2c_nuvoton.c
> @@ -178,7 +178,7 @@ static int i2c_nuvoton_wait_for_stat(struct tpm_chip *chip, u8 mask, u8 value,
>  {
>  	if (chip->vendor.irq && queue) {
>  		s32 rc;
> -		struct priv_data *priv = chip->vendor.priv;
> +		struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  		unsigned int cur_intrs = priv->intrs;
>  
>  		enable_irq(chip->vendor.irq);
> @@ -473,7 +473,7 @@ static const struct tpm_class_ops tpm_i2c = {
>  static irqreturn_t i2c_nuvoton_int_handler(int dummy, void *dev_id)
>  {
>  	struct tpm_chip *chip = dev_id;
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  
>  	priv->intrs++;
>  	wake_up(&chip->vendor.read_queue);
> @@ -520,6 +520,7 @@ static int i2c_nuvoton_probe(struct i2c_client *client,
>  {
>  	int rc;
>  	struct tpm_chip *chip;
> +	struct priv_data *priv;
>  	struct device *dev = &client->dev;
>  	u32 vid = 0;
>  
> @@ -534,9 +535,8 @@ static int i2c_nuvoton_probe(struct i2c_client *client,
>  	if (IS_ERR(chip))
>  		return PTR_ERR(chip);
>  
> -	chip->vendor.priv = devm_kzalloc(dev, sizeof(struct priv_data),
> -					 GFP_KERNEL);
> -	if (!chip->vendor.priv)
> +	priv = devm_kzalloc(dev, sizeof(struct priv_data), GFP_KERNEL);
> +	if (!priv)
>  		return -ENOMEM;
>  
>  	init_waitqueue_head(&chip->vendor.read_queue);
> @@ -547,6 +547,8 @@ static int i2c_nuvoton_probe(struct i2c_client *client,
>  	chip->vendor.timeout_c = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
>  	chip->vendor.timeout_d = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
>  
> +	dev_set_drvdata(&chip->dev, priv);
> +
>  	/*
>  	 * I2C intfcaps (interrupt capabilitieis) in the chip are hard coded to:
>  	 *   TPM_INTF_INT_LEVEL_LOW | TPM_INTF_DATA_AVAIL_INT
> @@ -611,8 +613,8 @@ static int i2c_nuvoton_probe(struct i2c_client *client,
>  
>  static int i2c_nuvoton_remove(struct i2c_client *client)
>  {
> -	struct device *dev = &(client->dev);
> -	struct tpm_chip *chip = dev_get_drvdata(dev);
> +	struct tpm_chip *chip = i2c_get_clientdata(client);
> +
>  	tpm_chip_unregister(chip);
>  	return 0;
>  }
> diff --git a/drivers/char/tpm/tpm_ibmvtpm.c b/drivers/char/tpm/tpm_ibmvtpm.c
> index b0a9a9e..6b22826 100644
> --- a/drivers/char/tpm/tpm_ibmvtpm.c
> +++ b/drivers/char/tpm/tpm_ibmvtpm.c
> @@ -54,21 +54,6 @@ static int ibmvtpm_send_crq(struct vio_dev *vdev, u64 w1, u64 w2)
>  }
>  
>  /**
> - * ibmvtpm_get_data - Retrieve ibm vtpm data
> - * @dev:	device struct
> - *
> - * Return value:
> - *	vtpm device struct
> - */
> -static struct ibmvtpm_dev *ibmvtpm_get_data(const struct device *dev)
> -{
> -	struct tpm_chip *chip = dev_get_drvdata(dev);
> -	if (chip)
> -		return (struct ibmvtpm_dev *)TPM_VPRIV(chip);
> -	return NULL;
> -}
> -
> -/**
>   * tpm_ibmvtpm_recv - Receive data after send
>   * @chip:	tpm chip struct
>   * @buf:	buffer to read
> @@ -79,12 +64,10 @@ static struct ibmvtpm_dev *ibmvtpm_get_data(const struct device *dev)
>   */
>  static int tpm_ibmvtpm_recv(struct tpm_chip *chip, u8 *buf, size_t count)
>  {
> -	struct ibmvtpm_dev *ibmvtpm;
> +	struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
>  	u16 len;
>  	int sig;
>  
> -	ibmvtpm = (struct ibmvtpm_dev *)TPM_VPRIV(chip);
> -
>  	if (!ibmvtpm->rtce_buf) {
>  		dev_err(ibmvtpm->dev, "ibmvtpm device is not ready\n");
>  		return 0;
> @@ -122,13 +105,11 @@ static int tpm_ibmvtpm_recv(struct tpm_chip *chip, u8 *buf, size_t count)
>   */
>  static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)
>  {
> -	struct ibmvtpm_dev *ibmvtpm;
> +	struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
>  	struct ibmvtpm_crq crq;
>  	__be64 *word = (__be64 *)&crq;
>  	int rc, sig;
>  
> -	ibmvtpm = (struct ibmvtpm_dev *)TPM_VPRIV(chip);
> -
>  	if (!ibmvtpm->rtce_buf) {
>  		dev_err(ibmvtpm->dev, "ibmvtpm device is not ready\n");
>  		return 0;
> @@ -289,8 +270,8 @@ static int ibmvtpm_crq_send_init(struct ibmvtpm_dev *ibmvtpm)
>   */
>  static int tpm_ibmvtpm_remove(struct vio_dev *vdev)
>  {
> -	struct ibmvtpm_dev *ibmvtpm = ibmvtpm_get_data(&vdev->dev);
> -	struct tpm_chip *chip = dev_get_drvdata(ibmvtpm->dev);
> +	struct tpm_chip *chip = dev_get_drvdata(&vdev->dev);
> +	struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
>  	int rc = 0;
>  
>  	tpm_chip_unregister(chip);
> @@ -327,7 +308,8 @@ static int tpm_ibmvtpm_remove(struct vio_dev *vdev)
>   */
>  static unsigned long tpm_ibmvtpm_get_desired_dma(struct vio_dev *vdev)
>  {
> -	struct ibmvtpm_dev *ibmvtpm = ibmvtpm_get_data(&vdev->dev);
> +	struct tpm_chip *chip = dev_get_drvdata(&vdev->dev);
> +	struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
>  
>  	/* ibmvtpm initializes at probe time, so the data we are
>  	* asking for may not be set yet. Estimate that 4K required
> @@ -348,7 +330,8 @@ static unsigned long tpm_ibmvtpm_get_desired_dma(struct vio_dev *vdev)
>   */
>  static int tpm_ibmvtpm_suspend(struct device *dev)
>  {
> -	struct ibmvtpm_dev *ibmvtpm = ibmvtpm_get_data(dev);
> +	struct tpm_chip *chip = dev_get_drvdata(dev);
> +	struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
>  	struct ibmvtpm_crq crq;
>  	u64 *buf = (u64 *) &crq;
>  	int rc = 0;
> @@ -400,7 +383,8 @@ static int ibmvtpm_reset_crq(struct ibmvtpm_dev *ibmvtpm)
>   */
>  static int tpm_ibmvtpm_resume(struct device *dev)
>  {
> -	struct ibmvtpm_dev *ibmvtpm = ibmvtpm_get_data(dev);
> +	struct tpm_chip *chip = dev_get_drvdata(dev);
> +	struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
>  	int rc = 0;
>  
>  	do {
> @@ -643,7 +627,7 @@ static int tpm_ibmvtpm_probe(struct vio_dev *vio_dev,
>  
>  	crq_q->index = 0;
>  
> -	TPM_VPRIV(chip) = (void *)ibmvtpm;
> +	dev_set_drvdata(&chip->dev, ibmvtpm)
>  
>  	spin_lock_init(&ibmvtpm->rtce_lock);
>  
> diff --git a/drivers/char/tpm/tpm_nsc.c b/drivers/char/tpm/tpm_nsc.c
> index 07163a4..9ff0e07 100644
> --- a/drivers/char/tpm/tpm_nsc.c
> +++ b/drivers/char/tpm/tpm_nsc.c
> @@ -69,20 +69,16 @@ struct tpm_nsc_priv {
>  	unsigned long base;
>  };
>  
> -static inline struct tpm_nsc_priv *nsc_get_priv(struct tpm_chip *chip)
> -{
> -	return chip->vendor.priv;
> -}
> -
>  /*
>   * Wait for a certain status to appear
>   */
>  static int wait_for_stat(struct tpm_chip *chip, u8 mask, u8 val, u8 * data)
>  {
> +	struct tpm_nsc_priv *priv = dev_get_drvdata(&chip->dev);
>  	unsigned long stop;
>  
>  	/* status immediately available check */
> -	*data = inb(nsc_get_priv(chip)->base + NSC_STATUS);
> +	*data = inb(priv->base + NSC_STATUS);
>  	if ((*data & mask) == val)
>  		return 0;
>  
> @@ -90,7 +86,7 @@ static int wait_for_stat(struct tpm_chip *chip, u8 mask, u8 val, u8 * data)
>  	stop = jiffies + 10 * HZ;
>  	do {
>  		msleep(TPM_TIMEOUT);
> -		*data = inb(nsc_get_priv(chip)->base + 1);
> +		*data = inb(priv->base + 1);
>  		if ((*data & mask) == val)
>  			return 0;
>  	}
> @@ -101,13 +97,14 @@ static int wait_for_stat(struct tpm_chip *chip, u8 mask, u8 val, u8 * data)
>  
>  static int nsc_wait_for_ready(struct tpm_chip *chip)
>  {
> +	struct tpm_nsc_priv *priv = dev_get_drvdata(&chip->dev);
>  	int status;
>  	unsigned long stop;
>  
>  	/* status immediately available check */
> -	status = inb(nsc_get_priv(chip)->base + NSC_STATUS);
> +	status = inb(priv->base + NSC_STATUS);
>  	if (status & NSC_STATUS_OBF)
> -		status = inb(nsc_get_priv(chip)->base + NSC_DATA);
> +		status = inb(priv->base + NSC_DATA);
>  	if (status & NSC_STATUS_RDY)
>  		return 0;
>  
> @@ -115,9 +112,9 @@ static int nsc_wait_for_ready(struct tpm_chip *chip)
>  	stop = jiffies + 100;
>  	do {
>  		msleep(TPM_TIMEOUT);
> -		status = inb(nsc_get_priv(chip)->base + NSC_STATUS);
> +		status = inb(priv->base + NSC_STATUS);
>  		if (status & NSC_STATUS_OBF)
> -			status = inb(nsc_get_priv(chip)->base + NSC_DATA);
> +			status = inb(priv->base + NSC_DATA);
>  		if (status & NSC_STATUS_RDY)
>  			return 0;
>  	}
> @@ -130,6 +127,7 @@ static int nsc_wait_for_ready(struct tpm_chip *chip)
>  
>  static int tpm_nsc_recv(struct tpm_chip *chip, u8 * buf, size_t count)
>  {
> +	struct tpm_nsc_priv *priv = dev_get_drvdata(&chip->dev);
>  	u8 *buffer = buf;
>  	u8 data, *p;
>  	u32 size;
> @@ -143,7 +141,7 @@ static int tpm_nsc_recv(struct tpm_chip *chip, u8 * buf, size_t count)
>  		return -EIO;
>  	}
>  
> -	data = inb(nsc_get_priv(chip)->base + NSC_DATA);
> +	data = inb(priv->base + NSC_DATA);
>  	if (data != NSC_COMMAND_NORMAL) {
>  		dev_err(&chip->dev, "not in normal mode (0x%x)\n",
>  			data);
> @@ -160,7 +158,7 @@ static int tpm_nsc_recv(struct tpm_chip *chip, u8 * buf, size_t count)
>  		}
>  		if (data & NSC_STATUS_F0)
>  			break;
> -		*p = inb(nsc_get_priv(chip)->base + NSC_DATA);
> +		*p = inb(priv->base + NSC_DATA);
>  	}
>  
>  	if ((data & NSC_STATUS_F0) == 0 &&
> @@ -169,7 +167,7 @@ static int tpm_nsc_recv(struct tpm_chip *chip, u8 * buf, size_t count)
>  		return -EIO;
>  	}
>  
> -	data = inb(nsc_get_priv(chip)->base + NSC_DATA);
> +	data = inb(priv->base + NSC_DATA);
>  	if (data != NSC_COMMAND_EOC) {
>  		dev_err(&chip->dev,
>  			"expected end of command(0x%x)\n", data);
> @@ -187,6 +185,7 @@ static int tpm_nsc_recv(struct tpm_chip *chip, u8 * buf, size_t count)
>  
>  static int tpm_nsc_send(struct tpm_chip *chip, u8 * buf, size_t count)
>  {
> +	struct tpm_nsc_priv *priv = dev_get_drvdata(&chip->dev);
>  	u8 data;
>  	int i;
>  
> @@ -196,7 +195,7 @@ static int tpm_nsc_send(struct tpm_chip *chip, u8 * buf, size_t count)
>  	 * fix it. Not sure why this is needed, we followed the flow
>  	 * chart in the manual to the letter.
>  	 */
> -	outb(NSC_COMMAND_CANCEL, nsc_get_priv(chip)->base + NSC_COMMAND);
> +	outb(NSC_COMMAND_CANCEL, priv->base + NSC_COMMAND);
>  
>  	if (nsc_wait_for_ready(chip) != 0)
>  		return -EIO;
> @@ -206,7 +205,7 @@ static int tpm_nsc_send(struct tpm_chip *chip, u8 * buf, size_t count)
>  		return -EIO;
>  	}
>  
> -	outb(NSC_COMMAND_NORMAL, nsc_get_priv(chip)->base + NSC_COMMAND);
> +	outb(NSC_COMMAND_NORMAL, priv->base + NSC_COMMAND);
>  	if (wait_for_stat(chip, NSC_STATUS_IBR, NSC_STATUS_IBR, &data) < 0) {
>  		dev_err(&chip->dev, "IBR timeout\n");
>  		return -EIO;
> @@ -218,26 +217,30 @@ static int tpm_nsc_send(struct tpm_chip *chip, u8 * buf, size_t count)
>  				"IBF timeout (while writing data)\n");
>  			return -EIO;
>  		}
> -		outb(buf[i], nsc_get_priv(chip)->base + NSC_DATA);
> +		outb(buf[i], priv->base + NSC_DATA);
>  	}
>  
>  	if (wait_for_stat(chip, NSC_STATUS_IBF, 0, &data) < 0) {
>  		dev_err(&chip->dev, "IBF timeout\n");
>  		return -EIO;
>  	}
> -	outb(NSC_COMMAND_EOC, nsc_get_priv(chip)->base + NSC_COMMAND);
> +	outb(NSC_COMMAND_EOC, priv->base + NSC_COMMAND);
>  
>  	return count;
>  }
>  
>  static void tpm_nsc_cancel(struct tpm_chip *chip)
>  {
> -	outb(NSC_COMMAND_CANCEL, nsc_get_priv(chip)->base + NSC_COMMAND);
> +	struct tpm_nsc_priv *priv = dev_get_drvdata(&chip->dev);
> +
> +	outb(NSC_COMMAND_CANCEL, priv->base + NSC_COMMAND);
>  }
>  
>  static u8 tpm_nsc_status(struct tpm_chip *chip)
>  {
> -	return inb(nsc_get_priv(chip)->base + NSC_STATUS);
> +	struct tpm_nsc_priv *priv = dev_get_drvdata(&chip->dev);
> +
> +	return inb(priv->base + NSC_STATUS);
>  }
>  
>  static bool tpm_nsc_req_canceled(struct tpm_chip *chip, u8 status)
> @@ -260,9 +263,10 @@ static struct platform_device *pdev = NULL;
>  static void tpm_nsc_remove(struct device *dev)
>  {
>  	struct tpm_chip *chip = dev_get_drvdata(dev);
> +	struct tpm_nsc_priv *priv = dev_get_drvdata(&chip->dev);
>  
>  	tpm_chip_unregister(chip);
> -	release_region(nsc_get_priv(chip)->base, 2);
> +	release_region(priv->base, 2);
>  }
>  
>  static SIMPLE_DEV_PM_OPS(tpm_nsc_pm, tpm_pm_suspend, tpm_pm_resume);
> @@ -334,7 +338,7 @@ static int __init init_nsc(void)
>  		goto err_rel_reg;
>  	}
>  
> -	chip->vendor.priv = priv;
> +	dev_set_drvdata(&chip->dev, priv);
>  
>  	rc = tpm_chip_register(chip);
>  	if (rc)
> diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
> index 19dac62..bf333cf 100644
> --- a/drivers/char/tpm/tpm_tis.c
> +++ b/drivers/char/tpm/tpm_tis.c
> @@ -129,8 +129,9 @@ static inline int is_itpm(struct acpi_device *dev)
>   * correct values in the other bits.' */
>  static int wait_startup(struct tpm_chip *chip, int l)
>  {
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  	unsigned long stop = jiffies + chip->vendor.timeout_a;
> +
>  	do {
>  		if (ioread8(priv->iobase + TPM_ACCESS(l)) &
>  		    TPM_ACCESS_VALID)
> @@ -142,7 +143,7 @@ static int wait_startup(struct tpm_chip *chip, int l)
>  
>  static int check_locality(struct tpm_chip *chip, int l)
>  {
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  
>  	if ((ioread8(priv->iobase + TPM_ACCESS(l)) &
>  	     (TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID)) ==
> @@ -154,7 +155,7 @@ static int check_locality(struct tpm_chip *chip, int l)
>  
>  static void release_locality(struct tpm_chip *chip, int l, int force)
>  {
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  
>  	if (force || (ioread8(priv->iobase + TPM_ACCESS(l)) &
>  		      (TPM_ACCESS_REQUEST_PENDING | TPM_ACCESS_VALID)) ==
> @@ -165,7 +166,7 @@ static void release_locality(struct tpm_chip *chip, int l, int force)
>  
>  static int request_locality(struct tpm_chip *chip, int l)
>  {
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  	unsigned long stop, timeout;
>  	long rc;
>  
> @@ -206,7 +207,7 @@ again:
>  
>  static u8 tpm_tis_status(struct tpm_chip *chip)
>  {
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  
>  	return ioread8(priv->iobase +
>  		       TPM_STS(chip->vendor.locality));
> @@ -214,7 +215,7 @@ static u8 tpm_tis_status(struct tpm_chip *chip)
>  
>  static void tpm_tis_ready(struct tpm_chip *chip)
>  {
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  
>  	/* this causes the current command to be aborted */
>  	iowrite8(TPM_STS_COMMAND_READY,
> @@ -223,7 +224,7 @@ static void tpm_tis_ready(struct tpm_chip *chip)
>  
>  static int get_burstcount(struct tpm_chip *chip)
>  {
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  	unsigned long stop;
>  	int burstcnt;
>  
> @@ -245,7 +246,7 @@ static int get_burstcount(struct tpm_chip *chip)
>  
>  static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
>  {
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  	int size = 0, burstcnt;
>  	while (size < count &&
>  	       wait_for_tpm_stat(chip,
> @@ -264,7 +265,7 @@ static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
>  
>  static int tpm_tis_recv(struct tpm_chip *chip, u8 *buf, size_t count)
>  {
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  	int size = 0;
>  	int expected, status;
>  
> @@ -320,7 +321,7 @@ MODULE_PARM_DESC(itpm, "Force iTPM workarounds (found on some Lenovo laptops)");
>   */
>  static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
>  {
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  	int rc, status, burstcnt;
>  	size_t count = 0;
>  
> @@ -376,7 +377,7 @@ out_err:
>  
>  static void disable_interrupts(struct tpm_chip *chip)
>  {
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  	u32 intmask;
>  
>  	intmask =
> @@ -396,7 +397,7 @@ static void disable_interrupts(struct tpm_chip *chip)
>   */
>  static int tpm_tis_send_main(struct tpm_chip *chip, u8 *buf, size_t len)
>  {
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  	int rc;
>  	u32 ordinal;
>  	unsigned long dur;
> @@ -434,7 +435,7 @@ out_err:
>  static int tpm_tis_send(struct tpm_chip *chip, u8 *buf, size_t len)
>  {
>  	int rc, irq;
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  
>  	if (!chip->vendor.irq || priv->irq_tested)
>  		return tpm_tis_send_main(chip, buf, len);
> @@ -466,7 +467,7 @@ static const struct tis_vendor_timeout_override vendor_timeout_overrides[] = {
>  static bool tpm_tis_update_timeouts(struct tpm_chip *chip,
>  				    unsigned long *timeout_cap)
>  {
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  	int i;
>  	u32 did_vid;
>  
> @@ -490,7 +491,7 @@ static bool tpm_tis_update_timeouts(struct tpm_chip *chip,
>   */
>  static int probe_itpm(struct tpm_chip *chip)
>  {
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  	int rc = 0;
>  	u8 cmd_getticks[] = {
>  		0x00, 0xc1, 0x00, 0x00, 0x00, 0x0a,
> @@ -532,7 +533,7 @@ out:
>  
>  static bool tpm_tis_req_canceled(struct tpm_chip *chip, u8 status)
>  {
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  
>  	switch (priv->manufacturer_id) {
>  	case TPM_VID_WINBOND:
> @@ -559,7 +560,7 @@ static const struct tpm_class_ops tpm_tis = {
>  static irqreturn_t tis_int_handler(int dummy, void *dev_id)
>  {
>  	struct tpm_chip *chip = dev_id;
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  	u32 interrupt;
>  	int i;
>  
> @@ -569,7 +570,7 @@ static irqreturn_t tis_int_handler(int dummy, void *dev_id)
>  	if (interrupt == 0)
>  		return IRQ_NONE;
>  
> -	((struct priv_data *)chip->vendor.priv)->irq_tested = true;
> +	priv->irq_tested = true;
>  	if (interrupt & TPM_INTF_DATA_AVAIL_INT)
>  		wake_up_interruptible(&chip->vendor.read_queue);
>  	if (interrupt & TPM_INTF_LOCALITY_CHANGE_INT)
> @@ -596,7 +597,7 @@ static irqreturn_t tis_int_handler(int dummy, void *dev_id)
>  static int tpm_tis_probe_irq_single(struct tpm_chip *chip, u32 intmask,
>  				    int flags, int irq)
>  {
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  	u8 original_int_vec;
>  
>  	if (devm_request_irq(&chip->dev, irq, tis_int_handler, flags,
> @@ -649,7 +650,7 @@ static int tpm_tis_probe_irq_single(struct tpm_chip *chip, u32 intmask,
>   */
>  static void tpm_tis_probe_irq(struct tpm_chip *chip, u32 intmask)
>  {
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  	u8 original_int_vec;
>  	int i;
>  
> @@ -673,7 +674,7 @@ MODULE_PARM_DESC(interrupts, "Enable interrupts");
>  
>  static void tpm_tis_remove(struct tpm_chip *chip)
>  {
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  
>  	if (chip->flags & TPM_CHIP_FLAG_TPM2)
>  		tpm2_shutdown(chip, TPM2_SU_CLEAR);
> @@ -702,7 +703,6 @@ static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info,
>  	if (IS_ERR(chip))
>  		return PTR_ERR(chip);
>  
> -	chip->vendor.priv = priv;
>  #ifdef CONFIG_ACPI
>  	chip->acpi_dev_handle = acpi_dev_handle;
>  #endif
> @@ -717,6 +717,8 @@ static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info,
>  	chip->vendor.timeout_c = TIS_TIMEOUT_C_MAX;
>  	chip->vendor.timeout_d = TIS_TIMEOUT_D_MAX;
>  
> +	dev_set_drvdata(&chip->dev, priv);
> +
>  	if (wait_startup(chip, 0) != 0) {
>  		rc = -ENODEV;
>  		goto out_err;
> @@ -841,7 +843,7 @@ out_err:
>  #ifdef CONFIG_PM_SLEEP
>  static void tpm_tis_reenable_interrupts(struct tpm_chip *chip)
>  {
> -	struct priv_data *priv = chip->vendor.priv;
> +	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  	u32 intmask;
>  
>  	/* reenable interrupts that device may have lost or
> diff --git a/drivers/char/tpm/xen-tpmfront.c b/drivers/char/tpm/xen-tpmfront.c
> index 3111f27..efd7d99 100644
> --- a/drivers/char/tpm/xen-tpmfront.c
> +++ b/drivers/char/tpm/xen-tpmfront.c
> @@ -39,7 +39,7 @@ enum status_bits {
>  
>  static u8 vtpm_status(struct tpm_chip *chip)
>  {
> -	struct tpm_private *priv = TPM_VPRIV(chip);
> +	struct tpm_private *priv = dev_get_drvdata(&chip->dev);
>  	switch (priv->shr->state) {
>  	case VTPM_STATE_IDLE:
>  		return VTPM_STATUS_IDLE | VTPM_STATUS_CANCELED;
> @@ -60,7 +60,7 @@ static bool vtpm_req_canceled(struct tpm_chip *chip, u8 status)
>  
>  static void vtpm_cancel(struct tpm_chip *chip)
>  {
> -	struct tpm_private *priv = TPM_VPRIV(chip);
> +	struct tpm_private *priv = dev_get_drvdata(&chip->dev);
>  	priv->shr->state = VTPM_STATE_CANCEL;
>  	wmb();
>  	notify_remote_via_evtchn(priv->evtchn);
> @@ -73,7 +73,7 @@ static unsigned int shr_data_offset(struct vtpm_shared_page *shr)
>  
>  static int vtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)
>  {
> -	struct tpm_private *priv = TPM_VPRIV(chip);
> +	struct tpm_private *priv = dev_get_drvdata(&chip->dev);
>  	struct vtpm_shared_page *shr = priv->shr;
>  	unsigned int offset = shr_data_offset(shr);
>  
> @@ -115,7 +115,7 @@ static int vtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)
>  
>  static int vtpm_recv(struct tpm_chip *chip, u8 *buf, size_t count)
>  {
> -	struct tpm_private *priv = TPM_VPRIV(chip);
> +	struct tpm_private *priv = dev_get_drvdata(&chip->dev);
>  	struct vtpm_shared_page *shr = priv->shr;
>  	unsigned int offset = shr_data_offset(shr);
>  	size_t length = shr->length;
> @@ -182,7 +182,7 @@ static int setup_chip(struct device *dev, struct tpm_private *priv)
>  	init_waitqueue_head(&chip->vendor.read_queue);
>  
>  	priv->chip = chip;
> -	TPM_VPRIV(chip) = priv;
> +	dev_set_drvdata(&chip->dev, priv);
>  
>  	return 0;
>  }
> @@ -318,10 +318,10 @@ static int tpmfront_probe(struct xenbus_device *dev,
>  static int tpmfront_remove(struct xenbus_device *dev)
>  {
>  	struct tpm_chip *chip = dev_get_drvdata(&dev->dev);
> -	struct tpm_private *priv = TPM_VPRIV(chip);
> +	struct tpm_private *priv = dev_get_drvdata(&chip->dev);
>  	tpm_chip_unregister(chip);
>  	ring_free(priv);
> -	TPM_VPRIV(chip) = NULL;
> +	dev_set_drvdata(&chip->dev, NULL);
>  	return 0;
>  }
>  
> -- 
> 2.5.0
> 

------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785471&iu=/4140

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 5/7] tpm: drop 'irq' from struct tpm_vendor_specific
       [not found]     ` <1458975615-8095-6-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
@ 2016-03-29 14:22       ` Jarkko Sakkinen
  0 siblings, 0 replies; 17+ messages in thread
From: Jarkko Sakkinen @ 2016-03-29 14:22 UTC (permalink / raw)
  To: Christophe Ricard
  Cc: jean-luc.blanc-qxv4g6HH51o, ashley-fm2HMyfA2y6tG0bUXCXiUA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
	christophe-h.ricard-qxv4g6HH51o, benoit.houyere-qxv4g6HH51o

On Sat, Mar 26, 2016 at 08:00:13AM +0100, Christophe Ricard wrote:
> Dropped the field 'irq' from struct tpm_vendor_specific and make it available
> to the various private structures in the drivers using irqs.
> 
> A dedicated flag TPM_CHIP_FLAG_USES_IRQ is added for the upper layers.

TPM_CHIP_FLAG_IRQ

/Jarkko

> Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
> ---
>  drivers/char/tpm/st33zp24/st33zp24.c | 15 ++++++++-------
>  drivers/char/tpm/st33zp24/st33zp24.h |  1 +
>  drivers/char/tpm/tpm-interface.c     |  4 ++--
>  drivers/char/tpm/tpm.h               |  3 +--
>  drivers/char/tpm/tpm_i2c_atmel.c     |  1 -
>  drivers/char/tpm/tpm_i2c_infineon.c  |  3 ---
>  drivers/char/tpm/tpm_i2c_nuvoton.c   | 21 ++++++++++++---------
>  drivers/char/tpm/tpm_tis.c           | 30 +++++++++++++++++-------------
>  drivers/char/tpm/xen-tpmfront.c      |  7 ++++---
>  9 files changed, 45 insertions(+), 40 deletions(-)
> 
> diff --git a/drivers/char/tpm/st33zp24/st33zp24.c b/drivers/char/tpm/st33zp24/st33zp24.c
> index 3c0625c..7a5de0e 100644
> --- a/drivers/char/tpm/st33zp24/st33zp24.c
> +++ b/drivers/char/tpm/st33zp24/st33zp24.c
> @@ -268,10 +268,10 @@ static int wait_for_stat(struct tpm_chip *chip, u8 mask, unsigned long timeout,
>  
>  	stop = jiffies + timeout;
>  
> -	if (chip->vendor.irq) {
> +	if (chip->flags & TPM_CHIP_FLAG_USES_IRQ) {
>  		cur_intrs = tpm_dev->intrs;
>  		clear_interruption(tpm_dev);
> -		enable_irq(chip->vendor.irq);
> +		enable_irq(tpm_dev->irq);
>  
>  		do {
>  			if (ret == -ERESTARTSYS && freezing(current))
> @@ -294,7 +294,7 @@ static int wait_for_stat(struct tpm_chip *chip, u8 mask, unsigned long timeout,
>  			}
>  		} while (ret == -ERESTARTSYS && freezing(current));
>  
> -		disable_irq_nosync(chip->vendor.irq);
> +		disable_irq_nosync(tpm_dev->irq);
>  
>  	} else {
>  		do {
> @@ -352,7 +352,7 @@ static irqreturn_t tpm_ioserirq_handler(int irq, void *dev_id)
>  
>  	tpm_dev->intrs++;
>  	wake_up_interruptible(&chip->vendor.read_queue);
> -	disable_irq_nosync(chip->vendor.irq);
> +	disable_irq_nosync(tpm_dev->irq);
>  
>  	return IRQ_HANDLED;
>  } /* tpm_ioserirq_handler() */
> @@ -430,7 +430,7 @@ static int st33zp24_send(struct tpm_chip *chip, unsigned char *buf,
>  	if (ret < 0)
>  		goto out_err;
>  
> -	if (chip->vendor.irq) {
> +	if (chip->flags & TPM_CHIP_FLAG_USES_IRQ) {
>  		ordinal = be32_to_cpu(*((__be32 *) (buf + 6)));
>  
>  		ret = wait_for_stat(chip, TPM_STS_DATA_AVAIL | TPM_STS_VALID,
> @@ -585,9 +585,10 @@ int st33zp24_probe(void *phy_id, const struct st33zp24_phy_ops *ops,
>  		if (ret < 0)
>  			goto _tpm_clean_answer;
>  
> -		chip->vendor.irq = irq;
> +		tpm_dev->irq = irq;
> +		chip->flags |= TPM_CHIP_FLAG_USES_IRQ;
>  
> -		disable_irq_nosync(chip->vendor.irq);
> +		disable_irq_nosync(tpm_dev->irq);
>  
>  		tpm_gen_interrupt(chip);
>  	}
> diff --git a/drivers/char/tpm/st33zp24/st33zp24.h b/drivers/char/tpm/st33zp24/st33zp24.h
> index b242263..b139a8d 100644
> --- a/drivers/char/tpm/st33zp24/st33zp24.h
> +++ b/drivers/char/tpm/st33zp24/st33zp24.h
> @@ -24,6 +24,7 @@
>  struct st33zp24_dev {
>  	void *phy_id;
>  	const struct st33zp24_phy_ops *ops;
> +	int irq;
>  	u32 intrs;
>  	int io_lpcpd;
>  };
> diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
> index 5397b64..0bdd25b 100644
> --- a/drivers/char/tpm/tpm-interface.c
> +++ b/drivers/char/tpm/tpm-interface.c
> @@ -359,7 +359,7 @@ ssize_t tpm_transmit(struct tpm_chip *chip, const char *buf,
>  		goto out;
>  	}
>  
> -	if (chip->vendor.irq)
> +	if (chip->flags & TPM_CHIP_FLAG_USES_IRQ)
>  		goto out_recv;
>  
>  	if (chip->flags & TPM_CHIP_FLAG_TPM2)
> @@ -890,7 +890,7 @@ int wait_for_tpm_stat(struct tpm_chip *chip, u8 mask, unsigned long timeout,
>  
>  	stop = jiffies + timeout;
>  
> -	if (chip->vendor.irq) {
> +	if (chip->flags & TPM_CHIP_FLAG_USES_IRQ) {
>  again:
>  		timeout = stop - jiffies;
>  		if ((long)timeout <= 0)
> diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
> index c4d3f41..26c8d62 100644
> --- a/drivers/char/tpm/tpm.h
> +++ b/drivers/char/tpm/tpm.h
> @@ -131,8 +131,6 @@ enum tpm2_startup_types {
>  struct tpm_chip;
>  
>  struct tpm_vendor_specific {
> -	int irq;
> -
>  	int locality;
>  	unsigned long timeout_a, timeout_b, timeout_c, timeout_d; /* jiffies */
>  	bool timeout_adjusted;
> @@ -151,6 +149,7 @@ struct tpm_vendor_specific {
>  enum tpm_chip_flags {
>  	TPM_CHIP_FLAG_REGISTERED	= BIT(0),
>  	TPM_CHIP_FLAG_TPM2		= BIT(1),
> +	TPM_CHIP_FLAG_USES_IRQ		= BIT(2),
>  };
>  
>  struct tpm_chip {
> diff --git a/drivers/char/tpm/tpm_i2c_atmel.c b/drivers/char/tpm/tpm_i2c_atmel.c
> index d357065..fe06885 100644
> --- a/drivers/char/tpm/tpm_i2c_atmel.c
> +++ b/drivers/char/tpm/tpm_i2c_atmel.c
> @@ -172,7 +172,6 @@ static int i2c_atmel_probe(struct i2c_client *client,
>  	chip->vendor.timeout_b = msecs_to_jiffies(TPM_I2C_LONG_TIMEOUT);
>  	chip->vendor.timeout_c = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
>  	chip->vendor.timeout_d = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
> -	chip->vendor.irq = 0;
>  
>  	dev_set_drvdata(&chip->dev, priv);
>  
> diff --git a/drivers/char/tpm/tpm_i2c_infineon.c b/drivers/char/tpm/tpm_i2c_infineon.c
> index e74f1c1..093daf9 100644
> --- a/drivers/char/tpm/tpm_i2c_infineon.c
> +++ b/drivers/char/tpm/tpm_i2c_infineon.c
> @@ -585,9 +585,6 @@ static int tpm_tis_i2c_init(struct device *dev)
>  	if (IS_ERR(chip))
>  		return PTR_ERR(chip);
>  
> -	/* Disable interrupts */
> -	chip->vendor.irq = 0;
> -
>  	/* Default timeouts */
>  	chip->vendor.timeout_a = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
>  	chip->vendor.timeout_b = msecs_to_jiffies(TIS_LONG_TIMEOUT);
> diff --git a/drivers/char/tpm/tpm_i2c_nuvoton.c b/drivers/char/tpm/tpm_i2c_nuvoton.c
> index 76ac21d..bf3ba18 100644
> --- a/drivers/char/tpm/tpm_i2c_nuvoton.c
> +++ b/drivers/char/tpm/tpm_i2c_nuvoton.c
> @@ -55,6 +55,7 @@
>  #define I2C_DRIVER_NAME "tpm_i2c_nuvoton"
>  
>  struct priv_data {
> +	int irq;
>  	unsigned int intrs;
>  };
>  
> @@ -176,12 +177,12 @@ static bool i2c_nuvoton_check_status(struct tpm_chip *chip, u8 mask, u8 value)
>  static int i2c_nuvoton_wait_for_stat(struct tpm_chip *chip, u8 mask, u8 value,
>  				     u32 timeout, wait_queue_head_t *queue)
>  {
> -	if (chip->vendor.irq && queue) {
> +	if (chip->flags & TPM_CHIP_FLAG_USES_IRQ && queue) {
>  		s32 rc;
>  		struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  		unsigned int cur_intrs = priv->intrs;
>  
> -		enable_irq(chip->vendor.irq);
> +		enable_irq(priv->irq);
>  		rc = wait_event_interruptible_timeout(*queue,
>  						      cur_intrs != priv->intrs,
>  						      timeout);
> @@ -477,7 +478,7 @@ static irqreturn_t i2c_nuvoton_int_handler(int dummy, void *dev_id)
>  
>  	priv->intrs++;
>  	wake_up(&chip->vendor.read_queue);
> -	disable_irq_nosync(chip->vendor.irq);
> +	disable_irq_nosync(priv->irq);
>  	return IRQ_HANDLED;
>  }
>  
> @@ -554,19 +555,21 @@ static int i2c_nuvoton_probe(struct i2c_client *client,
>  	 *   TPM_INTF_INT_LEVEL_LOW | TPM_INTF_DATA_AVAIL_INT
>  	 * The IRQ should be set in the i2c_board_info (which is done
>  	 * automatically in of_i2c_register_devices, for device tree users */
> -	chip->vendor.irq = client->irq;
> +	chip->flags |= TPM_CHIP_FLAG_USES_IRQ;
> +	priv->irq = client->irq;
>  
> -	if (chip->vendor.irq) {
> -		dev_dbg(dev, "%s() chip-vendor.irq\n", __func__);
> -		rc = devm_request_irq(dev, chip->vendor.irq,
> +	if (chip->flags & TPM_CHIP_FLAG_USES_IRQ) {
> +		dev_dbg(dev, "%s() priv->irq\n", __func__);
> +		rc = devm_request_irq(dev, client->irq,
>  				      i2c_nuvoton_int_handler,
>  				      IRQF_TRIGGER_LOW,
>  				      dev_name(&chip->dev),
>  				      chip);
>  		if (rc) {
>  			dev_err(dev, "%s() Unable to request irq: %d for use\n",
> -				__func__, chip->vendor.irq);
> -			chip->vendor.irq = 0;
> +				__func__, priv->irq);
> +			chip->flags &= ~TPM_CHIP_FLAG_USES_IRQ;
> +			priv->irq = 0;
>  		} else {
>  			/* Clear any pending interrupt */
>  			i2c_nuvoton_ready(chip);
> diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
> index bf333cf..79edfc3 100644
> --- a/drivers/char/tpm/tpm_tis.c
> +++ b/drivers/char/tpm/tpm_tis.c
> @@ -96,6 +96,7 @@ struct tpm_info {
>  struct priv_data {
>  	void __iomem *iobase;
>  	u16 manufacturer_id;
> +	int irq;
>  	bool irq_tested;
>  	wait_queue_head_t int_queue;
>  };
> @@ -178,7 +179,7 @@ static int request_locality(struct tpm_chip *chip, int l)
>  
>  	stop = jiffies + chip->vendor.timeout_a;
>  
> -	if (chip->vendor.irq) {
> +	if (chip->flags & TPM_CHIP_FLAG_USES_IRQ) {
>  again:
>  		timeout = stop - jiffies;
>  		if ((long)timeout <= 0)
> @@ -386,8 +387,9 @@ static void disable_interrupts(struct tpm_chip *chip)
>  	intmask &= ~TPM_GLOBAL_INT_ENABLE;
>  	iowrite32(intmask,
>  		  priv->iobase + TPM_INT_ENABLE(chip->vendor.locality));
> -	devm_free_irq(&chip->dev, chip->vendor.irq, chip);
> -	chip->vendor.irq = 0;
> +	devm_free_irq(&chip->dev, priv->irq, chip);
> +	priv->irq = 0;
> +	chip->flags &= ~TPM_CHIP_FLAG_USES_IRQ;
>  }
>  
>  /*
> @@ -410,7 +412,7 @@ static int tpm_tis_send_main(struct tpm_chip *chip, u8 *buf, size_t len)
>  	iowrite8(TPM_STS_GO,
>  		 priv->iobase + TPM_STS(chip->vendor.locality));
>  
> -	if (chip->vendor.irq) {
> +	if (chip->flags & TPM_CHIP_FLAG_USES_IRQ) {
>  		ordinal = be32_to_cpu(*((__be32 *) (buf + 6)));
>  
>  		if (chip->flags & TPM_CHIP_FLAG_TPM2)
> @@ -437,14 +439,16 @@ static int tpm_tis_send(struct tpm_chip *chip, u8 *buf, size_t len)
>  	int rc, irq;
>  	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  
> -	if (!chip->vendor.irq || priv->irq_tested)
> +	if (!(chip->flags & TPM_CHIP_FLAG_USES_IRQ) || priv->irq_tested)
>  		return tpm_tis_send_main(chip, buf, len);
>  
>  	/* Verify receipt of the expected IRQ */
> -	irq = chip->vendor.irq;
> -	chip->vendor.irq = 0;
> +	irq = priv->irq;
> +	priv->irq = 0;
> +	chip->flags &= ~TPM_CHIP_FLAG_USES_IRQ;
>  	rc = tpm_tis_send_main(chip, buf, len);
> -	chip->vendor.irq = irq;
> +	priv->irq = irq;
> +	chip->flags |= TPM_CHIP_FLAG_USES_IRQ;
>  	if (!priv->irq_tested)
>  		msleep(1);
>  	if (!priv->irq_tested)
> @@ -606,7 +610,7 @@ static int tpm_tis_probe_irq_single(struct tpm_chip *chip, u32 intmask,
>  			 irq);
>  		return -1;
>  	}
> -	chip->vendor.irq = irq;
> +	priv->irq = irq;
>  
>  	original_int_vec = ioread8(priv->iobase +
>  				   TPM_INT_VECTOR(chip->vendor.locality));
> @@ -635,7 +639,7 @@ static int tpm_tis_probe_irq_single(struct tpm_chip *chip, u32 intmask,
>  	/* tpm_tis_send will either confirm the interrupt is working or it
>  	 * will call disable_irq which undoes all of the above.
>  	 */
> -	if (!chip->vendor.irq) {
> +	if (!(chip->flags & TPM_CHIP_FLAG_USES_IRQ)) {
>  		iowrite8(original_int_vec,
>  			 priv->iobase + TPM_INT_VECTOR(chip->vendor.locality));
>  		return 1;
> @@ -804,7 +808,7 @@ static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info,
>  		if (tpm_info->irq) {
>  			tpm_tis_probe_irq_single(chip, intmask, IRQF_SHARED,
>  						 tpm_info->irq);
> -			if (!chip->vendor.irq)
> +			if (!(chip->flags & TPM_CHIP_FLAG_USES_IRQ))
>  				dev_err(&chip->dev, FW_BUG
>  					"TPM interrupt not working, polling instead\n");
>  		} else
> @@ -848,7 +852,7 @@ static void tpm_tis_reenable_interrupts(struct tpm_chip *chip)
>  
>  	/* reenable interrupts that device may have lost or
>  	   BIOS/firmware may have disabled */
> -	iowrite8(chip->vendor.irq, priv->iobase +
> +	iowrite8(priv->irq, priv->iobase +
>  		 TPM_INT_VECTOR(chip->vendor.locality));
>  
>  	intmask =
> @@ -867,7 +871,7 @@ static int tpm_tis_resume(struct device *dev)
>  	struct tpm_chip *chip = dev_get_drvdata(dev);
>  	int ret;
>  
> -	if (chip->vendor.irq)
> +	if (chip->flags & TPM_CHIP_FLAG_USES_IRQ)
>  		tpm_tis_reenable_interrupts(chip);
>  
>  	ret = tpm_pm_resume(dev);
> diff --git a/drivers/char/tpm/xen-tpmfront.c b/drivers/char/tpm/xen-tpmfront.c
> index efd7d99..a903f86 100644
> --- a/drivers/char/tpm/xen-tpmfront.c
> +++ b/drivers/char/tpm/xen-tpmfront.c
> @@ -28,6 +28,7 @@ struct tpm_private {
>  	unsigned int evtchn;
>  	int ring_ref;
>  	domid_t backend_id;
> +	int irq;
>  };
>  
>  enum status_bits {
> @@ -217,7 +218,7 @@ static int setup_ring(struct xenbus_device *dev, struct tpm_private *priv)
>  		xenbus_dev_fatal(dev, rv, "allocating TPM irq");
>  		return rv;
>  	}
> -	priv->chip->vendor.irq = rv;
> +	priv->irq = rv;
>  
>   again:
>  	rv = xenbus_transaction_start(&xbt);
> @@ -277,8 +278,8 @@ static void ring_free(struct tpm_private *priv)
>  	else
>  		free_page((unsigned long)priv->shr);
>  
> -	if (priv->chip && priv->chip->vendor.irq)
> -		unbind_from_irqhandler(priv->chip->vendor.irq, priv);
> +	if (priv->irq)
> +		unbind_from_irqhandler(priv->irq, priv);
>  
>  	kfree(priv);
>  }
> -- 
> 2.5.0
> 

------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785471&iu=/4140

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 6/7] tpm: Move remaining tpm_vendor_specific structure data to tpm_chip
       [not found]     ` <1458975615-8095-7-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
@ 2016-03-29 14:27       ` Jarkko Sakkinen
  0 siblings, 0 replies; 17+ messages in thread
From: Jarkko Sakkinen @ 2016-03-29 14:27 UTC (permalink / raw)
  To: Christophe Ricard
  Cc: jean-luc.blanc-qxv4g6HH51o, ashley-fm2HMyfA2y6tG0bUXCXiUA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
	christophe-h.ricard-qxv4g6HH51o, benoit.houyere-qxv4g6HH51o

On Sat, Mar 26, 2016 at 08:00:14AM +0100, Christophe Ricard wrote:
> As no more information in tpm_vendor_specific structure are
> available in tpm_vendor_specific structure move them to tpm_chip structure.

The commit message is just horrible and it is lying as there are still
fields in that struct after this change.

> Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
> ---
>  drivers/char/tpm/st33zp24/st33zp24.c | 28 +++++------
>  drivers/char/tpm/tpm-interface.c     | 48 +++++++++---------
>  drivers/char/tpm/tpm-sysfs.c         | 20 ++++----
>  drivers/char/tpm/tpm.h               | 12 ++---
>  drivers/char/tpm/tpm2-cmd.c          |  2 +-
>  drivers/char/tpm/tpm_i2c_atmel.c     |  8 +--
>  drivers/char/tpm/tpm_i2c_infineon.c  | 44 ++++++++---------
>  drivers/char/tpm/tpm_i2c_nuvoton.c   | 24 ++++-----
>  drivers/char/tpm/tpm_tis.c           | 95 ++++++++++++++++++------------------
>  drivers/char/tpm/xen-tpmfront.c      |  4 +-
>  10 files changed, 141 insertions(+), 144 deletions(-)
> 
> diff --git a/drivers/char/tpm/st33zp24/st33zp24.c b/drivers/char/tpm/st33zp24/st33zp24.c
> index 7a5de0e..2834c6f 100644
> --- a/drivers/char/tpm/st33zp24/st33zp24.c
> +++ b/drivers/char/tpm/st33zp24/st33zp24.c
> @@ -131,7 +131,7 @@ static int check_locality(struct tpm_chip *chip)
>  	if (status && (data &
>  		(TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID)) ==
>  		(TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID))
> -		return chip->vendor.locality;
> +		return chip->locality;
>  
>  	return -EACCES;
>  } /* check_locality() */
> @@ -148,20 +148,20 @@ static int request_locality(struct tpm_chip *chip)
>  	struct st33zp24_dev *tpm_dev = dev_get_drvdata(&chip->dev);
>  	u8 data;
>  
> -	if (check_locality(chip) == chip->vendor.locality)
> -		return chip->vendor.locality;
> +	if (check_locality(chip) == chip->locality)
> +		return chip->locality;
>  
>  	data = TPM_ACCESS_REQUEST_USE;
>  	ret = tpm_dev->ops->send(tpm_dev->phy_id, TPM_ACCESS, &data, 1);
>  	if (ret < 0)
>  		return ret;
>  
> -	stop = jiffies + chip->vendor.timeout_a;
> +	stop = jiffies + chip->timeout_a;
>  
>  	/* Request locality is usually effective after the request */
>  	do {
>  		if (check_locality(chip) >= 0)
> -			return chip->vendor.locality;
> +			return chip->locality;
>  		msleep(TPM_TIMEOUT);
>  	} while (time_before(jiffies, stop));
>  
> @@ -195,7 +195,7 @@ static int get_burstcount(struct tpm_chip *chip)
>  	int burstcnt, status;
>  	u8 temp;
>  
> -	stop = jiffies + chip->vendor.timeout_d;
> +	stop = jiffies + chip->timeout_d;
>  	do {
>  		status = tpm_dev->ops->recv(tpm_dev->phy_id, TPM_STS + 1,
>  					    &temp, 1);
> @@ -323,7 +323,7 @@ static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
>  	while (size < count &&
>  	       wait_for_stat(chip,
>  			     TPM_STS_DATA_AVAIL | TPM_STS_VALID,
> -			     chip->vendor.timeout_c,
> +			     chip->timeout_c,
>  			     &chip->vendor.read_queue, true) == 0) {
>  		burstcnt = get_burstcount(chip);
>  		if (burstcnt < 0)
> @@ -388,7 +388,7 @@ static int st33zp24_send(struct tpm_chip *chip, unsigned char *buf,
>  	if ((status & TPM_STS_COMMAND_READY) == 0) {
>  		st33zp24_cancel(chip);
>  		if (wait_for_stat
> -		    (chip, TPM_STS_COMMAND_READY, chip->vendor.timeout_b,
> +		    (chip, TPM_STS_COMMAND_READY, chip->timeout_b,
>  		     &chip->vendor.read_queue, false) < 0) {
>  			ret = -ETIME;
>  			goto out_err;
> @@ -543,12 +543,12 @@ int st33zp24_probe(void *phy_id, const struct st33zp24_phy_ops *ops,
>  	tpm_dev->ops = ops;
>  	dev_set_drvdata(&chip->dev, tpm_dev);
>  
> -	chip->vendor.timeout_a = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
> -	chip->vendor.timeout_b = msecs_to_jiffies(TIS_LONG_TIMEOUT);
> -	chip->vendor.timeout_c = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
> -	chip->vendor.timeout_d = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
> +	chip->timeout_a = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
> +	chip->timeout_b = msecs_to_jiffies(TIS_LONG_TIMEOUT);
> +	chip->timeout_c = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
> +	chip->timeout_d = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
>  
> -	chip->vendor.locality = LOCALITY0;
> +	chip->locality = LOCALITY0;
>  
>  	if (irq) {
>  		/* INTERRUPT Setup */
> @@ -651,7 +651,7 @@ int st33zp24_pm_resume(struct device *dev)
>  	if (gpio_is_valid(tpm_dev->io_lpcpd)) {
>  		gpio_set_value(tpm_dev->io_lpcpd, 1);
>  		ret = wait_for_stat(chip,
> -				TPM_STS_VALID, chip->vendor.timeout_b,
> +				TPM_STS_VALID, chip->timeout_b,
>  				&chip->vendor.read_queue, false);
>  	} else {
>  		ret = tpm_pm_resume(dev);
> diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
> index 0bdd25b..69cb082 100644
> --- a/drivers/char/tpm/tpm-interface.c
> +++ b/drivers/char/tpm/tpm-interface.c
> @@ -319,7 +319,7 @@ unsigned long tpm_calc_ordinal_duration(struct tpm_chip *chip,
>  		duration_idx = tpm_ordinal_duration[ordinal];
>  
>  	if (duration_idx != TPM_UNDEFINED)
> -		duration = chip->vendor.duration[duration_idx];
> +		duration = chip->duration[duration_idx];
>  	if (duration <= 0)
>  		return 2 * 60 * HZ;
>  	else
> @@ -505,15 +505,15 @@ int tpm_get_timeouts(struct tpm_chip *chip)
>  
>  	if (chip->flags & TPM_CHIP_FLAG_TPM2) {
>  		/* Fixed timeouts for TPM2 */
> -		chip->vendor.timeout_a = msecs_to_jiffies(TPM2_TIMEOUT_A);
> -		chip->vendor.timeout_b = msecs_to_jiffies(TPM2_TIMEOUT_B);
> -		chip->vendor.timeout_c = msecs_to_jiffies(TPM2_TIMEOUT_C);
> -		chip->vendor.timeout_d = msecs_to_jiffies(TPM2_TIMEOUT_D);
> -		chip->vendor.duration[TPM_SHORT] =
> +		chip->timeout_a = msecs_to_jiffies(TPM2_TIMEOUT_A);
> +		chip->timeout_b = msecs_to_jiffies(TPM2_TIMEOUT_B);
> +		chip->timeout_c = msecs_to_jiffies(TPM2_TIMEOUT_C);
> +		chip->timeout_d = msecs_to_jiffies(TPM2_TIMEOUT_D);
> +		chip->duration[TPM_SHORT] =
>  		    msecs_to_jiffies(TPM2_DURATION_SHORT);
> -		chip->vendor.duration[TPM_MEDIUM] =
> +		chip->duration[TPM_MEDIUM] =
>  		    msecs_to_jiffies(TPM2_DURATION_MEDIUM);
> -		chip->vendor.duration[TPM_LONG] =
> +		chip->duration[TPM_LONG] =
>  		    msecs_to_jiffies(TPM2_DURATION_LONG);
>  		return 0;
>  	}
> @@ -561,10 +561,10 @@ int tpm_get_timeouts(struct tpm_chip *chip)
>  	 * of misreporting.
>  	 */
>  	if (chip->ops->update_timeouts != NULL)
> -		chip->vendor.timeout_adjusted =
> +		chip->timeout_adjusted =
>  			chip->ops->update_timeouts(chip, new_timeout);
>  
> -	if (!chip->vendor.timeout_adjusted) {
> +	if (!chip->timeout_adjusted) {
>  		/* Don't overwrite default if value is 0 */
>  		if (new_timeout[0] != 0 && new_timeout[0] < 1000) {
>  			int i;
> @@ -572,12 +572,12 @@ int tpm_get_timeouts(struct tpm_chip *chip)
>  			/* timeouts in msec rather usec */
>  			for (i = 0; i != ARRAY_SIZE(new_timeout); i++)
>  				new_timeout[i] *= 1000;
> -			chip->vendor.timeout_adjusted = true;
> +			chip->timeout_adjusted = true;
>  		}
>  	}
>  
>  	/* Report adjusted timeouts */
> -	if (chip->vendor.timeout_adjusted) {
> +	if (chip->timeout_adjusted) {
>  		dev_info(&chip->dev,
>  			 HW_ERR "Adjusting reported timeouts: A %lu->%luus B %lu->%luus C %lu->%luus D %lu->%luus\n",
>  			 old_timeout[0], new_timeout[0],
> @@ -586,10 +586,10 @@ int tpm_get_timeouts(struct tpm_chip *chip)
>  			 old_timeout[3], new_timeout[3]);
>  	}
>  
> -	chip->vendor.timeout_a = usecs_to_jiffies(new_timeout[0]);
> -	chip->vendor.timeout_b = usecs_to_jiffies(new_timeout[1]);
> -	chip->vendor.timeout_c = usecs_to_jiffies(new_timeout[2]);
> -	chip->vendor.timeout_d = usecs_to_jiffies(new_timeout[3]);
> +	chip->timeout_a = usecs_to_jiffies(new_timeout[0]);
> +	chip->timeout_b = usecs_to_jiffies(new_timeout[1]);
> +	chip->timeout_c = usecs_to_jiffies(new_timeout[2]);
> +	chip->timeout_d = usecs_to_jiffies(new_timeout[3]);
>  
>  duration:
>  	tpm_cmd.header.in = tpm_getcap_header;
> @@ -608,11 +608,11 @@ duration:
>  		return -EINVAL;
>  
>  	duration_cap = &tpm_cmd.params.getcap_out.cap.duration;
> -	chip->vendor.duration[TPM_SHORT] =
> +	chip->duration[TPM_SHORT] =
>  	    usecs_to_jiffies(be32_to_cpu(duration_cap->tpm_short));
> -	chip->vendor.duration[TPM_MEDIUM] =
> +	chip->duration[TPM_MEDIUM] =
>  	    usecs_to_jiffies(be32_to_cpu(duration_cap->tpm_medium));
> -	chip->vendor.duration[TPM_LONG] =
> +	chip->duration[TPM_LONG] =
>  	    usecs_to_jiffies(be32_to_cpu(duration_cap->tpm_long));
>  
>  	/* The Broadcom BCM0102 chipset in a Dell Latitude D820 gets the above
> @@ -620,11 +620,11 @@ duration:
>  	 * fix up the resulting too-small TPM_SHORT value to make things work.
>  	 * We also scale the TPM_MEDIUM and -_LONG values by 1000.
>  	 */
> -	if (chip->vendor.duration[TPM_SHORT] < (HZ / 100)) {
> -		chip->vendor.duration[TPM_SHORT] = HZ;
> -		chip->vendor.duration[TPM_MEDIUM] *= 1000;
> -		chip->vendor.duration[TPM_LONG] *= 1000;
> -		chip->vendor.duration_adjusted = true;
> +	if (chip->duration[TPM_SHORT] < (HZ / 100)) {
> +		chip->duration[TPM_SHORT] = HZ;
> +		chip->duration[TPM_MEDIUM] *= 1000;
> +		chip->duration[TPM_LONG] *= 1000;
> +		chip->duration_adjusted = true;
>  		dev_info(&chip->dev, "Adjusting TPM timeout parameters.");
>  	}
>  	return 0;
> diff --git a/drivers/char/tpm/tpm-sysfs.c b/drivers/char/tpm/tpm-sysfs.c
> index 34e7fc7..a7c3473 100644
> --- a/drivers/char/tpm/tpm-sysfs.c
> +++ b/drivers/char/tpm/tpm-sysfs.c
> @@ -236,14 +236,14 @@ static ssize_t durations_show(struct device *dev, struct device_attribute *attr,
>  {
>  	struct tpm_chip *chip = dev_get_drvdata(dev);
>  
> -	if (chip->vendor.duration[TPM_LONG] == 0)
> +	if (chip->duration[TPM_LONG] == 0)
>  		return 0;
>  
>  	return sprintf(buf, "%d %d %d [%s]\n",
> -		       jiffies_to_usecs(chip->vendor.duration[TPM_SHORT]),
> -		       jiffies_to_usecs(chip->vendor.duration[TPM_MEDIUM]),
> -		       jiffies_to_usecs(chip->vendor.duration[TPM_LONG]),
> -		       chip->vendor.duration_adjusted
> +		       jiffies_to_usecs(chip->duration[TPM_SHORT]),
> +		       jiffies_to_usecs(chip->duration[TPM_MEDIUM]),
> +		       jiffies_to_usecs(chip->duration[TPM_LONG]),
> +		       chip->duration_adjusted
>  		       ? "adjusted" : "original");
>  }
>  static DEVICE_ATTR_RO(durations);
> @@ -254,11 +254,11 @@ static ssize_t timeouts_show(struct device *dev, struct device_attribute *attr,
>  	struct tpm_chip *chip = dev_get_drvdata(dev);
>  
>  	return sprintf(buf, "%d %d %d %d [%s]\n",
> -		       jiffies_to_usecs(chip->vendor.timeout_a),
> -		       jiffies_to_usecs(chip->vendor.timeout_b),
> -		       jiffies_to_usecs(chip->vendor.timeout_c),
> -		       jiffies_to_usecs(chip->vendor.timeout_d),
> -		       chip->vendor.timeout_adjusted
> +		       jiffies_to_usecs(chip->timeout_a),
> +		       jiffies_to_usecs(chip->timeout_b),
> +		       jiffies_to_usecs(chip->timeout_c),
> +		       jiffies_to_usecs(chip->timeout_d),
> +		       chip->timeout_adjusted
>  		       ? "adjusted" : "original");
>  }
>  static DEVICE_ATTR_RO(timeouts);
> diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
> index 26c8d62..cfd5420 100644
> --- a/drivers/char/tpm/tpm.h
> +++ b/drivers/char/tpm/tpm.h
> @@ -131,12 +131,6 @@ enum tpm2_startup_types {
>  struct tpm_chip;
>  
>  struct tpm_vendor_specific {
> -	int locality;
> -	unsigned long timeout_a, timeout_b, timeout_c, timeout_d; /* jiffies */
> -	bool timeout_adjusted;
> -	unsigned long duration[3]; /* jiffies */
> -	bool duration_adjusted;
> -
>  	wait_queue_head_t read_queue;
>  };
>  
> @@ -170,7 +164,11 @@ struct tpm_chip {
>  
>  	struct mutex tpm_mutex;	/* tpm is processing */
>  
> -	struct tpm_vendor_specific vendor;
> +	int locality;
> +	unsigned long timeout_a, timeout_b, timeout_c, timeout_d; /* jiffies */

One line per field.

> +	bool timeout_adjusted;
> +	unsigned long duration[3]; /* jiffies */
> +	bool duration_adjusted;
>  
>  	struct dentry **bios_dir;
>  
> diff --git a/drivers/char/tpm/tpm2-cmd.c b/drivers/char/tpm/tpm2-cmd.c
> index 5fc0e7c..9ce8031 100644
> --- a/drivers/char/tpm/tpm2-cmd.c
> +++ b/drivers/char/tpm/tpm2-cmd.c
> @@ -793,7 +793,7 @@ unsigned long tpm2_calc_ordinal_duration(struct tpm_chip *chip, u32 ordinal)
>  		index = tpm2_ordinal_duration[ordinal - TPM2_CC_FIRST];
>  
>  	if (index != TPM_UNDEFINED)
> -		duration = chip->vendor.duration[index];
> +		duration = chip->duration[index];
>  
>  	if (duration <= 0)
>  		duration = 2 * 60 * HZ;
> diff --git a/drivers/char/tpm/tpm_i2c_atmel.c b/drivers/char/tpm/tpm_i2c_atmel.c
> index fe06885..648c0b1 100644
> --- a/drivers/char/tpm/tpm_i2c_atmel.c
> +++ b/drivers/char/tpm/tpm_i2c_atmel.c
> @@ -168,10 +168,10 @@ static int i2c_atmel_probe(struct i2c_client *client,
>  		return -ENOMEM;
>  
>  	/* Default timeouts */
> -	chip->vendor.timeout_a = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
> -	chip->vendor.timeout_b = msecs_to_jiffies(TPM_I2C_LONG_TIMEOUT);
> -	chip->vendor.timeout_c = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
> -	chip->vendor.timeout_d = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
> +	chip->timeout_a = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
> +	chip->timeout_b = msecs_to_jiffies(TPM_I2C_LONG_TIMEOUT);
> +	chip->timeout_c = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
> +	chip->timeout_d = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
>  
>  	dev_set_drvdata(&chip->dev, priv);
>  
> diff --git a/drivers/char/tpm/tpm_i2c_infineon.c b/drivers/char/tpm/tpm_i2c_infineon.c
> index 093daf9..163d823 100644
> --- a/drivers/char/tpm/tpm_i2c_infineon.c
> +++ b/drivers/char/tpm/tpm_i2c_infineon.c
> @@ -288,7 +288,7 @@ static int check_locality(struct tpm_chip *chip, int loc)
>  
>  	if ((buf & (TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID)) ==
>  	    (TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID)) {
> -		chip->vendor.locality = loc;
> +		chip->locality = loc;
>  		return loc;
>  	}
>  
> @@ -320,7 +320,7 @@ static int request_locality(struct tpm_chip *chip, int loc)
>  	iic_tpm_write(TPM_ACCESS(loc), &buf, 1);
>  
>  	/* wait for burstcount */
> -	stop = jiffies + chip->vendor.timeout_a;
> +	stop = jiffies + chip->timeout_a;
>  	do {
>  		if (check_locality(chip, loc) >= 0)
>  			return loc;
> @@ -337,7 +337,7 @@ static u8 tpm_tis_i2c_status(struct tpm_chip *chip)
>  	u8 i = 0;
>  
>  	do {
> -		if (iic_tpm_read(TPM_STS(chip->vendor.locality), &buf, 1) < 0)
> +		if (iic_tpm_read(TPM_STS(chip->locality), &buf, 1) < 0)
>  			return 0;
>  
>  		i++;
> @@ -351,7 +351,7 @@ static void tpm_tis_i2c_ready(struct tpm_chip *chip)
>  {
>  	/* this causes the current command to be aborted */
>  	u8 buf = TPM_STS_COMMAND_READY;
> -	iic_tpm_write_long(TPM_STS(chip->vendor.locality), &buf, 1);
> +	iic_tpm_write_long(TPM_STS(chip->locality), &buf, 1);
>  }
>  
>  static ssize_t get_burstcount(struct tpm_chip *chip)
> @@ -362,10 +362,10 @@ static ssize_t get_burstcount(struct tpm_chip *chip)
>  
>  	/* wait for burstcount */
>  	/* which timeout value, spec has 2 answers (c & d) */
> -	stop = jiffies + chip->vendor.timeout_d;
> +	stop = jiffies + chip->timeout_d;
>  	do {
>  		/* Note: STS is little endian */
> -		if (iic_tpm_read(TPM_STS(chip->vendor.locality)+1, buf, 3) < 0)
> +		if (iic_tpm_read(TPM_STS(chip->locality)+1, buf, 3) < 0)
>  			burstcnt = 0;
>  		else
>  			burstcnt = (buf[2] << 16) + (buf[1] << 8) + buf[0];
> @@ -419,7 +419,7 @@ static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
>  		if (burstcnt > (count - size))
>  			burstcnt = count - size;
>  
> -		rc = iic_tpm_read(TPM_DATA_FIFO(chip->vendor.locality),
> +		rc = iic_tpm_read(TPM_DATA_FIFO(chip->locality),
>  				  &(buf[size]), burstcnt);
>  		if (rc == 0)
>  			size += burstcnt;
> @@ -464,7 +464,7 @@ static int tpm_tis_i2c_recv(struct tpm_chip *chip, u8 *buf, size_t count)
>  		goto out;
>  	}
>  
> -	wait_for_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c, &status);
> +	wait_for_stat(chip, TPM_STS_VALID, chip->timeout_c, &status);
>  	if (status & TPM_STS_DATA_AVAIL) {	/* retry? */
>  		dev_err(&chip->dev, "Error left over data\n");
>  		size = -EIO;
> @@ -477,7 +477,7 @@ out:
>  	 * so we sleep rather than keeping the bus busy
>  	 */
>  	usleep_range(SLEEP_DURATION_RESET_LOW, SLEEP_DURATION_RESET_HI);
> -	release_locality(chip, chip->vendor.locality, 0);
> +	release_locality(chip, chip->locality, 0);
>  	return size;
>  }
>  
> @@ -500,7 +500,7 @@ static int tpm_tis_i2c_send(struct tpm_chip *chip, u8 *buf, size_t len)
>  		tpm_tis_i2c_ready(chip);
>  		if (wait_for_stat
>  		    (chip, TPM_STS_COMMAND_READY,
> -		     chip->vendor.timeout_b, &status) < 0) {
> +		     chip->timeout_b, &status) < 0) {
>  			rc = -ETIME;
>  			goto out_err;
>  		}
> @@ -516,7 +516,7 @@ static int tpm_tis_i2c_send(struct tpm_chip *chip, u8 *buf, size_t len)
>  		if (burstcnt > (len - 1 - count))
>  			burstcnt = len - 1 - count;
>  
> -		rc = iic_tpm_write(TPM_DATA_FIFO(chip->vendor.locality),
> +		rc = iic_tpm_write(TPM_DATA_FIFO(chip->locality),
>  				   &(buf[count]), burstcnt);
>  		if (rc == 0)
>  			count += burstcnt;
> @@ -530,7 +530,7 @@ static int tpm_tis_i2c_send(struct tpm_chip *chip, u8 *buf, size_t len)
>  		}
>  
>  		wait_for_stat(chip, TPM_STS_VALID,
> -			      chip->vendor.timeout_c, &status);
> +			      chip->timeout_c, &status);
>  
>  		if ((status & TPM_STS_DATA_EXPECT) == 0) {
>  			rc = -EIO;
> @@ -539,15 +539,15 @@ static int tpm_tis_i2c_send(struct tpm_chip *chip, u8 *buf, size_t len)
>  	}
>  
>  	/* write last byte */
> -	iic_tpm_write(TPM_DATA_FIFO(chip->vendor.locality), &(buf[count]), 1);
> -	wait_for_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c, &status);
> +	iic_tpm_write(TPM_DATA_FIFO(chip->locality), &(buf[count]), 1);
> +	wait_for_stat(chip, TPM_STS_VALID, chip->timeout_c, &status);
>  	if ((status & TPM_STS_DATA_EXPECT) != 0) {
>  		rc = -EIO;
>  		goto out_err;
>  	}
>  
>  	/* go and do it */
> -	iic_tpm_write(TPM_STS(chip->vendor.locality), &sts, 1);
> +	iic_tpm_write(TPM_STS(chip->locality), &sts, 1);
>  
>  	return len;
>  out_err:
> @@ -556,7 +556,7 @@ out_err:
>  	 * so we sleep rather than keeping the bus busy
>  	 */
>  	usleep_range(SLEEP_DURATION_RESET_LOW, SLEEP_DURATION_RESET_HI);
> -	release_locality(chip, chip->vendor.locality, 0);
> +	release_locality(chip, chip->locality, 0);
>  	return rc;
>  }
>  
> @@ -586,10 +586,10 @@ static int tpm_tis_i2c_init(struct device *dev)
>  		return PTR_ERR(chip);
>  
>  	/* Default timeouts */
> -	chip->vendor.timeout_a = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
> -	chip->vendor.timeout_b = msecs_to_jiffies(TIS_LONG_TIMEOUT);
> -	chip->vendor.timeout_c = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
> -	chip->vendor.timeout_d = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
> +	chip->timeout_a = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
> +	chip->timeout_b = msecs_to_jiffies(TIS_LONG_TIMEOUT);
> +	chip->timeout_c = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
> +	chip->timeout_d = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
>  
>  	if (request_locality(chip, 0) != 0) {
>  		dev_err(dev, "could not request locality\n");
> @@ -623,7 +623,7 @@ static int tpm_tis_i2c_init(struct device *dev)
>  
>  	return tpm_chip_register(chip);
>  out_release:
> -	release_locality(chip, chip->vendor.locality, 1);
> +	release_locality(chip, chip->locality, 1);
>  	tpm_dev.client = NULL;
>  out_err:
>  	return rc;
> @@ -695,7 +695,7 @@ static int tpm_tis_i2c_remove(struct i2c_client *client)
>  	struct tpm_chip *chip = tpm_dev.chip;
>  
>  	tpm_chip_unregister(chip);
> -	release_locality(chip, chip->vendor.locality, 1);
> +	release_locality(chip, chip->locality, 1);
>  	tpm_dev.client = NULL;
>  
>  	return 0;
> diff --git a/drivers/char/tpm/tpm_i2c_nuvoton.c b/drivers/char/tpm/tpm_i2c_nuvoton.c
> index bf3ba18..97f0e1a 100644
> --- a/drivers/char/tpm/tpm_i2c_nuvoton.c
> +++ b/drivers/char/tpm/tpm_i2c_nuvoton.c
> @@ -143,7 +143,7 @@ static void i2c_nuvoton_ready(struct tpm_chip *chip)
>  static int i2c_nuvoton_get_burstcount(struct i2c_client *client,
>  				      struct tpm_chip *chip)
>  {
> -	unsigned long stop = jiffies + chip->vendor.timeout_d;
> +	unsigned long stop = jiffies + chip->timeout_d;
>  	s32 status;
>  	int burst_count = -1;
>  	u8 data;
> @@ -237,7 +237,7 @@ static int i2c_nuvoton_recv_data(struct i2c_client *client,
>  
>  	while (size < count &&
>  	       i2c_nuvoton_wait_for_data_avail(chip,
> -					       chip->vendor.timeout_c,
> +					       chip->timeout_c,
>  					       &chip->vendor.read_queue) == 0) {
>  		burst_count = i2c_nuvoton_get_burstcount(client, chip);
>  		if (burst_count < 0) {
> @@ -286,7 +286,7 @@ static int i2c_nuvoton_recv(struct tpm_chip *chip, u8 *buf, size_t count)
>  		 * tag, paramsize, and result
>  		 */
>  		status = i2c_nuvoton_wait_for_data_avail(
> -			chip, chip->vendor.timeout_c, &chip->vendor.read_queue);
> +			chip, chip->timeout_c, &chip->vendor.read_queue);
>  		if (status != 0) {
>  			dev_err(dev, "%s() timeout on dataAvail\n", __func__);
>  			size = -ETIMEDOUT;
> @@ -326,7 +326,7 @@ static int i2c_nuvoton_recv(struct tpm_chip *chip, u8 *buf, size_t count)
>  		}
>  		if (i2c_nuvoton_wait_for_stat(
>  			    chip, TPM_STS_VALID | TPM_STS_DATA_AVAIL,
> -			    TPM_STS_VALID, chip->vendor.timeout_c,
> +			    TPM_STS_VALID, chip->timeout_c,
>  			    NULL)) {
>  			dev_err(dev, "%s() error left over data\n", __func__);
>  			size = -ETIMEDOUT;
> @@ -358,7 +358,7 @@ static int i2c_nuvoton_send(struct tpm_chip *chip, u8 *buf, size_t len)
>  		i2c_nuvoton_ready(chip);
>  		if (i2c_nuvoton_wait_for_stat(chip, TPM_STS_COMMAND_READY,
>  					      TPM_STS_COMMAND_READY,
> -					      chip->vendor.timeout_b, NULL)) {
> +					      chip->timeout_b, NULL)) {
>  			dev_err(dev, "%s() timeout on commandReady\n",
>  				__func__);
>  			rc = -EIO;
> @@ -390,7 +390,7 @@ static int i2c_nuvoton_send(struct tpm_chip *chip, u8 *buf, size_t len)
>  						       TPM_STS_EXPECT,
>  						       TPM_STS_VALID |
>  						       TPM_STS_EXPECT,
> -						       chip->vendor.timeout_c,
> +						       chip->timeout_c,
>  						       NULL);
>  			if (rc < 0) {
>  				dev_err(dev, "%s() timeout on Expect\n",
> @@ -415,7 +415,7 @@ static int i2c_nuvoton_send(struct tpm_chip *chip, u8 *buf, size_t len)
>  		rc = i2c_nuvoton_wait_for_stat(chip,
>  					       TPM_STS_VALID | TPM_STS_EXPECT,
>  					       TPM_STS_VALID,
> -					       chip->vendor.timeout_c, NULL);
> +					       chip->timeout_c, NULL);
>  		if (rc) {
>  			dev_err(dev, "%s() timeout on Expect to clear\n",
>  				__func__);
> @@ -543,10 +543,10 @@ static int i2c_nuvoton_probe(struct i2c_client *client,
>  	init_waitqueue_head(&chip->vendor.read_queue);
>  
>  	/* Default timeouts */
> -	chip->vendor.timeout_a = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
> -	chip->vendor.timeout_b = msecs_to_jiffies(TPM_I2C_LONG_TIMEOUT);
> -	chip->vendor.timeout_c = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
> -	chip->vendor.timeout_d = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
> +	chip->timeout_a = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
> +	chip->timeout_b = msecs_to_jiffies(TPM_I2C_LONG_TIMEOUT);
> +	chip->timeout_c = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
> +	chip->timeout_d = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT);
>  
>  	dev_set_drvdata(&chip->dev, priv);
>  
> @@ -577,7 +577,7 @@ static int i2c_nuvoton_probe(struct i2c_client *client,
>  			rc = i2c_nuvoton_wait_for_stat(chip,
>  						       TPM_STS_COMMAND_READY,
>  						       TPM_STS_COMMAND_READY,
> -						       chip->vendor.timeout_b,
> +						       chip->timeout_b,
>  						       NULL);
>  			if (rc == 0) {
>  				/*
> diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
> index 79edfc3..1ec4992 100644
> --- a/drivers/char/tpm/tpm_tis.c
> +++ b/drivers/char/tpm/tpm_tis.c
> @@ -131,7 +131,7 @@ static inline int is_itpm(struct acpi_device *dev)
>  static int wait_startup(struct tpm_chip *chip, int l)
>  {
>  	struct priv_data *priv = dev_get_drvdata(&chip->dev);
> -	unsigned long stop = jiffies + chip->vendor.timeout_a;
> +	unsigned long stop = jiffies + chip->timeout_a;
>  
>  	do {
>  		if (ioread8(priv->iobase + TPM_ACCESS(l)) &
> @@ -149,7 +149,7 @@ static int check_locality(struct tpm_chip *chip, int l)
>  	if ((ioread8(priv->iobase + TPM_ACCESS(l)) &
>  	     (TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID)) ==
>  	    (TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID))
> -		return chip->vendor.locality = l;
> +		return chip->locality = l;
>  
>  	return -1;
>  }
> @@ -177,7 +177,7 @@ static int request_locality(struct tpm_chip *chip, int l)
>  	iowrite8(TPM_ACCESS_REQUEST_USE,
>  		 priv->iobase + TPM_ACCESS(l));
>  
> -	stop = jiffies + chip->vendor.timeout_a;
> +	stop = jiffies + chip->timeout_a;
>  
>  	if (chip->flags & TPM_CHIP_FLAG_USES_IRQ) {
>  again:
> @@ -211,7 +211,7 @@ static u8 tpm_tis_status(struct tpm_chip *chip)
>  	struct priv_data *priv = dev_get_drvdata(&chip->dev);
>  
>  	return ioread8(priv->iobase +
> -		       TPM_STS(chip->vendor.locality));
> +		       TPM_STS(chip->locality));
>  }
>  
>  static void tpm_tis_ready(struct tpm_chip *chip)
> @@ -220,7 +220,7 @@ static void tpm_tis_ready(struct tpm_chip *chip)
>  
>  	/* this causes the current command to be aborted */
>  	iowrite8(TPM_STS_COMMAND_READY,
> -		 priv->iobase + TPM_STS(chip->vendor.locality));
> +		 priv->iobase + TPM_STS(chip->locality));
>  }
>  
>  static int get_burstcount(struct tpm_chip *chip)
> @@ -231,12 +231,12 @@ static int get_burstcount(struct tpm_chip *chip)
>  
>  	/* wait for burstcount */
>  	/* which timeout value, spec has 2 answers (c & d) */
> -	stop = jiffies + chip->vendor.timeout_d;
> +	stop = jiffies + chip->timeout_d;
>  	do {
>  		burstcnt = ioread8(priv->iobase +
> -				   TPM_STS(chip->vendor.locality) + 1);
> +				   TPM_STS(chip->locality) + 1);
>  		burstcnt += ioread8(priv->iobase +
> -				    TPM_STS(chip->vendor.locality) +
> +				    TPM_STS(chip->locality) +
>  				    2) << 8;
>  		if (burstcnt)
>  			return burstcnt;
> @@ -252,14 +252,13 @@ static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
>  	while (size < count &&
>  	       wait_for_tpm_stat(chip,
>  				 TPM_STS_DATA_AVAIL | TPM_STS_VALID,
> -				 chip->vendor.timeout_c,
> +				 chip->timeout_c,
>  				 &chip->vendor.read_queue, true)
>  	       == 0) {
>  		burstcnt = get_burstcount(chip);
>  		for (; burstcnt > 0 && size < count; burstcnt--)
>  			buf[size++] = ioread8(priv->iobase +
> -					      TPM_DATA_FIFO(chip->vendor.
> -							    locality));
> +					      TPM_DATA_FIFO(chip->locality));
>  	}
>  	return size;
>  }
> @@ -296,7 +295,7 @@ static int tpm_tis_recv(struct tpm_chip *chip, u8 *buf, size_t count)
>  		goto out;
>  	}
>  
> -	wait_for_tpm_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c,
> +	wait_for_tpm_stat(chip, TPM_STS_VALID, chip->timeout_c,
>  			  &priv->int_queue, false);
>  	status = tpm_tis_status(chip);
>  	if (status & TPM_STS_DATA_AVAIL) {	/* retry? */
> @@ -307,7 +306,7 @@ static int tpm_tis_recv(struct tpm_chip *chip, u8 *buf, size_t count)
>  
>  out:
>  	tpm_tis_ready(chip);
> -	release_locality(chip, chip->vendor.locality, 0);
> +	release_locality(chip, chip->locality, 0);
>  	return size;
>  }
>  
> @@ -333,7 +332,7 @@ static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
>  	if ((status & TPM_STS_COMMAND_READY) == 0) {
>  		tpm_tis_ready(chip);
>  		if (wait_for_tpm_stat
> -		    (chip, TPM_STS_COMMAND_READY, chip->vendor.timeout_b,
> +		    (chip, TPM_STS_COMMAND_READY, chip->timeout_b,
>  		     &priv->int_queue, false) < 0) {
>  			rc = -ETIME;
>  			goto out_err;
> @@ -344,11 +343,11 @@ static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
>  		burstcnt = get_burstcount(chip);
>  		for (; burstcnt > 0 && count < len - 1; burstcnt--) {
>  			iowrite8(buf[count], priv->iobase +
> -				 TPM_DATA_FIFO(chip->vendor.locality));
> +				 TPM_DATA_FIFO(chip->locality));
>  			count++;
>  		}
>  
> -		wait_for_tpm_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c,
> +		wait_for_tpm_stat(chip, TPM_STS_VALID, chip->timeout_c,
>  				  &priv->int_queue, false);
>  		status = tpm_tis_status(chip);
>  		if (!itpm && (status & TPM_STS_DATA_EXPECT) == 0) {
> @@ -359,8 +358,8 @@ static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
>  
>  	/* write last byte */
>  	iowrite8(buf[count],
> -		 priv->iobase + TPM_DATA_FIFO(chip->vendor.locality));
> -	wait_for_tpm_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c,
> +		 priv->iobase + TPM_DATA_FIFO(chip->locality));
> +	wait_for_tpm_stat(chip, TPM_STS_VALID, chip->timeout_c,
>  			  &priv->int_queue, false);
>  	status = tpm_tis_status(chip);
>  	if ((status & TPM_STS_DATA_EXPECT) != 0) {
> @@ -372,7 +371,7 @@ static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
>  
>  out_err:
>  	tpm_tis_ready(chip);
> -	release_locality(chip, chip->vendor.locality, 0);
> +	release_locality(chip, chip->locality, 0);
>  	return rc;
>  }
>  
> @@ -383,10 +382,10 @@ static void disable_interrupts(struct tpm_chip *chip)
>  
>  	intmask =
>  	    ioread32(priv->iobase +
> -		     TPM_INT_ENABLE(chip->vendor.locality));
> +		     TPM_INT_ENABLE(chip->locality));
>  	intmask &= ~TPM_GLOBAL_INT_ENABLE;
>  	iowrite32(intmask,
> -		  priv->iobase + TPM_INT_ENABLE(chip->vendor.locality));
> +		  priv->iobase + TPM_INT_ENABLE(chip->locality));
>  	devm_free_irq(&chip->dev, priv->irq, chip);
>  	priv->irq = 0;
>  	chip->flags &= ~TPM_CHIP_FLAG_USES_IRQ;
> @@ -410,7 +409,7 @@ static int tpm_tis_send_main(struct tpm_chip *chip, u8 *buf, size_t len)
>  
>  	/* go and do it */
>  	iowrite8(TPM_STS_GO,
> -		 priv->iobase + TPM_STS(chip->vendor.locality));
> +		 priv->iobase + TPM_STS(chip->locality));
>  
>  	if (chip->flags & TPM_CHIP_FLAG_USES_IRQ) {
>  		ordinal = be32_to_cpu(*((__be32 *) (buf + 6)));
> @@ -430,7 +429,7 @@ static int tpm_tis_send_main(struct tpm_chip *chip, u8 *buf, size_t len)
>  	return len;
>  out_err:
>  	tpm_tis_ready(chip);
> -	release_locality(chip, chip->vendor.locality, 0);
> +	release_locality(chip, chip->locality, 0);
>  	return rc;
>  }
>  
> @@ -516,7 +515,7 @@ static int probe_itpm(struct tpm_chip *chip)
>  		goto out;
>  
>  	tpm_tis_ready(chip);
> -	release_locality(chip, chip->vendor.locality, 0);
> +	release_locality(chip, chip->locality, 0);
>  
>  	itpm = true;
>  
> @@ -530,7 +529,7 @@ static int probe_itpm(struct tpm_chip *chip)
>  out:
>  	itpm = rem_itpm;
>  	tpm_tis_ready(chip);
> -	release_locality(chip, chip->vendor.locality, 0);
> +	release_locality(chip, chip->locality, 0);
>  
>  	return rc;
>  }
> @@ -569,7 +568,7 @@ static irqreturn_t tis_int_handler(int dummy, void *dev_id)
>  	int i;
>  
>  	interrupt = ioread32(priv->iobase +
> -			     TPM_INT_STATUS(chip->vendor.locality));
> +			     TPM_INT_STATUS(chip->locality));
>  
>  	if (interrupt == 0)
>  		return IRQ_NONE;
> @@ -589,8 +588,8 @@ static irqreturn_t tis_int_handler(int dummy, void *dev_id)
>  	/* Clear interrupts handled with TPM_EOI */
>  	iowrite32(interrupt,
>  		  priv->iobase +
> -		  TPM_INT_STATUS(chip->vendor.locality));
> -	ioread32(priv->iobase + TPM_INT_STATUS(chip->vendor.locality));
> +		  TPM_INT_STATUS(chip->locality));
> +	ioread32(priv->iobase + TPM_INT_STATUS(chip->locality));
>  	return IRQ_HANDLED;
>  }
>  
> @@ -613,18 +612,18 @@ static int tpm_tis_probe_irq_single(struct tpm_chip *chip, u32 intmask,
>  	priv->irq = irq;
>  
>  	original_int_vec = ioread8(priv->iobase +
> -				   TPM_INT_VECTOR(chip->vendor.locality));
> +				   TPM_INT_VECTOR(chip->locality));
>  	iowrite8(irq,
> -		 priv->iobase + TPM_INT_VECTOR(chip->vendor.locality));
> +		 priv->iobase + TPM_INT_VECTOR(chip->locality));
>  
>  	/* Clear all existing */
>  	iowrite32(ioread32(priv->iobase +
> -			   TPM_INT_STATUS(chip->vendor.locality)),
> -		  priv->iobase + TPM_INT_STATUS(chip->vendor.locality));
> +			   TPM_INT_STATUS(chip->locality)),
> +		  priv->iobase + TPM_INT_STATUS(chip->locality));
>  
>  	/* Turn on */
>  	iowrite32(intmask | TPM_GLOBAL_INT_ENABLE,
> -		  priv->iobase + TPM_INT_ENABLE(chip->vendor.locality));
> +		  priv->iobase + TPM_INT_ENABLE(chip->locality));
>  
>  	priv->irq_tested = false;
>  
> @@ -641,7 +640,7 @@ static int tpm_tis_probe_irq_single(struct tpm_chip *chip, u32 intmask,
>  	 */
>  	if (!(chip->flags & TPM_CHIP_FLAG_USES_IRQ)) {
>  		iowrite8(original_int_vec,
> -			 priv->iobase + TPM_INT_VECTOR(chip->vendor.locality));
> +			 priv->iobase + TPM_INT_VECTOR(chip->locality));
>  		return 1;
>  	}
>  
> @@ -659,7 +658,7 @@ static void tpm_tis_probe_irq(struct tpm_chip *chip, u32 intmask)
>  	int i;
>  
>  	original_int_vec = ioread8(priv->iobase +
> -				   TPM_INT_VECTOR(chip->vendor.locality));
> +				   TPM_INT_VECTOR(chip->locality));
>  
>  	if (!original_int_vec) {
>  		if (IS_ENABLED(CONFIG_X86))
> @@ -685,10 +684,10 @@ static void tpm_tis_remove(struct tpm_chip *chip)
>  
>  	iowrite32(~TPM_GLOBAL_INT_ENABLE &
>  		  ioread32(priv->iobase +
> -			   TPM_INT_ENABLE(chip->vendor.
> +			   TPM_INT_ENABLE(chip->
>  					  locality)),
> -			   priv->iobase + TPM_INT_ENABLE(chip->vendor.locality));
> -	release_locality(chip, chip->vendor.locality, 1);
> +			   priv->iobase + TPM_INT_ENABLE(chip->locality));
> +	release_locality(chip, chip->locality, 1);
>  }
>  
>  static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info,
> @@ -716,10 +715,10 @@ static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info,
>  		return PTR_ERR(priv->iobase);
>  
>  	/* Maximum timeouts */
> -	chip->vendor.timeout_a = TIS_TIMEOUT_A_MAX;
> -	chip->vendor.timeout_b = TIS_TIMEOUT_B_MAX;
> -	chip->vendor.timeout_c = TIS_TIMEOUT_C_MAX;
> -	chip->vendor.timeout_d = TIS_TIMEOUT_D_MAX;
> +	chip->timeout_a = TIS_TIMEOUT_A_MAX;
> +	chip->timeout_b = TIS_TIMEOUT_B_MAX;
> +	chip->timeout_c = TIS_TIMEOUT_C_MAX;
> +	chip->timeout_d = TIS_TIMEOUT_D_MAX;
>  
>  	dev_set_drvdata(&chip->dev, priv);
>  
> @@ -730,12 +729,12 @@ static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info,
>  
>  	/* Take control of the TPM's interrupt hardware and shut it off */
>  	intmask = ioread32(priv->iobase +
> -			   TPM_INT_ENABLE(chip->vendor.locality));
> +			   TPM_INT_ENABLE(chip->locality));
>  	intmask |= TPM_INTF_CMD_READY_INT | TPM_INTF_LOCALITY_CHANGE_INT |
>  		   TPM_INTF_DATA_AVAIL_INT | TPM_INTF_STS_VALID_INT;
>  	intmask &= ~TPM_GLOBAL_INT_ENABLE;
>  	iowrite32(intmask,
> -		  priv->iobase + TPM_INT_ENABLE(chip->vendor.locality));
> +		  priv->iobase + TPM_INT_ENABLE(chip->locality));
>  
>  	if (request_locality(chip, 0) != 0) {
>  		rc = -ENODEV;
> @@ -769,7 +768,7 @@ static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info,
>  	/* Figure out the capabilities */
>  	intfcaps =
>  	    ioread32(priv->iobase +
> -		     TPM_INTF_CAPS(chip->vendor.locality));
> +		     TPM_INTF_CAPS(chip->locality));
>  	dev_dbg(dev, "TPM interface capabilities (0x%x):\n",
>  		intfcaps);
>  	if (intfcaps & TPM_INTF_BURST_COUNT_STATIC)
> @@ -853,17 +852,17 @@ static void tpm_tis_reenable_interrupts(struct tpm_chip *chip)
>  	/* reenable interrupts that device may have lost or
>  	   BIOS/firmware may have disabled */
>  	iowrite8(priv->irq, priv->iobase +
> -		 TPM_INT_VECTOR(chip->vendor.locality));
> +		 TPM_INT_VECTOR(chip->locality));
>  
>  	intmask =
> -	    ioread32(priv->iobase + TPM_INT_ENABLE(chip->vendor.locality));
> +	    ioread32(priv->iobase + TPM_INT_ENABLE(chip->locality));
>  
>  	intmask |= TPM_INTF_CMD_READY_INT
>  	    | TPM_INTF_LOCALITY_CHANGE_INT | TPM_INTF_DATA_AVAIL_INT
>  	    | TPM_INTF_STS_VALID_INT | TPM_GLOBAL_INT_ENABLE;
>  
>  	iowrite32(intmask,
> -		  priv->iobase + TPM_INT_ENABLE(chip->vendor.locality));
> +		  priv->iobase + TPM_INT_ENABLE(chip->locality));
>  }
>  
>  static int tpm_tis_resume(struct device *dev)
> diff --git a/drivers/char/tpm/xen-tpmfront.c b/drivers/char/tpm/xen-tpmfront.c
> index a903f86..0bdebe9 100644
> --- a/drivers/char/tpm/xen-tpmfront.c
> +++ b/drivers/char/tpm/xen-tpmfront.c
> @@ -88,7 +88,7 @@ static int vtpm_send(struct tpm_chip *chip, u8 *buf, size_t count)
>  		return -EINVAL;
>  
>  	/* Wait for completion of any existing command or cancellation */
> -	if (wait_for_tpm_stat(chip, VTPM_STATUS_IDLE, chip->vendor.timeout_c,
> +	if (wait_for_tpm_stat(chip, VTPM_STATUS_IDLE, chip->timeout_c,
>  			&chip->vendor.read_queue, true) < 0) {
>  		vtpm_cancel(chip);
>  		return -ETIME;
> @@ -125,7 +125,7 @@ static int vtpm_recv(struct tpm_chip *chip, u8 *buf, size_t count)
>  		return -ECANCELED;
>  
>  	/* In theory the wait at the end of _send makes this one unnecessary */
> -	if (wait_for_tpm_stat(chip, VTPM_STATUS_RESULT, chip->vendor.timeout_c,
> +	if (wait_for_tpm_stat(chip, VTPM_STATUS_RESULT, chip->timeout_c,
>  			&chip->vendor.read_queue, true) < 0) {
>  		vtpm_cancel(chip);
>  		return -ETIME;
> -- 
> 2.5.0
> 

/Jarkko

------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785471&iu=/4140

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 1/7] tpm/tpm_atmel: drop remaining 'iobase' usage
       [not found]         ` <20160329140814.GA12764-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
@ 2016-03-29 14:45           ` Christophe Ricard
       [not found]             ` <56FA9514.9070507-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
  0 siblings, 1 reply; 17+ messages in thread
From: Christophe Ricard @ 2016-03-29 14:45 UTC (permalink / raw)
  To: Jarkko Sakkinen
  Cc: jean-luc.blanc-qxv4g6HH51o, ashley-fm2HMyfA2y6tG0bUXCXiUA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
	christophe-h.ricard-qxv4g6HH51o, benoit.houyere-qxv4g6HH51o

Hi Jarkko,

I just saw you have updated the master branch removing patch:
tpm: drop 'iobase' from struct tpm_vendor_specific.

I will merge both in a new v3 serie and will make sure it will build for 
PPC64
as well.

Does that sound acceptable for you ?

Best Regards
Christophe

On 29/03/2016 16:08, Jarkko Sakkinen wrote:
> On Sat, Mar 26, 2016 at 08:00:09AM +0100, Christophe Ricard wrote:
>> Remove some sporadic iobase
> This description of this commit is total crap to be honest (saying
> this with a polite tone but that's how it is). For me the commit meessage
> is the most important part of the commit and the sentence above contains
> exactly zero amount of information.
>
> A proper commit message would have stated that this fixes the PPC64
> builds that your earlier patch breaks. Have you tested that PPC64 builds
> work now?
>
> Actually what you should have *really* done would have updated your
> older patch and put a remark into change log in the cover letter.
>
> /Jarkko
>
>> Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
>> ---
>>   drivers/char/tpm/tpm_atmel.h | 4 ++--
>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/char/tpm/tpm_atmel.h b/drivers/char/tpm/tpm_atmel.h
>> index c5618ea..7e37c16 100644
>> --- a/drivers/char/tpm/tpm_atmel.h
>> +++ b/drivers/char/tpm/tpm_atmel.h
>> @@ -38,8 +38,8 @@ static inline struct tpm_atmel_priv *atmel_get_priv(struct tpm_chip *chip)
>>   
>>   #include <asm/prom.h>
>>   
>> -#define atmel_getb(chip, offset) readb(chip->vendor->iobase + offset);
>> -#define atmel_putb(val, chip, offset) writeb(val, chip->vendor->iobase + offset)
>> +#define atmel_getb(priv, offset) readb(priv->iobase + offset);
>> +#define atmel_putb(val, priv, offset) writeb(val, priv->iobase + offset)
>>   #define atmel_request_region request_mem_region
>>   #define atmel_release_region release_mem_region
>>   
>> -- 
>> 2.5.0
>>


------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785471&iu=/4140

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 0/7] Remove the tpm_vendor_specific structure
       [not found]     ` <20160329141029.GB12764-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
@ 2016-03-29 15:09       ` Christophe Ricard
  0 siblings, 0 replies; 17+ messages in thread
From: Christophe Ricard @ 2016-03-29 15:09 UTC (permalink / raw)
  To: Jarkko Sakkinen
  Cc: jean-luc.blanc-qxv4g6HH51o, ashley-fm2HMyfA2y6tG0bUXCXiUA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
	christophe-h.ricard-qxv4g6HH51o, benoit.houyere-qxv4g6HH51o

ok clear.

Thanks
Christophe

On 29/03/2016 16:10, Jarkko Sakkinen wrote:
> On Sat, Mar 26, 2016 at 08:00:08AM +0100, Christophe Ricard wrote:
>> Hi Jarkko,
>>
>> This is the latest steps to cleanup tpm_vendor_specific structure.
>>
>> I have also included some few obvious cleanup inside the drivers.
>> I have been able to test tpm_tis on a HP Desktop machine.
>>
>> In v2 i have added a patch fixing:
>> 'tpm: drop 'iobase' from struct tpm_vendor_specific' 691f211398bb93878b727be0c5c523e2371074f5
> You give zero information here what you are fixing and why. For the next
> version of the patch set just put a remark about fixing PPC64 builds and
> include the full patch. I'll drop the current iobase patch from my
> master branch.
>
> /Jarkko
>
>> It may be merged with the mention commit.
>>
>> Best Regards
>> Christophe
>>
>>
>> Christophe Ricard (7):
>>    tpm/tpm_atmel: drop remaining 'iobase' usage
>>    tpm: Remove useless priv field in struct tpm_vendor_specific
>>    tpm/tpm_i2c_atmel: simplify patch to get tpm_chip from an i2c_client
>>    tpm/tpm_i2c_atmel: Few code style fixes
>>    tpm: drop 'irq' from struct tpm_vendor_specific
>>    tpm: Move remaining tpm_vendor_specific structure data to tpm_chip
>>    tpm: drop 'read_queue' from struct tpm_vendor_specific
>>
>>   drivers/char/tpm/st33zp24/i2c.c      |  15 ++-
>>   drivers/char/tpm/st33zp24/spi.c      |  15 ++-
>>   drivers/char/tpm/st33zp24/st33zp24.c | 113 ++++++++--------------
>>   drivers/char/tpm/st33zp24/st33zp24.h |   9 ++
>>   drivers/char/tpm/tpm-interface.c     |  52 +++++-----
>>   drivers/char/tpm/tpm-sysfs.c         |  20 ++--
>>   drivers/char/tpm/tpm.h               |  24 ++---
>>   drivers/char/tpm/tpm2-cmd.c          |   2 +-
>>   drivers/char/tpm/tpm_atmel.c         |  12 +--
>>   drivers/char/tpm/tpm_atmel.h         |   9 +-
>>   drivers/char/tpm/tpm_crb.c           |  12 +--
>>   drivers/char/tpm/tpm_i2c_atmel.c     |  30 +++---
>>   drivers/char/tpm/tpm_i2c_infineon.c  |  47 +++++----
>>   drivers/char/tpm/tpm_i2c_nuvoton.c   |  73 ++++++++------
>>   drivers/char/tpm/tpm_ibmvtpm.c       |  38 +++-----
>>   drivers/char/tpm/tpm_nsc.c           |  48 ++++-----
>>   drivers/char/tpm/tpm_tis.c           | 182 ++++++++++++++++++-----------------
>>   drivers/char/tpm/xen-tpmfront.c      |  36 +++----
>>   18 files changed, 356 insertions(+), 381 deletions(-)
>>
>> -- 
>> 2.5.0
>>


------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785471&iu=/4140

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 1/7] tpm/tpm_atmel: drop remaining 'iobase' usage
       [not found]             ` <56FA9514.9070507-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2016-03-30 10:22               ` Jarkko Sakkinen
  0 siblings, 0 replies; 17+ messages in thread
From: Jarkko Sakkinen @ 2016-03-30 10:22 UTC (permalink / raw)
  To: Christophe Ricard
  Cc: jean-luc.blanc-qxv4g6HH51o, ashley-fm2HMyfA2y6tG0bUXCXiUA,
	tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f,
	christophe-h.ricard-qxv4g6HH51o, benoit.houyere-qxv4g6HH51o

On Tue, Mar 29, 2016 at 04:45:40PM +0200, Christophe Ricard wrote:
> Hi Jarkko,
> 
> I just saw you have updated the master branch removing patch:
> tpm: drop 'iobase' from struct tpm_vendor_specific.
> 
> I will merge both in a new v3 serie and will make sure it will build for
> PPC64
> as well.
> 
> Does that sound acceptable for you ?

It does. No worries.

> Best Regards
> Christophe

/Jarkko

> 
> On 29/03/2016 16:08, Jarkko Sakkinen wrote:
> >On Sat, Mar 26, 2016 at 08:00:09AM +0100, Christophe Ricard wrote:
> >>Remove some sporadic iobase
> >This description of this commit is total crap to be honest (saying
> >this with a polite tone but that's how it is). For me the commit meessage
> >is the most important part of the commit and the sentence above contains
> >exactly zero amount of information.
> >
> >A proper commit message would have stated that this fixes the PPC64
> >builds that your earlier patch breaks. Have you tested that PPC64 builds
> >work now?
> >
> >Actually what you should have *really* done would have updated your
> >older patch and put a remark into change log in the cover letter.
> >
> >/Jarkko
> >
> >>Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
> >>---
> >>  drivers/char/tpm/tpm_atmel.h | 4 ++--
> >>  1 file changed, 2 insertions(+), 2 deletions(-)
> >>
> >>diff --git a/drivers/char/tpm/tpm_atmel.h b/drivers/char/tpm/tpm_atmel.h
> >>index c5618ea..7e37c16 100644
> >>--- a/drivers/char/tpm/tpm_atmel.h
> >>+++ b/drivers/char/tpm/tpm_atmel.h
> >>@@ -38,8 +38,8 @@ static inline struct tpm_atmel_priv *atmel_get_priv(struct tpm_chip *chip)
> >>  #include <asm/prom.h>
> >>-#define atmel_getb(chip, offset) readb(chip->vendor->iobase + offset);
> >>-#define atmel_putb(val, chip, offset) writeb(val, chip->vendor->iobase + offset)
> >>+#define atmel_getb(priv, offset) readb(priv->iobase + offset);
> >>+#define atmel_putb(val, priv, offset) writeb(val, priv->iobase + offset)
> >>  #define atmel_request_region request_mem_region
> >>  #define atmel_release_region release_mem_region
> >>-- 
> >>2.5.0
> >>
> 

------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785471&iu=/4140

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2016-03-30 10:22 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-26  7:00 [PATCH v2 0/7] Remove the tpm_vendor_specific structure Christophe Ricard
     [not found] ` <1458975615-8095-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
2016-03-26  7:00   ` [PATCH v2 1/7] tpm/tpm_atmel: drop remaining 'iobase' usage Christophe Ricard
     [not found]     ` <1458975615-8095-2-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
2016-03-29 14:08       ` Jarkko Sakkinen
     [not found]         ` <20160329140814.GA12764-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2016-03-29 14:45           ` Christophe Ricard
     [not found]             ` <56FA9514.9070507-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-03-30 10:22               ` Jarkko Sakkinen
2016-03-26  7:00   ` [PATCH v2 2/7] tpm: Remove useless priv field in struct tpm_vendor_specific Christophe Ricard
     [not found]     ` <1458975615-8095-3-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
2016-03-29 14:19       ` Jarkko Sakkinen
2016-03-26  7:00   ` [PATCH v2 3/7] tpm/tpm_i2c_atmel: simplify patch to get tpm_chip from an i2c_client Christophe Ricard
2016-03-26  7:00   ` [PATCH v2 4/7] tpm/tpm_i2c_atmel: Few code style fixes Christophe Ricard
     [not found]     ` <1458975615-8095-5-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
2016-03-29 14:17       ` Jarkko Sakkinen
2016-03-26  7:00   ` [PATCH v2 5/7] tpm: drop 'irq' from struct tpm_vendor_specific Christophe Ricard
     [not found]     ` <1458975615-8095-6-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
2016-03-29 14:22       ` Jarkko Sakkinen
2016-03-26  7:00   ` [PATCH v2 6/7] tpm: Move remaining tpm_vendor_specific structure data to tpm_chip Christophe Ricard
     [not found]     ` <1458975615-8095-7-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
2016-03-29 14:27       ` Jarkko Sakkinen
2016-03-26  7:00   ` [PATCH v2 7/7] tpm: drop 'read_queue' from struct tpm_vendor_specific Christophe Ricard
2016-03-29 14:10   ` [PATCH v2 0/7] Remove the tpm_vendor_specific structure Jarkko Sakkinen
     [not found]     ` <20160329141029.GB12764-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2016-03-29 15:09       ` Christophe Ricard

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).