You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2025/11/12 12:39:09 UTC
(nuttx) 02/02: arch/arm64/src/imx9/imx9_flexspi_nor.c: Implement MTDIOC_RESET command
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 97c228c517ddf9604f6cd20f070d6ca973ee06bc
Author: Jani Paalijarvi <ja...@unikie.com>
AuthorDate: Mon Nov 10 10:47:04 2025 +0200
arch/arm64/src/imx9/imx9_flexspi_nor.c: Implement MTDIOC_RESET command
MTDIOC_RESET ioctl command executes "Reset Enable" and "Reset Memory"
commands to enter a power-on reset condition.
Signed-off-by: Jani Paalijarvi <ja...@unikie.com>
---
arch/arm64/src/imx9/imx9_flexspi_nor.c | 33 +++++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/arch/arm64/src/imx9/imx9_flexspi_nor.c b/arch/arm64/src/imx9/imx9_flexspi_nor.c
index 8a205fc04fc..296b5674d79 100644
--- a/arch/arm64/src/imx9/imx9_flexspi_nor.c
+++ b/arch/arm64/src/imx9/imx9_flexspi_nor.c
@@ -252,6 +252,8 @@
#define M25P_WECR 0x61 /* 1 Write Enhanched config 0 0 1 */
#define M25P_RFSR 0x70 /* 1 Read Flag Status Register 0 0 1 */
#define M25P_4B_ENTER 0xB7 /* 1 Enter 4byte addressing 0 0 0 */
+#define M25P_RSTEN 0x66 /* 1 Reset Enable 0 0 0 */
+#define M25P_RSTMEM 0x99 /* 1 Reset Memory 0 0 0 */
/* Quad commands */
#define M25P_Q_FAST_RD 0x6c /* 1 Quad output fast read 4 0 1-256 */
@@ -281,6 +283,8 @@ enum
ENTER_DDR,
READ_FAST,
ENTER_4BYTE,
+ RESET_ENABLE,
+ RESET_MEMORY,
/* Quad SPI instructions */
@@ -376,6 +380,18 @@ static const uint32_t g_flexspi_nor_lut[][4] =
FLEXSPI_LUT_SEQ(FLEXSPI_COMMAND_DUMMY_SDR, FLEXSPI_1PAD, 0x08,
FLEXSPI_COMMAND_READ_SDR, FLEXSPI_1PAD, 0x04)
},
+
+ [RESET_ENABLE] =
+ {
+ FLEXSPI_LUT_SEQ(FLEXSPI_COMMAND_SDR, FLEXSPI_1PAD, M25P_RSTEN,
+ FLEXSPI_COMMAND_STOP, FLEXSPI_1PAD, 0x00),
+ },
+
+ [RESET_MEMORY] =
+ {
+ FLEXSPI_LUT_SEQ(FLEXSPI_COMMAND_SDR, FLEXSPI_1PAD, M25P_RSTMEM,
+ FLEXSPI_COMMAND_STOP, FLEXSPI_1PAD, 0x00),
+ },
};
/****************************************************************************
@@ -974,6 +990,23 @@ static int imx9_flexspi_nor_ioctl(struct mtd_dev_s *dev,
break;
+ case MTDIOC_RESET:
+ {
+ /* Reset the memory */
+
+ imx9_flexspi_nor_write_cmd(priv, RESET_ENABLE);
+ up_udelay(1);
+ ret = imx9_flexspi_nor_write_cmd(priv, RESET_MEMORY);
+ if (ret)
+ {
+ ferr("reset memory failed\n");
+ }
+
+ imx9_flexspi_nor_wait_bus_busy(priv);
+ FLEXSPI_SOFTWARE_RESET(priv->flexspi);
+ }
+ break;
+
default:
ret = -ENOTTY; /* Bad/unsupported command */
break;