Skip to content

Commit 2438db5

Browse files
miquelraynalbroonie
authored andcommitted
spi: fsl-qspi: Support per spi-mem operation frequency switches
Every ->exec_op() call correctly configures the spi bus speed to the maximum allowed frequency for the memory using the constant spi default parameter. Since we can now have per-operation constraints, let's use the value that comes from the spi-mem operation structure instead. In case there is no specific limitation for this operation, the default spi device value will be given anyway. The per-operation frequency capability is thus advertised to the spi-mem core. Cc: Han Xu <[email protected]> Signed-off-by: Miquel Raynal <[email protected]> Link: https://patch.msgid.link/20241224-winbond-6-11-rc1-quad-support-v2-8-ad218dbc406f@bootlin.com Signed-off-by: Mark Brown <[email protected]>
1 parent eee7bc9 commit 2438db5

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

drivers/spi/spi-fsl-qspi.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -522,9 +522,10 @@ static void fsl_qspi_invalidate(struct fsl_qspi *q)
522522
qspi_writel(q, reg, q->iobase + QUADSPI_MCR);
523523
}
524524

525-
static void fsl_qspi_select_mem(struct fsl_qspi *q, struct spi_device *spi)
525+
static void fsl_qspi_select_mem(struct fsl_qspi *q, struct spi_device *spi,
526+
const struct spi_mem_op *op)
526527
{
527-
unsigned long rate = spi->max_speed_hz;
528+
unsigned long rate = op->max_freq;
528529
int ret;
529530

530531
if (q->selected == spi_get_chipselect(spi, 0))
@@ -652,7 +653,7 @@ static int fsl_qspi_exec_op(struct spi_mem *mem, const struct spi_mem_op *op)
652653
fsl_qspi_readl_poll_tout(q, base + QUADSPI_SR, (QUADSPI_SR_IP_ACC_MASK |
653654
QUADSPI_SR_AHB_ACC_MASK), 10, 1000);
654655

655-
fsl_qspi_select_mem(q, mem->spi);
656+
fsl_qspi_select_mem(q, mem->spi, op);
656657

657658
if (needs_amba_base_offset(q))
658659
addr_offset = q->memmap_phy;
@@ -839,6 +840,10 @@ static const struct spi_controller_mem_ops fsl_qspi_mem_ops = {
839840
.get_name = fsl_qspi_get_name,
840841
};
841842

843+
static const struct spi_controller_mem_caps fsl_qspi_mem_caps = {
844+
.per_op_freq = true,
845+
};
846+
842847
static int fsl_qspi_probe(struct platform_device *pdev)
843848
{
844849
struct spi_controller *ctlr;
@@ -923,6 +928,7 @@ static int fsl_qspi_probe(struct platform_device *pdev)
923928
ctlr->bus_num = -1;
924929
ctlr->num_chipselect = 4;
925930
ctlr->mem_ops = &fsl_qspi_mem_ops;
931+
ctlr->mem_caps = &fsl_qspi_mem_caps;
926932

927933
fsl_qspi_default_setup(q);
928934

0 commit comments

Comments
 (0)