Re: [PATCH v3 04/13] spi: spi-mem: add spi_mem_apply_base_freq_cap()

From: Santhosh Kumar K

Date: Thu Jun 04 2026 - 08:21:57 EST


Hello Miquel,

On 28/05/26 14:13, Miquel Raynal wrote:
Hi Santhosh,

--- a/drivers/spi/spi-mem.c
+++ b/drivers/spi/spi-mem.c
@@ -398,7 +398,11 @@ int spi_mem_exec_op(struct spi_mem *mem, const struct spi_mem_op *op)
u8 *tmpbuf;
int ret;
- /* Make sure the operation frequency is correct before going futher */
+ /*
+ * Ops not configured for maximum speed are limited to the conservative
+ * base speed; spi_mem_adjust_op_freq() then caps to the device maximum.
+ */
+ spi_mem_apply_base_freq_cap(mem, (struct spi_mem_op *)op);
spi_mem_adjust_op_freq(mem, (struct spi_mem_op *)op);

There are many more spi_mem_adjust_op_freq() calls in the core where we would
not apply the base frequency. Aren't we missing these places? Wouldn't it
be more appropriate to call spi_mem_apply_base_freq_cap() at the beginning
of spi_mem_adjust_op_freq() ?

Moving spi_mem_apply_base_freq() into spi_mem_adjust_op_freq() would
affect operation selection.

spi_mem_adjust_op_freq() is used during variant evaluation through
spinand_select_op_variant() and spi_mem_calc_op_duration(). Applying the
cap there would cause all candidates to be evaluated at base_speed_hz
rather than the actual max_speed_hz. As a result, variant selection
could converge on a different operation than the one that would be
optimal.

Keeping the cap in spi_mem_exec_op() restricts it to the execution path,
while allowing operation selection and duration calculations to continue
using the maximum achievable frequency.

Regards,
Santhosh.


Thanks,
Miquèl