From patchwork Sat Mar 14 22:43:29 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 11438469 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 B559914B4 for ; Sun, 15 Mar 2020 01:40:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9100E20637 for ; Sun, 15 Mar 2020 01:40:16 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QNrWWyWW" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726736AbgCOBkQ (ORCPT ); Sat, 14 Mar 2020 21:40:16 -0400 Received: from mail-wm1-f66.google.com ([209.85.128.66]:38762 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726729AbgCOBkQ (ORCPT ); Sat, 14 Mar 2020 21:40:16 -0400 Received: by mail-wm1-f66.google.com with SMTP id t13so7888931wmi.3; Sat, 14 Mar 2020 18:40:14 -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=vJdE0AuVXiJ36mNfX/pKHsHI39Q9/zpf+j6FYiGSXMw=; b=QNrWWyWW8vK9IrfwwFeW4XuWps8p+RJtVmPpvgpuQGfC4AQfGYyorsuWKXMwspxsYV /iERMorGpvh5h06YA+N2JXtBYc+39BAByPxacsEiPex5gYjtLSepO1kZBWUZOPABXmoh t5onjH0u5uLBKUojMeHRuIhMpHBOndCMsSz4kqnbh7Q8SP9GPKPEyinFCQDw5wL0BVPq L8xlczCWo8xiyzCXTFvwlN4m4aJR2AQb5X4xVxy1IH0aSZ+ZvW/5GTvMEXjPuRwR48Hd Gns//wbii1ccl9zEvouIt/YPV9opXiy/uFYIxyJ9pHCzNwD73cbM0K5phsBKRF+EqrBm nQkA== 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=vJdE0AuVXiJ36mNfX/pKHsHI39Q9/zpf+j6FYiGSXMw=; b=C6/Q7Qb+YjIEMSUvHT2cX5/TApfE33aFTwW9Kz0EVB0aInB9sId5ZcDLr05Q4Uw+jd iuY7pnrAORqjLQBWOwy0ysu3rk30jCjfi+BPBQC1txpC8EFXHxVMS874JojuhiEGkDz7 g36frEs5LhMJbRjHig2CNdpAhCE7JwPt63BHupsUTG8ckjTX1fD6GsTiV2DIlZvkTBeE ZCJwnkiK3ZNLzG4ZmbGdhQsDVFii/AfEShPsi3Qn6q05K4AnIXBk1HxbVsbrJsQ0Gn/n 7Zu3axchBEH9Ikek+nGrGJq3if2bLAf0KLO8NfrqEtB7+sCN6pA1Z09oORq7wsNtlmT2 LThg== X-Gm-Message-State: ANhLgQ3WiBo6RZgnMwcKsfaKabYJXPy/QZmTuUmNu03PJ+AxMygxppU2 GDyo09fhxSasz6JuIgoLj/XqcERYeEo= X-Google-Smtp-Source: ADFU+vufBtUCuRE+ffzHkeys6l4lqDPG6E7fO4lYTZBaecUbjAC0rlm634GlJErKYLxE5STnOjnifA== X-Received: by 2002:a1c:8103:: with SMTP id c3mr17704074wmd.166.1584225837824; Sat, 14 Mar 2020 15:43:57 -0700 (PDT) Received: from localhost.localdomain ([79.115.60.40]) by smtp.gmail.com with ESMTPSA id 133sm23690732wmd.5.2020.03.14.15.43.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 14 Mar 2020 15:43:57 -0700 (PDT) From: Vladimir Oltean To: broonie@kernel.org Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, shawnguo@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, devicetree@vger.kernel.org, eha@deif.com, angelo@sysam.it, andrew.smirnov@gmail.com, gustavo@embeddedor.com, weic@nvidia.com, mhosny@nvidia.com, michael@walle.cc, peng.ma@nxp.com Subject: [PATCH v3 01/12] spi: spi-fsl-dspi: Don't access reserved fields in SPI_MCR Date: Sun, 15 Mar 2020 00:43:29 +0200 Message-Id: <20200314224340.1544-2-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200314224340.1544-1-olteanv@gmail.com> References: <20200314224340.1544-1-olteanv@gmail.com> Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org From: Vladimir Oltean The SPI_MCR_PCSIS macro assumes that the controller has a number of chip select signals equal to 6. That is not always the case, but actually is described through the driver-specific "spi-num-chipselects" device tree binding. LS1028A for example only has 4 chip selects. Don't write to the upper bits of the PCSIS field, which are reserved in the reference manual. Fixes: 349ad66c0ab0 ("spi:Add Freescale DSPI driver for Vybrid VF610 platform") Signed-off-by: Vladimir Oltean --- Changes in v4: None. Changes in v3: None. Changes in v2: Remove duplicate phrase in commit message. drivers/spi/spi-fsl-dspi.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 50e3382f0c50..6ca35881881b 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -22,7 +22,7 @@ #define SPI_MCR 0x00 #define SPI_MCR_MASTER BIT(31) -#define SPI_MCR_PCSIS (0x3F << 16) +#define SPI_MCR_PCSIS(x) ((x) << 16) #define SPI_MCR_CLR_TXF BIT(11) #define SPI_MCR_CLR_RXF BIT(10) #define SPI_MCR_XSPI BIT(3) @@ -1200,7 +1200,10 @@ static const struct regmap_config dspi_xspi_regmap_config[] = { static void dspi_init(struct fsl_dspi *dspi) { - unsigned int mcr = SPI_MCR_PCSIS; + unsigned int mcr; + + /* Set idle states for all chip select signals to high */ + mcr = SPI_MCR_PCSIS(GENMASK(dspi->ctlr->num_chipselect - 1, 0)); if (dspi->devtype_data->trans_mode == DSPI_XSPI_MODE) mcr |= SPI_MCR_XSPI; From patchwork Sat Mar 14 22:43:30 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 11438651 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 BF1C292A for ; Sun, 15 Mar 2020 02:37:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9E7AD205C9 for ; Sun, 15 Mar 2020 02:37:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QWfaVXb1" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727156AbgCOCh2 (ORCPT ); Sat, 14 Mar 2020 22:37:28 -0400 Received: from mail-wm1-f68.google.com ([209.85.128.68]:55901 "EHLO mail-wm1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726712AbgCOCh2 (ORCPT ); Sat, 14 Mar 2020 22:37:28 -0400 Received: by mail-wm1-f68.google.com with SMTP id 6so13939538wmi.5; Sat, 14 Mar 2020 19:37:26 -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=i/xUxgWq4UpEozlJruyu4esrihguskjSmgNCvfi8Eoc=; b=QWfaVXb1+kuKsZhnsCpwPE+phZrISNT+jXNPVDpAyyq8O9irHGRHF2hFvQyCKn92Lb BFlxXBYiTKWJ/YwwpYQNnQOQoEUzMnSbrn8mTxn573CCQm+ZhCOqdpfIZ01jIv5DUDgO Fl84o5/mRYZaQ4Zw0kKwfSppg1iJAjHxKINrEsmF8QXTh0ialVuSFT8rthQ5+Z0wwSZT j/jGZVqCDvKNmPJMtAQiEwz9u2gOL226I6p8POMpe7u6qyFQIIrUaQSZU5CgAJf32HDU KUMc90S9rc4hKEvwehNFWRQzIPoCkF6gBY1Ap9n5p8puY5JnV2+R6TbiZzM1le8LsV7c Y0AQ== 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=i/xUxgWq4UpEozlJruyu4esrihguskjSmgNCvfi8Eoc=; b=cS5cu7N9XsMQHpmmd6fgzdv+B7U+xtYrKHqLAHG9yaxl+ZcL/mtbOW+iTOJN975N/b VNPbjES/a+RdbS6iJQF4lVtX6MdWnK47xQY7zuvKELDv07UszPQPiC5l0bJmEl8FWjLm P2fDqcI5iGlAxF5tKEvx4IOH8Hf195in3h3QYmS2Nz2PUTE0ll1fQrWfiqPorOrC6IAC J+Wlkj2P/7ZCwOzYf/DVKPC95w541Tr6YpkX6WZz/QCE+CfOf10RDZB8Kym6fdiMccgh olgKWXemexc8P8KiimWpPeEu698NQBN5jW1v3tqy1sJTbRSJPdty/LmIijWlzaNG4qwU Aqww== X-Gm-Message-State: ANhLgQ34FvTHNyQaFQgLLITtiB5HcHp9Dcd24zDpHoTe5Nojmt6uW6Fa ifd8rb15DsNqgId9hqHjAyfInuoYNGM= X-Google-Smtp-Source: ADFU+vsJkFBk34Vz16tqJu/p5u21gr+Xhryd4WBfvUktE4uhuqZErap/kQ5LuEpE3hHEfrhiDxk6lg== X-Received: by 2002:a1c:b7c2:: with SMTP id h185mr18801079wmf.67.1584225839168; Sat, 14 Mar 2020 15:43:59 -0700 (PDT) Received: from localhost.localdomain ([79.115.60.40]) by smtp.gmail.com with ESMTPSA id 133sm23690732wmd.5.2020.03.14.15.43.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 14 Mar 2020 15:43:58 -0700 (PDT) From: Vladimir Oltean To: broonie@kernel.org Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, shawnguo@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, devicetree@vger.kernel.org, eha@deif.com, angelo@sysam.it, andrew.smirnov@gmail.com, gustavo@embeddedor.com, weic@nvidia.com, mhosny@nvidia.com, michael@walle.cc, peng.ma@nxp.com Subject: [PATCH v3 02/12] spi: spi-fsl-dspi: Fix little endian access to PUSHR CMD and TXDATA Date: Sun, 15 Mar 2020 00:43:30 +0200 Message-Id: <20200314224340.1544-3-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200314224340.1544-1-olteanv@gmail.com> References: <20200314224340.1544-1-olteanv@gmail.com> Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org From: Vladimir Oltean In XSPI mode, the 32-bit PUSHR register can be written to separately: the higher 16 bits are for commands and the lower 16 bits are for data. This has nicely been hacked around, by defining a second regmap with a width of 16 bits, and effectively splitting a 32-bit register into 2 16-bit ones, from the perspective of this regmap_pushr. The problem is the assumption about the controller's endianness. If the controller is little endian (such as anything post-LS1046A), then the first 2 bytes, in the order imposed by memory layout, will actually hold the TXDATA, and the last 2 bytes will hold the CMD. So take the controller's endianness into account when performing split writes to PUSHR. The obvious and simple solution would have been to call regmap_get_val_endian(), but that is an internal regmap function and we don't want to change regmap just for this. Therefore, we just re-read the "big-endian" device tree property. Fixes: 58ba07ec79e6 ("spi: spi-fsl-dspi: Add support for XSPI mode registers") Signed-off-by: Vladimir Oltean --- Changes in v4: None. Changes in v3: None. Changes in v2: Parse "big-endian" device tree bindings instead of taking the decision based on compatible SoC. drivers/spi/spi-fsl-dspi.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 6ca35881881b..be717776dd98 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -103,10 +103,6 @@ #define SPI_FRAME_BITS(bits) SPI_CTAR_FMSZ((bits) - 1) #define SPI_FRAME_EBITS(bits) SPI_CTARE_FMSZE(((bits) - 1) >> 4) -/* Register offsets for regmap_pushr */ -#define PUSHR_CMD 0x0 -#define PUSHR_TX 0x2 - #define DMA_COMPLETION_TIMEOUT msecs_to_jiffies(3000) struct chip_data { @@ -240,6 +236,13 @@ struct fsl_dspi { int words_in_flight; + /* + * Offsets for CMD and TXDATA within SPI_PUSHR when accessed + * individually (in XSPI mode) + */ + int pushr_cmd; + int pushr_tx; + void (*host_to_dev)(struct fsl_dspi *dspi, u32 *txdata); void (*dev_to_host)(struct fsl_dspi *dspi, u32 rxdata); }; @@ -673,12 +676,12 @@ static void dspi_pushr_cmd_write(struct fsl_dspi *dspi, u16 cmd) */ if (dspi->len > dspi->oper_word_size) cmd |= SPI_PUSHR_CMD_CONT; - regmap_write(dspi->regmap_pushr, PUSHR_CMD, cmd); + regmap_write(dspi->regmap_pushr, dspi->pushr_cmd, cmd); } static void dspi_pushr_txdata_write(struct fsl_dspi *dspi, u16 txdata) { - regmap_write(dspi->regmap_pushr, PUSHR_TX, txdata); + regmap_write(dspi->regmap_pushr, dspi->pushr_tx, txdata); } static void dspi_xspi_write(struct fsl_dspi *dspi, int cnt, bool eoq) @@ -1259,6 +1262,7 @@ static int dspi_probe(struct platform_device *pdev) struct fsl_dspi *dspi; struct resource *res; void __iomem *base; + bool big_endian; ctlr = spi_alloc_master(&pdev->dev, sizeof(struct fsl_dspi)); if (!ctlr) @@ -1284,6 +1288,7 @@ static int dspi_probe(struct platform_device *pdev) /* Only Coldfire uses platform data */ dspi->devtype_data = &devtype_data[MCF5441X]; + big_endian = true; } else { ret = of_property_read_u32(np, "spi-num-chipselects", &cs_num); @@ -1305,6 +1310,15 @@ static int dspi_probe(struct platform_device *pdev) ret = -EFAULT; goto out_ctlr_put; } + + big_endian = of_device_is_big_endian(np); + } + if (big_endian) { + dspi->pushr_cmd = 0; + dspi->pushr_tx = 2; + } else { + dspi->pushr_cmd = 2; + dspi->pushr_tx = 0; } if (dspi->devtype_data->trans_mode == DSPI_XSPI_MODE) From patchwork Sat Mar 14 22:43:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 11438627 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 2C1BB6CA for ; Sun, 15 Mar 2020 02:25:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id EB30220575 for ; Sun, 15 Mar 2020 02:25:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="DZJmEso7" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727738AbgCOCZ0 (ORCPT ); Sat, 14 Mar 2020 22:25:26 -0400 Received: from mail-ed1-f65.google.com ([209.85.208.65]:42534 "EHLO mail-ed1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727469AbgCOCZ0 (ORCPT ); Sat, 14 Mar 2020 22:25:26 -0400 Received: by mail-ed1-f65.google.com with SMTP id b21so7013260edy.9; Sat, 14 Mar 2020 19:25:23 -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=scVa43zyxygvECGnQm1S3eFhi/yi+v2NjhQ3Y67S8+s=; b=DZJmEso7FWMpIN149v1XYbxdUTFDHNzLK2CDbFp/Orm8oQtCM3lvniQbX5hzoBkDhG v2/8XXLtHbEg1zM2Qtj4Qei6Lq2OWLuFyZYGvumXDHwSzULtNLP87JBjm1cXW7dqVNvO NnjoeB0033FfEVytR4YUz/Ka7BmxeW5TQV/5Yeq8Gd3DorzhW1BT7cUaVFXYYVIf/ztM mPKCAPNUfDG5C7vOFjp//ESAo5w7XjU2NHbMd6+Cd6db1GmQkBPHQJbXVbyIJwiOC0QD 2OML2+ppsSg0DIK38Tgo3b+qzVi7+8+TzJH9kZ9XSK5C2QCQKi7FYy8Vlm4gBykd0VqZ R+Qg== 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=scVa43zyxygvECGnQm1S3eFhi/yi+v2NjhQ3Y67S8+s=; b=g1M3XFsOw4IVvKii6/4h0UjgHKi+rAlty5Xk7Z/LmKbWS6Q2UxYfl6kMxP2/u1lYCA ol0SLacYtas8qaHC+Du1Nwow8WAQWki7XBN3IUTJq07SfAy9nMG0gwW0U0KjwqI3Xbt1 4axxOlY93f5H8udwWkXOqVAfI7b7cWRxzwT0bD8eUqP7hNACPPtcMOlAhsyP1OzfVtXM adLajaZoeaynJbINiu/W3WpSmpvciRLxOvqfmM5MgVNbpVeFU9ifbY4LTJbh/e11u59h aO5IktUy7n/zIvHhpkc+rS2Y0a5Zy06dUnSELv1AsCYoyImElNZzucnCVc5wbxYGr8bJ 3m/g== X-Gm-Message-State: ANhLgQ34RzD9f2RDTT2Vv7r7zfBeyEJ41xiM7XxfAQjWjtQt8OC9b+it +UThaQJYnm5WFHAHnb/8YNGsl62WuSY= X-Google-Smtp-Source: ADFU+vu90cO+yTpYnx1/WdE0TgOvGt6zsVMUTfNfcOpWRUMB9PTsM0cnujazpXA46+jyq4VzkyHXAQ== X-Received: by 2002:adf:bbd3:: with SMTP id z19mr5532850wrg.228.1584225840599; Sat, 14 Mar 2020 15:44:00 -0700 (PDT) Received: from localhost.localdomain ([79.115.60.40]) by smtp.gmail.com with ESMTPSA id 133sm23690732wmd.5.2020.03.14.15.43.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 14 Mar 2020 15:44:00 -0700 (PDT) From: Vladimir Oltean To: broonie@kernel.org Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, shawnguo@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, devicetree@vger.kernel.org, eha@deif.com, angelo@sysam.it, andrew.smirnov@gmail.com, gustavo@embeddedor.com, weic@nvidia.com, mhosny@nvidia.com, michael@walle.cc, peng.ma@nxp.com Subject: [PATCH v3 03/12] spi: spi-fsl-dspi: Fix bits-per-word acceleration in DMA mode Date: Sun, 15 Mar 2020 00:43:31 +0200 Message-Id: <20200314224340.1544-4-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200314224340.1544-1-olteanv@gmail.com> References: <20200314224340.1544-1-olteanv@gmail.com> Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org From: Vladimir Oltean In DMA mode, dspi_setup_accel does not get called, which results in the dspi->oper_word_size variable (which is used by dspi_dma_xfer) to not be initialized properly. Because oper_word_size is zero, a few calculations end up being incorrect, and the DMA transfer eventually times out instead of sending anything on the wire. Set up native transfers (or 8-on-16 acceleration) using dspi_setup_accel for DMA mode too. Also take the opportunity and simplify the DMA buffer handling a little bit. Fixes: 6c1c26ecd9a3 ("spi: spi-fsl-dspi: Accelerate transfers using larger word size if possible") Signed-off-by: Vladimir Oltean --- Changes in v4: Rebased on top of "spi: spi-fsl-dspi: fix DMA mapping". Stopped uselessly writing to SPI_CTAR in dspi_transfer_one_message, since we already do that in dspi_setup_accel which we now call. Update message->actual_length before submitting the DMA transfer. Changes in v3: Pretty much re-did the patch. Before, dspi_setup_accel was called just once at the beginning of dspi_dma_xfer. Now it is called in the while loop. Everything else is just refactoring that follows along. Changes in v2: None. drivers/spi/spi-fsl-dspi.c | 86 ++++++++++++++------------------------ 1 file changed, 32 insertions(+), 54 deletions(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index be717776dd98..8f2b73cc6ed7 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -119,7 +119,6 @@ struct fsl_dspi_devtype_data { enum dspi_trans_mode trans_mode; u8 max_clock_factor; int fifo_size; - int dma_bufsize; }; enum { @@ -138,7 +137,6 @@ static const struct fsl_dspi_devtype_data devtype_data[] = { [VF610] = { .trans_mode = DSPI_DMA_MODE, .max_clock_factor = 2, - .dma_bufsize = 4096, .fifo_size = 4, }, [LS1021A] = { @@ -167,19 +165,16 @@ static const struct fsl_dspi_devtype_data devtype_data[] = { }, [LS2080A] = { .trans_mode = DSPI_DMA_MODE, - .dma_bufsize = 8, .max_clock_factor = 8, .fifo_size = 4, }, [LS2085A] = { .trans_mode = DSPI_DMA_MODE, - .dma_bufsize = 8, .max_clock_factor = 8, .fifo_size = 4, }, [LX2160A] = { .trans_mode = DSPI_DMA_MODE, - .dma_bufsize = 8, .max_clock_factor = 8, .fifo_size = 4, }, @@ -191,9 +186,6 @@ static const struct fsl_dspi_devtype_data devtype_data[] = { }; struct fsl_dspi_dma { - /* Length of transfer in words of dspi->fifo_size */ - u32 curr_xfer_len; - u32 *tx_dma_buf; struct dma_chan *chan_tx; dma_addr_t tx_dma_phys; @@ -352,7 +344,7 @@ static void dspi_rx_dma_callback(void *arg) int i; if (dspi->rx) { - for (i = 0; i < dma->curr_xfer_len; i++) + for (i = 0; i < dspi->words_in_flight; i++) dspi_push_rx(dspi, dspi->dma->rx_dma_buf[i]); } @@ -366,12 +358,12 @@ static int dspi_next_xfer_dma_submit(struct fsl_dspi *dspi) int time_left; int i; - for (i = 0; i < dma->curr_xfer_len; i++) + for (i = 0; i < dspi->words_in_flight; i++) dspi->dma->tx_dma_buf[i] = dspi_pop_tx_pushr(dspi); dma->tx_desc = dmaengine_prep_slave_single(dma->chan_tx, dma->tx_dma_phys, - dma->curr_xfer_len * + dspi->words_in_flight * DMA_SLAVE_BUSWIDTH_4_BYTES, DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT | DMA_CTRL_ACK); @@ -389,7 +381,7 @@ static int dspi_next_xfer_dma_submit(struct fsl_dspi *dspi) dma->rx_desc = dmaengine_prep_slave_single(dma->chan_rx, dma->rx_dma_phys, - dma->curr_xfer_len * + dspi->words_in_flight * DMA_SLAVE_BUSWIDTH_4_BYTES, DMA_DEV_TO_MEM, DMA_PREP_INTERRUPT | DMA_CTRL_ACK); @@ -437,46 +429,42 @@ static int dspi_next_xfer_dma_submit(struct fsl_dspi *dspi) return 0; } +static void dspi_setup_accel(struct fsl_dspi *dspi); + static int dspi_dma_xfer(struct fsl_dspi *dspi) { struct spi_message *message = dspi->cur_msg; struct device *dev = &dspi->pdev->dev; - struct fsl_dspi_dma *dma = dspi->dma; - int curr_remaining_bytes; - int bytes_per_buffer; int ret = 0; - curr_remaining_bytes = dspi->len; - bytes_per_buffer = dspi->devtype_data->dma_bufsize / - dspi->devtype_data->fifo_size; - while (curr_remaining_bytes) { - /* Check if current transfer fits the DMA buffer */ - dma->curr_xfer_len = curr_remaining_bytes / - dspi->oper_word_size; - if (dma->curr_xfer_len > bytes_per_buffer) - dma->curr_xfer_len = bytes_per_buffer; + /* + * dspi->len gets decremented by dspi_pop_tx_pushr in + * dspi_next_xfer_dma_submit + */ + while (dspi->len) { + /* Figure out operational bits-per-word for this chunk */ + dspi_setup_accel(dspi); + + dspi->words_in_flight = dspi->len / dspi->oper_word_size; + if (dspi->words_in_flight > dspi->devtype_data->fifo_size) + dspi->words_in_flight = dspi->devtype_data->fifo_size; + + message->actual_length += dspi->words_in_flight * + dspi->oper_word_size; ret = dspi_next_xfer_dma_submit(dspi); if (ret) { dev_err(dev, "DMA transfer failed\n"); - goto exit; - - } else { - const int len = dma->curr_xfer_len * - dspi->oper_word_size; - curr_remaining_bytes -= len; - message->actual_length += len; - if (curr_remaining_bytes < 0) - curr_remaining_bytes = 0; + break; } } -exit: return ret; } static int dspi_request_dma(struct fsl_dspi *dspi, phys_addr_t phy_addr) { + int dma_bufsize = dspi->devtype_data->fifo_size * 2; struct device *dev = &dspi->pdev->dev; struct dma_slave_config cfg; struct fsl_dspi_dma *dma; @@ -501,16 +489,16 @@ static int dspi_request_dma(struct fsl_dspi *dspi, phys_addr_t phy_addr) } dma->tx_dma_buf = dma_alloc_coherent(dma->chan_tx->device->dev, - dspi->devtype_data->dma_bufsize, - &dma->tx_dma_phys, GFP_KERNEL); + dma_bufsize, &dma->tx_dma_phys, + GFP_KERNEL); if (!dma->tx_dma_buf) { ret = -ENOMEM; goto err_tx_dma_buf; } dma->rx_dma_buf = dma_alloc_coherent(dma->chan_rx->device->dev, - dspi->devtype_data->dma_bufsize, - &dma->rx_dma_phys, GFP_KERNEL); + dma_bufsize, &dma->rx_dma_phys, + GFP_KERNEL); if (!dma->rx_dma_buf) { ret = -ENOMEM; goto err_rx_dma_buf; @@ -547,12 +535,10 @@ static int dspi_request_dma(struct fsl_dspi *dspi, phys_addr_t phy_addr) err_slave_config: dma_free_coherent(dma->chan_rx->device->dev, - dspi->devtype_data->dma_bufsize, - dma->rx_dma_buf, dma->rx_dma_phys); + dma_bufsize, dma->rx_dma_buf, dma->rx_dma_phys); err_rx_dma_buf: dma_free_coherent(dma->chan_tx->device->dev, - dspi->devtype_data->dma_bufsize, - dma->tx_dma_buf, dma->tx_dma_phys); + dma_bufsize, dma->tx_dma_buf, dma->tx_dma_phys); err_tx_dma_buf: dma_release_channel(dma->chan_tx); err_tx_channel: @@ -566,6 +552,7 @@ static int dspi_request_dma(struct fsl_dspi *dspi, phys_addr_t phy_addr) static void dspi_release_dma(struct fsl_dspi *dspi) { + int dma_bufsize = dspi->devtype_data->fifo_size * 2; struct fsl_dspi_dma *dma = dspi->dma; if (!dma) @@ -573,15 +560,13 @@ static void dspi_release_dma(struct fsl_dspi *dspi) if (dma->chan_tx) { dma_unmap_single(dma->chan_tx->device->dev, dma->tx_dma_phys, - dspi->devtype_data->dma_bufsize, - DMA_TO_DEVICE); + dma_bufsize, DMA_TO_DEVICE); dma_release_channel(dma->chan_tx); } if (dma->chan_rx) { dma_unmap_single(dma->chan_rx->device->dev, dma->rx_dma_phys, - dspi->devtype_data->dma_bufsize, - DMA_FROM_DEVICE); + dma_bufsize, DMA_FROM_DEVICE); dma_release_channel(dma->chan_rx); } } @@ -833,7 +818,7 @@ static void dspi_setup_accel(struct fsl_dspi *dspi) dspi->oper_word_size = DIV_ROUND_UP(dspi->oper_bits_per_word, 8); /* - * Update CTAR here (code is common for both EOQ and XSPI modes). + * Update CTAR here (code is common for EOQ, XSPI and DMA modes). * We will update CTARE in the portion specific to XSPI, when we * also know the preload value (DTCP). */ @@ -960,13 +945,6 @@ static int dspi_transfer_one_message(struct spi_controller *ctlr, regmap_update_bits(dspi->regmap, SPI_MCR, SPI_MCR_CLR_TXF | SPI_MCR_CLR_RXF, SPI_MCR_CLR_TXF | SPI_MCR_CLR_RXF); - /* - * Static CTAR setup for modes that don't dynamically adjust it - * via dspi_setup_accel (aka for DMA) - */ - regmap_write(dspi->regmap, SPI_CTAR(0), - dspi->cur_chip->ctar_val | - SPI_FRAME_BITS(transfer->bits_per_word)); spi_take_timestamp_pre(dspi->ctlr, dspi->cur_transfer, dspi->progress, !dspi->irq); From patchwork Sat Mar 14 22:43:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 11438603 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 496E46CA for ; Sun, 15 Mar 2020 02:18:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2643420637 for ; Sun, 15 Mar 2020 02:18:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="AIQlqMfV" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727447AbgCOCSM (ORCPT ); Sat, 14 Mar 2020 22:18:12 -0400 Received: from mail-ed1-f67.google.com ([209.85.208.67]:43383 "EHLO mail-ed1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726491AbgCOCSM (ORCPT ); Sat, 14 Mar 2020 22:18:12 -0400 Received: by mail-ed1-f67.google.com with SMTP id dc19so17340864edb.10; Sat, 14 Mar 2020 19:18:10 -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=VJ+RY29P5A3JmNUd+RYfkaMYIhrPtnZKpKcnzxMgng4=; b=AIQlqMfVJlN0HlyANWm0nSChXAKPt7/PzSrPhJsbEqjFRge+aDzgZhvs6Ien2kut/0 0vUee8KBQHhcVRpoH1DhP2rZg1Yxpuf/DOs0aaj4payldQeDCyV/mUSjDDqcIGsYJrkh m/IqRrCyKU6iW4iyAdYlJ//gx+yM6znOMl1y9X3g63SGZQ+ZUUdfQoCbVShgUHf3NBRN UrO1B/gBqyYQUPFGMNXFEUw+qVqJP7zI1JheW4IgrZJKmvKLvRBYdM4fNNbWQMEDMar0 gDSPyQyaKxJDT+ThhudfAWb5NIN7nyFD/DbzDrYteu77Xkl91n92sEkLHXRNk98hQ42w Wvlg== 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=VJ+RY29P5A3JmNUd+RYfkaMYIhrPtnZKpKcnzxMgng4=; b=lVEP5gSbPymErp3VXp6MDUmpVqxZKH6gndjOoLzMM9XBvE/VSeYKN2gPVWx7OR6cE+ bBzoJnav2hW0PCnYX+Eim0ddXB+0nzvwun0PxEv99ZIddVO7dBNVzQEDGg09nOmOh/jg czZj3h7/RuIwi06jglmFni0xJWEKEhKr2OYNpLwI8hpAkloWV2o46XZEOm0HSmdlTLgL JSb54jTkLF9nTZF1g9OWLSxfGxMdbb2KG+cTIshQh+1nDg26EIMLNR9EZP9bwiDsAFkr cXgwcPZK7QXiP4OEPtLap+WmkB8LY9QURs17WeZqRqmKKYYyd49s6Bi1lszTpmdB+Rt9 dUEg== X-Gm-Message-State: ANhLgQ1f/cj6kBRi6t1klSaopH/ielqvRAeViawaljZDEzpPxqBaQXNO MaK/954r0byMbYsjYUf5jS4zkNS7XCc= X-Google-Smtp-Source: ADFU+vuj0pL5Ww/SuXqsYC+FIBzhjNsLjbKeBf77AQ5JP+yHyQGBqcpK7iOIx3za9aByLUgVWE1Aag== X-Received: by 2002:a5d:5746:: with SMTP id q6mr584815wrw.83.1584225841940; Sat, 14 Mar 2020 15:44:01 -0700 (PDT) Received: from localhost.localdomain ([79.115.60.40]) by smtp.gmail.com with ESMTPSA id 133sm23690732wmd.5.2020.03.14.15.44.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 14 Mar 2020 15:44:01 -0700 (PDT) From: Vladimir Oltean To: broonie@kernel.org Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, shawnguo@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, devicetree@vger.kernel.org, eha@deif.com, angelo@sysam.it, andrew.smirnov@gmail.com, gustavo@embeddedor.com, weic@nvidia.com, mhosny@nvidia.com, michael@walle.cc, peng.ma@nxp.com Subject: [PATCH v3 04/12] spi: spi-fsl-dspi: Avoid reading more data than written in EOQ mode Date: Sun, 15 Mar 2020 00:43:32 +0200 Message-Id: <20200314224340.1544-5-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200314224340.1544-1-olteanv@gmail.com> References: <20200314224340.1544-1-olteanv@gmail.com> Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org From: Vladimir Oltean If dspi->words_in_flight is populated with the hardware FIFO size, then in dspi_fifo_read it will attempt to read more data at the end of a buffer that is not a multiple of 16 bytes in length. It will probably time out attempting to do so. So limit the num_fifo_entries variable to the actual number of FIFO entries that is going to be used. Fixes: d59c90a2400f ("spi: spi-fsl-dspi: Convert TCFQ users to XSPI FIFO mode") Signed-off-by: Vladimir Oltean --- Changes in v4: Patch is new. drivers/spi/spi-fsl-dspi.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 8f2b73cc6ed7..51224b772680 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -739,13 +739,16 @@ static void dspi_eoq_fifo_write(struct fsl_dspi *dspi) int num_fifo_entries = dspi->devtype_data->fifo_size; u16 xfer_cmd = dspi->tx_cmd; + if (num_fifo_entries * dspi->oper_word_size > dspi->len) + num_fifo_entries = dspi->len / dspi->oper_word_size; + dspi->words_in_flight = num_fifo_entries; /* Fill TX FIFO with as many transfers as possible */ - while (dspi->len && num_fifo_entries--) { + while (num_fifo_entries--) { dspi->tx_cmd = xfer_cmd; /* Request EOQF for last transfer in FIFO */ - if (dspi->len == dspi->oper_word_size || num_fifo_entries == 0) + if (num_fifo_entries == 0) dspi->tx_cmd |= SPI_PUSHR_CMD_EOQ; /* Write combined TX FIFO and CMD FIFO entry */ dspi_pushr_write(dspi); From patchwork Sat Mar 14 22:43:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 11438443 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 DB6981392 for ; Sun, 15 Mar 2020 01:37:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id BC0DE2076A for ; Sun, 15 Mar 2020 01:37:34 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Ae2m+G1z" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726893AbgCOBhe (ORCPT ); Sat, 14 Mar 2020 21:37:34 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:44386 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726859AbgCOBhe (ORCPT ); Sat, 14 Mar 2020 21:37:34 -0400 Received: by mail-wr1-f65.google.com with SMTP id y2so1391535wrn.11; Sat, 14 Mar 2020 18:37:32 -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=8rTQ0IClwX4HmkVqkn09uapHZa8iKCCdQ/w5jqdWFX0=; b=Ae2m+G1zbkPgLhiIQB4NGYgZsJZarLZSK/uYW5+MT3aw0hkpd6LUusnh+5TBzdhnEb 1BGBJTIYAj5XsaSnv3JyDDjWpuAKr50mJegwAxVF6gVHedBNPQETb8TYjHJTTqDWBaqV k3QV896rVQPXnBeQr6m/mnX4llceLfvrU/L2K2DYYVwfBWRKbVcqI0ktBWH3OQayVctd WS1a6OMGj75MZkjlMxS5va7YCDIOVnOrOs9maWPQz6b+3Hwni/tf4XU6yJh+G0YG800S N6rUivb5YNN5MtSg4jRYsRdSLQvtxXno807RBQN7JbEZ2XnDDXVbGcRPbVtUfz2u69g7 FHgg== 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=8rTQ0IClwX4HmkVqkn09uapHZa8iKCCdQ/w5jqdWFX0=; b=DbGeD91oSlOlGvJtJ5apeCPjGyzDK1WNTQ8FqQ9hZp66Ds1EenA1U8Dzog+taSljdU QvTigfalruzOpLpP/VwW0e5IHzLGnUT60Itb/QJKzVRQ5jad7mC9QtoWrXlREsOzSD7H 3f65l5DzfKwhmM3QjS5f/3B1WRxNrJ/Cinpl4tIq7LN+Y7Sm6m32bzx5EUlHASXwZUW8 DKlWr3CdChs/cTURSHrSLGj2Q4V7ofjgW3nbq/h3X3FirxF7xJ3JGH7CBLpBYtgavBxh ADa/g5BCS2tZAbA1EKZc7xFUibHpekyzQjpGT2eZ+oHK/mNiYxmorvae8RMRUXqNcHpQ lqIg== X-Gm-Message-State: ANhLgQ0tRYcmZyS7jDEnxzQYVe8btlTJvBt/UH1xgXB0Tg7qtewhN8AZ emckHyXsuIgp/2Gw0U6yjLZi6OkrvGc= X-Google-Smtp-Source: ADFU+vsOPU5iXtGc4c5vLHVbG26F/KzISRMwd6S+1Pl4xvCyIqJRvAy6s6KTEGb7+32TGGMa0e8vFQ== X-Received: by 2002:a5d:528e:: with SMTP id c14mr26365240wrv.308.1584225843285; Sat, 14 Mar 2020 15:44:03 -0700 (PDT) Received: from localhost.localdomain ([79.115.60.40]) by smtp.gmail.com with ESMTPSA id 133sm23690732wmd.5.2020.03.14.15.44.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 14 Mar 2020 15:44:02 -0700 (PDT) From: Vladimir Oltean To: broonie@kernel.org Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, shawnguo@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, devicetree@vger.kernel.org, eha@deif.com, angelo@sysam.it, andrew.smirnov@gmail.com, gustavo@embeddedor.com, weic@nvidia.com, mhosny@nvidia.com, michael@walle.cc, peng.ma@nxp.com Subject: [PATCH v3 05/12] spi: spi-fsl-dspi: Protect against races on dspi->words_in_flight Date: Sun, 15 Mar 2020 00:43:33 +0200 Message-Id: <20200314224340.1544-6-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200314224340.1544-1-olteanv@gmail.com> References: <20200314224340.1544-1-olteanv@gmail.com> Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org From: Vladimir Oltean dspi->words_in_flight is a variable populated in the *_write functions and used in the dspi_fifo_read function. It is also used in dspi_fifo_write, immediately after transmission, to update the message->actual_length variable used by higher layers such as spi-mem for integrity checking. But it may happen that the IRQ which calls dspi_fifo_read to be triggered before the updating of message->actual_length takes place. In that case, dspi_fifo_read will decrement dspi->words_in_flight to -1, and that will cause an invalid modification of message->actual_length. Make the simplest fix possible: don't decrement the actual shared variable in dspi->words_in_flight from dspi_fifo_read, but actually a copy of it which is on stack. Suggested-by: Michael Walle Signed-off-by: Vladimir Oltean --- Changes in v4: Patch is new. drivers/spi/spi-fsl-dspi.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 51224b772680..3ac004aa2abd 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -765,8 +765,10 @@ static u32 dspi_popr_read(struct fsl_dspi *dspi) static void dspi_fifo_read(struct fsl_dspi *dspi) { + int num_fifo_entries = dspi->words_in_flight; + /* Read one FIFO entry and push to rx buffer */ - while (dspi->words_in_flight--) + while (num_fifo_entries--) dspi_push_rx(dspi, dspi_popr_read(dspi)); } From patchwork Sat Mar 14 22:43:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 11438471 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 A20161392 for ; Sun, 15 Mar 2020 01:40:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 785FA2071B for ; Sun, 15 Mar 2020 01:40:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="uSM7I/cL" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727141AbgCOBka (ORCPT ); Sat, 14 Mar 2020 21:40:30 -0400 Received: from mail-ed1-f66.google.com ([209.85.208.66]:33473 "EHLO mail-ed1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726530AbgCOBk3 (ORCPT ); Sat, 14 Mar 2020 21:40:29 -0400 Received: by mail-ed1-f66.google.com with SMTP id z65so17360306ede.0; Sat, 14 Mar 2020 18:40:27 -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=tbblumJGtz/v9/Nuxr5nuZQPC5XPjWBHpqGFnIqFYbU=; b=uSM7I/cLsBpGWO1Pz2VdA1/4K5w6j+wDHVtTTodTJbnwzCOeCf1oq6ncWqZV1uCg1k g/z/RiKw70nR8Qu/uLbNpuie9zE2TojhvbGZOR6fw58QQ785qzxtcRTl8YwqK+DuSNbz 7cGKJkgfaw5ivNWWkrOlKtzv+hwRRL7K+Jvi5OR0oShde/xwf+1xHZAuYkpuox5FS/Nq wJKnWpfISbp3wha1yxKoUcV6LSNGm4alo3a4nt3DcbNoXIRD9jWfcfeqcQnCPl9syCGm hdJE+zFu0EQ2ZC33PRSJpC/xuMsVD2BRhHnWpCVfpJqPy6t9tqGBlY8105/5qCpnRhnJ elJg== 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=tbblumJGtz/v9/Nuxr5nuZQPC5XPjWBHpqGFnIqFYbU=; b=nPT2pOmkVcGKhWjCGnaS0zLK7g74glmQFKT3sIWjufDI4AdpSRU7FvAVPrQdOQSKR3 80u09CH1irFk9hzsDGxHnllK+nmK1UGpGWsLj8cgzOgPr1RVnJg4EdLEHOk1hjuV72yV ArNEuZCzkqatrRPDjIjQV6Ce2K9w6CVljBgHhRq5cLEYcjpIYuHv6pXG3tMO+7Fmj2pj KAb5l54tBmOQnuxRBYWE7suuzEXFA7lkIE6+jxIHN8ecqQ2OohiGnRH8XRm6cgWXmDOb Uhb/6VOAfS3CbVE2UuaOZAmYA8ife4Hec88Jr9RgwDlkoAAgHbPMBCYf4Glx1EHfAQLe bSHg== X-Gm-Message-State: ANhLgQ1ffm9cUSx05uRZE95Nks52D71G7Utle2rSmnRl9XZjxk37lN+H uJpgUPV1/MWSnIta2ImSLFxL0+i3oJo= X-Google-Smtp-Source: ADFU+vsuOmeWGW4V4z2qIiw7ceA+cmGdNAQUNcqIbyuT+VdXvWp0qD3bKd75KasTsKEjcb4hc5TnAw== X-Received: by 2002:a5d:4a8c:: with SMTP id o12mr26840529wrq.10.1584225844781; Sat, 14 Mar 2020 15:44:04 -0700 (PDT) Received: from localhost.localdomain ([79.115.60.40]) by smtp.gmail.com with ESMTPSA id 133sm23690732wmd.5.2020.03.14.15.44.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 14 Mar 2020 15:44:04 -0700 (PDT) From: Vladimir Oltean To: broonie@kernel.org Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, shawnguo@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, devicetree@vger.kernel.org, eha@deif.com, angelo@sysam.it, andrew.smirnov@gmail.com, gustavo@embeddedor.com, weic@nvidia.com, mhosny@nvidia.com, michael@walle.cc, peng.ma@nxp.com Subject: [PATCH v3 06/12] spi: spi-fsl-dspi: Replace interruptible wait queue with a simple completion Date: Sun, 15 Mar 2020 00:43:34 +0200 Message-Id: <20200314224340.1544-7-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200314224340.1544-1-olteanv@gmail.com> References: <20200314224340.1544-1-olteanv@gmail.com> Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org From: Vladimir Oltean Currently the driver puts the process in interruptible sleep waiting for the interrupt train to finish transfer to/from the tx_buf and rx_buf. But exiting the process with ctrl-c may make the kernel panic: the wait_event_interruptible call will return -ERESTARTSYS, which a proper driver implementation is perhaps supposed to handle, but nonetheless this one doesn't, and aborts the transfer altogether. Actually when the task is interrupted, there is still a high chance that the dspi_interrupt is still triggering. And if dspi_transfer_one_message returns execution all the way to the spi_device driver, that can free the spi_message and spi_transfer structures, leaving the interrupts to access a freed tx_buf and rx_buf. hexdump -C /dev/mtd0 00000000 00 75 68 75 0a ff ff ff ff ff ff ff ff ff ff ff |.uhu............| 00000010 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| * ^C[ 38.495955] fsl-dspi 2120000.spi: Waiting for transfer to complete failed! [ 38.503097] spi_master spi2: failed to transfer one message from queue [ 38.509729] Unable to handle kernel paging request at virtual address ffff800095ab3377 [ 38.517676] Mem abort info: [ 38.520474] ESR = 0x96000045 [ 38.523533] EC = 0x25: DABT (current EL), IL = 32 bits [ 38.528861] SET = 0, FnV = 0 [ 38.531921] EA = 0, S1PTW = 0 [ 38.535067] Data abort info: [ 38.537952] ISV = 0, ISS = 0x00000045 [ 38.541797] CM = 0, WnR = 1 [ 38.544771] swapper pgtable: 4k pages, 48-bit VAs, pgdp=0000000082621000 [ 38.551494] [ffff800095ab3377] pgd=00000020fffff003, p4d=00000020fffff003, pud=0000000000000000 [ 38.560229] Internal error: Oops: 96000045 [#1] PREEMPT SMP [ 38.565819] Modules linked in: [ 38.568882] CPU: 0 PID: 2729 Comm: hexdump Not tainted 5.6.0-rc4-next-20200306-00052-gd8730cdc8a0b-dirty #193 [ 38.578834] Hardware name: Kontron SMARC-sAL28 (Single PHY) on SMARC Eval 2.0 carrier (DT) [ 38.587129] pstate: 20000085 (nzCv daIf -PAN -UAO) [ 38.591941] pc : ktime_get_real_ts64+0x3c/0x110 [ 38.596487] lr : spi_take_timestamp_pre+0x40/0x90 [ 38.601203] sp : ffff800010003d90 [ 38.604525] x29: ffff800010003d90 x28: ffff80001200e000 [ 38.609854] x27: ffff800011da9000 x26: ffff002079c40400 [ 38.615184] x25: ffff8000117fe018 x24: ffff800011daa1a0 [ 38.620513] x23: ffff800015ab3860 x22: ffff800095ab3377 [ 38.625841] x21: 000000000000146e x20: ffff8000120c3000 [ 38.631170] x19: ffff0020795f6e80 x18: ffff800011da9948 [ 38.636498] x17: 0000000000000000 x16: 0000000000000000 [ 38.641826] x15: ffff800095ab3377 x14: 0720072007200720 [ 38.647155] x13: 0720072007200765 x12: 0775076507750771 [ 38.652483] x11: 0720076d076f0772 x10: 0000000000000040 [ 38.657812] x9 : ffff8000108e2100 x8 : ffff800011dcabe8 [ 38.663139] x7 : 0000000000000000 x6 : ffff800015ab3a60 [ 38.668468] x5 : 0000000007200720 x4 : ffff800095ab3377 [ 38.673796] x3 : 0000000000000000 x2 : 0000000000000ab0 [ 38.679125] x1 : ffff800011daa000 x0 : 0000000000000026 [ 38.684454] Call trace: [ 38.686905] ktime_get_real_ts64+0x3c/0x110 [ 38.691100] spi_take_timestamp_pre+0x40/0x90 [ 38.695470] dspi_fifo_write+0x58/0x2c0 [ 38.699315] dspi_interrupt+0xbc/0xd0 [ 38.702987] __handle_irq_event_percpu+0x78/0x2c0 [ 38.707706] handle_irq_event_percpu+0x3c/0x90 [ 38.712161] handle_irq_event+0x4c/0xd0 [ 38.716008] handle_fasteoi_irq+0xbc/0x170 [ 38.720115] generic_handle_irq+0x2c/0x40 [ 38.724135] __handle_domain_irq+0x68/0xc0 [ 38.728243] gic_handle_irq+0xc8/0x160 [ 38.732000] el1_irq+0xb8/0x180 [ 38.735149] spi_nor_spimem_read_data+0xe0/0x140 [ 38.739779] spi_nor_read+0xc4/0x120 [ 38.743364] mtd_read_oob+0xa8/0xc0 [ 38.746860] mtd_read+0x4c/0x80 [ 38.750007] mtdchar_read+0x108/0x2a0 [ 38.753679] __vfs_read+0x20/0x50 [ 38.757002] vfs_read+0xa4/0x190 [ 38.760237] ksys_read+0x6c/0xf0 [ 38.763471] __arm64_sys_read+0x20/0x30 [ 38.767319] el0_svc_common.constprop.3+0x90/0x160 [ 38.772125] do_el0_svc+0x28/0x90 [ 38.775449] el0_sync_handler+0x118/0x190 [ 38.779468] el0_sync+0x140/0x180 [ 38.782793] Code: 91000294 1400000f d50339bf f9405e80 (f90002c0) [ 38.788910] ---[ end trace 55da560db4d6bef7 ]--- [ 38.793540] Kernel panic - not syncing: Fatal exception in interrupt [ 38.799914] SMP: stopping secondary CPUs [ 38.803849] Kernel Offset: disabled [ 38.807344] CPU features: 0x10002,20006008 [ 38.811451] Memory Limit: none [ 38.814513] ---[ end Kernel panic - not syncing: Fatal exception in interrupt ]--- So it is clear that the "interruptible" part isn't handled correctly. When the process receives a signal, one could either attempt a clean abort (which appears to be difficult with this hardware) or just keep restarting the sleep until the wait queue really completes. But checking in a loop for -ERESTARTSYS is a bit too complicated for this driver, so just make the sleep uninterruptible, to avoid all that nonsense. The wait queue was actually restructured as a completion, after polling other drivers for the most "popular" approach. Fixes: 349ad66c0ab0 ("spi:Add Freescale DSPI driver for Vybrid VF610 platform") Reported-by: Michael Walle Signed-off-by: Vladimir Oltean --- Changes in v4: Removed the dspi_disable_interrupts and dspi_enable_interrupts approach and replaced it with this method. Changes in v3: Patch is new. drivers/spi/spi-fsl-dspi.c | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 3ac004aa2abd..78c891e441cd 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -218,8 +218,7 @@ struct fsl_dspi { u16 tx_cmd; const struct fsl_dspi_devtype_data *devtype_data; - wait_queue_head_t waitq; - u32 waitflags; + struct completion xfer_done; struct fsl_dspi_dma *dma; @@ -899,10 +898,8 @@ static irqreturn_t dspi_interrupt(int irq, void *dev_id) if (!(spi_sr & (SPI_SR_EOQF | SPI_SR_CMDTCF))) return IRQ_NONE; - if (dspi_rxtx(dspi) == 0) { - dspi->waitflags = 1; - wake_up_interruptible(&dspi->waitq); - } + if (dspi_rxtx(dspi) == 0) + complete(&dspi->xfer_done); return IRQ_HANDLED; } @@ -982,13 +979,9 @@ static int dspi_transfer_one_message(struct spi_controller *ctlr, 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; + wait_for_completion(&dspi->xfer_done); + reinit_completion(&dspi->xfer_done); } - if (status) - dev_err(&dspi->pdev->dev, - "Waiting for transfer to complete failed!\n"); spi_transfer_delay_exec(transfer); } @@ -1368,7 +1361,7 @@ static int dspi_probe(struct platform_device *pdev) goto out_clk_put; } - init_waitqueue_head(&dspi->waitq); + init_completion(&dspi->xfer_done); poll_mode: From patchwork Sat Mar 14 22:43:35 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 11438433 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 1E8D71392 for ; Sun, 15 Mar 2020 01:34:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id EF4392076A for ; Sun, 15 Mar 2020 01:34:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mMwz6uwy" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726699AbgCOBeZ (ORCPT ); Sat, 14 Mar 2020 21:34:25 -0400 Received: from mail-wm1-f66.google.com ([209.85.128.66]:38353 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726421AbgCOBeZ (ORCPT ); Sat, 14 Mar 2020 21:34:25 -0400 Received: by mail-wm1-f66.google.com with SMTP id t13so7882694wmi.3; Sat, 14 Mar 2020 18:34:23 -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=W4LsChYiYRCfil6DjkYr2p/X2niUsvURlPsrKK9vuOs=; b=mMwz6uwyECazDiJCgbOUHKlUEAMtQg38/g8Xqg6k2LoiSVVVtZOOsgSya5j7XcIH9w iMAPxKZjs03JXneZ9diWGvngfP7GIfFYVuL10HYcGY18z4749N7UlgdbhwjzLmuKuc7J RBJ4PI8kUSp15b1pBT9Kaj83C8rF95WKh6ZXOnlET7I3PpKUl8F3vLPK039Hp0C6tMK0 ZHmYR7isWCkR+IlSZNxGDqzsFgTsSewABn1yNSes9aSqqYCjqNqO0VVny5CYiuXh/9dW 2SPJvOWX1drqOcChY8n/FV4YN3Qt6xArmBkRY0tmEkNqLFGistf4v/WBG+JAfy7fvLJ0 KejQ== 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=W4LsChYiYRCfil6DjkYr2p/X2niUsvURlPsrKK9vuOs=; b=IRe3u+PP5EZBy4BHaCxh/Wg8g/cOqq2TjHFpdm4NvHi4NDXOEdCy1NoqEH0+DTeAvM nmuz8GasvZlAmWcmEemd5mCa4Eo7OuJfc3k8CiCpBegIPvZTg7VTFcgPCjqQxWKnxPbu ERgLezibL4CW6AP+PyrippgP+RlK30JZhsOppwEc2gjcHfgORGbSwcFuzNIiNkDptU8T KQ/KawdBkwES7RpcxJ8ydLOAuYRfe9ZwLioJnR1bEl7pelldDB38L55TAnueXpwg9b5c et9Lc6ZNNWM+TkZI+wreIuq37N6QyKJoIU8vnWT1bRmY+Gscs4cOhV525MFbJZuK7Z9X qeZg== X-Gm-Message-State: ANhLgQ2bs/wvq5iG/b2jyASZKdjgGdkLSiBACVvibBNZdzuCv7mvtsai /P78/YWg9Njg6Yuf8JzPWBnj0ps9q9U= X-Google-Smtp-Source: ADFU+vvceGKe918gmUtPax/Kpa0CuJ0cxHQlIzPaPbiI7CPBUaRWpfSTLBN2KPObAmrLXkH/4FDSfw== X-Received: by 2002:a1c:9802:: with SMTP id a2mr18615176wme.117.1584225846132; Sat, 14 Mar 2020 15:44:06 -0700 (PDT) Received: from localhost.localdomain ([79.115.60.40]) by smtp.gmail.com with ESMTPSA id 133sm23690732wmd.5.2020.03.14.15.44.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 14 Mar 2020 15:44:05 -0700 (PDT) From: Vladimir Oltean To: broonie@kernel.org Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, shawnguo@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, devicetree@vger.kernel.org, eha@deif.com, angelo@sysam.it, andrew.smirnov@gmail.com, gustavo@embeddedor.com, weic@nvidia.com, mhosny@nvidia.com, michael@walle.cc, peng.ma@nxp.com Subject: [PATCH v3 07/12] spi: spi-fsl-dspi: Avoid NULL pointer in dspi_slave_abort for non-DMA mode Date: Sun, 15 Mar 2020 00:43:35 +0200 Message-Id: <20200314224340.1544-8-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200314224340.1544-1-olteanv@gmail.com> References: <20200314224340.1544-1-olteanv@gmail.com> Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org From: Vladimir Oltean The driver does not create the dspi->dma structure unless operating in DSPI_DMA_MODE, so it makes sense to check for that. Fixes: f4b323905d8b ("spi: Introduce dspi_slave_abort() function for NXP's dspi SPI driver") Signed-off-by: Vladimir Oltean --- Changes in v4: Patch is new. drivers/spi/spi-fsl-dspi.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 78c891e441cd..a8aef5690c5d 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -1201,8 +1201,10 @@ static int dspi_slave_abort(struct spi_master *master) * Terminate all pending DMA transactions for the SPI working * in SLAVE mode. */ - dmaengine_terminate_sync(dspi->dma->chan_rx); - dmaengine_terminate_sync(dspi->dma->chan_tx); + if (dspi->devtype_data->trans_mode == DSPI_DMA_MODE) { + dmaengine_terminate_sync(dspi->dma->chan_rx); + dmaengine_terminate_sync(dspi->dma->chan_tx); + } /* Clear the internal DSPI RX and TX FIFO buffers */ regmap_update_bits(dspi->regmap, SPI_MCR, From patchwork Sat Mar 14 22:43:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 11438437 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 047E614B4 for ; Sun, 15 Mar 2020 01:36:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D80292076A for ; Sun, 15 Mar 2020 01:36:37 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dX3pHkte" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726599AbgCOBfq (ORCPT ); Sat, 14 Mar 2020 21:35:46 -0400 Received: from mail-ed1-f65.google.com ([209.85.208.65]:42214 "EHLO mail-ed1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726559AbgCOBfp (ORCPT ); Sat, 14 Mar 2020 21:35:45 -0400 Received: by mail-ed1-f65.google.com with SMTP id b21so6937247edy.9; Sat, 14 Mar 2020 18:35:42 -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=FHEa/0MhybiTV6M1eLx+ql9TZNVB4VsBUDo2Iy66e9w=; b=dX3pHktetchEsEcqrTMseBKgDEbB8h/wp7Qu4l0ORNQ9n20/+3E21BxEW07QY29/gm zrqCbTCBYqtWRLj5qUt0zaPetDrr/TquV3ceA9doCsL7T2gZU6s+kQtZo7raofORPUeN TvQGI4KiMgglz4Ae5lMpqzL1T4cpdZ5Qmx9zYwa0EYHCTi8J3OUGvOLIH8RM43uazfLh TAHnzXPG5pXtR1+qP+oaH+vUi8EDdKLUGdROPAdYxWgvGEPaBNPw4zTw4YN9uex36zrY M8nAmWPmEZfr3njWZs+Xl9A4e1wAvSriLxG5mZKG4lBjbrv1wnxtwWT3wYuc9c4Ylv93 +SAw== 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=FHEa/0MhybiTV6M1eLx+ql9TZNVB4VsBUDo2Iy66e9w=; b=HfmxWa70gM8ORPXtztjUayEIRnktJfM/4YuBSKnJW6+hcOcs6Wd5ihGKkWkz0IE53k r5uvuMKpDkwc6jkDIxuW11jbXIlqaFbPjb4c7Nb6U98H74E0TvXPgCuhSX8f2FNGVEO7 /QsQ6CqhvQDeCvnqqA8hkQI0XrLJtfSyr6q9xEGlWZIbqTl0+ne0htBOKSwQ59R3uLEp 9cgzVWrHIOCjGfJVcmvyeJYmRP4k0oXLPk9BphltrlBCeL+ZAqieGBEDcfs6aYz8oIIL RqijSmbSe0dl9mHucR9r0phzxl5nNvp7GgaGVrOlpoHayJ8fD8cpIob5jeAMDcRc1p1z qO7Q== X-Gm-Message-State: ANhLgQ0q7dm+/P261fuyKGpMM6VYF602F+ZHXvmtTWaPUeJD25FW+QnI 2bTQFKhhucPjopeKKWdXPdOu+sTXyfI= X-Google-Smtp-Source: ADFU+vvGqefJTl5dI11r4MrJ1NyEWWsbP92rkqouOMCOP4/IJxsegR70E0Fhrutde3amv8krRBJ5EQ== X-Received: by 2002:a5d:4488:: with SMTP id j8mr3462175wrq.306.1584225847484; Sat, 14 Mar 2020 15:44:07 -0700 (PDT) Received: from localhost.localdomain ([79.115.60.40]) by smtp.gmail.com with ESMTPSA id 133sm23690732wmd.5.2020.03.14.15.44.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 14 Mar 2020 15:44:07 -0700 (PDT) From: Vladimir Oltean To: broonie@kernel.org Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, shawnguo@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, devicetree@vger.kernel.org, eha@deif.com, angelo@sysam.it, andrew.smirnov@gmail.com, gustavo@embeddedor.com, weic@nvidia.com, mhosny@nvidia.com, michael@walle.cc, peng.ma@nxp.com Subject: [PATCH v3 08/12] spi: spi-fsl-dspi: Fix interrupt-less DMA mode taking an XSPI code path Date: Sun, 15 Mar 2020 00:43:36 +0200 Message-Id: <20200314224340.1544-9-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200314224340.1544-1-olteanv@gmail.com> References: <20200314224340.1544-1-olteanv@gmail.com> Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org From: Vladimir Oltean Interrupts are not necessary for DMA functionality, since the completion event is provided by the DMA driver. But if the driver fails to request the IRQ defined in the device tree, it will call dspi_poll which would make the driver hang waiting for data to become available in the RX FIFO. Fixes: c55be3059159 ("spi: spi-fsl-dspi: Use poll mode in case the platform IRQ is missing") Signed-off-by: Vladimir Oltean --- Changes in v4: Patch is new. drivers/spi/spi-fsl-dspi.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index a8aef5690c5d..eab4929330e1 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -974,13 +974,15 @@ static int dspi_transfer_one_message(struct spi_controller *ctlr, goto out; } - if (!dspi->irq) { - do { - status = dspi_poll(dspi); - } while (status == -EINPROGRESS); - } else if (trans_mode != DSPI_DMA_MODE) { - wait_for_completion(&dspi->xfer_done); - reinit_completion(&dspi->xfer_done); + if (trans_mode != DSPI_DMA_MODE) { + if (dspi->irq) { + wait_for_completion(&dspi->xfer_done); + reinit_completion(&dspi->xfer_done); + } else { + do { + status = dspi_poll(dspi); + } while (status == -EINPROGRESS); + } } spi_transfer_delay_exec(transfer); From patchwork Sat Mar 14 22:43:37 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 11438477 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 2439B1392 for ; Sun, 15 Mar 2020 01:42:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id EE6072076A for ; Sun, 15 Mar 2020 01:42:35 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VMu2JY0x" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726689AbgCOBmc (ORCPT ); Sat, 14 Mar 2020 21:42:32 -0400 Received: from mail-wm1-f65.google.com ([209.85.128.65]:34612 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726530AbgCOBmc (ORCPT ); Sat, 14 Mar 2020 21:42:32 -0400 Received: by mail-wm1-f65.google.com with SMTP id x3so10629079wmj.1; Sat, 14 Mar 2020 18:42:29 -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=SCcq62XmObdxi4G8Ng0Ls4FTL8TP/twoB+5fYYk3P6A=; b=VMu2JY0xNk+X8BsL7I8b+jBKfBHYjMxqc6uwmMI6yJo8U29URiGKImDk8/8QpAmQFG 099ywS5MIjGP2Gz7Yd3HTrYZc5NVPgAc/FPMBTGowafNdRpR0c/v6sB0n9sQEejRX1A9 HmgxOUBA2BOknB4Rg88nlq11SsZJGNzgXDUepGmRmM7WjqkPx5bixo3NtUPQDRP7D8Vd b/yawaVyTpVVugTD36GJcfncluBps/JIyz+RIAjqfT64hF0vn9gjwKHu30FLvTe1CA3F yDYxe0tmgHU8qhS5YZ4AcR0oYpnd7nVI1gQaLl7fZKAiW9zJSyxLBhU4gbllyOej6r8F Q5Lg== 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=SCcq62XmObdxi4G8Ng0Ls4FTL8TP/twoB+5fYYk3P6A=; b=V1EHZI9YvdOCwmipwxr6DLOXXhYc15OWuAIDkFvESOgb369658H3eOINoco2T347Qn /xQb2tsgzWRyJ0p00bD0PoARrObGMbB65UV2bHOECAMg5TQ8Q2pt9L9lli0fjIOPFuyN w5S6mFqLpRyeDr8+CTifuupt91z3T51qMf2GJXRn/cFFYm7/2R3/eQpbM/35hcthgJ6J wdurIZELrI0/LhIUGRPEYLrwczZsJjqDyabw+eqFqKN0F6u4H0PsUy9HObQIlf5kaf+P HIPnnv/Cn08cRHoUZlxyGNHFfkpxWkAlX1bCT4D4hQSulynH3EFxg0a96iAoX6zEKjfF qwvQ== X-Gm-Message-State: ANhLgQ1ha4a3RIiba0YScPvMNE5DXsJWjnxEtQgmdegSS0Jh2DsHtz6E Sz2In2p94Alyh5paaHTv4b88lRlybI8= X-Google-Smtp-Source: ADFU+vtbU9ZG0AcQljb0XSyZcJgTeWtPD9mfx34wOnZw3pwoXdlDqQeUzcLLEmVa9U3XMxD+XdIl/A== X-Received: by 2002:a1c:4805:: with SMTP id v5mr17818569wma.98.1584225848847; Sat, 14 Mar 2020 15:44:08 -0700 (PDT) Received: from localhost.localdomain ([79.115.60.40]) by smtp.gmail.com with ESMTPSA id 133sm23690732wmd.5.2020.03.14.15.44.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 14 Mar 2020 15:44:08 -0700 (PDT) From: Vladimir Oltean To: broonie@kernel.org Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, shawnguo@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, devicetree@vger.kernel.org, eha@deif.com, angelo@sysam.it, andrew.smirnov@gmail.com, gustavo@embeddedor.com, weic@nvidia.com, mhosny@nvidia.com, michael@walle.cc, peng.ma@nxp.com Subject: [PATCH v3 09/12] spi: spi-fsl-dspi: Move invariant configs out of dspi_transfer_one_message Date: Sun, 15 Mar 2020 00:43:37 +0200 Message-Id: <20200314224340.1544-10-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200314224340.1544-1-olteanv@gmail.com> References: <20200314224340.1544-1-olteanv@gmail.com> Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org From: Vladimir Oltean The operating mode (DMA, XSPI, EOQ) is not going to change across the lifetime of the device. So it makes no sense to keep writing to SPI_RSER on each message. Move this configuration to dspi_init instead. Signed-off-by: Vladimir Oltean --- Changes in v4: Patch is new. drivers/spi/spi-fsl-dspi.c | 55 ++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index eab4929330e1..86255d38ffcf 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -909,7 +909,6 @@ static int dspi_transfer_one_message(struct spi_controller *ctlr, { struct fsl_dspi *dspi = spi_controller_get_devdata(ctlr); struct spi_device *spi = message->spi; - enum dspi_trans_mode trans_mode; struct spi_transfer *transfer; int status = 0; @@ -951,30 +950,11 @@ static int dspi_transfer_one_message(struct spi_controller *ctlr, spi_take_timestamp_pre(dspi->ctlr, dspi->cur_transfer, dspi->progress, !dspi->irq); - trans_mode = dspi->devtype_data->trans_mode; - switch (trans_mode) { - case DSPI_EOQ_MODE: - regmap_write(dspi->regmap, SPI_RSER, SPI_RSER_EOQFE); - dspi_fifo_write(dspi); - break; - case DSPI_XSPI_MODE: - regmap_write(dspi->regmap, SPI_RSER, SPI_RSER_CMDTCFE); - dspi_fifo_write(dspi); - break; - case DSPI_DMA_MODE: - regmap_write(dspi->regmap, SPI_RSER, - SPI_RSER_TFFFE | SPI_RSER_TFFFD | - SPI_RSER_RFDFE | SPI_RSER_RFDFD); + if (dspi->devtype_data->trans_mode == DSPI_DMA_MODE) { status = dspi_dma_xfer(dspi); - break; - default: - dev_err(&dspi->pdev->dev, "unsupported trans_mode %u\n", - trans_mode); - status = -EINVAL; - goto out; - } + } else { + dspi_fifo_write(dspi); - if (trans_mode != DSPI_DMA_MODE) { if (dspi->irq) { wait_for_completion(&dspi->xfer_done); reinit_completion(&dspi->xfer_done); @@ -984,11 +964,12 @@ static int dspi_transfer_one_message(struct spi_controller *ctlr, } while (status == -EINPROGRESS); } } + if (status) + break; spi_transfer_delay_exec(transfer); } -out: message->status = status; spi_finalize_current_message(ctlr); @@ -1179,7 +1160,7 @@ static const struct regmap_config dspi_xspi_regmap_config[] = { }, }; -static void dspi_init(struct fsl_dspi *dspi) +static int dspi_init(struct fsl_dspi *dspi) { unsigned int mcr; @@ -1193,6 +1174,26 @@ static void dspi_init(struct fsl_dspi *dspi) regmap_write(dspi->regmap, SPI_MCR, mcr); regmap_write(dspi->regmap, SPI_SR, SPI_SR_CLEAR); + + switch (dspi->devtype_data->trans_mode) { + case DSPI_EOQ_MODE: + regmap_write(dspi->regmap, SPI_RSER, SPI_RSER_EOQFE); + break; + case DSPI_XSPI_MODE: + regmap_write(dspi->regmap, SPI_RSER, SPI_RSER_CMDTCFE); + break; + case DSPI_DMA_MODE: + regmap_write(dspi->regmap, SPI_RSER, + SPI_RSER_TFFFE | SPI_RSER_TFFFD | + SPI_RSER_RFDFE | SPI_RSER_RFDFD); + break; + default: + dev_err(&dspi->pdev->dev, "unsupported trans_mode %u\n", + dspi->devtype_data->trans_mode); + return -EINVAL; + } + + return 0; } static int dspi_slave_abort(struct spi_master *master) @@ -1348,7 +1349,9 @@ static int dspi_probe(struct platform_device *pdev) if (ret) goto out_ctlr_put; - dspi_init(dspi); + ret = dspi_init(dspi); + if (ret) + goto out_clk_put; dspi->irq = platform_get_irq(pdev, 0); if (dspi->irq <= 0) { From patchwork Sat Mar 14 22:43:38 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 11438645 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 D134D92A for ; Sun, 15 Mar 2020 02:31:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id ABAA8205ED for ; Sun, 15 Mar 2020 02:31:14 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="leXggBwf" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727778AbgCOCbO (ORCPT ); Sat, 14 Mar 2020 22:31:14 -0400 Received: from mail-wm1-f68.google.com ([209.85.128.68]:36138 "EHLO mail-wm1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727772AbgCOCbO (ORCPT ); Sat, 14 Mar 2020 22:31:14 -0400 Received: by mail-wm1-f68.google.com with SMTP id g62so14311144wme.1; Sat, 14 Mar 2020 19:31:13 -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=UBLq+DVYQxDs8a8x/M0DoStKIVGMho+f5uexM3U5eEY=; b=leXggBwfI+U1mWn9FkJboIpHLw2O7MMsTzSZS+64xWyOc7KeCL+60U99o9EA1ZOS9r TSj5FrW+W2yycJdhgWvH4125L3H0s/YQOe5JR6a41E5kljCBg30DaO+etyRBRehHO3gd aFaIVKIIsufg/vipykTMARGle92PNXW8R5Rjkk3iS/AflBqQbQaE6kufHBiBF2qdgjP0 8OFPu5rOdlRXq32GBpkAf5UQsHkGkGtsZBh8QjzR9XkprPDk0SvN6iRJK3DVjH/XXOms syZsOcE5IDKrwzFjiIsscgk1ZehZ40F0cy2NaJwgijxv/ipEyv/hvXAy8F7tVjl/XawB siEg== 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=UBLq+DVYQxDs8a8x/M0DoStKIVGMho+f5uexM3U5eEY=; b=swWVusZ62otMBbZ1yb4vHuQeaD2bPde30rXin/qDolaVTW0X18u6E/VIgAVlmDSYJh f71jnbtfgTHN5O8lZVIBkLjTwtNsn/BgIGT8gzGXWJ+UL8pbqvvacdLBCmTzzPIaQRHL ca8LG8MydcTp/HMFKgmAgy9vOj2Bi95Crh/pTSAkn3SxBfNwOydxspabqrOtHimRuMxd 2I2Uwb+/7NnBsnQ+JkCl10xBYSKmwL0v5h8ck+XNrjutYxJsCnM1z0Pph+VVU/BFS7Xh e1WnJmG54+rULx3ddh6yvMn9nVu2coo6eu8avoxND5K9bT9J1VQmuqZdpL0WJeWDZBJY d5rw== X-Gm-Message-State: ANhLgQ3Sod/D/fyzkbx7azSTWanVEzeImgRwC76ZKs7HixZpx7XZAGbC ZgL/QHgCOlCACKrPTITnuPzb8dQVnW0= X-Google-Smtp-Source: ADFU+vvfxGr4VcbjzdQ9Qc5anz+ZVnL17sKm3kWOf89+oaVzDiigT8qEB6jG10BXVSEFtxosOh6erQ== X-Received: by 2002:a1c:a502:: with SMTP id o2mr17828001wme.94.1584225850211; Sat, 14 Mar 2020 15:44:10 -0700 (PDT) Received: from localhost.localdomain ([79.115.60.40]) by smtp.gmail.com with ESMTPSA id 133sm23690732wmd.5.2020.03.14.15.44.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 14 Mar 2020 15:44:09 -0700 (PDT) From: Vladimir Oltean To: broonie@kernel.org Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, shawnguo@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, devicetree@vger.kernel.org, eha@deif.com, angelo@sysam.it, andrew.smirnov@gmail.com, gustavo@embeddedor.com, weic@nvidia.com, mhosny@nvidia.com, michael@walle.cc, peng.ma@nxp.com Subject: [PATCH v3 10/12] spi: spi-fsl-dspi: Add support for LS1028A Date: Sun, 15 Mar 2020 00:43:38 +0200 Message-Id: <20200314224340.1544-11-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200314224340.1544-1-olteanv@gmail.com> References: <20200314224340.1544-1-olteanv@gmail.com> Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org From: Vladimir Oltean This is similar to the DSPI instantiation on LS1028A, except that: - The A-011218 erratum has been fixed, so DMA works - The endianness is different, which has implications on XSPI mode Some benchmarking with the following command: spidev_test --device /dev/spidev2.0 --bpw 8 --size 256 --cpha --iter 10000000 --speed 20000000 shows that in DMA mode, it can achieve around 2400 kbps, and in XSPI mode, the same command goes up to 4700 kbps. This is somewhat to be expected, since the DMA buffer size is extremely small at 8 bytes, the winner becomes whomever can prepare the buffers for transmission quicker, and DMA mode has higher overhead there. So XSPI FIFO mode has been chosen as the operating mode for this chip. Signed-off-by: Vladimir Oltean --- Changes in v4: None. Changes in v3: Removed the dma_bufsize variable (obsoleted by 03/12). Changes in v2: Switch to DSPI_XSPI_MODE. drivers/spi/spi-fsl-dspi.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 86255d38ffcf..b6d7e6f383ec 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -124,6 +124,7 @@ struct fsl_dspi_devtype_data { enum { LS1021A, LS1012A, + LS1028A, LS1043A, LS1046A, LS2080A, @@ -151,6 +152,11 @@ static const struct fsl_dspi_devtype_data devtype_data[] = { .max_clock_factor = 8, .fifo_size = 16, }, + [LS1028A] = { + .trans_mode = DSPI_XSPI_MODE, + .max_clock_factor = 8, + .fifo_size = 4, + }, [LS1043A] = { /* Has A-011218 DMA erratum */ .trans_mode = DSPI_XSPI_MODE, @@ -1059,6 +1065,9 @@ static const struct of_device_id fsl_dspi_dt_ids[] = { }, { .compatible = "fsl,ls1012a-dspi", .data = &devtype_data[LS1012A], + }, { + .compatible = "fsl,ls1028a-dspi", + .data = &devtype_data[LS1028A], }, { .compatible = "fsl,ls1043a-dspi", .data = &devtype_data[LS1043A], From patchwork Sat Mar 14 22:43:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 11438415 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 1A79F913 for ; Sun, 15 Mar 2020 01:30:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id EE46220637 for ; Sun, 15 Mar 2020 01:30:23 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Hvu9wNtE" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727186AbgCOBaX (ORCPT ); Sat, 14 Mar 2020 21:30:23 -0400 Received: from mail-wm1-f66.google.com ([209.85.128.66]:33936 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726733AbgCOBaV (ORCPT ); Sat, 14 Mar 2020 21:30:21 -0400 Received: by mail-wm1-f66.google.com with SMTP id x3so10619014wmj.1; Sat, 14 Mar 2020 18:30:20 -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=JBPKD7LpU3yqMiH8MVzfGEsgDmj4SrKt4IrZ9Xh2cD4=; b=Hvu9wNtERwqWL9oTqlv0Mt0p+j+G7ms1qpFerKoFgE4QFNqSPNzNPYHEToTRVI0q+1 3rL36OWzXWhyeiTllCadGwccizkgzkUVIzs4l81DnDHmMNyz5Ci1eTzjWWunyqDMNjhS l/tDTSlPCI0tI39EOrdKfTwsZzdwmfArskef/EVRf3e2yID1R4rkHyJzqO2XPYAsPFYa XUSSTeDwWQb5tb2s6XciBN0NS9+H7gJqgqmV92guWC/E8yF+gxzqhZbz9H5mhDLP5pb4 KWgWpfi+tsjUZngGfETxntwka9lTMu0hsO0QCfuBFQcRZfEwwao8DVyC29Qb25BOKWW8 Ks7w== 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=JBPKD7LpU3yqMiH8MVzfGEsgDmj4SrKt4IrZ9Xh2cD4=; b=MtuvJzHbcupV0XLc4JYOPfjtVSGX62tVHV96zpWVfd5VyQQhBhN0VCubzfS06S5Kx8 V+3wws8qfr+5TJABMiUrZPrJP+NDOynYA8FCFgvk9Sw3TePJnwJqQlOczt2fha3LIThP 2daksCL6qD/sOuOewc5lRd3yKsRDajXDL4Ps5NKKNL3ELq+FN93vcd5SPQ7w+ga1l7ld hsP1o9MrJiCTkEpi13GUtiSnLQCeqQR7l4geJWvCbZww0vc6EJQUJvjeo0uEbx3vSo6N q1kMAcYxdXrfqH5MT1kmodWDH114A1rnjD+pkMDQzsYgCVEzU0Dyt3F2chrNdMIYkAfY EkwA== X-Gm-Message-State: ANhLgQ0op2xONHXeXYNrTBm/KG6IjJ/AwxWfRUV9pliY+HJNmwe5W9zm q1enCbh4jqIRHfeQx61+v6CR9orrM3Y= X-Google-Smtp-Source: ADFU+vvbbydBra6U/4TidOrG8bvR2ZNiPt2/6iHMVjTXnibkGLn6+r72iDETXFJiDWgGUdwBkgmYIA== X-Received: by 2002:a1c:6387:: with SMTP id x129mr18412016wmb.58.1584225851584; Sat, 14 Mar 2020 15:44:11 -0700 (PDT) Received: from localhost.localdomain ([79.115.60.40]) by smtp.gmail.com with ESMTPSA id 133sm23690732wmd.5.2020.03.14.15.44.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 14 Mar 2020 15:44:11 -0700 (PDT) From: Vladimir Oltean To: broonie@kernel.org Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, shawnguo@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, devicetree@vger.kernel.org, eha@deif.com, angelo@sysam.it, andrew.smirnov@gmail.com, gustavo@embeddedor.com, weic@nvidia.com, mhosny@nvidia.com, michael@walle.cc, peng.ma@nxp.com Subject: [PATCH v3 11/12] arm64: dts: ls1028a: Specify the DMA channels for the DSPI controllers Date: Sun, 15 Mar 2020 00:43:39 +0200 Message-Id: <20200314224340.1544-12-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200314224340.1544-1-olteanv@gmail.com> References: <20200314224340.1544-1-olteanv@gmail.com> Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org From: Vladimir Oltean LS1028A has a functional connection to the eDMA module. Even if the spi-fsl-dspi.c driver is not using DMA for LS1028A now, define the slots in the DMAMUX for connecting the eDMA channels to the 3 DSPI controllers. Signed-off-by: Vladimir Oltean --- Changes in v4: None. Changes in v3: None. Changes in v2: None. arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi index 515e0a1b934f..18155273a46e 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi @@ -298,6 +298,8 @@ interrupts = ; clock-names = "dspi"; clocks = <&clockgen 4 1>; + dmas = <&edma0 0 62>, <&edma0 0 60>; + dma-names = "tx", "rx"; spi-num-chipselects = <4>; little-endian; status = "disabled"; @@ -311,6 +313,8 @@ interrupts = ; clock-names = "dspi"; clocks = <&clockgen 4 1>; + dmas = <&edma0 0 58>, <&edma0 0 56>; + dma-names = "tx", "rx"; spi-num-chipselects = <4>; little-endian; status = "disabled"; @@ -324,6 +328,8 @@ interrupts = ; clock-names = "dspi"; clocks = <&clockgen 4 1>; + dmas = <&edma0 0 54>, <&edma0 0 2>; + dma-names = "tx", "rx"; spi-num-chipselects = <3>; little-endian; status = "disabled"; From patchwork Sat Mar 14 22:43:40 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 11438655 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 313FB92A for ; Sun, 15 Mar 2020 02:41:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 10693205C9 for ; Sun, 15 Mar 2020 02:41:35 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="N5TanJlL" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727166AbgCOCle (ORCPT ); Sat, 14 Mar 2020 22:41:34 -0400 Received: from mail-wm1-f67.google.com ([209.85.128.67]:39766 "EHLO mail-wm1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726902AbgCOCle (ORCPT ); Sat, 14 Mar 2020 22:41:34 -0400 Received: by mail-wm1-f67.google.com with SMTP id f7so14299356wml.4; Sat, 14 Mar 2020 19:41:33 -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=+cFH/KTkYwb8Oxu2WFx0ksQZ4BT4hgzNZrfPLfoH9sE=; b=N5TanJlLuNd057zayBCmJgpNLKm6hhcE2hEfL46v3y94eVwg6MRoVzqwFk2CgcDuWN Z29KiKjKBvDPW8JKlZ58HpDUK4U/UK1hY2qn/TbNzmmB+cly/PF4ZkZS44H2XZJ06zve YINhPLKxnNOQo8QRVXAV0rgtaL20TiiRUSVh62hnTtsWrbTRcnMfOFOg462BtJdcrSuu 44K4rDGO4OOq3+GoOgKIggKz6tQSaCpcqHIKWJ3brOussdbTgR8qlSJ7xVzr3CUBOXjH JeY1eXvBAQhqFr08L18EzLDzd4nn3rxocgh1am4bQBVIVrJo7jL2UZReOb5/ZUf0nwpi 3ejw== 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=+cFH/KTkYwb8Oxu2WFx0ksQZ4BT4hgzNZrfPLfoH9sE=; b=n1LihdweoXD/u6mxEgCbFUNi2OhIHObz9NbTJCoBYPHCQHutI4fuT3vEmbkhvzRuhl YnSaG74f4aKOdxTXqzw66fScOSfb4liQAPnh3uWAlOlaW0UqbCIi49fJkvZntfkCPNbG S2RISq9rGgzTFLRF2Ffzv0ZmroGwhfWYOJrXq7PP6lXYhDxCLWCqhYJIbRPQ0gpZUMG6 CsdwMbuce7pW/qrJTb/6fFDqr7tXCt2y6Q1+mbX5V/DqaUN3EiDUtQ6qf0immpBAAh+8 vDgHD6MNIto/4cOZbUN/iB6XpjkO6JxhgaPj15k5cHGnkUlHaDtD3WKSWWEf9fZ58MM1 l0BA== X-Gm-Message-State: ANhLgQ2MiwshJ2yBWzF3NSB7/1MfKZ9qQmJUKRbaHTSvKfOUil9BHTli 0/L38PjlEJ3uVFxeanccTroHTgdbDv4= X-Google-Smtp-Source: ADFU+vsXI2K+vPYStFsw/mm8L5Y8sQANb6LojFU12k3vnOmVW9BiH2h9eh7B6ics8Sf7yPNmSkSFqQ== X-Received: by 2002:a1c:2ed2:: with SMTP id u201mr17997718wmu.3.1584225852908; Sat, 14 Mar 2020 15:44:12 -0700 (PDT) Received: from localhost.localdomain ([79.115.60.40]) by smtp.gmail.com with ESMTPSA id 133sm23690732wmd.5.2020.03.14.15.44.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 14 Mar 2020 15:44:12 -0700 (PDT) From: Vladimir Oltean To: broonie@kernel.org Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, shawnguo@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, devicetree@vger.kernel.org, eha@deif.com, angelo@sysam.it, andrew.smirnov@gmail.com, gustavo@embeddedor.com, weic@nvidia.com, mhosny@nvidia.com, michael@walle.cc, peng.ma@nxp.com Subject: [PATCH v3 12/12] arm64: dts: ls1028a-rdb: Add a spidev node for the mikroBUS Date: Sun, 15 Mar 2020 00:43:40 +0200 Message-Id: <20200314224340.1544-13-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200314224340.1544-1-olteanv@gmail.com> References: <20200314224340.1544-1-olteanv@gmail.com> Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org From: Vladimir Oltean For debugging, it is useful to have access to the DSPI controller signals. On the reference design board, these are exported to either the mikroBUS1 or mikroBUS2 connector (according to the CPLD register BRDCFG3[SPI3]). Signed-off-by: Vladimir Oltean --- Changes in v4: None. Changes in v3: None. Changes in v2: Change compatible string for spidev node. arch/arm64/boot/dts/freescale/fsl-ls1028a-rdb.dts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1028a-rdb.dts b/arch/arm64/boot/dts/freescale/fsl-ls1028a-rdb.dts index 6d05b76c2c7a..0d27b5667b8c 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls1028a-rdb.dts +++ b/arch/arm64/boot/dts/freescale/fsl-ls1028a-rdb.dts @@ -83,6 +83,20 @@ }; }; +&dspi2 { + bus-num = <2>; + status = "okay"; + + /* mikroBUS1 */ + spidev@0 { + compatible = "rohm,dh2228fv"; + spi-max-frequency = <20000000>; + fsl,spi-cs-sck-delay = <100>; + fsl,spi-sck-cs-delay = <100>; + reg = <0>; + }; +}; + &esdhc { sd-uhs-sdr104; sd-uhs-sdr50;