From: Pratyush Yadav <pratyush@kernel.org>
To: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: Richard Weinberger <richard@nod.at>,
Vignesh Raghavendra <vigneshr@ti.com>,
Tudor Ambarus <tudor.ambarus@linaro.org>,
Pratyush Yadav <pratyush@kernel.org>,
Michael Walle <michael@walle.cc>,
<linux-mtd@lists.infradead.org>, Mark Brown <broonie@kernel.org>,
<linux-spi@vger.kernel.org>, Steam Lin <stlin2@winbond.com>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
Sanjay R Mehta <sanju.mehta@amd.com>, Han Xu <han.xu@nxp.com>,
Conor Dooley <conor.dooley@microchip.com>,
Daire McNamara <daire.mcnamara@microchip.com>,
Matthias Brugger <matthias.bgg@gmail.com>,
AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com>,
Haibo Chen <haibo.chen@nxp.com>,
Yogesh Gaur <yogeshgaur.83@gmail.com>,
Heiko Stuebner <heiko@sntech.de>,
Michal Simek <michal.simek@amd.com>
Subject: Re: [PATCH 01/24] spi: spi-mem: Extend spi-mem operations with a per-operation maximum frequency
Date: Mon, 25 Nov 2024 16:05:18 +0000 [thread overview]
Message-ID: <mafs04j3v5mf5.fsf@kernel.org> (raw)
In-Reply-To: <20241025161501.485684-2-miquel.raynal@bootlin.com> (Miquel Raynal's message of "Fri, 25 Oct 2024 18:14:38 +0200")
On Fri, Oct 25 2024, Miquel Raynal wrote:
> In the spi subsystem, the bus frequency is derived as follows:
> - the controller may expose a minimum and maximum operating frequency
> - the hardware description, through the spi peripheral properties,
> advise what is the maximum acceptable frequency from a device/wiring
> point of view.
> Transfers must be observed at a frequency which fits both (so in
> practice, the lowest maximum).
>
> Actually, this second point mixes two information and already takes the
> lowest frequency among:
> - what the spi device is capable of (what is written in the component
> datasheet)
> - what the wiring allows (electromagnetic sensibility, crossovers,
> terminations, antenna effect, etc).
>
> This logic works until spi devices are no longer capable of sustaining
> their highest frequency regardless of the operation. Spi memories are
> typically subject to such variation. Some devices are capable of
> spitting their internally stored data (essentially in read mode) at a
> very fast rate, typically up to 166MHz on Winbond SPI-NAND chips, using
> "fast" commands. However, some of the low-end operations, such as
> regular page read-from-cache commands, are more limited and can only be
> executed at 54MHz at most. This is currently a problem in the SPI-NAND
> subsystem. Another situation, even if not yet supported, will be with
> DTR commands, when the data is latched on both edges of the clock. The
> same chips as mentioned previously are in this case limited to
> 80MHz. Yet another example might be continuous reads, which, under
> certain circumstances, can also run at most at 104 or 120MHz.
It's been a while so I don't remember the specifics anymore, but IIRC
some NOR flashes had the same issue. Some commands could only run at a
lower frequency.
>
> As a matter of fact, the "one frequency per chip" policy is outdated and
> more fine grain configuration is needed: we need to allow per-operation
> frequency limitations. So far, all datasheets I encountered advertise a
> maximum default frequency, which need to be lowered for certain specific
> operations. So based on the current infrastructure, we can still expect
> firmware (device trees in general) to continued advertising the same
> maximum speed which is a mix between the PCB limitations and the chip
> maximum capability, and expect per-operation lower frequencies when this
> is relevant.
>
> Add a `struct spi_mem_op` member to carry this information. Not
> providing this field explicitly from upper layers means that there is no
> further constraint and the default spi device maximum speed will be
> carried instead. The SPI_MEM_OP() macro is also expanded with an
> optional frequency argument, because virtually all operations can be
> subject to such a limitation, and this will allow for a smooth and
> discrete transition.
>
> For controller drivers which do not implement the spi-mem interface, the
> per-transfer speed is also set acordingly to a lower (than the maximum
> default) speed, or 0, to comply with the current API.
>
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> ---
[...]
> /**
> * struct spi_mem_op - describes a SPI memory operation
> * @cmd.nbytes: number of opcode bytes (only 1 or 2 are valid). The opcode is
> @@ -95,6 +98,9 @@ enum spi_mem_data_dir {
> * operation does not involve transferring data
> * @data.buf.in: input buffer (must be DMA-able)
> * @data.buf.out: output buffer (must be DMA-able)
> + * @max_freq: frequency limitation wrt this operation. 0 means there is no
> + * specific constraint and the highest achievable frequency can be
> + * attempted).
> */
> struct spi_mem_op {
> struct {
> @@ -132,14 +138,17 @@ struct spi_mem_op {
> const void *out;
> } buf;
> } data;
> +
> + unsigned int max_freq;
So we limit the maximum frequency to roughly 4.2 GHz. Seems reasonable,
considering the top end NOR flashes do up to 200-300 MHz.
Didn't look too closely at the code but the idea seems good to me.
Acked-by: Pratyush Yadav <pratyush@kernel.org>
--
Regards,
Pratyush Yadav
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
WARNING: multiple messages have this Message-ID (diff)
From: Pratyush Yadav <pratyush@kernel.org>
To: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: Richard Weinberger <richard@nod.at>,
Vignesh Raghavendra <vigneshr@ti.com>,
Tudor Ambarus <tudor.ambarus@linaro.org>,
Pratyush Yadav <pratyush@kernel.org>,
Michael Walle <michael@walle.cc>,
<linux-mtd@lists.infradead.org>, Mark Brown <broonie@kernel.org>,
<linux-spi@vger.kernel.org>, Steam Lin <stlin2@winbond.com>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
Sanjay R Mehta <sanju.mehta@amd.com>, Han Xu <han.xu@nxp.com>,
Conor Dooley <conor.dooley@microchip.com>,
Daire McNamara <daire.mcnamara@microchip.com>,
Matthias Brugger <matthias.bgg@gmail.com>,
AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com>,
Haibo Chen <haibo.chen@nxp.com>,
Yogesh Gaur <yogeshgaur.83@gmail.com>,
Heiko Stuebner <heiko@sntech.de>,
Michal Simek <michal.simek@amd.com>
Subject: Re: [PATCH 01/24] spi: spi-mem: Extend spi-mem operations with a per-operation maximum frequency
Date: Mon, 25 Nov 2024 16:05:18 +0000 [thread overview]
Message-ID: <mafs04j3v5mf5.fsf@kernel.org> (raw)
In-Reply-To: <20241025161501.485684-2-miquel.raynal@bootlin.com> (Miquel Raynal's message of "Fri, 25 Oct 2024 18:14:38 +0200")
On Fri, Oct 25 2024, Miquel Raynal wrote:
> In the spi subsystem, the bus frequency is derived as follows:
> - the controller may expose a minimum and maximum operating frequency
> - the hardware description, through the spi peripheral properties,
> advise what is the maximum acceptable frequency from a device/wiring
> point of view.
> Transfers must be observed at a frequency which fits both (so in
> practice, the lowest maximum).
>
> Actually, this second point mixes two information and already takes the
> lowest frequency among:
> - what the spi device is capable of (what is written in the component
> datasheet)
> - what the wiring allows (electromagnetic sensibility, crossovers,
> terminations, antenna effect, etc).
>
> This logic works until spi devices are no longer capable of sustaining
> their highest frequency regardless of the operation. Spi memories are
> typically subject to such variation. Some devices are capable of
> spitting their internally stored data (essentially in read mode) at a
> very fast rate, typically up to 166MHz on Winbond SPI-NAND chips, using
> "fast" commands. However, some of the low-end operations, such as
> regular page read-from-cache commands, are more limited and can only be
> executed at 54MHz at most. This is currently a problem in the SPI-NAND
> subsystem. Another situation, even if not yet supported, will be with
> DTR commands, when the data is latched on both edges of the clock. The
> same chips as mentioned previously are in this case limited to
> 80MHz. Yet another example might be continuous reads, which, under
> certain circumstances, can also run at most at 104 or 120MHz.
It's been a while so I don't remember the specifics anymore, but IIRC
some NOR flashes had the same issue. Some commands could only run at a
lower frequency.
>
> As a matter of fact, the "one frequency per chip" policy is outdated and
> more fine grain configuration is needed: we need to allow per-operation
> frequency limitations. So far, all datasheets I encountered advertise a
> maximum default frequency, which need to be lowered for certain specific
> operations. So based on the current infrastructure, we can still expect
> firmware (device trees in general) to continued advertising the same
> maximum speed which is a mix between the PCB limitations and the chip
> maximum capability, and expect per-operation lower frequencies when this
> is relevant.
>
> Add a `struct spi_mem_op` member to carry this information. Not
> providing this field explicitly from upper layers means that there is no
> further constraint and the default spi device maximum speed will be
> carried instead. The SPI_MEM_OP() macro is also expanded with an
> optional frequency argument, because virtually all operations can be
> subject to such a limitation, and this will allow for a smooth and
> discrete transition.
>
> For controller drivers which do not implement the spi-mem interface, the
> per-transfer speed is also set acordingly to a lower (than the maximum
> default) speed, or 0, to comply with the current API.
>
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> ---
[...]
> /**
> * struct spi_mem_op - describes a SPI memory operation
> * @cmd.nbytes: number of opcode bytes (only 1 or 2 are valid). The opcode is
> @@ -95,6 +98,9 @@ enum spi_mem_data_dir {
> * operation does not involve transferring data
> * @data.buf.in: input buffer (must be DMA-able)
> * @data.buf.out: output buffer (must be DMA-able)
> + * @max_freq: frequency limitation wrt this operation. 0 means there is no
> + * specific constraint and the highest achievable frequency can be
> + * attempted).
> */
> struct spi_mem_op {
> struct {
> @@ -132,14 +138,17 @@ struct spi_mem_op {
> const void *out;
> } buf;
> } data;
> +
> + unsigned int max_freq;
So we limit the maximum frequency to roughly 4.2 GHz. Seems reasonable,
considering the top end NOR flashes do up to 200-300 MHz.
Didn't look too closely at the code but the idea seems good to me.
Acked-by: Pratyush Yadav <pratyush@kernel.org>
--
Regards,
Pratyush Yadav
next prev parent reply other threads:[~2024-11-25 16:05 UTC|newest]
Thread overview: 142+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-25 16:14 [PATCH 00/24] spi-nand/spi-mem DTR support Miquel Raynal
2024-10-25 16:14 ` Miquel Raynal
2024-10-25 16:14 ` [PATCH 01/24] spi: spi-mem: Extend spi-mem operations with a per-operation maximum frequency Miquel Raynal
2024-10-25 16:14 ` Miquel Raynal
2024-10-30 20:52 ` Han Xu
2024-10-30 20:52 ` Han Xu
2024-10-31 6:45 ` Tudor Ambarus
2024-10-31 6:45 ` Tudor Ambarus
2024-11-11 13:07 ` Tudor Ambarus
2024-11-11 13:07 ` Tudor Ambarus
2024-12-13 10:46 ` Miquel Raynal
2024-12-13 10:46 ` Miquel Raynal
2024-12-18 8:07 ` Tudor Ambarus
2024-12-18 8:07 ` Tudor Ambarus
2024-12-18 9:37 ` Miquel Raynal
2024-12-18 9:37 ` Miquel Raynal
2024-12-18 10:03 ` Tudor Ambarus
2024-12-18 10:03 ` Tudor Ambarus
2024-12-18 10:13 ` Tudor Ambarus
2024-12-18 10:13 ` Tudor Ambarus
2024-12-23 19:08 ` Miquel Raynal
2024-12-23 19:08 ` Miquel Raynal
2024-11-25 16:05 ` Pratyush Yadav [this message]
2024-11-25 16:05 ` Pratyush Yadav
2024-10-25 16:14 ` [PATCH 02/24] spi: spi-mem: Add a new controller capability Miquel Raynal
2024-10-25 16:14 ` Miquel Raynal
2024-10-28 21:10 ` Mark Brown
2024-10-28 21:10 ` Mark Brown
2024-11-01 20:17 ` Mark Brown
2024-11-01 20:17 ` Mark Brown
2024-11-07 10:40 ` Miquel Raynal
2024-11-07 10:40 ` Miquel Raynal
2024-11-07 17:15 ` Mark Brown
2024-11-07 17:15 ` Mark Brown
2024-11-08 8:55 ` Miquel Raynal
2024-11-08 8:55 ` Miquel Raynal
2024-11-08 12:59 ` Mark Brown
2024-11-08 12:59 ` Mark Brown
2024-11-11 13:18 ` Tudor Ambarus
2024-11-11 13:18 ` Tudor Ambarus
2024-12-13 11:00 ` Miquel Raynal
2024-12-13 11:00 ` Miquel Raynal
2024-10-25 16:14 ` [PATCH 03/24] spi: amd: Support per spi-mem operation frequency switches Miquel Raynal
2024-10-25 16:14 ` Miquel Raynal
2024-11-11 13:36 ` Tudor Ambarus
2024-11-11 13:36 ` Tudor Ambarus
2024-12-13 11:20 ` Miquel Raynal
2024-12-13 11:20 ` Miquel Raynal
2024-10-25 16:14 ` [PATCH 04/24] spi: amlogic-spifc-a1: " Miquel Raynal
2024-10-25 16:14 ` Miquel Raynal
2024-11-11 13:42 ` Tudor Ambarus
2024-11-11 13:42 ` Tudor Ambarus
2024-12-13 11:44 ` Miquel Raynal
2024-12-13 11:44 ` Miquel Raynal
2024-12-18 8:09 ` Tudor Ambarus
2024-12-18 8:09 ` Tudor Ambarus
2024-10-25 16:14 ` [PATCH 05/24] spi: cadence-qspi: " Miquel Raynal
2024-10-25 16:14 ` Miquel Raynal
2024-11-11 13:50 ` Tudor Ambarus
2024-11-11 13:50 ` Tudor Ambarus
2024-10-25 16:14 ` [PATCH 06/24] spi: dw: " Miquel Raynal
2024-10-25 16:14 ` Miquel Raynal
2024-11-11 14:05 ` Tudor Ambarus
2024-11-11 14:05 ` Tudor Ambarus
2024-10-25 16:14 ` [PATCH 07/24] spi: fsl-qspi: " Miquel Raynal
2024-10-25 16:14 ` Miquel Raynal
2024-10-25 16:14 ` [PATCH 08/24] spi: microchip-core-qspi: " Miquel Raynal
2024-10-25 16:14 ` Miquel Raynal
2024-10-25 16:14 ` [PATCH 09/24] spi: mt65xx: " Miquel Raynal
2024-10-25 16:14 ` Miquel Raynal
2024-10-25 16:14 ` [PATCH 10/24] spi: mxic: " Miquel Raynal
2024-10-25 16:14 ` Miquel Raynal
2024-10-25 16:14 ` [PATCH 11/24] spi: nxp-fspi: " Miquel Raynal
2024-10-25 16:14 ` Miquel Raynal
2024-10-25 16:14 ` [PATCH 12/24] spi: rockchip-sfc: " Miquel Raynal
2024-10-25 16:14 ` Miquel Raynal
2024-10-25 16:14 ` [PATCH 13/24] spi: spi-sn-f-ospi: " Miquel Raynal
2024-10-25 16:14 ` Miquel Raynal
2024-10-25 16:14 ` [PATCH 14/24] spi: spi-ti-qspi: " Miquel Raynal
2024-10-25 16:14 ` Miquel Raynal
2024-10-25 16:14 ` [PATCH 15/24] spi: zynq-qspi: " Miquel Raynal
2024-10-25 16:14 ` Miquel Raynal
2024-10-25 16:14 ` [PATCH 16/24] spi: zynqmp-gqspi: " Miquel Raynal
2024-10-25 16:14 ` Miquel Raynal
2024-10-25 16:14 ` [PATCH 17/24] mtd: spinand: Create distinct fast and slow read from cache variants Miquel Raynal
2024-10-25 16:14 ` Miquel Raynal
2024-11-11 14:14 ` Tudor Ambarus
2024-11-11 14:14 ` Tudor Ambarus
2024-10-25 16:14 ` [PATCH 18/24] mtd: spinand: Add an optional frequency to read from cache macros Miquel Raynal
2024-10-25 16:14 ` Miquel Raynal
2024-11-11 14:17 ` Tudor Ambarus
2024-11-11 14:17 ` Tudor Ambarus
2024-12-13 11:56 ` Miquel Raynal
2024-12-13 11:56 ` Miquel Raynal
2024-10-25 16:14 ` [PATCH 19/24] mtd: spinand: winbond: Fix the *JW chip definitions Miquel Raynal
2024-10-25 16:14 ` Miquel Raynal
2024-11-11 14:27 ` Tudor Ambarus
2024-11-11 14:27 ` Tudor Ambarus
2024-12-18 8:16 ` Tudor Ambarus
2024-12-18 8:16 ` Tudor Ambarus
2024-12-18 9:34 ` Miquel Raynal
2024-12-18 9:34 ` Miquel Raynal
2024-10-25 16:14 ` [PATCH 20/24] spi: spi-mem: Reorder SPI_MEM_OP_CMD internals Miquel Raynal
2024-10-25 16:14 ` Miquel Raynal
2024-11-11 14:32 ` Tudor Ambarus
2024-11-11 14:32 ` Tudor Ambarus
2024-12-13 12:05 ` Miquel Raynal
2024-12-13 12:05 ` Miquel Raynal
2024-10-25 16:14 ` [PATCH 21/24] spi: spi-mem: Create macros for DTR operation Miquel Raynal
2024-10-25 16:14 ` Miquel Raynal
2024-10-25 16:14 ` [PATCH 22/24] mtd: spinand: Add support for read DTR operations Miquel Raynal
2024-10-25 16:14 ` Miquel Raynal
2024-11-11 14:35 ` Tudor Ambarus
2024-11-11 14:35 ` Tudor Ambarus
2024-12-13 12:08 ` Miquel Raynal
2024-12-13 12:08 ` Miquel Raynal
2024-12-18 8:10 ` Tudor Ambarus
2024-12-18 8:10 ` Tudor Ambarus
2024-10-25 16:15 ` [PATCH 23/24] mtd: spinand: winbond: Add comment about naming Miquel Raynal
2024-10-25 16:15 ` Miquel Raynal
2024-11-11 14:38 ` Tudor Ambarus
2024-11-11 14:38 ` Tudor Ambarus
2024-11-13 9:46 ` Tudor Ambarus
2024-11-13 9:46 ` Tudor Ambarus
2024-12-13 12:25 ` Miquel Raynal
2024-12-13 12:25 ` Miquel Raynal
2024-12-18 8:14 ` Tudor Ambarus
2024-12-18 8:14 ` Tudor Ambarus
2024-12-18 9:33 ` Miquel Raynal
2024-12-18 9:33 ` Miquel Raynal
2024-12-18 10:21 ` Tudor Ambarus
2024-12-18 10:21 ` Tudor Ambarus
2024-10-25 16:15 ` [PATCH 24/24] mtd: spinand: winbond: Add support for DTR operations Miquel Raynal
2024-10-25 16:15 ` Miquel Raynal
2024-11-11 14:40 ` Tudor Ambarus
2024-11-11 14:40 ` Tudor Ambarus
2024-12-23 18:22 ` Miquel Raynal
2024-12-23 18:22 ` Miquel Raynal
2024-12-24 9:38 ` Miquel Raynal
2024-12-24 9:38 ` Miquel Raynal
2025-01-10 15:47 ` (subset) [PATCH 00/24] spi-nand/spi-mem DTR support Mark Brown
2025-01-10 15:47 ` Mark Brown
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=mafs04j3v5mf5.fsf@kernel.org \
--to=pratyush@kernel.org \
--cc=angelogioacchino.delregno@collabora.com \
--cc=broonie@kernel.org \
--cc=conor.dooley@microchip.com \
--cc=daire.mcnamara@microchip.com \
--cc=haibo.chen@nxp.com \
--cc=han.xu@nxp.com \
--cc=heiko@sntech.de \
--cc=linux-mtd@lists.infradead.org \
--cc=linux-spi@vger.kernel.org \
--cc=matthias.bgg@gmail.com \
--cc=michael@walle.cc \
--cc=michal.simek@amd.com \
--cc=miquel.raynal@bootlin.com \
--cc=richard@nod.at \
--cc=sanju.mehta@amd.com \
--cc=stlin2@winbond.com \
--cc=thomas.petazzoni@bootlin.com \
--cc=tudor.ambarus@linaro.org \
--cc=vigneshr@ti.com \
--cc=yogeshgaur.83@gmail.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.