Skip to content

Commit ae62e7c

Browse files
miquelraynalbroonie
authored andcommitted
spi: cadence-qspi: Add a flag for controllers without indirect access support
Renesas RZ/N1 QSPI controllers embed the Cadence IP with some limitations/simplifications. One of the is that only direct access is supported, none of the registers related to indirect writes are populated, so create a flag to avoid these accesses and make sure only direct accessors are called. Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com> Signed-off-by: Miquel Raynal (Schneider Electric) <miquel.raynal@bootlin.com> Tested-by: Santhosh Kumar K <s-k6@ti.com> Link: https://patch.msgid.link/20260122-schneider-6-19-rc1-qspi-v4-11-f9c21419a3e6@bootlin.com Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent 612227b commit ae62e7c

1 file changed

Lines changed: 16 additions & 13 deletions

File tree

drivers/spi/spi-cadence-quadspi.c

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ static_assert(CQSPI_MAX_CHIPSELECT <= SPI_DEVICE_CS_CNT_MAX);
4747
#define CQSPI_SUPPORT_DEVICE_RESET BIT(8)
4848
#define CQSPI_DISABLE_STIG_MODE BIT(9)
4949
#define CQSPI_DISABLE_RUNTIME_PM BIT(10)
50+
#define CQSPI_NO_INDIRECT_MODE BIT(11)
5051

5152
/* Capabilities */
5253
#define CQSPI_SUPPORTS_OCTAL BIT(0)
@@ -1425,7 +1426,8 @@ static ssize_t cqspi_read(struct cqspi_flash_pdata *f_pdata,
14251426
if (ret)
14261427
return ret;
14271428

1428-
if (cqspi->use_direct_mode && ((from + len) <= cqspi->ahb_size))
1429+
if ((cqspi->use_direct_mode && ((from + len) <= cqspi->ahb_size)) ||
1430+
(cqspi->ddata && cqspi->ddata->quirks & CQSPI_NO_INDIRECT_MODE))
14291431
return cqspi_direct_read_execute(f_pdata, buf, from, len);
14301432

14311433
if (cqspi->use_dma_read && ddata && ddata->indirect_read_dma &&
@@ -1626,19 +1628,20 @@ static void cqspi_controller_init(struct cqspi_st *cqspi)
16261628
/* Disable all interrupts. */
16271629
writel(0, cqspi->iobase + CQSPI_REG_IRQMASK);
16281630

1629-
/* Configure the SRAM split to 1:1 . */
1630-
writel(cqspi->fifo_depth / 2, cqspi->iobase + CQSPI_REG_SRAMPARTITION);
1631+
if (!(cqspi->ddata && cqspi->ddata->quirks & CQSPI_NO_INDIRECT_MODE)) {
1632+
/* Configure the SRAM split to 1:1 . */
1633+
writel(cqspi->fifo_depth / 2, cqspi->iobase + CQSPI_REG_SRAMPARTITION);
1634+
/* Load indirect trigger address. */
1635+
writel(cqspi->trigger_address,
1636+
cqspi->iobase + CQSPI_REG_INDIRECTTRIGGER);
16311637

1632-
/* Load indirect trigger address. */
1633-
writel(cqspi->trigger_address,
1634-
cqspi->iobase + CQSPI_REG_INDIRECTTRIGGER);
1635-
1636-
/* Program read watermark -- 1/2 of the FIFO. */
1637-
writel(cqspi->fifo_depth * cqspi->fifo_width / 2,
1638-
cqspi->iobase + CQSPI_REG_INDIRECTRDWATERMARK);
1639-
/* Program write watermark -- 1/8 of the FIFO. */
1640-
writel(cqspi->fifo_depth * cqspi->fifo_width / 8,
1641-
cqspi->iobase + CQSPI_REG_INDIRECTWRWATERMARK);
1638+
/* Program read watermark -- 1/2 of the FIFO. */
1639+
writel(cqspi->fifo_depth * cqspi->fifo_width / 2,
1640+
cqspi->iobase + CQSPI_REG_INDIRECTRDWATERMARK);
1641+
/* Program write watermark -- 1/8 of the FIFO. */
1642+
writel(cqspi->fifo_depth * cqspi->fifo_width / 8,
1643+
cqspi->iobase + CQSPI_REG_INDIRECTWRWATERMARK);
1644+
}
16421645

16431646
/* Disable direct access controller */
16441647
if (!cqspi->use_direct_mode) {

0 commit comments

Comments
 (0)