From: sashiko-bot@kernel.org
To: "Santhosh Kumar K" <s-k6@ti.com>
Cc: "Takahiro Kuwano" <takahiro.kuwano@infineon.com>,
conor+dt@kernel.org, robh@kernel.org, devicetree@vger.kernel.org,
"Pratyush Yadav" <pratyush@kernel.org>,
"Vignesh Raghavendra" <vigneshr@ti.com>,
"Miquel Raynal" <miquel.raynal@bootlin.com>,
"Michael Walle" <mwalle@kernel.org>,
"Richard Weinberger" <richard@nod.at>
Subject: Re: [PATCH v6 10/17] spi: cadence-quadspi: refactor direct read path for PHY support
Date: Thu, 23 Jul 2026 11:41:36 +0000 [thread overview]
Message-ID: <20260723114136.E149A1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260723110219.3180747-11-s-k6@ti.com>
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [High] cqspi_memcpy_fromio() directly casts an arbitrary destination pointer to u16* and dereferences it, triggering unaligned access exceptions on strict-alignment architectures.
- [High] cqspi_memcpy_fromio() triggers a hardware alignment fault (Data Abort) by issuing __raw_readw() on odd device memory addresses.
- [High] cqspi_memcpy_fromio() delegates bulk copies to memcpy_fromio(), which can fall back to 8-bit I/O reads and violate the strict 16-bit AHB requirement for 8D-8D-8D mode.
--
--- Patch [10]: [PATCH v6 10/17] spi: cadence-quadspi: refactor direct read path for PHY support ---
commit f23703adf58b1895572efb17e7d5f736dc1bf89f
Author: Santhosh Kumar K <s-k6@ti.com>
Subject: spi: cadence-quadspi: refactor direct read path for PHY support
This commit extracts the DMA transfer code from cqspi_direct_read_execute()
into a new cqspi_direct_read_dma() helper. It also adds
cqspi_memcpy_fromio() to handle non-DMA transfers, attempting to guarantee
2-byte-aligned I/O accesses for 8D-8D-8D mode.
> diff --git a/drivers/spi/spi-cadence-quadspi.c b/drivers/spi/spi-cadence-quadspi.c
> index 5070ffc53d5e8..322e95b3bc17d 100644
> --- a/drivers/spi/spi-cadence-quadspi.c
> +++ b/drivers/spi/spi-cadence-quadspi.c
[ ... ]
> @@ -1580,8 +1577,61 @@ static int cqspi_direct_read_execute(struct cqspi_flash_pdata *f_pdata,
> return ret;
> }
>
> +static void cqspi_memcpy_fromio(const struct spi_mem_op *op, void *to,
> + const void __iomem *from, size_t count)
> +{
> + if (op->data.buswidth == 8 && op->data.dtr) {
> + unsigned long from_addr = (unsigned long)from;
> +
> + /* Handle unaligned start with 2-byte read */
> + if (count && !IS_ALIGNED(from_addr, 4)) {
> + *(u16 *)to = __raw_readw(from);
[Severity: High]
Is it safe to cast 'to' directly to a u16 pointer?
If the destination buffer 'to' is not 2-byte aligned, won't this pointer
dereference cause an unaligned access exception on strict-alignment
architectures? Should put_unaligned() be used here instead?
[Severity: High]
Will __raw_readw() cause a hardware alignment fault (Data Abort) on
architectures like ARM if 'from' is an odd address?
Since IS_ALIGNED(from_addr, 4) only checks for 4-byte alignment, an odd
'from' address will enter this block and trigger a 16-bit I/O read on an
unaligned device memory address. Should the driver enforce even address
offsets for these operations?
> + from += 2;
> + to += 2;
> + count -= 2;
> + }
> +
> + /* Use 4-byte reads for aligned bulk (no readq for 32-bit) */
> + if (count >= 4) {
> + size_t len = round_down(count, 4);
> +
> + memcpy_fromio(to, from, len);
[Severity: High]
Could memcpy_fromio() fall back to 8-bit I/O reads on some architectures
(like ARM32), violating the controller's strict >=16-bit AHB requirement
for 8D-8D-8D mode?
To guarantee the AHB transaction size irrespective of the architecture's
memcpy_fromio() implementation, would it be better to use explicit 32-bit
or 16-bit I/O accessors (like an explicit __raw_readl() loop with
put_unaligned())?
> + from += len;
> + to += len;
> + count -= len;
> + }
> +
> + /* Handle remaining 2 bytes */
> + if (count)
> + *(u16 *)to = __raw_readw(from);
[Severity: High]
Similar to the issue above, does this need put_unaligned() to prevent
unaligned memory access exceptions if 'to' is not aligned?
> +
> + return;
> + }
> +
> + memcpy_fromio(to, from, count);
> +}
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260723110219.3180747-1-s-k6@ti.com?part=10
next prev parent reply other threads:[~2026-07-23 11:41 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-23 11:02 [PATCH v6 00/17] spi: cadence-quadspi: add PHY tuning support Santhosh Kumar K
2026-07-23 11:02 ` Santhosh Kumar K
2026-07-23 11:02 ` [PATCH v6 01/17] spi: dt-bindings: add spi-max-post-config-frequency-hz property Santhosh Kumar K
2026-07-23 11:02 ` Santhosh Kumar K
2026-07-23 11:02 ` [PATCH v6 02/17] spi: dt-bindings: add spi-phy-pattern-partition property Santhosh Kumar K
2026-07-23 11:02 ` Santhosh Kumar K
2026-07-23 11:02 ` [PATCH v6 03/17] spi: parse spi-max-post-config-frequency-hz into post_config_max_speed_hz Santhosh Kumar K
2026-07-23 11:02 ` Santhosh Kumar K
2026-07-23 11:02 ` [PATCH v6 04/17] spi: spi-mem: teach spi_mem_adjust_op_freq() about post-config ops Santhosh Kumar K
2026-07-23 11:02 ` Santhosh Kumar K
2026-07-23 11:34 ` sashiko-bot
2026-07-23 11:02 ` [PATCH v6 05/17] spi: spi-mem: add execute_tuning callback and spi_mem_execute_tuning() Santhosh Kumar K
2026-07-23 11:02 ` Santhosh Kumar K
2026-07-23 11:30 ` sashiko-bot
2026-07-23 11:02 ` [PATCH v6 06/17] spi: cadence-quadspi: move cqspi_readdata_capture earlier Santhosh Kumar K
2026-07-23 11:02 ` Santhosh Kumar K
2026-07-23 11:02 ` [PATCH v6 07/17] spi: cadence-quadspi: add DQS support to read data capture Santhosh Kumar K
2026-07-23 11:02 ` Santhosh Kumar K
2026-07-23 11:28 ` sashiko-bot
2026-07-23 11:02 ` [PATCH v6 08/17] spi: cadence-quadspi: add PHY tuning support Santhosh Kumar K
2026-07-23 11:02 ` Santhosh Kumar K
2026-07-23 11:33 ` sashiko-bot
2026-07-23 11:02 ` [PATCH v6 09/17] spi: cadence-quadspi: skip DDR PHY tuning for 2-byte-address ops (i2383) Santhosh Kumar K
2026-07-23 11:02 ` Santhosh Kumar K
2026-07-23 11:48 ` sashiko-bot
2026-07-23 11:02 ` [PATCH v6 10/17] spi: cadence-quadspi: refactor direct read path for PHY support Santhosh Kumar K
2026-07-23 11:02 ` Santhosh Kumar K
2026-07-23 11:41 ` sashiko-bot [this message]
2026-07-23 11:02 ` [PATCH v6 11/17] spi: cadence-quadspi: enable PHY for direct reads Santhosh Kumar K
2026-07-23 11:02 ` Santhosh Kumar K
2026-07-23 11:48 ` sashiko-bot
2026-07-23 11:02 ` [PATCH v6 12/17] spi: cadence-quadspi: enable PHY for indirect writes Santhosh Kumar K
2026-07-23 11:02 ` Santhosh Kumar K
2026-07-23 11:44 ` sashiko-bot
2026-07-23 11:02 ` [PATCH v6 13/17] spi: cadence-quadspi: reprogram CS timing on every chip-select switch Santhosh Kumar K
2026-07-23 11:02 ` Santhosh Kumar K
2026-07-23 11:49 ` sashiko-bot
2026-07-23 11:02 ` [PATCH v6 14/17] mtd: spinand: extract variant ranking logic into spinand_op_find_best_variant() Santhosh Kumar K
2026-07-23 11:02 ` Santhosh Kumar K
2026-07-23 11:02 ` [PATCH v6 15/17] mtd: spinand: negotiate optimal controller operating point before dirmap creation Santhosh Kumar K
2026-07-23 11:02 ` Santhosh Kumar K
2026-07-23 12:02 ` sashiko-bot
2026-07-23 11:02 ` [PATCH v6 16/17] mtd: spi-nor: extract read op template construction into helper Santhosh Kumar K
2026-07-23 11:02 ` Santhosh Kumar K
2026-07-23 11:02 ` [PATCH v6 17/17] mtd: spi-nor: run controller optimization before dirmap creation Santhosh Kumar K
2026-07-23 11:02 ` Santhosh Kumar K
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260723114136.E149A1F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=miquel.raynal@bootlin.com \
--cc=mwalle@kernel.org \
--cc=pratyush@kernel.org \
--cc=richard@nod.at \
--cc=robh@kernel.org \
--cc=s-k6@ti.com \
--cc=sashiko-reviews@lists.linux.dev \
--cc=takahiro.kuwano@infineon.com \
--cc=vigneshr@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.