Merge https://source.denx.de/u-boot/custodians/u-boot-sunxi
[platform/kernel/u-boot.git] / include / linux / mtd / spi-nor.h
index 1d91177..2595bad 100644 (file)
@@ -7,6 +7,7 @@
 #ifndef __LINUX_MTD_SPI_NOR_H
 #define __LINUX_MTD_SPI_NOR_H
 
+#include <mtd.h>
 #include <linux/bitops.h>
 #include <linux/mtd/cfi.h>
 #include <linux/mtd/mtd.h>
 #define SNOR_MFR_INTEL         CFI_MFR_INTEL
 #define SNOR_MFR_ST            CFI_MFR_ST /* ST Micro <--> Micron */
 #define SNOR_MFR_MICRON                CFI_MFR_MICRON /* ST Micro <--> Micron */
+#define SNOR_MFR_ISSI          CFI_MFR_PMC
 #define SNOR_MFR_MACRONIX      CFI_MFR_MACRONIX
 #define SNOR_MFR_SPANSION      CFI_MFR_AMD
 #define SNOR_MFR_SST           CFI_MFR_SST
 #define SNOR_MFR_WINBOND       0xef /* Also used by some Spansion */
+#define SNOR_MFR_CYPRESS       0x34
 
 /*
  * Note on opcode nomenclature: some opcodes have a format like
 #define SPINOR_OP_READ_1_2_2   0xbb    /* Read data bytes (Dual I/O SPI) */
 #define SPINOR_OP_READ_1_1_4   0x6b    /* Read data bytes (Quad Output SPI) */
 #define SPINOR_OP_READ_1_4_4   0xeb    /* Read data bytes (Quad I/O SPI) */
+#define SPINOR_OP_READ_1_1_8   0x8b    /* Read data bytes (Octal Output SPI) */
+#define SPINOR_OP_READ_1_8_8   0xcb    /* Read data bytes (Octal I/O SPI) */
 #define SPINOR_OP_PP           0x02    /* Page program (up to 256 bytes) */
 #define SPINOR_OP_PP_1_1_4     0x32    /* Quad page program */
 #define SPINOR_OP_PP_1_4_4     0x38    /* Quad page program */
+#define SPINOR_OP_PP_1_1_8     0x82    /* Octal page program */
+#define SPINOR_OP_PP_1_8_8     0xc2    /* Octal page program */
 #define SPINOR_OP_BE_4K                0x20    /* Erase 4KiB block */
 #define SPINOR_OP_BE_4K_PMC    0xd7    /* Erase 4KiB block on PMC chips */
 #define SPINOR_OP_BE_32K       0x52    /* Erase 32KiB block */
@@ -62,6 +69,8 @@
 #define SPINOR_OP_CLFSR                0x50    /* Clear flag status register */
 #define SPINOR_OP_RDEAR                0xc8    /* Read Extended Address Register */
 #define SPINOR_OP_WREAR                0xc5    /* Write Extended Address Register */
+#define SPINOR_OP_SRSTEN       0x66    /* Software Reset Enable */
+#define SPINOR_OP_SRST         0x99    /* Software Reset */
 
 /* 4-byte address opcodes - used on Spansion and some Macronix flashes. */
 #define SPINOR_OP_READ_4B      0x13    /* Read data bytes (low frequency) */
 #define SPINOR_OP_READ_1_2_2_4B        0xbc    /* Read data bytes (Dual I/O SPI) */
 #define SPINOR_OP_READ_1_1_4_4B        0x6c    /* Read data bytes (Quad Output SPI) */
 #define SPINOR_OP_READ_1_4_4_4B        0xec    /* Read data bytes (Quad I/O SPI) */
+#define SPINOR_OP_READ_1_1_8_4B        0x7c    /* Read data bytes (Octal Output SPI) */
+#define SPINOR_OP_READ_1_8_8_4B        0xcc    /* Read data bytes (Octal I/O SPI) */
 #define SPINOR_OP_PP_4B                0x12    /* Page program (up to 256 bytes) */
 #define SPINOR_OP_PP_1_1_4_4B  0x34    /* Quad page program */
 #define SPINOR_OP_PP_1_4_4_4B  0x3e    /* Quad page program */
+#define SPINOR_OP_PP_1_1_8_4B  0x84    /* Octal page program */
+#define SPINOR_OP_PP_1_8_8_4B  0x8e    /* Octal page program */
 #define SPINOR_OP_BE_4K_4B     0x21    /* Erase 4KiB block */
 #define SPINOR_OP_BE_32K_4B    0x5c    /* Erase 32KiB block */
 #define SPINOR_OP_SE_4B                0xdc    /* Sector erase (usually 64KiB) */
 /* Used for Macronix and Winbond flashes. */
 #define SPINOR_OP_EN4B         0xb7    /* Enter 4-byte mode */
 #define SPINOR_OP_EX4B         0xe9    /* Exit 4-byte mode */
+#define SPINOR_OP_EN4B                 0xb7            /* Enter 4-byte mode */
+#define SPINOR_OP_EX4B                 0xe9            /* Exit 4-byte mode */
+#define SPINOR_OP_RD_CR2               0x71            /* Read configuration register 2 */
+#define SPINOR_OP_WR_CR2               0x72            /* Write configuration register 2 */
+#define SPINOR_OP_MXIC_DTR_RD          0xee            /* Fast Read opcode in DTR mode */
+#define SPINOR_REG_MXIC_CR2_MODE       0x00000000      /* For setting octal DTR mode */
+#define SPINOR_REG_MXIC_OPI_DTR_EN     0x2             /* Enable Octal DTR */
+#define SPINOR_REG_MXIC_CR2_DC         0x00000300      /* For setting dummy cycles */
+#define SPINOR_REG_MXIC_DC_20          0x0             /* Setting dummy cycles to 20 */
+#define MXIC_MAX_DC                    20              /* Maximum value of dummy cycles */
 
 /* Used for Spansion flashes only. */
 #define SPINOR_OP_BRWR         0x17    /* Bank register write */
 #define SPINOR_OP_BRRD         0x16    /* Bank register read */
 #define SPINOR_OP_CLSR         0x30    /* Clear status register 1 */
+#define SPINOR_OP_EX4B_CYPRESS 0xB8    /* Exit 4-byte mode */
+#define SPINOR_OP_RDAR         0x65    /* Read any register */
+#define SPINOR_OP_WRAR         0x71    /* Write any register */
+#define SPINOR_REG_ADDR_STR1V  0x00800000
+#define SPINOR_REG_ADDR_CFR1V  0x00800002
+#define SPINOR_REG_ADDR_CFR3V  0x00800004
+#define CFR3V_UNHYSA           BIT(3)  /* Uniform sectors or not */
+#define CFR3V_PGMBUF           BIT(4)  /* Program buffer size */
 
 /* Used for Micron flashes only. */
-#define SPINOR_OP_RD_EVCR      0x65    /* Read EVCR register */
-#define SPINOR_OP_WD_EVCR      0x61    /* Write EVCR register */
+#define SPINOR_OP_RD_EVCR      0x65    /* Read EVCR register */
+#define SPINOR_OP_WD_EVCR      0x61    /* Write EVCR register */
+#define SPINOR_OP_MT_DTR_RD    0xfd    /* Fast Read opcode in DTR mode */
+#define SPINOR_OP_MT_RD_ANY_REG        0x85    /* Read volatile register */
+#define SPINOR_OP_MT_WR_ANY_REG        0x81    /* Write volatile register */
+#define SPINOR_REG_MT_CFR0V    0x00    /* For setting octal DTR mode */
+#define SPINOR_REG_MT_CFR1V    0x01    /* For setting dummy cycles */
+#define SPINOR_MT_OCT_DTR      0xe7    /* Enable Octal DTR with DQS. */
 
 /* Status Register bits. */
 #define SR_WIP                 BIT(0)  /* Write in progress */
 /* Status Register 2 bits. */
 #define SR2_QUAD_EN_BIT7       BIT(7)
 
+/* For Cypress flash. */
+#define SPINOR_OP_RD_ANY_REG                   0x65    /* Read any register */
+#define SPINOR_OP_WR_ANY_REG                   0x71    /* Write any register */
+#define SPINOR_OP_S28_SE_4K                    0x21
+#define SPINOR_REG_CYPRESS_CFR2V               0x00800003
+#define SPINOR_REG_CYPRESS_CFR2V_MEMLAT_11_24  0xb
+#define SPINOR_REG_CYPRESS_CFR3V               0x00800004
+#define SPINOR_REG_CYPRESS_CFR3V_PGSZ          BIT(4) /* Page size. */
+#define SPINOR_REG_CYPRESS_CFR3V_UNISECT       BIT(3) /* Uniform sector mode */
+#define SPINOR_REG_CYPRESS_CFR5V               0x00800006
+#define SPINOR_REG_CYPRESS_CFR5V_OCT_DTR_EN    0x3
+#define SPINOR_OP_CYPRESS_RD_FAST              0xee
+
 /* Supported SPI protocols */
 #define SNOR_PROTO_INST_MASK   GENMASK(23, 16)
 #define SNOR_PROTO_INST_SHIFT  16
@@ -191,6 +241,7 @@ enum spi_nor_protocol {
        SNOR_PROTO_1_2_2_DTR = SNOR_PROTO_DTR(1, 2, 2),
        SNOR_PROTO_1_4_4_DTR = SNOR_PROTO_DTR(1, 4, 4),
        SNOR_PROTO_1_8_8_DTR = SNOR_PROTO_DTR(1, 8, 8),
+       SNOR_PROTO_8_8_8_DTR = SNOR_PROTO_DTR(8, 8, 8),
 };
 
 static inline bool spi_nor_protocol_is_dtr(enum spi_nor_protocol proto)
@@ -238,6 +289,175 @@ enum spi_nor_option_flags {
        SNOR_F_READY_XSR_RDY    = BIT(4),
        SNOR_F_USE_CLSR         = BIT(5),
        SNOR_F_BROKEN_RESET     = BIT(6),
+       SNOR_F_SOFT_RESET       = BIT(7),
+       SNOR_F_IO_MODE_EN_VOLATILE = BIT(8),
+};
+
+struct spi_nor;
+
+/**
+ * struct spi_nor_hwcaps - Structure for describing the hardware capabilies
+ * supported by the SPI controller (bus master).
+ * @mask:              the bitmask listing all the supported hw capabilies
+ */
+struct spi_nor_hwcaps {
+       u32     mask;
+};
+
+/*
+ *(Fast) Read capabilities.
+ * MUST be ordered by priority: the higher bit position, the higher priority.
+ * As a matter of performances, it is relevant to use Octo SPI protocols first,
+ * then Quad SPI protocols before Dual SPI protocols, Fast Read and lastly
+ * (Slow) Read.
+ */
+#define SNOR_HWCAPS_READ_MASK          GENMASK(15, 0)
+#define SNOR_HWCAPS_READ               BIT(0)
+#define SNOR_HWCAPS_READ_FAST          BIT(1)
+#define SNOR_HWCAPS_READ_1_1_1_DTR     BIT(2)
+
+#define SNOR_HWCAPS_READ_DUAL          GENMASK(6, 3)
+#define SNOR_HWCAPS_READ_1_1_2         BIT(3)
+#define SNOR_HWCAPS_READ_1_2_2         BIT(4)
+#define SNOR_HWCAPS_READ_2_2_2         BIT(5)
+#define SNOR_HWCAPS_READ_1_2_2_DTR     BIT(6)
+
+#define SNOR_HWCAPS_READ_QUAD          GENMASK(10, 7)
+#define SNOR_HWCAPS_READ_1_1_4         BIT(7)
+#define SNOR_HWCAPS_READ_1_4_4         BIT(8)
+#define SNOR_HWCAPS_READ_4_4_4         BIT(9)
+#define SNOR_HWCAPS_READ_1_4_4_DTR     BIT(10)
+
+#define SNOR_HWCPAS_READ_OCTO          GENMASK(15, 11)
+#define SNOR_HWCAPS_READ_1_1_8         BIT(11)
+#define SNOR_HWCAPS_READ_1_8_8         BIT(12)
+#define SNOR_HWCAPS_READ_8_8_8         BIT(13)
+#define SNOR_HWCAPS_READ_1_8_8_DTR     BIT(14)
+#define SNOR_HWCAPS_READ_8_8_8_DTR     BIT(15)
+
+/*
+ * Page Program capabilities.
+ * MUST be ordered by priority: the higher bit position, the higher priority.
+ * Like (Fast) Read capabilities, Octo/Quad SPI protocols are preferred to the
+ * legacy SPI 1-1-1 protocol.
+ * Note that Dual Page Programs are not supported because there is no existing
+ * JEDEC/SFDP standard to define them. Also at this moment no SPI flash memory
+ * implements such commands.
+ */
+#define SNOR_HWCAPS_PP_MASK            GENMASK(23, 16)
+#define SNOR_HWCAPS_PP                 BIT(16)
+
+#define SNOR_HWCAPS_PP_QUAD            GENMASK(19, 17)
+#define SNOR_HWCAPS_PP_1_1_4           BIT(17)
+#define SNOR_HWCAPS_PP_1_4_4           BIT(18)
+#define SNOR_HWCAPS_PP_4_4_4           BIT(19)
+
+#define SNOR_HWCAPS_PP_OCTO            GENMASK(23, 20)
+#define SNOR_HWCAPS_PP_1_1_8           BIT(20)
+#define SNOR_HWCAPS_PP_1_8_8           BIT(21)
+#define SNOR_HWCAPS_PP_8_8_8           BIT(22)
+#define SNOR_HWCAPS_PP_8_8_8_DTR       BIT(23)
+
+#define SNOR_HWCAPS_X_X_X      (SNOR_HWCAPS_READ_2_2_2 |       \
+                                SNOR_HWCAPS_READ_4_4_4 |       \
+                                SNOR_HWCAPS_READ_8_8_8 |       \
+                                SNOR_HWCAPS_PP_4_4_4 |         \
+                                SNOR_HWCAPS_PP_8_8_8)
+
+#define SNOR_HWCAPS_X_X_X_DTR  (SNOR_HWCAPS_READ_8_8_8_DTR |   \
+                                SNOR_HWCAPS_PP_8_8_8_DTR)
+
+#define SNOR_HWCAPS_DTR                (SNOR_HWCAPS_READ_1_1_1_DTR |   \
+                                SNOR_HWCAPS_READ_1_2_2_DTR |   \
+                                SNOR_HWCAPS_READ_1_4_4_DTR |   \
+                                SNOR_HWCAPS_READ_1_8_8_DTR)
+
+#define SNOR_HWCAPS_ALL                (SNOR_HWCAPS_READ_MASK |        \
+                                SNOR_HWCAPS_PP_MASK)
+
+struct spi_nor_read_command {
+       u8                      num_mode_clocks;
+       u8                      num_wait_states;
+       u8                      opcode;
+       enum spi_nor_protocol   proto;
+};
+
+struct spi_nor_pp_command {
+       u8                      opcode;
+       enum spi_nor_protocol   proto;
+};
+
+enum spi_nor_read_command_index {
+       SNOR_CMD_READ,
+       SNOR_CMD_READ_FAST,
+       SNOR_CMD_READ_1_1_1_DTR,
+
+       /* Dual SPI */
+       SNOR_CMD_READ_1_1_2,
+       SNOR_CMD_READ_1_2_2,
+       SNOR_CMD_READ_2_2_2,
+       SNOR_CMD_READ_1_2_2_DTR,
+
+       /* Quad SPI */
+       SNOR_CMD_READ_1_1_4,
+       SNOR_CMD_READ_1_4_4,
+       SNOR_CMD_READ_4_4_4,
+       SNOR_CMD_READ_1_4_4_DTR,
+
+       /* Octo SPI */
+       SNOR_CMD_READ_1_1_8,
+       SNOR_CMD_READ_1_8_8,
+       SNOR_CMD_READ_8_8_8,
+       SNOR_CMD_READ_1_8_8_DTR,
+       SNOR_CMD_READ_8_8_8_DTR,
+
+       SNOR_CMD_READ_MAX
+};
+
+enum spi_nor_pp_command_index {
+       SNOR_CMD_PP,
+
+       /* Quad SPI */
+       SNOR_CMD_PP_1_1_4,
+       SNOR_CMD_PP_1_4_4,
+       SNOR_CMD_PP_4_4_4,
+
+       /* Octo SPI */
+       SNOR_CMD_PP_1_1_8,
+       SNOR_CMD_PP_1_8_8,
+       SNOR_CMD_PP_8_8_8,
+       SNOR_CMD_PP_8_8_8_DTR,
+
+       SNOR_CMD_PP_MAX
+};
+
+struct spi_nor_flash_parameter {
+       u64                             size;
+       u32                             page_size;
+       u8                              rdsr_dummy;
+       u8                              rdsr_addr_nbytes;
+
+       struct spi_nor_hwcaps           hwcaps;
+       struct spi_nor_read_command     reads[SNOR_CMD_READ_MAX];
+       struct spi_nor_pp_command       page_programs[SNOR_CMD_PP_MAX];
+
+       int (*quad_enable)(struct spi_nor *nor);
+};
+
+/**
+ * enum spi_nor_cmd_ext - describes the command opcode extension in DTR mode
+ * @SPI_MEM_NOR_NONE: no extension. This is the default, and is used in Legacy
+ *                   SPI mode
+ * @SPI_MEM_NOR_REPEAT: the extension is same as the opcode
+ * @SPI_MEM_NOR_INVERT: the extension is the bitwise inverse of the opcode
+ * @SPI_MEM_NOR_HEX: the extension is any hex value. The command and opcode
+ *                  combine to form a 16-bit opcode.
+ */
+enum spi_nor_cmd_ext {
+       SPI_NOR_EXT_NONE = 0,
+       SPI_NOR_EXT_REPEAT,
+       SPI_NOR_EXT_INVERT,
+       SPI_NOR_EXT_HEX,
 };
 
 /**
@@ -249,11 +469,13 @@ struct flash_info;
 /*
  * TODO: Remove, once all users of spi_flash interface are moved to MTD
  *
- * struct spi_flash {
+struct spi_flash {
  *     Defined below (keep this text to enable searching for spi_flash decl)
  * }
  */
+#ifndef DT_PLAT_C
 #define spi_flash spi_nor
+#endif
 
 /**
  * struct spi_nor - Structure for defining a the SPI NOR layer
@@ -268,6 +490,9 @@ struct flash_info;
  * @read_opcode:       the read opcode
  * @read_dummy:                the dummy needed by the read operation
  * @program_opcode:    the program opcode
+ * @rdsr_dummy         dummy cycles needed for Read Status Register command.
+ * @rdsr_addr_nbytes:  dummy address bytes needed for Read Status Register
+ *                     command.
  * @bank_read_cmd:     Bank read cmd
  * @bank_write_cmd:    Bank write cmd
  * @bank_curr:         Current flash bank
@@ -277,6 +502,8 @@ struct flash_info;
  * @write_proto:       the SPI protocol for write operations
  * @reg_proto          the SPI protocol for read_reg/write_reg/erase operations
  * @cmd_buf:           used by the write_reg
+ * @cmd_ext_type:      the command opcode extension for DTR mode.
+ * @fixups:            flash-specific fixup hooks.
  * @prepare:           [OPTIONAL] do some preparations for the
  *                     read/write/erase/lock/unlock operations
  * @unprepare:         [OPTIONAL] do some post work after the
@@ -290,9 +517,11 @@ struct flash_info;
  *                     spi-nor will send the erase opcode via write_reg()
  * @flash_lock:                [FLASH-SPECIFIC] lock a region of the SPI NOR
  * @flash_unlock:      [FLASH-SPECIFIC] unlock a region of the SPI NOR
- * @flash_is_locked:   [FLASH-SPECIFIC] check if a region of the SPI NOR is
+ * @flash_is_unlocked: [FLASH-SPECIFIC] check if a region of the SPI NOR is
+ *                     completely unlocked
  * @quad_enable:       [FLASH-SPECIFIC] enables SPI NOR quad mode
- *                     completely locked
+ * @octal_dtr_enable:  [FLASH-SPECIFIC] enables SPI NOR octal DTR mode.
+ * @ready:             [FLASH-SPECIFIC] check if the flash is ready
  * @priv:              the private data
  */
 struct spi_nor {
@@ -307,6 +536,8 @@ struct spi_nor {
        u8                      read_opcode;
        u8                      read_dummy;
        u8                      program_opcode;
+       u8                      rdsr_dummy;
+       u8                      rdsr_addr_nbytes;
 #ifdef CONFIG_SPI_FLASH_BAR
        u8                      bank_read_cmd;
        u8                      bank_write_cmd;
@@ -318,7 +549,11 @@ struct spi_nor {
        bool                    sst_write_second;
        u32                     flags;
        u8                      cmd_buf[SPI_NOR_MAX_CMD_SIZE];
+       enum spi_nor_cmd_ext    cmd_ext_type;
+       struct spi_nor_fixups   *fixups;
 
+       int (*setup)(struct spi_nor *nor, const struct flash_info *info,
+                    const struct spi_nor_flash_parameter *params);
        int (*prepare)(struct spi_nor *nor, enum spi_nor_ops ops);
        void (*unprepare)(struct spi_nor *nor, enum spi_nor_ops ops);
        int (*read_reg)(struct spi_nor *nor, u8 opcode, u8 *buf, int len);
@@ -332,10 +567,13 @@ struct spi_nor {
 
        int (*flash_lock)(struct spi_nor *nor, loff_t ofs, uint64_t len);
        int (*flash_unlock)(struct spi_nor *nor, loff_t ofs, uint64_t len);
-       int (*flash_is_locked)(struct spi_nor *nor, loff_t ofs, uint64_t len);
+       int (*flash_is_unlocked)(struct spi_nor *nor, loff_t ofs, uint64_t len);
        int (*quad_enable)(struct spi_nor *nor);
+       int (*octal_dtr_enable)(struct spi_nor *nor);
+       int (*ready)(struct spi_nor *nor);
 
        void *priv;
+       char mtd_name[MTD_NAME_SIZE(MTD_DEV_TYPE_NOR)];
 /* Compatibility for spi_flash, remove once sf layer is merged with mtd */
        const char *name;
        u32 size;
@@ -343,6 +581,7 @@ struct spi_nor {
        u32 erase_size;
 };
 
+#ifndef __UBOOT__
 static inline void spi_nor_set_flash_node(struct spi_nor *nor,
                                          const struct device_node *np)
 {
@@ -354,67 +593,7 @@ device_node *spi_nor_get_flash_node(struct spi_nor *nor)
 {
        return mtd_get_of_node(&nor->mtd);
 }
-
-/**
- * struct spi_nor_hwcaps - Structure for describing the hardware capabilies
- * supported by the SPI controller (bus master).
- * @mask:              the bitmask listing all the supported hw capabilies
- */
-struct spi_nor_hwcaps {
-       u32     mask;
-};
-
-/*
- *(Fast) Read capabilities.
- * MUST be ordered by priority: the higher bit position, the higher priority.
- * As a matter of performances, it is relevant to use Octo SPI protocols first,
- * then Quad SPI protocols before Dual SPI protocols, Fast Read and lastly
- * (Slow) Read.
- */
-#define SNOR_HWCAPS_READ_MASK          GENMASK(14, 0)
-#define SNOR_HWCAPS_READ               BIT(0)
-#define SNOR_HWCAPS_READ_FAST          BIT(1)
-#define SNOR_HWCAPS_READ_1_1_1_DTR     BIT(2)
-
-#define SNOR_HWCAPS_READ_DUAL          GENMASK(6, 3)
-#define SNOR_HWCAPS_READ_1_1_2         BIT(3)
-#define SNOR_HWCAPS_READ_1_2_2         BIT(4)
-#define SNOR_HWCAPS_READ_2_2_2         BIT(5)
-#define SNOR_HWCAPS_READ_1_2_2_DTR     BIT(6)
-
-#define SNOR_HWCAPS_READ_QUAD          GENMASK(10, 7)
-#define SNOR_HWCAPS_READ_1_1_4         BIT(7)
-#define SNOR_HWCAPS_READ_1_4_4         BIT(8)
-#define SNOR_HWCAPS_READ_4_4_4         BIT(9)
-#define SNOR_HWCAPS_READ_1_4_4_DTR     BIT(10)
-
-#define SNOR_HWCPAS_READ_OCTO          GENMASK(14, 11)
-#define SNOR_HWCAPS_READ_1_1_8         BIT(11)
-#define SNOR_HWCAPS_READ_1_8_8         BIT(12)
-#define SNOR_HWCAPS_READ_8_8_8         BIT(13)
-#define SNOR_HWCAPS_READ_1_8_8_DTR     BIT(14)
-
-/*
- * Page Program capabilities.
- * MUST be ordered by priority: the higher bit position, the higher priority.
- * Like (Fast) Read capabilities, Octo/Quad SPI protocols are preferred to the
- * legacy SPI 1-1-1 protocol.
- * Note that Dual Page Programs are not supported because there is no existing
- * JEDEC/SFDP standard to define them. Also at this moment no SPI flash memory
- * implements such commands.
- */
-#define SNOR_HWCAPS_PP_MASK    GENMASK(22, 16)
-#define SNOR_HWCAPS_PP         BIT(16)
-
-#define SNOR_HWCAPS_PP_QUAD    GENMASK(19, 17)
-#define SNOR_HWCAPS_PP_1_1_4   BIT(17)
-#define SNOR_HWCAPS_PP_1_4_4   BIT(18)
-#define SNOR_HWCAPS_PP_4_4_4   BIT(19)
-
-#define SNOR_HWCAPS_PP_OCTO    GENMASK(22, 20)
-#define SNOR_HWCAPS_PP_1_1_8   BIT(20)
-#define SNOR_HWCAPS_PP_1_8_8   BIT(21)
-#define SNOR_HWCAPS_PP_8_8_8   BIT(22)
+#endif /* __UBOOT__ */
 
 /**
  * spi_nor_scan() - scan the SPI NOR
@@ -428,4 +607,19 @@ struct spi_nor_hwcaps {
  */
 int spi_nor_scan(struct spi_nor *nor);
 
+#if CONFIG_IS_ENABLED(SPI_FLASH_TINY)
+static inline int spi_nor_remove(struct spi_nor *nor)
+{
+       return 0;
+}
+#else
+/**
+ * spi_nor_remove() - perform cleanup before booting to the next stage
+ * @nor:       the spi_nor structure
+ *
+ * Return: 0 for success, -errno for failure.
+ */
+int spi_nor_remove(struct spi_nor *nor);
+#endif
+
 #endif