From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Tudor Ambarus <tudor.ambarus@linaro.org>
Cc: Richard Weinberger <richard@nod.at>,
Vignesh Raghavendra <vigneshr@ti.com>,
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, 23 Dec 2024 20:08:35 +0100 [thread overview]
Message-ID: <878qs6rzd8.fsf@bootlin.com> (raw)
In-Reply-To: <8738dbbc-e2a9-49dc-9234-65de6435bc45@linaro.org> (Tudor Ambarus's message of "Wed, 18 Dec 2024 10:13:39 +0000")
Hello,
On 18/12/2024 at 10:13:39 GMT, Tudor Ambarus <tudor.ambarus@linaro.org> wrote:
> On 12/18/24 10:03 AM, Tudor Ambarus wrote:
>>
>>
>> On 12/18/24 9:37 AM, Miquel Raynal wrote:
>>> On 18/12/2024 at 08:07:24 GMT, Tudor Ambarus <tudor.ambarus@linaro.org> wrote:
>>>
>>>> On 12/13/24 10:46 AM, Miquel Raynal wrote:
>>>>> Hello Tudor,
>>>>>
>>>>
>>>> Hi!
>>>>
>>>>> On 11/11/2024 at 13:07:09 GMT, Tudor Ambarus <tudor.ambarus@linaro.org> wrote:
>>>>>
>>>>>> On 10/25/24 5:14 PM, Miquel Raynal wrote:
>>>>>>
>>>>>> cut
>>>>>>
>>>>>>>
>>>>>>> diff --git a/drivers/spi/spi-mem.c b/drivers/spi/spi-mem.c
>>>>>>> index 17b8baf749e6..ab650ae953bb 100644
>>>>>>> --- a/drivers/spi/spi-mem.c
>>>>>>> +++ b/drivers/spi/spi-mem.c
>>>>
>>>> cut
>>>>
>>>>>>> + if (!op->max_freq || op->max_freq > mem->spi->max_speed_hz)
>>>>>>> + ((struct spi_mem_op *)op)->max_freq = mem->spi->max_speed_hz;
>>>>>>
>>>>>> not a big fan of casting the const out. How about introducing a
>>>>>> spi_mem_adjust_op_freq()? The upper layers will use that were needed,
>>>>>> and you'll still be able to pass a const op to spi_mem_exec_op()
>>>>>
>>>>> I know it is not ideal so to follow your idea I drafted the use of
>>>>> spi_mem_adjust_op_freq(). In order to avoid the cast, we actually need
>>>>> to call this function everywhere in the core and the drivers to make
>>>>> sure we never get out of bounds, but here is the problem:
>>>>>
>>>>> $ git grep -w spi_mem_exec_op -- drivers/ | wc -l
>>>>> 42
>>>>>
>>>>> This approach requires to add a call to spi_mem_adjust_op_freq() before
>>>>> *every* spi_mem_exec_op(). Yes I can do that but that means to be very
>>>>> attentive to the fact that these two functions are always called
>>>>> together. I am not sure it is a good idea.
>>>>>
>>>>> What about doing the following once in spi_mem_exec_op() instead?
>>>>>
>>>>> spi_mem_adjust_op_freq(desc->mem, (struct spi_mem_op *)op);
>>>>>
>>>>> I know we still have a cast, but it feels more acceptable than the one I
>>>>> initially proposed and covers all cases. I would not accept that in a
>>>>> driver, but here we are in the core, so that sounds acceptable.
>>>>>
>>>>> Another possibility otherwise would be to drop the const from the
>>>>> spi_mem_op structure entirely. But I prefer the above function call.
>>>>
>>>> How about introducing a spi_nand_spimem_exec_op() where you call
>>>> spi_mem_adjust_op_freq() and spi_mem_exec_op()?
>>>
>>> That would work to make the cast disappear but TBH would not be totally
>>> relevant as adjusting the frequency is typically something that would
>>> benefit to spi-nor as well (maybe in the future) and therefore would
>>
>> Right, SPI NOR will benefit of this too.
>>
>>> fully apply to spi memories as a whole, not just spi-nand. We can think
>>> about another naming maybe, but I find like spi_mem_exec_op() is the
>>> right location to do this.
>>>
>>
>> It's not the first time that we adjust spi_mem_op parameters, see:
>> https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git/tree/drivers/mtd/spi-nor/core.c?h=spi-nor/next#n153
>>
>> Does SPI NAND need to call spi_mem_adjust_op_size as well? I see it
>> calls it when using dirmap, but not with a plain spi_mem_exec_op().
>>
>
> I ask because I'm thinking of adding in the SPIMEM core a prepare()
> method, and maybe rename exec_op() to exec(). And then introduce a
> prepare_exec() method that the upper layers would call? Similar to
> clk_prepare_enable.
Do you have something else in mind you would like to put in the prepare
step? I am not at all opposed to it, but I feel like for now the
spi_mem_exec_op() is a fine path for that, especially since there are
very little things to "prepare" (for now).
Do you mind if I keep the cast (not the one from the series, I cleaned
that up to have an adjust_op function as discussed) for now, and if you
ever go the prepare/exec path we would get this converted to use the new
API? I'd like to make progresses on other topics in the spi-nand core
and avoid being blocked by a bigger task that we need to discuss first.
Cheers,
Miquèl
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
WARNING: multiple messages have this Message-ID (diff)
From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Tudor Ambarus <tudor.ambarus@linaro.org>
Cc: Richard Weinberger <richard@nod.at>,
Vignesh Raghavendra <vigneshr@ti.com>,
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, 23 Dec 2024 20:08:35 +0100 [thread overview]
Message-ID: <878qs6rzd8.fsf@bootlin.com> (raw)
In-Reply-To: <8738dbbc-e2a9-49dc-9234-65de6435bc45@linaro.org> (Tudor Ambarus's message of "Wed, 18 Dec 2024 10:13:39 +0000")
Hello,
On 18/12/2024 at 10:13:39 GMT, Tudor Ambarus <tudor.ambarus@linaro.org> wrote:
> On 12/18/24 10:03 AM, Tudor Ambarus wrote:
>>
>>
>> On 12/18/24 9:37 AM, Miquel Raynal wrote:
>>> On 18/12/2024 at 08:07:24 GMT, Tudor Ambarus <tudor.ambarus@linaro.org> wrote:
>>>
>>>> On 12/13/24 10:46 AM, Miquel Raynal wrote:
>>>>> Hello Tudor,
>>>>>
>>>>
>>>> Hi!
>>>>
>>>>> On 11/11/2024 at 13:07:09 GMT, Tudor Ambarus <tudor.ambarus@linaro.org> wrote:
>>>>>
>>>>>> On 10/25/24 5:14 PM, Miquel Raynal wrote:
>>>>>>
>>>>>> cut
>>>>>>
>>>>>>>
>>>>>>> diff --git a/drivers/spi/spi-mem.c b/drivers/spi/spi-mem.c
>>>>>>> index 17b8baf749e6..ab650ae953bb 100644
>>>>>>> --- a/drivers/spi/spi-mem.c
>>>>>>> +++ b/drivers/spi/spi-mem.c
>>>>
>>>> cut
>>>>
>>>>>>> + if (!op->max_freq || op->max_freq > mem->spi->max_speed_hz)
>>>>>>> + ((struct spi_mem_op *)op)->max_freq = mem->spi->max_speed_hz;
>>>>>>
>>>>>> not a big fan of casting the const out. How about introducing a
>>>>>> spi_mem_adjust_op_freq()? The upper layers will use that were needed,
>>>>>> and you'll still be able to pass a const op to spi_mem_exec_op()
>>>>>
>>>>> I know it is not ideal so to follow your idea I drafted the use of
>>>>> spi_mem_adjust_op_freq(). In order to avoid the cast, we actually need
>>>>> to call this function everywhere in the core and the drivers to make
>>>>> sure we never get out of bounds, but here is the problem:
>>>>>
>>>>> $ git grep -w spi_mem_exec_op -- drivers/ | wc -l
>>>>> 42
>>>>>
>>>>> This approach requires to add a call to spi_mem_adjust_op_freq() before
>>>>> *every* spi_mem_exec_op(). Yes I can do that but that means to be very
>>>>> attentive to the fact that these two functions are always called
>>>>> together. I am not sure it is a good idea.
>>>>>
>>>>> What about doing the following once in spi_mem_exec_op() instead?
>>>>>
>>>>> spi_mem_adjust_op_freq(desc->mem, (struct spi_mem_op *)op);
>>>>>
>>>>> I know we still have a cast, but it feels more acceptable than the one I
>>>>> initially proposed and covers all cases. I would not accept that in a
>>>>> driver, but here we are in the core, so that sounds acceptable.
>>>>>
>>>>> Another possibility otherwise would be to drop the const from the
>>>>> spi_mem_op structure entirely. But I prefer the above function call.
>>>>
>>>> How about introducing a spi_nand_spimem_exec_op() where you call
>>>> spi_mem_adjust_op_freq() and spi_mem_exec_op()?
>>>
>>> That would work to make the cast disappear but TBH would not be totally
>>> relevant as adjusting the frequency is typically something that would
>>> benefit to spi-nor as well (maybe in the future) and therefore would
>>
>> Right, SPI NOR will benefit of this too.
>>
>>> fully apply to spi memories as a whole, not just spi-nand. We can think
>>> about another naming maybe, but I find like spi_mem_exec_op() is the
>>> right location to do this.
>>>
>>
>> It's not the first time that we adjust spi_mem_op parameters, see:
>> https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git/tree/drivers/mtd/spi-nor/core.c?h=spi-nor/next#n153
>>
>> Does SPI NAND need to call spi_mem_adjust_op_size as well? I see it
>> calls it when using dirmap, but not with a plain spi_mem_exec_op().
>>
>
> I ask because I'm thinking of adding in the SPIMEM core a prepare()
> method, and maybe rename exec_op() to exec(). And then introduce a
> prepare_exec() method that the upper layers would call? Similar to
> clk_prepare_enable.
Do you have something else in mind you would like to put in the prepare
step? I am not at all opposed to it, but I feel like for now the
spi_mem_exec_op() is a fine path for that, especially since there are
very little things to "prepare" (for now).
Do you mind if I keep the cast (not the one from the series, I cleaned
that up to have an adjust_op function as discussed) for now, and if you
ever go the prepare/exec path we would get this converted to use the new
API? I'd like to make progresses on other topics in the spi-nand core
and avoid being blocked by a bigger task that we need to discuss first.
Cheers,
Miquèl
next prev parent reply other threads:[~2024-12-23 19:08 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 [this message]
2024-12-23 19:08 ` Miquel Raynal
2024-11-25 16:05 ` Pratyush Yadav
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=878qs6rzd8.fsf@bootlin.com \
--to=miquel.raynal@bootlin.com \
--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=pratyush@kernel.org \
--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.