From patchwork Thu Aug 22 21:15:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 11110135 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 96C441864 for ; Thu, 22 Aug 2019 21:16:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 7442520673 for ; Thu, 22 Aug 2019 21:16:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QhSAuL86" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389778AbfHVVQS (ORCPT ); Thu, 22 Aug 2019 17:16:18 -0400 Received: from mail-wm1-f67.google.com ([209.85.128.67]:50694 "EHLO mail-wm1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390234AbfHVVPw (ORCPT ); Thu, 22 Aug 2019 17:15:52 -0400 Received: by mail-wm1-f67.google.com with SMTP id v15so6966475wml.0; Thu, 22 Aug 2019 14:15:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=vLzZPpo7b0N4+qTOHWyLVFeSUhJJ41N2hRhJ91Biag0=; b=QhSAuL86oZE7z8vStZrL/1VLl49cTe+y2W1fOmraQT+MOyBrvXFGT7IHj62FpZoomy dfWWRQdKhd/Hi4Ac0X6j+sORjYC3o+3njUqBAJbtxguZ4YdDP7B3pJo3FxlfefLftzht TUaVyzirgrwVfLis7UGWNmvlcRzu9fp6809EvhwT3zKr2LXNVd6nfxBlhDQxHMUe63ya eO9jJvxwu7gA+ysRwt+IK5j4FsSzawPPqOeUYvN+YNQBVlTUoh7ClQTDFbl+nGMPZEke /DauZ1hRcwOvSp33bXcCxEJeVXecaLZCjuzYx822Jlz5z8anAdipUdVinzF5a/BiNrrA Yang== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=vLzZPpo7b0N4+qTOHWyLVFeSUhJJ41N2hRhJ91Biag0=; b=ZizuYO13dt/Nukzb84EF+FCbm9P5Wev9+/vkt4nFFjx+98hbOB6w3EzhW3vHqBsFtC 8jkdq1SD7biV5I/GX37UxQewlR3siyvwC8MmoAsG09Jto3nmtTRSic0mh55EWhXnLAmL 7DDhfqv/oJFZ0uIzL7bJ3eefhg0k2CqGgb/vsxJvZFmAnL1y4qpuYzP+2RZMv21O2I+l Rtbrszw+dk7FGWIYUA16d3n1fOp6tpLJWhDNi0DM2DdlT0tPKH7YlY9BVa554nc8sjFg Yx1yv8ExS7s8pNgm3zNgKBUVZ0ZttJ/6PkZe1tpymLkO1nTf4YebN1sDTsxNTK9Z7BGd oH1A== X-Gm-Message-State: APjAAAVx3SPNJXyh4/FTktImo6WEP7g/XQ+1N1cE3MtECpzA0yzGZOBC d77g4YrBZpB8+e/tTGUGD+nZeyG3 X-Google-Smtp-Source: APXvYqxzIkDLviXhj68Uika9G99ME5VzuGwztSEnEdSTySaZJZgC7br8yE0qywfVYlxIzj7PoXq0Hg== X-Received: by 2002:a1c:3d89:: with SMTP id k131mr1033954wma.24.1566508550015; Thu, 22 Aug 2019 14:15:50 -0700 (PDT) Received: from localhost.localdomain ([86.126.25.232]) by smtp.gmail.com with ESMTPSA id g197sm578488wme.30.2019.08.22.14.15.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Aug 2019 14:15:49 -0700 (PDT) From: Vladimir Oltean To: broonie@kernel.org Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, netdev@vger.kernel.org, Vladimir Oltean Subject: [PATCH v2 1/5] spi: spi-fsl-dspi: Reduce indentation level in dspi_interrupt Date: Fri, 23 Aug 2019 00:15:10 +0300 Message-Id: <20190822211514.19288-2-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190822211514.19288-1-olteanv@gmail.com> References: <20190822211514.19288-1-olteanv@gmail.com> Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org If the entire function depends on the SPI status register having the interrupt bits asserted, then just check it and exit early if those bits aren't set (such as in the case of the shared IRQ being triggered for the other peripheral). Cosmetic patch. Signed-off-by: Vladimir Oltean --- drivers/spi/spi-fsl-dspi.c | 79 +++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 39 deletions(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 790cb02fc181..c90db7db4121 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -658,47 +658,48 @@ static irqreturn_t dspi_interrupt(int irq, void *dev_id) regmap_read(dspi->regmap, SPI_SR, &spi_sr); regmap_write(dspi->regmap, SPI_SR, spi_sr); + if (!(spi_sr & (SPI_SR_EOQF | SPI_SR_TCFQF))) + return IRQ_HANDLED; + + /* Get transfer counter (in number of SPI transfers). It was + * reset to 0 when transfer(s) were started. + */ + regmap_read(dspi->regmap, SPI_TCR, &spi_tcr); + spi_tcnt = SPI_TCR_GET_TCNT(spi_tcr); + /* Update total number of bytes that were transferred */ + msg->actual_length += spi_tcnt * dspi->bytes_per_word; + + trans_mode = dspi->devtype_data->trans_mode; + switch (trans_mode) { + case DSPI_EOQ_MODE: + dspi_eoq_read(dspi); + break; + case DSPI_TCFQ_MODE: + dspi_tcfq_read(dspi); + break; + default: + dev_err(&dspi->pdev->dev, "unsupported trans_mode %u\n", + trans_mode); + return IRQ_HANDLED; + } - if (spi_sr & (SPI_SR_EOQF | SPI_SR_TCFQF)) { - /* Get transfer counter (in number of SPI transfers). It was - * reset to 0 when transfer(s) were started. - */ - regmap_read(dspi->regmap, SPI_TCR, &spi_tcr); - spi_tcnt = SPI_TCR_GET_TCNT(spi_tcr); - /* Update total number of bytes that were transferred */ - msg->actual_length += spi_tcnt * dspi->bytes_per_word; - - trans_mode = dspi->devtype_data->trans_mode; - switch (trans_mode) { - case DSPI_EOQ_MODE: - dspi_eoq_read(dspi); - break; - case DSPI_TCFQ_MODE: - dspi_tcfq_read(dspi); - break; - default: - dev_err(&dspi->pdev->dev, "unsupported trans_mode %u\n", - trans_mode); - return IRQ_HANDLED; - } + if (!dspi->len) { + dspi->waitflags = 1; + wake_up_interruptible(&dspi->waitq); + return IRQ_HANDLED; + } - if (!dspi->len) { - dspi->waitflags = 1; - wake_up_interruptible(&dspi->waitq); - } else { - switch (trans_mode) { - case DSPI_EOQ_MODE: - dspi_eoq_write(dspi); - break; - case DSPI_TCFQ_MODE: - dspi_tcfq_write(dspi); - break; - default: - dev_err(&dspi->pdev->dev, - "unsupported trans_mode %u\n", - trans_mode); - } - } + switch (trans_mode) { + case DSPI_EOQ_MODE: + dspi_eoq_write(dspi); + break; + case DSPI_TCFQ_MODE: + dspi_tcfq_write(dspi); + break; + default: + dev_err(&dspi->pdev->dev, + "unsupported trans_mode %u\n", + trans_mode); } return IRQ_HANDLED; From patchwork Thu Aug 22 21:15:11 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 11110131 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C78211395 for ; Thu, 22 Aug 2019 21:16:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A656F20673 for ; Thu, 22 Aug 2019 21:16:16 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Z4W8X20h" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390385AbfHVVPy (ORCPT ); Thu, 22 Aug 2019 17:15:54 -0400 Received: from mail-wm1-f66.google.com ([209.85.128.66]:38468 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390238AbfHVVPx (ORCPT ); Thu, 22 Aug 2019 17:15:53 -0400 Received: by mail-wm1-f66.google.com with SMTP id m125so7097310wmm.3; Thu, 22 Aug 2019 14:15:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=EtIN/Xlr6Ip9YVPKEGipzkLuuYaoLg7P8nPJxnIh64A=; b=Z4W8X20hXdRXquz+6aomxEmdr1Nw6M30y/29B8Sk9nBVqCiMWQQA0jVA8B00CjXMEh HJOB0pxT3z/GPheiZy4Ne1BHS0t5pNAZ3AU1XZ+/UQ5Tx+25X2nDLoeSe9SOfaXBiUZT xtzmzLT0ZjJ+f+U6Cgd9WoOUO1D0lBQl0mGGPblPD6D5/C/5JgTrao1vlkrspMU9871K ovuwE2RHRte1AeeXmVHtSTcfqGxGsUtyU/ngLnDFzP6kkZtVRy/igk9DSK2nRj6Bupe2 S7M783ui3HgnAOPNMj5FMxxAC8Ec3zLUFimt/kh0OC66m4gN9H0YrPjeHkvZ+TEWHgAZ WvSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=EtIN/Xlr6Ip9YVPKEGipzkLuuYaoLg7P8nPJxnIh64A=; b=hGzUz6UeeHJEXCHV+d0Q1ptAHTlLip/7vExdVK+IGF/WeCPqAZ9nuS6Mluhfq0U4iZ zyKzVLJW5wfwn1oaJT8IeZ7AS4cgmMk3WfG65Xz1/39Fnq+XzuGwe/FMvDC60Yag5fGs T/9i21ddgaFmBmemKJZGFrvgvqJy7R/dNXBv1rw4gxvqPGRwMRdVLOQzWTvJDbQWLqHj 9OJdcvq0kiwi96+/SGcyxC7xNIwybcsirA5BL3a1qlfjaN4yWD1jOQN5RneGVWj9ipSx ZkEUST+Rw2K0RUl3XmFgqpai174bGktTGO1HlfHbI9HxjQYyzbI+RmKarOXjefuZp6Ze LJNQ== X-Gm-Message-State: APjAAAXX+0IUe+sP1xcQPRuBY8+89bQ9Gdt/3fakH1WUqO7hNcUGHW1K J5M8EoLtOXDHPgMBx1IlUaA= X-Google-Smtp-Source: APXvYqxLvVfwOSGwbc+tlhQaL4v3QM6AsGH84AkN9rdgEJ+l+bCU8PWZD6UvKDbZssKyf/GeYJr0Pw== X-Received: by 2002:a1c:1f41:: with SMTP id f62mr1096637wmf.176.1566508550977; Thu, 22 Aug 2019 14:15:50 -0700 (PDT) Received: from localhost.localdomain ([86.126.25.232]) by smtp.gmail.com with ESMTPSA id g197sm578488wme.30.2019.08.22.14.15.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Aug 2019 14:15:50 -0700 (PDT) From: Vladimir Oltean To: broonie@kernel.org Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, netdev@vger.kernel.org, Vladimir Oltean Subject: [PATCH v2 2/5] spi: spi-fsl-dspi: Exit the ISR with IRQ_NONE when it's not ours Date: Fri, 23 Aug 2019 00:15:11 +0300 Message-Id: <20190822211514.19288-3-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190822211514.19288-1-olteanv@gmail.com> References: <20190822211514.19288-1-olteanv@gmail.com> Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org The DSPI interrupt can be shared between two controllers at least on the LX2160A. In that case, the driver for one controller might misbehave and consume the other's interrupt. Fix this by actually checking if any of the bits in the status register have been asserted. Fixes: 13aed2392741 ("spi: spi-fsl-dspi: use IRQF_SHARED mode to request IRQ") Signed-off-by: Vladimir Oltean --- drivers/spi/spi-fsl-dspi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index c90db7db4121..6ef2279a3699 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -659,7 +659,7 @@ static irqreturn_t dspi_interrupt(int irq, void *dev_id) regmap_write(dspi->regmap, SPI_SR, spi_sr); if (!(spi_sr & (SPI_SR_EOQF | SPI_SR_TCFQF))) - return IRQ_HANDLED; + return IRQ_NONE; /* Get transfer counter (in number of SPI transfers). It was * reset to 0 when transfer(s) were started. From patchwork Thu Aug 22 21:15:12 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 11110133 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1C29B1399 for ; Thu, 22 Aug 2019 21:16:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id EF1C920673 for ; Thu, 22 Aug 2019 21:16:29 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="IurdQHEZ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392055AbfHVVQS (ORCPT ); Thu, 22 Aug 2019 17:16:18 -0400 Received: from mail-wm1-f65.google.com ([209.85.128.65]:33085 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390356AbfHVVPx (ORCPT ); Thu, 22 Aug 2019 17:15:53 -0400 Received: by mail-wm1-f65.google.com with SMTP id p77so7911718wme.0; Thu, 22 Aug 2019 14:15:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Qbsyx6cF/8P/pZdaXCMzm6cKCGUBSYy56F5PBcg7/6U=; b=IurdQHEZbGF35XnlZ8UF4pR7YW1Lwv8gIaLu9L09hnAbFrbd4V1JAFAzo2b43ecYX6 u9uJyo2I1maGQ8DtMmZYEx1bADj3Fy6rD31yTojMMljpfUyC1f6iE7rcqwTbY+eYiUfy PS1z3EQn2OOrFa98leV17thaU5l5iCxxVlJKROvg1X0tGD94ka299HYefzbngW5+tv0M mE76oeUVca+Z4DzEWgiVNRYJ52H9OtO8Pfw0wsAf9oGHzofofBNcqqvIyTS0+RjGce25 3jJ7514tEQwiKNJevx2LUNmmZZqDdN0I2vS9UBU0uFJeoM42TD7pkmHXg2J1QLBwHSn5 iZpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Qbsyx6cF/8P/pZdaXCMzm6cKCGUBSYy56F5PBcg7/6U=; b=cDijmRTogNGVevN0x7AHhpBnBICNrKahjBhz4b6+nYq5nSjazhpFKl0m38QMuzFIs7 UnPVXtAEFUbkdbISxYVAUoeQfL5+5PHjcJLUh38R2HPByZu6l+oiP0BnEywKMD/9TokO T6Y+TBsUpJIaeKwJwOpdHTiXjEginAg9h8SBcn1bQYIUb459OHv+XdHhOmIRvx66Cs/Z jUidarWCmCYImfgBZDo2HwjrYql1nhQSx7y/hPbh5lCAWxPRfOmOGn8IKD3w/AxJRJfD Abf2DmsA9lmVXq6hmD9jAw+AZxPP4P5nk1s8CzlLG/2Z8uYFQa10z6C8yWX8zjtv8j9c aT3Q== X-Gm-Message-State: APjAAAVeWM/20NFlSckv/wTWCeXH4JD/s8PUIN9kYYBCg4kd3EKiN4KS lik8aX9GLstKi64nUk/2O/0= X-Google-Smtp-Source: APXvYqzC0gNtmlawfUqHbSI/k/ZCR1IkvUuCXPArTbZVL4HwXj+ZTZ3lPdnNyswf3HvdzID+RE48xA== X-Received: by 2002:a1c:18a:: with SMTP id 132mr1079271wmb.15.1566508551835; Thu, 22 Aug 2019 14:15:51 -0700 (PDT) Received: from localhost.localdomain ([86.126.25.232]) by smtp.gmail.com with ESMTPSA id g197sm578488wme.30.2019.08.22.14.15.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Aug 2019 14:15:51 -0700 (PDT) From: Vladimir Oltean To: broonie@kernel.org Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, netdev@vger.kernel.org, Vladimir Oltean Subject: [PATCH v2 3/5] spi: spi-fsl-dspi: Remove impossible to reach error check Date: Fri, 23 Aug 2019 00:15:12 +0300 Message-Id: <20190822211514.19288-4-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190822211514.19288-1-olteanv@gmail.com> References: <20190822211514.19288-1-olteanv@gmail.com> Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org dspi->devtype_data is under the total control of the driver. Therefore, a bad value is a driver bug and checking it at runtime (and during an ISR, at that!) is pointless. The second "else if" check is only for clarity (instead of a broader "else") in case other transfer modes are added in the future. But the printing is dead code and can be removed. Signed-off-by: Vladimir Oltean --- drivers/spi/spi-fsl-dspi.c | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 6ef2279a3699..6d2c7984ab0e 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -670,18 +670,10 @@ static irqreturn_t dspi_interrupt(int irq, void *dev_id) msg->actual_length += spi_tcnt * dspi->bytes_per_word; trans_mode = dspi->devtype_data->trans_mode; - switch (trans_mode) { - case DSPI_EOQ_MODE: + if (trans_mode == DSPI_EOQ_MODE) dspi_eoq_read(dspi); - break; - case DSPI_TCFQ_MODE: + else if (trans_mode == DSPI_TCFQ_MODE) dspi_tcfq_read(dspi); - break; - default: - dev_err(&dspi->pdev->dev, "unsupported trans_mode %u\n", - trans_mode); - return IRQ_HANDLED; - } if (!dspi->len) { dspi->waitflags = 1; @@ -689,18 +681,10 @@ static irqreturn_t dspi_interrupt(int irq, void *dev_id) return IRQ_HANDLED; } - switch (trans_mode) { - case DSPI_EOQ_MODE: + if (trans_mode == DSPI_EOQ_MODE) dspi_eoq_write(dspi); - break; - case DSPI_TCFQ_MODE: + else if (trans_mode == DSPI_TCFQ_MODE) dspi_tcfq_write(dspi); - break; - default: - dev_err(&dspi->pdev->dev, - "unsupported trans_mode %u\n", - trans_mode); - } return IRQ_HANDLED; } From patchwork Thu Aug 22 21:15:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 11110127 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C13B61395 for ; Thu, 22 Aug 2019 21:16:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9636B20673 for ; Thu, 22 Aug 2019 21:16:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="p3oIMjED" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389420AbfHVVP4 (ORCPT ); Thu, 22 Aug 2019 17:15:56 -0400 Received: from mail-wm1-f65.google.com ([209.85.128.65]:34978 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390231AbfHVVPz (ORCPT ); Thu, 22 Aug 2019 17:15:55 -0400 Received: by mail-wm1-f65.google.com with SMTP id l2so7123891wmg.0; Thu, 22 Aug 2019 14:15:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ZothcN6Bqy4o1FtBOntfj8dAuHCpsgXZRU/8m3bFF7w=; b=p3oIMjED49DVZk8QmpOAKxF1KXl/QAxS8z8WomGhSMLXXuj+wYRlCI4jyM02PpXm5X g1ngNLoYnFqR1eXXuLVOkHOs1sQY0dzVjNOTIr6EvPjL3X55A5sgeMWypD0/mSsdBwa1 9zRL37w1NfdFazzYDTrxNNhULI7N2nCqkzuCw/SWGEMfx+JZf2Fyd5qOuJ8cQKDFGOGr AMIDOvrfWjZda7CHB9CZxWT+YDSirjxOHvggJnK+jzjVX6IV7YLvxsSOKGYAyQq3/huq 7HLZEbZcyyNpRO/QIepmf3kdGulwvvn2Wxt0RjxSl6t/vel4n5nMzcGx6yKQP5AnPSha hleg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ZothcN6Bqy4o1FtBOntfj8dAuHCpsgXZRU/8m3bFF7w=; b=YCe3Oh80yG2UKSYTEuI3880vI8D+YWCY3lKbnaFmwJ+mECnnB3zvoEb39q/ERJuBjZ RANuJ1V1oHpvez9Z3BaZaVId0/A2hfYTtti3xg/EHIvC8rN2vfnuk+4Gc84LmlpOiygC WciJAa68vba313393tFRhtbTZmVPDU4/tiFUgFjCJC17qnAI8kBJgFjQOBIdsmcvcTZ5 8utB5IbeonwL7UNZC68F/P0MoN3xNxvZihdaWUjoB+vLPu9VpcIOi4iRfSzNYSYzPpRJ YeYMX3zeHfL37YF0XH8hBJekAsHHEWy6G7/mPbLroACBDkj1ewHdQsrA2WR76zAYf8wS W/bQ== X-Gm-Message-State: APjAAAW0Gadi61BIEigGoQ0OEZ9uwzXKY5pD9u3QKNpT1XVUIS+QyiPh 46Z7UMKeo6B+IJEBu56W13ikWrd9 X-Google-Smtp-Source: APXvYqzA7q5JOkuWoXOcMYp3M4MXZ7HA7rb2oRhjveeD9MxCdOqzqn4/N+j2QBx0MaHutMzF4YdGSw== X-Received: by 2002:a1c:a6cd:: with SMTP id p196mr1020890wme.111.1566508552749; Thu, 22 Aug 2019 14:15:52 -0700 (PDT) Received: from localhost.localdomain ([86.126.25.232]) by smtp.gmail.com with ESMTPSA id g197sm578488wme.30.2019.08.22.14.15.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Aug 2019 14:15:52 -0700 (PDT) From: Vladimir Oltean To: broonie@kernel.org Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, netdev@vger.kernel.org, Vladimir Oltean Subject: [PATCH v2 4/5] spi: spi-fsl-dspi: Use poll mode in case the platform IRQ is missing Date: Fri, 23 Aug 2019 00:15:13 +0300 Message-Id: <20190822211514.19288-5-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190822211514.19288-1-olteanv@gmail.com> References: <20190822211514.19288-1-olteanv@gmail.com> Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org On platforms like LS1021A which use TCFQ mode, an interrupt needs to be processed after each byte is TXed/RXed. I tried to make the DSPI implementation on this SoC operate in other, more efficient modes (EOQ, DMA) but it looks like it simply isn't possible. Therefore allow the driver to operate in poll mode, to ease a bit of this absurd amount of IRQ load generated in TCFQ mode. Doing so reduces both the net time it takes to transmit a SPI message, as well as the inter-frame jitter that occurs while doing so. Signed-off-by: Vladimir Oltean --- drivers/spi/spi-fsl-dspi.c | 87 ++++++++++++++++++++++++++++---------- 1 file changed, 64 insertions(+), 23 deletions(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 6d2c7984ab0e..77db43f1290f 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -647,19 +647,12 @@ static void dspi_eoq_read(struct fsl_dspi *dspi) dspi_push_rx(dspi, fifo_read(dspi)); } -static irqreturn_t dspi_interrupt(int irq, void *dev_id) +static int dspi_rxtx(struct fsl_dspi *dspi) { - struct fsl_dspi *dspi = (struct fsl_dspi *)dev_id; struct spi_message *msg = dspi->cur_msg; enum dspi_trans_mode trans_mode; - u32 spi_sr, spi_tcr; u16 spi_tcnt; - - regmap_read(dspi->regmap, SPI_SR, &spi_sr); - regmap_write(dspi->regmap, SPI_SR, spi_sr); - - if (!(spi_sr & (SPI_SR_EOQF | SPI_SR_TCFQF))) - return IRQ_NONE; + u32 spi_tcr; /* Get transfer counter (in number of SPI transfers). It was * reset to 0 when transfer(s) were started. @@ -675,17 +668,55 @@ static irqreturn_t dspi_interrupt(int irq, void *dev_id) else if (trans_mode == DSPI_TCFQ_MODE) dspi_tcfq_read(dspi); - if (!dspi->len) { - dspi->waitflags = 1; - wake_up_interruptible(&dspi->waitq); - return IRQ_HANDLED; - } + if (!dspi->len) + /* Success! */ + return 0; if (trans_mode == DSPI_EOQ_MODE) dspi_eoq_write(dspi); else if (trans_mode == DSPI_TCFQ_MODE) dspi_tcfq_write(dspi); + return -EINPROGRESS; +} + +static int dspi_poll(struct fsl_dspi *dspi) +{ + int tries = 1000; + u32 spi_sr; + + do { + regmap_read(dspi->regmap, SPI_SR, &spi_sr); + regmap_write(dspi->regmap, SPI_SR, spi_sr); + + if (spi_sr & (SPI_SR_EOQF | SPI_SR_TCFQF)) + break; + } while (--tries); + + if (!tries) + return -ETIMEDOUT; + + return dspi_rxtx(dspi); +} + +static irqreturn_t dspi_interrupt(int irq, void *dev_id) +{ + struct fsl_dspi *dspi = (struct fsl_dspi *)dev_id; + u32 spi_sr; + + regmap_read(dspi->regmap, SPI_SR, &spi_sr); + regmap_write(dspi->regmap, SPI_SR, spi_sr); + + if (!(spi_sr & (SPI_SR_EOQF | SPI_SR_TCFQF))) + return IRQ_NONE; + + dspi_rxtx(dspi); + + if (!dspi->len) { + dspi->waitflags = 1; + wake_up_interruptible(&dspi->waitq); + } + return IRQ_HANDLED; } @@ -773,13 +804,18 @@ static int dspi_transfer_one_message(struct spi_controller *ctlr, goto out; } - if (trans_mode != DSPI_DMA_MODE) { - if (wait_event_interruptible(dspi->waitq, - dspi->waitflags)) - dev_err(&dspi->pdev->dev, - "wait transfer complete fail!\n"); + if (!dspi->irq) { + do { + status = dspi_poll(dspi); + } while (status == -EINPROGRESS); + } else if (trans_mode != DSPI_DMA_MODE) { + status = wait_event_interruptible(dspi->waitq, + dspi->waitflags); dspi->waitflags = 0; } + if (status) + dev_err(&dspi->pdev->dev, + "Waiting for transfer to complete failed!\n"); if (transfer->delay_usecs) udelay(transfer->delay_usecs); @@ -1079,10 +1115,13 @@ static int dspi_probe(struct platform_device *pdev) goto out_ctlr_put; dspi_init(dspi); + dspi->irq = platform_get_irq(pdev, 0); - if (dspi->irq < 0) { - ret = dspi->irq; - goto out_clk_put; + if (dspi->irq <= 0) { + dev_info(&pdev->dev, + "can't get platform irq, using poll mode\n"); + dspi->irq = 0; + goto poll_mode; } ret = devm_request_irq(&pdev->dev, dspi->irq, dspi_interrupt, @@ -1092,6 +1131,9 @@ static int dspi_probe(struct platform_device *pdev) goto out_clk_put; } + init_waitqueue_head(&dspi->waitq); + +poll_mode: if (dspi->devtype_data->trans_mode == DSPI_DMA_MODE) { ret = dspi_request_dma(dspi, res->start); if (ret < 0) { @@ -1103,7 +1145,6 @@ static int dspi_probe(struct platform_device *pdev) ctlr->max_speed_hz = clk_get_rate(dspi->clk) / dspi->devtype_data->max_clock_factor; - init_waitqueue_head(&dspi->waitq); platform_set_drvdata(pdev, ctlr); ret = spi_register_controller(ctlr); From patchwork Thu Aug 22 21:15:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 11110129 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 886AD1399 for ; Thu, 22 Aug 2019 21:16:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6732D20673 for ; Thu, 22 Aug 2019 21:16:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="u9uG4WzX" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391230AbfHVVQC (ORCPT ); Thu, 22 Aug 2019 17:16:02 -0400 Received: from mail-wr1-f68.google.com ([209.85.221.68]:33605 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390414AbfHVVP4 (ORCPT ); Thu, 22 Aug 2019 17:15:56 -0400 Received: by mail-wr1-f68.google.com with SMTP id u16so6731589wrr.0; Thu, 22 Aug 2019 14:15:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=W1FNCrNnXxN2/QCtRCe8rujqC6nAfE/fwtvSmwo86ho=; b=u9uG4WzXRi7xfjev4QAdR8xBQJZYDnOSV5fPq+Zc6cQ6e5CNNjHCOTFWAeqsXhGwQk kitD/MjaSnyLmuF+vG6X5hSBpoBqud6VpyOgceFQfqfb4c+YC83XgqqqU/Jb4G44PT3d xjnHF90r6dV0NF6oRIwzLa1IVH3VwXMw1pnHRZR/cwg9ve6coCbyqA+3wOsBouPSLxBw Z3YN1xGTujZSEmi+ywKoUh+3EmP9ZPumdmYnBiQ00ytatyLGd+JQqxMGmro/+RJSlI5c Fj70VZ1q2dTA+Qcc8kdn81beUXlg+44wu+0Ykntim7kurc6PNCowwgil9m6qops48WmX 7TnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=W1FNCrNnXxN2/QCtRCe8rujqC6nAfE/fwtvSmwo86ho=; b=cpSIWwoG3/agDcy1cbpj/AyCxMAqfyqxRKUFCQY0LZJvLbOUIZXgwpIUABmdajml2m 0YN9V+7vKL6SkgBWa5uUQJv5JTHIKEPdyrbfBP5kIEGtGzA10CuSBFY5UtpEg3w+974/ TdE02HmxE3f3q0dWOsoimc5sI5sPHKaEGz0c5ZQPhcbYeOFty0SXq0IFJIpzXogv9nBc 91oRLh5qAgctEIhrm3UXvjX6YNNe2y1BgkGb4sUngMRupoT0krwjTdg23DCzSBeX0K7G NVh8/8iMXWS1bJTBmXR59NL2WW42IFJUq4DQC4X7nC00MM8/FFXMzNP9SYu4FWsTExxO FBJg== X-Gm-Message-State: APjAAAVq7CCxZe9Z4RtTuOnE/duLF95Ni+DiWSyXKfMQxg4WAcvtVXQl UX2PJkY9qgHRHkIGycAkGI8= X-Google-Smtp-Source: APXvYqxrNYl9VM7eGVqaMg5RDku84AwmuFLk1/8d2JGDiD9bPciaIQIeUKMpHERycQmQMNJb5IOwAQ== X-Received: by 2002:adf:eac3:: with SMTP id o3mr911812wrn.264.1566508553725; Thu, 22 Aug 2019 14:15:53 -0700 (PDT) Received: from localhost.localdomain ([86.126.25.232]) by smtp.gmail.com with ESMTPSA id g197sm578488wme.30.2019.08.22.14.15.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Aug 2019 14:15:53 -0700 (PDT) From: Vladimir Oltean To: broonie@kernel.org Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, netdev@vger.kernel.org, Vladimir Oltean , Rob Herring , Shawn Guo Subject: [PATCH v2 5/5] ARM: dts: ls1021a-tsn: Use the DSPI controller in poll mode Date: Fri, 23 Aug 2019 00:15:14 +0300 Message-Id: <20190822211514.19288-6-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190822211514.19288-1-olteanv@gmail.com> References: <20190822211514.19288-1-olteanv@gmail.com> Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org Connected to the LS1021A DSPI is the SJA1105 DSA switch. This constitutes 4 of the 6 Ethernet ports on this board. As the SJA1105 is a PTP switch, constant disciplining of its PTP clock is necessary, and that translates into a lot of SPI I/O even when otherwise idle. Switching to using the DSPI in poll mode has several distinct benefits: - With interrupts, the DSPI driver in TCFQ mode raises an IRQ after each transmitted byte. There is more time wasted for the "waitq" event than for actual I/O. And the DSPI IRQ count is by far the largest in /proc/interrupts on this board (larger than Ethernet). I should mention that due to various LS1021A errata, other operating modes than TCFQ are not available. - The SPI I/O time is both lower, and more consistently so. For a TSN switch it is important that all SPI transfers take a deterministic time to complete. Reading the PTP clock is an important example. Egressing through the switch requires some setup in advance (an SPI write command). Without this patch, that operation required a --tx_timestamp_timeout 50 (ms), now it can be done with --tx_timestamp_timeout 10. Yet another example is reconstructing timestamps, which has a hard deadline because the PTP timestamping counter wraps around in 0.135 seconds. Combined with other I/O needed for that to happen, there is a real risk that the deadline is not always met. See drivers/net/dsa/sja1105/ for more info about the above. Cc: Rob Herring Cc: Shawn Guo Signed-off-by: Vladimir Oltean --- arch/arm/boot/dts/ls1021a-tsn.dts | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm/boot/dts/ls1021a-tsn.dts b/arch/arm/boot/dts/ls1021a-tsn.dts index 5b7689094b70..1c09cfc766af 100644 --- a/arch/arm/boot/dts/ls1021a-tsn.dts +++ b/arch/arm/boot/dts/ls1021a-tsn.dts @@ -33,6 +33,7 @@ }; &dspi0 { + /delete-property/ interrupts; bus-num = <0>; status = "okay";