From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Santhosh Kumar K <s-k6@ti.com>
Cc: <broonie@kernel.org>, <robh@kernel.org>, <krzk+dt@kernel.org>,
<conor+dt@kernel.org>, <richard@nod.at>, <vigneshr@ti.com>,
<pratyush@kernel.org>, <mwalle@kernel.org>,
<takahiro.kuwano@infineon.com>, <linux-spi@vger.kernel.org>,
<devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<linux-mtd@lists.infradead.org>, <praneeth@ti.com>,
<u-kumar1@ti.com>, <a-dutta@ti.com>
Subject: Re: [PATCH v3 00/13] spi: cadence-quadspi: add PHY tuning support
Date: Thu, 28 May 2026 10:30:23 +0200 [thread overview]
Message-ID: <8733zchr6o.fsf@bootlin.com> (raw)
In-Reply-To: <20260527175527.2247679-1-s-k6@ti.com> (Santhosh Kumar K.'s message of "Wed, 27 May 2026 23:25:14 +0530")
Hi Santhosh,
Very happy to see this v3! Looks pretty neat overall.
On 27/05/2026 at 23:25:14 +0530, Santhosh Kumar K <s-k6@ti.com> wrote:
> This series implements PHY tuning support for the Cadence QSPI controller
> to enable reliable high-speed operations. Without PHY tuning, controllers
> use conservative timing that limits performance. PHY tuning calibrates
> RX/TX delay lines to find optimal data capture timing windows, enabling
> operation up to the controller's maximum frequency.
>
> Background:
> High-speed SPI memory controllers require precise timing calibration for
> reliable operation. At higher frequencies, board-to-board variations make
> fixed timing parameters inadequate. The Cadence QSPI controller includes
> a PHY interface with programmable delay lines (0-127 taps) for RX and TX
> paths, but these require runtime calibration to find the valid timing
> window.
>
> Approach:
> Add SDR/DDR PHY tuning algorithms for the Cadence controller:
>
> SDR Mode Tuning (1D search):
> - Searches for two consecutive valid RX delay windows
> - Selects the larger window and uses its midpoint for maximum margin
> - TX delay fixed at maximum (127) as it's less critical in SDR
>
> DDR Mode Tuning (2D search):
> - Finds RX boundaries (rxlow/rxhigh) using TX window sweeps
> - Finds TX boundaries (txlow/txhigh) at fixed RX positions
> - Defines valid region corners and detects gaps via binary search
> - Applies temperature compensation for optimal point selection
> - Handles single or dual passing regions with different strategies
>
> Patch description:
> Infrastructure (1-5):
> - Patch 1: Extend spi-max-frequency DT binding to accept an optional
> second value forming a [base-freq, max-freq] pair
> - Patch 2: Add cadence-specific cdns,phy-pattern-partition phandle for
> NOR flash PHY tuning pattern location
> - Patch 3: Parse two-element spi-max-frequency in spi.c; adds
> spi_device.base_speed_hz (0 when a single value is used,
> keeping all existing DT fully compatible)
> - Patch 4: Add spi_mem_apply_base_freq_cap(), called from
> spi_mem_exec_op() to cap non-PHY ops to base_speed_hz;
> tuned ops bypass the cap because execute_tuning() marks
> them with op->max_freq = max_speed_hz
> - Patch 5: Add execute_tuning callback to spi_controller_mem_ops and
> spi_mem_execute_tuning() wrapper in SPI-MEM core
>
> Cadence QSPI Implementation (6-10):
> - Patch 6: Move cqspi_readdata_capture() earlier (preparatory)
> - Patch 7: Add DQS bit to cqspi_readdata_capture() (preparatory)
> - Patch 8: Add complete PHY tuning support: DLL management, pattern
> verification (NOR via cdns,phy-pattern-partition phandle,
> NAND via write-to-cache), SDR 1D and DDR 2D search
> algorithms with temperature compensation, AM654-specific
> execute_tuning entry point; base_speed_hz is cleared during
> the tuning loop and restored unconditionally on return
> - Patch 9: Reject 2-byte-address DDR operations via a new
> CQSPI_NO_2BYTE_ADDR_PHY_DDR quirk flag to work around
> AM654 OSPI erratum i2383
> - Patch 10: Enable PHY for direct memory-mapped reads (aligned body
> region only; unaligned head and tail run without PHY) and
> for indirect writes >= 1 KB
>
> MTD core (11-13):
> - Patch 11: Integrate tuning in SPI-NAND probe; propagate the validated
> frequency to all plane dirmaps (primary and secondary op
> templates) and to the persistent write dirmap template
> - Patch 12: Extract spi_nor_spimem_get_read_op() helper (preparatory)
> - Patch 13: Integrate tuning in SPI-NOR probe; patch the dirmap op
> template with the validated frequency; store the result in
> nor->max_read_op so all subsequent reads (dirmap and direct)
> pick up the tuned speed automatically
>
> Series dependency:
> Merge after:
> https://lore.kernel.org/linux-spi/20260527173736.2243004-1-s-k6@ti.com/T/#u
Isn't the DQS series a prerequisite as well? I sent it as an RFC, we can
definitely consider it for merge together with this series once
ready.
Link: https://lore.kernel.org/linux-mtd/20260205-winbond-nand-next-phy-tuning-v1-0-5e7d3976f0f1@bootlin.com/
Do you confirm that you have "[PATCH DO NOT MERGE RFC 4/4] spi: cadence-qspi: Retrieve
DQS capability using the core helper" in your branch for the PHY tuning
series to work?
> Testing:
> This series was tested on TI's
> AM62Ax SK with OSPI NAND flash and
> AM62Px SK with OSPI NOR flash:
>
> Read throughput:
> |-------------------------------------|
> | | without PHY | with PHY |
> |-------------------------------------|
> | OSPI NOR | 37.5 MB/s | 216 MB/s |
I am impressed by the SPI NOR improvement o_O
> |-------------------------------------|
> | OSPI NAND | 9.2 MB/s | 35.1 MB/s |
> |-------------------------------------|
Was this tested in 8D-8D-8D mode?
> Write throughput:
> |-------------------------------------|
> | | without PHY | with PHY |
> |-------------------------------------|
> | OSPI NAND | 6 MB/s | 9.2 MB/s |
> |-------------------------------------|
Thanks,
Miquèl
WARNING: multiple messages have this Message-ID (diff)
From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Santhosh Kumar K <s-k6@ti.com>
Cc: <broonie@kernel.org>, <robh@kernel.org>, <krzk+dt@kernel.org>,
<conor+dt@kernel.org>, <richard@nod.at>, <vigneshr@ti.com>,
<pratyush@kernel.org>, <mwalle@kernel.org>,
<takahiro.kuwano@infineon.com>, <linux-spi@vger.kernel.org>,
<devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<linux-mtd@lists.infradead.org>, <praneeth@ti.com>,
<u-kumar1@ti.com>, <a-dutta@ti.com>
Subject: Re: [PATCH v3 00/13] spi: cadence-quadspi: add PHY tuning support
Date: Thu, 28 May 2026 10:30:23 +0200 [thread overview]
Message-ID: <8733zchr6o.fsf@bootlin.com> (raw)
In-Reply-To: <20260527175527.2247679-1-s-k6@ti.com> (Santhosh Kumar K.'s message of "Wed, 27 May 2026 23:25:14 +0530")
Hi Santhosh,
Very happy to see this v3! Looks pretty neat overall.
On 27/05/2026 at 23:25:14 +0530, Santhosh Kumar K <s-k6@ti.com> wrote:
> This series implements PHY tuning support for the Cadence QSPI controller
> to enable reliable high-speed operations. Without PHY tuning, controllers
> use conservative timing that limits performance. PHY tuning calibrates
> RX/TX delay lines to find optimal data capture timing windows, enabling
> operation up to the controller's maximum frequency.
>
> Background:
> High-speed SPI memory controllers require precise timing calibration for
> reliable operation. At higher frequencies, board-to-board variations make
> fixed timing parameters inadequate. The Cadence QSPI controller includes
> a PHY interface with programmable delay lines (0-127 taps) for RX and TX
> paths, but these require runtime calibration to find the valid timing
> window.
>
> Approach:
> Add SDR/DDR PHY tuning algorithms for the Cadence controller:
>
> SDR Mode Tuning (1D search):
> - Searches for two consecutive valid RX delay windows
> - Selects the larger window and uses its midpoint for maximum margin
> - TX delay fixed at maximum (127) as it's less critical in SDR
>
> DDR Mode Tuning (2D search):
> - Finds RX boundaries (rxlow/rxhigh) using TX window sweeps
> - Finds TX boundaries (txlow/txhigh) at fixed RX positions
> - Defines valid region corners and detects gaps via binary search
> - Applies temperature compensation for optimal point selection
> - Handles single or dual passing regions with different strategies
>
> Patch description:
> Infrastructure (1-5):
> - Patch 1: Extend spi-max-frequency DT binding to accept an optional
> second value forming a [base-freq, max-freq] pair
> - Patch 2: Add cadence-specific cdns,phy-pattern-partition phandle for
> NOR flash PHY tuning pattern location
> - Patch 3: Parse two-element spi-max-frequency in spi.c; adds
> spi_device.base_speed_hz (0 when a single value is used,
> keeping all existing DT fully compatible)
> - Patch 4: Add spi_mem_apply_base_freq_cap(), called from
> spi_mem_exec_op() to cap non-PHY ops to base_speed_hz;
> tuned ops bypass the cap because execute_tuning() marks
> them with op->max_freq = max_speed_hz
> - Patch 5: Add execute_tuning callback to spi_controller_mem_ops and
> spi_mem_execute_tuning() wrapper in SPI-MEM core
>
> Cadence QSPI Implementation (6-10):
> - Patch 6: Move cqspi_readdata_capture() earlier (preparatory)
> - Patch 7: Add DQS bit to cqspi_readdata_capture() (preparatory)
> - Patch 8: Add complete PHY tuning support: DLL management, pattern
> verification (NOR via cdns,phy-pattern-partition phandle,
> NAND via write-to-cache), SDR 1D and DDR 2D search
> algorithms with temperature compensation, AM654-specific
> execute_tuning entry point; base_speed_hz is cleared during
> the tuning loop and restored unconditionally on return
> - Patch 9: Reject 2-byte-address DDR operations via a new
> CQSPI_NO_2BYTE_ADDR_PHY_DDR quirk flag to work around
> AM654 OSPI erratum i2383
> - Patch 10: Enable PHY for direct memory-mapped reads (aligned body
> region only; unaligned head and tail run without PHY) and
> for indirect writes >= 1 KB
>
> MTD core (11-13):
> - Patch 11: Integrate tuning in SPI-NAND probe; propagate the validated
> frequency to all plane dirmaps (primary and secondary op
> templates) and to the persistent write dirmap template
> - Patch 12: Extract spi_nor_spimem_get_read_op() helper (preparatory)
> - Patch 13: Integrate tuning in SPI-NOR probe; patch the dirmap op
> template with the validated frequency; store the result in
> nor->max_read_op so all subsequent reads (dirmap and direct)
> pick up the tuned speed automatically
>
> Series dependency:
> Merge after:
> https://lore.kernel.org/linux-spi/20260527173736.2243004-1-s-k6@ti.com/T/#u
Isn't the DQS series a prerequisite as well? I sent it as an RFC, we can
definitely consider it for merge together with this series once
ready.
Link: https://lore.kernel.org/linux-mtd/20260205-winbond-nand-next-phy-tuning-v1-0-5e7d3976f0f1@bootlin.com/
Do you confirm that you have "[PATCH DO NOT MERGE RFC 4/4] spi: cadence-qspi: Retrieve
DQS capability using the core helper" in your branch for the PHY tuning
series to work?
> Testing:
> This series was tested on TI's
> AM62Ax SK with OSPI NAND flash and
> AM62Px SK with OSPI NOR flash:
>
> Read throughput:
> |-------------------------------------|
> | | without PHY | with PHY |
> |-------------------------------------|
> | OSPI NOR | 37.5 MB/s | 216 MB/s |
I am impressed by the SPI NOR improvement o_O
> |-------------------------------------|
> | OSPI NAND | 9.2 MB/s | 35.1 MB/s |
> |-------------------------------------|
Was this tested in 8D-8D-8D mode?
> Write throughput:
> |-------------------------------------|
> | | without PHY | with PHY |
> |-------------------------------------|
> | OSPI NAND | 6 MB/s | 9.2 MB/s |
> |-------------------------------------|
Thanks,
Miquèl
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
next prev parent reply other threads:[~2026-05-28 8:30 UTC|newest]
Thread overview: 142+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-27 17:55 [PATCH v3 00/13] spi: cadence-quadspi: add PHY tuning support Santhosh Kumar K
2026-05-27 17:55 ` Santhosh Kumar K
2026-05-27 17:55 ` [PATCH v3 01/13] spi: dt-bindings: allow spi-max-frequency to specify a frequency pair Santhosh Kumar K
2026-05-27 17:55 ` Santhosh Kumar K
2026-05-27 18:17 ` sashiko-bot
2026-05-28 8:32 ` Miquel Raynal
2026-05-28 8:32 ` Miquel Raynal
2026-05-28 17:36 ` Conor Dooley
2026-05-28 17:36 ` Conor Dooley
2026-05-30 8:54 ` Krzysztof Kozlowski
2026-05-30 8:54 ` Krzysztof Kozlowski
2026-06-01 7:45 ` Santhosh Kumar K
2026-06-01 7:45 ` Santhosh Kumar K
2026-06-02 12:05 ` Miquel Raynal
2026-06-02 12:05 ` Miquel Raynal
2026-06-02 16:18 ` Conor Dooley
2026-06-02 16:18 ` Conor Dooley
2026-06-03 15:54 ` Miquel Raynal
2026-06-03 15:54 ` Miquel Raynal
2026-06-03 16:07 ` Conor Dooley
2026-06-03 16:07 ` Conor Dooley
2026-06-03 16:29 ` Miquel Raynal
2026-06-03 16:29 ` Miquel Raynal
2026-06-03 16:40 ` Conor Dooley
2026-06-03 16:40 ` Conor Dooley
2026-06-04 7:14 ` Miquel Raynal
2026-06-04 7:14 ` Miquel Raynal
2026-06-04 8:36 ` Conor Dooley
2026-06-04 8:36 ` Conor Dooley
2026-06-05 6:32 ` Miquel Raynal
2026-06-05 6:32 ` Miquel Raynal
2026-06-05 7:17 ` Conor Dooley
2026-06-05 7:17 ` Conor Dooley
2026-06-05 7:26 ` Miquel Raynal
2026-06-05 7:26 ` Miquel Raynal
2026-06-05 15:20 ` Conor Dooley
2026-06-05 15:20 ` Conor Dooley
2026-06-05 16:55 ` Miquel Raynal
2026-06-05 16:55 ` Miquel Raynal
2026-05-27 17:55 ` [PATCH v3 02/13] spi: dt-bindings: cdns,qspi-nor: add PHY tuning pattern partition property Santhosh Kumar K
2026-05-27 17:55 ` Santhosh Kumar K
2026-05-27 18:11 ` sashiko-bot
2026-05-28 8:34 ` Miquel Raynal
2026-05-28 8:34 ` Miquel Raynal
2026-05-30 8:52 ` Krzysztof Kozlowski
2026-05-30 8:52 ` Krzysztof Kozlowski
2026-06-01 8:26 ` Santhosh Kumar K
2026-06-01 8:26 ` Santhosh Kumar K
2026-06-01 11:26 ` Krzysztof Kozlowski
2026-06-01 11:26 ` Krzysztof Kozlowski
2026-06-01 11:47 ` Krzysztof Kozlowski
2026-06-01 11:47 ` Krzysztof Kozlowski
2026-06-02 6:30 ` Santhosh Kumar K
2026-06-02 6:30 ` Santhosh Kumar K
2026-06-02 12:08 ` Krzysztof Kozlowski
2026-06-02 12:08 ` Krzysztof Kozlowski
2026-06-02 12:36 ` Miquel Raynal
2026-06-02 12:36 ` Miquel Raynal
2026-06-02 12:48 ` Krzysztof Kozlowski
2026-06-02 12:48 ` Krzysztof Kozlowski
2026-06-04 12:01 ` Santhosh Kumar K
2026-06-04 12:01 ` Santhosh Kumar K
2026-06-02 16:49 ` Rob Herring
2026-06-02 16:49 ` Rob Herring
2026-06-03 16:01 ` Miquel Raynal
2026-06-03 16:01 ` Miquel Raynal
2026-06-03 17:38 ` Rob Herring
2026-06-03 17:38 ` Rob Herring
2026-06-03 19:00 ` Michael Walle
2026-06-03 19:00 ` Michael Walle
2026-06-04 12:07 ` Santhosh Kumar K
2026-06-04 12:07 ` Santhosh Kumar K
2026-06-04 7:28 ` Miquel Raynal
2026-06-04 7:28 ` Miquel Raynal
2026-06-04 12:04 ` Santhosh Kumar K
2026-06-04 12:04 ` Santhosh Kumar K
2026-05-27 17:55 ` [PATCH v3 03/13] spi: parse two-element spi-max-frequency property Santhosh Kumar K
2026-05-27 17:55 ` Santhosh Kumar K
2026-05-27 18:19 ` sashiko-bot
2026-05-28 8:37 ` Miquel Raynal
2026-05-28 8:37 ` Miquel Raynal
2026-05-27 17:55 ` [PATCH v3 04/13] spi: spi-mem: add spi_mem_apply_base_freq_cap() Santhosh Kumar K
2026-05-27 17:55 ` Santhosh Kumar K
2026-05-27 18:32 ` sashiko-bot
2026-05-28 8:43 ` Miquel Raynal
2026-05-28 8:43 ` Miquel Raynal
2026-06-04 12:10 ` Santhosh Kumar K
2026-06-04 12:10 ` Santhosh Kumar K
2026-06-05 6:15 ` Miquel Raynal
2026-06-05 6:15 ` Miquel Raynal
2026-05-27 17:55 ` [PATCH v3 05/13] spi: spi-mem: add execute_tuning callback and spi_mem_execute_tuning() Santhosh Kumar K
2026-05-27 17:55 ` Santhosh Kumar K
2026-05-27 18:21 ` sashiko-bot
2026-05-28 8:44 ` Miquel Raynal
2026-05-28 8:44 ` Miquel Raynal
2026-05-27 17:55 ` [PATCH v3 06/13] spi: cadence-quadspi: move cqspi_readdata_capture earlier Santhosh Kumar K
2026-05-27 17:55 ` Santhosh Kumar K
2026-05-27 17:55 ` [PATCH v3 07/13] spi: cadence-quadspi: add DQS support to read data capture Santhosh Kumar K
2026-05-27 17:55 ` Santhosh Kumar K
2026-05-27 18:17 ` sashiko-bot
2026-05-27 17:55 ` [PATCH v3 08/13] spi: cadence-quadspi: add PHY tuning support Santhosh Kumar K
2026-05-27 17:55 ` Santhosh Kumar K
2026-05-27 18:44 ` sashiko-bot
2026-05-28 8:54 ` Miquel Raynal
2026-05-28 8:54 ` Miquel Raynal
2026-06-01 8:44 ` Santhosh Kumar K
2026-06-01 8:44 ` Santhosh Kumar K
2026-05-27 17:55 ` [PATCH v3 09/13] spi: cadence-quadspi: reject 2-byte-address DDR ops on PHY-tunable hardware Santhosh Kumar K
2026-05-27 17:55 ` Santhosh Kumar K
2026-05-28 9:01 ` Miquel Raynal
2026-05-28 9:01 ` Miquel Raynal
2026-06-01 9:27 ` Santhosh Kumar K
2026-06-01 9:27 ` Santhosh Kumar K
2026-06-02 12:25 ` Miquel Raynal
2026-06-02 12:25 ` Miquel Raynal
2026-05-27 17:55 ` [PATCH v3 10/13] spi: cadence-quadspi: enable PHY for direct reads and indirect writes Santhosh Kumar K
2026-05-27 17:55 ` Santhosh Kumar K
2026-05-27 18:36 ` sashiko-bot
2026-05-28 9:09 ` Miquel Raynal
2026-05-28 9:09 ` Miquel Raynal
2026-06-01 8:39 ` Santhosh Kumar K
2026-06-01 8:39 ` Santhosh Kumar K
2026-06-02 12:15 ` Miquel Raynal
2026-06-02 12:15 ` Miquel Raynal
2026-05-27 17:55 ` [PATCH v3 11/13] mtd: spinand: run PHY tuning after init and update dirmap frequencies Santhosh Kumar K
2026-05-27 17:55 ` Santhosh Kumar K
2026-05-27 19:04 ` sashiko-bot
2026-05-28 9:27 ` Miquel Raynal
2026-05-28 9:27 ` Miquel Raynal
2026-06-01 9:16 ` Santhosh Kumar K
2026-06-01 9:16 ` Santhosh Kumar K
2026-06-02 12:18 ` Miquel Raynal
2026-06-02 12:18 ` Miquel Raynal
2026-05-27 17:55 ` [PATCH v3 12/13] mtd: spi-nor: extract read op template construction into helper Santhosh Kumar K
2026-05-27 17:55 ` Santhosh Kumar K
2026-05-27 17:55 ` [PATCH v3 13/13] mtd: spi-nor: run PHY tuning after init and update dirmap frequency Santhosh Kumar K
2026-05-27 17:55 ` Santhosh Kumar K
2026-05-27 18:59 ` sashiko-bot
2026-05-28 8:30 ` Miquel Raynal [this message]
2026-05-28 8:30 ` [PATCH v3 00/13] spi: cadence-quadspi: add PHY tuning support Miquel Raynal
2026-06-01 8:02 ` Santhosh Kumar K
2026-06-01 8: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=8733zchr6o.fsf@bootlin.com \
--to=miquel.raynal@bootlin.com \
--cc=a-dutta@ti.com \
--cc=broonie@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=linux-spi@vger.kernel.org \
--cc=mwalle@kernel.org \
--cc=praneeth@ti.com \
--cc=pratyush@kernel.org \
--cc=richard@nod.at \
--cc=robh@kernel.org \
--cc=s-k6@ti.com \
--cc=takahiro.kuwano@infineon.com \
--cc=u-kumar1@ti.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.