Skip to content

Commit 33aa99a

Browse files
drivers: flash: flash_mcux_flexspi: add support for W25Q512NW-IQ/IN
Add support for the W25Q512NW-IQ/IN with the FLEXSPI, using a custom LUT table. Fixes #80592 Signed-off-by: Daniel DeGrasse <[email protected]>
1 parent c966eac commit 33aa99a

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

drivers/flash/flash_mcux_flexspi_nor.c

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,6 +1008,44 @@ static int flash_flexspi_nor_check_jedec(struct flash_flexspi_nor_data *data,
10081008
/* Device uses bit 1 of status reg 2 for QE */
10091009
return flash_flexspi_nor_quad_enable(data, flexspi_lut,
10101010
JESD216_DW15_QER_VAL_S2B1v5);
1011+
case 0x60ef:
1012+
if ((vendor_id & 0xFFFFFF) != 0x2060ef) {
1013+
/*
1014+
* This is not the correct flash chip, and will not
1015+
* support the LUT table. Return here
1016+
*/
1017+
return -ENOTSUP;
1018+
}
1019+
/* W25Q512NW-IQ/IN flash, use 4 byte read/write */
1020+
flexspi_lut[READ][0] = FLEXSPI_LUT_SEQ(
1021+
kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, SPI_NOR_CMD_4READ_4B,
1022+
kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_4PAD, 32);
1023+
/* Flash needs 8 dummy cycles (at 133MHz) */
1024+
flexspi_lut[READ][1] = FLEXSPI_LUT_SEQ(
1025+
kFLEXSPI_Command_DUMMY_SDR, kFLEXSPI_4PAD, 8,
1026+
kFLEXSPI_Command_READ_SDR, kFLEXSPI_4PAD, 0x04);
1027+
/* Only 1S-1S-4S page program supported */
1028+
flexspi_lut[PAGE_PROGRAM][0] = FLEXSPI_LUT_SEQ(
1029+
kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, SPI_NOR_CMD_PP_1_1_4_4B,
1030+
kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 32);
1031+
flexspi_lut[PAGE_PROGRAM][1] = FLEXSPI_LUT_SEQ(
1032+
kFLEXSPI_Command_WRITE_SDR, kFLEXSPI_4PAD, 0x4,
1033+
kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x0);
1034+
/* Update ERASE commands for 4 byte mode */
1035+
flexspi_lut[ERASE_SECTOR][0] = FLEXSPI_LUT_SEQ(
1036+
kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, SPI_NOR_CMD_SE_4B,
1037+
kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 32);
1038+
flexspi_lut[ERASE_BLOCK][0] = FLEXSPI_LUT_SEQ(
1039+
kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0xDC,
1040+
kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 32),
1041+
/* Read instruction used for polling is 0x05 */
1042+
data->legacy_poll = true;
1043+
flexspi_lut[READ_STATUS_REG][0] = FLEXSPI_LUT_SEQ(
1044+
kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, SPI_NOR_CMD_RDSR,
1045+
kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x01);
1046+
/* Device uses bit 1 of status reg 2 for QE */
1047+
return flash_flexspi_nor_quad_enable(data, flexspi_lut,
1048+
JESD216_DW15_QER_VAL_S2B1v5);
10111049
case 0x25C2:
10121050
/* MX25 flash, use 4 byte read/write */
10131051
flexspi_lut[READ][0] = FLEXSPI_LUT_SEQ(

0 commit comments

Comments
 (0)