[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20190812223622.73297-4-swboyd@chromium.org>
Date: Mon, 12 Aug 2019 15:36:19 -0700
From: Stephen Boyd <swboyd@...omium.org>
To: Peter Huewe <peterhuewe@....de>,
Jarkko Sakkinen <jarkko.sakkinen@...ux.intel.com>
Cc: linux-kernel@...r.kernel.org, linux-integrity@...r.kernel.org,
Andrey Pronin <apronin@...omium.org>,
Duncan Laurie <dlaurie@...omium.org>,
Jason Gunthorpe <jgg@...pe.ca>, Arnd Bergmann <arnd@...db.de>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
Guenter Roeck <groeck@...omium.org>,
Alexander Steffen <Alexander.Steffen@...ineon.com>
Subject: [PATCH v4 3/6] tpm: tpm_tis_spi: Add a pre-transfer callback
Cr50 firmware has a requirement to wait for the TPM to wakeup before
sending commands over the SPI bus. Otherwise, the firmware could be in
deep sleep and not respond. Add a hook to tpm_tis_spi_transfer() before
we start a SPI transfer so we can keep track of the last time the TPM
driver accessed the SPI bus.
Cc: Andrey Pronin <apronin@...omium.org>
Cc: Duncan Laurie <dlaurie@...omium.org>
Cc: Jason Gunthorpe <jgg@...pe.ca>
Cc: Arnd Bergmann <arnd@...db.de>
Cc: Greg Kroah-Hartman <gregkh@...uxfoundation.org>
Cc: Guenter Roeck <groeck@...omium.org>
Cc: Alexander Steffen <Alexander.Steffen@...ineon.com>
Signed-off-by: Stephen Boyd <swboyd@...omium.org>
---
drivers/char/tpm/tpm_tis_spi.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/char/tpm/tpm_tis_spi.c b/drivers/char/tpm/tpm_tis_spi.c
index 819602e85b34..93f49b1941f0 100644
--- a/drivers/char/tpm/tpm_tis_spi.c
+++ b/drivers/char/tpm/tpm_tis_spi.c
@@ -44,6 +44,7 @@ struct tpm_tis_spi_phy {
struct spi_device *spi_device;
int (*flow_control)(struct tpm_tis_spi_phy *phy,
struct spi_transfer *xfer);
+ void (*pre_transfer)(struct tpm_tis_spi_phy *phy);
u8 *iobuf;
};
@@ -129,6 +130,8 @@ static int tpm_tis_spi_transfer(struct tpm_tis_data *data, u32 addr, u16 len,
spi_message_init(&m);
spi_message_add_tail(&spi_xfer, &m);
+ if (phy->pre_transfer)
+ phy->pre_transfer(phy);
ret = spi_sync_locked(phy->spi_device, &m);
if (ret < 0)
goto exit;
--
Sent by a computer through tubes
Powered by blists - more mailing lists