From: sashiko-bot@kernel.org
To: "Santhosh Kumar K" <s-k6@ti.com>
Cc: "Pratyush Yadav" <pratyush@kernel.org>,
robh@kernel.org, "Miquel Raynal" <miquel.raynal@bootlin.com>,
"Vignesh Raghavendra" <vigneshr@ti.com>,
"Michael Walle" <mwalle@kernel.org>,
conor+dt@kernel.org,
"Takahiro Kuwano" <takahiro.kuwano@infineon.com>,
"Richard Weinberger" <richard@nod.at>,
devicetree@vger.kernel.org
Subject: Re: [PATCH v9 14/18] spi: cadence-quadspi: reprogram PHY DLL on runtime resume
Date: Tue, 25 Aug 2026 17:36:06 +0000 [thread overview]
Message-ID: <20260825173607.158011F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260825171737.776052-15-s-k6@ti.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Critical] Disabling 'use_tuned_phy' on DLL resync failure bypasses the PHY DLL while continuing to run at high speed, causing silent data corruption.
- [Medium] Iteratively reprogramming the global PHY DLL for all chip selects on runtime resume causes redundant delays and overwrites state.
--
commit 9b2d8bb539c61392a12afe8d25c966ba88c70398
Author: Santhosh Kumar K <s-k6@ti.com>
spi: cadence-quadspi: reprogram PHY DLL on runtime resume
The PHY DLL loses its programmed delay values and lock when the OSPI
controller is power-gated during runtime suspend. On resume,
cqspi_controller_init() reinitialises the controller but does not
touch the PHY DLL registers, leaving the DLL in an unlocked state.
Any subsequent PHY read or write would then fail at the cqspi_resync_dll()
call inside cqspi_tune_phy().
> diff --git a/drivers/spi/spi-cadence-quadspi.c b/drivers/spi/spi-cadence-quadspi.c
> index 530335f002fb4..94d67e8bcfbc4 100644
> --- a/drivers/spi/spi-cadence-quadspi.c
> +++ b/drivers/spi/spi-cadence-quadspi.c
[ ... ]
> @@ -4042,6 +4042,28 @@ static int cqspi_runtime_resume(struct device *dev)
>
> cqspi->current_cs = -1;
> cqspi->sclk = 0;
> +
> + for (cs = 0; cs < CQSPI_MAX_CHIPSELECT; cs++) {
> + struct cqspi_flash_pdata *f_pdata = &cqspi->f_pdata[cs];
> +
> + if (!f_pdata->use_tuned_phy)
> + continue;
> +
> + cqspi_phy_set_dll_master(cqspi);
> +
> + cqspi_set_dll(cqspi->iobase, f_pdata->phy_setting.rx,
> + f_pdata->phy_setting.tx);
> + ret = cqspi_resync_dll(cqspi);
[Severity: Medium]
Will this iteratively reprogram the global PHY DLL for all chip selects on
runtime resume, causing redundant delays and overwriting state?
The PHY config register (CQSPI_REG_PHY_CONFIG) is global, yet the resume loop
iterates over all chip selects, writes each CS's RX/TX taps to the global
register, and triggers a full DLL resync each time. Because only the final
CS's taps remain active in hardware, the driver's cqspi_tune_phy() function
will redundantly re-sync the DLL again on the next transfer to any other chip
select, completely negating the purpose of pre-locking them during resume.
Furthermore, master DLL lock is independent of the slave RX/TX taps.
> + if (ret) {
> + dev_warn(dev, "cs%d: PHY DLL resync failed on resume: %d, disabling PHY\n",
> + cs, ret);
> + f_pdata->dll_locked = false;
> + f_pdata->use_tuned_phy = false;
[Severity: Critical]
Does disabling 'use_tuned_phy' here on DLL resync failure bypass the PHY DLL
while continuing to run at high speed, causing silent data corruption?
If the PHY DLL resync fails during resume, setting 'use_tuned_phy = false'
causes subsequent flash operations to bypass the PHY data capture logic.
However, the SPI clock frequency (op->max_freq) is not downgraded and
continues running at the high PHY-tuned speed (e.g., 150-200MHz). The
controller's non-PHY fallback cannot reliably sample data at these high
frequencies, resulting in garbage data being read from or written to the
flash.
> + } else {
> + f_pdata->dll_locked = true;
> + }
> + }
> +
> return 0;
> }
>
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260825171737.776052-1-s-k6@ti.com?part=14
next prev parent reply other threads:[~2026-08-25 17:36 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-25 17:17 [PATCH v9 00/18] spi: cadence-quadspi: add PHY tuning support Santhosh Kumar K
2026-08-25 17:17 ` Santhosh Kumar K
2026-08-25 17:17 ` [PATCH v9 01/18] spi: dt-bindings: add spi-max-post-config-frequency-hz property Santhosh Kumar K
2026-08-25 17:17 ` Santhosh Kumar K
2026-08-25 17:17 ` [PATCH v9 02/18] spi: dt-bindings: add spi-phy-pattern-partition property Santhosh Kumar K
2026-08-25 17:17 ` Santhosh Kumar K
2026-08-25 17:17 ` [PATCH v9 03/18] spi: parse spi-max-post-config-frequency-hz into post_config_max_speed_hz Santhosh Kumar K
2026-08-25 17:17 ` Santhosh Kumar K
2026-08-25 17:30 ` sashiko-bot
2026-08-25 17:17 ` [PATCH v9 04/18] spi: spi-mem: teach spi_mem_adjust_op_freq() about post-config ops Santhosh Kumar K
2026-08-25 17:17 ` Santhosh Kumar K
2026-08-25 17:30 ` sashiko-bot
2026-08-25 17:17 ` [PATCH v9 05/18] spi: spi-mem: add execute_tuning callback and spi_mem_execute_tuning() Santhosh Kumar K
2026-08-25 17:17 ` Santhosh Kumar K
2026-08-25 17:17 ` [PATCH v9 06/18] spi: cadence-quadspi: move cqspi_readdata_capture earlier Santhosh Kumar K
2026-08-25 17:17 ` Santhosh Kumar K
2026-08-25 17:17 ` [PATCH v9 07/18] spi: cadence-quadspi: add DQS support to read data capture Santhosh Kumar K
2026-08-25 17:17 ` Santhosh Kumar K
2026-08-25 17:29 ` sashiko-bot
2026-08-25 17:17 ` [PATCH v9 08/18] spi: cadence-quadspi: add PHY tuning support Santhosh Kumar K
2026-08-25 17:17 ` Santhosh Kumar K
2026-08-25 17:40 ` sashiko-bot
2026-08-26 21:43 ` Mark Brown
2026-08-26 21:43 ` Mark Brown
2026-09-02 9:45 ` Santhosh Kumar K
2026-09-02 9:45 ` Santhosh Kumar K
2026-09-03 8:16 ` Miquel Raynal
2026-09-03 8:16 ` Miquel Raynal
2026-09-08 13:05 ` Santhosh Kumar K
2026-09-08 13:05 ` Santhosh Kumar K
2026-09-08 15:53 ` Miquel Raynal
2026-08-25 17:17 ` [PATCH v9 09/18] spi: cadence-quadspi: skip DDR PHY tuning for 2-byte-address ops (i2383) Santhosh Kumar K
2026-08-25 17:17 ` Santhosh Kumar K
2026-08-25 17:17 ` [PATCH v9 10/18] spi: cadence-quadspi: refactor direct read path for PHY support Santhosh Kumar K
2026-08-25 17:17 ` Santhosh Kumar K
2026-08-25 17:31 ` sashiko-bot
2026-08-25 17:17 ` [PATCH v9 11/18] spi: cadence-quadspi: enable PHY for direct reads Santhosh Kumar K
2026-08-25 17:17 ` Santhosh Kumar K
2026-08-25 17:32 ` sashiko-bot
2026-08-25 17:17 ` [PATCH v9 12/18] spi: cadence-quadspi: enable PHY for indirect writes Santhosh Kumar K
2026-08-25 17:17 ` Santhosh Kumar K
2026-08-25 17:32 ` sashiko-bot
2026-08-25 17:17 ` [PATCH v9 13/18] spi: cadence-quadspi: reprogram CS timing on every chip-select switch Santhosh Kumar K
2026-08-25 17:17 ` Santhosh Kumar K
2026-08-25 17:17 ` [PATCH v9 14/18] spi: cadence-quadspi: reprogram PHY DLL on runtime resume Santhosh Kumar K
2026-08-25 17:17 ` Santhosh Kumar K
2026-08-25 17:36 ` sashiko-bot [this message]
2026-08-25 17:17 ` [PATCH v9 15/18] mtd: spinand: extract variant ranking logic into spinand_op_find_best_variant() Santhosh Kumar K
2026-08-25 17:17 ` Santhosh Kumar K
2026-08-25 17:17 ` [PATCH v9 16/18] mtd: spinand: negotiate optimal controller operating point before dirmap creation Santhosh Kumar K
2026-08-25 17:17 ` Santhosh Kumar K
2026-08-25 17:43 ` sashiko-bot
2026-09-04 16:23 ` Miquel Raynal
2026-09-04 16:23 ` Miquel Raynal
2026-09-04 16:25 ` Miquel Raynal
2026-09-04 16:25 ` Miquel Raynal
2026-09-08 13:14 ` Santhosh Kumar K
2026-09-08 13:14 ` Santhosh Kumar K
2026-09-08 15:54 ` Miquel Raynal
2026-09-08 15:54 ` Miquel Raynal
2026-08-25 17:17 ` [PATCH v9 17/18] mtd: spi-nor: extract read op template construction into helper Santhosh Kumar K
2026-08-25 17:17 ` Santhosh Kumar K
2026-08-25 17:17 ` [PATCH v9 18/18] mtd: spi-nor: run controller optimization before dirmap creation Santhosh Kumar K
2026-08-25 17:17 ` Santhosh Kumar K
2026-08-25 17:45 ` sashiko-bot
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=20260825173607.158011F000E9@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.