From nobody Wed Oct 8 21:36:50 2025 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CC64B27F170 for ; Tue, 24 Jun 2025 10:36:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750761399; cv=none; b=A4dF9ymAgXIh1JN7sU03jlV9CiGx0iUdo1rzJfhggxkeG8NN0FASr5UVTLsZgMlDjxcvgZyBC3bhbIwuZImatfh1ep53H1Zl6JggWF/YEj/oDmI4plWF+KG3oAF7z5PWSNc15vI0T9s4HKk6r1PnLHZ4qAJbETdgerul2EL9lSE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750761399; c=relaxed/simple; bh=I6Uh0W1U/pEscoVd7miIYAu5wzDsffordzyPGY3jblE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AQcEMm5FuTRvFVYwYevXUnYoH7LLa+OWh1XmJqY74yCP3ayYEM/extUf6Wy72kk3CI6epj3n8wRQL3Xne7sYbpFppROJjZHeiR6bqwnNCFrvmXgeKTDYqg4Vf7z4qX9s/GYIcllZW+iwDH60VcmA8CxoQQBjmRHNq+g1F/wUhIw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=MTsaeuoh; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="MTsaeuoh" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-450ccda1a6eso44511215e9.2 for ; Tue, 24 Jun 2025 03:36:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1750761394; x=1751366194; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=jkMuSosV7oMRxRtp9yYE+2UdziIG4xoxewf16F9X2EY=; b=MTsaeuohoQk6rMfnmVu/5ocbrCIwViKarJ+wRU+41QIl2B2E5VEZej+r9pBCBxwSZq 4TmPFyxtmjLJ4Q3t4/ZT5YmJ5JBzfN6sbCVwg/ZBRegEU5APkC7uInrK0tBe19V8xrmq eFSrTWJFbDp+CY5wmFc1gayPNsAnJQPg2Pyg9/RfE4wfTjMM+f9jG8SCbwMBKcQAL4XD F/i9NnYLPDJtduMkY1LsD8mufwXlsbv0Eu0WWE+qXOsK5mEgI6pUYLqWhwrI97sczJcu tDouJ6bNfLyfpKRz7OvgiCWbLadw2TYulyPBZjn+BzMuu4ddCGbYFp2QncodqzMTJBbu K7rw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750761394; x=1751366194; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jkMuSosV7oMRxRtp9yYE+2UdziIG4xoxewf16F9X2EY=; b=q48ojoZtcF+FSiVwF1V9QzcvPjQguTjyowlgyPZFT8wLE/jYNNJbeCWpa3RFdTOfSR MVVDWRXGLLE5gfKy7w4c3hrgohL6htgE3GAeHVTNdHiQNH182/00MZGbWe6Fn7MTZoVE N0MAgGnJvEi8xTG/ZVeQWaLzYeAaoDg1g91PlN7dDernpFtusTb4LmL3C+b9jCykk9Kb Ut9M+3MDezGwUV4y6M3wgYyiM+h0MuWNlenvD1KXq1DVhEZI7ICbdbhxukyrXxgbgQr6 c7Pt0111XEeZ0Cva2PclJtwcDepRdkAwNBKydmCt5f5P7FSpj/4alC8ddWWRlwMOJJID N37g== X-Forwarded-Encrypted: i=1; AJvYcCXB1S7JsBbYCLZSmUhjlmorAC6A51xnnJ+BUssGOxORtixERdQgHZQdRM6m881/M0zfeKA5ruOHqccZOn4=@vger.kernel.org X-Gm-Message-State: AOJu0Yw/rcB9VqbV3U39L0jyDgg2s8+rUTncS3bHhJragW8dcKwcS0dV GvcL+E/go5Tx+OU1Mlf+gf4bDh1N1v4aG2vNqg/y14J7t3hm05C0Dfav63rLwJLipKY= X-Gm-Gg: ASbGncsvGI1KpXZ8kL6otzvyQcalw1PqNh3YvGmfViyjRLcMJWhEl9SI/D+KAyo9IN+ NImrQzRr2UHLbl42kztroCfb0bg6Z3QgKk3v7JelqXNmKjMsGNDp8zhKTuVAcXl3c7mWSf6x3av K3tEWz8ctbq/8v5bMzde62IzMHQifhbrupPexTzK2lInFGq3tGGRszpqcACAQV9wNfBlTnfCCqT f+HrQqMx4LLRz4I9Z9V8rL1cKo3FzpnDgUrr8i1sQ7XWdh77WfjPmtb8ScJ1E7kkpkSInAYmqEe dszJ8C8jQqXCj9uQ/ROFCAx/bbQkIdqe8HuK6yp/AQ0LyuMfQDesCZmEOgpLcVTe5Y1OSoE= X-Google-Smtp-Source: AGHT+IE1yzuJW1JyGG/GLYl2/Ucg2KNK2xeS+Q9P5XhB9Map8hlfvdK3p5oXRvu10nUbdGxDztsgdQ== X-Received: by 2002:a05:600c:8b14:b0:453:a88:d509 with SMTP id 5b1f17b1804b1-453659ca92cmr182600865e9.10.1750761393938; Tue, 24 Jun 2025 03:36:33 -0700 (PDT) Received: from ho-tower-lan.lan ([37.18.136.128]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-453646cb641sm143398245e9.3.2025.06.24.03.36.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Jun 2025 03:36:33 -0700 (PDT) From: James Clark Date: Tue, 24 Jun 2025 11:35:31 +0100 Subject: [PATCH v3 1/6] spi: spi-fsl-dspi: Clear completion counter before initiating transfer Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250624-james-nxp-spi-dma-v3-1-e7d574f5f62c@linaro.org> References: <20250624-james-nxp-spi-dma-v3-0-e7d574f5f62c@linaro.org> In-Reply-To: <20250624-james-nxp-spi-dma-v3-0-e7d574f5f62c@linaro.org> To: Vladimir Oltean , Mark Brown , Vladimir Oltean , Arnd Bergmann , Larisa Grigore , Frank Li , Christoph Hellwig Cc: linux-spi@vger.kernel.org, imx@lists.linux.dev, linux-kernel@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 In target mode, extra interrupts can be received between the end of a transfer and halting the module if the host continues sending more data. If the interrupt from this occurs after the reinit_completion() then the completion counter is left at a non-zero value. The next unrelated transfer initiated by userspace will then complete immediately without waiting for the interrupt or writing to the RX buffer. Fix it by resetting the counter before the transfer so that lingering values are cleared. This is done after clearing the FIFOs and the status register but before the transfer is initiated, so no interrupts should be received at this point resulting in other race conditions. Fixes: 4f5ee75ea171 ("spi: spi-fsl-dspi: Replace interruptible wait queue w= ith a simple completion") Signed-off-by: James Clark --- drivers/spi/spi-fsl-dspi.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 04c88d090c4d..744dfc561db2 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -1122,11 +1122,19 @@ static int dspi_transfer_one_message(struct spi_con= troller *ctlr, if (dspi->devtype_data->trans_mode =3D=3D DSPI_DMA_MODE) { status =3D dspi_dma_xfer(dspi); } else { + /* + * Reset completion counter to clear any extra + * complete()s from spurious interrupts that may have + * happened after the last message's completion but + * before the module was fully in stop mode. + */ + if (dspi->irq) + reinit_completion(&dspi->xfer_done); + dspi_fifo_write(dspi); =20 if (dspi->irq) { wait_for_completion(&dspi->xfer_done); - reinit_completion(&dspi->xfer_done); } else { do { status =3D dspi_poll(dspi); --=20 2.34.1 From nobody Wed Oct 8 21:36:50 2025 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C946A2868A7 for ; Tue, 24 Jun 2025 10:36:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750761400; cv=none; b=akRPFGNVio3orFDr4TKX0pNEe4Z32Bpt7LcvpzsLuAL9vaQVHDfuIUtTvSY6uMKdsKKLM4VIqIx6CAkeNoeRqlQUbxvIUM4KtKdhqWXd2neJ/2TNkY6qnbIAKLqowtb8xTLjJgiNgUWujVrc7zySlwppfwS4uj13Fx3oey2YZF0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750761400; c=relaxed/simple; bh=rPPHmIeX2TaVZwC9/dZT7uMHCVr3ystFWnOCxGonJdE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nP+lRSR998TrMPJ2D/HC8wp+r8snakTq6XnElit19m1mdCKIlAVng+DNYBNIe0r5FAamRWXZjFIOVhBabT/1syBwDA0zfH40fIW3AGfHR87QPYg2dYMcFw4+SOOMkODq1cerJeuPuDrOHI8rqBdjE3ORl5oN1dHLiPQJeeN4Z6M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=uk44DWTr; arc=none smtp.client-ip=209.85.128.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="uk44DWTr" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-451d7b50815so40761105e9.2 for ; Tue, 24 Jun 2025 03:36:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1750761395; x=1751366195; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=gysqRRatTbP7tTmH3nSH2f9cu6jlsK5Aa8DruBZasIA=; b=uk44DWTrDfVnc66GvbJycE91Y2cBI6zvTvQ5Sw9+AWxmIv2mRzFSWnhlnMvqgk19ya uvFGYNnOOJQfFpK0qwsjIKaGT/KQwhHPVMNLEdA2swfH/6V+8ZTH7TjhM2v+mERTMlzS 1ppnStPih/LTNTBz0GYX3JLPP6KjmrBnqXslKXkjs36Xa2w07FimbiSVyHCEXmEMysAS i3vw6+T9NCsIJIUN0aSHOXcsMyA6v/xILCcqWipf1xyYhsMQaEXJwrUv/JORKggFF+Mu CJ8Xli6IEVyW9A6sk5EIp8kBKXmW6jjECuclJRuXHZlBvse8vPKALN9GCzus5QW4B78F Q4Iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750761395; x=1751366195; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gysqRRatTbP7tTmH3nSH2f9cu6jlsK5Aa8DruBZasIA=; b=X7nxPgWZ9USDgdNn+OsH79JvVTdh6hKwThnf+d5E9aHc4ohusXLFNE7CMCT5DAPNvd y/MSY60Gj+Fs6xLCP3ugHjvRi6l21f60LaiRDDCNPKZoinfv+Yu9WcVNPgWePmehfuwW NHGWFxiiCIitPUSaIg+FkwQPXYdbE6vAQQ5xK6U/nF2o03+KyWD0N/RPg4nxx2f8fF+c yAvqs/wdyh3Rt82T2HLByWtWlDdgtrmzsbhw8XmK2tsZXrtq6QBwK2AxVN+4sJEqupPn 6UJFAN2HXpEvUqMxKPjb2QygH9dCMofuS+wa0VWgO7LVTJUUOFBfhfnlo9pBy1gCJA8O wGtw== X-Forwarded-Encrypted: i=1; AJvYcCXGFV3B24CM3ElXhNgXPa8yz/goB0XfmHWhc9cXqakBuIj7TEuq4yPYaUSlp6jOgbi4b7gHHWf92cIsoEc=@vger.kernel.org X-Gm-Message-State: AOJu0YwCn7Y19k+BD3guIS8etjpespmciVFiR7Sn0JaPMgXNKwO8QN3F QI63zCLf0ub8oZZGj1a+Yu8YLqg5lqztMt0vA+mVKSg4RZoYix1yAqRIsTmGeO33lWM= X-Gm-Gg: ASbGnctk+3rrb7YScDZ9y/EsC1rfnbecAToezkJNMYAyJ5CIA5SXm2H0iWzC0kHoQ4C 8bYJD8mDgWYlrBZid3bzMm7WC4hRH/1JIMx3Pq0yJOU20eOpyrxJLfnNzkm4gK5p1e99MAVeatO LUeHn5tPJ/qulftCBT0yt+BmEjFxYWCsiv2ObXRTpcnW4zzIkc76Lp7PkEMzPOHig/0lilo4eV/ I/pkb6+RoTqBlnJ3s/rA2UKYeIpAxOXgLPABZDFw91ww9WUSbTy3dqLVFsis7irvqoIFWB26qnK OcrCC1RAvOCGljlyFt0rh6reBEXT1trQXC17lAPlgb0EBs2DoGomiZ2lgRZLdq3qhw4j/6w= X-Google-Smtp-Source: AGHT+IFw0SflV4Dcc0L4irSH0AC03LWWYU+kHmLLJTkRqnESJXIae3FlSgpPvJNiF5otB/q7x9CqBw== X-Received: by 2002:a05:600c:1991:b0:444:c28f:e81a with SMTP id 5b1f17b1804b1-453659f5888mr134601975e9.27.1750761395024; Tue, 24 Jun 2025 03:36:35 -0700 (PDT) Received: from ho-tower-lan.lan ([37.18.136.128]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-453646cb641sm143398245e9.3.2025.06.24.03.36.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Jun 2025 03:36:34 -0700 (PDT) From: James Clark Date: Tue, 24 Jun 2025 11:35:32 +0100 Subject: [PATCH v3 2/6] spi: spi-fsl-dspi: Store status directly in cur_msg->status Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250624-james-nxp-spi-dma-v3-2-e7d574f5f62c@linaro.org> References: <20250624-james-nxp-spi-dma-v3-0-e7d574f5f62c@linaro.org> In-Reply-To: <20250624-james-nxp-spi-dma-v3-0-e7d574f5f62c@linaro.org> To: Vladimir Oltean , Mark Brown , Vladimir Oltean , Arnd Bergmann , Larisa Grigore , Frank Li , Christoph Hellwig Cc: linux-spi@vger.kernel.org, imx@lists.linux.dev, linux-kernel@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 This will allow us to return a status from the interrupt handler in a later commit and avoids copying it at the end of dspi_transfer_one_message(). For consistency make polling and DMA modes use the same mechanism. Refactor dspi_rxtx() and dspi_poll() to not return -EINPROGRESS because this isn't actually a status that was ever returned to the core layer but some internal state. Wherever that was used we can look at dspi->len instead. No functional changes intended. Signed-off-by: James Clark --- drivers/spi/spi-fsl-dspi.c | 68 ++++++++++++++++++++++++------------------= ---- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 744dfc561db2..feb29bb92a77 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -591,11 +591,10 @@ static int dspi_next_xfer_dma_submit(struct fsl_dspi = *dspi) =20 static void dspi_setup_accel(struct fsl_dspi *dspi); =20 -static int dspi_dma_xfer(struct fsl_dspi *dspi) +static void dspi_dma_xfer(struct fsl_dspi *dspi) { struct spi_message *message =3D dspi->cur_msg; struct device *dev =3D &dspi->pdev->dev; - int ret =3D 0; =20 /* * dspi->len gets decremented by dspi_pop_tx_pushr in @@ -612,14 +611,12 @@ static int dspi_dma_xfer(struct fsl_dspi *dspi) message->actual_length +=3D dspi->words_in_flight * dspi->oper_word_size; =20 - ret =3D dspi_next_xfer_dma_submit(dspi); - if (ret) { + message->status =3D dspi_next_xfer_dma_submit(dspi); + if (message->status) { dev_err(dev, "DMA transfer failed\n"); break; } } - - return ret; } =20 static int dspi_request_dma(struct fsl_dspi *dspi, phys_addr_t phy_addr) @@ -986,36 +983,40 @@ static void dspi_fifo_write(struct fsl_dspi *dspi) dspi->progress, !dspi->irq); } =20 -static int dspi_rxtx(struct fsl_dspi *dspi) +static void dspi_rxtx(struct fsl_dspi *dspi) { dspi_fifo_read(dspi); =20 if (!dspi->len) /* Success! */ - return 0; + return; =20 dspi_fifo_write(dspi); - - return -EINPROGRESS; } =20 -static int dspi_poll(struct fsl_dspi *dspi) +static void dspi_poll(struct fsl_dspi *dspi) { int tries =3D 1000; u32 spi_sr; =20 - do { - regmap_read(dspi->regmap, SPI_SR, &spi_sr); - regmap_write(dspi->regmap, SPI_SR, spi_sr); + while (dspi->len) { + do { + regmap_read(dspi->regmap, SPI_SR, &spi_sr); + regmap_write(dspi->regmap, SPI_SR, spi_sr); =20 - if (spi_sr & SPI_SR_CMDTCF) - break; - } while (--tries); + if (spi_sr & SPI_SR_CMDTCF) + break; + } while (--tries); =20 - if (!tries) - return -ETIMEDOUT; + if (!tries) { + dspi->cur_msg->status =3D -ETIMEDOUT; + return; + } =20 - return dspi_rxtx(dspi); + dspi_rxtx(dspi); + } + + dspi->cur_msg->status =3D 0; } =20 static irqreturn_t dspi_interrupt(int irq, void *dev_id) @@ -1029,8 +1030,13 @@ static irqreturn_t dspi_interrupt(int irq, void *dev= _id) if (!(spi_sr & SPI_SR_CMDTCF)) return IRQ_NONE; =20 - if (dspi_rxtx(dspi) =3D=3D 0) + dspi_rxtx(dspi); + + if (!dspi->len) { + if (dspi->cur_msg) + WRITE_ONCE(dspi->cur_msg->status, 0); complete(&dspi->xfer_done); + } =20 return IRQ_HANDLED; } @@ -1060,7 +1066,6 @@ static int dspi_transfer_one_message(struct spi_contr= oller *ctlr, struct spi_device *spi =3D message->spi; struct spi_transfer *transfer; bool cs =3D false; - int status =3D 0; u32 val =3D 0; bool cs_change =3D false; =20 @@ -1120,7 +1125,7 @@ static int dspi_transfer_one_message(struct spi_contr= oller *ctlr, dspi->progress, !dspi->irq); =20 if (dspi->devtype_data->trans_mode =3D=3D DSPI_DMA_MODE) { - status =3D dspi_dma_xfer(dspi); + dspi_dma_xfer(dspi); } else { /* * Reset completion counter to clear any extra @@ -1133,15 +1138,12 @@ static int dspi_transfer_one_message(struct spi_con= troller *ctlr, =20 dspi_fifo_write(dspi); =20 - if (dspi->irq) { + if (dspi->irq) wait_for_completion(&dspi->xfer_done); - } else { - do { - status =3D dspi_poll(dspi); - } while (status =3D=3D -EINPROGRESS); - } + else + dspi_poll(dspi); } - if (status) + if (READ_ONCE(message->status)) break; =20 spi_transfer_delay_exec(transfer); @@ -1150,7 +1152,8 @@ static int dspi_transfer_one_message(struct spi_contr= oller *ctlr, dspi_deassert_cs(spi, &cs); } =20 - if (status || !cs_change) { + dspi->cur_msg =3D NULL; + if (message->status || !cs_change) { /* Put DSPI in stop mode */ regmap_update_bits(dspi->regmap, SPI_MCR, SPI_MCR_HALT, SPI_MCR_HALT); @@ -1159,10 +1162,9 @@ static int dspi_transfer_one_message(struct spi_cont= roller *ctlr, ; } =20 - message->status =3D status; spi_finalize_current_message(ctlr); =20 - return status; + return message->status; } =20 static int dspi_set_mtf(struct fsl_dspi *dspi) --=20 2.34.1 From nobody Wed Oct 8 21:36:50 2025 Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CD0782868AF for ; Tue, 24 Jun 2025 10:36:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750761400; cv=none; b=rGTV1ldq/yFYX2+ruh93LaQrKfwvospSHsVliVgGZuLdssmvl//T8O5R/dpRviokrd88lf9AfWvlpnAGX7sCrQAeWlYDKGeQZ3W/5RUKuh3BP69JxJ5t4xi5wszBXlCXW3Yeoh7SLlTkS0lXSPyt/GzUwLN7VsnuQ2oa0P3hnr0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750761400; c=relaxed/simple; bh=Bc44HUdFlRBGiPqYEyrxvW7lVxJh2JmM3ACL/8dmNuU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZL85b/5z0+tYEQktiQLeafdiey9UPPV6BhydbTywNn2ZYmeXnJfrndx3czi2gJFg5zQNbIqTrX4FprpVFTQ3fD5dCwV25/glBtILSJmIFeqgslLAdmsVNGIoQZX7Ev6quCW7/SDHlirtC4Vg/YdeZchrHFd4ld+nOCIpqsZlGlM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=YDTxW/Gx; arc=none smtp.client-ip=209.85.221.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="YDTxW/Gx" Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-3a6d77b43c9so2669518f8f.3 for ; Tue, 24 Jun 2025 03:36:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1750761396; x=1751366196; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=WhsIPhnxdKWsYdEi1ghU1/oHIl+/WH0rhmItuuKdl/c=; b=YDTxW/GxFlm0tc2AxD5vfwRv9j5j5dPxiSQ5zDPcyise2tpybDIHA2MT/n4nsp3Kq1 1NfuSehPNv9XOys9YMgaCWi6VIKr+UYyN8BlMIEbqa1DX7EVSOLkIr4zxeXQyMPu0VKM e3n98GcfgQ+1/h3sA2B9XecEoDK4Pzn5osbbk7hB2rzrbmbkHEFPpZXmCK8Z98jujYRI bkuIC/De5ISslZBWTK7JVYhcJtmaPSGV/69lb266JHFLrNIuq4o9t3+ArxHeUUxj8oU+ KZU0eRNrw2rE51trYhL3Jv3kvutLUtyaw5gDbbw6Og18clJ8iqTt3xd/SGwa6ztNOM/0 HQng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750761396; x=1751366196; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WhsIPhnxdKWsYdEi1ghU1/oHIl+/WH0rhmItuuKdl/c=; b=QOGp1n4cju8INBn6IKPh9WJ0jfbeOtddxHXOsbSkXgTenz1aQA17HE3GSNInqZABYb u7BDsg+g6ZvrRQvqpTezw/TafJyhP9QUKWVNzYzEZ3/HomRSgAAkMdcWTakLkeXcDCs1 r5GTxDx3w09kDNTxLtzkeqBTp85NSWAd6V8YU16gifFrUvxzmmL0Td2aZ7PWbhRU9daK GcW+Fp0oPY2qlQFV6NEwvlil/xzdYOPPNMePdoaXDPf1jBhLqyrHUk5TF3iqZ3EDxTHc q/WXRQ9HE60xVw2g1xHnqysxZx3e8Qg5QU/3AWEEgMJcZTdh4Evh8hlHPN/o5heEMTuk 0KkA== X-Forwarded-Encrypted: i=1; AJvYcCVR4TPHbBuks5YP99IEFvPT7AwVT2VVT17rh6jAmFbZbyihOa7Gt7NP/c97Krw12ucYfhQaNCTd61KuqX0=@vger.kernel.org X-Gm-Message-State: AOJu0YzquOq4sb8Fw4nLuENPFLzTRtl/QuBZmtFJWEf9oX+bG04Qtsej DjsPKhg7y1RO8pQecnXx3PTPZq4ZYp7g/wsFSQGPWgK5XpxeSOsGqf1Jb39GtZM3oOQ= X-Gm-Gg: ASbGncsn1ipLdtTXgtgg2mx/xHU2g/tGk0Iv0SPBJrZoBmCyijMTwS3ZhHG2QM7KSn4 CLkIRlWC2kfVp/Xy+P51X13QIB15PLqv6rwdM32fNCXcYPSpEuOgXeEv/25E4Y+a3YC4QHR7j4v q942Hh8MiXpsgE8Htevfsrl+qasCVMyMh3RRbDXD1WWdLlTi+MAW6jGDCXzKX75bsGgX2/JANeJ k1+snephg+qI0c9OURc80IH3q+Y/Wz5nXUFP8Dc6nbFyf7gC5o7/zj85t/M50lk14GJhzTytSuI aLNEdwcVrsE8uk93v1RBq93IdkjRy4gyXqi9JHz0hCWufUYZUNyXmbIUVjY2/uebBzUXAwU= X-Google-Smtp-Source: AGHT+IGwIII2547BzKkspjqdAo45Jmh+wiE9tjt9HqPdqBs9RgITkmkDb4pqs/WiMRYtkkZacJt/KQ== X-Received: by 2002:a05:6000:178a:b0:39c:30cd:352c with SMTP id ffacd0b85a97d-3a6d12c43e6mr12087710f8f.8.1750761396110; Tue, 24 Jun 2025 03:36:36 -0700 (PDT) Received: from ho-tower-lan.lan ([37.18.136.128]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-453646cb641sm143398245e9.3.2025.06.24.03.36.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Jun 2025 03:36:35 -0700 (PDT) From: James Clark Date: Tue, 24 Jun 2025 11:35:33 +0100 Subject: [PATCH v3 3/6] spi: spi-fsl-dspi: Stub out DMA functions Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250624-james-nxp-spi-dma-v3-3-e7d574f5f62c@linaro.org> References: <20250624-james-nxp-spi-dma-v3-0-e7d574f5f62c@linaro.org> In-Reply-To: <20250624-james-nxp-spi-dma-v3-0-e7d574f5f62c@linaro.org> To: Vladimir Oltean , Mark Brown , Vladimir Oltean , Arnd Bergmann , Larisa Grigore , Frank Li , Christoph Hellwig Cc: linux-spi@vger.kernel.org, imx@lists.linux.dev, linux-kernel@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 This will allow the build to succeed with !CONFIG_HAS_DMA, either due to a randconfig build test or when the target only uses one of the non-DMA transfer modes which this driver supports. Signed-off-by: James Clark --- drivers/spi/spi-fsl-dspi.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index feb29bb92a77..8212c4193536 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -373,6 +373,8 @@ struct fsl_dspi { void (*dev_to_host)(struct fsl_dspi *dspi, u32 rxdata); }; =20 +static void dspi_setup_accel(struct fsl_dspi *dspi); + static bool is_s32g_dspi(struct fsl_dspi *data) { return data->devtype_data =3D=3D &devtype_data[S32G] || @@ -489,6 +491,7 @@ static void dspi_push_rx(struct fsl_dspi *dspi, u32 rxd= ata) dspi->dev_to_host(dspi, rxdata); } =20 +#if IS_ENABLED(CONFIG_HAS_DMA) static void dspi_tx_dma_callback(void *arg) { struct fsl_dspi *dspi =3D arg; @@ -589,8 +592,6 @@ static int dspi_next_xfer_dma_submit(struct fsl_dspi *d= spi) return 0; } =20 -static void dspi_setup_accel(struct fsl_dspi *dspi); - static void dspi_dma_xfer(struct fsl_dspi *dspi) { struct spi_message *message =3D dspi->cur_msg; @@ -722,6 +723,18 @@ static void dspi_release_dma(struct fsl_dspi *dspi) dma_release_channel(dma->chan_rx); } } +#else +static void dspi_dma_xfer(struct fsl_dspi *dspi) +{ + sdpi->cur_msg->status =3D -EINVAL; +} +static int dspi_request_dma(struct fsl_dspi *dspi, phys_addr_t phy_addr) +{ + dev_err(&dspi->pdev->dev, "DMA support not enabled in kernel\n"); + return -EINVAL; +} +static void dspi_release_dma(struct fsl_dspi *dspi) {} +#endif =20 static void hz_to_spi_baud(char *pbr, char *br, int speed_hz, unsigned long clkrate, bool mtf_enabled) --=20 2.34.1 From nobody Wed Oct 8 21:36:50 2025 Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E9F712874EC for ; Tue, 24 Jun 2025 10:36:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750761401; cv=none; b=gic1JvuZqyii39Re30FdO+b2s4KeEdDEOPposQW1HSQN2p3z8rr75cytFW/LzTuVjwJprahsSvOFwztrx7nJyH2M9FNWBm6mg5vg3E4hebXc9vDgVYWXoM3IatCPL10hKc4rQ2V7+1BJKNUeIKKBfos8O/iBEeE8XkEWUYmqpW4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750761401; c=relaxed/simple; bh=EIo8UQEK9JJZo6Yr7HcjRb0uvfHj1dsrPEXzaMvaVcY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HFl1MPBSbJVF8W2fLr4Jl3W6V37n0ZZkzRhhe+iWjQanXEkCejUcoTb44POTubMrYdudnwH60w0bQTpn7RJV47IKuyX3ostaGjDmZ/bZ10buizXws7bY8oml1Q6P9nt0Jg82H2x87v7OdTpynRHU85YyHVOlZUHvuxSleLCkYH8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=B6KBzXRI; arc=none smtp.client-ip=209.85.221.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="B6KBzXRI" Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-3a5123c1533so2628719f8f.2 for ; Tue, 24 Jun 2025 03:36:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1750761397; x=1751366197; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=yByveb+QWwpdlj6fZIGqjtAddBVVjLr6cg6k7hq9bAI=; b=B6KBzXRIdbT9qu3Dfy5GB5/Wuz6SW8zgGnyf2jrM/HzXRlp4VI46QIs/mLbKZlWo+P cPDY03PbH5Zb66iaLh2YqkbijsF0hq0UGKUhoVtCGqdvhpfDCSGtu4ldS2wNR2x2EyWk /bklDkzdAlZLKrhrJryEdSGP+sDdgD9GNCs18RL/kPlI1YCL5abYb49Sng/tjIetmMQy SQWRQsY1V8EjYxLo2UZ/I+Hw0xdFE2/A5iNj5XVOlx10XJOHts3jETxQoajbhQeREQb0 LEwqZOclab0b6iwEk2g4EaJ+n80/tEjhqNsWEVWBfjKFj4S97NaC1QfN3YeJajugeCsf iCpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750761397; x=1751366197; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=yByveb+QWwpdlj6fZIGqjtAddBVVjLr6cg6k7hq9bAI=; b=nzmUHSuGBHB5D+7sXvinv73KVTb9YGUzxRor6/7IRM5X4MF9yvw6qnBTXDl9PHqi+D v8A68vyYLIXEShven/v/1sHOCh7+tld/OMNyxIiF4yUFOhrefYmie608V9t8fv0C+MVi ouNkkQU1gxRFGfvSYbQXvHguG0MdYhV1eKQvBPYvVrN9swYO/IycXJnZIiiVpyDv8YMq 4EFnWu11JzOSuEzjF52GpgaB8pi4/JE6bcIS6uvO9tBgvsDd7qVQb+lqxpvc5VXmB776 4uXF6j82mzd3PGxeAv/WUkZVqMIXV8juy3lZ1gu0N37VkxlonvNYPrt8l89rtUu0lVPK 4goA== X-Forwarded-Encrypted: i=1; AJvYcCXCMIqW6G/n/9HfbCM2rTWIguLpjurWQEVXHhnvNtx0RtAMmMN9jsIr+BpitFeouS6DPqGHw0ve/gUIQIs=@vger.kernel.org X-Gm-Message-State: AOJu0YwXqdS00J5qT5CmzhBcc4+C29QJRq8uir3M3SrlXwCXVSlrBlzd CvsXN6gTdFAnHUffzF8srf79LAJ65B6WrHe9julBfYsZYTvNvflaGJ7lpgdo7Bslk90= X-Gm-Gg: ASbGncsLGGy9dgVMNqn5NNddl+j48Poy2w+D3vH+LHVA0UAk/GS0MTvVrlAYvv95zj/ 7wmmQ1shzQ1LBTkqAC94u7s2snggSjBM5QkRScQEju3aJuujKyytiWsVrjnKV7VuRr3lVHk7/S/ +cKzO5uApW6vyIjDynzOs/ArFmIA9emd9bDU6SjZw2P8pL/bo8mmchTFWIrPReLjq0DOtqWvjC+ EdM0fjRxXVljnYeRVmEPZKB8wCEaL7elkO239/vpVDsFL8wo62bmLphUQ7aTnFo1qoe4pNa+YPK dKlybVCJHBnCWTutwFC2s+zIRXrQBKAfytTHgyPjGQzS3qRdXLBem2JmIR0raebeHJuq1wU= X-Google-Smtp-Source: AGHT+IGqtZC+OMEg/cbcuU0+L6AZE/rEDM43V21E/KLrSJ/Lz2QOXzGgEBVldY6JiMoNuXeRqoNsUw== X-Received: by 2002:a05:6000:2308:b0:3a5:88cf:479c with SMTP id ffacd0b85a97d-3a6d12d52c5mr11376772f8f.30.1750761397115; Tue, 24 Jun 2025 03:36:37 -0700 (PDT) Received: from ho-tower-lan.lan ([37.18.136.128]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-453646cb641sm143398245e9.3.2025.06.24.03.36.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Jun 2025 03:36:36 -0700 (PDT) From: James Clark Date: Tue, 24 Jun 2025 11:35:34 +0100 Subject: [PATCH v3 4/6] spi: spi-fsl-dspi: Use non-coherent memory for DMA Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250624-james-nxp-spi-dma-v3-4-e7d574f5f62c@linaro.org> References: <20250624-james-nxp-spi-dma-v3-0-e7d574f5f62c@linaro.org> In-Reply-To: <20250624-james-nxp-spi-dma-v3-0-e7d574f5f62c@linaro.org> To: Vladimir Oltean , Mark Brown , Vladimir Oltean , Arnd Bergmann , Larisa Grigore , Frank Li , Christoph Hellwig Cc: linux-spi@vger.kernel.org, imx@lists.linux.dev, linux-kernel@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 Using coherent memory here isn't functionally necessary. Because the change to use non-coherent memory isn't overly complex and only a few synchronization points are required, we might as well do it while fixing up some other DMA issues. Suggested-by: Arnd Bergmann Signed-off-by: James Clark --- drivers/spi/spi-fsl-dspi.c | 56 +++++++++++++++++++++++++++++-------------= ---- 1 file changed, 36 insertions(+), 20 deletions(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 8212c4193536..172eb9929de1 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -492,11 +492,20 @@ static void dspi_push_rx(struct fsl_dspi *dspi, u32 r= xdata) } =20 #if IS_ENABLED(CONFIG_HAS_DMA) + +static int dspi_dma_transfer_size(struct fsl_dspi *dspi) +{ + return dspi->words_in_flight * DMA_SLAVE_BUSWIDTH_4_BYTES; +} + static void dspi_tx_dma_callback(void *arg) { struct fsl_dspi *dspi =3D arg; struct fsl_dspi_dma *dma =3D dspi->dma; + struct device *dev =3D &dspi->pdev->dev; =20 + dma_sync_single_for_cpu(dev, dma->tx_dma_phys, + dspi_dma_transfer_size(dspi), DMA_TO_DEVICE); complete(&dma->cmd_tx_complete); } =20 @@ -504,9 +513,13 @@ static void dspi_rx_dma_callback(void *arg) { struct fsl_dspi *dspi =3D arg; struct fsl_dspi_dma *dma =3D dspi->dma; + struct device *dev =3D &dspi->pdev->dev; int i; =20 if (dspi->rx) { + dma_sync_single_for_cpu(dev, dma->rx_dma_phys, + dspi_dma_transfer_size(dspi), + DMA_FROM_DEVICE); for (i =3D 0; i < dspi->words_in_flight; i++) dspi_push_rx(dspi, dspi->dma->rx_dma_buf[i]); } @@ -516,6 +529,7 @@ static void dspi_rx_dma_callback(void *arg) =20 static int dspi_next_xfer_dma_submit(struct fsl_dspi *dspi) { + size_t size =3D dspi_dma_transfer_size(dspi); struct device *dev =3D &dspi->pdev->dev; struct fsl_dspi_dma *dma =3D dspi->dma; int time_left; @@ -524,10 +538,9 @@ static int dspi_next_xfer_dma_submit(struct fsl_dspi *= dspi) for (i =3D 0; i < dspi->words_in_flight; i++) dspi->dma->tx_dma_buf[i] =3D dspi_pop_tx_pushr(dspi); =20 + dma_sync_single_for_device(dev, dma->tx_dma_phys, size, DMA_TO_DEVICE); dma->tx_desc =3D dmaengine_prep_slave_single(dma->chan_tx, - dma->tx_dma_phys, - dspi->words_in_flight * - DMA_SLAVE_BUSWIDTH_4_BYTES, + dma->tx_dma_phys, size, DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT | DMA_CTRL_ACK); if (!dma->tx_desc) { @@ -542,10 +555,10 @@ static int dspi_next_xfer_dma_submit(struct fsl_dspi = *dspi) return -EINVAL; } =20 + dma_sync_single_for_device(dev, dma->rx_dma_phys, size, + DMA_FROM_DEVICE); dma->rx_desc =3D dmaengine_prep_slave_single(dma->chan_rx, - dma->rx_dma_phys, - dspi->words_in_flight * - DMA_SLAVE_BUSWIDTH_4_BYTES, + dma->rx_dma_phys, size, DMA_DEV_TO_MEM, DMA_PREP_INTERRUPT | DMA_CTRL_ACK); if (!dma->rx_desc) { @@ -642,17 +655,17 @@ static int dspi_request_dma(struct fsl_dspi *dspi, ph= ys_addr_t phy_addr) goto err_tx_channel; } =20 - dma->tx_dma_buf =3D dma_alloc_coherent(dma->chan_tx->device->dev, - dma_bufsize, &dma->tx_dma_phys, - GFP_KERNEL); + dma->tx_dma_buf =3D dma_alloc_noncoherent(dma->chan_tx->device->dev, + dma_bufsize, &dma->tx_dma_phys, + DMA_TO_DEVICE, GFP_KERNEL); if (!dma->tx_dma_buf) { ret =3D -ENOMEM; goto err_tx_dma_buf; } =20 - dma->rx_dma_buf =3D dma_alloc_coherent(dma->chan_rx->device->dev, - dma_bufsize, &dma->rx_dma_phys, - GFP_KERNEL); + dma->rx_dma_buf =3D dma_alloc_noncoherent(dma->chan_rx->device->dev, + dma_bufsize, &dma->rx_dma_phys, + DMA_FROM_DEVICE, GFP_KERNEL); if (!dma->rx_dma_buf) { ret =3D -ENOMEM; goto err_rx_dma_buf; @@ -687,11 +700,12 @@ static int dspi_request_dma(struct fsl_dspi *dspi, ph= ys_addr_t phy_addr) return 0; =20 err_slave_config: - dma_free_coherent(dma->chan_rx->device->dev, - dma_bufsize, dma->rx_dma_buf, dma->rx_dma_phys); + dma_free_noncoherent(dma->chan_rx->device->dev, dma_bufsize, + dma->rx_dma_buf, dma->rx_dma_phys, + DMA_FROM_DEVICE); err_rx_dma_buf: - dma_free_coherent(dma->chan_tx->device->dev, - dma_bufsize, dma->tx_dma_buf, dma->tx_dma_phys); + dma_free_noncoherent(dma->chan_tx->device->dev, dma_bufsize, + dma->tx_dma_buf, dma->tx_dma_phys, DMA_TO_DEVICE); err_tx_dma_buf: dma_release_channel(dma->chan_tx); err_tx_channel: @@ -712,14 +726,16 @@ static void dspi_release_dma(struct fsl_dspi *dspi) return; =20 if (dma->chan_tx) { - dma_free_coherent(dma->chan_tx->device->dev, dma_bufsize, - dma->tx_dma_buf, dma->tx_dma_phys); + dma_free_noncoherent(dma->chan_tx->device->dev, dma_bufsize, + dma->tx_dma_buf, dma->tx_dma_phys, + DMA_TO_DEVICE); dma_release_channel(dma->chan_tx); } =20 if (dma->chan_rx) { - dma_free_coherent(dma->chan_rx->device->dev, dma_bufsize, - dma->rx_dma_buf, dma->rx_dma_phys); + dma_free_noncoherent(dma->chan_rx->device->dev, dma_bufsize, + dma->rx_dma_buf, dma->rx_dma_phys, + DMA_FROM_DEVICE); dma_release_channel(dma->chan_rx); } } --=20 2.34.1 From nobody Wed Oct 8 21:36:50 2025 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E201E2853E7 for ; Tue, 24 Jun 2025 10:36:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750761402; cv=none; b=txC8jDvhnt5FsMC9y4w5sHpuEBvHNkHyaegejaJzrOGsOP8olUciybCRjkrQInjoeWHgivbIdDPkLE+so955bOu8J0FbLN4vjf8kG9EJLiluA0tBtFOBrhjTMlqNHpGux+hSz4GlAjxYuedP4SMKQta2LMeAK0h4LyQoMzKBG+8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750761402; c=relaxed/simple; bh=CKzWP8Q57rTD8v8eYxui3RXOqALx6HFfj2YebUJ36GE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Ggt/rtXB/YMZwFKPfdh0ZocwKCQkLDGBM2rSFGCmBlwB2+Za6M1ALoB46gVDHIgZR4tRQuzA09qW0zvkKk8sNI2raScULFz0+0a+bHf7Gc0QeXsuh2iFuGm2r61MhvOzR6fymKC3W0nOaIMjgvbsDxDTfLeoy37K9IelEp8WEcg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=vLQTNkga; arc=none smtp.client-ip=209.85.128.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="vLQTNkga" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-442fda876a6so46277285e9.0 for ; Tue, 24 Jun 2025 03:36:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1750761398; x=1751366198; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=bkWlcH8jrZqIjUcA6hAY08QFifFzMj2nT0vEHV3qzH4=; b=vLQTNkgawl3wsghDV/SEjS8tsreyGBLbV4ZMyGy41b1Kx6pTC9d5xyMwX8dAfQDsRN F4zBPFh6Gvfu1QIeLN66YZZiIysFhTsMKlhxNdWQD/Z+QUgvVZbICpmELuWd5vptLZpk PHGllma6F5zDfb83014J3iB6j8lnxnos5aYFhb7VKmhMsyocimZI4QXAeMQcXx6FUdwH j/X1d4Who1lgnY9mlOSVWGwmWd3JgsSL088C6uh8t1WpKVGSiAT0ioRaJ0I6KdeHooiP h3RQBtwBkwXrRrHjK1JJNF1XfBAkPU/wBplBpEtaA8zo54AtmPzSh1ffCifgWBqeEWfB Fvug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750761398; x=1751366198; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=bkWlcH8jrZqIjUcA6hAY08QFifFzMj2nT0vEHV3qzH4=; b=jQB35cU3sSf12AnUn6sd0W4nXcmID8pMtoTMPTeJOZtWU7yeyY5ot9pKbEVUCX1DZ1 YkLwM7+o4ErtONwd86JtyumU0TmJj+ANrtU165OuymtQaomHrNFbR+dfi7WN6Om8n5CL ATe6UvYvRBTxlKeWFOy+1VE3mpgfoqig7SsPKRb6pyEWhDPLr8wR3ZC9gWgc1OVbxudN DHB2QcenFHFLg5OCEzfTopDIcpko1KhQEKUGxNuZLRJNJJCvVPG/AjKs9qVBn7KrgrjL FAwjT2H/9pcp5IfnXE9i4ojowwTsdIa3TX0sQin/e54Jlcn69HCU5u6CebkDHaQ9vtZf n8xQ== X-Forwarded-Encrypted: i=1; AJvYcCVR6Uyo0poWW7ITUp+NI3cUYFzR7SuGklMSoAGfBBkgSUNAXagwu2PdRJfFI+L7Vp38QDmTYHIT4XMhm0c=@vger.kernel.org X-Gm-Message-State: AOJu0Yyzz64+4N+YZJ3mDrl49Sdl3r859YjEKnq4U1qrbqntG8VfSGjb 4GXAC3z+J5N3onP5U/GZAuOvaQVWZ6gX5R3wjeZOyxgEp8WaIQIS2c9xfAWbULw2cWJ2Fe+cbgb Yfl0E X-Gm-Gg: ASbGncuJ5zUpkv83oNORFQzL0rXDKwnh3KPo182bgc/DyjHOjnCsO3qVb3Txqu8VKkl 9CODfLiXVuNRol4Ek45MuST787eKnaC6p/1DLRgSUAhNFBFCfZBd8G+VBDQ/Q9jEDs7u4NvixTq F4j6BFaWvxH1Wlq2w67CEPVzT89IZA9xidZZT8cd+bJrYGlcarkHw0fbL+gCynG2VVz668slNfM yIMvUkOn2Zhta5Ut0TLWA9+PukZJWjJPG5tUpIV5BN06Onu/Hm1PImG/J9xjWqw8P8EIcn8bEO1 0dfRdXRRqqz9mDNE+GGVH2RAXBry5uxJXWjEO5R3FXJRcSpTlGhqj4HGc4lSJ1Ab2thm6+U= X-Google-Smtp-Source: AGHT+IEtSD4anpzO9q+ug4r6yS1A/sOVZcXXes4XAOF9ARsdeysAtYamMmoek830XIR0wKgHigDVrw== X-Received: by 2002:a05:600c:a07:b0:43c:e70d:44f0 with SMTP id 5b1f17b1804b1-453659cb8e5mr128723565e9.19.1750761398202; Tue, 24 Jun 2025 03:36:38 -0700 (PDT) Received: from ho-tower-lan.lan ([37.18.136.128]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-453646cb641sm143398245e9.3.2025.06.24.03.36.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Jun 2025 03:36:37 -0700 (PDT) From: James Clark Date: Tue, 24 Jun 2025 11:35:35 +0100 Subject: [PATCH v3 5/6] spi: spi-fsl-dspi: Increase DMA buffer size Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250624-james-nxp-spi-dma-v3-5-e7d574f5f62c@linaro.org> References: <20250624-james-nxp-spi-dma-v3-0-e7d574f5f62c@linaro.org> In-Reply-To: <20250624-james-nxp-spi-dma-v3-0-e7d574f5f62c@linaro.org> To: Vladimir Oltean , Mark Brown , Vladimir Oltean , Arnd Bergmann , Larisa Grigore , Frank Li , Christoph Hellwig Cc: linux-spi@vger.kernel.org, imx@lists.linux.dev, linux-kernel@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 From: Larisa Grigore When the device is configured as a target, the host won't stop sending data while we're draining the buffer which leads to FIFO underflows and corruption. Increase the DMA buffer size to the maximum words that edma can transfer once to reduce the chance of this happening. While we're here, also change the buffer size for host mode back to a page as it was before commit a957499bd437 ("spi: spi-fsl-dspi: Fix bits-per-word acceleration in DMA mode"). dma_alloc_noncoherent() allocations are backed by a full page anyway, so we might as well use it all. Signed-off-by: Larisa Grigore Signed-off-by: James Clark --- drivers/spi/spi-fsl-dspi.c | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 172eb9929de1..58881911e74a 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -493,6 +493,39 @@ static void dspi_push_rx(struct fsl_dspi *dspi, u32 rx= data) =20 #if IS_ENABLED(CONFIG_HAS_DMA) =20 +static int dspi_dma_bufsize(struct fsl_dspi *dspi) +{ + if (spi_controller_is_target(dspi->ctlr)) { + /* + * In target mode we have to be ready to receive the maximum + * that can possibly be transferred at once by EDMA without any + * FIFO underflows. This is CITER * SSIZE, where SSIZE is a max + * of 4 when transferring to a peripheral. + */ + return GENMASK(14, 0) * DMA_SLAVE_BUSWIDTH_4_BYTES; + } + + return PAGE_SIZE; +} + +static int dspi_dma_max_datawords(struct fsl_dspi *dspi) +{ + /* + * Transfers look like this so we always use a full DMA word regardless + * of SPI word size: + * + * 31 16 15 0 + * ----------------------------------------- + * | CONTROL WORD | 16-bit DATA | + * ----------------------------------------- + * or + * ----------------------------------------- + * | CONTROL WORD | UNUSED | 8-bit DATA | + * ----------------------------------------- + */ + return dspi_dma_bufsize(dspi) / DMA_SLAVE_BUSWIDTH_4_BYTES; +} + static int dspi_dma_transfer_size(struct fsl_dspi *dspi) { return dspi->words_in_flight * DMA_SLAVE_BUSWIDTH_4_BYTES; @@ -608,6 +641,7 @@ static int dspi_next_xfer_dma_submit(struct fsl_dspi *d= spi) static void dspi_dma_xfer(struct fsl_dspi *dspi) { struct spi_message *message =3D dspi->cur_msg; + int max_words =3D dspi_dma_max_datawords(dspi); struct device *dev =3D &dspi->pdev->dev; =20 /* @@ -619,8 +653,8 @@ static void dspi_dma_xfer(struct fsl_dspi *dspi) dspi_setup_accel(dspi); =20 dspi->words_in_flight =3D dspi->len / dspi->oper_word_size; - if (dspi->words_in_flight > dspi->devtype_data->fifo_size) - dspi->words_in_flight =3D dspi->devtype_data->fifo_size; + if (dspi->words_in_flight > max_words) + dspi->words_in_flight =3D max_words; =20 message->actual_length +=3D dspi->words_in_flight * dspi->oper_word_size; @@ -635,7 +669,7 @@ static void dspi_dma_xfer(struct fsl_dspi *dspi) =20 static int dspi_request_dma(struct fsl_dspi *dspi, phys_addr_t phy_addr) { - int dma_bufsize =3D dspi->devtype_data->fifo_size * 2; + int dma_bufsize =3D dspi_dma_bufsize(dspi); struct device *dev =3D &dspi->pdev->dev; struct dma_slave_config cfg; struct fsl_dspi_dma *dma; @@ -719,7 +753,7 @@ static int dspi_request_dma(struct fsl_dspi *dspi, phys= _addr_t phy_addr) =20 static void dspi_release_dma(struct fsl_dspi *dspi) { - int dma_bufsize =3D dspi->devtype_data->fifo_size * 2; + int dma_bufsize =3D dspi_dma_bufsize(dspi); struct fsl_dspi_dma *dma =3D dspi->dma; =20 if (!dma) --=20 2.34.1 From nobody Wed Oct 8 21:36:50 2025 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E29E4288CBE for ; Tue, 24 Jun 2025 10:36:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750761404; cv=none; b=crylBumW1J/39ARUg+RBWzgOoc/6aTT0vsn5ueKh80DF9STOORTcqo4C2CRQo2nBMfqzj0OX/0zs8xysdo18eNc6IHRIB57EIzY66nYW0kfNE0srASFSOHWzh509cePQjWmcelN5LIw1mPoJcNM7ug6JFTMl3ybWTIl1/zYAgkE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750761404; c=relaxed/simple; bh=X4TMFyCSx8+go3pfcWGphm0X5j2rswwDLDyFMqRvmhs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dRowk4/FgJxlPVTcbILrHr+c4eNq/EXAfDGCL+b+IT2mqMxkOyDUsvz178RqbPSVuiAVU3wyq7wephvgrERKe4qP3eZiosFaFeWBgHu7fR0zWwGT0tc1EfSrlZaE6eVlMWPwZYPa93f/pfl3O7E7JXra0B6d7v9CUe49z+roUT0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=HGNkWtKj; arc=none smtp.client-ip=209.85.128.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="HGNkWtKj" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-451d41e1ad1so1990875e9.1 for ; Tue, 24 Jun 2025 03:36:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1750761399; x=1751366199; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=WfaJB4wgBJF9kKkXQUfWPFPPVgluIefucU17tIlexuI=; b=HGNkWtKjyS+loBQXGemKg+KQ4MT/yigDhQJwr4+0UCsQ1XVODFiXTyoVSl47BZr4ao WOvxAGztnXTdg2dcqrlqWT2a72fJDuw4oRGNmvnD11av5kh6nQoZFNXAWNW4D7ywcZoM qo6EQqVyy+H/fa9uOmwqMaJpAzysT2hHEYctL3tAYjiILcsyKT9m6+FNCnpJleD5ZAFl fDU78B3B/MrEI5O30Ga0V6487+cgxefLd4V1k/5yAIWPKIJr8ljg+4gkpLw7EmwzFYh2 U7orl8p7kAgR79On/LT43X3ivCh7/ZfV3UNMR5c3ceRn/kIoliNcpYC1f9mB3R47oP7L nlRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750761399; x=1751366199; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WfaJB4wgBJF9kKkXQUfWPFPPVgluIefucU17tIlexuI=; b=NVGq+Wx1YOq+0KNi1We+dD4AfdwxxeZa3P8Z2j0uRRm3TvWlig85N49QfuT9sKhTh8 t/YIy8BnerlEyiM6HbgYMWWws29V08Op0/cmAisLCyHYPUeloSYKRax63doVTqoSNIDV ijlkgZrzWSDHtd323V0GG/Kd6yrbVk/re9lt7WGowqJnaJA5sd4D0xB3GyyJ4wUaqJRK rFxBZkxUTw4xADW0LZtbA/YBRzm7E/2MohpgcbXGKK424ASwEwxx/tNW/H0g/LSkzzVp hCJblmvcFRgdwtudEU9uXlMw6E6n9zyByqVzavNDl0pVodx2qzTtOrU8j4y1X5Y3yMcj Tl5Q== X-Forwarded-Encrypted: i=1; AJvYcCWPvKwfCNNR9gp4cZ2ziojuE4jfBfr/LuC/3m+aBasYQv9byxPKtw3rb5X7QqBHjbqUZ1ejwXtEPCn7mDo=@vger.kernel.org X-Gm-Message-State: AOJu0YyEiAK+Emtsq0Ugp9BQIVyC5rnrxOST+SbvyQl57ZsTtmUWN2p7 Ai6Krvb23HQNXxrlfnKGQxCOGRygz4lRM9utJcOr5XXC3ceoQK9uiYiftKQVxbWqfQY= X-Gm-Gg: ASbGncuMoHK2Bdv6lIEXIrdJh1ZM/9eIBUiBGj5042AFv9N9f/u7/eQXvcQq9YacIuX ++m075BWCcNz8q085sBExNJoDYEJCAWV6WBiz3ZF1qNWRnUpjVX75DZLvATFxN+68h1BWguEhBJ DO6wUP5IyJCK5RKrJ4OTkmH2DVv0cPXE+a1Dg8CnUHKu2yyC6ubaKIuqlNYY8Lk+8CG+FptSFov j447pKyA1WnV1Q2nRzDqFqnyXJzhW+GreVBQ9D1+r5E+iQ52e0xO298v6OBya1h+eNWYyZcgSC7 MlLl5ZkcTPBHv+xYZM9VyNQ4HBQyQmDEjthwNQDu25GeJqVzIWLWqFxLUbOys+1eGn6pdLM= X-Google-Smtp-Source: AGHT+IFjHGQ/H+wHW0syoZB/rCcGbth7MceBuzjub/X3klVhpmcprnqWAMJ0DPRZSe/+ArGUdMIdMg== X-Received: by 2002:a05:600c:5250:b0:442:f4a3:b5f2 with SMTP id 5b1f17b1804b1-453653925f1mr135996935e9.6.1750761399129; Tue, 24 Jun 2025 03:36:39 -0700 (PDT) Received: from ho-tower-lan.lan ([37.18.136.128]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-453646cb641sm143398245e9.3.2025.06.24.03.36.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Jun 2025 03:36:38 -0700 (PDT) From: James Clark Date: Tue, 24 Jun 2025 11:35:36 +0100 Subject: [PATCH v3 6/6] spi: spi-fsl-dspi: Report FIFO overflows as errors Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250624-james-nxp-spi-dma-v3-6-e7d574f5f62c@linaro.org> References: <20250624-james-nxp-spi-dma-v3-0-e7d574f5f62c@linaro.org> In-Reply-To: <20250624-james-nxp-spi-dma-v3-0-e7d574f5f62c@linaro.org> To: Vladimir Oltean , Mark Brown , Vladimir Oltean , Arnd Bergmann , Larisa Grigore , Frank Li , Christoph Hellwig Cc: linux-spi@vger.kernel.org, imx@lists.linux.dev, linux-kernel@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 In target mode, the host sending more data than can be consumed would be a common problem for any message exceeding the FIFO or DMA buffer size. Cancel the whole message as soon as this condition is hit as the message will be corrupted. Only do this for target mode in a DMA transfer because we need to add a register read. In IRQ and polling modes always do it because SPI_SR was already read and it might catch some host mode programming/buffer management errors too. Signed-off-by: James Clark --- drivers/spi/spi-fsl-dspi.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 58881911e74a..16a9769f518d 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -560,12 +560,24 @@ static void dspi_rx_dma_callback(void *arg) complete(&dma->cmd_rx_complete); } =20 +static int dspi_fifo_error(struct fsl_dspi *dspi, u32 spi_sr) +{ + if (spi_sr & (SPI_SR_TFUF | SPI_SR_RFOF)) { + dev_err_ratelimited(&dspi->pdev->dev, "FIFO errors:%s%s\n", + spi_sr & SPI_SR_TFUF ? " TX underflow," : "", + spi_sr & SPI_SR_RFOF ? " RX overflow," : ""); + return -EIO; + } + return 0; +} + static int dspi_next_xfer_dma_submit(struct fsl_dspi *dspi) { size_t size =3D dspi_dma_transfer_size(dspi); struct device *dev =3D &dspi->pdev->dev; struct fsl_dspi_dma *dma =3D dspi->dma; int time_left; + u32 spi_sr; int i; =20 for (i =3D 0; i < dspi->words_in_flight; i++) @@ -614,7 +626,8 @@ static int dspi_next_xfer_dma_submit(struct fsl_dspi *d= spi) =20 if (spi_controller_is_target(dspi->ctlr)) { wait_for_completion_interruptible(&dspi->dma->cmd_rx_complete); - return 0; + regmap_read(dspi->regmap, SPI_SR, &spi_sr); + return dspi_fifo_error(dspi, spi_sr); } =20 time_left =3D wait_for_completion_timeout(&dspi->dma->cmd_tx_complete, @@ -1069,6 +1082,10 @@ static void dspi_poll(struct fsl_dspi *dspi) =20 if (spi_sr & SPI_SR_CMDTCF) break; + + dspi->cur_msg->status =3D dspi_fifo_error(dspi, spi_sr); + if (dspi->cur_msg->status) + return; } while (--tries); =20 if (!tries) { @@ -1085,6 +1102,7 @@ static void dspi_poll(struct fsl_dspi *dspi) static irqreturn_t dspi_interrupt(int irq, void *dev_id) { struct fsl_dspi *dspi =3D (struct fsl_dspi *)dev_id; + int status; u32 spi_sr; =20 regmap_read(dspi->regmap, SPI_SR, &spi_sr); @@ -1093,6 +1111,14 @@ static irqreturn_t dspi_interrupt(int irq, void *dev= _id) if (!(spi_sr & SPI_SR_CMDTCF)) return IRQ_NONE; =20 + status =3D dspi_fifo_error(dspi, spi_sr); + if (status) { + if (dspi->cur_msg) + WRITE_ONCE(dspi->cur_msg->status, status); + complete(&dspi->xfer_done); + return IRQ_HANDLED; + } + dspi_rxtx(dspi); =20 if (!dspi->len) { --=20 2.34.1