From nobody Fri Oct 3 14:34:22 2025 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.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 D7A472D0C8D for ; Fri, 29 Aug 2025 11:47:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756468047; cv=none; b=VQuv/gUG7sG8CrjM9TSWrv7qgqHrWIjNuuv8cwEqr9gS3jT7PeKfhgeDoRuzx0Wb85kCkKCkbTaIykvDAxiGIZCyi9Xdgr3JlYeBKnh40NticF9T56Tby9ct5OAIGH22wUI5S6+w8KcZWDd0yD0MmcK+2dekL6wAajThnhCNpeE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756468047; c=relaxed/simple; bh=SJcfNlBFzk+a4oHyKnj5riOiYRcAEXt/WpJ/ZMOki4U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dT27PWcMfG0Se0p89xB10NYt7NnmCQ7AV0kd8QfOgF8XxKvtz73eHmCpeo2are1GBl0PV/vjlCWl14woTTKa1JlcoaQTmo63vf4izbr5v1yl7SAoIvb6WveHn27TYi0UBHosKSZmWXZRVWqosjNe03HUTlCJkcbHp3vwL3c7iJM= 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=E5UjA0/3; arc=none smtp.client-ip=209.85.128.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="E5UjA0/3" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-45a1b066b5eso11615865e9.1 for ; Fri, 29 Aug 2025 04:47:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1756468044; x=1757072844; 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=xW+Oe2QcsURx3U6b3nBFCY8yPP0337LLQjhu7L4oQOg=; b=E5UjA0/3HEpstfv1SC8oTKbjm7Tz6e2LZJpTPhNXWg//fLYURXwoY1hOekAM+GNvSV zd6m5QaACkndDwoLg9CLPm+2TrR1ClACMhtK7t+YQESUHiV2AzJAcB4ClO6hPtj2TvpP n0ZkquyWEG5qNVPCZHg8Gy2RJ6Rb9Y+iLg/ciSjzQtGtTC0KqzCb7DtJfRgnxgU4RNaa KkQfLOr9flx+c9zU4rDYjt+aGdAQyIimJj0BUS5PTdHedYXYEkfeOfg8vYkcs5NQQjNT 3BY2BJaRpUiub0qmQmpb0HYz9cNMAk1DX8ReWN2guBCkXV/HvXnFrjdZ58JAFmA+kZWw /zlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756468044; x=1757072844; 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=xW+Oe2QcsURx3U6b3nBFCY8yPP0337LLQjhu7L4oQOg=; b=HejA4pXaSdYhkyn5poKCSzL5dbllneOgmtV6i3nYWY4/jb0n8gcyM5atGtO3bpX7Ks za7eMvUSCg32VUlZacKJiGa28yHmafAXzo8JApsFAu/nN9lKpNT1m45AJeKdyc1TTP/I x4V8QJ1j2YssFdem8aAV5KqCSdX4o0AIsj4DYKd1FE/BAG2neQ1D20f/X14gp0Xd4moF rjn8xbvzRP9OM4eQ6QrBLL8Q5YzHaXbfdInym6etMvxR9tfTa+byu3dGiHKBPQgx7cUy 4JEadTB/EftcVWA5ONrV1xfxiPTw7VVwDN5tapgvE+S2F5hRuDkPIJF0OemGg6Nh6j17 EXHA== X-Forwarded-Encrypted: i=1; AJvYcCX6Ymbo02JuKZTOymbVDxamw6SJRJ/QaexH5wVfgI3S4Fhnp/ALFkluPWIFWEC192nJuneOXfmZhai7Y8c=@vger.kernel.org X-Gm-Message-State: AOJu0YwIID/Twxfcegx2DiLtOvGb5doCJiDdR2WS8zNACyxtOqay7VB6 G9YvvxB2co2swpUBnwMrUdJR/HGXLXqXqGYb9CW/z7JOvvQ7V/KgqR2kvBJR9qqJefw= X-Gm-Gg: ASbGnct2U7cbLXBEf2xOL4feL23wQnfymfLTOVHJwBXJvSr8GZdkP4h6cg30b2sCY2U wNNu7/fdjJv/6MbXdGMt0fjng9ExFbbTqLbg/cFxXsazLy3FSCcMa8uFv9A/niLe5bdv1Dm+90q oUxbCPluHcyFa6rnR9J6j8J1VvdShNaVlZXlelzMwKKAK1oje9fO2A2zan7T/fIvWhUeRihlIGx jE3b03c97/7+Rgzoxibjyqv0N8Y+belWeNFHjfKMocNeE+JeznxOdF06UyoLOPuJirMfVhN9qcR m08GrZgO+5Lu9UcDoHdc93bBBySXPevi9rterWGl6Qhctm2peeWLbhzqzHZBXAADeHRWowQDV3X Bw9PW4BBRLObrvRzlQy4kOyYInV6rzA8= X-Google-Smtp-Source: AGHT+IE9+qIKv+jkEpFOA36WurHcVsP6/n5G6O6yYPB6+PEgSMTfb3Bx/lwORRZac4tVlbkSsE5ilw== X-Received: by 2002:a05:600c:4692:b0:456:1514:5b04 with SMTP id 5b1f17b1804b1-45b517b9636mr214898345e9.21.1756468044084; Fri, 29 Aug 2025 04:47:24 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.76.109]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b7c461edasm29873255e9.9.2025.08.29.04.47.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 Aug 2025 04:47:23 -0700 (PDT) From: James Clark Date: Fri, 29 Aug 2025 12:46:43 +0100 Subject: [PATCH v5 1/7] spi: fsl-dspi: Avoid using -EINPROGRESS error code 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: <20250829-james-nxp-spi-dma-v5-1-3246957a6ea9@linaro.org> References: <20250829-james-nxp-spi-dma-v5-0-3246957a6ea9@linaro.org> In-Reply-To: <20250829-james-nxp-spi-dma-v5-0-3246957a6ea9@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 Refactor dspi_rxtx() and dspi_poll() to not return -EINPROGRESS because this isn't actually a status that is ever returned to the core layer but some internal state. Use true/false return value on dspi_rxtx() for this instead. This will help separate internal vs external status for the later change to store the external status directly in cur_msg->status. No functional changes intended. Signed-off-by: James Clark Signed-off-by: Vladimir Oltean --- drivers/spi/spi-fsl-dspi.c | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 4bd4377551b5..654905a358e8 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -986,36 +986,45 @@ static void dspi_fifo_write(struct fsl_dspi *dspi) dspi->progress, !dspi->irq); } =20 -static int dspi_rxtx(struct fsl_dspi *dspi) +/* + * Read the previous transfer from the FIFO and transmit the next one. + * + * Returns false if the buffer to be transmitted is empty, and true if the= re is + * still data to transmit. + */ +static bool dspi_rxtx(struct fsl_dspi *dspi) { dspi_fifo_read(dspi); =20 if (!dspi->len) /* Success! */ - return 0; + return false; =20 dspi_fifo_write(dspi); =20 - return -EINPROGRESS; + return true; } =20 static int dspi_poll(struct fsl_dspi *dspi) { - int tries =3D 1000; + int tries; + int err =3D 0; u32 spi_sr; =20 do { - regmap_read(dspi->regmap, SPI_SR, &spi_sr); - regmap_write(dspi->regmap, SPI_SR, spi_sr); - - if (spi_sr & SPI_SR_CMDTCF) + for (tries =3D 1000; tries > 0; --tries) { + regmap_read(dspi->regmap, SPI_SR, &spi_sr); + regmap_write(dspi->regmap, SPI_SR, spi_sr); + if (spi_sr & SPI_SR_CMDTCF) + break; + } + if (!tries) { + err =3D -ETIMEDOUT; break; - } while (--tries); - - if (!tries) - return -ETIMEDOUT; + } + } while (dspi_rxtx(dspi)); =20 - return dspi_rxtx(dspi); + return err; } =20 static irqreturn_t dspi_interrupt(int irq, void *dev_id) @@ -1029,7 +1038,7 @@ 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) + if (dspi_rxtx(dspi) =3D=3D false) complete(&dspi->xfer_done); =20 return IRQ_HANDLED; @@ -1137,9 +1146,7 @@ static int dspi_transfer_one_message(struct spi_contr= oller *ctlr, if (dspi->irq) { wait_for_completion(&dspi->xfer_done); } else { - do { - status =3D dspi_poll(dspi); - } while (status =3D=3D -EINPROGRESS); + status =3D dspi_poll(dspi); } } if (status) --=20 2.34.1 From nobody Fri Oct 3 14:34:22 2025 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.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 527422D97BF for ; Fri, 29 Aug 2025 11:47:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756468049; cv=none; b=onpf1Av6zdY2LT+nYnyilEZnULe7WBYGK1NsU6pwXsCcSzK5jjHrVUT1bVD7EcU4yIsUWRBDx9liLnUPhqAn5s1oCg/A4Kx8vAjPIiYxy82S6z35/9wIwlg45GhskjNb0lPt3MOc7sgslKckHrMsvEJx08v+fsWe5BD0c4vFpfY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756468049; c=relaxed/simple; bh=C9oJkV3mHs12c4uHbbNxH2PTvvxlVuP9ivdk16TivuE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cb/4IjE1JSw5qrOzhyXSUtphdkC8SycyzFHsLA7G59DPbbgCF+cL2eZSJE3nAVXbtTkinFitcFR31W4MxzR8U5ngz2CHUjaWa1SD8EXW2dnFKpz1Bqh2ioSQLN5IpNJNYrUZO76DoXX30v9LGAy34F39zjzqkptO/55r7YlwVak= 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=H7k8Nqn7; arc=none smtp.client-ip=209.85.221.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="H7k8Nqn7" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-3d0dd9c9229so375464f8f.1 for ; Fri, 29 Aug 2025 04:47:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1756468045; x=1757072845; 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=kn8pqlkvI8BkvlrFlfSozqitc0dmKXQH5rpgTQNMM/U=; b=H7k8Nqn7oSWOjFdXemMUDl+9DJVoeA+oy/zhCjpX5K3/VnBDEERdOYygZdQgvtrWyi g3SLZ+JlQrg9JnbkRVfl4NIUPX+vIEH3FdFAb8Z0ZNxOnZedEB6iqYYIC3sj1gls8p+8 dvFi9mlVZyh4IcJ0DYGXS/bdvayUiTXdw2QPueqWXuBbB2ZtGSnmKowumF2RNgY9NeH4 cOODr1wPto/H1CGGPaUAJ0jy6jShlC2BmsmNNVgTqvWvL6yYGvMqWBReJq7NjVaI6n0I hsoeDjii/4aYDffeDMQULS3xDbi3cj0xpprauFErUhP6i2+o2FF979tyg7Wiqg0vcuqb VZnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756468045; x=1757072845; 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=kn8pqlkvI8BkvlrFlfSozqitc0dmKXQH5rpgTQNMM/U=; b=HAQyWjcL9bi+++WpuFc6VNLWl4YmiqFdBNZ/JxPeJL5UeoUUHcNeSjEBOfTBQvRtIh qxxQhfluCYJwZM7LuoM/jrp1+UtwUqpcn1v6JVtNYe7CKgheYYnIetj7cqJkG8DO8qtG ArtSgjxbG4LEC8V8N9iJjgZxBxhW5sZZnLxhMu+ui0rt51T3C+9NnOtsKypennr+bIPt E+w19QSQZDP6SpkoLwlWP8lxphj14n5QuEKg7jOKDsc2jg/IEXkeqDsZu4Kncgg0OWKu PvbXbi/gSIKY5zWNnnyk3kjdnxDxS/N9Uw6ECpLYj0QYlLtRaQfIQY+fH5USRhV/NsLz iSxA== X-Forwarded-Encrypted: i=1; AJvYcCWCbLc9hOd4WVDCjT/idsapixCCAJ4byEUHULN+TOts2tQlOMYQFIcH8DbjM9nkjTTaaO4ZOQEczvoG3Jw=@vger.kernel.org X-Gm-Message-State: AOJu0Yw41s48qme44Jy68u9NEVOx6rn6hVKrZGk2lvtoCTuteWWm3bcN b39X3illXZTdfgbj29JcfG2RwE1yx6UGLDjdHE72HmWa7d2P8PQY0e1A8Q5laM6oT1Q= X-Gm-Gg: ASbGncvAPgcyH2t6AwxmavocdXJjhzPrLUNalcK3Svbqq/c2HpU3D+IlFfL5+rNDxDr klX8ysWBvISQPTyZyezvVwCvuXfhC5bP7BUNzxm0fJn+gtChDqiE4t3udAwpJizCD7AX+EJmp8c 9b+syTvNZlwqMc5epnQ0d9o2KDp2bDDIql4gmi+nlG5ifYw0jKYt37XPiqIyYtRUMIklMbXWnZU jFxBFz0IjOQKMIYOxtUEp2/KwhIiJHnbuh/H7v7uXuDD/UnsMPFCzO3hpCGhUTPUMYwBwBExdp2 SFxReGNrRFd0YJECeTnuiDcBZwF14GJFPH8yO1RvM0PIRovdnfMlYcbndeORQMc6VgxjvnfY8zo pqy7UPYbDX2WvsHWp6FsDpQAbCL2bsobs5c6xV1BXQQ== X-Google-Smtp-Source: AGHT+IGL0ASm2uIQQ/Qffa54YZ9HYmMBFCSp1SC5y1m58lh0NhcYdhBoEVrKo1g6jmgY6sni2jL9PQ== X-Received: by 2002:a05:6000:2289:b0:3c9:58b0:dad4 with SMTP id ffacd0b85a97d-3c958b0db85mr14887558f8f.35.1756468045401; Fri, 29 Aug 2025 04:47:25 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.76.109]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b7c461edasm29873255e9.9.2025.08.29.04.47.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 Aug 2025 04:47:25 -0700 (PDT) From: James Clark Date: Fri, 29 Aug 2025 12:46:44 +0100 Subject: [PATCH v5 2/7] 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: <20250829-james-nxp-spi-dma-v5-2-3246957a6ea9@linaro.org> References: <20250829-james-nxp-spi-dma-v5-0-3246957a6ea9@linaro.org> In-Reply-To: <20250829-james-nxp-spi-dma-v5-0-3246957a6ea9@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. No functional changes intended. Signed-off-by: James Clark Signed-off-by: Vladimir Oltean --- drivers/spi/spi-fsl-dspi.c | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 654905a358e8..48054932d517 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) @@ -1005,7 +1002,7 @@ static bool dspi_rxtx(struct fsl_dspi *dspi) return true; } =20 -static int dspi_poll(struct fsl_dspi *dspi) +static void dspi_poll(struct fsl_dspi *dspi) { int tries; int err =3D 0; @@ -1024,7 +1021,7 @@ static int dspi_poll(struct fsl_dspi *dspi) } } while (dspi_rxtx(dspi)); =20 - return err; + dspi->cur_msg->status =3D err; } =20 static irqreturn_t dspi_interrupt(int irq, void *dev_id) @@ -1038,8 +1035,11 @@ 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 false) + if (dspi_rxtx(dspi) =3D=3D false) { + if (dspi->cur_msg) + WRITE_ONCE(dspi->cur_msg->status, 0); complete(&dspi->xfer_done); + } =20 return IRQ_HANDLED; } @@ -1069,7 +1069,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 @@ -1129,7 +1128,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 { /* * Reinitialize the completion before transferring data @@ -1143,13 +1142,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 { - status =3D dspi_poll(dspi); - } + else + dspi_poll(dspi); } - if (status) + if (READ_ONCE(message->status)) break; =20 spi_transfer_delay_exec(transfer); @@ -1158,7 +1156,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); @@ -1167,10 +1166,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 Fri Oct 3 14:34:22 2025 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) (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 EBBAE314A77 for ; Fri, 29 Aug 2025 11:47:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756468052; cv=none; b=kpdC3sKcUkpSKwVMW3TsL3qPTWPTiT2LMr031BbRtj0p4XeRImDJKGsiDeHSJRESvXP2wwoHIRS5ceGfLYWMvR/QYZmEEV2BBIcW6dVnKiDSXCSkYAhEgpN6dmuFzneShhdqmxcL1gzJhqUHQUGtR4gMIEHGYsO4XCKKNU4LB6Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756468052; c=relaxed/simple; bh=ntK5L5T/QM76W3rTDaszRT95k+dCoyl1H2FWmC7FW6o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TJFn3eHVV/Zdj8lDWvBLrMm8FMxdY2v/sLBh3wV90nBm8WPVaWbYmKeF7ghkVYF7F4XRWhblmAdX45j7UtxYd4RD95mdBUC76X5/GzvhOzAMT85kJs3zLNCAe3ckoLTXDu43cYyclaykkmqE7EKswXEP70pF4moBLNvwjbQtVt0= 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=rGZtQzCu; arc=none smtp.client-ip=209.85.221.53 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="rGZtQzCu" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-3b9edf4cf6cso1495211f8f.3 for ; Fri, 29 Aug 2025 04:47:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1756468047; x=1757072847; 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=xKPM1NaI+rLr+WfS0ckt9fLMpS/+n3/5mziB0NSyT44=; b=rGZtQzCuNgt1J9rNRUNom0KzBMSiDWRMSlhOfJGprrDykRxqMyuEXRd7DaAgLgRF3g EPvutMa/W1ByNKRPT19+8hZoB977AZKV2pi+efmc2G0MZ0WSckUwYdh9wsAvXuIO9+iO RKjA0wCeyqa1eAYQ6wdYoGGdGGIOL2kk0sJUwi/qDsfGQXRJD7oG2kL7jq/3imyNDF3H vP9kVBBaUDiJZn5EfzL31kpcmVXCdf4oacpAWh8dyrHLsQ0LlQXT3CjcBsXqGE41ZhgU NkoEgtqpT7vvpaXRoMWwmVzHkrP0Vq7+mK9kdCAhKCHy/tIsbDZ4IpuEd4ENq6MpM2bQ iGmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756468047; x=1757072847; 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=xKPM1NaI+rLr+WfS0ckt9fLMpS/+n3/5mziB0NSyT44=; b=gzasFMVmbYtO74kHw0UPB7HtE62QwMrSlBmR4TtBjgjOZnNVgDjYfXAM8GtSUzNORf jbbkXQxnvgWWdOzX87t+HM5cq9ksKPYqyDY0NmLJ9++ihSkZkVHcj5+ZBbvFNL3gPAPu B0Mj5MFK8oUBz+ayAKsMmHcDj7ORojFLrhP+8lr/n2tvERxpPxy1N7dPhdvPbj/NImJu K78ompx+R7tFt3bw+IDX5lm/YykGRl6de8tjzsC6XH3Xq9md3+c0MT1I6igphLnGYIH9 pmkE1e2T6WjHg41vTrlmeVNL3s9vmzZeOuf3OwUMToxGGC8Ffemi/s6wNKqHTM1gOc/V fF/Q== X-Forwarded-Encrypted: i=1; AJvYcCX2ZEG+G1QcKYF9Lmp3Bs15axstvuITGRYf5ckf2U/GVNV6aXkxLbDiF0dA3RnxOWpIkTyNfCAyHxs7eFY=@vger.kernel.org X-Gm-Message-State: AOJu0YxzWjT/kDSI11AIoqvw6uMCOw/bzYOEvr4KbJ6z6gvVeq+sVxK8 7Cup672YHUtzvDrB2cIdCef8gxmCc+pc+wkL3uNS4Gx00w0v5rXkruPuUPNmb2qQgeY= X-Gm-Gg: ASbGncujdkmENPxeeT6VxjsaHy0XTo9oFOchO2yHa4yAmBy/M4MBYzBbIA+el2MDFYS zbOwK2pmUFn/Nl3jgDEwt+EBtpAdudvhWCWC3WtoPFUIvt0nNUeXMPkKpoJS6B5ac+ov/RO9bOb DlaxUmYk9PchJxupTWCVySQphmrBbUliwUuP1zuR8hD6L7VF6OES3rK/FfiRAzvgcVfUf4Ewxo7 RkFg8dagJ6Waw1EX9N+gGzcbWApW4pOdd2+mUWC0mntJBsOO+L7lNvHdFY5vitZ9YcJ7WcfdHuC Zjm7pkxL3mf2NzjYY4oIJtWEQbvH0oT7zfsYunSSNXirBdjHgKO0R3J8rkL95c1c10EU5oIJvO4 Fd7amYSl5ghDm4jfYijkVi1WenjJoNmGrviXW4whu+g== X-Google-Smtp-Source: AGHT+IHv+Gaestx0qRxtBdc4nmSi3ic1F/o/Ny/4cEGuBY1B1TJaPYSMMe0sdfWbsW9bjcLeH/F+Ow== X-Received: by 2002:a05:6000:290f:b0:3d0:b3cc:c1ff with SMTP id ffacd0b85a97d-3d0b3ccc6bdmr1514886f8f.39.1756468047268; Fri, 29 Aug 2025 04:47:27 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.76.109]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b7c461edasm29873255e9.9.2025.08.29.04.47.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 Aug 2025 04:47:26 -0700 (PDT) From: James Clark Date: Fri, 29 Aug 2025 12:46:45 +0100 Subject: [PATCH v5 3/7] 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: <20250829-james-nxp-spi-dma-v5-3-3246957a6ea9@linaro.org> References: <20250829-james-nxp-spi-dma-v5-0-3246957a6ea9@linaro.org> In-Reply-To: <20250829-james-nxp-spi-dma-v5-0-3246957a6ea9@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_DMA_ENGINE, 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 | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 48054932d517..0baf7e0608f2 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] || @@ -468,6 +470,16 @@ static u32 dspi_pop_tx(struct fsl_dspi *dspi) return txdata; } =20 +/* Push one word to the RX buffer from the POPR register (RX FIFO) */ +static void dspi_push_rx(struct fsl_dspi *dspi, u32 rxdata) +{ + if (!dspi->rx) + return; + dspi->dev_to_host(dspi, rxdata); +} + +#if IS_ENABLED(CONFIG_DMA_ENGINE) + /* Prepare one TX FIFO entry (txdata plus cmd) */ static u32 dspi_pop_tx_pushr(struct fsl_dspi *dspi) { @@ -481,14 +493,6 @@ static u32 dspi_pop_tx_pushr(struct fsl_dspi *dspi) return cmd << 16 | data; } =20 -/* Push one word to the RX buffer from the POPR register (RX FIFO) */ -static void dspi_push_rx(struct fsl_dspi *dspi, u32 rxdata) -{ - if (!dspi->rx) - return; - dspi->dev_to_host(dspi, rxdata); -} - static void dspi_tx_dma_callback(void *arg) { struct fsl_dspi *dspi =3D arg; @@ -589,8 +593,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 +724,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) +{ + dspi->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 Fri Oct 3 14:34:22 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 0CED6314A80 for ; Fri, 29 Aug 2025 11:47:29 +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=1756468052; cv=none; b=WKArUVLeliSMtFI1U+0tw+ZXUMnM03rYoC2hMR2rX5f3TX9eFZdWLAfvpBBIFHinT36Sgae+Wm4dHZPyjkVb67DKva8ZAS8gMSLhe/4l+1igzQdsgqSCzRpsf79Q5mMFqBndkQ6qQRqhWVTMS8u9TWrXqz/Hg8hkWFZUg249nQQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756468052; c=relaxed/simple; bh=Y91ohFlywuuOqzu3Tlam2ze85WKTB7vkK2PK+gGBXyk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=g9M6RZUp7XCh6WSIgNqQC4V61Wvn7mKlQoz4CvLzkn9w3aI2MlV1LMfy1k6o67xjrljHgvAr+E9UYVG6tgzJgVLXapx1mJA8Bv++GVTcZUJ4NPSK0tFSmP8zcYKBAxiGvCY7y+kjpzpTZHhHcx8zqWiLffneFhnxuYf4d/C6aMs= 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=yVrZWCa8; 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="yVrZWCa8" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-45b83ae1734so222965e9.0 for ; Fri, 29 Aug 2025 04:47:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1756468048; x=1757072848; 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=eQp6NWY2QTc4ozrR/xRG6ASSI6SHhnIsdKywX21k0ZQ=; b=yVrZWCa8p8zZK60/VO1a/xbFWFpKqXs41UpjRNcxrAS0VbuXYhhXZ/oIap+essmCsY btYbxRWmg3vunHlhcLRxvA/lIzLjqRqZ+8DkBkYr6Pf4VyFoO4HErfwIhnm8iJ0ZBOf8 aa0kTKVtiJGMAY5bMPFvNGi+knPUp1Pj5MPoDzrY3j4p5kEhmErMrFCePvtcpkoqZinO 8nuSkYZ7B9lbG0liIvGPQHop8FC2vYufem7SdLfXZHuZKlhk5H6sKR0begy83lA+HQlu Zz6ckWqGoK/D8gUxUyYXnCadKat5ygFCzW6KAsu3PQmkTtE95xTGEMt8MMKFcLk0awTI Ql+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756468048; x=1757072848; 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=eQp6NWY2QTc4ozrR/xRG6ASSI6SHhnIsdKywX21k0ZQ=; b=XNBBhDB8qiPyvsOypO2C438n6HXA1MdHqXAxFQAgoxivP96sbyTTYbcnCEEwAYxDlG pYsEKeUInjFmaU4JEhE/QHOBakBq67jqQ2uT6LdH/BSKAayCw9huDBo7mXNIujYqFH/d M2MjjZ38v676OCu7QQVUfIkzoPIF9b7w0sdhKiW+/s3hdUqD0iU/qeJH39dsyUs8QbQH OJGh0Gw/Wc1joco5ayezcUSD0LT++SfA4MB+sJlQY9cXGqfPZOnwR8o342A7CfXZNjk8 R6fng1zRiD0DAXvkYjJKwLf6PszpR51L1UhRy8g1kfuSBKp9Kv0IrqbDzvGUaWboY9HZ jsrQ== X-Forwarded-Encrypted: i=1; AJvYcCVfX/Xe7J1eVgrJ2VX+h3ObcICCwz+rjthN39N3jxVw90OS0sewwD75Wal7g1CZgs7i6+FoZFc0NSBuUic=@vger.kernel.org X-Gm-Message-State: AOJu0YwOeAxx80ZW4uUnk1RI5EBQ3SJw7+gODaEEC9s3eJGt3eIkahSf ASkrvoHlhNI9PoeDqsSfVc0UXHugrq6juji5wO7MVO4ln4HLMTLJGUq65KCe6Lz5kVY= X-Gm-Gg: ASbGncvqJEQ7O4VyXqz2EjlhIGwqE8pJOL3uNsmPLHIQt9wM4YaMTYS9fKG25mQGOTy e/CW3gGurZA3l3EIE2o/A05g9djZv8X3dvugJCqQmIjGUjPbK8N9lMtFEoonlpBKfrIcJyoLojy vYcCO/SkZPUV8y7dvBS4yV88ORkQc/dhcmIY06Ti6jx82+vD1xlwSVHZgXwP+GoizYrRJGiOjAK Tz8nmBgKdG8dQ8zQKaaeKWjztcToTGT0mICQH3lb3whbTuAcr4BJKJl5w9RQ9HcjS//oUzSinVV 2bLwGYP+7qUmURtGZM2V0149rZgrN3+UrTXWUUsCYeWJ1Zwnbx4qJHee0QTTUeFT1zPgGcktgrk dCvw9+gq6zXTuP6Vhl671Hc7r3DfTdt9Ecwc9Sub/wg== X-Google-Smtp-Source: AGHT+IH8KwfZBQ4nBA66UTh9TpCQ7FkF2eS86H/0NZMW3Kuh37xGLb484Nqj8yF/tw4ZGsIRDLeCUA== X-Received: by 2002:a05:600c:19cd:b0:458:be62:dcd3 with SMTP id 5b1f17b1804b1-45b517c2fc0mr284031215e9.17.1756468048262; Fri, 29 Aug 2025 04:47:28 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.76.109]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b7c461edasm29873255e9.9.2025.08.29.04.47.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 Aug 2025 04:47:27 -0700 (PDT) From: James Clark Date: Fri, 29 Aug 2025 12:46:46 +0100 Subject: [PATCH v5 4/7] 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: <20250829-james-nxp-spi-dma-v5-4-3246957a6ea9@linaro.org> References: <20250829-james-nxp-spi-dma-v5-0-3246957a6ea9@linaro.org> In-Reply-To: <20250829-james-nxp-spi-dma-v5-0-3246957a6ea9@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 , Frank Li X-Mailer: b4 0.14.0 Using coherent memory here isn't functionally necessary, we're only either sending data to the device or reading from it. This means explicit synchronizations are only required around those points and the change is fairly trivial. This gives us around a 10% increase in throughput for large DMA transfers and no loss for small transfers. Suggested-by: Arnd Bergmann Reviewed-by: Frank Li Acked-by: Arnd Bergmann Signed-off-by: James Clark --- drivers/spi/spi-fsl-dspi.c | 55 +++++++++++++++++++++++++++++-------------= ---- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 0baf7e0608f2..17a29fde5f2d 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -493,11 +493,19 @@ static u32 dspi_pop_tx_pushr(struct fsl_dspi *dspi) return cmd << 16 | data; } =20 +static size_t 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 @@ -505,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]); } @@ -517,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; @@ -525,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) { @@ -543,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) { @@ -643,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; @@ -688,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: @@ -713,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 Fri Oct 3 14:34:22 2025 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (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 0BAF9314A92 for ; Fri, 29 Aug 2025 11:47:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756468053; cv=none; b=mK/vOTwI3xBW4GEQ4Bfc+VgmoSSGUgLcU/kRK1Ths3Pvm5vU8qirMh5yTyCvbKyLJG399q87QlxHVZ0jgWQqju1ZBpZdG4SDn/VNg9aMjUPc10MXbobeqTdFB12jRX4Q+UFMk0IjKoLlNNK7e+2TvsLUkjy+HUnNsVA8Ix4816M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756468053; c=relaxed/simple; bh=DgsXUQfNQQ8H+1qKFk5FOqTs661FVobzz59TKt1pgdE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kvcngkAPgTFWkKyzBq3+wS2tnjZwm6nLRGM9gdJdSHthc57ZulXvlv5gkmoxTWMWM8okGSvhGlQBaL4sZQPwD4Zu/dMJ3rNW0bFYK/XzqiWe8RQuNBflejULgu6Z1dCD8jCMBDlTkd3AqJhMW/csltsdRKI7W5P/RaFemGoUQlw= 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=A2uluKHH; arc=none smtp.client-ip=209.85.128.53 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="A2uluKHH" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-45b7d497abaso10103095e9.0 for ; Fri, 29 Aug 2025 04:47:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1756468049; x=1757072849; 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=8OejD1btu1PABc+C65VmRFefF/pm146gBHhoS9D7UZE=; b=A2uluKHHshorm2VEX26A0uxANGGNm/Giw5jp/aHdfqLMUWfc4RFDHv97SJ7GQG9QdY xiiTCCvf06xSx9ttHV2BGSyPf9KS96z6xTFHOBRC4fZrpYVBL8LZofYQElfKlmWurXDs Qv+pKROTux62oj2sirw/GWc6fQ31VEkMJTZuhpONUAQ9tkIZlGymq/wGNRyXcesKJyao 6Ws/5iw7OdAz1hcJzC1vYPH246QKpb9u0LqaMYc9rckQiJLzWbakTE9Hn31QNvAiNeth xvd50+Qo7cYcKA+fQmpcXO5zcnExKP6uZroHhfTpJXwmAaet75PXNlSkyahRZLj/1+Xw VP8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756468049; x=1757072849; 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=8OejD1btu1PABc+C65VmRFefF/pm146gBHhoS9D7UZE=; b=PqgO28mv17b4DN3PsUGrmrePaxVX6PP+Sm57YROzU3Zr8WS37GVpBq3C6Wp+0f8QDU limVys+IHBMn1AAZJNxIfks5PUOfi7hh7rpmklBifuHsdjDJ5LFbNDWNiSnL3hoO1iVT M1XKwWCc347ZJY8K/bf8IComVTxDhm7XW62JhNwJc82SGc249xdQ/g0tLFMfmt0iSq8F Cqbjosu61WDdHmcD47q6lJM6je56bE9m61hUehtorn7cmt0nVTtG18esqzIynSW5CAjr shxiObPahFF6ewK1ckeWSRIfghARwXzmLtR90Zvjcf+J8hDgrGWlCQxzBcOZIlc/Dfot BICA== X-Forwarded-Encrypted: i=1; AJvYcCWlOJ77QUJneMUrL7SbjWbynInLT7fd4nt4MNk/bJvX/voC+FPb35ViMn4yZ+A7EQBIlED8ZhpSgfZ04xg=@vger.kernel.org X-Gm-Message-State: AOJu0YzhxgRoAmldQ5wfoEDR5a3EkeGRcELgiJemWKWflWY1/sb3iJXP sGXuh0wFNri5fRyiD2EOiMFcQ26jqz6zkK1UMqDETAbAVD8Yy63+f9JOs9VNDg96Clg= X-Gm-Gg: ASbGncutnfEeh86Qw1A9Q4ZDSyn4RaHaa213O2iRXLKdm9PO+PHqIeCx4tiMjIjJItP gxlbeWOnDVMgf4mJ/w8kyrRobcAv1+p4RGQpTajUnSZIFk+uoGmZEWVRvhvTHIpLSPRm0B+FUmb 1Oi9XGCrGYKiaHlzeH74ERcf3N4FxldGSmn292Nvffa9p5ITjdFNs8tz0BBUg4MGtt1eEyaXM9k aSTQHWNUI7Ao5+ZnGelBI3JIzWB8nIARLEtmonwj5WCaBdgAZCJ36gZzs5IFNKRdFtlDaWJ/6r4 B/fhQZRZkllQLzkoNA7SKnPU0uomcweQru+QYXsWZ4iWjgMb9WJJ74bRmlJYmMUAyZzmHfJHlgR J/Mw3C2HF2euX+S5T/YW6m/3/H1JX/C0MOBwg3fbfs7Jx+Ykb479g X-Google-Smtp-Source: AGHT+IGv3mKOogBfMIHLrJFf2PhjPggF9Nmps05p5PyCIOhszPit62W4D+H4HB3jJoTbneYXzEZDLg== X-Received: by 2002:a05:600c:4a22:b0:45b:7580:6f29 with SMTP id 5b1f17b1804b1-45b75807bd4mr41966635e9.4.1756468049350; Fri, 29 Aug 2025 04:47:29 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.76.109]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b7c461edasm29873255e9.9.2025.08.29.04.47.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 Aug 2025 04:47:28 -0700 (PDT) From: James Clark Date: Fri, 29 Aug 2025 12:46:47 +0100 Subject: [PATCH v5 5/7] spi: spi-fsl-dspi: Use whole page for DMA buffers 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: <20250829-james-nxp-spi-dma-v5-5-3246957a6ea9@linaro.org> References: <20250829-james-nxp-spi-dma-v5-0-3246957a6ea9@linaro.org> In-Reply-To: <20250829-james-nxp-spi-dma-v5-0-3246957a6ea9@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 dma_alloc_noncoherent() allocations are backed by a full page anyway, so use it all. VF610 devices used to use the full page before commit a957499bd437 ("spi: spi-fsl-dspi: Fix bits-per-word acceleration in DMA mode"), but others still used the FIFO size. After that commit, all devices used the FIFO size. Now all devices use the full page. Signed-off-by: James Clark --- drivers/spi/spi-fsl-dspi.c | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 17a29fde5f2d..0e5f65d58342 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -331,6 +331,8 @@ struct fsl_dspi_dma { dma_addr_t rx_dma_phys; struct completion cmd_rx_complete; struct dma_async_tx_descriptor *rx_desc; + + size_t bufsize; }; =20 struct fsl_dspi { @@ -493,6 +495,24 @@ static u32 dspi_pop_tx_pushr(struct fsl_dspi *dspi) return cmd << 16 | data; } =20 +static size_t dspi_dma_max_datawords(struct fsl_dspi *dspi) +{ + /* + * Transfers look like one of these, 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 / DMA_SLAVE_BUSWIDTH_4_BYTES; +} + static size_t dspi_dma_transfer_size(struct fsl_dspi *dspi) { return dspi->words_in_flight * DMA_SLAVE_BUSWIDTH_4_BYTES; @@ -618,9 +638,8 @@ static void dspi_dma_xfer(struct fsl_dspi *dspi) /* Figure out operational bits-per-word for this chunk */ 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; + dspi->words_in_flight =3D min(dspi->len / dspi->oper_word_size, + dspi_dma_max_datawords(dspi)); =20 message->actual_length +=3D dspi->words_in_flight * dspi->oper_word_size; @@ -635,7 +654,6 @@ 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; struct device *dev =3D &dspi->pdev->dev; struct dma_slave_config cfg; struct fsl_dspi_dma *dma; @@ -655,8 +673,10 @@ static int dspi_request_dma(struct fsl_dspi *dspi, phy= s_addr_t phy_addr) goto err_tx_channel; } =20 + dma->bufsize =3D PAGE_SIZE; + dma->tx_dma_buf =3D dma_alloc_noncoherent(dma->chan_tx->device->dev, - dma_bufsize, &dma->tx_dma_phys, + dma->bufsize, &dma->tx_dma_phys, DMA_TO_DEVICE, GFP_KERNEL); if (!dma->tx_dma_buf) { ret =3D -ENOMEM; @@ -664,7 +684,7 @@ static int dspi_request_dma(struct fsl_dspi *dspi, phys= _addr_t phy_addr) } =20 dma->rx_dma_buf =3D dma_alloc_noncoherent(dma->chan_rx->device->dev, - dma_bufsize, &dma->rx_dma_phys, + dma->bufsize, &dma->rx_dma_phys, DMA_FROM_DEVICE, GFP_KERNEL); if (!dma->rx_dma_buf) { ret =3D -ENOMEM; @@ -700,11 +720,11 @@ static int dspi_request_dma(struct fsl_dspi *dspi, ph= ys_addr_t phy_addr) return 0; =20 err_slave_config: - dma_free_noncoherent(dma->chan_rx->device->dev, dma_bufsize, + 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_noncoherent(dma->chan_tx->device->dev, dma_bufsize, + 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); @@ -719,21 +739,20 @@ static int dspi_request_dma(struct fsl_dspi *dspi, ph= ys_addr_t phy_addr) =20 static void dspi_release_dma(struct fsl_dspi *dspi) { - int dma_bufsize =3D dspi->devtype_data->fifo_size * 2; struct fsl_dspi_dma *dma =3D dspi->dma; =20 if (!dma) return; =20 if (dma->chan_tx) { - dma_free_noncoherent(dma->chan_tx->device->dev, dma_bufsize, + 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_noncoherent(dma->chan_rx->device->dev, dma_bufsize, + 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 Fri Oct 3 14:34:22 2025 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (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 EA07A314B62 for ; Fri, 29 Aug 2025 11:47:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756468053; cv=none; b=dbY3Fk6I3zyi73mauewfL06P9xljNeV89iW6utGhL77IPC86oFkt8qOb4R7Gf+qxeMoa8FXzK64Gy2iD+5NDDUNG6w7FYBSlMSYsycI+aka3I8IfEPv0Ivsr1Hwcc9cVyGYBdeYDg7cRJTuxpJwL2Kn2UGYr6avlrQxtNOz7rJM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756468053; c=relaxed/simple; bh=bTUKpVXwp9125KIPPU8YBtuFfyyzlP1eFCD8gRj3p3Y=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jHgE5Grs2WVX98k9extBO9AHKpaQSdEm6Sapbo7wXgEQG+YvMu2lEyc1osrTGyZG0WwCC98MNk08Tnv16b/UdTp5I3pzNFzcEaTiiv5iPsepkKvdzhmsuTQ2js9YRjYEOIMVYTuArvM0rZ2RsfnYB6YzDpZ2ppMWjpMbIGSMigU= 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=yC3td3pP; arc=none smtp.client-ip=209.85.128.48 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="yC3td3pP" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-45b618e067eso22006465e9.1 for ; Fri, 29 Aug 2025 04:47:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1756468050; x=1757072850; 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=Og+6Xc5xVCmdDpeujz/1JM5sB4nNH/Jrk3ZxlgxIXaM=; b=yC3td3pPa4IdmO9hA6HREwOVnB2x0XO5lwX8SNDvkDbvoEwymeLQ8SCZbPkHgEA1wp 8OiPSwchxUtn5uH4TiDJGkvoj+a2Y4dT5JT6dvB/ZC/sbNOpVwlo1z2pDqhjxO+Y+/Ac BH68cEAFQHY1pzRMcLf5QntTHXbHRQsnqypanJQvomxB4u5liyaImI/RvxWp39tUob9i maZmI3iu+JknpMbUgMKVaqYplKuTL3YdKAVI83J+58VUQHi7fPrneIWnfaXnVBtqPRZ0 +KlRHXoEhO1wRR9V/6B+c9y5HxjqZR1IdRohDKdSXs476Wjak8GvY+e8gsyuwukzeL7k R/2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756468050; x=1757072850; 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=Og+6Xc5xVCmdDpeujz/1JM5sB4nNH/Jrk3ZxlgxIXaM=; b=uEChjEzNIfjTDIUntTUFc58QiwSsnHIbQ65a7yCM+IwKVJtkQXF1beShCGpeinty4K m1/6y0mJqHPsp4EEgtDPkdFxL0+QR7ngJcrsAcvLAFzLBCO8N3H2z7N/xnS14TizN+Aq 5NbBJhvh4z049dBLyWlZMA0umb78Lrzpt+gQCIFu6KV75NU5mfWx1TaOOiFO1ILQAbIE RfD9gyOkDnRCE7Xg1IVBpA6EodmLpAa7MYMyLYPKakOnDrWrECdEG+TMpGR7BnXh0Yvu DXgbgs8kCFqoz4C0VfRfNaZlTOY2jrYH8yNvHL8Yb1cOf4DKrcK5iCZam2/Zqm0P+nNN 92uQ== X-Forwarded-Encrypted: i=1; AJvYcCWzDaNTJRX39w/yun7/sqzqqNHV2hi143ls1As4AJl9wtBCeHCci9GMjRZwFjl4sdacwOTX5LPOkdMTNIE=@vger.kernel.org X-Gm-Message-State: AOJu0YxjkDq4r8HEA2gvU9sY0MWz2IQsymS7cNzHZ11EEy6wHxmMs71o mPTRpGFAE9nIhT8dgbYNpQyohOYW2MyvOTaA7aRO9NqGnwzdgsiuW7rDS8EwVyI1tbM= X-Gm-Gg: ASbGncvHMJWajkKkJdn13a2ekBeMSbbPeSfGm5gz27MOzYbpbGJcDdABUI8VrUFqNhM p299+eAEwETAEqNsZVY2z668J+VzGjcE7lJD2yb/zpG++EG4KJJBkB1O2onY0MgGWE369DZma1K vqiGI+iW/My4QVXMpF7FC2HMhJCsJB/dvMFfrrKf+C3RCR7292XKX5skCZW4F/WA5r/z6mvNHAk i5vUn4QR7kayO4vdaOByGWb4ORPq1659HNwV1Zu4u08J78SNHNlk3PcUfeHWARYy44fPmdfmNnQ bOMLubjtjr0yWzdSRa6r+mo+JpWuGe7MbAGQ4AL3KWtKNGe0i0rUq+0FVGbPE4UZURmzgNwgY7j 5Egn+SmHVzcTXtDCLxtLIQTTWeNLtN8MmI8pH77WbGQ== X-Google-Smtp-Source: AGHT+IH/phP73RQmSHEL2ORjRZUORQjGvA9s+Grw6jbwknB2ZMXwWIYweFFb5AdJvkfbItdXPSBBBQ== X-Received: by 2002:a05:600c:4443:b0:459:e39e:e5a5 with SMTP id 5b1f17b1804b1-45b6870e392mr116803305e9.5.1756468050364; Fri, 29 Aug 2025 04:47:30 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.76.109]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b7c461edasm29873255e9.9.2025.08.29.04.47.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 Aug 2025 04:47:30 -0700 (PDT) From: James Clark Date: Fri, 29 Aug 2025 12:46:48 +0100 Subject: [PATCH v5 6/7] spi: spi-fsl-dspi: Increase target mode 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: <20250829-james-nxp-spi-dma-v5-6-3246957a6ea9@linaro.org> References: <20250829-james-nxp-spi-dma-v5-0-3246957a6ea9@linaro.org> In-Reply-To: <20250829-james-nxp-spi-dma-v5-0-3246957a6ea9@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 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. In host mode, the driver is able to split up a transfer into smaller chunks so we don't need to increase the size. While in target mode, the length of the transfer is determined by the remote host and can be larger than whatever default buffer size we pick. Keeping the buffer small in host mode avoids wasting memory, but allocating the largest possible in target mode gives the lowest possible chance of dropping any data from the host. While we could allocate per-transfer using the exact size of the transfer, 128K is quite a large allocation and there is a chance it could fail due to memory fragmentation unless it's allocated once at init time. Signed-off-by: Larisa Grigore Signed-off-by: James Clark --- drivers/spi/spi-fsl-dspi.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 0e5f65d58342..3b652d744492 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -673,7 +673,18 @@ static int dspi_request_dma(struct fsl_dspi *dspi, phy= s_addr_t phy_addr) goto err_tx_channel; } =20 - dma->bufsize =3D PAGE_SIZE; + 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. + */ + dma->bufsize =3D min(dma_get_max_seg_size(dma->chan_rx->device->dev), + dma_get_max_seg_size(dma->chan_tx->device->dev)) * + DMA_SLAVE_BUSWIDTH_4_BYTES; + } else { + dma->bufsize =3D PAGE_SIZE; + } =20 dma->tx_dma_buf =3D dma_alloc_noncoherent(dma->chan_tx->device->dev, dma->bufsize, &dma->tx_dma_phys, --=20 2.34.1 From nobody Fri Oct 3 14:34:22 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 1884D314B88 for ; Fri, 29 Aug 2025 11:47:32 +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=1756468055; cv=none; b=nC2JAKDWULPVKXR1QwRDHh6Ca50E8YljMExuJSHckylaDkBcFuhDuIwoV5RtltF8fqAt2oJdyF4QdKF3pZjvr38VuMqQJ9LzQyHguLQmvofBRNTnovFmKeLJNlhAFvK6xF5/oB62j8cdUe29qi4PbJyA2Yy9OSRh/lSyKrKvOcc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756468055; c=relaxed/simple; bh=S7x0ebfCt523Ls93oeQmD3KMYniINwdLaICZrUxIvQQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dyLlSVDHNH4/d42dtotKm0F8l+7YKIpmkfhlTO1WZeFxT5+/dvIq9n3DQmhaUBdvs95dhjcqWq/1TRkUj+b68/oQhJvOqQma1JAzOGnVRi4cwEEc8mjHd+KtVxILST7PawDGsw/DGeFrULKKAKLdA6EMDm+0BALL8RzJSBwJJUU= 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=dUGfsVar; 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="dUGfsVar" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-45a1b0bde14so12385815e9.2 for ; Fri, 29 Aug 2025 04:47:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1756468051; x=1757072851; 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=+8Ff52Eurd3Sg0Fy6ii66kdfUaNx9pjdVhD8AWVlFlc=; b=dUGfsVarh9WwpLEtCnQNp794sxlag6qgqgHqnXkHFboB/1DW6OiE4mHoz+N6Wisc8x vns7E0MQN+Nq4kKR7aG8v9VvW2rsLrKMT8J+td7Suvu2bTQBfKb59pm5UpeVzLkx5bzD Q5Y4K04/IgNQbmnJ7vyzJs390gpumoLuxVx52e5G/EoRBNYeWSS6Vbcg4eh6iV2/zPd8 W989N1IYKb8TkOaRKzCniYLE/Q6oPHnNwXQKZxo2JSxfSUmJVg3nwsqnQOrXlDngDXmP TYp5o/rbXw4XGQX+hSpupmfIfi1WhZKP6y7Uvy9zQO3JT6vC3LGqKpiOiByOCQb5EmGi PsMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756468051; x=1757072851; 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=+8Ff52Eurd3Sg0Fy6ii66kdfUaNx9pjdVhD8AWVlFlc=; b=brQJ/4mApKxvUZsRDyXxn8amcbaAw3PexnZ+6qLHTn1Io1mBCMh1BCAfGSP2cLr1YQ f+468V4fVInVK+lHKWFapRpWbfT3dRhwUhIz6xzVIPcIXkvOZIHJhRu+sehAfJGDzqhL p4bhB/QxgeJZOkQmTeR5zlzkuPeoTXg6XdDD7M8JJQ1KMt6Txz5ooqAYJvjJwk/AFDDH di/VyGptioEJicKADDBjxhHuI1meQqyFuZ1jJw2+qfaC7vsXV+JcEaf4yreNqjSNg1ro OdNDYE05E3OBJziltjJMP/XO6A/kdsrfPBKbgRmJG6KBpeXAYCEn0gpsxWBkoiMcAjN2 EWiA== X-Forwarded-Encrypted: i=1; AJvYcCUNEqHqlaYiA4dhg0Sp06xFLEJpHhUlWkFFoDnhRr96Uc7fGrRYstqAxcu4DBelU28d7psnury2LEHjd3w=@vger.kernel.org X-Gm-Message-State: AOJu0Yx7+IMkRcPf2AR3p5DZqURR5c//oy5K9u9QpbPJGlr1U8uidof+ vQA5DOml4fGLX0QFpN/NlqjNIsvO/bE/wLg0XOVBR0MaAjzVxhB0EZ6LB58VLp1h9m0= X-Gm-Gg: ASbGnctVDtpH4InlY1QY5BRC4vRqChkvV+oNh4/lVehX6pyUCdCpoRKVggVF0bYf8iv ybyiJTf1RVZ981B1/xTM1kXdAcKfVlZdcDUf9VlwI607mM/zyhljWJtUEbrPT1rvyb0YVFhc2fH KwIQeZkCvydkK0AJME3IH3Uopy2R5fcHDKScWciaolh+wR9q8SX/Rvsculpq9awOvehnIoiLYkS DLi4cWw8Qh+oa99jSep1zvwk563cc+AvMBKAYyEHxGSijjvwZxKQo47eyDBwJQ4lcbvD11mKcTf WHneBDJ9CFzrLtyvyySQSHEvsEBIuLqWEk3fVpN9yQsriKfCW8NYlOtSxBEw4Vq6Y48MuF8PMSE hkEairWSThV8FgBVnIu6SKWX+AYrdqxiXsJ7DUDmGRtpi3c4Fm3H+ X-Google-Smtp-Source: AGHT+IFz+p3bq6EKzPmfcfC5PMXg5Zav7B1eRrwjjM0k5SgBpuL4bFJbKjkKmesw/qpW53whi0+p4w== X-Received: by 2002:a5d:64ea:0:b0:3ce:663a:c91f with SMTP id ffacd0b85a97d-3ce663accb0mr3601184f8f.42.1756468051335; Fri, 29 Aug 2025 04:47:31 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.76.109]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b7c461edasm29873255e9.9.2025.08.29.04.47.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 Aug 2025 04:47:30 -0700 (PDT) From: James Clark Date: Fri, 29 Aug 2025 12:46:49 +0100 Subject: [PATCH v5 7/7] 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: <20250829-james-nxp-spi-dma-v5-7-3246957a6ea9@linaro.org> References: <20250829-james-nxp-spi-dma-v5-0-3246957a6ea9@linaro.org> In-Reply-To: <20250829-james-nxp-spi-dma-v5-0-3246957a6ea9@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, it's not likely these flags will be set in host mode so it's not worth adding extra checks. In IRQ and polling modes we use the same transfer functions for hosts and targets so the error flags always get checked. This is slightly inconsistent but it's not worth doing the check conditionally because it may catch some host programming errors in the future. 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 3b652d744492..8dcfd5ea4216 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -480,6 +480,17 @@ static void dspi_push_rx(struct fsl_dspi *dspi, u32 rx= data) dspi->dev_to_host(dspi, rxdata); } =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; +} + #if IS_ENABLED(CONFIG_DMA_ENGINE) =20 /* Prepare one TX FIFO entry (txdata plus cmd) */ @@ -553,6 +564,7 @@ static int dspi_next_xfer_dma_submit(struct fsl_dspi *d= spi) 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++) @@ -601,7 +613,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, @@ -1071,6 +1084,10 @@ static void dspi_poll(struct fsl_dspi *dspi) for (tries =3D 1000; tries > 0; --tries) { regmap_read(dspi->regmap, SPI_SR, &spi_sr); regmap_write(dspi->regmap, SPI_SR, spi_sr); + + dspi->cur_msg->status =3D dspi_fifo_error(dspi, spi_sr); + if (dspi->cur_msg->status) + return; if (spi_sr & SPI_SR_CMDTCF) break; } @@ -1086,6 +1103,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); @@ -1094,6 +1112,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; + } + if (dspi_rxtx(dspi) =3D=3D false) { if (dspi->cur_msg) WRITE_ONCE(dspi->cur_msg->status, 0); --=20 2.34.1