From patchwork Thu Oct 27 19:28:02 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 9400269 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 5884F60588 for ; Thu, 27 Oct 2016 19:29:52 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 36F842A396 for ; Thu, 27 Oct 2016 19:29:52 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2BA982A398; Thu, 27 Oct 2016 19:29:52 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.3 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D0F152A396 for ; Thu, 27 Oct 2016 19:29:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753214AbcJ0T3v (ORCPT ); Thu, 27 Oct 2016 15:29:51 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:34347 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751280AbcJ0T3u (ORCPT ); Thu, 27 Oct 2016 15:29:50 -0400 Received: by mail-wm0-f68.google.com with SMTP id y138so4186004wme.1 for ; Thu, 27 Oct 2016 12:29:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:subject:to:references:cc:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding; bh=LRIe08taYwJg7ZN+wLHkxDYGONd8SIMJQRz8k3ObQvM=; b=nTflPrbHSNv9M0nuQkvHUTPmS1yOOrtjIvxaCp6sqs/L1vZo4AEr0bVWtFcUiUzevi BHxwAMxgD6RMlB6hvELtxXx1SN4gM8OeHJ7kP9ZlSJU9n5cel6y0sQYn/mVWQNMi9amy lHYMLG2EZYJgHLETl+gpCQCX2DtVVGXweOU1tfKnjdVAITxWN1MEvOsipYQ/23cZrRd0 06u9lV0je6tuXSOCMjaiEJgWNZZU7V4vR7Qfc10uHL6AL+e4cw0EknJjGrboAiAsTBUA 31C9zo84Hu0tuYFe7022iqs2fuZlPTqe36xGip4jew3cGQiteZ0fygKQL7fkUgwnb5+W z5lA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:subject:to:references:cc:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding; bh=LRIe08taYwJg7ZN+wLHkxDYGONd8SIMJQRz8k3ObQvM=; b=A+5hz2K7ZdIw71mYJxWcruy239jfQwNbwEI9hnHHtYwghfcP/FGHeHUH/8I5FKG60b 6gjkc2Qe8KwMKKa7rQwgbGCRvAtUBILqLIdIr+OYaBRXDoyZWf8phGBCZ7x5rjRI/0Kf KTGOx/X9J24qLJ7IXd4CV0Mb0TvTEzJXNlJoYWV/f6+l5P+kyVW3eyui/T6c4E4DlOku qkoNq4RXvROobtpIoDyWMAkMhlzFO6ERFH43krXl+GHLF7Le80p4Dv3NVr/ChJaX/qJx LTXPboDZlwx2yhPEvMbB/BE+qtRp9hBonOkWXfbq2QFlM+n36CEzRmc4B+4lbLcwvUaa bOaQ== X-Gm-Message-State: ABUngvciHPPGEryft6czF4cuc04lv6b0m2U/luhdLIGoQjlDiR/4gCv105tNcnZG+Sg6og== X-Received: by 10.28.87.85 with SMTP id l82mr243300wmb.99.1477596589294; Thu, 27 Oct 2016 12:29:49 -0700 (PDT) Received: from ?IPv6:2003:62:5f6e:ba00:49f8:f47b:2191:41c4? (p200300625F6EBA0049F8F47B219141C4.dip0.t-ipconnect.de. [2003:62:5f6e:ba00:49f8:f47b:2191:41c4]) by smtp.googlemail.com with ESMTPSA id yo1sm10136604wjc.16.2016.10.27.12.29.48 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 27 Oct 2016 12:29:48 -0700 (PDT) From: Heiner Kallweit Subject: [PATCH v2 07/09] spi: fsl-espi: extend and improve transfer error handling To: Mark Brown References: <5b98be38-17a2-79a2-14da-fb2bb6f8820f@gmail.com> Cc: "linux-spi@vger.kernel.org" Message-ID: <688b735d-1757-fedc-2ba1-6f1db4f63b6a@gmail.com> Date: Thu, 27 Oct 2016 21:28:02 +0200 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: <5b98be38-17a2-79a2-14da-fb2bb6f8820f@gmail.com> Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Extend and improve transfer error handling - in case of timeout report also number of remaining rx bytes - in case of timeout return ETIMEDOUT instead of EMSGSIZE - add sanity checks after all bytes have been sent / read: - check that HW has flag SPIE_DON set - check that RX / TX FIFO are empty Signed-off-by: Heiner Kallweit --- v2: - rebased --- drivers/spi/spi-fsl-espi.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/drivers/spi/spi-fsl-espi.c b/drivers/spi/spi-fsl-espi.c index 06fb185..2f95b19 100644 --- a/drivers/spi/spi-fsl-espi.c +++ b/drivers/spi/spi-fsl-espi.c @@ -312,13 +312,13 @@ static int fsl_espi_bufs(struct spi_device *spi, struct spi_transfer *t) ret = wait_for_completion_timeout(&mpc8xxx_spi->done, 2 * HZ); if (ret == 0) dev_err(mpc8xxx_spi->dev, - "Transaction hanging up (left %u bytes)\n", - mpc8xxx_spi->tx_len); + "Transaction hanging up (left %u tx bytes, %u rx bytes)\n", + mpc8xxx_spi->tx_len, mpc8xxx_spi->rx_len); /* disable rx ints */ fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPIM, 0); - return mpc8xxx_spi->tx_len > 0 ? -EMSGSIZE : 0; + return ret == 0 ? -ETIMEDOUT : 0; } static int fsl_espi_trans(struct spi_message *m, struct spi_transfer *trans) @@ -447,8 +447,20 @@ static void fsl_espi_cpu_irq(struct mpc8xxx_spi *mspi, u32 events) if (mspi->tx_len) fsl_espi_fill_tx_fifo(mspi, events); - if (!mspi->tx_len && !mspi->rx_len) - complete(&mspi->done); + if (mspi->tx_len || mspi->rx_len) + return; + + /* we're done, but check for errors before returning */ + events = fsl_espi_read_reg(mspi, ESPI_SPIE); + + if (!(events & SPIE_DON)) + dev_err(mspi->dev, + "Transfer done but SPIE_DON isn't set!\n"); + + if (SPIE_RXCNT(events) || SPIE_TXCNT(events) != FSL_ESPI_FIFO_SIZE) + dev_err(mspi->dev, "Transfer done but rx/tx fifo's aren't empty!\n"); + + complete(&mspi->done); } static irqreturn_t fsl_espi_irq(s32 irq, void *context_data)