Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752817AbdCBNKd (ORCPT ); Thu, 2 Mar 2017 08:10:33 -0500 Received: from smtp2.infineon.com ([217.10.52.18]:7636 "EHLO smtp2.infineon.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752601AbdCBNKb (ORCPT ); Thu, 2 Mar 2017 08:10:31 -0500 X-SBRS: None From: Peter Huewe To: CC: Peter Huewe , , Alexander Steffen , Peter Huewe , Marcel Selhorst , Jarkko Sakkinen , Jason Gunthorpe , Subject: [PATCH v2 5/5] tpm_tis_spi: Add small delay after last transfer Date: Thu, 2 Mar 2017 13:03:15 +0000 Message-ID: <1488459879-24349-6-git-send-email-peter.huewe@infineon.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1488459879-24349-1-git-send-email-peter.huewe@infineon.com> References: <1488459879-24349-1-git-send-email-peter.huewe@infineon.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [172.29.170.131] X-ClientProxiedBy: MUCSE601.infineon.com (172.23.7.102) To MUCSE612.infineon.com (172.23.7.113) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1470 Lines: 35 Testing the implementation with a Raspberry Pi 2 showed that under some circumstances its SPI master erroneously releases the CS line before the transfer is complete, i.e. before the end of the last clock. In this case the TPM ignores the transfer and misses for example the GO command. The driver is unable to detect this communication problem and will wait for a command response that is never going to arrive, timing out eventually. As a workaround, the small delay ensures that the CS line is held long enough, even with a faulty SPI master. Other SPI masters are not affected, except for a negligible performance penalty. Cc: Fixes: 0edbfea537d1 ("tpm/tpm_tis_spi: Add support for spi phy") Signed-off-by: Alexander Steffen Signed-off-by: Peter Huewe Reviewed-by: Jarkko Sakkinen Tested-by: Benoit Houyere --- 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 index 3015c8b65f18..88fe72ae967f 100644 --- a/drivers/char/tpm/tpm_tis_spi.c +++ b/drivers/char/tpm/tpm_tis_spi.c @@ -111,6 +111,7 @@ static int tpm_tis_spi_transfer(struct tpm_tis_data *data, u32 addr, u16 len, spi_xfer.cs_change = 0; spi_xfer.len = transfer_len; + spi_xfer.delay_usecs = 5; if (direction) { spi_xfer.tx_buf = NULL; -- 2.7.4