Skip to content

Commit 3fede03

Browse files
committed
spi: spi-nxp-fspi: Add the DDR LUT command support
JIRA: https://issues.redhat.com/browse/RHEL-104570 commit 3c1000e Author: Haibo Chen <haibo.chen@nxp.com> Date: Wed Sep 17 15:27:08 2025 +0800 spi: spi-nxp-fspi: Add the DDR LUT command support For DTR mode, flexspi need to use DDR LUT command, flexspi will switch to DDR mode when detect the DDR LUT command. Reviewed-by: Frank Li <Frank.Li@nxp.com> Signed-off-by: Haibo Chen <haibo.chen@nxp.com> Link: https://patch.msgid.link/20250917-flexspi-ddr-v2-3-bb9fe2a01889@nxp.com Signed-off-by: Mark Brown <broonie@kernel.org> Signed-off-by: Mattijs Korpershoek <mkorpershoek@redhat.com>
1 parent c3357e4 commit 3fede03

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

drivers/spi/spi-nxp-fspi.c

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -559,20 +559,29 @@ static void nxp_fspi_prepare_lut(struct nxp_fspi *f,
559559
u32 target_lut_reg;
560560

561561
/* cmd */
562-
lutval[0] |= LUT_DEF(0, LUT_CMD, LUT_PAD(op->cmd.buswidth),
563-
op->cmd.opcode);
562+
if (op->cmd.dtr) {
563+
lutval[0] |= LUT_DEF(0, LUT_CMD_DDR, LUT_PAD(op->cmd.buswidth),
564+
op->cmd.opcode >> 8);
565+
lutval[lutidx / 2] |= LUT_DEF(lutidx, LUT_CMD_DDR,
566+
LUT_PAD(op->cmd.buswidth),
567+
op->cmd.opcode & 0xFF);
568+
lutidx++;
569+
} else {
570+
lutval[0] |= LUT_DEF(0, LUT_CMD, LUT_PAD(op->cmd.buswidth),
571+
op->cmd.opcode);
572+
}
564573

565574
/* addr bytes */
566575
if (op->addr.nbytes) {
567-
lutval[lutidx / 2] |= LUT_DEF(lutidx, LUT_ADDR,
576+
lutval[lutidx / 2] |= LUT_DEF(lutidx, op->addr.dtr ? LUT_ADDR_DDR : LUT_ADDR,
568577
LUT_PAD(op->addr.buswidth),
569578
op->addr.nbytes * 8);
570579
lutidx++;
571580
}
572581

573582
/* dummy bytes, if needed */
574583
if (op->dummy.nbytes) {
575-
lutval[lutidx / 2] |= LUT_DEF(lutidx, LUT_DUMMY,
584+
lutval[lutidx / 2] |= LUT_DEF(lutidx, op->dummy.dtr ? LUT_DUMMY_DDR : LUT_DUMMY,
576585
/*
577586
* Due to FlexSPI controller limitation number of PAD for dummy
578587
* buswidth needs to be programmed as equal to data buswidth.
@@ -587,7 +596,8 @@ static void nxp_fspi_prepare_lut(struct nxp_fspi *f,
587596
if (op->data.nbytes) {
588597
lutval[lutidx / 2] |= LUT_DEF(lutidx,
589598
op->data.dir == SPI_MEM_DATA_IN ?
590-
LUT_NXP_READ : LUT_NXP_WRITE,
599+
(op->data.dtr ? LUT_READ_DDR : LUT_NXP_READ) :
600+
(op->data.dtr ? LUT_WRITE_DDR : LUT_NXP_WRITE),
591601
LUT_PAD(op->data.buswidth),
592602
0);
593603
lutidx++;

0 commit comments

Comments
 (0)