From patchwork Sun Oct 2 12:23:37 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 9359623 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 24F196075E for ; Sun, 2 Oct 2016 12:24:26 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 16E0628AE9 for ; Sun, 2 Oct 2016 12:24:26 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0BBAE28AF3; Sun, 2 Oct 2016 12:24:26 +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 A5BC028AE9 for ; Sun, 2 Oct 2016 12:24:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751611AbcJBMYZ (ORCPT ); Sun, 2 Oct 2016 08:24:25 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:33673 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752046AbcJBMYY (ORCPT ); Sun, 2 Oct 2016 08:24:24 -0400 Received: by mail-wm0-f67.google.com with SMTP id p138so10385940wmb.0 for ; Sun, 02 Oct 2016 05:24:24 -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=g6W397JOE8A/nX+s3Fxy2mxCRuWtu+LV8u1E7mjuLNM=; b=ftHHhLCKo565N8DdqXAXQrKtCpVw24Es2noX7tIF29XR6vAn4VXNepZsi+aiJAz0VH NxMugAv77BZfEWBgTG8GTJzh69CpgmZH9GY0onAnj+h3JkL+bxZ5P7EglA+k+AZLYGx8 yzynA2x2FSMv3hP23D1UDDkpYE4v1szHXRAj3Bue9tw/yBO9wvb924o8JNgEVsfsaKaO 8xxzGPA5KbgRLLW9+9TNT7XIbZn22FJTdhAeU/+HdXTI3ae4CntiSYVscDfNm0H/Z0/5 YSQEnlAz7tQmhfqujyruC5QIi4vr1rnGQySX8kxBEc67bWovSk/H88yqhJOxa4DvonIb ILUQ== 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=g6W397JOE8A/nX+s3Fxy2mxCRuWtu+LV8u1E7mjuLNM=; b=RyLFPMsXAVcLpp6fXgLLnJmWBSdEvsP9WfsjWOlU1gt5R4mjjMEHPIVGqMHNonHGX0 SaoJ21hhIixXpudPkLxRAzlxwiQDq8oggqECV9Nwp2Z3U4oZUrMARSlKXJjBPiGIiT2m Hp0YhvnhCtrgwckrqqFMET2dVHpc/kVaDgZVcbH/DVBnxeH/p7k0DC6jIP5E8ChsRnKs Y8xs/Feahz71EczGAC5q1djEd1IMVeUSDs+LQ348BXJDunIcbnSBDGjq7B0109PPT7s1 CpHqAy4OaH2BYP9XR+0MqJIPF+JxhQHgmNJZzuzE2hvoEExBVDqF2kVIVk7olIa19e9b xs1g== X-Gm-Message-State: AA6/9Rn9sukfsV6dwlzWPYnkVOv1VxxWOZrFEx+WHCPUZDR/GiyQwauPgphgAUMTthejuw== X-Received: by 10.194.88.36 with SMTP id bd4mr13446601wjb.207.1475411063141; Sun, 02 Oct 2016 05:24:23 -0700 (PDT) Received: from ?IPv6:2003:62:5f1b:3000:8dbc:eb8a:fb9c:9173? ([2003:62:5f1b:3000:8dbc:eb8a:fb9c:9173]) by smtp.googlemail.com with ESMTPSA id n28sm13785015wmi.2.2016.10.02.05.24.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 02 Oct 2016 05:24:22 -0700 (PDT) From: Heiner Kallweit Subject: [PATCH 09/11] 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: <4ba19a7f-9f66-54c4-9119-e85671d608fb@gmail.com> Date: Sun, 2 Oct 2016 14:23:37 +0200 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.3.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 --- 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 10d06f2..cbfb6da 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)