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 <[email protected]>
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 <[email protected]>
---
 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;

Reply via email to