Thread (4 messages) 4 messages, 4 authors, 2017-02-24

Re: [PATCH 5/5] tpm_tis_spi: Add small delay after last transfer

From: Peter Huewe <peterhuewe@gmx.de>
Date: 2017-02-17 07:27:39
Also in: lkml


Am 17. Februar 2017 06:09:42 MEZ schrieb Christophe Ricard [off-list ref]:
Are you sure it is not better to introduce this delay directly in the 
rpi spi driver ?

Other than that i don't see any issue with it.
Yes - it would be perfect to fix the issue in the upstream rpi spi master driver.
However this only happens sporadically in some strange cases (i.e. 300-500khz, single byte transfer after having more bytes in the same #cs frame) (unrelated to the tpm)

We are still looking into it, why /where it happens and how to reproduce it reliably and then file a bug/fix it.

For now however the priority is to make the tpm_tis_spi driver work reliably also on the rpi, and this is what this workaround does.

We can simply remove it once the rpi spi master is fixed.

Peter

On 16/02/2017 08:09, Peter Huewe wrote:
quoted
Testing the implementation with a Raspberry Pi 2 showed that under
some
quoted
circumstances its SPI master erroneously releases the CS line before
the
quoted
transfer is complete, i.e. before the end of the last clock. In this
case
quoted
the TPM ignores the transfer and misses for example the GO command.
The
quoted
driver is unable to detect this communication problem and will wait
for a
quoted
command response that is never going to arrive, timing out
eventually.
quoted
As a workaround, the small delay ensures that the CS line is held
long
quoted
enough, even with a faulty SPI master. Other SPI masters are not
affected,
quoted
except for a negligible performance penalty.

Cc: <redacted>
Fixes: 0edbfea537d1 ("tpm/tpm_tis_spi: Add support for spi phy")
Signed-off-by: Alexander Steffen <redacted>
Signed-off-by: Peter Huewe <redacted>
---
  drivers/char/tpm/tpm_tis_spi.c | 1 +
  1 file changed, 1 insertion(+)
diff --git a/drivers/char/tpm/tpm_tis_spi.c
b/drivers/char/tpm/tpm_tis_spi.c
quoted
index b50c5b072df3..685c51bf5d7e 100644
--- a/drivers/char/tpm/tpm_tis_spi.c
+++ b/drivers/char/tpm/tpm_tis_spi.c
@@ -110,6 +110,7 @@ static int tpm_tis_spi_transfer(struct
tpm_tis_data *data, u32 addr, u8 len,
quoted
  
  		spi_xfer.cs_change = 0;
  		spi_xfer.len = transfer_len;
+		spi_xfer.delay_usecs = 5;
  
  		if (direction) {
  			spi_xfer.tx_buf = NULL;
-- 
Sent from my mobile
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help