Skip to contentSkip to conversation

mtd: Add m25p80 driver

PATCH Superseded Jagan Teki 1 participant 87 messages Mar 22, 2016 Page 1 of 2

Subsystems (15)
lore
Share & tools
lore

Jagan Teki

author
#0 lore raw

PATCH v7 1/87 mtd: Add m25p80 driver

This is MTD SPI-NOR driver for ST M25Pxx (and similar) serial flash chips which is written as MTD_UCLASS.

More features will be adding on further patches.

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 Makefile                     |  1 +
 drivers/mtd/spi-nor/Makefile |  6 ++++++
 drivers/mtd/spi-nor/m25p80.c | 37 +++++++++++++++++++++++++++++++++++++
 3 files changed, 44 insertions(+)
 create mode 100644 drivers/mtd/spi-nor/Makefile
 create mode 100644 drivers/mtd/spi-nor/m25p80.c
Makefile +1 -0
index 53569e8..9830410 100644
@@ -633,6 +633,7 @@ libs-$(CONFIG_CMD_NAND) += drivers/mtd/nand/
 libs-y += drivers/mtd/onenand/
 libs-$(CONFIG_CMD_UBI) += drivers/mtd/ubi/
 libs-y += drivers/mtd/spi/
+libs-y += drivers/mtd/spi-nor/
 libs-y += drivers/net/
 libs-y += drivers/net/phy/
 libs-y += drivers/pci/
drivers/mtd/spi-nor/Makefile new file +6 -0
new file mode 100644
index 0000000..a4c19e3
@@ -0,0 +1,6 @@
+#
+# Copyright (C) 2016 Jagan Teki <[email protected]>
+#
+# SPDX-License-Identifier:	GPL-2.0+
+
+obj-$(CONFIG_MTD_M25P80)	+= m25p80.o
drivers/mtd/spi-nor/m25p80.c new file +37 -0
new file mode 100644
index 0000000..833a9c3
@@ -0,0 +1,37 @@
+/*
+ * MTD SPI-NOR driver for ST M25Pxx (and similar) serial flash chips
+ *
+ * Copyright (C) 2016 Jagan Teki <[email protected]>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <errno.h>
+#include <spi.h>
+#include <linux/mtd/mtd.h>
+
+static int m25p_probe(struct udevice *dev)
+{
+	struct spi_slave *spi = dev_get_parent_priv(dev);
+	struct mtd_info	*mtd = dev_get_uclass_priv(dev);
+
+	return 0;
+}
+
+static const struct udevice_id m25p_ids[] = {
+	/*
+	 * Generic compatibility for SPI NOR that can be identified by the
+	 * JEDEC READ ID opcode (0x9F). Use this, if possible.
+	 */
+	{ .compatible = "jedec,spi-nor" },
+	{ }
+};
+
+U_BOOT_DRIVER(m25p80) = {
+	.name		= "m25p80",
+	.id		= UCLASS_MTD,
+	.of_match	= m25p_ids,
+	.probe		= m25p_probe,
+};
Signature · 1 line
1.9.1
author
#1 lore raw

PATCH v7 2/87 mtd: Add Kconfig entry for MTD_M25P80

Added Kconfig entry for MTD_M25P80

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 drivers/mtd/spi-nor/Kconfig | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
 create mode 100644 drivers/mtd/spi-nor/Kconfig
drivers/mtd/spi-nor/Kconfig new file +15 -0
new file mode 100644
index 0000000..d32486c
@@ -0,0 +1,15 @@
+config MTD_M25P80
+	tristate "Support most SPI Flash chips (AT26DF, M25P, W25X, ...)"
+	help
+	  This enables access to most modern SPI flash chips, used for
+	  program and data storage.   Series supported include Atmel AT26DF,
+	  Spansion S25SL, SST 25VF, ST M25P, and Winbond W25X.  Other chips
+	  are supported as well.  See the driver source for the current list,
+	  or to add other chips.
+
+	  Note that the original DataFlash chips (AT45 series, not AT26DF),
+	  need an entirely different driver.
+
+	  Set up your spi devices with the right board-specific platform data,
+	  if you want to specify device partitioning or to use a device which
+	  doesn't support the JEDEC ID instruction.
Signature · 1 line
1.9.1
author
#2 lore raw

PATCH v7 3/87 mtd: Add SPI-NOR core support

In reply to Jagan Teki

Some of the SPI device drivers at drivers/spi not a real spi controllers, Unlike normal/generic SPI controllers they operates only with SPI-NOR flash devices. these were technically termed as SPI-NOR controllers, Ex: drivers/spi/fsl_qspi.c

The problem with these were resides at drivers/spi is entire SPI layer becomes SPI-NOR flash oriented which is absolutely a wrong indication where SPI layer getting effected more with flash operations - So this SPI-NOR core will resolve this issue by separating all SPI-NOR flash operations from spi layer and creats a generic layer called SPI-NOR core which can be used to interact SPI-NOR to SPI driver interface layer and the SPI-NOR controller driver. The idea is taken from Linux spi-nor framework.

Before SPI-NOR:

	-----------------------
		cmd_sf.c
	-----------------------
		spi_flash.c
	-----------------------
		sf_probe.c
	-----------------------
		spi-uclass
	-----------------------
		spi drivers
	-----------------------
		SPI NOR chip
	-----------------------

After SPI-NOR:

	------------------------------
		cmd_sf.c
	------------------------------
		spi-nor.c
	-------------------------------
	m25p80.c	spi nor drivers
	-------------------------------
	spi-uclass	SPI NOR chip
	-------------------------------
	spi drivers
	-------------------------------
	SPI NOR chip
	-------------------------------
Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc York Sun <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 doc/mtd/spi-nor.txt               |   81 +++
 drivers/mtd/Kconfig               |    2 +
 drivers/mtd/spi-nor/Makefile      |    5 +
 drivers/mtd/spi-nor/spi-nor-ids.c |  276 ++++++++++
 drivers/mtd/spi-nor/spi-nor.c     | 1084 +++++++++++++++++++++++++++++++++++++
 include/linux/err.h               |    5 +
 include/linux/mtd/spi-nor.h       |  253 +++++++++
 7 files changed, 1706 insertions(+)
 create mode 100644 doc/mtd/spi-nor.txt
 create mode 100644 drivers/mtd/spi-nor/spi-nor-ids.c
 create mode 100644 drivers/mtd/spi-nor/spi-nor.c
 create mode 100644 include/linux/mtd/spi-nor.h
doc/mtd/spi-nor.txt new file +81 -0
new file mode 100644
index 0000000..8b381c1
@@ -0,0 +1,81 @@
+                          SPI NOR framework
+               ============================================
+
+Part I - Why do we need this framework?
+---------------------------------------
+
+SPI bus controllers (drivers/spi/) only deal with streams of bytes; the bus
+controller operates agnostic of the specific device attached. However, some
+controllers (such as Freescale's QuadSPI controller) cannot easily handle
+arbitrary streams of bytes, but rather are designed specifically for SPI NOR.
+
+In particular, Freescale's QuadSPI controller must know the NOR commands to
+find the right LUT sequence. Unfortunately, the SPI subsystem has no notion of
+opcodes, addresses, or data payloads; a SPI controller simply knows to send or
+receive bytes (Tx and Rx). Therefore, we must define a new layering scheme under
+which the controller driver is aware of the opcodes, addressing, and other
+details of the SPI NOR protocol.
+
+Part II - How does the framework work?
+--------------------------------------
+
+This framework just adds a new layer between the MTD and the SPI bus driver.
+With this new layer, the SPI NOR controller driver does not depend on the
+m25p80 code anymore.
+
+Before SPI-NOR:
+
+	-----------------------
+		cmd_sf.c
+	-----------------------
+		spi_flash.c
+	-----------------------
+		sf_probe.c
+	-----------------------
+		spi-uclass
+	-----------------------
+		spi drivers
+	-----------------------
+		SPI NOR chip
+	-----------------------
+
+After SPI-NOR:
+
+	------------------------------
+		cmd_sf.c
+	------------------------------
+		spi-nor.c
+	-------------------------------
+	m25p80.c	spi nor drivers
+	-------------------------------
+	spi-uclass	SPI NOR chip
+	-------------------------------
+	spi drivers
+	-------------------------------
+	SPI NOR chip
+	-------------------------------
+
+SPI-NOR with MTD:
+
+	------------------------------
+		cmd_sf.c
+	------------------------------
+		MTD core
+	------------------------------
+		spi-nor.c
+	-------------------------------
+	m25p80.c	spi nor drivers
+	-------------------------------
+	spi-uclass	SPI NOR chip
+	-------------------------------
+	spi bus drivers
+	-------------------------------
+	SPI NOR chip
+	-------------------------------
+
+Part III - How can drivers use the framework?
+---------------------------------------------
+
+The main API is spi_nor_scan(). Before you call the hook, a driver should
+initialize the necessary fields for spi_nor{}. Please see
+drivers/mtd/spi-nor/spi-nor.c for detail.
drivers/mtd/Kconfig +2 -0
index c58841e..2c8846b 100644
@@ -33,3 +33,5 @@ endmenu
 source "drivers/mtd/nand/Kconfig"
 
 source "drivers/mtd/spi/Kconfig"
+
+source "drivers/mtd/spi-nor/Kconfig"
drivers/mtd/spi-nor/Makefile +5 -0
index a4c19e3..9ab6e3d 100644
@@ -3,4 +3,9 @@
 #
 # SPDX-License-Identifier:	GPL-2.0+
 
+ifdef CONFIG_MTD_SPI_NOR
+obj-y += spi-nor.o
+obj-y += spi-nor-ids.o
+endif
+
 obj-$(CONFIG_MTD_M25P80)	+= m25p80.o
drivers/mtd/spi-nor/spi-nor-ids.c new file +276 -0

276 lines not on this page · raw message

drivers/mtd/spi-nor/spi-nor.c new file +1084 -0

1,084 lines not on this page · raw message

include/linux/err.h +5 -0
index 5b3c8bc..1bba498 100644
@@ -36,6 +36,11 @@ static inline long IS_ERR(const void *ptr)
 	return IS_ERR_VALUE((unsigned long)ptr);
 }
 
+static inline bool IS_ERR_OR_NULL(const void *ptr)
+{
+	return !ptr || IS_ERR_VALUE((unsigned long)ptr);
+}
+
 /**
  * ERR_CAST - Explicitly cast an error-valued pointer to another pointer type
  * @ptr: The pointer to cast.
include/linux/mtd/spi-nor.h new file +253 -0

253 lines not on this page · raw message

Signature · 1 line
1.9.1
author
#3 lore raw

PATCH v7 4/87 doc: device-tree-bindings: jedec, spi-nor

In reply to Jagan Teki

Since m25p80 follows similar naming convention as Linux, hence added jedec, spi-nor device tree bindings from Linux.

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 doc/device-tree-bindings/mtd/jedec,spi-nor.txt | 78 ++++++++++++++++++++++++++
 1 file changed, 78 insertions(+)
 create mode 100644 doc/device-tree-bindings/mtd/jedec,spi-nor.txt
doc/device-tree-bindings/mtd/jedec,spi-nor.txt new file +78 -0
new file mode 100644
index 0000000..2c91c03
@@ -0,0 +1,78 @@
+* SPI NOR flash: ST M25Pxx (and similar) serial flash chips
+
+Required properties:
+- #address-cells, #size-cells : Must be present if the device has sub-nodes
+  representing partitions.
+- compatible : May include a device-specific string consisting of the
+               manufacturer and name of the chip. A list of supported chip
+               names follows.
+               Must also include "jedec,spi-nor" for any SPI NOR flash that can
+               be identified by the JEDEC READ ID opcode (0x9F).
+
+               Supported chip names:
+                 at25df321a
+                 at25df641
+                 at26df081a
+                 mr25h256
+                 mx25l4005a
+                 mx25l1606e
+                 mx25l6405d
+                 mx25l12805d
+                 mx25l25635e
+                 n25q064
+                 n25q128a11
+                 n25q128a13
+                 n25q512a
+                 s25fl256s1
+                 s25fl512s
+                 s25sl12801
+                 s25fl008k
+                 s25fl064k
+                 sst25vf040b
+                 m25p40
+                 m25p80
+                 m25p16
+                 m25p32
+                 m25p64
+                 m25p128
+                 w25x80
+                 w25x32
+                 w25q32
+                 w25q32dw
+                 w25q80bl
+                 w25q128
+                 w25q256
+
+               The following chip names have been used historically to
+               designate quirky versions of flash chips that do not support the
+               JEDEC READ ID opcode (0x9F):
+                 m25p05-nonjedec
+                 m25p10-nonjedec
+                 m25p20-nonjedec
+                 m25p40-nonjedec
+                 m25p80-nonjedec
+                 m25p16-nonjedec
+                 m25p32-nonjedec
+                 m25p64-nonjedec
+                 m25p128-nonjedec
+
+- reg : Chip-Select number
+- spi-max-frequency : Maximum frequency of the SPI bus the chip can operate at
+
+Optional properties:
+- m25p,fast-read : Use the "fast read" opcode to read data from the chip instead
+                   of the usual "read" opcode. This opcode is not supported by
+                   all chips and support for it can not be detected at runtime.
+                   Refer to your chips' datasheet to check if this is supported
+                   by your chip.
+
+Example:
+
+	flash: m25p80 at 0 {
+		#address-cells = <1>;
+		#size-cells = <1>;
+		compatible = "spansion,m25p80", "jedec,spi-nor";
+		reg = <0>;
+		spi-max-frequency = <40000000>;
+		m25p,fast-read;
+	};
Signature · 1 line
1.9.1
author
#4 lore raw

PATCH v7 5/87 mtd: spi-nor: Add Kconfig entry for MTD_SPI_NOR

In reply to Jagan Teki

Added kconfig entry for MTD_SPI_NOR

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 drivers/mtd/spi-nor/Kconfig | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)
drivers/mtd/spi-nor/Kconfig +18 -0
index d32486c..f0ea9f9 100644
@@ -1,3 +1,19 @@
+menuconfig MTD_SPI_NOR
+	tristate "SPI-NOR device support"
+	help
+	  This is the core SPI NOR framework which can be used to interact SPI-NOR
+	  to SPI driver interface layer and the SPI-NOR controller driver.
+
+	  Unlike normal/generic spi controllers, they are few controllers which are
+	  exclusively used to connect SPI-NOR devices, called SPI-NOR controllers.
+	  So technically these controllers shouldn't reside at drivers/spi as these
+	  may effect the generic SPI bus functionalities, so this SPI-NOR core acts
+	  as a common core framework between the generic SPI controller drivers vs
+	  SPI-NOR controller drivers for SPI-NOR device access. Note that from SPI-NOR
+	  core to SPI drivers there should be an interface layer.
+
+if MTD_SPI_NOR
+
 config MTD_M25P80
 	tristate "Support most SPI Flash chips (AT26DF, M25P, W25X, ...)"
 	help
@@ -13,3 +29,5 @@ config MTD_M25P80
 	  Set up your spi devices with the right board-specific platform data,
 	  if you want to specify device partitioning or to use a device which
 	  doesn't support the JEDEC ID instruction.
+
+endif # MTD_SPI_NOR
Signature · 1 line
1.9.1
author
#5 lore raw

PATCH v7 6/87 mtd: spi-nor: Add kconfig for MTD_SPI_NOR_USE_4K_SECTORS

In reply to Jagan Teki

Added kconfig entry for MTD_SPI_NOR_USE_4K_SECTORS.

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 drivers/mtd/spi-nor/Kconfig | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
drivers/mtd/spi-nor/Kconfig +14 -0
index f0ea9f9..374cdcb 100644
@@ -30,4 +30,18 @@ config MTD_M25P80
 	  if you want to specify device partitioning or to use a device which
 	  doesn't support the JEDEC ID instruction.
 
+config MTD_SPI_NOR_USE_4K_SECTORS
+	bool "Use small 4096 B erase sectors"
+	default y
+	help
+	  Many flash memories support erasing small (4096 B) sectors. Depending
+	  on the usage this feature may provide performance gain in comparison
+	  to erasing whole blocks (32/64 KiB).
+	  Changing a small part of the flash's contents is usually faster with
+	  small sectors. On the other hand erasing should be faster when using
+	  64 KiB block instead of 16 ? 4 KiB sectors.
+
+	  Please note that some tools/drivers/filesystems may not work with
+	  4096 B erase size (e.g. UBIFS requires 15 KiB as a minimum).
+
 endif # MTD_SPI_NOR
Signature · 1 line
1.9.1
author
#6 lore raw

PATCH v7 7/87 mtd: spi-nor: Add MTD support

In reply to Jagan Teki

This patch adds mtd_info support to spi-nor core instead of using legacy spi_flash{}.

SPI-NOR with MTD:

	------------------------------
		cmd_sf.c
	------------------------------
		MTD core
	------------------------------
		spi-nor.c
	-------------------------------
	m25p80.c	spi nor drivers
	-------------------------------
	spi-uclass	SPI NOR chip
	-------------------------------
	spi drivers
	-------------------------------
	SPI NOR chip
	-------------------------------
Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 drivers/mtd/spi-nor/spi-nor.c | 275 +++++++++++++++++++++++++-----------------
 1 file changed, 166 insertions(+), 109 deletions(-)
drivers/mtd/spi-nor/spi-nor.c +166 -109
index f142ae4..b867ce9 100644
@@ -7,6 +7,7 @@
  */
 
 #include <common.h>
+#include <div64.h>
 #include <dm.h>
 #include <errno.h>
 #include <malloc.h>
@@ -14,6 +15,7 @@
 
 #include <linux/math64.h>
 #include <linux/log2.h>
+#include <linux/mtd/mtd.h>
 #include <linux/mtd/spi-nor.h>
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -209,10 +211,11 @@ bar_end:
 
 static int spi_nor_read_bar(struct spi_nor *nor, const struct spi_nor_info *info)
 {
+	struct mtd_info *mtd = nor->mtd;
 	u8 curr_bank = 0;
 	int ret;
 
-	if (flash->size <= SNOR_16MB_BOUN)
+	if (mtd->size <= SNOR_16MB_BOUN)
 		goto bar_end;
 
 	switch (JEDEC_MFR(info)) {
@@ -240,12 +243,12 @@ bar_end:
 #ifdef CONFIG_SF_DUAL_FLASH
 static void spi_nor_dual(struct spi_nor *nor, u32 *addr)
 {
-	struct spi_flash *flash = nor->flash;
+	struct mtd_info *mtd = nor->mtd;
 
 	switch (nor->dual) {
 	case SNOR_DUAL_STACKED:
-		if (*addr >= (flash->size >> 1)) {
-			*addr -= flash->size >> 1;
+		if (*addr >= (mtd->size >> 1)) {
+			*addr -= mtd->size >> 1;
 			nor->flags |= SNOR_F_U_PAGE;
 		} else {
 			nor->flags &= ~SNOR_F_U_PAGE;
@@ -263,8 +266,9 @@ static void spi_nor_dual(struct spi_nor *nor, u32 *addr)
 
 #if defined(CONFIG_SPI_FLASH_STMICRO) || defined(CONFIG_SPI_FLASH_SST)
 static void stm_get_locked_range(struct spi_nor *nor, u8 sr, loff_t *ofs,
-				 u32 *len)
+				 uint64_t *len)
 {
+	struct mtd_info *mtd = nor->mtd;
 	u8 mask = SR_BP2 | SR_BP1 | SR_BP0;
 	int shift = ffs(mask) - 1;
 	int pow;
@@ -275,18 +279,19 @@ static void stm_get_locked_range(struct spi_nor *nor, u8 sr, loff_t *ofs,
 		*len = 0;
 	} else {
 		pow = ((sr & mask) ^ mask) >> shift;
-		*len = flash->size >> pow;
-		*ofs = flash->size - *len;
+		*len = mtd->size >> pow;
+		*ofs = mtd->size - *len;
 	}
 }
 
 /*
  * Return 1 if the entire region is locked, 0 otherwise
  */
-static int stm_is_locked_sr(struct spi_nor *nor, u32 ofs, u32 len, u8 sr)
+static int stm_is_locked_sr(struct spi_nor *nor, loff_t ofs, uint64_t len,
+			    u8 sr)
 {
 	loff_t lock_offs;
-	u32 lock_len;
+	uint64_t lock_len;
 
 	stm_get_locked_range(nor, sr, &lock_offs, &lock_len);
 
@@ -294,24 +299,6 @@ static int stm_is_locked_sr(struct spi_nor *nor, u32 ofs, u32 len, u8 sr)
 }
 
 /*
- * Check if a region of the flash is (completely) locked. See stm_lock() for
- * more info.
- *
- * Returns 1 if entire region is locked, 0 if any portion is unlocked, and
- * negative on errors.
- */
-static int stm_is_locked(struct spi_nor *nor, u32 ofs, size_t len)
-{
-	int status;
-
-	status = read_sr(nor);
-	if (status < 0)
-		return status;
-
-	return stm_is_locked_sr(nor, ofs, len, status);
-}
-
-/*
  * Lock a region of the flash. Compatible with ST Micro and similar flash.
  * Supports only the block protection bits BP{0,1,2} in the status register
  * (SR). Does not support these features found in newer SR bitfields:
@@ -334,9 +321,10 @@ static int stm_is_locked(struct spi_nor *nor, u32 ofs, size_t len)
  *
  * Returns negative on errors, 0 on success.
  */
-static int stm_lock(struct spi_nor *nor, u32 ofs, size_t len)
+static int stm_lock(struct spi_nor *nor, loff_t ofs, uint64_t len)
 {
-	u8 status_old, status_new;
+	struct mtd_info *mtd = nor->mtd;
+	int status_old, status_new;
 	u8 mask = SR_BP2 | SR_BP1 | SR_BP0;
 	u8 shift = ffs(mask) - 1, pow, val;
 
@@ -345,12 +333,12 @@ static int stm_lock(struct spi_nor *nor, u32 ofs, size_t len)
 		return status_old;
 
 	/* SPI NOR always locks to the end */
-	if (ofs + len != flash->size) {
+	if (ofs + len != mtd->size) {
 		/* Does combined region extend to end? */
-		if (!stm_is_locked_sr(nor, ofs + len, flash->size - ofs - len,
+		if (!stm_is_locked_sr(nor, ofs + len, mtd->size - ofs - len,
 				      status_old))
 			return -EINVAL;
-		len = flash->size - ofs;
+		len = mtd->size - ofs;
 	}
 
 	/*
@@ -362,11 +350,10 @@ static int stm_lock(struct spi_nor *nor, u32 ofs, size_t len)
 	 *
 	 *   pow = ceil(log2(size / len)) = log2(size) - floor(log2(len))
 	 */
-	pow = ilog2(flash->size) - ilog2(len);
+	pow = ilog2(mtd->size) - ilog2(len);
 	val = mask - (pow << shift);
 	if (val & ~mask)
 		return -EINVAL;
-
 	/* Don't "lock" with no region! */
 	if (!(val & mask))
 		return -EINVAL;
@@ -386,20 +373,22 @@ static int stm_lock(struct spi_nor *nor, u32 ofs, size_t len)
  *
  * Returns negative on errors, 0 on success.
  */
-static int stm_unlock(struct spi_nor *nor, u32 ofs, size_t len)
+static int stm_unlock(struct spi_nor *nor, loff_t ofs, uint64_t len)
 {
-	uint8_t status_old, status_new;
+	struct mtd_info *mtd = nor->mtd;
+	int status_old, status_new;
 	u8 mask = SR_BP2 | SR_BP1 | SR_BP0;
 	u8 shift = ffs(mask) - 1, pow, val;
 
 	status_old = read_sr(nor);
-	if (status_old  < 0)
+	if (status_old < 0)
 		return status_old;
 
 	/* Cannot unlock; would unlock larger region than requested */
-	if (stm_is_locked_sr(nor, status_old, ofs - flash->erase_size,
-			     nor->erase_size))
+	if (stm_is_locked_sr(nor, status_old, ofs - mtd->erasesize,
+			     mtd->erasesize))
 		return -EINVAL;
+
 	/*
 	 * Need largest pow such that:
 	 *
@@ -409,8 +398,8 @@ static int stm_unlock(struct spi_nor *nor, u32 ofs, size_t len)
 	 *
 	 *   pow = floor(log2(size / len)) = log2(size) - ceil(log2(len))
 	 */
-	pow = ilog2(flash->size) - order_base_2(flash->size - (ofs + len));
-	if (ofs + len == flash->size) {
+	pow = ilog2(mtd->size) - order_base_2(mtd->size - (ofs + len));
+	if (ofs + len == mtd->size) {
 		val = 0; /* fully unlocked */
 	} else {
 		val = mask - (pow << shift);
@@ -428,8 +417,47 @@ static int stm_unlock(struct spi_nor *nor, u32 ofs, size_t len)
 	write_enable(nor);
 	return write_sr(nor, status_new);
 }
+
+/*
+ * Check if a region of the flash is (completely) locked. See stm_lock() for
+ * more info.
+ *
+ * Returns 1 if entire region is locked, 0 if any portion is unlocked, and
+ * negative on errors.
+ */
+static int stm_is_locked(struct spi_nor *nor, loff_t ofs, uint64_t len)
+{
+	int status;
+
+	status = read_sr(nor);
+	if (status < 0)
+		return status;
+
+	return stm_is_locked_sr(nor, ofs, len, status);
+}
 #endif
 
+static int spi_nor_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
+{
+	struct spi_nor *nor = mtd->priv;
+
+	return nor->flash_lock(nor, ofs, len);
+}
+
+static int spi_nor_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
+{
+	struct spi_nor *nor = mtd->priv;
+
+	return nor->flash_unlock(nor, ofs, len);
+}
+
+static int spi_nor_is_locked(struct mtd_info *mtd, loff_t ofs, uint64_t len)
+{
+	struct spi_nor *nor = mtd->priv;
+
+	return nor->flash_is_locked(nor, ofs, len);
+}
+
 static const struct spi_nor_info *spi_nor_id(struct spi_nor *nor)
 {
 	int				tmp;
@@ -455,30 +483,32 @@ static const struct spi_nor_info *spi_nor_id(struct spi_nor *nor)
 	return ERR_PTR(-ENODEV);
 }
 
-static int spi_nor_erase(struct spi_flash *flash, u32 offset, size_t len)
+static int spi_nor_erase(struct mtd_info *mtd, struct erase_info *instr)
 {
-	struct spi_nor *nor = flash->nor;
-	u32 erase_size, erase_addr;
+	struct spi_nor *nor = mtd->priv;
+	u32 addr, len, erase_addr;
 	u8 cmd[SNOR_MAX_CMD_SIZE];
+	uint32_t rem;
 	int ret = -1;
 
-	erase_size = nor->erase_size;
-	if (offset % erase_size || len % erase_size) {
-		debug("spi-nor: Erase offset/length not multiple of erase size\n");
-		return -1;
-	}
+	div_u64_rem(instr->len, mtd->erasesize, &rem);
+	if (rem)
+		return -EINVAL;
 
-	if (flash->flash_is_locked) {
-		if (flash->flash_is_locked(flash, offset, len) > 0) {
+	addr = instr->addr;
+	len = instr->len;
+
+	if (mtd->_is_locked) {
+		if (mtd->_is_locked(mtd, addr, len) > 0) {
 			printf("offset 0x%x is protected and cannot be erased\n",
-			       offset);
+			       addr);
 			return -EINVAL;
 		}
 	}
 
-	cmd[0] = flash->erase_opcode;
+	cmd[0] = nor->erase_opcode;
 	while (len) {
-		erase_addr = offset;
+		erase_addr = addr;
 
 #ifdef CONFIG_SF_DUAL_FLASH
 		if (nor->dual > SNOR_DUAL_SINGLE)
@@ -498,39 +528,47 @@ static int spi_nor_erase(struct spi_flash *flash, u32 offset, size_t len)
 
 		ret = nor->write(nor, cmd, sizeof(cmd), NULL, 0);
 		if (ret < 0)
-			break;
+			goto erase_err;
 
 		ret = spi_nor_wait_till_ready(nor, SNOR_READY_WAIT_ERASE);
 		if (ret < 0)
-			return ret;
+			goto erase_err;
 
-		offset += erase_size;
-		len -= erase_size;
+		addr += mtd->erasesize;
+		len -= mtd->erasesize;
 	}
 
+	write_disable(nor);
+
+	instr->state = MTD_ERASE_DONE;
+	mtd_erase_callback(instr);
+
+	return ret;
+
+erase_err:
+	instr->state = MTD_ERASE_FAILED;
 	return ret;
 }
 
-int spi_nor_write(struct spi_flash *flash, u32 offset,
-		  size_t len, const void *buf)
+static int spi_nor_write(struct mtd_info *mtd, loff_t offset, size_t len,
+			 size_t *retlen, const u_char *buf)
 {
-	struct spi_nor *nor = flash->nor;
-	unsigned long byte_addr, page_size;
-	u32 write_addr;
+	struct spi_nor *nor = mtd->priv;
+	u32 byte_addr, page_size, write_addr;
 	size_t chunk_len, actual;
 	u8 cmd[SNOR_MAX_CMD_SIZE];
 	int ret = -1;
 
-	page_size = nor->page_size;
-
-	if (flash->flash_is_locked) {
-		if (flash->flash_is_locked(flash, offset, len) > 0) {
-			printf("offset 0x%x is protected and cannot be written\n",
+	if (mtd->_is_locked) {
+		if (mtd->_is_locked(mtd, offset, len) > 0) {
+			printf("offset 0x%llx is protected and cannot be written\n",
 			       offset);
 			return -EINVAL;
 		}
 	}
 
+	page_size = nor->page_size;
+
 	cmd[0] = nor->program_opcode;
 	for (actual = 0; actual < len; actual += chunk_len) {
 		write_addr = offset;
@@ -568,14 +606,16 @@ int spi_nor_write(struct spi_flash *flash, u32 offset,
 			return ret;
 
 		offset += chunk_len;
+		*retlen += chunk_len;
 	}
 
 	return ret;
 }
 
-int spi_nor_read(struct spi_flash *flash, u32 offset, size_t len, void *data)
+static int spi_nor_read(struct mtd_info *mtd, loff_t from, size_t len,
+			size_t *retlen, u_char *buf)
 {
-	struct spi_nor *nor = flash->nor;
+	struct spi_nor *nor = mtd->priv;
 	u32 remain_len, read_len, read_addr;
 	u8 *cmd, cmdsz;
 	int bank_sel = 0;
@@ -583,7 +623,7 @@ int spi_nor_read(struct spi_flash *flash, u32 offset, size_t len, void *data)
 
 	/* Handle memory-mapped SPI */
 	if (nor->memory_map) {
-		ret = nor->read_mmap(nor, data, nor->memory_map + offset, len);
+		ret = nor->read_mmap(nor, buf, nor->memory_map + from, len);
 		if (ret) {
 			debug("spi-nor: mmap read failed\n");
 			return ret;
@@ -601,7 +641,7 @@ int spi_nor_read(struct spi_flash *flash, u32 offset, size_t len, void *data)
 
 	cmd[0] = nor->read_opcode;
 	while (len) {
-		read_addr = offset;
+		read_addr = from;
 
 #ifdef CONFIG_SF_DUAL_FLASH
 		if (nor->dual > SNOR_DUAL_SINGLE)
@@ -614,7 +654,7 @@ int spi_nor_read(struct spi_flash *flash, u32 offset, size_t len, void *data)
 		bank_sel = nor->bank_curr;
 #endif
 		remain_len = ((SNOR_16MB_BOUN << nor->shift) *
-				(bank_sel + 1)) - offset;
+				(bank_sel + 1)) - from;
 		if (len < remain_len)
 			read_len = len;
 		else
@@ -622,13 +662,14 @@ int spi_nor_read(struct spi_flash *flash, u32 offset, size_t len, void *data)
 
 		spi_nor_addr(read_addr, cmd);
 
-		ret = nor->read(nor, cmd, cmdsz, data, read_len);
+		ret = nor->read(nor, cmd, cmdsz, buf, read_len);
 		if (ret < 0)
 			break;
 
-		offset += read_len;
+		from += read_len;
 		len -= read_len;
-		data += read_len;
+		buf += read_len;
+		*retlen += read_len;
 	}
 
 	free(cmd);
@@ -636,7 +677,8 @@ int spi_nor_read(struct spi_flash *flash, u32 offset, size_t len, void *data)
 }
 
 #ifdef CONFIG_SPI_FLASH_SST
-static int sst_byte_write(struct spi_nor *nor, u32 offset, const void *buf)
+static int sst_byte_write(struct spi_nor *nor, u32 offset,
+			  const void *buf, size_t *retlen)
 {
 	int ret;
 	u8 cmd[4] = {
@@ -657,12 +699,15 @@ static int sst_byte_write(struct spi_nor *nor, u32 offset, const void *buf)
 	if (ret)
 		return ret;
 
+	*retlen += 1;
+
 	return spi_nor_wait_till_ready(nor, SNOR_READY_WAIT_PROG);
 }
 
-int sst_write_wp(struct spi_nor *nor, u32 offset, size_t len, const void *buf)
+static int sst_write_wp(struct mtd_info *mtd, loff_t offset, size_t len,
+			size_t *retlen, const u_char *buf)
 {
-	struct spi_nor *nor = flash->nor;
+	struct spi_nor *nor = mtd->priv;
 	size_t actual, cmd_len;
 	int ret;
 	u8 cmd[4];
@@ -670,7 +715,7 @@ int sst_write_wp(struct spi_nor *nor, u32 offset, size_t len, const void *buf)
 	/* If the data is not word aligned, write out leading single byte */
 	actual = offset % 2;
 	if (actual) {
-		ret = sst_byte_write(nor, offset, buf);
+		ret = sst_byte_write(nor, offset, buf, retlen);
 		if (ret)
 			goto done;
 	}
@@ -687,7 +732,7 @@ int sst_write_wp(struct spi_nor *nor, u32 offset, size_t len, const void *buf)
 	cmd[3] = offset;
 
 	for (; actual < len - 1; actual += 2) {
-		debug("spi-nor: 0x%p => cmd = { 0x%02x 0x%06x }\n",
+		debug("spi-nor: 0x%p => cmd = { 0x%02x 0x%06llx }\n",
 		      buf + actual, cmd[0], offset);
 
 		ret = nor->write(nor, cmd, cmd_len, buf + actual, 2);
@@ -702,6 +747,7 @@ int sst_write_wp(struct spi_nor *nor, u32 offset, size_t len, const void *buf)
 
 		cmd_len = 1;
 		offset += 2;
+		*retlen += 2;
 	}
 
 	if (!ret)
@@ -709,20 +755,21 @@ int sst_write_wp(struct spi_nor *nor, u32 offset, size_t len, const void *buf)
 
 	/* If there is a single trailing byte, write it out */
 	if (!ret && actual != len)
-		ret = sst_byte_write(nor, offset, buf + actual);
+		ret = sst_byte_write(nor, offset, buf + actual, retlen);
 
  done:
 	return ret;
 }
 
-int sst_write_bp(struct spi_nor *nor, u32 offset, size_t len, const void *buf)
+static int sst_write_bp(struct mtd_info *mtd, loff_t offset, size_t len,
+			size_t *retlen, const u_char *buf)
 {
-	struct spi_nor *nor = flash->nor;
+	struct spi_nor *nor = mtd->priv;
 	size_t actual;
 	int ret;
 
 	for (actual = 0; actual < len; actual++) {
-		ret = sst_byte_write(nor, offset, buf + actual);
+		ret = sst_byte_write(nor, offset, buf + actual, retlen);
 		if (ret) {
 			debug("spi-nor: sst byte program failed\n");
 			break;
@@ -853,6 +900,7 @@ static int set_quad_mode(struct spi_nor *nor, const struct spi_nor_info *info)
 #if CONFIG_IS_ENABLED(OF_CONTROL)
 int spi_nor_decode_fdt(const void *blob, struct spi_nor *nor)
 {
+	struct mtd_info *mtd = nor->mtd;
 	fdt_addr_t addr;
 	fdt_size_t size;
 	int node;
@@ -868,7 +916,7 @@ int spi_nor_decode_fdt(const void *blob, struct spi_nor *nor)
 		return 0;
 	}
 
-	if (flash->size != size) {
+	if (mtd->size != size) {
 		debug("%s: Memory map must cover entire device\n", __func__);
 		return -1;
 	}
@@ -891,6 +939,7 @@ static int spi_nor_check(struct spi_nor *nor)
 
 int spi_nor_scan(struct spi_nor *nor)
 {
+	struct mtd_info *mtd = nor->mtd;
 	const struct spi_nor_info *info = NULL;
 	static u8 flash_read_cmd[] = {
 		SNOR_OP_READ,
@@ -921,7 +970,13 @@ int spi_nor_scan(struct spi_nor *nor)
 		write_sr(nor, 0);
 	}
 
-	flash->name = info->name;
+	mtd->name = info->name;
+	mtd->priv = nor;
+	mtd->type = MTD_NORFLASH;
+	mtd->writesize = 1;
+	mtd->flags = MTD_CAP_NORFLASH;
+	mtd->_erase = spi_nor_erase;
+	mtd->_read = spi_nor_read;
 
 	if (info->flags & USE_FSR)
 		nor->flags |= SNOR_F_USE_FSR;
@@ -929,15 +984,13 @@ int spi_nor_scan(struct spi_nor *nor)
 	if (info->flags & SST_WRITE)
 		nor->flags |= SNOR_F_SST_WRITE;
 
-	flash->write = spi_nor_write;
-	flash->erase = spi_nor_erase;
-	flash->read = spi_nor_read;
+	mtd->_write = spi_nor_write;
 #if defined(CONFIG_SPI_FLASH_SST)
 	if (nor->flags & SNOR_F_SST_WRITE) {
 		if (nor->mode & SNOR_WRITE_1_1_BYTE)
-			flash->write = sst_write_bp;
+			mtd->_write = sst_write_bp;
 		else
-			flash->write = sst_write_wp;
+			mtd->_write = sst_write_wp;
 	}
 #endif
 
@@ -951,10 +1004,10 @@ int spi_nor_scan(struct spi_nor *nor)
 	}
 #endif
 
-	if (flash->flash_lock && flash->flash_unlock && flash->flash_is_locked) {
-		flash->flash_lock = spi_nor_lock;
-		flash->flash_unlock = spi_nor_unlock;
-		flash->flash_is_locked = spi_nor_is_locked;
+	if (nor->flash_lock && nor->flash_unlock && nor->flash_is_locked) {
+		mtd->_lock = spi_nor_lock;
+		mtd->_unlock = spi_nor_unlock;
+		mtd->_is_locked = spi_nor_is_locked;
 	}
 
 	/* Compute the flash size */
@@ -972,30 +1025,30 @@ int spi_nor_scan(struct spi_nor *nor)
 			nor->page_size = 512;
 	}
 	nor->page_size <<= nor->shift;
-	flash->sector_size = info->sector_size << nor->shift;
-	flash->size = flash->sector_size * info->n_sectors << nor->shift;
+	mtd->writebufsize = nor->page_size;
+	mtd->size = (info->sector_size * info->n_sectors) << nor->shift;
 #ifdef CONFIG_SF_DUAL_FLASH
 	if (nor->dual & SNOR_DUAL_STACKED)
-		flash->size <<= 1;
+		mtd->size <<= 1;
 #endif
 
 #ifdef CONFIG_MTD_SPI_NOR_USE_4K_SECTORS
 	/* prefer "small sector" erase if possible */
 	if (info->flags & SECT_4K) {
 		nor->erase_opcode = SNOR_OP_BE_4K;
-		nor->erase_size = 4096 << nor->shift;
+		mtd->erasesize = 4096 << nor->shift;
 	} else if (info->flags & SECT_4K_PMC) {
 		nor->erase_opcode = SNOR_OP_BE_4K_PMC;
-		nor->erase_size = 4096;
+		mtd->erasesize = 4096;
 	} else
 #endif
 	{
 		nor->erase_opcode = SNOR_OP_SE;
-		nor->erase_size = flash->sector_size;
+		mtd->erasesize = info->sector_size << nor->shift;
 	}
 
-	/* Now erase size becomes valid sector size */
-	flash->sector_size = nor->erase_size;
+	if (info->flags & SPI_NOR_NO_ERASE)
+		mtd->flags |= MTD_NO_ERASE;
 
 	/* Look for the fastest read cmd */
 	cmd = fls(info->flash_read & nor->read_mode);
@@ -1007,6 +1060,10 @@ int spi_nor_scan(struct spi_nor *nor)
 		nor->read_opcode = SNOR_OP_READ_FAST;
 	}
 
+	/* Some devices cannot do fast-read */
+	if (info->flags & SPI_NOR_NO_FR)
+		nor->read_opcode = SNOR_OP_READ;
+
 	/* Not require to look for fastest only two write cmds yet */
 	if (info->flags & SNOR_WRITE_QUAD && nor->mode & SNOR_WRITE_1_1_4)
 		nor->program_opcode = SNOR_OP_QPP;
@@ -1061,10 +1118,10 @@ int spi_nor_scan(struct spi_nor *nor)
 #endif
 
 #ifndef CONFIG_SPL_BUILD
-	printf("spi-nor: detected %s with page size ", flash->name);
+	printf("spi-nor: detected %s with page size ", mtd->name);
 	print_size(nor->page_size, ", erase size ");
-	print_size(nor->erase_size, ", total ");
-	print_size(flash->size, "");
+	print_size(mtd->erasesize, ", total ");
+	print_size(mtd->size, "");
 	if (nor->memory_map)
 		printf(", mapped at %p", nor->memory_map);
 	puts("\n");
@@ -1072,9 +1129,9 @@ int spi_nor_scan(struct spi_nor *nor)
 
 #ifndef CONFIG_SPI_FLASH_BAR
 	if (((nor->dual == SNOR_DUAL_SINGLE) &&
-	     (flash->size > SNOR_16MB_BOUN)) ||
+	     (mtd->size > SNOR_16MB_BOUN)) ||
 	     ((nor->dual > SNOR_DUAL_SINGLE) &&
-	     (flash->size > SNOR_16MB_BOUN << 1))) {
+	     (mtd->size > SNOR_16MB_BOUN << 1))) {
 		puts("spi-nor: Warning - Only lower 16MiB accessible,");
 		puts(" Full access #define CONFIG_SPI_FLASH_BAR\n");
 	}
Signature · 1 line
1.9.1
author
#7 lore raw

PATCH v7 8/87 mtd: spi-nor: Add spi_nor support in m25p80

In reply to Jagan Teki

m25p80 is flash interface for spi-nor core and drivers/spi so add spi_nor{} functionalities like
- allocate spi_nor{}
- basic initilization
- install hooks
- call to spi-nor core, using spi_nor_scan
- register with mtd core

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 drivers/mtd/spi-nor/m25p80.c | 245 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 245 insertions(+)
drivers/mtd/spi-nor/m25p80.c +245 -0
index 833a9c3..6a892d2 100644
@@ -8,16 +8,260 @@
 
 #include <common.h>
 #include <dm.h>
+#include <dma.h>
 #include <errno.h>
 #include <spi.h>
+
+#include <dm/device-internal.h>
+
 #include <linux/mtd/mtd.h>
+#include <linux/mtd/spi-nor.h>
+
+struct m25p {
+	struct spi_slave	*spi;
+	struct spi_nor		spi_nor;
+};
+
+static int spi_read_then_write(struct spi_slave *spi, const u8 *cmd,
+			       size_t cmd_len, const u8 *data_out,
+			       u8 *data_in, size_t data_len)
+{
+	unsigned long flags = SPI_XFER_BEGIN;
+	int ret;
+
+	if (data_len == 0)
+		flags |= SPI_XFER_END;
+
+	ret = spi_xfer(spi, cmd_len * 8, cmd, NULL, flags);
+	if (ret) {
+		debug("SF: Failed to send command (%zu bytes): %d\n",
+		      cmd_len, ret);
+	} else if (data_len != 0) {
+		ret = spi_xfer(spi, data_len * 8, data_out, data_in,
+					SPI_XFER_END);
+		if (ret)
+			debug("SF: Failed to transfer %zu bytes of data: %d\n",
+			      data_len, ret);
+	}
+
+	return ret;
+}
+
+static int m25p80_read_reg(struct spi_nor *nor, u8 cmd, u8 *val, int len)
+{
+	struct m25p *flash = nor->priv;
+	struct spi_slave *spi = flash->spi;
+	int ret;
+
+	ret = spi_claim_bus(spi);
+	if (ret < 0) {
+		debug("m25p80: unable to claim SPI bus\n");
+		return ret;
+	}
+
+	if (nor->flags & SNOR_F_U_PAGE)
+		spi->flags |= SPI_XFER_U_PAGE;
+
+	ret = spi_read_then_write(spi, &cmd, 1, NULL, val, len);
+	if (ret < 0) {
+		debug("m25p80: error %d reading register %x\n", ret, cmd);
+		return ret;
+	}
+
+	spi_release_bus(spi);
+
+	return ret;
+}
+
+static int m25p80_write_reg(struct spi_nor *nor, u8 cmd, u8 *buf, int len)
+{
+	struct m25p *flash = nor->priv;
+	struct spi_slave *spi = flash->spi;
+	int ret;
+
+	ret = spi_claim_bus(spi);
+	if (ret < 0) {
+		debug("m25p80: unable to claim SPI bus\n");
+		return ret;
+	}
+
+	if (nor->flags & SNOR_F_U_PAGE)
+		spi->flags |= SPI_XFER_U_PAGE;
+
+	ret = spi_read_then_write(spi, &cmd, 1, buf, NULL, len);
+	if (ret < 0) {
+		debug("m25p80: error %d writing register %x\n", ret, cmd);
+		return ret;
+	}
+
+	spi_release_bus(spi);
+
+	return ret;
+}
+
+/*
+ * TODO: remove the weak after all the other spi_flash_copy_mmap
+ * implementations removed from drivers
+ */
+void __weak flash_copy_mmap(void *data, void *offset, size_t len)
+{
+#ifdef CONFIG_DMA
+	if (!dma_memcpy(data, offset, len))
+		return;
+#endif
+	memcpy(data, offset, len);
+}
+
+static int m25p80_read_mmap(struct spi_nor *nor, void *data,
+			    void *offset, size_t len)
+{
+	struct m25p *flash = nor->priv;
+	struct spi_slave *spi = flash->spi;
+	int ret;
+
+	ret = spi_claim_bus(spi);
+	if (ret) {
+		debug("m25p80: unable to claim SPI bus\n");
+		return ret;
+	}
+
+	spi_xfer(spi, 0, NULL, NULL, SPI_XFER_MMAP);
+	flash_copy_mmap(data, offset, len);
+	spi_xfer(spi, 0, NULL, NULL, SPI_XFER_MMAP_END);
+
+	spi_release_bus(spi);
+
+	return ret;
+}
+
+static int m25p80_read(struct spi_nor *nor, const u8 *cmd, size_t cmd_len,
+				void *data, size_t data_len)
+{
+	struct m25p *flash = nor->priv;
+	struct spi_slave *spi = flash->spi;
+	int ret;
+
+	ret = spi_claim_bus(spi);
+	if (ret < 0) {
+		debug("m25p80: unable to claim SPI bus\n");
+		return ret;
+	}
+
+	if (nor->flags & SNOR_F_U_PAGE)
+		spi->flags |= SPI_XFER_U_PAGE;
+
+	ret = spi_read_then_write(spi, cmd, cmd_len, NULL, data, data_len);
+	if (ret < 0) {
+		debug("m25p80: error %d reading %x\n", ret, *cmd);
+		return ret;
+	}
+
+	spi_release_bus(spi);
+
+	return ret;
+}
+
+static int m25p80_write(struct spi_nor *nor, const u8 *cmd, size_t cmd_len,
+				const void *data, size_t data_len)
+{
+	struct m25p *flash = nor->priv;
+	struct spi_slave *spi = flash->spi;
+	int ret;
+
+	ret = spi_claim_bus(spi);
+	if (ret < 0) {
+		debug("m25p80: unable to claim SPI bus\n");
+		return ret;
+	}
+
+	if (nor->flags & SNOR_F_U_PAGE)
+		spi->flags |= SPI_XFER_U_PAGE;
+
+	ret = spi_read_then_write(spi, cmd, cmd_len, data, NULL, data_len);
+	if (ret < 0) {
+		debug("m25p80: error %d writing %x\n", ret, *cmd);
+		return ret;
+	}
+
+	spi_release_bus(spi);
+
+	return ret;
+}
 
 static int m25p_probe(struct udevice *dev)
 {
 	struct spi_slave *spi = dev_get_parent_priv(dev);
 	struct mtd_info	*mtd = dev_get_uclass_priv(dev);
+	struct m25p *flash = dev_get_priv(dev);
+	struct spi_nor *nor;
+	int ret;
+
+	nor = &flash->spi_nor;
+
+	/* install hooks */
+	nor->read_mmap = m25p80_read_mmap;
+	nor->read = m25p80_read;
+	nor->write = m25p80_write;
+	nor->read_reg = m25p80_read_reg;
+	nor->write_reg = m25p80_write_reg;
+
+	nor->mtd = mtd;
+	nor->priv = flash;
+	flash->spi = spi;
+
+	/* claim spi bus */
+	ret = spi_claim_bus(spi);
+	if (ret) {
+		debug("m25p80: failed to claim SPI bus: %d\n", ret);
+		return ret;
+	}
+
+	switch (spi->mode_rx) {
+	case SPI_RX_SLOW:
+		nor->read_mode = SNOR_READ;
+		break;
+	case SPI_RX_DUAL:
+		nor->read_mode = SNOR_READ_1_1_2;
+		break;
+	case SPI_RX_QUAD:
+		nor->read_mode = SNOR_READ_1_1_4;
+		break;
+	}
+
+	switch (spi->mode) {
+	case SPI_TX_BYTE:
+		nor->mode = SNOR_WRITE_1_1_BYTE;
+		break;
+	case SPI_TX_QUAD:
+		nor->mode = SNOR_WRITE_1_1_4;
+		break;
+	}
+
+	nor->memory_map = spi->memory_map;
+	nor->max_write_size = spi->max_write_size;
+
+	/* TODO: unrelated to spi_slave{} */
+	if (spi->option & SPI_CONN_DUAL_SHARED)
+		nor->dual = SNOR_DUAL_STACKED;
+	else if (spi->option & SPI_CONN_DUAL_SEPARATED)
+		nor->dual = SNOR_DUAL_PARALLEL;
+
+	ret = spi_nor_scan(nor);
+	if (ret)
+		goto err_scan;
+
+	ret = add_mtd_device(mtd);
+	if (ret)
+		goto err_mtd;
 
 	return 0;
+
+err_scan:
+	spi_release_bus(spi);
+err_mtd:
+	spi_free_slave(spi);
+	device_remove(dev);
+	return ret;
 }
 
 static const struct udevice_id m25p_ids[] = {
@@ -34,4 +278,5 @@ U_BOOT_DRIVER(m25p80) = {
 	.id		= UCLASS_MTD,
 	.of_match	= m25p_ids,
 	.probe		= m25p_probe,
+	.priv_auto_alloc_size = sizeof(struct m25p),
 };
Signature · 1 line
1.9.1
author
#8 lore raw

PATCH v7 9/87 mtd: spi-nor: Add dm spi-nor probing

In reply to Jagan Teki

This patch adds driver-model probe from cmd_sf through MTD_DM_SPI_NOR which is depends on MTD and DM_SPI uclass.

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 cmd/sf.c                            |  4 ++--
 common/env_sf.c                     |  4 ++--
 drivers/mtd/spi-nor/Kconfig         |  7 +++++++
 drivers/mtd/spi-nor/Makefile        |  2 ++
 drivers/mtd/spi-nor/spi-nor-probe.c | 36 ++++++++++++++++++++++++++++++++++++
 include/spi_flash.h                 | 18 +++++++++++++++++-
 6 files changed, 66 insertions(+), 5 deletions(-)
 create mode 100644 drivers/mtd/spi-nor/spi-nor-probe.c
cmd/sf.c +2 -2
index 42862d9..89ab41e 100644
@@ -85,7 +85,7 @@ static int do_spi_flash_probe(int argc, char * const argv[])
 	unsigned int speed = CONFIG_SF_DEFAULT_SPEED;
 	unsigned int mode = CONFIG_SF_DEFAULT_MODE;
 	char *endp;
-#ifdef CONFIG_DM_SPI_FLASH
+#if defined(CONFIG_DM_SPI_FLASH) || defined(CONFIG_DM_MTD_SPI_NOR)
 	struct udevice *new, *bus_dev;
 	int ret;
 #else
@@ -118,7 +118,7 @@ static int do_spi_flash_probe(int argc, char * const argv[])
 			return -1;
 	}
 
-#ifdef CONFIG_DM_SPI_FLASH
+#if defined(CONFIG_DM_SPI_FLASH) || defined(CONFIG_DM_MTD_SPI_NOR)
 	/* Remove the old device, otherwise probe will just be a nop */
 	ret = spi_find_bus_and_cs(bus, cs, &bus_dev, &new);
 	if (!ret) {
common/env_sf.c +2 -2
index 892e6cb..ec88792 100644
@@ -52,7 +52,7 @@ int saveenv(void)
 	char	*saved_buffer = NULL, flag = OBSOLETE_FLAG;
 	u32	saved_size, saved_offset, sector = 1;
 	int	ret;
-#ifdef CONFIG_DM_SPI_FLASH
+#if defined(CONFIG_DM_SPI_FLASH) || defined(CONFIG_DM_MTD_SPI_NOR)
 	struct udevice *new;
 
 	ret = spi_flash_probe_bus_cs(CONFIG_ENV_SPI_BUS, CONFIG_ENV_SPI_CS,
@@ -242,7 +242,7 @@ int saveenv(void)
 	char	*saved_buffer = NULL;
 	int	ret = 1;
 	env_t	env_new;
-#ifdef CONFIG_DM_SPI_FLASH
+#if defined(CONFIG_DM_SPI_FLASH) || defined(CONFIG_DM_MTD_SPI_NOR)
 	struct udevice *new;
 
 	ret = spi_flash_probe_bus_cs(CONFIG_ENV_SPI_BUS, CONFIG_ENV_SPI_CS,
drivers/mtd/spi-nor/Kconfig +7 -0
index 374cdcb..342164d 100644
@@ -1,5 +1,6 @@
 menuconfig MTD_SPI_NOR
 	tristate "SPI-NOR device support"
+	select DM_MTD_SPI_NOR if DM_SPI && MTD
 	help
 	  This is the core SPI NOR framework which can be used to interact SPI-NOR
 	  to SPI driver interface layer and the SPI-NOR controller driver.
@@ -12,6 +13,12 @@ menuconfig MTD_SPI_NOR
 	  SPI-NOR controller drivers for SPI-NOR device access. Note that from SPI-NOR
 	  core to SPI drivers there should be an interface layer.
 
+config DM_MTD_SPI_NOR
+	bool "MTD driver model for SPI-NOR"
+	help
+	  This is enables MTD driver model support for SPI-NOR. Both MTD and SPI
+	  driver models need to define for enabling this support.
+
 if MTD_SPI_NOR
 
 config MTD_M25P80
drivers/mtd/spi-nor/Makefile +2 -0
index 9ab6e3d..2f41630 100644
@@ -6,6 +6,8 @@
 ifdef CONFIG_MTD_SPI_NOR
 obj-y += spi-nor.o
 obj-y += spi-nor-ids.o
+
+obj-$(CONFIG_DM_MTD_SPI_NOR)	+= spi-nor-probe.o
 endif
 
 obj-$(CONFIG_MTD_M25P80)	+= m25p80.o
drivers/mtd/spi-nor/spi-nor-probe.c new file +36 -0
new file mode 100644
index 0000000..532d8a7
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2014 Google, Inc
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <spi.h>
+#include <spi_flash.h>
+
+int spi_flash_probe_bus_cs(unsigned int busnum, unsigned int cs,
+			   unsigned int max_hz, unsigned int spi_mode,
+			   struct udevice **devp)
+{
+	struct spi_slave *slave;
+	struct udevice *bus;
+	char *str;
+	int ret;
+
+#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_USE_TINY_PRINTF)
+	str = "spi_flash";
+#else
+	char name[30];
+
+	snprintf(name, sizeof(name), "spi_flash@%d:%d", busnum, cs);
+	str = strdup(name);
+#endif
+	ret = spi_get_bus_and_cs(busnum, cs, max_hz, spi_mode,
+				  "spi_flash_std", str, &bus, &slave);
+	if (ret)
+		return ret;
+
+	*devp = slave->dev;
+	return 0;
+}
include/spi_flash.h +17 -1
index d0ce9e7..d39941f 100644
@@ -108,6 +108,14 @@ struct spi_flash {
 #endif
 };
 
+#if defined(CONFIG_MTD_SPI_NOR) && defined(CONFIG_DM_MTD_SPI_NOR)
+
+int spi_flash_probe_bus_cs(unsigned int busnum, unsigned int cs,
+			   unsigned int max_hz, unsigned int spi_mode,
+			   struct udevice **devp);
+
+#endif
+
 struct dm_spi_flash_ops {
 	int (*read)(struct udevice *dev, u32 offset, size_t len, void *buf);
 	int (*write)(struct udevice *dev, u32 offset, size_t len,
@@ -190,7 +198,15 @@ int sandbox_sf_bind_emul(struct sandbox_state *state, int busnum, int cs,
 
 void sandbox_sf_unbind_emul(struct sandbox_state *state, int busnum, int cs);
 
-#else
+#elif !defined(CONFIG_MTD_SPI_NOR)
+
+struct sandbox_state;
+
+int sandbox_sf_bind_emul(struct sandbox_state *state, int busnum, int cs,
+			 struct udevice *bus, int of_offset, const char *spec);
+
+void sandbox_sf_unbind_emul(struct sandbox_state *state, int busnum, int cs);
+
 struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs,
 		unsigned int max_hz, unsigned int spi_mode);
 
Signature · 1 line
1.9.1
author
#9 lore raw

PATCH v7 10/87 mtd: spi-nor: Add spi_flash_probe for mtd-dm-spi-nor

In reply to Jagan Teki

While probing spi-nor in SPL spi_flash_probe is needed, so add the flash probe code in spi-nor-probe.c

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 drivers/mtd/spi-nor/spi-nor-probe.c | 15 +++++++++++++++
 include/spi_flash.h                 |  6 ++++++
 2 files changed, 21 insertions(+)
drivers/mtd/spi-nor/spi-nor-probe.c +15 -0
index 532d8a7..713968b 100644
@@ -9,6 +9,21 @@
 #include <spi.h>
 #include <spi_flash.h>
 
+/*
+ * TODO(sjg at chromium.org): This is an old-style function. We should remove
+ * it when all SPI flash drivers use dm
+ */
+spi_flash_t *spi_flash_probe(unsigned int bus, unsigned int cs,
+			     unsigned int max_hz, unsigned int spi_mode)
+{
+	struct udevice *dev;
+
+	if (spi_flash_probe_bus_cs(bus, cs, max_hz, spi_mode, &dev))
+		return NULL;
+
+	return dev_get_uclass_priv(dev);
+}
+
 int spi_flash_probe_bus_cs(unsigned int busnum, unsigned int cs,
 			   unsigned int max_hz, unsigned int spi_mode,
 			   struct udevice **devp)
include/spi_flash.h +6 -0
index d39941f..0350767 100644
@@ -110,10 +110,16 @@ struct spi_flash {
 
 #if defined(CONFIG_MTD_SPI_NOR) && defined(CONFIG_DM_MTD_SPI_NOR)
 
+typedef struct mtd_info spi_flash_t;
+
 int spi_flash_probe_bus_cs(unsigned int busnum, unsigned int cs,
 			   unsigned int max_hz, unsigned int spi_mode,
 			   struct udevice **devp);
 
+/* Compatibility function - this is the old U-Boot API */
+spi_flash_t *spi_flash_probe(unsigned int bus, unsigned int cs,
+			     unsigned int max_hz, unsigned int spi_mode);
+
 #endif
 
 struct dm_spi_flash_ops {
Signature · 1 line
1.9.1
author
#10 lore raw

PATCH v7 11/87 mtd: spi-nor: Add spi_flash_free for mtd-dm-spi-nor

In reply to Jagan Teki

env_sf need to free the flash while read error, so add the flash probe code in spi-nor-probe.c

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 drivers/mtd/spi-nor/spi-nor-probe.c | 7 +++++++
 include/spi_flash.h                 | 3 +++
 2 files changed, 10 insertions(+)
drivers/mtd/spi-nor/spi-nor-probe.c +7 -0
index 713968b..76c48b7 100644
@@ -9,6 +9,8 @@
 #include <spi.h>
 #include <spi_flash.h>
 
+#include <dm/device-internal.h>
+
 /*
  * TODO(sjg at chromium.org): This is an old-style function. We should remove
  * it when all SPI flash drivers use dm
@@ -24,6 +26,11 @@ spi_flash_t *spi_flash_probe(unsigned int bus, unsigned int cs,
 	return dev_get_uclass_priv(dev);
 }
 
+void spi_flash_free(spi_flash_t *flash)
+{
+	device_remove(flash->dev);
+}
+
 int spi_flash_probe_bus_cs(unsigned int busnum, unsigned int cs,
 			   unsigned int max_hz, unsigned int spi_mode,
 			   struct udevice **devp)
include/spi_flash.h +3 -0
index 0350767..5895d8b 100644
@@ -120,6 +120,9 @@ int spi_flash_probe_bus_cs(unsigned int busnum, unsigned int cs,
 spi_flash_t *spi_flash_probe(unsigned int bus, unsigned int cs,
 			     unsigned int max_hz, unsigned int spi_mode);
 
+/* Compatibility function - this is the old U-Boot API */
+void spi_flash_free(spi_flash_t *flash);
+
 #endif
 
 struct dm_spi_flash_ops {
Signature · 1 line
1.9.1
author
#11 lore raw

PATCH v7 12/87 mtd: spi-nor: m25p80: Add spi_nor support for non-dm

In reply to Jagan Teki

Like adding spi_nor support for dm-driven code in m25p80 add the same way for non-dm code as well.
- allocate spi_nor{}
- basic initilization
- install hooks
- call to spi-nor core, using spi_nor_scan
- register with mtd core

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 drivers/mtd/spi-nor/m25p80.c | 108 ++++++++++++++++++++++++++++++++++++++-----
 include/spi_flash.h          |  18 +++++++-
 2 files changed, 112 insertions(+), 14 deletions(-)
drivers/mtd/spi-nor/m25p80.c +96 -12
index 6a892d2..79293b2 100644
@@ -20,6 +20,9 @@
 struct m25p {
 	struct spi_slave	*spi;
 	struct spi_nor		spi_nor;
+#ifndef CONFIG_DM_MTD_SPI_NOR
+	struct mtd_info		mtd;
+#endif
 };
 
 static int spi_read_then_write(struct spi_slave *spi, const u8 *cmd,
@@ -188,16 +191,13 @@ static int m25p80_write(struct spi_nor *nor, const u8 *cmd, size_t cmd_len,
 	return ret;
 }
 
-static int m25p_probe(struct udevice *dev)
+static int m25p80_spi_nor(struct spi_nor *nor)
 {
-	struct spi_slave *spi = dev_get_parent_priv(dev);
-	struct mtd_info	*mtd = dev_get_uclass_priv(dev);
-	struct m25p *flash = dev_get_priv(dev);
-	struct spi_nor *nor;
+	struct mtd_info *mtd = nor->mtd;
+	struct m25p *flash = nor->priv;
+	struct spi_slave *spi = flash->spi;
 	int ret;
 
-	nor = &flash->spi_nor;
-
 	/* install hooks */
 	nor->read_mmap = m25p80_read_mmap;
 	nor->read = m25p80_read;
@@ -205,10 +205,6 @@ static int m25p_probe(struct udevice *dev)
 	nor->read_reg = m25p80_read_reg;
 	nor->write_reg = m25p80_write_reg;
 
-	nor->mtd = mtd;
-	nor->priv = flash;
-	flash->spi = spi;
-
 	/* claim spi bus */
 	ret = spi_claim_bus(spi);
 	if (ret) {
@@ -260,10 +256,33 @@ err_scan:
 	spi_release_bus(spi);
 err_mtd:
 	spi_free_slave(spi);
-	device_remove(dev);
 	return ret;
 }
 
+#ifdef CONFIG_DM_MTD_SPI_NOR
+static int m25p_probe(struct udevice *dev)
+{
+	struct spi_slave *spi = dev_get_parent_priv(dev);
+	struct mtd_info	*mtd = dev_get_uclass_priv(dev);
+	struct m25p *flash = dev_get_priv(dev);
+	struct spi_nor *nor;
+	int ret;
+
+	nor = &flash->spi_nor;
+
+	nor->mtd = mtd;
+	nor->priv = flash;
+	flash->spi = spi;
+
+	ret = m25p80_spi_nor(nor);
+	if (ret) {
+		device_remove(dev);
+		return ret;
+	}
+
+	return 0;
+}
+
 static const struct udevice_id m25p_ids[] = {
 	/*
 	 * Generic compatibility for SPI NOR that can be identified by the
@@ -280,3 +299,68 @@ U_BOOT_DRIVER(m25p80) = {
 	.probe		= m25p_probe,
 	.priv_auto_alloc_size = sizeof(struct m25p),
 };
+
+#else
+
+static struct mtd_info *m25p80_probe_tail(struct spi_slave *bus)
+{
+	struct m25p *flash;
+	struct spi_nor *nor;
+	int ret;
+
+	flash = calloc(1, sizeof(*flash));
+	if (!flash) {
+		debug("mp25p80: failed to allocate m25p\n");
+		return NULL;
+	}
+
+	nor = &flash->spi_nor;
+	nor->mtd = &flash->mtd;
+
+	nor->priv = flash;
+	flash->spi = bus;
+
+	ret = m25p80_spi_nor(nor);
+	if (ret) {
+		free(flash);
+		return NULL;
+	}
+
+	return nor->mtd;
+}
+
+struct mtd_info *spi_flash_probe(unsigned int busnum, unsigned int cs,
+				 unsigned int max_hz, unsigned int spi_mode)
+{
+	struct spi_slave *bus;
+
+	bus = spi_setup_slave(busnum, cs, max_hz, spi_mode);
+	if (!bus)
+		return NULL;
+	return m25p80_probe_tail(bus);
+}
+
+#ifdef CONFIG_OF_SPI_FLASH
+struct mtd_info *spi_flash_probe_fdt(const void *blob, int slave_node,
+				     int spi_node)
+{
+	struct spi_slave *bus;
+
+	bus = spi_setup_slave_fdt(blob, slave_node, spi_node);
+	if (!bus)
+		return NULL;
+	return m25p80_probe_tail(bus);
+}
+#endif
+
+void spi_flash_free(struct mtd_info *info)
+{
+	struct spi_nor *nor = info->priv;
+	struct m25p *flash = nor->priv;
+
+	del_mtd_device(info);
+	spi_free_slave(flash->spi);
+	free(flash);
+}
+
+#endif /* CONFIG_DM_MTD_SPI_NOR */
include/spi_flash.h +16 -2
index 5895d8b..e137ede 100644
@@ -108,10 +108,12 @@ struct spi_flash {
 #endif
 };
 
-#if defined(CONFIG_MTD_SPI_NOR) && defined(CONFIG_DM_MTD_SPI_NOR)
+#ifdef CONFIG_MTD_SPI_NOR
 
 typedef struct mtd_info spi_flash_t;
 
+#ifdef CONFIG_DM_MTD_SPI_NOR
+
 int spi_flash_probe_bus_cs(unsigned int busnum, unsigned int cs,
 			   unsigned int max_hz, unsigned int spi_mode,
 			   struct udevice **devp);
@@ -123,7 +125,19 @@ spi_flash_t *spi_flash_probe(unsigned int bus, unsigned int cs,
 /* Compatibility function - this is the old U-Boot API */
 void spi_flash_free(spi_flash_t *flash);
 
-#endif
+#else
+
+spi_flash_t *spi_flash_probe(unsigned int bus, unsigned int cs,
+			     unsigned int max_hz, unsigned int spi_mode);
+
+spi_flash_t *spi_flash_probe_fdt(const void *blob, int slave_node,
+				 int spi_node);
+
+void spi_flash_free(spi_flash_t *flash);
+
+#endif /* CONFIG_DM_MTD_SPI_NOR */
+
+#endif /* CONFIG_MTD_SPI_NOR */
 
 struct dm_spi_flash_ops {
 	int (*read)(struct udevice *dev, u32 offset, size_t len, void *buf);
Signature · 1 line
1.9.1
author
#12 lore raw

PATCH v7 13/87 sf: Rename erase_size to erasesize

In reply to Jagan Teki

erasesize name looks similar as the way mtd_info{} used so renamed erase_size to erasesize and more over the spi-flash will use mtd in future patches.

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 drivers/mtd/spi/sf_dataflash.c |  4 ++--
 drivers/mtd/spi/spi_flash.c    | 14 +++++++-------
 include/spi_flash.h            |  4 ++--
 3 files changed, 11 insertions(+), 11 deletions(-)
drivers/mtd/spi/sf_dataflash.c +2 -2
index b2a56da..0f66b99 100644
@@ -427,12 +427,12 @@ static int add_dataflash(struct udevice *dev, char *name, int nr_pages,
 	spi_flash->name = name;
 	spi_flash->page_size = pagesize;
 	spi_flash->size = nr_pages * pagesize;
-	spi_flash->erase_size = pagesize;
+	spi_flash->erasesize = pagesize;
 
 #ifndef CONFIG_SPL_BUILD
 	printf("SPI DataFlash: Detected %s with page size ", spi_flash->name);
 	print_size(spi_flash->page_size, ", erase size ");
-	print_size(spi_flash->erase_size, ", total ");
+	print_size(spi_flash->erasesize, ", total ");
 	print_size(spi_flash->size, "");
 	printf(", revision %c", revision);
 	puts("\n");
drivers/mtd/spi/spi_flash.c +7 -7
index 44d9e9b..dfadb77 100644
@@ -329,7 +329,7 @@ int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 offset, size_t len)
 	u8 cmd[SPI_FLASH_CMD_LEN];
 	int ret = -1;
 
-	erase_size = flash->erase_size;
+	erase_size = flash->erasesize;
 	if (offset % erase_size || len % erase_size) {
 		debug("SF: Erase offset/length not multiple of erase size\n");
 		return -1;
@@ -804,7 +804,7 @@ int stm_unlock(struct spi_flash *flash, u32 ofs, size_t len)
 		return ret;
 
 	/* Cannot unlock; would unlock larger region than requested */
-	if (stm_is_locked_sr(flash, ofs - flash->erase_size, flash->erase_size,
+	if (stm_is_locked_sr(flash, ofs - flash->erasesize, flash->erasesize,
 			     status_old))
 		return -EINVAL;
 	/*
@@ -1091,17 +1091,17 @@ int spi_flash_scan(struct spi_flash *flash)
 	/* Compute erase sector and command */
 	if (params->flags & SECT_4K) {
 		flash->erase_cmd = CMD_ERASE_4K;
-		flash->erase_size = 4096 << flash->shift;
+		flash->erasesize = 4096 << flash->shift;
 	} else if (params->flags & SECT_32K) {
 		flash->erase_cmd = CMD_ERASE_32K;
-		flash->erase_size = 32768 << flash->shift;
+		flash->erasesize = 32768 << flash->shift;
 	} else {
 		flash->erase_cmd = CMD_ERASE_64K;
-		flash->erase_size = flash->sector_size;
+		flash->erasesize = flash->sector_size;
 	}
 
 	/* Now erase size becomes valid sector size */
-	flash->sector_size = flash->erase_size;
+	flash->sector_size = flash->erasesize;
 
 	/* Look for the fastest read cmd */
 	cmd = fls(params->e_rd_cmd & spi->mode_rx);
@@ -1173,7 +1173,7 @@ int spi_flash_scan(struct spi_flash *flash)
 #ifndef CONFIG_SPL_BUILD
 	printf("SF: Detected %s with page size ", flash->name);
 	print_size(flash->page_size, ", erase size ");
-	print_size(flash->erase_size, ", total ");
+	print_size(flash->erasesize, ", total ");
 	print_size(flash->size, "");
 	if (flash->memory_map)
 		printf(", mapped at %p", flash->memory_map);
include/spi_flash.h +2 -2
index e137ede..4b92605 100644
@@ -40,7 +40,7 @@ struct spi_slave;
  * @size:		Total flash size
  * @page_size:		Write (page) size
  * @sector_size:	Sector size
- * @erase_size:		Erase size
+ * @erasesize:		Erase size
  * @bank_read_cmd:	Bank read cmd
  * @bank_write_cmd:	Bank write cmd
  * @bank_curr:		Current flash bank
@@ -73,7 +73,7 @@ struct spi_flash {
 	u32 size;
 	u32 page_size;
 	u32 sector_size;
-	u32 erase_size;
+	u32 erasesize;
 #ifdef CONFIG_SPI_FLASH_BAR
 	u8 bank_read_cmd;
 	u8 bank_write_cmd;
Signature · 1 line
1.9.1
author
#13 lore raw

PATCH v7 14/87 sf: Use erasesize instead of sector_size

In reply to Jagan Teki

For computing proper sector_size the below patch assigned erase_size which is a proper sector computation size, so this patch directly used erasesize instead of assignment.
"sf: Fix to compute proper sector_size" (sha1: c650ca7b4c160193791dc7a52381c71c6a29e871)

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 cmd/sf.c                    | 20 ++++++++++----------
 drivers/dfu/dfu_sf.c        |  8 ++++----
 drivers/mtd/spi/sf_mtd.c    |  2 +-
 drivers/mtd/spi/spi_flash.c |  3 ---
 4 files changed, 15 insertions(+), 18 deletions(-)
cmd/sf.c +10 -10
index 89ab41e..1e0dcb4 100644
@@ -53,8 +53,8 @@ static int sf_parse_len_arg(char *arg, ulong *len)
 	if (ep == arg || *ep != '\0')
 		return -1;
 
-	if (round_up_len && flash->sector_size > 0)
-		*len = ROUND(len_arg, flash->sector_size);
+	if (round_up_len && flash->erasesize > 0)
+		*len = ROUND(len_arg, flash->erasesize);
 	else
 		*len = len_arg;
 
@@ -171,10 +171,10 @@ static const char *spi_flash_update_block(struct spi_flash *flash, u32 offset,
 {
 	char *ptr = (char *)buf;
 
-	debug("offset=%#x, sector_size=%#x, len=%#zx\n",
-	      offset, flash->sector_size, len);
+	debug("offset=%#x, erasesize=%#x, len=%#zx\n",
+	      offset, flash->erasesize, len);
 	/* Read the entire sector so to allow for rewriting */
-	if (spi_flash_read(flash, offset, flash->sector_size, cmp_buf))
+	if (spi_flash_read(flash, offset, flash->erasesize, cmp_buf))
 		return "read";
 	/* Compare only what is meaningful (len) */
 	if (memcmp(cmp_buf, buf, len) == 0) {
@@ -184,15 +184,15 @@ static const char *spi_flash_update_block(struct spi_flash *flash, u32 offset,
 		return NULL;
 	}
 	/* Erase the entire sector */
-	if (spi_flash_erase(flash, offset, flash->sector_size))
+	if (spi_flash_erase(flash, offset, flash->erasesize))
 		return "erase";
 	/* If it's a partial sector, copy the data into the temp-buffer */
-	if (len != flash->sector_size) {
+	if (len != flash->erasesize) {
 		memcpy(cmp_buf, buf, len);
 		ptr = cmp_buf;
 	}
 	/* Write one complete sector */
-	if (spi_flash_write(flash, offset, flash->sector_size, ptr))
+	if (spi_flash_write(flash, offset, flash->erasesize, ptr))
 		return "write";
 
 	return NULL;
@@ -223,12 +223,12 @@ static int spi_flash_update(struct spi_flash *flash, u32 offset,
 
 	if (end - buf >= 200)
 		scale = (end - buf) / 100;
-	cmp_buf = memalign(ARCH_DMA_MINALIGN, flash->sector_size);
+	cmp_buf = memalign(ARCH_DMA_MINALIGN, flash->erasesize);
 	if (cmp_buf) {
 		ulong last_update = get_timer(0);
 
 		for (; buf < end && !err_oper; buf += todo, offset += todo) {
-			todo = min_t(size_t, end - buf, flash->sector_size);
+			todo = min_t(size_t, end - buf, flash->erasesize);
 			if (get_timer(last_update) > 100) {
 				printf("   \rUpdating, %zu%% %lu B/s",
 				       100 - (end - buf) / scale,
drivers/dfu/dfu_sf.c +4 -4
index 9702eee..13e7f92 100644
@@ -25,8 +25,8 @@ static int dfu_read_medium_sf(struct dfu_entity *dfu, u64 offset, void *buf,
 
 static u64 find_sector(struct dfu_entity *dfu, u64 start, u64 offset)
 {
-	return (lldiv((start + offset), dfu->data.sf.dev->sector_size)) *
-		dfu->data.sf.dev->sector_size;
+	return (lldiv((start + offset), dfu->data.sf.dev->erasesize)) *
+		dfu->data.sf.dev->erasesize;
 }
 
 static int dfu_write_medium_sf(struct dfu_entity *dfu,
@@ -36,7 +36,7 @@ static int dfu_write_medium_sf(struct dfu_entity *dfu,
 
 	ret = spi_flash_erase(dfu->data.sf.dev,
 			      find_sector(dfu, dfu->data.sf.start, offset),
-			      dfu->data.sf.dev->sector_size);
+			      dfu->data.sf.dev->erasesize);
 	if (ret)
 		return ret;
 
@@ -123,7 +123,7 @@ int dfu_fill_entity_sf(struct dfu_entity *dfu, char *devstr, char *s)
 		return -ENODEV;
 
 	dfu->dev_type = DFU_DEV_SF;
-	dfu->max_buf_size = dfu->data.sf.dev->sector_size;
+	dfu->max_buf_size = dfu->data.sf.dev->erasesize;
 
 	st = strsep(&s, " ");
 	if (!strcmp(st, "raw")) {
drivers/mtd/spi/sf_mtd.c +1 -1
index 0b9cb62..9a8302d 100644
@@ -93,7 +93,7 @@ int spi_flash_mtd_register(struct spi_flash *flash)
 
 	/* Only uniform flash devices for now */
 	sf_mtd_info.numeraseregions = 0;
-	sf_mtd_info.erasesize = flash->sector_size;
+	sf_mtd_info.erasesize = flash->erasesize;
 
 	return add_mtd_device(&sf_mtd_info);
 }
drivers/mtd/spi/spi_flash.c +0 -3
index dfadb77..4614c9c 100644
@@ -1100,9 +1100,6 @@ int spi_flash_scan(struct spi_flash *flash)
 		flash->erasesize = flash->sector_size;
 	}
 
-	/* Now erase size becomes valid sector size */
-	flash->sector_size = flash->erasesize;
-
 	/* Look for the fastest read cmd */
 	cmd = fls(params->e_rd_cmd & spi->mode_rx);
 	if (cmd) {
Signature · 1 line
1.9.1
author
#14 lore raw

PATCH v7 15/87 sf: Use uint64_t for flash->size

In reply to Jagan Teki

To sync with size in mtd_info{} this patch change data type of size to uint64_t

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 cmd/sf.c            | 4 ++--
 include/spi_flash.h | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)
cmd/sf.c +2 -2
index 1e0dcb4..0d0a02c 100644
@@ -280,7 +280,7 @@ static int do_spi_flash_read_write(int argc, char * const argv[])
 
 	/* Consistency checking */
 	if (offset + len > flash->size) {
-		printf("ERROR: attempting %s past flash size (%#x)\n",
+		printf("ERROR: attempting %s past flash size (%#llx)\n",
 		       argv[0], flash->size);
 		return 1;
 	}
@@ -336,7 +336,7 @@ static int do_spi_flash_erase(int argc, char * const argv[])
 
 	/* Consistency checking */
 	if (offset + size > flash->size) {
-		printf("ERROR: attempting %s past flash size (%#x)\n",
+		printf("ERROR: attempting %s past flash size (%#llx)\n",
 		       argv[0], flash->size);
 		return 1;
 	}
include/spi_flash.h +1 -1
index 4b92605..c7fd4f3 100644
@@ -70,7 +70,7 @@ struct spi_flash {
 	u8 shift;
 	u16 flags;
 
-	u32 size;
+	uint64_t size;
 	u32 page_size;
 	u32 sector_size;
 	u32 erasesize;
Signature · 1 line
1.9.1
author
#15 lore raw

PATCH v7 16/87 spi_flash: Use mtd_info operation for SPI-NOR

In reply to Jagan Teki

Since spi-nor is using mtd layer for flash operations this patch used mtd ops from user commands instead of legacy spi_flash{} ops.

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 include/spi_flash.h | 60 ++++++++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 48 insertions(+), 12 deletions(-)
include/spi_flash.h +48 -12
index c7fd4f3..43abec9 100644
@@ -12,6 +12,7 @@
 
 #include <dm.h>	/* Because we dereference struct udevice here */
 #include <linux/types.h>
+#include <linux/mtd/mtd.h>
 
 #ifndef CONFIG_SF_DEFAULT_SPEED
 # define CONFIG_SF_DEFAULT_SPEED	1000000
@@ -112,6 +113,39 @@ struct spi_flash {
 
 typedef struct mtd_info spi_flash_t;
 
+static inline int spi_flash_read(spi_flash_t *info, u32 offset,
+				 size_t len, void *buf)
+{
+	return mtd_read(info, offset, len, &len, (u_char *)buf);
+}
+
+static inline int spi_flash_write(spi_flash_t *info, u32 offset,
+				  size_t len, const void *buf)
+{
+	return mtd_write(info, offset, len, &len, (u_char *)buf);
+}
+
+static inline int spi_flash_erase(spi_flash_t *info, u32 offset, size_t len)
+{
+	struct erase_info instr;
+
+	instr.mtd = info;
+	instr.addr = offset;
+	instr.len = len;
+	instr.callback = 0;
+
+	return mtd_erase(info, &instr);
+}
+
+static inline int spi_flash_protect(spi_flash_t *info, u32 ofs,
+				    u32 len, bool prot)
+{
+	if (prot)
+		return mtd_lock(info, ofs, len);
+	else
+		return mtd_unlock(info, ofs, len);
+}
+
 #ifdef CONFIG_DM_MTD_SPI_NOR
 
 int spi_flash_probe_bus_cs(unsigned int busnum, unsigned int cs,
@@ -137,6 +171,20 @@ void spi_flash_free(spi_flash_t *flash);
 
 #endif /* CONFIG_DM_MTD_SPI_NOR */
 
+#else
+
+static inline int spi_flash_protect(struct spi_flash *flash, u32 ofs, u32 len,
+					bool prot)
+{
+	if (!flash->flash_lock || !flash->flash_unlock)
+		return -EOPNOTSUPP;
+
+	if (prot)
+		return flash->flash_lock(flash, ofs, len);
+	else
+		return flash->flash_unlock(flash, ofs, len);
+}
+
 #endif /* CONFIG_MTD_SPI_NOR */
 
 struct dm_spi_flash_ops {
@@ -266,18 +314,6 @@ static inline int spi_flash_erase(struct spi_flash *flash, u32 offset,
 }
 #endif
 
-static inline int spi_flash_protect(struct spi_flash *flash, u32 ofs, u32 len,
-					bool prot)
-{
-	if (!flash->flash_lock || !flash->flash_unlock)
-		return -EOPNOTSUPP;
-
-	if (prot)
-		return flash->flash_lock(flash, ofs, len);
-	else
-		return flash->flash_unlock(flash, ofs, len);
-}
-
 void spi_boot(void) __noreturn;
 void spi_spl_load_image(uint32_t offs, unsigned int size, void *vdst);
 
Signature · 1 line
1.9.1
author
#16 lore raw

PATCH v7 17/87 spi_flash: Use spi_flash_t instead of struct spi_flash

In reply to Jagan Teki

spi_flash_t same typedef alias name for spi_flash and mtd_info so which one will use based on the user config definition.

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 cmd/sf.c            | 10 +++++-----
 common/env_sf.c     |  2 +-
 include/spi_flash.h |  2 ++
 3 files changed, 8 insertions(+), 6 deletions(-)
cmd/sf.c +5 -5
index 0d0a02c..389244b 100644
@@ -19,7 +19,7 @@
 #include <asm/io.h>
 #include <dm/device-internal.h>
 
-static struct spi_flash *flash;
+static spi_flash_t *flash;
 
 /*
  * This function computes the length argument for the erase command.
@@ -89,7 +89,7 @@ static int do_spi_flash_probe(int argc, char * const argv[])
 	struct udevice *new, *bus_dev;
 	int ret;
 #else
-	struct spi_flash *new;
+	spi_flash_t *new;
 #endif
 
 	if (argc >= 2) {
@@ -166,7 +166,7 @@ static int do_spi_flash_probe(int argc, char * const argv[])
  * @param skipped	Count of skipped data (incremented by this function)
  * @return NULL if OK, else a string containing the stage which failed
  */
-static const char *spi_flash_update_block(struct spi_flash *flash, u32 offset,
+static const char *spi_flash_update_block(spi_flash_t *flash, u32 offset,
 		size_t len, const char *buf, char *cmp_buf, size_t *skipped)
 {
 	char *ptr = (char *)buf;
@@ -208,7 +208,7 @@ static const char *spi_flash_update_block(struct spi_flash *flash, u32 offset,
  * @param buf		buffer to write from
  * @return 0 if ok, 1 on error
  */
-static int spi_flash_update(struct spi_flash *flash, u32 offset,
+static int spi_flash_update(spi_flash_t *flash, u32 offset,
 		size_t len, const char *buf)
 {
 	const char *err_oper = NULL;
@@ -436,7 +436,7 @@ static void spi_test_next_stage(struct test_info *test)
  * @param vbuf		Verification buffer
  * @return 0 if ok, -1 on error
  */
-static int spi_flash_test(struct spi_flash *flash, uint8_t *buf, ulong len,
+static int spi_flash_test(spi_flash_t *flash, uint8_t *buf, ulong len,
 			   ulong offset, uint8_t *vbuf)
 {
 	struct test_info test;
common/env_sf.c +1 -1
index ec88792..b927fe8 100644
@@ -43,7 +43,7 @@ DECLARE_GLOBAL_DATA_PTR;
 
 char *env_name_spec = "SPI Flash";
 
-static struct spi_flash *env_flash;
+static spi_flash_t *env_flash;
 
 #if defined(CONFIG_ENV_OFFSET_REDUND)
 int saveenv(void)
include/spi_flash.h +2 -0
index 43abec9..f77a9c9 100644
@@ -173,6 +173,8 @@ void spi_flash_free(spi_flash_t *flash);
 
 #else
 
+typedef struct spi_flash spi_flash_t;
+
 static inline int spi_flash_protect(struct spi_flash *flash, u32 ofs, u32 len,
 					bool prot)
 {
Signature · 1 line
1.9.1
author
#17 lore raw

PATCH v7 18/87 mtd: spi-nor: Move spi_read_then_write to spi layer

In reply to Jagan Teki

Since spi_read_then_write is doing spi operations like setting up commands, tx and rx through spi_xfer, So it is meanfull to have this definition at spi layer and flash layer should use this whenever required.

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 drivers/mtd/spi-nor/m25p80.c | 25 -------------------------
 drivers/spi/spi-uclass.c     | 25 +++++++++++++++++++++++++
 drivers/spi/spi.c            | 31 +++++++++++++++++++++++++++++++
 include/spi.h                |  5 +++++
 4 files changed, 61 insertions(+), 25 deletions(-)
drivers/mtd/spi-nor/m25p80.c +0 -25
index 79293b2..6033b48 100644
@@ -25,31 +25,6 @@ struct m25p {
 #endif
 };
 
-static int spi_read_then_write(struct spi_slave *spi, const u8 *cmd,
-			       size_t cmd_len, const u8 *data_out,
-			       u8 *data_in, size_t data_len)
-{
-	unsigned long flags = SPI_XFER_BEGIN;
-	int ret;
-
-	if (data_len == 0)
-		flags |= SPI_XFER_END;
-
-	ret = spi_xfer(spi, cmd_len * 8, cmd, NULL, flags);
-	if (ret) {
-		debug("SF: Failed to send command (%zu bytes): %d\n",
-		      cmd_len, ret);
-	} else if (data_len != 0) {
-		ret = spi_xfer(spi, data_len * 8, data_out, data_in,
-					SPI_XFER_END);
-		if (ret)
-			debug("SF: Failed to transfer %zu bytes of data: %d\n",
-			      data_len, ret);
-	}
-
-	return ret;
-}
-
 static int m25p80_read_reg(struct spi_nor *nor, u8 cmd, u8 *val, int len)
 {
 	struct m25p *flash = nor->priv;
drivers/spi/spi-uclass.c +25 -0
index 5561f36..2cf2a52 100644
@@ -95,6 +95,31 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen,
 	return spi_get_ops(bus)->xfer(dev, bitlen, dout, din, flags);
 }
 
+int spi_read_then_write(struct spi_slave *spi, const u8 *cmd,
+			size_t cmd_len, const u8 *data_out,
+			u8 *data_in, size_t data_len)
+{
+	unsigned long flags = SPI_XFER_BEGIN;
+	int ret;
+
+	if (data_len == 0)
+		flags |= SPI_XFER_END;
+
+	ret = spi_xfer(spi, cmd_len * 8, cmd, NULL, flags);
+	if (ret) {
+		debug("spi: failed to send command (%zu bytes): %d\n",
+		      cmd_len, ret);
+	} else if (data_len != 0) {
+		ret = spi_xfer(spi, data_len * 8, data_out, data_in,
+			       SPI_XFER_END);
+		if (ret)
+			debug("spi: failed to transfer %zu bytes of data: %d\n",
+			      data_len, ret);
+	}
+
+	return ret;
+}
+
 static int spi_post_bind(struct udevice *dev)
 {
 	/* Scan the bus for devices */
drivers/spi/spi.c +31 -0
index 7d81fbd..aceaf9b 100644
@@ -39,6 +39,37 @@ void *spi_do_alloc_slave(int offset, int size, unsigned int bus,
 	return ptr;
 }
 
+int __weak spi_xfer(struct spi_slave *slave, unsigned int bitlen,
+		    const void *dout, void *din, unsigned long flags)
+{
+	return 0;
+}
+
+int spi_read_then_write(struct spi_slave *spi, const u8 *cmd,
+			size_t cmd_len, const u8 *data_out,
+			u8 *data_in, size_t data_len)
+{
+	unsigned long flags = SPI_XFER_BEGIN;
+	int ret;
+
+	if (data_len == 0)
+		flags |= SPI_XFER_END;
+
+	ret = spi_xfer(spi, cmd_len * 8, cmd, NULL, flags);
+	if (ret) {
+		debug("spi: failed to send command (%zu bytes): %d\n",
+		      cmd_len, ret);
+	} else if (data_len != 0) {
+		ret = spi_xfer(spi, data_len * 8, data_out, data_in,
+					SPI_XFER_END);
+		if (ret)
+			debug("spi: failed to transfer %zu bytes of data: %d\n",
+			      data_len, ret);
+	}
+
+	return ret;
+}
+
 #ifdef CONFIG_OF_SPI
 struct spi_slave *spi_base_setup_slave_fdt(const void *blob, int busnum,
 					   int node)
include/spi.h +5 -0
index 4b88d39..139292c 100644
@@ -265,6 +265,11 @@ int spi_set_wordlen(struct spi_slave *slave, unsigned int wordlen);
 int  spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout,
 		void *din, unsigned long flags);
 
+/* spi_write_then_read - SPI synchronous read followed by write */
+int spi_read_then_write(struct spi_slave *spi, const u8 *cmd,
+			size_t cmd_len, const u8 *data_out,
+			u8 *data_in, size_t data_len);
+
 /* Copy memory mapped data */
 void spi_flash_copy_mmap(void *data, void *offset, size_t len);
 
Signature · 1 line
1.9.1
author
#18 lore raw

PATCH v7 19/87 spi: Rename spi_read_then_write to spi_write_then_read

In reply to Jagan Teki

Since spi_read_then_write moved into spi layer, the meaning of data transfer is also change from read_then_write to write_then_read, this means first spi will write the opcode through and then read the respective buffer.

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 drivers/mtd/spi-nor/m25p80.c |  8 ++++----
 drivers/spi/spi-uclass.c     | 19 +++++++++----------
 drivers/spi/spi.c            | 19 +++++++++----------
 include/spi.h                | 23 +++++++++++++++++++----
 4 files changed, 41 insertions(+), 28 deletions(-)
drivers/mtd/spi-nor/m25p80.c +4 -4
index 6033b48..429d710 100644
@@ -40,7 +40,7 @@ static int m25p80_read_reg(struct spi_nor *nor, u8 cmd, u8 *val, int len)
 	if (nor->flags & SNOR_F_U_PAGE)
 		spi->flags |= SPI_XFER_U_PAGE;
 
-	ret = spi_read_then_write(spi, &cmd, 1, NULL, val, len);
+	ret = spi_write_then_read(spi, &cmd, 1, NULL, val, len);
 	if (ret < 0) {
 		debug("m25p80: error %d reading register %x\n", ret, cmd);
 		return ret;
@@ -66,7 +66,7 @@ static int m25p80_write_reg(struct spi_nor *nor, u8 cmd, u8 *buf, int len)
 	if (nor->flags & SNOR_F_U_PAGE)
 		spi->flags |= SPI_XFER_U_PAGE;
 
-	ret = spi_read_then_write(spi, &cmd, 1, buf, NULL, len);
+	ret = spi_write_then_read(spi, &cmd, 1, buf, NULL, len);
 	if (ret < 0) {
 		debug("m25p80: error %d writing register %x\n", ret, cmd);
 		return ret;
@@ -128,7 +128,7 @@ static int m25p80_read(struct spi_nor *nor, const u8 *cmd, size_t cmd_len,
 	if (nor->flags & SNOR_F_U_PAGE)
 		spi->flags |= SPI_XFER_U_PAGE;
 
-	ret = spi_read_then_write(spi, cmd, cmd_len, NULL, data, data_len);
+	ret = spi_write_then_read(spi, cmd, cmd_len, NULL, data, data_len);
 	if (ret < 0) {
 		debug("m25p80: error %d reading %x\n", ret, *cmd);
 		return ret;
@@ -155,7 +155,7 @@ static int m25p80_write(struct spi_nor *nor, const u8 *cmd, size_t cmd_len,
 	if (nor->flags & SNOR_F_U_PAGE)
 		spi->flags |= SPI_XFER_U_PAGE;
 
-	ret = spi_read_then_write(spi, cmd, cmd_len, data, NULL, data_len);
+	ret = spi_write_then_read(spi, cmd, cmd_len, data, NULL, data_len);
 	if (ret < 0) {
 		debug("m25p80: error %d writing %x\n", ret, *cmd);
 		return ret;
drivers/spi/spi-uclass.c +9 -10
index 2cf2a52..7ef2496 100644
@@ -95,26 +95,25 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen,
 	return spi_get_ops(bus)->xfer(dev, bitlen, dout, din, flags);
 }
 
-int spi_read_then_write(struct spi_slave *spi, const u8 *cmd,
-			size_t cmd_len, const u8 *data_out,
-			u8 *data_in, size_t data_len)
+int spi_write_then_read(struct spi_slave *slave, const u8 *opcode,
+			size_t n_opcode, const u8 *txbuf, u8 *rxbuf,
+			size_t n_buf)
 {
 	unsigned long flags = SPI_XFER_BEGIN;
 	int ret;
 
-	if (data_len == 0)
+	if (n_buf == 0)
 		flags |= SPI_XFER_END;
 
-	ret = spi_xfer(spi, cmd_len * 8, cmd, NULL, flags);
+	ret = spi_xfer(slave, n_opcode * 8, opcode, NULL, flags);
 	if (ret) {
 		debug("spi: failed to send command (%zu bytes): %d\n",
-		      cmd_len, ret);
-	} else if (data_len != 0) {
-		ret = spi_xfer(spi, data_len * 8, data_out, data_in,
-			       SPI_XFER_END);
+		      n_opcode, ret);
+	} else if (n_buf != 0) {
+		ret = spi_xfer(slave, n_buf * 8, txbuf, rxbuf, SPI_XFER_END);
 		if (ret)
 			debug("spi: failed to transfer %zu bytes of data: %d\n",
-			      data_len, ret);
+			      n_buf, ret);
 	}
 
 	return ret;
drivers/spi/spi.c +9 -10
index aceaf9b..80aba57 100644
@@ -45,26 +45,25 @@ int __weak spi_xfer(struct spi_slave *slave, unsigned int bitlen,
 	return 0;
 }
 
-int spi_read_then_write(struct spi_slave *spi, const u8 *cmd,
-			size_t cmd_len, const u8 *data_out,
-			u8 *data_in, size_t data_len)
+int spi_write_then_read(struct spi_slave *slave, const u8 *opcode,
+			size_t n_opcode, const u8 *txbuf, u8 *rxbuf,
+			size_t n_buf)
 {
 	unsigned long flags = SPI_XFER_BEGIN;
 	int ret;
 
-	if (data_len == 0)
+	if (n_buf == 0)
 		flags |= SPI_XFER_END;
 
-	ret = spi_xfer(spi, cmd_len * 8, cmd, NULL, flags);
+	ret = spi_xfer(slave, n_opcode * 8, opcode, NULL, flags);
 	if (ret) {
 		debug("spi: failed to send command (%zu bytes): %d\n",
-		      cmd_len, ret);
-	} else if (data_len != 0) {
-		ret = spi_xfer(spi, data_len * 8, data_out, data_in,
-					SPI_XFER_END);
+		      n_opcode, ret);
+	} else if (n_buf != 0) {
+		ret = spi_xfer(slave, n_buf * 8, txbuf, rxbuf, SPI_XFER_END);
 		if (ret)
 			debug("spi: failed to transfer %zu bytes of data: %d\n",
-			      data_len, ret);
+			      n_buf, ret);
 	}
 
 	return ret;
include/spi.h +19 -4
index 139292c..dd0b11b 100644
@@ -265,10 +265,25 @@ int spi_set_wordlen(struct spi_slave *slave, unsigned int wordlen);
 int  spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout,
 		void *din, unsigned long flags);
 
-/* spi_write_then_read - SPI synchronous read followed by write */
-int spi_read_then_write(struct spi_slave *spi, const u8 *cmd,
-			size_t cmd_len, const u8 *data_out,
-			u8 *data_in, size_t data_len);
+/**
+ * spi_write_then_read - SPI synchronous write followed by read
+ *
+ * This performs a half duplex transaction in which the first transaction
+ * is to send the opcode and if the length of buf is non-zero then it start
+ * the second transaction as tx or rx based on the need from respective slave.
+ *
+ * @slave:	slave device with which opcode/data will be exchanged
+ * @opcode:	opcode used for specific transfer
+ * @n_opcode:	size of opcode, in bytes
+ * @txbuf:	buffer into which data to be written
+ * @rxbuf:	buffer into which data will be read
+ * @n_buf:	size of buf (whether it's [tx|rx]buf), in bytes
+ *
+ * Returns: 0 on success, not 0 on failure
+ */
+int spi_write_then_read(struct spi_slave *slave, const u8 *opcode,
+			size_t n_opcode, const u8 *txbuf, u8 *rxbuf,
+			size_t n_buf);
 
 /* Copy memory mapped data */
 void spi_flash_copy_mmap(void *data, void *offset, size_t len);
Signature · 1 line
1.9.1
author
#19 lore raw

PATCH v7 20/87 mtd: spi-nor: Rename SPI_FLASH_BAR to SPI_NOR_BAR

In reply to Jagan Teki

Renamed SPI_FLASH_BAR to SPI_NOR_BAR

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 drivers/mtd/spi-nor/spi-nor.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)
drivers/mtd/spi-nor/spi-nor.c +7 -7
index b867ce9..130f7af 100644
@@ -181,7 +181,7 @@ static int spi_nor_wait_till_ready(struct spi_nor *nor, unsigned long timeout)
 	return -ETIMEDOUT;
 }
 
-#ifdef CONFIG_SPI_FLASH_BAR
+#ifdef CONFIG_SPI_NOR_BAR
 static int spi_nor_write_bar(struct spi_nor *nor, u32 offset)
 {
 	u8 bank_sel;
@@ -514,7 +514,7 @@ static int spi_nor_erase(struct mtd_info *mtd, struct erase_info *instr)
 		if (nor->dual > SNOR_DUAL_SINGLE)
 			spi_nor_dual(nor, &erase_addr);
 #endif
-#ifdef CONFIG_SPI_FLASH_BAR
+#ifdef CONFIG_SPI_NOR_BAR
 		ret = spi_nor_write_bar(nor, erase_addr);
 		if (ret < 0)
 			return ret;
@@ -577,7 +577,7 @@ static int spi_nor_write(struct mtd_info *mtd, loff_t offset, size_t len,
 		if (nor->dual > SNOR_DUAL_SINGLE)
 			spi_nor_dual(nor, &write_addr);
 #endif
-#ifdef CONFIG_SPI_FLASH_BAR
+#ifdef CONFIG_SPI_NOR_BAR
 		ret = spi_nor_write_bar(nor, write_addr);
 		if (ret < 0)
 			return ret;
@@ -647,7 +647,7 @@ static int spi_nor_read(struct mtd_info *mtd, loff_t from, size_t len,
 		if (nor->dual > SNOR_DUAL_SINGLE)
 			spi_nor_dual(nor, &read_addr);
 #endif
-#ifdef CONFIG_SPI_FLASH_BAR
+#ifdef CONFIG_SPI_NOR_BAR
 		ret = spi_nor_write_bar(nor, read_addr);
 		if (ret < 0)
 			return ret;
@@ -1103,7 +1103,7 @@ int spi_nor_scan(struct spi_nor *nor)
 	}
 
 	/* Configure the BAR - discover bank cmds and read current bank */
-#ifdef CONFIG_SPI_FLASH_BAR
+#ifdef CONFIG_SPI_NOR_BAR
 	ret = spi_nor_read_bar(nor, info);
 	if (ret < 0)
 		return ret;
@@ -1127,13 +1127,13 @@ int spi_nor_scan(struct spi_nor *nor)
 	puts("\n");
 #endif
 
-#ifndef CONFIG_SPI_FLASH_BAR
+#ifndef CONFIG_SPI_NOR_BAR
 	if (((nor->dual == SNOR_DUAL_SINGLE) &&
 	     (mtd->size > SNOR_16MB_BOUN)) ||
 	     ((nor->dual > SNOR_DUAL_SINGLE) &&
 	     (mtd->size > SNOR_16MB_BOUN << 1))) {
 		puts("spi-nor: Warning - Only lower 16MiB accessible,");
-		puts(" Full access #define CONFIG_SPI_FLASH_BAR\n");
+		puts(" Full access #define CONFIG_SPI_NOR_BAR\n");
 	}
 #endif
 
Signature · 1 line
1.9.1
author
#20 lore raw

PATCH v7 21/87 mtd: spi-nor: Add Kconfig entry for SPI_NOR_BAR

In reply to Jagan Teki

Added kconfig entry for SPI_NOR_BAR

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 drivers/mtd/spi-nor/Kconfig | 7 +++++++
 1 file changed, 7 insertions(+)
drivers/mtd/spi-nor/Kconfig +7 -0
index 342164d..dd62e24 100644
@@ -51,4 +51,11 @@ config MTD_SPI_NOR_USE_4K_SECTORS
 	  Please note that some tools/drivers/filesystems may not work with
 	  4096 B erase size (e.g. UBIFS requires 15 KiB as a minimum).
 
+config SPI_NOR_BAR
+	bool "SPI NOR Bank/Extended address register support"
+	help
+	  Enable the SPI NOR Bank/Extended address register support.
+	  Bank/Extended address registers are used to access the flash
+	  which has size > 16MiB in 3-byte addressing.
+
 endif # MTD_SPI_NOR
Signature · 1 line
1.9.1
author
#21 lore raw

PATCH v7 22/87 mtd: spi-nor: Copy spl files from drivers/mtd/spi

In reply to Jagan Teki

Copy spl files from drivers/mtd/spi to spi-nor,
more changes will added on future patches.

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 drivers/mtd/spi-nor/Makefile       |  5 +++
 drivers/mtd/spi-nor/fsl_espi_spl.c | 90 ++++++++++++++++++++++++++++++++++++++
 drivers/mtd/spi-nor/spi_spl_load.c | 90 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 185 insertions(+)
 create mode 100644 drivers/mtd/spi-nor/fsl_espi_spl.c
 create mode 100644 drivers/mtd/spi-nor/spi_spl_load.c
drivers/mtd/spi-nor/Makefile +5 -0
index 2f41630..4a854fa 100644
@@ -3,6 +3,11 @@
 #
 # SPDX-License-Identifier:	GPL-2.0+
 
+ifdef CONFIG_SPL_BUILD
+obj-$(CONFIG_SPL_SPI_LOAD)	+= spi_spl_load.o
+obj-$(CONFIG_SPL_SPI_BOOT)	+= fsl_espi_spl.o
+endif
+
 ifdef CONFIG_MTD_SPI_NOR
 obj-y += spi-nor.o
 obj-y += spi-nor-ids.o
drivers/mtd/spi-nor/fsl_espi_spl.c new file +90 -0

90 lines not on this page · raw message

drivers/mtd/spi-nor/spi_spl_load.c new file +90 -0

90 lines not on this page · raw message

Signature · 1 line
1.9.1
author
#22 lore raw

PATCH v7 23/87 mtd: spi-nor: spl: Follow ascending order of include headers

In reply to Jagan Teki

Use ascending order while including headers files.

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 drivers/mtd/spi-nor/fsl_espi_spl.c | 2 +-
 drivers/mtd/spi-nor/spi_spl_load.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
drivers/mtd/spi-nor/fsl_espi_spl.c +1 -1
index b915469..7c40245 100644
@@ -5,8 +5,8 @@
  */
 
 #include <common.h>
-#include <spi_flash.h>
 #include <malloc.h>
+#include <spi_flash.h>
 
 #define ESPI_BOOT_IMAGE_SIZE	0x48
 #define ESPI_BOOT_IMAGE_ADDR	0x50
drivers/mtd/spi-nor/spi_spl_load.c +1 -1
index ca56fe9..285b6da 100644
@@ -10,9 +10,9 @@
  */
 
 #include <common.h>
+#include <errno.h>
 #include <spi.h>
 #include <spi_flash.h>
-#include <errno.h>
 #include <spl.h>
 
 #ifdef CONFIG_SPL_OS_BOOT
Signature · 1 line
1.9.1
author
#23 lore raw

PATCH v7 24/87 mtd: spi-nor: fsl_espi_spl: Use mtd_info

In reply to Jagan Teki

Replace spi_flash{} with mtd_info{}

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 drivers/mtd/spi-nor/fsl_espi_spl.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/mtd/spi-nor/fsl_espi_spl.c +2 -2
index 7c40245..93b0b2e 100644
@@ -14,7 +14,7 @@
 
 void spi_spl_load_image(uint32_t offs, unsigned int size, void *vdst)
 {
-	struct spi_flash *flash;
+	spi_flash_t *flash;
 
 	flash = spi_flash_probe(CONFIG_ENV_SPI_BUS, CONFIG_ENV_SPI_CS,
 			CONFIG_ENV_SPI_MAX_HZ, CONFIG_ENV_SPI_MODE);
@@ -38,7 +38,7 @@ void spi_boot(void)
 #ifndef CONFIG_FSL_CORENET
 	unsigned char *buf = NULL;
 #endif
-	struct spi_flash *flash;
+	spi_flash_t *flash;
 
 	flash = spi_flash_probe(CONFIG_ENV_SPI_BUS, CONFIG_ENV_SPI_CS,
 			CONFIG_ENV_SPI_MAX_HZ, CONFIG_ENV_SPI_MODE);
Signature · 1 line
1.9.1
author
#24 lore raw

PATCH v7 25/87 mtd: spi-nor: fsl_espi_spl: Use writebufsize instead of page_size

In reply to Jagan Teki

Replace spi_flash{} with mtd_info{}

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc York Sun <[email protected]>
---
 drivers/mtd/spi-nor/fsl_espi_spl.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/mtd/spi-nor/fsl_espi_spl.c +3 -3
index 93b0b2e..581c346 100644
@@ -54,15 +54,15 @@ void spi_boot(void)
 	/*
 	* Load U-Boot image from SPI flash into RAM
 	*/
-	buf = malloc(flash->page_size);
+	buf = malloc(flash->writebufsize);
 	if (buf == NULL) {
 		puts("\nmalloc failed");
 		hang();
 	}
-	memset(buf, 0, flash->page_size);
+	memset(buf, 0, flash->writebufsize);
 
 	spi_flash_read(flash, CONFIG_CFG_DATA_SECTOR,
-		       flash->page_size, (void *)buf);
+		       flash->writebufsize, (void *)buf);
 	offset = *(u32 *)(buf + ESPI_BOOT_IMAGE_ADDR);
 	/* Skip spl code */
 	offset += CONFIG_SYS_SPI_FLASH_U_BOOT_OFFS;
Signature · 1 line
1.9.1
author
#25 lore raw

PATCH v7 26/87 mtd: spi-nor: spi_spl_load: Use mtd_info

In reply to Jagan Teki

Replace spi_flash{} with mtd_info{}

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 drivers/mtd/spi-nor/spi_spl_load.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
drivers/mtd/spi-nor/spi_spl_load.c +2 -3
index 285b6da..9f33826 100644
@@ -20,8 +20,7 @@
  * Load the kernel, check for a valid header we can parse, and if found load
  * the kernel and then device tree.
  */
-static int spi_load_image_os(struct spi_flash *flash,
-			     struct image_header *header)
+static int spi_load_image_os(spi_flash_t *flash, struct image_header *header)
 {
 	/* Read for a header, parse or error out. */
 	spi_flash_read(flash, CONFIG_SYS_SPI_KERNEL_OFFS, 0x40,
@@ -52,7 +51,7 @@ static int spi_load_image_os(struct spi_flash *flash,
 int spl_spi_load_image(void)
 {
 	int err = 0;
-	struct spi_flash *flash;
+	spi_flash_t *flash;
 	struct image_header *header;
 
 	/*
Signature · 1 line
1.9.1
author
#26 lore raw

PATCH v7 27/87 spl: Add CONFIG_SPL_SPI_NOR_SUPPORT

In reply to Jagan Teki

Add SPL support for SPI-NOR flash.

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 drivers/Makefile | 1 +
 1 file changed, 1 insertion(+)
drivers/Makefile +1 -0
index e7eab66..1d179b9 100644
@@ -18,6 +18,7 @@ obj-$(CONFIG_ARMADA_38X) += ddr/marvell/a38x/
 obj-$(CONFIG_ARMADA_XP) += ddr/marvell/axp/
 obj-$(CONFIG_ALTERA_SDRAM) += ddr/altera/
 obj-$(CONFIG_SPL_SERIAL_SUPPORT) += serial/
+obj-$(CONFIG_SPL_SPI_NOR_SUPPORT) += mtd/spi-nor/
 obj-$(CONFIG_SPL_SPI_FLASH_SUPPORT) += mtd/spi/
 obj-$(CONFIG_SPL_SPI_SUPPORT) += spi/
 obj-$(CONFIG_SPL_POWER_SUPPORT) += power/ power/pmic/
Signature · 1 line
1.9.1
author
#27 lore raw

PATCH v7 28/87 mtd: spi-nor: Add flash vendor Kconfig entries

In reply to Jagan Teki

Added flash vendor kconfig entries from drivers/mtd/spi

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 drivers/mtd/spi-nor/Kconfig | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)
drivers/mtd/spi-nor/Kconfig +40 -0
index dd62e24..a035fd3 100644
@@ -58,4 +58,44 @@ config SPI_NOR_BAR
 	  Bank/Extended address registers are used to access the flash
 	  which has size > 16MiB in 3-byte addressing.
 
+config SPI_FLASH_ATMEL
+	bool "Atmel SPI flash support"
+	help
+	  Add support for various Atmel SPI flash chips (AT45xxx and AT25xxx)
+
+config SPI_FLASH_EON
+	bool "EON SPI flash support"
+	help
+	  Add support for various EON SPI flash chips (EN25xxx)
+
+config SPI_FLASH_GIGADEVICE
+	bool "GigaDevice SPI flash support"
+	help
+	  Add support for various GigaDevice SPI flash chips (GD25xxx)
+
+config SPI_FLASH_MACRONIX
+	bool "Macronix SPI flash support"
+	help
+	  Add support for various Macronix SPI flash chips (MX25Lxxx)
+
+config SPI_FLASH_SPANSION
+	bool "Spansion SPI flash support"
+	help
+	  Add support for various Spansion SPI flash chips (S25FLxxx)
+
+config SPI_FLASH_STMICRO
+	bool "STMicro SPI flash support"
+	help
+	  Add support for various STMicro SPI flash chips (M25Pxxx and N25Qxxx)
+
+config SPI_FLASH_SST
+	bool "SST SPI flash support"
+	help
+	  Add support for various SST SPI flash chips (SST25xxx)
+
+config SPI_FLASH_WINBOND
+	bool "Winbond SPI flash support"
+	help
+	  Add support for various Winbond SPI flash chips (W25xxx)
+
 endif # MTD_SPI_NOR
Signature · 1 line
1.9.1
author
#28 lore raw

PATCH v7 29/87 arm: zynq: Kconfig: Select MTD uclass

In reply to Jagan Teki

Since SPI-NOR core relies on MTD uclass.

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 arch/arm/Kconfig | 1 +
 1 file changed, 1 insertion(+)
arch/arm/Kconfig +1 -0
index e5f57ef..1e92be0 100644
@@ -568,6 +568,7 @@ config ARCH_ZYNQ
 	select DM_MMC
 	select DM_SPI
 	select DM_SERIAL
+	select MTD
 	select DM_SPI_FLASH
 	select SPL_SEPARATE_BSS if SPL
 
Signature · 1 line
1.9.1
author
#29 lore raw

PATCH v7 30/87 arm: zynq: Kconfig: Drop DM_SPI_FLASH

In reply to Jagan Teki

Drop using legacy DM_SPI_FLASH.

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 arch/arm/Kconfig | 1 -
 1 file changed, 1 deletion(-)
arch/arm/Kconfig +0 -1
index 1e92be0..b22a04f 100644
@@ -569,7 +569,6 @@ config ARCH_ZYNQ
 	select DM_SPI
 	select DM_SERIAL
 	select MTD
-	select DM_SPI_FLASH
 	select SPL_SEPARATE_BSS if SPL
 
 config ARCH_ZYNQMP
Signature · 1 line
1.9.1
author
#30 lore raw

PATCH v7 31/87 mtd: spi-nor: Copy sf_dataflash

In reply to Jagan Teki

Copy sf_dataflash.c from drivers/mtd/spi to spi-nor, more changes will see on future patches.

Cc Bin Meng <[email protected]>
Cc Simon Glass <[email protected]>
Cc York Sun <[email protected]>
---
 drivers/mtd/spi-nor/sf_dataflash.c | 701 +++++++++++++++++++++++++++++++++++++
 1 file changed, 701 insertions(+)
 create mode 100644 drivers/mtd/spi-nor/sf_dataflash.c
drivers/mtd/spi-nor/sf_dataflash.c new file +701 -0
new file mode 100644
index 0000000..b2a56da
@@ -0,0 +1,701 @@
+/*
+ *
+ * Atmel DataFlash probing
+ *
+ * Copyright (C) 2004-2009, 2015 Freescale Semiconductor, Inc.
+ * Haikun Wang (haikun.wang at freescale.com)
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+*/
+#include <common.h>
+#include <dm.h>
+#include <errno.h>
+#include <fdtdec.h>
+#include <spi.h>
+#include <spi_flash.h>
+#include <div64.h>
+#include <linux/err.h>
+#include <linux/math64.h>
+
+#include "sf_internal.h"
+
+/* reads can bypass the buffers */
+#define OP_READ_CONTINUOUS	0xE8
+#define OP_READ_PAGE		0xD2
+
+/* group B requests can run even while status reports "busy" */
+#define OP_READ_STATUS		0xD7	/* group B */
+
+/* move data between host and buffer */
+#define OP_READ_BUFFER1		0xD4	/* group B */
+#define OP_READ_BUFFER2		0xD6	/* group B */
+#define OP_WRITE_BUFFER1	0x84	/* group B */
+#define OP_WRITE_BUFFER2	0x87	/* group B */
+
+/* erasing flash */
+#define OP_ERASE_PAGE		0x81
+#define OP_ERASE_BLOCK		0x50
+
+/* move data between buffer and flash */
+#define OP_TRANSFER_BUF1	0x53
+#define OP_TRANSFER_BUF2	0x55
+#define OP_MREAD_BUFFER1	0xD4
+#define OP_MREAD_BUFFER2	0xD6
+#define OP_MWERASE_BUFFER1	0x83
+#define OP_MWERASE_BUFFER2	0x86
+#define OP_MWRITE_BUFFER1	0x88	/* sector must be pre-erased */
+#define OP_MWRITE_BUFFER2	0x89	/* sector must be pre-erased */
+
+/* write to buffer, then write-erase to flash */
+#define OP_PROGRAM_VIA_BUF1	0x82
+#define OP_PROGRAM_VIA_BUF2	0x85
+
+/* compare buffer to flash */
+#define OP_COMPARE_BUF1		0x60
+#define OP_COMPARE_BUF2		0x61
+
+/* read flash to buffer, then write-erase to flash */
+#define OP_REWRITE_VIA_BUF1	0x58
+#define OP_REWRITE_VIA_BUF2	0x59
+
+/*
+ * newer chips report JEDEC manufacturer and device IDs; chip
+ * serial number and OTP bits; and per-sector writeprotect.
+ */
+#define OP_READ_ID		0x9F
+#define OP_READ_SECURITY	0x77
+#define OP_WRITE_SECURITY_REVC	0x9A
+#define OP_WRITE_SECURITY	0x9B	/* revision D */
+
+
+struct dataflash {
+	uint8_t			command[16];
+	unsigned short		page_offset;	/* offset in flash address */
+};
+
+/*
+ * Return the status of the DataFlash device.
+ */
+static inline int dataflash_status(struct spi_slave *spi)
+{
+	int ret;
+	u8 status;
+	/*
+	 * NOTE:  at45db321c over 25 MHz wants to write
+	 * a dummy byte after the opcode...
+	 */
+	ret = spi_flash_cmd(spi, OP_READ_STATUS, &status, 1);
+	return ret ? -EIO : status;
+}
+
+/*
+ * Poll the DataFlash device until it is READY.
+ * This usually takes 5-20 msec or so; more for sector erase.
+ * ready: return > 0
+ */
+static int dataflash_waitready(struct spi_slave *spi)
+{
+	int status;
+	int timeout = 2 * CONFIG_SYS_HZ;
+	int timebase;
+
+	timebase = get_timer(0);
+	do {
+		status = dataflash_status(spi);
+		if (status < 0)
+			status = 0;
+
+		if (status & (1 << 7))	/* RDY/nBSY */
+			return status;
+
+		mdelay(3);
+	} while (get_timer(timebase) < timeout);
+
+	return -ETIME;
+}
+
+/*
+ * Erase pages of flash.
+ */
+static int spi_dataflash_erase(struct udevice *dev, u32 offset, size_t len)
+{
+	struct dataflash	*dataflash;
+	struct spi_flash	*spi_flash;
+	struct spi_slave	*spi;
+	unsigned		blocksize;
+	uint8_t			*command;
+	uint32_t		rem;
+	int			status;
+
+	dataflash = dev_get_priv(dev);
+	spi_flash = dev_get_uclass_priv(dev);
+	spi = spi_flash->spi;
+
+	blocksize = spi_flash->page_size << 3;
+
+	memset(dataflash->command, 0 , sizeof(dataflash->command));
+	command = dataflash->command;
+
+	debug("%s: erase addr=0x%x len 0x%x\n", dev->name, offset, len);
+
+	div_u64_rem(len, spi_flash->page_size, &rem);
+	if (rem)
+		return -EINVAL;
+	div_u64_rem(offset, spi_flash->page_size, &rem);
+	if (rem)
+		return -EINVAL;
+
+	status = spi_claim_bus(spi);
+	if (status) {
+		debug("SPI DATAFLASH: unable to claim SPI bus\n");
+		return status;
+	}
+
+	while (len > 0) {
+		unsigned int	pageaddr;
+		int		do_block;
+		/*
+		 * Calculate flash page address; use block erase (for speed) if
+		 * we're at a block boundary and need to erase the whole block.
+		 */
+		pageaddr = div_u64(offset, spi_flash->page_size);
+		do_block = (pageaddr & 0x7) == 0 && len >= blocksize;
+		pageaddr = pageaddr << dataflash->page_offset;
+
+		command[0] = do_block ? OP_ERASE_BLOCK : OP_ERASE_PAGE;
+		command[1] = (uint8_t)(pageaddr >> 16);
+		command[2] = (uint8_t)(pageaddr >> 8);
+		command[3] = 0;
+
+		debug("%s ERASE %s: (%x) %x %x %x [%d]\n",
+		      dev->name, do_block ? "block" : "page",
+		      command[0], command[1], command[2], command[3],
+		      pageaddr);
+
+		status = spi_flash_cmd_write(spi, command, 4, NULL, 0);
+		if (status < 0) {
+			debug("%s: erase send command error!\n", dev->name);
+			return -EIO;
+		}
+
+		status = dataflash_waitready(spi);
+		if (status < 0) {
+			debug("%s: erase waitready error!\n", dev->name);
+			return status;
+		}
+
+		if (do_block) {
+			offset += blocksize;
+			len -= blocksize;
+		} else {
+			offset += spi_flash->page_size;
+			len -= spi_flash->page_size;
+		}
+	}
+
+	spi_release_bus(spi);
+
+	return 0;
+}
+
+/*
+ * Read from the DataFlash device.
+ *   offset : Start offset in flash device
+ *   len    : Amount to read
+ *   buf    : Buffer containing the data
+ */
+static int spi_dataflash_read(struct udevice *dev, u32 offset, size_t len,
+			      void *buf)
+{
+	struct dataflash	*dataflash;
+	struct spi_flash	*spi_flash;
+	struct spi_slave	*spi;
+	unsigned int		addr;
+	uint8_t			*command;
+	int			status;
+
+	dataflash = dev_get_priv(dev);
+	spi_flash = dev_get_uclass_priv(dev);
+	spi = spi_flash->spi;
+
+	memset(dataflash->command, 0 , sizeof(dataflash->command));
+	command = dataflash->command;
+
+	debug("%s: erase addr=0x%x len 0x%x\n", dev->name, offset, len);
+	debug("READ: (%x) %x %x %x\n",
+	      command[0], command[1], command[2], command[3]);
+
+	/* Calculate flash page/byte address */
+	addr = (((unsigned)offset / spi_flash->page_size)
+	       << dataflash->page_offset)
+	       + ((unsigned)offset % spi_flash->page_size);
+
+	status = spi_claim_bus(spi);
+	if (status) {
+		debug("SPI DATAFLASH: unable to claim SPI bus\n");
+		return status;
+	}
+
+	/*
+	 * Continuous read, max clock = f(car) which may be less than
+	 * the peak rate available.  Some chips support commands with
+	 * fewer "don't care" bytes.  Both buffers stay unchanged.
+	 */
+	command[0] = OP_READ_CONTINUOUS;
+	command[1] = (uint8_t)(addr >> 16);
+	command[2] = (uint8_t)(addr >> 8);
+	command[3] = (uint8_t)(addr >> 0);
+
+	/* plus 4 "don't care" bytes, command len: 4 + 4 "don't care" bytes */
+	status = spi_flash_cmd_read(spi, command, 8, buf, len);
+
+	spi_release_bus(spi);
+
+	return status;
+}
+
+/*
+ * Write to the DataFlash device.
+ *   offset     : Start offset in flash device
+ *   len    : Amount to write
+ *   buf    : Buffer containing the data
+ */
+int spi_dataflash_write(struct udevice *dev, u32 offset, size_t len,
+			const void *buf)
+{
+	struct dataflash	*dataflash;
+	struct spi_flash	*spi_flash;
+	struct spi_slave	*spi;
+	uint8_t			*command;
+	unsigned int		pageaddr, addr, to, writelen;
+	size_t			remaining = len;
+	u_char			*writebuf = (u_char *)buf;
+	int			status = -EINVAL;
+
+	dataflash = dev_get_priv(dev);
+	spi_flash = dev_get_uclass_priv(dev);
+	spi = spi_flash->spi;
+
+	memset(dataflash->command, 0 , sizeof(dataflash->command));
+	command = dataflash->command;
+
+	debug("%s: write 0x%x..0x%x\n", dev->name, offset, (offset + len));
+
+	pageaddr = ((unsigned)offset / spi_flash->page_size);
+	to = ((unsigned)offset % spi_flash->page_size);
+	if (to + len > spi_flash->page_size)
+		writelen = spi_flash->page_size - to;
+	else
+		writelen = len;
+
+	status = spi_claim_bus(spi);
+	if (status) {
+		debug("SPI DATAFLASH: unable to claim SPI bus\n");
+		return status;
+	}
+
+	while (remaining > 0) {
+		debug("write @ %d:%d len=%d\n", pageaddr, to, writelen);
+
+		/*
+		 * REVISIT:
+		 * (a) each page in a sector must be rewritten at least
+		 *     once every 10K sibling erase/program operations.
+		 * (b) for pages that are already erased, we could
+		 *     use WRITE+MWRITE not PROGRAM for ~30% speedup.
+		 * (c) WRITE to buffer could be done while waiting for
+		 *     a previous MWRITE/MWERASE to complete ...
+		 * (d) error handling here seems to be mostly missing.
+		 *
+		 * Two persistent bits per page, plus a per-sector counter,
+		 * could support (a) and (b) ... we might consider using
+		 * the second half of sector zero, which is just one block,
+		 * to track that state.  (On AT91, that sector should also
+		 * support boot-from-DataFlash.)
+		 */
+
+		addr = pageaddr << dataflash->page_offset;
+
+		/* (1) Maybe transfer partial page to Buffer1 */
+		if (writelen != spi_flash->page_size) {
+			command[0] = OP_TRANSFER_BUF1;
+			command[1] = (addr & 0x00FF0000) >> 16;
+			command[2] = (addr & 0x0000FF00) >> 8;
+			command[3] = 0;
+
+			debug("TRANSFER: (%x) %x %x %x\n",
+			      command[0], command[1], command[2], command[3]);
+
+			status = spi_flash_cmd_write(spi, command, 4, NULL, 0);
+			if (status < 0) {
+				debug("%s: write(<pagesize) command error!\n",
+				      dev->name);
+				return -EIO;
+			}
+
+			status = dataflash_waitready(spi);
+			if (status < 0) {
+				debug("%s: write(<pagesize) waitready error!\n",
+				      dev->name);
+				return status;
+			}
+		}
+
+		/* (2) Program full page via Buffer1 */
+		addr += to;
+		command[0] = OP_PROGRAM_VIA_BUF1;
+		command[1] = (addr & 0x00FF0000) >> 16;
+		command[2] = (addr & 0x0000FF00) >> 8;
+		command[3] = (addr & 0x000000FF);
+
+		debug("PROGRAM: (%x) %x %x %x\n",
+		      command[0], command[1], command[2], command[3]);
+
+		status = spi_flash_cmd_write(spi, command,
+					     4, writebuf, writelen);
+		if (status < 0) {
+			debug("%s: write send command error!\n", dev->name);
+			return -EIO;
+		}
+
+		status = dataflash_waitready(spi);
+		if (status < 0) {
+			debug("%s: write waitready error!\n", dev->name);
+			return status;
+		}
+
+#ifdef CONFIG_SPI_DATAFLASH_WRITE_VERIFY
+		/* (3) Compare to Buffer1 */
+		addr = pageaddr << dataflash->page_offset;
+		command[0] = OP_COMPARE_BUF1;
+		command[1] = (addr & 0x00FF0000) >> 16;
+		command[2] = (addr & 0x0000FF00) >> 8;
+		command[3] = 0;
+
+		debug("COMPARE: (%x) %x %x %x\n",
+		      command[0], command[1], command[2], command[3]);
+
+		status = spi_flash_cmd_write(spi, command,
+					     4, writebuf, writelen);
+		if (status < 0) {
+			debug("%s: write(compare) send command error!\n",
+			      dev->name);
+			return -EIO;
+		}
+
+		status = dataflash_waitready(spi);
+
+		/* Check result of the compare operation */
+		if (status & (1 << 6)) {
+			printf("SPI DataFlash: write compare page %u, err %d\n",
+			       pageaddr, status);
+			remaining = 0;
+			status = -EIO;
+			break;
+		} else {
+			status = 0;
+		}
+
+#endif	/* CONFIG_SPI_DATAFLASH_WRITE_VERIFY */
+		remaining = remaining - writelen;
+		pageaddr++;
+		to = 0;
+		writebuf += writelen;
+
+		if (remaining > spi_flash->page_size)
+			writelen = spi_flash->page_size;
+		else
+			writelen = remaining;
+	}
+
+	spi_release_bus(spi);
+
+	return 0;
+}
+
+static int add_dataflash(struct udevice *dev, char *name, int nr_pages,
+			     int pagesize, int pageoffset, char revision)
+{
+	struct spi_flash *spi_flash;
+	struct dataflash *dataflash;
+
+	dataflash = dev_get_priv(dev);
+	spi_flash = dev_get_uclass_priv(dev);
+
+	dataflash->page_offset = pageoffset;
+
+	spi_flash->name = name;
+	spi_flash->page_size = pagesize;
+	spi_flash->size = nr_pages * pagesize;
+	spi_flash->erase_size = pagesize;
+
+#ifndef CONFIG_SPL_BUILD
+	printf("SPI DataFlash: Detected %s with page size ", spi_flash->name);
+	print_size(spi_flash->page_size, ", erase size ");
+	print_size(spi_flash->erase_size, ", total ");
+	print_size(spi_flash->size, "");
+	printf(", revision %c", revision);
+	puts("\n");
+#endif
+
+	return 0;
+}
+
+struct flash_info {
+	char		*name;
+
+	/*
+	 * JEDEC id has a high byte of zero plus three data bytes:
+	 * the manufacturer id, then a two byte device id.
+	 */
+	uint32_t	jedec_id;
+
+	/* The size listed here is what works with OP_ERASE_PAGE. */
+	unsigned	nr_pages;
+	uint16_t	pagesize;
+	uint16_t	pageoffset;
+
+	uint16_t	flags;
+#define SUP_POW2PS	0x0002		/* supports 2^N byte pages */
+#define IS_POW2PS	0x0001		/* uses 2^N byte pages */
+};
+
+static struct flash_info dataflash_data[] = {
+	/*
+	 * NOTE:  chips with SUP_POW2PS (rev D and up) need two entries,
+	 * one with IS_POW2PS and the other without.  The entry with the
+	 * non-2^N byte page size can't name exact chip revisions without
+	 * losing backwards compatibility for cmdlinepart.
+	 *
+	 * Those two entries have different name spelling format in order to
+	 * show their difference obviously.
+	 * The upper case refer to the chip isn't in normal 2^N bytes page-size
+	 * mode.
+	 * The lower case refer to the chip is in normal 2^N bytes page-size
+	 * mode.
+	 *
+	 * These newer chips also support 128-byte security registers (with
+	 * 64 bytes one-time-programmable) and software write-protection.
+	 */
+	{ "AT45DB011B",  0x1f2200, 512, 264, 9, SUP_POW2PS},
+	{ "at45db011d",  0x1f2200, 512, 256, 8, SUP_POW2PS | IS_POW2PS},
+
+	{ "AT45DB021B",  0x1f2300, 1024, 264, 9, SUP_POW2PS},
+	{ "at45db021d",  0x1f2300, 1024, 256, 8, SUP_POW2PS | IS_POW2PS},
+
+	{ "AT45DB041x",  0x1f2400, 2048, 264, 9, SUP_POW2PS},
+	{ "at45db041d",  0x1f2400, 2048, 256, 8, SUP_POW2PS | IS_POW2PS},
+
+	{ "AT45DB081B",  0x1f2500, 4096, 264, 9, SUP_POW2PS},
+	{ "at45db081d",  0x1f2500, 4096, 256, 8, SUP_POW2PS | IS_POW2PS},
+
+	{ "AT45DB161x",  0x1f2600, 4096, 528, 10, SUP_POW2PS},
+	{ "at45db161d",  0x1f2600, 4096, 512, 9, SUP_POW2PS | IS_POW2PS},
+
+	{ "AT45DB321x",  0x1f2700, 8192, 528, 10, 0},		/* rev C */
+
+	{ "AT45DB321x",  0x1f2701, 8192, 528, 10, SUP_POW2PS},
+	{ "at45db321d",  0x1f2701, 8192, 512, 9, SUP_POW2PS | IS_POW2PS},
+
+	{ "AT45DB642x",  0x1f2800, 8192, 1056, 11, SUP_POW2PS},
+	{ "at45db642d",  0x1f2800, 8192, 1024, 10, SUP_POW2PS | IS_POW2PS},
+};
+
+static struct flash_info *jedec_probe(struct spi_slave *spi, u8 *id)
+{
+	int			tmp;
+	uint32_t		jedec;
+	struct flash_info	*info;
+	int status;
+
+	/*
+	 * JEDEC also defines an optional "extended device information"
+	 * string for after vendor-specific data, after the three bytes
+	 * we use here.  Supporting some chips might require using it.
+	 *
+	 * If the vendor ID isn't Atmel's (0x1f), assume this call failed.
+	 * That's not an error; only rev C and newer chips handle it, and
+	 * only Atmel sells these chips.
+	 */
+	if (id[0] != 0x1f)
+		return NULL;
+
+	jedec = id[0];
+	jedec = jedec << 8;
+	jedec |= id[1];
+	jedec = jedec << 8;
+	jedec |= id[2];
+
+	for (tmp = 0, info = dataflash_data;
+			tmp < ARRAY_SIZE(dataflash_data);
+			tmp++, info++) {
+		if (info->jedec_id == jedec) {
+			if (info->flags & SUP_POW2PS) {
+				status = dataflash_status(spi);
+				if (status < 0) {
+					debug("SPI DataFlash: status error %d\n",
+					      status);
+					return NULL;
+				}
+				if (status & 0x1) {
+					if (info->flags & IS_POW2PS)
+						return info;
+				} else {
+					if (!(info->flags & IS_POW2PS))
+						return info;
+				}
+			} else {
+				return info;
+			}
+		}
+	}
+
+	/*
+	 * Treat other chips as errors ... we won't know the right page
+	 * size (it might be binary) even when we can tell which density
+	 * class is involved (legacy chip id scheme).
+	 */
+	printf("SPI DataFlash: Unsupported flash IDs: ");
+	printf("manuf %02x, jedec %04x, ext_jedec %04x\n",
+	       id[0], jedec, id[3] << 8 | id[4]);
+	return NULL;
+}
+
+/*
+ * Detect and initialize DataFlash device, using JEDEC IDs on newer chips
+ * or else the ID code embedded in the status bits:
+ *
+ *   Device      Density         ID code          #Pages PageSize  Offset
+ *   AT45DB011B  1Mbit   (128K)  xx0011xx (0x0c)    512    264      9
+ *   AT45DB021B  2Mbit   (256K)  xx0101xx (0x14)   1024    264      9
+ *   AT45DB041B  4Mbit   (512K)  xx0111xx (0x1c)   2048    264      9
+ *   AT45DB081B  8Mbit   (1M)    xx1001xx (0x24)   4096    264      9
+ *   AT45DB0161B 16Mbit  (2M)    xx1011xx (0x2c)   4096    528     10
+ *   AT45DB0321B 32Mbit  (4M)    xx1101xx (0x34)   8192    528     10
+ *   AT45DB0642  64Mbit  (8M)    xx111xxx (0x3c)   8192   1056     11
+ *   AT45DB1282  128Mbit (16M)   xx0100xx (0x10)  16384   1056     11
+ */
+static int spi_dataflash_probe(struct udevice *dev)
+{
+	struct spi_slave *spi = dev_get_parent_priv(dev);
+	struct spi_flash *spi_flash;
+	struct flash_info *info;
+	u8 idcode[5];
+	int ret, status = 0;
+
+	spi_flash = dev_get_uclass_priv(dev);
+	spi_flash->dev = dev;
+
+	ret = spi_claim_bus(spi);
+	if (ret)
+		return ret;
+
+	ret = spi_flash_cmd(spi, CMD_READ_ID, idcode, sizeof(idcode));
+	if (ret) {
+		printf("SPI DataFlash: Failed to get idcodes\n");
+		goto err_read_cmd;
+	}
+
+	/*
+	 * Try to detect dataflash by JEDEC ID.
+	 * If it succeeds we know we have either a C or D part.
+	 * D will support power of 2 pagesize option.
+	 * Both support the security register, though with different
+	 * write procedures.
+	 */
+	info = jedec_probe(spi, idcode);
+	if (info != NULL)
+		add_dataflash(dev, info->name, info->nr_pages,
+			      info->pagesize, info->pageoffset,
+			      (info->flags & SUP_POW2PS) ? 'd' : 'c');
+	else {
+		/*
+		* Older chips support only legacy commands, identifing
+		* capacity using bits in the status byte.
+		*/
+		status = dataflash_status(spi);
+		if (status <= 0 || status == 0xff) {
+			printf("SPI DataFlash: read status error %d\n", status);
+			if (status == 0 || status == 0xff)
+				status = -ENODEV;
+			goto err_read_cmd;
+		}
+		/*
+		* if there's a device there, assume it's dataflash.
+		* board setup should have set spi->max_speed_max to
+		* match f(car) for continuous reads, mode 0 or 3.
+		*/
+		switch (status & 0x3c) {
+		case 0x0c:	/* 0 0 1 1 x x */
+			status = add_dataflash(dev, "AT45DB011B",
+					       512, 264, 9, 0);
+			break;
+		case 0x14:	/* 0 1 0 1 x x */
+			status = add_dataflash(dev, "AT45DB021B",
+					       1024, 264, 9, 0);
+			break;
+		case 0x1c:	/* 0 1 1 1 x x */
+			status = add_dataflash(dev, "AT45DB041x",
+					       2048, 264, 9, 0);
+			break;
+		case 0x24:	/* 1 0 0 1 x x */
+			status = add_dataflash(dev, "AT45DB081B",
+					       4096, 264, 9, 0);
+			break;
+		case 0x2c:	/* 1 0 1 1 x x */
+			status = add_dataflash(dev, "AT45DB161x",
+					       4096, 528, 10, 0);
+			break;
+		case 0x34:	/* 1 1 0 1 x x */
+			status = add_dataflash(dev, "AT45DB321x",
+					       8192, 528, 10, 0);
+			break;
+		case 0x38:	/* 1 1 1 x x x */
+		case 0x3c:
+			status = add_dataflash(dev, "AT45DB642x",
+					       8192, 1056, 11, 0);
+			break;
+		/* obsolete AT45DB1282 not (yet?) supported */
+		default:
+			dev_info(&spi->dev, "unsupported device (%x)\n",
+				 status & 0x3c);
+			status = -ENODEV;
+			goto err_read_cmd;
+		}
+	}
+
+	/* Assign spi data */
+	spi_flash->spi = spi;
+	spi_flash->memory_map = spi->memory_map;
+	spi_flash->dual_flash = spi->option;
+
+	spi_release_bus(spi);
+
+	return 0;
+
+err_read_cmd:
+	spi_release_bus(spi);
+
+	return status;
+}
+
+static const struct dm_spi_flash_ops spi_dataflash_ops = {
+	.read = spi_dataflash_read,
+	.write = spi_dataflash_write,
+	.erase = spi_dataflash_erase,
+};
+
+static const struct udevice_id spi_dataflash_ids[] = {
+	{ .compatible = "atmel,at45", },
+	{ .compatible = "atmel,dataflash", },
+	{ }
+};
+
+U_BOOT_DRIVER(spi_dataflash) = {
+	.name		= "spi_dataflash",
+	.id		= UCLASS_SPI_FLASH,
+	.of_match	= spi_dataflash_ids,
+	.probe		= spi_dataflash_probe,
+	.priv_auto_alloc_size = sizeof(struct dataflash),
+	.ops		= &spi_dataflash_ops,
+};
Signature · 1 line
1.9.1
author
#31 lore raw

PATCH v7 32/87 mtd: dataflash: Remove unneeded spi data

In reply to Jagan Teki

dataflash doesn't require options, memory_map from spi.

Cc Bin Meng <[email protected]>
Cc Simon Glass <[email protected]>
Cc York Sun <[email protected]>
---
 drivers/mtd/spi-nor/sf_dataflash.c | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)
drivers/mtd/spi-nor/sf_dataflash.c +1 -5
index b2a56da..6a9dfef 100644
@@ -584,6 +584,7 @@ static int spi_dataflash_probe(struct udevice *dev)
 	int ret, status = 0;
 
 	spi_flash = dev_get_uclass_priv(dev);
+	spi_flash->spi = spi;
 	spi_flash->dev = dev;
 
 	ret = spi_claim_bus(spi);
@@ -664,11 +665,6 @@ static int spi_dataflash_probe(struct udevice *dev)
 		}
 	}
 
-	/* Assign spi data */
-	spi_flash->spi = spi;
-	spi_flash->memory_map = spi->memory_map;
-	spi_flash->dual_flash = spi->option;
-
 	spi_release_bus(spi);
 
 	return 0;
Signature · 1 line
1.9.1
author
#32 lore raw

PATCH v7 33/87 mtd: dataflash: Move flash id detection into jedec_probe

In reply to Jagan Teki

Flash id detection should be the first step to enumerate the connected flash on the board, once ie done checking with respective id codes locally in the driver all this should be part of jedec_probe instead of id detection and validated through flash_info{} table separatly.

Cc Bin Meng <[email protected]>
Cc Simon Glass <[email protected]>
Cc York Sun <[email protected]>
---
 drivers/mtd/spi-nor/sf_dataflash.c | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)
drivers/mtd/spi-nor/sf_dataflash.c +10 -9
index 6a9dfef..7c6c8d2 100644
@@ -501,9 +501,10 @@ static struct flash_info dataflash_data[] = {
 	{ "at45db642d",  0x1f2800, 8192, 1024, 10, SUP_POW2PS | IS_POW2PS},
 };
 
-static struct flash_info *jedec_probe(struct spi_slave *spi, u8 *id)
+static struct flash_info *jedec_probe(struct spi_slave *spi)
 {
 	int			tmp;
+	uint8_t			id[5];
 	uint32_t		jedec;
 	struct flash_info	*info;
 	int status;
@@ -517,6 +518,11 @@ static struct flash_info *jedec_probe(struct spi_slave *spi, u8 *id)
 	 * That's not an error; only rev C and newer chips handle it, and
 	 * only Atmel sells these chips.
 	 */
+	tmp = spi_flash_cmd(spi, CMD_READ_ID, id, sizeof(id));
+	if (tmp < 0) {
+		printf("dataflash: error %d reading JEDEC ID\n", tmp);
+		return ERR_PTR(tmp);
+	}
 	if (id[0] != 0x1f)
 		return NULL;
 
@@ -580,7 +586,6 @@ static int spi_dataflash_probe(struct udevice *dev)
 	struct spi_slave *spi = dev_get_parent_priv(dev);
 	struct spi_flash *spi_flash;
 	struct flash_info *info;
-	u8 idcode[5];
 	int ret, status = 0;
 
 	spi_flash = dev_get_uclass_priv(dev);
@@ -591,12 +596,6 @@ static int spi_dataflash_probe(struct udevice *dev)
 	if (ret)
 		return ret;
 
-	ret = spi_flash_cmd(spi, CMD_READ_ID, idcode, sizeof(idcode));
-	if (ret) {
-		printf("SPI DataFlash: Failed to get idcodes\n");
-		goto err_read_cmd;
-	}
-
 	/*
 	 * Try to detect dataflash by JEDEC ID.
 	 * If it succeeds we know we have either a C or D part.
@@ -604,7 +603,9 @@ static int spi_dataflash_probe(struct udevice *dev)
 	 * Both support the security register, though with different
 	 * write procedures.
 	 */
-	info = jedec_probe(spi, idcode);
+	info = jedec_probe(spi);
+	if (IS_ERR(info))
+		return PTR_ERR(info);
 	if (info != NULL)
 		add_dataflash(dev, info->name, info->nr_pages,
 			      info->pagesize, info->pageoffset,
Signature · 1 line
1.9.1
author
#33 lore raw

PATCH v7 34/87 mtd: dataflash: Fix add_dataflash return logic

In reply to Jagan Teki

This patch fixed the add_dataflash return logic,
so-that it can handle both jedec and older chips
same as Linux.

Cc Bin Meng <[email protected]>
Cc Simon Glass <[email protected]>
Cc York Sun <[email protected]>
---
 drivers/mtd/spi-nor/sf_dataflash.c | 127 ++++++++++++++++++-------------------
 1 file changed, 61 insertions(+), 66 deletions(-)
drivers/mtd/spi-nor/sf_dataflash.c +61 -66
index 7c6c8d2..b7e2a83 100644
@@ -586,15 +586,15 @@ static int spi_dataflash_probe(struct udevice *dev)
 	struct spi_slave *spi = dev_get_parent_priv(dev);
 	struct spi_flash *spi_flash;
 	struct flash_info *info;
-	int ret, status = 0;
+	int status;
 
 	spi_flash = dev_get_uclass_priv(dev);
 	spi_flash->spi = spi;
 	spi_flash->dev = dev;
 
-	ret = spi_claim_bus(spi);
-	if (ret)
-		return ret;
+	status = spi_claim_bus(spi);
+	if (status)
+		return status;
 
 	/*
 	 * Try to detect dataflash by JEDEC ID.
@@ -605,74 +605,69 @@ static int spi_dataflash_probe(struct udevice *dev)
 	 */
 	info = jedec_probe(spi);
 	if (IS_ERR(info))
-		return PTR_ERR(info);
-	if (info != NULL)
-		add_dataflash(dev, info->name, info->nr_pages,
-			      info->pagesize, info->pageoffset,
-			      (info->flags & SUP_POW2PS) ? 'd' : 'c');
-	else {
-		/*
-		* Older chips support only legacy commands, identifing
-		* capacity using bits in the status byte.
-		*/
-		status = dataflash_status(spi);
-		if (status <= 0 || status == 0xff) {
-			printf("SPI DataFlash: read status error %d\n", status);
-			if (status == 0 || status == 0xff)
-				status = -ENODEV;
-			goto err_read_cmd;
-		}
-		/*
-		* if there's a device there, assume it's dataflash.
-		* board setup should have set spi->max_speed_max to
-		* match f(car) for continuous reads, mode 0 or 3.
-		*/
-		switch (status & 0x3c) {
-		case 0x0c:	/* 0 0 1 1 x x */
-			status = add_dataflash(dev, "AT45DB011B",
-					       512, 264, 9, 0);
-			break;
-		case 0x14:	/* 0 1 0 1 x x */
-			status = add_dataflash(dev, "AT45DB021B",
-					       1024, 264, 9, 0);
-			break;
-		case 0x1c:	/* 0 1 1 1 x x */
-			status = add_dataflash(dev, "AT45DB041x",
-					       2048, 264, 9, 0);
-			break;
-		case 0x24:	/* 1 0 0 1 x x */
-			status = add_dataflash(dev, "AT45DB081B",
-					       4096, 264, 9, 0);
-			break;
-		case 0x2c:	/* 1 0 1 1 x x */
-			status = add_dataflash(dev, "AT45DB161x",
-					       4096, 528, 10, 0);
-			break;
-		case 0x34:	/* 1 1 0 1 x x */
-			status = add_dataflash(dev, "AT45DB321x",
-					       8192, 528, 10, 0);
-			break;
-		case 0x38:	/* 1 1 1 x x x */
-		case 0x3c:
-			status = add_dataflash(dev, "AT45DB642x",
-					       8192, 1056, 11, 0);
-			break;
-		/* obsolete AT45DB1282 not (yet?) supported */
-		default:
-			dev_info(&spi->dev, "unsupported device (%x)\n",
-				 status & 0x3c);
+		goto err_jedec_probe;
+	if (info != NULL) {
+		status = add_dataflash(dev, info->name, info->nr_pages,
+				info->pagesize, info->pageoffset,
+				(info->flags & SUP_POW2PS) ? 'd' : 'c');
+		if (status < 0)
+			goto err_status;
+	}
+
+	/*
+	* Older chips support only legacy commands, identifing
+	* capacity using bits in the status byte.
+	*/
+	status = dataflash_status(spi);
+	if (status <= 0 || status == 0xff) {
+		printf("SPI DataFlash: read status error %d\n", status);
+		if (status == 0 || status == 0xff)
 			status = -ENODEV;
-			goto err_read_cmd;
-		}
+		goto err_jedec_probe;
 	}
 
-	spi_release_bus(spi);
+	/*
+	* if there's a device there, assume it's dataflash.
+	* board setup should have set spi->max_speed_max to
+	* match f(car) for continuous reads, mode 0 or 3.
+	*/
+	switch (status & 0x3c) {
+	case 0x0c:	/* 0 0 1 1 x x */
+		status = add_dataflash(dev, "AT45DB011B", 512, 264, 9, 0);
+		break;
+	case 0x14:	/* 0 1 0 1 x x */
+		status = add_dataflash(dev, "AT45DB021B", 1024, 264, 9, 0);
+		break;
+	case 0x1c:	/* 0 1 1 1 x x */
+		status = add_dataflash(dev, "AT45DB041x", 2048, 264, 9, 0);
+		break;
+	case 0x24:	/* 1 0 0 1 x x */
+		status = add_dataflash(dev, "AT45DB081B", 4096, 264, 9, 0);
+		break;
+	case 0x2c:	/* 1 0 1 1 x x */
+		status = add_dataflash(dev, "AT45DB161x", 4096, 528, 10, 0);
+		break;
+	case 0x34:	/* 1 1 0 1 x x */
+		status = add_dataflash(dev, "AT45DB321x", 8192, 528, 10, 0);
+		break;
+	case 0x38:	/* 1 1 1 x x x */
+	case 0x3c:
+		status = add_dataflash(dev, "AT45DB642x", 8192, 1056, 11, 0);
+		break;
+	/* obsolete AT45DB1282 not (yet?) supported */
+	default:
+		dev_info(&spi->dev, "unsupported device (%x)\n",
+			 status & 0x3c);
+		status = -ENODEV;
+		goto err_status;
+	}
 
-	return 0;
+	return status;
 
-err_read_cmd:
+err_status:
+	spi_free_slave(spi);
+err_jedec_probe:
 	spi_release_bus(spi);
-
 	return status;
 }
 
Signature · 1 line
1.9.1
author
#34 lore raw

PATCH v7 35/87 mtd: dataflash: Add UCLASS_MTD support

In reply to Jagan Teki

This patch replace the dataflash driver from SPI_FLASH uclass to MTD UCLASS along with the support of mtd opertaions.

Cc Bin Meng <[email protected]>
Cc Simon Glass <[email protected]>
Cc York Sun <[email protected]>
---
 drivers/mtd/spi-nor/sf_dataflash.c | 214 ++++++++++++++++++-------------------
 1 file changed, 107 insertions(+), 107 deletions(-)
drivers/mtd/spi-nor/sf_dataflash.c +107 -107
index b7e2a83..722ab7e 100644
@@ -2,6 +2,7 @@
  *
  * Atmel DataFlash probing
  *
+ * Copyright (C) 2016 Jagan Teki <[email protected]>
  * Copyright (C) 2004-2009, 2015 Freescale Semiconductor, Inc.
  * Haikun Wang (haikun.wang at freescale.com)
  *
@@ -12,10 +13,10 @@
 #include <errno.h>
 #include <fdtdec.h>
 #include <spi.h>
-#include <spi_flash.h>
 #include <div64.h>
 #include <linux/err.h>
 #include <linux/math64.h>
+#include <linux/mtd/mtd.h>
 
 #include "sf_internal.h"
 
@@ -70,7 +71,11 @@
 
 struct dataflash {
 	uint8_t			command[16];
+
 	unsigned short		page_offset;	/* offset in flash address */
+	unsigned int		page_size;	/* of bytes per page */
+
+	struct spi_slave	*spi;
 };
 
 /*
@@ -117,31 +122,25 @@ static int dataflash_waitready(struct spi_slave *spi)
 /*
  * Erase pages of flash.
  */
-static int spi_dataflash_erase(struct udevice *dev, u32 offset, size_t len)
+static int dataflash_erase(struct mtd_info *mtd, struct erase_info *instr)
 {
-	struct dataflash	*dataflash;
-	struct spi_flash	*spi_flash;
-	struct spi_slave	*spi;
-	unsigned		blocksize;
+	struct dataflash	*priv = mtd->priv;
+	struct spi_slave	*spi = priv->spi;
+	unsigned		blocksize = priv->page_size << 3;
 	uint8_t			*command;
 	uint32_t		rem;
 	int			status;
 
-	dataflash = dev_get_priv(dev);
-	spi_flash = dev_get_uclass_priv(dev);
-	spi = spi_flash->spi;
-
-	blocksize = spi_flash->page_size << 3;
-
-	memset(dataflash->command, 0 , sizeof(dataflash->command));
-	command = dataflash->command;
+	memset(priv->command, 0 , sizeof(priv->command));
+	command = priv->command;
 
-	debug("%s: erase addr=0x%x len 0x%x\n", dev->name, offset, len);
+	debug("%s: erase addr=0x%llx len 0x%llx\n", mtd->name,
+	      instr->addr, instr->len);
 
-	div_u64_rem(len, spi_flash->page_size, &rem);
+	div_u64_rem(instr->len, priv->page_size, &rem);
 	if (rem)
 		return -EINVAL;
-	div_u64_rem(offset, spi_flash->page_size, &rem);
+	div_u64_rem(instr->addr, priv->page_size, &rem);
 	if (rem)
 		return -EINVAL;
 
@@ -151,16 +150,16 @@ static int spi_dataflash_erase(struct udevice *dev, u32 offset, size_t len)
 		return status;
 	}
 
-	while (len > 0) {
+	while (instr->len > 0) {
 		unsigned int	pageaddr;
 		int		do_block;
 		/*
 		 * Calculate flash page address; use block erase (for speed) if
 		 * we're at a block boundary and need to erase the whole block.
 		 */
-		pageaddr = div_u64(offset, spi_flash->page_size);
-		do_block = (pageaddr & 0x7) == 0 && len >= blocksize;
-		pageaddr = pageaddr << dataflash->page_offset;
+		pageaddr = div_u64(instr->addr, priv->page_size);
+		do_block = (pageaddr & 0x7) == 0 && instr->len >= blocksize;
+		pageaddr = pageaddr << priv->page_offset;
 
 		command[0] = do_block ? OP_ERASE_BLOCK : OP_ERASE_PAGE;
 		command[1] = (uint8_t)(pageaddr >> 16);
@@ -168,67 +167,68 @@ static int spi_dataflash_erase(struct udevice *dev, u32 offset, size_t len)
 		command[3] = 0;
 
 		debug("%s ERASE %s: (%x) %x %x %x [%d]\n",
-		      dev->name, do_block ? "block" : "page",
+		      mtd->name, do_block ? "block" : "page",
 		      command[0], command[1], command[2], command[3],
 		      pageaddr);
 
 		status = spi_flash_cmd_write(spi, command, 4, NULL, 0);
 		if (status < 0) {
-			debug("%s: erase send command error!\n", dev->name);
+			debug("%s: erase send command error!\n", mtd->name);
 			return -EIO;
 		}
 
 		status = dataflash_waitready(spi);
 		if (status < 0) {
-			debug("%s: erase waitready error!\n", dev->name);
+			debug("%s: erase waitready error!\n", mtd->name);
 			return status;
 		}
 
 		if (do_block) {
-			offset += blocksize;
-			len -= blocksize;
+			instr->addr += blocksize;
+			instr->len -= blocksize;
 		} else {
-			offset += spi_flash->page_size;
-			len -= spi_flash->page_size;
+			instr->addr += priv->page_size;
+			instr->len -= priv->page_size;
 		}
 	}
 
 	spi_release_bus(spi);
 
+	/* Inform MTD subsystem that erase is complete */
+	instr->state = MTD_ERASE_DONE;
+	mtd_erase_callback(instr);
+
 	return 0;
 }
 
 /*
  * Read from the DataFlash device.
- *   offset : Start offset in flash device
+ *   from   : Start offset in flash device
  *   len    : Amount to read
+ *   retlen : About of data actually read
  *   buf    : Buffer containing the data
  */
-static int spi_dataflash_read(struct udevice *dev, u32 offset, size_t len,
-			      void *buf)
+static int dataflash_read(struct mtd_info *mtd, loff_t from, size_t len,
+			       size_t *retlen, u_char *buf)
 {
-	struct dataflash	*dataflash;
-	struct spi_flash	*spi_flash;
-	struct spi_slave	*spi;
+	struct dataflash	*priv = mtd->priv;
+	struct spi_slave	*spi = priv->spi;
 	unsigned int		addr;
 	uint8_t			*command;
 	int			status;
 
-	dataflash = dev_get_priv(dev);
-	spi_flash = dev_get_uclass_priv(dev);
-	spi = spi_flash->spi;
-
-	memset(dataflash->command, 0 , sizeof(dataflash->command));
-	command = dataflash->command;
+	memset(priv->command, 0 , sizeof(priv->command));
+	command = priv->command;
 
-	debug("%s: erase addr=0x%x len 0x%x\n", dev->name, offset, len);
+	debug("%s: read 0x%x..0x%x\n", mtd->name, (unsigned)from,
+	      (unsigned)(from + len));
 	debug("READ: (%x) %x %x %x\n",
 	      command[0], command[1], command[2], command[3]);
 
 	/* Calculate flash page/byte address */
-	addr = (((unsigned)offset / spi_flash->page_size)
-	       << dataflash->page_offset)
-	       + ((unsigned)offset % spi_flash->page_size);
+	addr = (((unsigned)from / priv->page_size)
+	       << priv->page_offset)
+	       + ((unsigned)from % priv->page_size);
 
 	status = spi_claim_bus(spi);
 	if (status) {
@@ -248,6 +248,10 @@ static int spi_dataflash_read(struct udevice *dev, u32 offset, size_t len,
 
 	/* plus 4 "don't care" bytes, command len: 4 + 4 "don't care" bytes */
 	status = spi_flash_cmd_read(spi, command, 8, buf, len);
+	if (status >= 0) {
+		*retlen = len - 8;
+		status = 0;
+	}
 
 	spi_release_bus(spi);
 
@@ -256,35 +260,32 @@ static int spi_dataflash_read(struct udevice *dev, u32 offset, size_t len,
 
 /*
  * Write to the DataFlash device.
- *   offset     : Start offset in flash device
+ *   to     : Start offset in flash device
  *   len    : Amount to write
+ *   retlen : Amount of data actually written
  *   buf    : Buffer containing the data
  */
-int spi_dataflash_write(struct udevice *dev, u32 offset, size_t len,
-			const void *buf)
+static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len,
+				size_t *retlen, const u_char *buf)
 {
-	struct dataflash	*dataflash;
-	struct spi_flash	*spi_flash;
-	struct spi_slave	*spi;
+	struct dataflash	*priv = mtd->priv;
+	struct spi_slave	*spi = priv->spi;
 	uint8_t			*command;
-	unsigned int		pageaddr, addr, to, writelen;
+	unsigned int		pageaddr, addr, offset, writelen;
 	size_t			remaining = len;
 	u_char			*writebuf = (u_char *)buf;
 	int			status = -EINVAL;
 
-	dataflash = dev_get_priv(dev);
-	spi_flash = dev_get_uclass_priv(dev);
-	spi = spi_flash->spi;
+	memset(priv->command, 0 , sizeof(priv->command));
+	command = priv->command;
 
-	memset(dataflash->command, 0 , sizeof(dataflash->command));
-	command = dataflash->command;
+	debug("%s: write 0x%x..0x%x\n", mtd->name, (unsigned)to,
+	      (unsigned)(to + len));
 
-	debug("%s: write 0x%x..0x%x\n", dev->name, offset, (offset + len));
-
-	pageaddr = ((unsigned)offset / spi_flash->page_size);
-	to = ((unsigned)offset % spi_flash->page_size);
-	if (to + len > spi_flash->page_size)
-		writelen = spi_flash->page_size - to;
+	pageaddr = ((unsigned)to / priv->page_size);
+	offset = ((unsigned)to % priv->page_size);
+	if (offset + len > priv->page_size)
+		writelen = priv->page_size - offset;
 	else
 		writelen = len;
 
@@ -295,7 +296,7 @@ int spi_dataflash_write(struct udevice *dev, u32 offset, size_t len,
 	}
 
 	while (remaining > 0) {
-		debug("write @ %d:%d len=%d\n", pageaddr, to, writelen);
+		debug("write @ %d:%d len=%d\n", pageaddr, offset, writelen);
 
 		/*
 		 * REVISIT:
@@ -314,10 +315,10 @@ int spi_dataflash_write(struct udevice *dev, u32 offset, size_t len,
 		 * support boot-from-DataFlash.)
 		 */
 
-		addr = pageaddr << dataflash->page_offset;
+		addr = pageaddr << priv->page_offset;
 
 		/* (1) Maybe transfer partial page to Buffer1 */
-		if (writelen != spi_flash->page_size) {
+		if (writelen != priv->page_size) {
 			command[0] = OP_TRANSFER_BUF1;
 			command[1] = (addr & 0x00FF0000) >> 16;
 			command[2] = (addr & 0x0000FF00) >> 8;
@@ -329,20 +330,20 @@ int spi_dataflash_write(struct udevice *dev, u32 offset, size_t len,
 			status = spi_flash_cmd_write(spi, command, 4, NULL, 0);
 			if (status < 0) {
 				debug("%s: write(<pagesize) command error!\n",
-				      dev->name);
+				      mtd->name);
 				return -EIO;
 			}
 
 			status = dataflash_waitready(spi);
 			if (status < 0) {
 				debug("%s: write(<pagesize) waitready error!\n",
-				      dev->name);
+				      mtd->name);
 				return status;
 			}
 		}
 
 		/* (2) Program full page via Buffer1 */
-		addr += to;
+		addr += offset;
 		command[0] = OP_PROGRAM_VIA_BUF1;
 		command[1] = (addr & 0x00FF0000) >> 16;
 		command[2] = (addr & 0x0000FF00) >> 8;
@@ -354,19 +355,19 @@ int spi_dataflash_write(struct udevice *dev, u32 offset, size_t len,
 		status = spi_flash_cmd_write(spi, command,
 					     4, writebuf, writelen);
 		if (status < 0) {
-			debug("%s: write send command error!\n", dev->name);
+			debug("%s: write send command error!\n", mtd->name);
 			return -EIO;
 		}
 
 		status = dataflash_waitready(spi);
 		if (status < 0) {
-			debug("%s: write waitready error!\n", dev->name);
+			debug("%s: write waitready error!\n", mtd->name);
 			return status;
 		}
 
 #ifdef CONFIG_SPI_DATAFLASH_WRITE_VERIFY
 		/* (3) Compare to Buffer1 */
-		addr = pageaddr << dataflash->page_offset;
+		addr = pageaddr << priv->page_offset;
 		command[0] = OP_COMPARE_BUF1;
 		command[1] = (addr & 0x00FF0000) >> 16;
 		command[2] = (addr & 0x0000FF00) >> 8;
@@ -379,7 +380,7 @@ int spi_dataflash_write(struct udevice *dev, u32 offset, size_t len,
 					     4, writebuf, writelen);
 		if (status < 0) {
 			debug("%s: write(compare) send command error!\n",
-			      dev->name);
+			      mtd->name);
 			return -EIO;
 		}
 
@@ -399,11 +400,12 @@ int spi_dataflash_write(struct udevice *dev, u32 offset, size_t len,
 #endif	/* CONFIG_SPI_DATAFLASH_WRITE_VERIFY */
 		remaining = remaining - writelen;
 		pageaddr++;
-		to = 0;
+		offset = 0;
 		writebuf += writelen;
+		*retlen += writelen;
 
-		if (remaining > spi_flash->page_size)
-			writelen = spi_flash->page_size;
+		if (remaining > priv->page_size)
+			writelen = priv->page_size;
 		else
 			writelen = remaining;
 	}
@@ -414,31 +416,41 @@ int spi_dataflash_write(struct udevice *dev, u32 offset, size_t len,
 }
 
 static int add_dataflash(struct udevice *dev, char *name, int nr_pages,
-			     int pagesize, int pageoffset, char revision)
+			 int pagesize, int pageoffset, char revision)
 {
-	struct spi_flash *spi_flash;
-	struct dataflash *dataflash;
-
-	dataflash = dev_get_priv(dev);
-	spi_flash = dev_get_uclass_priv(dev);
-
-	dataflash->page_offset = pageoffset;
+	struct dataflash	*priv = dev_get_priv(dev);
+	struct mtd_info		*mtd = dev_get_uclass_priv(dev);
+	int ret;
 
-	spi_flash->name = name;
-	spi_flash->page_size = pagesize;
-	spi_flash->size = nr_pages * pagesize;
-	spi_flash->erase_size = pagesize;
+	priv->spi = dev_get_parent_priv(dev);
+	priv->page_size = pagesize;
+	priv->page_offset = pageoffset;
+
+	mtd->name = name;
+	mtd->size = nr_pages * pagesize;
+	mtd->erasesize = pagesize;
+	mtd->writesize = pagesize;
+	mtd->type = MTD_DATAFLASH;
+	mtd->flags = MTD_WRITEABLE;
+	mtd->_erase = dataflash_erase;
+	mtd->_read = dataflash_read;
+	mtd->_write = dataflash_write;
+	mtd->priv = priv;
 
 #ifndef CONFIG_SPL_BUILD
-	printf("SPI DataFlash: Detected %s with page size ", spi_flash->name);
-	print_size(spi_flash->page_size, ", erase size ");
-	print_size(spi_flash->erase_size, ", total ");
-	print_size(spi_flash->size, "");
+	printf("SPI DataFlash: Detected %s with page size ", mtd->name);
+	print_size(priv->page_size, ", erase size ");
+	print_size(mtd->erasesize, ", total ");
+	print_size(mtd->size, "");
 	printf(", revision %c", revision);
 	puts("\n");
 #endif
 
-	return 0;
+	ret = add_mtd_device(mtd);
+	if (ret)
+		return ret;
+
+	return ret;
 }
 
 struct flash_info {
@@ -583,15 +595,10 @@ static struct flash_info *jedec_probe(struct spi_slave *spi)
  */
 static int spi_dataflash_probe(struct udevice *dev)
 {
-	struct spi_slave *spi = dev_get_parent_priv(dev);
-	struct spi_flash *spi_flash;
-	struct flash_info *info;
+	struct spi_slave	*spi = dev_get_parent_priv(dev);
+	struct flash_info	*info;
 	int status;
 
-	spi_flash = dev_get_uclass_priv(dev);
-	spi_flash->spi = spi;
-	spi_flash->dev = dev;
-
 	status = spi_claim_bus(spi);
 	if (status)
 		return status;
@@ -671,12 +678,6 @@ err_jedec_probe:
 	return status;
 }
 
-static const struct dm_spi_flash_ops spi_dataflash_ops = {
-	.read = spi_dataflash_read,
-	.write = spi_dataflash_write,
-	.erase = spi_dataflash_erase,
-};
-
 static const struct udevice_id spi_dataflash_ids[] = {
 	{ .compatible = "atmel,at45", },
 	{ .compatible = "atmel,dataflash", },
@@ -685,9 +686,8 @@ static const struct udevice_id spi_dataflash_ids[] = {
 
 U_BOOT_DRIVER(spi_dataflash) = {
 	.name		= "spi_dataflash",
-	.id		= UCLASS_SPI_FLASH,
+	.id		= UCLASS_MTD,
 	.of_match	= spi_dataflash_ids,
 	.probe		= spi_dataflash_probe,
 	.priv_auto_alloc_size = sizeof(struct dataflash),
-	.ops		= &spi_dataflash_ops,
 };
Signature · 1 line
1.9.1
author
#35 lore raw

PATCH v7 36/87 mtd: dataflash: Use spi_write_then_read

In reply to Jagan Teki

Use spi_write_then_read call from spi layer for
dataflash write and then read calling.

Cc Bin Meng <[email protected]>
Cc Simon Glass <[email protected]>
Cc York Sun <[email protected]>
---
 drivers/mtd/spi-nor/sf_dataflash.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)
drivers/mtd/spi-nor/sf_dataflash.c +11 -10
index 722ab7e..525af0a 100644
@@ -84,12 +84,12 @@ struct dataflash {
 static inline int dataflash_status(struct spi_slave *spi)
 {
 	int ret;
-	u8 status;
+	u8 cmd = OP_READ_STATUS, status;
 	/*
 	 * NOTE:  at45db321c over 25 MHz wants to write
 	 * a dummy byte after the opcode...
 	 */
-	ret = spi_flash_cmd(spi, OP_READ_STATUS, &status, 1);
+	ret = spi_write_then_read(spi, &cmd, 1, NULL, &status, 1);
 	return ret ? -EIO : status;
 }
 
@@ -171,7 +171,7 @@ static int dataflash_erase(struct mtd_info *mtd, struct erase_info *instr)
 		      command[0], command[1], command[2], command[3],
 		      pageaddr);
 
-		status = spi_flash_cmd_write(spi, command, 4, NULL, 0);
+		status = spi_write_then_read(spi, command, 4, NULL, NULL, 0);
 		if (status < 0) {
 			debug("%s: erase send command error!\n", mtd->name);
 			return -EIO;
@@ -247,7 +247,7 @@ static int dataflash_read(struct mtd_info *mtd, loff_t from, size_t len,
 	command[3] = (uint8_t)(addr >> 0);
 
 	/* plus 4 "don't care" bytes, command len: 4 + 4 "don't care" bytes */
-	status = spi_flash_cmd_read(spi, command, 8, buf, len);
+	status = spi_write_then_read(spi, command, 8, NULL, buf, len);
 	if (status >= 0) {
 		*retlen = len - 8;
 		status = 0;
@@ -327,7 +327,7 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len,
 			debug("TRANSFER: (%x) %x %x %x\n",
 			      command[0], command[1], command[2], command[3]);
 
-			status = spi_flash_cmd_write(spi, command, 4, NULL, 0);
+			status = spi_write_then_read(spi, command, 4, NULL, NULL, 0);
 			if (status < 0) {
 				debug("%s: write(<pagesize) command error!\n",
 				      mtd->name);
@@ -352,8 +352,8 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len,
 		debug("PROGRAM: (%x) %x %x %x\n",
 		      command[0], command[1], command[2], command[3]);
 
-		status = spi_flash_cmd_write(spi, command,
-					     4, writebuf, writelen);
+		status = spi_write_then_read(spi, command, 4,
+					     writebuf, NULL, writelen);
 		if (status < 0) {
 			debug("%s: write send command error!\n", mtd->name);
 			return -EIO;
@@ -376,8 +376,8 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len,
 		debug("COMPARE: (%x) %x %x %x\n",
 		      command[0], command[1], command[2], command[3]);
 
-		status = spi_flash_cmd_write(spi, command,
-					     4, writebuf, writelen);
+		status = spi_write_then_read(spi, command, 4,
+					     writebuf, NULL, writelen);
 		if (status < 0) {
 			debug("%s: write(compare) send command error!\n",
 			      mtd->name);
@@ -519,6 +519,7 @@ static struct flash_info *jedec_probe(struct spi_slave *spi)
 	uint8_t			id[5];
 	uint32_t		jedec;
 	struct flash_info	*info;
+	u8 cmd = CMD_READ_ID;
 	int status;
 
 	/*
@@ -530,7 +531,7 @@ static struct flash_info *jedec_probe(struct spi_slave *spi)
 	 * That's not an error; only rev C and newer chips handle it, and
 	 * only Atmel sells these chips.
 	 */
-	tmp = spi_flash_cmd(spi, CMD_READ_ID, id, sizeof(id));
+	tmp = spi_write_then_read(spi, &cmd, 1, NULL, id, sizeof(id));
 	if (tmp < 0) {
 		printf("dataflash: error %d reading JEDEC ID\n", tmp);
 		return ERR_PTR(tmp);
Signature · 1 line
1.9.1
author
#36 lore raw

PATCH v7 37/87 mtd: dataflash: Drop sf_internal.h

In reply to Jagan Teki

Drop using sf_internal.h and get the RDID from spi-nor.h

Cc Bin Meng <[email protected]>
Cc Simon Glass <[email protected]>
Cc York Sun <[email protected]>
---
 drivers/mtd/spi-nor/sf_dataflash.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
drivers/mtd/spi-nor/sf_dataflash.c +2 -3
index 525af0a..9943560 100644
@@ -17,8 +17,7 @@
 #include <linux/err.h>
 #include <linux/math64.h>
 #include <linux/mtd/mtd.h>
-
-#include "sf_internal.h"
+#include <linux/mtd/spi-nor.h>
 
 /* reads can bypass the buffers */
 #define OP_READ_CONTINUOUS	0xE8
@@ -519,7 +518,7 @@ static struct flash_info *jedec_probe(struct spi_slave *spi)
 	uint8_t			id[5];
 	uint32_t		jedec;
 	struct flash_info	*info;
-	u8 cmd = CMD_READ_ID;
+	u8 cmd = SNOR_OP_RDID;
 	int status;
 
 	/*
Signature · 1 line
1.9.1
author
#37 lore raw

PATCH v7 38/87 mtd: dataflash: Minor cleanups

In reply to Jagan Teki

- rename spi_dataflash to mtd_dataflash
- fix single line comments
- remove unneeded spaces
- ascending order of include files
- rename spi_dataflash_* to dataflash_*
- rename SPI DATAFLASH to dataflash
- rename SPI DataFlash to dataflash
- return NULL replaced with error code

Cc Bin Meng <[email protected]>
Cc Simon Glass <[email protected]>
Cc York Sun <[email protected]>
---
 drivers/mtd/spi-nor/sf_dataflash.c | 51 ++++++++++++++++----------------------
 1 file changed, 22 insertions(+), 29 deletions(-)
drivers/mtd/spi-nor/sf_dataflash.c +22 -29
index 9943560..2a5f5ae 100644
@@ -1,5 +1,4 @@
 /*
- *
  * Atmel DataFlash probing
  *
  * Copyright (C) 2016 Jagan Teki <[email protected]>
@@ -7,8 +6,10 @@
  * Haikun Wang (haikun.wang at freescale.com)
  *
  * SPDX-License-Identifier:	GPL-2.0+
-*/
+ */
+
 #include <common.h>
+#include <div64.h>
 #include <dm.h>
 #include <errno.h>
 #include <fdtdec.h>
@@ -67,7 +68,6 @@
 #define OP_WRITE_SECURITY_REVC	0x9A
 #define OP_WRITE_SECURITY	0x9B	/* revision D */
 
-
 struct dataflash {
 	uint8_t			command[16];
 
@@ -77,9 +77,7 @@ struct dataflash {
 	struct spi_slave	*spi;
 };
 
-/*
- * Return the status of the DataFlash device.
- */
+/* Return the status of the DataFlash device */
 static inline int dataflash_status(struct spi_slave *spi)
 {
 	int ret;
@@ -118,9 +116,7 @@ static int dataflash_waitready(struct spi_slave *spi)
 	return -ETIME;
 }
 
-/*
- * Erase pages of flash.
- */
+/* Erase pages of flash */
 static int dataflash_erase(struct mtd_info *mtd, struct erase_info *instr)
 {
 	struct dataflash	*priv = mtd->priv;
@@ -145,7 +141,7 @@ static int dataflash_erase(struct mtd_info *mtd, struct erase_info *instr)
 
 	status = spi_claim_bus(spi);
 	if (status) {
-		debug("SPI DATAFLASH: unable to claim SPI bus\n");
+		debug("dataflash: unable to claim SPI bus\n");
 		return status;
 	}
 
@@ -231,7 +227,7 @@ static int dataflash_read(struct mtd_info *mtd, loff_t from, size_t len,
 
 	status = spi_claim_bus(spi);
 	if (status) {
-		debug("SPI DATAFLASH: unable to claim SPI bus\n");
+		debug("dataflash: unable to claim SPI bus\n");
 		return status;
 	}
 
@@ -290,7 +286,7 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len,
 
 	status = spi_claim_bus(spi);
 	if (status) {
-		debug("SPI DATAFLASH: unable to claim SPI bus\n");
+		debug("dataflash: unable to claim SPI bus\n");
 		return status;
 	}
 
@@ -387,7 +383,7 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len,
 
 		/* Check result of the compare operation */
 		if (status & (1 << 6)) {
-			printf("SPI DataFlash: write compare page %u, err %d\n",
+			printf("dataflash: write compare page %u, err %d\n",
 			       pageaddr, status);
 			remaining = 0;
 			status = -EIO;
@@ -551,7 +547,7 @@ static struct flash_info *jedec_probe(struct spi_slave *spi)
 			if (info->flags & SUP_POW2PS) {
 				status = dataflash_status(spi);
 				if (status < 0) {
-					debug("SPI DataFlash: status error %d\n",
+					debug("dataflash: status error %d\n",
 					      status);
 					return NULL;
 				}
@@ -573,10 +569,8 @@ static struct flash_info *jedec_probe(struct spi_slave *spi)
 	 * size (it might be binary) even when we can tell which density
 	 * class is involved (legacy chip id scheme).
 	 */
-	printf("SPI DataFlash: Unsupported flash IDs: ");
-	printf("manuf %02x, jedec %04x, ext_jedec %04x\n",
-	       id[0], jedec, id[3] << 8 | id[4]);
-	return NULL;
+	printf("dataflash: JEDEC id %06x not handled\n", jedec);
+	return ERR_PTR(-ENODEV);
 }
 
 /*
@@ -593,7 +587,7 @@ static struct flash_info *jedec_probe(struct spi_slave *spi)
  *   AT45DB0642  64Mbit  (8M)    xx111xxx (0x3c)   8192   1056     11
  *   AT45DB1282  128Mbit (16M)   xx0100xx (0x10)  16384   1056     11
  */
-static int spi_dataflash_probe(struct udevice *dev)
+static int dataflash_probe(struct udevice *dev)
 {
 	struct spi_slave	*spi = dev_get_parent_priv(dev);
 	struct flash_info	*info;
@@ -621,19 +615,19 @@ static int spi_dataflash_probe(struct udevice *dev)
 			goto err_status;
 	}
 
-	/*
+       /*
 	* Older chips support only legacy commands, identifing
 	* capacity using bits in the status byte.
 	*/
 	status = dataflash_status(spi);
 	if (status <= 0 || status == 0xff) {
-		printf("SPI DataFlash: read status error %d\n", status);
+		printf("dataflash: read status error %d\n", status);
 		if (status == 0 || status == 0xff)
 			status = -ENODEV;
 		goto err_jedec_probe;
 	}
 
-	/*
+       /*
 	* if there's a device there, assume it's dataflash.
 	* board setup should have set spi->max_speed_max to
 	* match f(car) for continuous reads, mode 0 or 3.
@@ -663,8 +657,7 @@ static int spi_dataflash_probe(struct udevice *dev)
 		break;
 	/* obsolete AT45DB1282 not (yet?) supported */
 	default:
-		dev_info(&spi->dev, "unsupported device (%x)\n",
-			 status & 0x3c);
+		printf("dataflash: unsupported device (%x)\n", status & 0x3c);
 		status = -ENODEV;
 		goto err_status;
 	}
@@ -678,16 +671,16 @@ err_jedec_probe:
 	return status;
 }
 
-static const struct udevice_id spi_dataflash_ids[] = {
+static const struct udevice_id dataflash_ids[] = {
 	{ .compatible = "atmel,at45", },
 	{ .compatible = "atmel,dataflash", },
 	{ }
 };
 
-U_BOOT_DRIVER(spi_dataflash) = {
-	.name		= "spi_dataflash",
+U_BOOT_DRIVER(mtd_dataflash) = {
+	.name		= "mtd_dataflash",
 	.id		= UCLASS_MTD,
-	.of_match	= spi_dataflash_ids,
-	.probe		= spi_dataflash_probe,
+	.of_match	= dataflash_ids,
+	.probe		= dataflash_probe,
 	.priv_auto_alloc_size = sizeof(struct dataflash),
 };
Signature · 1 line
1.9.1
author
#38 lore raw

PATCH v7 39/87 mtd: Rename sf_dataflash.c to mtd_dataflash.c

In reply to Jagan Teki

Since dataflash driver is using mtd_info core functionalities this patch renames file and config name similar way as Linux.

Cc Bin Meng <[email protected]>
Cc Simon Glass <[email protected]>
Cc York Sun <[email protected]>
---
 drivers/mtd/spi-nor/Makefile                            | 1 +
 drivers/mtd/spi-nor/{sf_dataflash.c => mtd_dataflash.c} | 0
 2 files changed, 1 insertion(+)
 rename drivers/mtd/spi-nor/{sf_dataflash.c => mtd_dataflash.c} (100%)
drivers/mtd/spi-nor/Makefile +1 -0
index 4a854fa..525fccd 100644
@@ -16,3 +16,4 @@ obj-$(CONFIG_DM_MTD_SPI_NOR)	+= spi-nor-probe.o
 endif
 
 obj-$(CONFIG_MTD_M25P80)	+= m25p80.o
+obj-$(CONFIG_MTD_DATAFLASH)	+= mtd_dataflash.o
drivers/mtd/spi-nor/mtd_dataflash.c renamed from drivers/mtd/spi-nor/sf_dataflash.c +0 -0
similarity index 100%
rename from drivers/mtd/spi-nor/sf_dataflash.c
rename to drivers/mtd/spi-nor/mtd_dataflash.c
Signature · 1 line
1.9.1
author
#39 lore raw

PATCH v7 40/87 mtd: spi-nor: Add Kconfig entry for mtd_dataflash

In reply to Jagan Teki

Added kconfig entry for MTD_DATAFLASH

Cc Bin Meng <[email protected]>
Cc Simon Glass <[email protected]>
Cc York Sun <[email protected]>
---
 drivers/mtd/spi-nor/Kconfig | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
drivers/mtd/spi-nor/Kconfig +15 -0
index a035fd3..f2bd630 100644
@@ -99,3 +99,18 @@ config SPI_FLASH_WINBOND
 	  Add support for various Winbond SPI flash chips (W25xxx)
 
 endif # MTD_SPI_NOR
+
+config MTD_DATAFLASH
+	bool "AT45xxx DataFlash support"
+	depends on MTD
+	help
+	  Enable the access for SPI-flash-based AT45xxx DataFlash chips.
+	  DataFlash is a kind of SPI flash. Most AT45 chips have two buffers
+	  in each chip, which may be used for double buffered I/O; but this
+	  driver doesn't (yet) use these for any kind of i/o overlap or prefetching.
+
+	  Sometimes DataFlash is packaged in MMC-format cards, although the
+	  MMC stack can't (yet?) distinguish between MMC and DataFlash
+	  protocols during enumeration.
+
+	  If unsure, say N
Signature · 1 line
1.9.1
author
#40 lore raw

PATCH v7 41/87 mtd: dataflash: Add MTD_DATAFLASH_WRITE_VERIFY

In reply to Jagan Teki

mtd_dataflash driver almost similar to Linux, so rename the CONFIG_SPI_DATAFLASH_WRITE_VERIFY => CONFIG_MTD_DATAFLASH_WRITE_VERIFY

Cc Bin Meng <[email protected]>
Cc Simon Glass <[email protected]>
Cc York Sun <[email protected]>
---
 drivers/mtd/spi-nor/mtd_dataflash.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/mtd/spi-nor/mtd_dataflash.c +2 -2
index 2a5f5ae..fae862e 100644
@@ -360,7 +360,7 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len,
 			return status;
 		}
 
-#ifdef CONFIG_SPI_DATAFLASH_WRITE_VERIFY
+#ifdef CONFIG_MTD_DATAFLASH_WRITE_VERIFY
 		/* (3) Compare to Buffer1 */
 		addr = pageaddr << priv->page_offset;
 		command[0] = OP_COMPARE_BUF1;
@@ -392,7 +392,7 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len,
 			status = 0;
 		}
 
-#endif	/* CONFIG_SPI_DATAFLASH_WRITE_VERIFY */
+#endif	/* CONFIG_MTD_DATAFLASH_WRITE_VERIFY */
 		remaining = remaining - writelen;
 		pageaddr++;
 		offset = 0;
Signature · 1 line
1.9.1
author
#41 lore raw

PATCH v7 42/87 mtd: spi-nor: Add kconfig MTD_DATAFLASH_WRITE_VERIFY

In reply to Jagan Teki

Added kconfig entry for MTD_DATAFLASH_WRITE_VERIFY

Cc Bin Meng <[email protected]>
Cc Simon Glass <[email protected]>
Cc York Sun <[email protected]>
---
 drivers/mtd/spi-nor/Kconfig | 10 ++++++++++
 1 file changed, 10 insertions(+)
drivers/mtd/spi-nor/Kconfig +10 -0
index f2bd630..12dcede 100644
@@ -114,3 +114,13 @@ config MTD_DATAFLASH
 	  protocols during enumeration.
 
 	  If unsure, say N
+
+config MTD_DATAFLASH_WRITE_VERIFY
+	bool "Verify DataFlash page writes"
+	depends on MTD_DATAFLASH
+	help
+	  This adds an extra check when data is written to the flash.
+	  It may help if you are verifying chip setup (timings etc) on
+	  your board.  There is a rare possibility that even though the
+	  device thinks the write was successful, a bit could have been
+	  flipped accidentally due to device wear or something else.
Signature · 1 line
1.9.1
author
#42 lore raw

PATCH v7 43/87 configs: ls1021aqds: Drop DM_SPI_FLASH and DATAFLASH

In reply to Jagan Teki

Dropped DM_SPI_FLASH and SPI_FLASH_DATAFLASH

Cc Bin Meng <[email protected]>
Cc Simon Glass <[email protected]>
Cc York Sun <[email protected]>
---
 include/configs/ls1021aqds.h | 2 --
 1 file changed, 2 deletions(-)
include/configs/ls1021aqds.h +0 -2
index d7025f6..b5415f4 100644
@@ -432,8 +432,6 @@ unsigned long get_board_ddr_clk(void);
 /* DM SPI */
 #if defined(CONFIG_FSL_DSPI) || defined(CONFIG_FSL_QSPI)
 #define CONFIG_CMD_SF
-#define CONFIG_DM_SPI_FLASH
-#define CONFIG_SPI_FLASH_DATAFLASH
 #endif
 #endif
 
Signature · 1 line
1.9.1
author
#43 lore raw

PATCH v7 44/87 defconfig: ls1021aqds_qspi: Enable SPI-NOR

In reply to Jagan Teki

Enable SPI-NOR with MTD uclass.

Cc Bin Meng <[email protected]>
Cc Simon Glass <[email protected]>
Cc York Sun <[email protected]>
---
 configs/ls1021aqds_qspi_defconfig | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
configs/ls1021aqds_qspi_defconfig +3 -1
index 025fd4e..32a8662 100644
@@ -9,7 +9,9 @@ CONFIG_SYS_EXTRA_OPTIONS="QSPI_BOOT"
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_OF_CONTROL=y
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
Signature · 1 line
1.9.1
author
#44 lore raw

PATCH v7 45/87 defconfig: ls1021aqds_qspi: Enable CONFIG_MTD_DATAFLASH

In reply to Jagan Teki

Enable CONFIG_MTD_DATAFLASH

Cc Bin Meng <[email protected]>
Cc Simon Glass <[email protected]>
Cc York Sun <[email protected]>
---
 configs/ls1021aqds_qspi_defconfig | 1 +
 1 file changed, 1 insertion(+)
configs/ls1021aqds_qspi_defconfig +1 -0
index 32a8662..ce4b677 100644
@@ -12,6 +12,7 @@ CONFIG_DM=y
 CONFIG_MTD=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
+CONFIG_MTD_DATAFLASH=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
Signature · 1 line
1.9.1
author
#45 lore raw

PATCH v7 46/87 mtd: spi-nor: Copy sandbox

In reply to Jagan Teki

Copy sandbox.c from drivers/mtd/spi to spi-nor,
more changes will added on future patches.

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
---
 drivers/mtd/spi-nor/sandbox.c | 703 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 703 insertions(+)
 create mode 100644 drivers/mtd/spi-nor/sandbox.c
drivers/mtd/spi-nor/sandbox.c new file +703 -0
new file mode 100644
index 0000000..53470b9
@@ -0,0 +1,703 @@
+/*
+ * Simulate a SPI flash
+ *
+ * Copyright (c) 2011-2013 The Chromium OS Authors.
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <malloc.h>
+#include <spi.h>
+#include <os.h>
+
+#include <spi_flash.h>
+#include "sf_internal.h"
+
+#include <asm/getopt.h>
+#include <asm/spi.h>
+#include <asm/state.h>
+#include <dm/device-internal.h>
+#include <dm/lists.h>
+#include <dm/uclass-internal.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/*
+ * The different states that our SPI flash transitions between.
+ * We need to keep track of this across multiple xfer calls since
+ * the SPI bus could possibly call down into us multiple times.
+ */
+enum sandbox_sf_state {
+	SF_CMD,   /* default state -- we're awaiting a command */
+	SF_ID,    /* read the flash's (jedec) ID code */
+	SF_ADDR,  /* processing the offset in the flash to read/etc... */
+	SF_READ,  /* reading data from the flash */
+	SF_WRITE, /* writing data to the flash, i.e. page programming */
+	SF_ERASE, /* erase the flash */
+	SF_READ_STATUS, /* read the flash's status register */
+	SF_READ_STATUS1, /* read the flash's status register upper 8 bits*/
+	SF_WRITE_STATUS, /* write the flash's status register */
+};
+
+static const char *sandbox_sf_state_name(enum sandbox_sf_state state)
+{
+	static const char * const states[] = {
+		"CMD", "ID", "ADDR", "READ", "WRITE", "ERASE", "READ_STATUS",
+		"READ_STATUS1", "WRITE_STATUS",
+	};
+	return states[state];
+}
+
+/* Bits for the status register */
+#define STAT_WIP	(1 << 0)
+#define STAT_WEL	(1 << 1)
+
+/* Assume all SPI flashes have 3 byte addresses since they do atm */
+#define SF_ADDR_LEN	3
+
+#define IDCODE_LEN 3
+
+/* Used to quickly bulk erase backing store */
+static u8 sandbox_sf_0xff[0x1000];
+
+/* Internal state data for each SPI flash */
+struct sandbox_spi_flash {
+	unsigned int cs;	/* Chip select we are attached to */
+	/*
+	 * As we receive data over the SPI bus, our flash transitions
+	 * between states.  For example, we start off in the SF_CMD
+	 * state where the first byte tells us what operation to perform
+	 * (such as read or write the flash).  But the operation itself
+	 * can go through a few states such as first reading in the
+	 * offset in the flash to perform the requested operation.
+	 * Thus "state" stores the exact state that our machine is in
+	 * while "cmd" stores the overall command we're processing.
+	 */
+	enum sandbox_sf_state state;
+	uint cmd;
+	/* Erase size of current erase command */
+	uint erase_size;
+	/* Current position in the flash; used when reading/writing/etc... */
+	uint off;
+	/* How many address bytes we've consumed */
+	uint addr_bytes, pad_addr_bytes;
+	/* The current flash status (see STAT_XXX defines above) */
+	u16 status;
+	/* Data describing the flash we're emulating */
+	const struct spi_flash_params *data;
+	/* The file on disk to serv up data from */
+	int fd;
+};
+
+struct sandbox_spi_flash_plat_data {
+	const char *filename;
+	const char *device_name;
+	int bus;
+	int cs;
+};
+
+/**
+ * This is a very strange probe function. If it has platform data (which may
+ * have come from the device tree) then this function gets the filename and
+ * device type from there. Failing that it looks@the command line
+ * parameter.
+ */
+static int sandbox_sf_probe(struct udevice *dev)
+{
+	/* spec = idcode:file */
+	struct sandbox_spi_flash *sbsf = dev_get_priv(dev);
+	const char *file;
+	size_t len, idname_len;
+	const struct spi_flash_params *data;
+	struct sandbox_spi_flash_plat_data *pdata = dev_get_platdata(dev);
+	struct sandbox_state *state = state_get_current();
+	struct udevice *bus = dev->parent;
+	const char *spec = NULL;
+	int ret = 0;
+	int cs = -1;
+	int i;
+
+	debug("%s: bus %d, looking for emul=%p: ", __func__, bus->seq, dev);
+	if (bus->seq >= 0 && bus->seq < CONFIG_SANDBOX_SPI_MAX_BUS) {
+		for (i = 0; i < CONFIG_SANDBOX_SPI_MAX_CS; i++) {
+			if (state->spi[bus->seq][i].emul == dev)
+				cs = i;
+		}
+	}
+	if (cs == -1) {
+		printf("Error: Unknown chip select for device '%s'\n",
+		       dev->name);
+		return -EINVAL;
+	}
+	debug("found at cs %d\n", cs);
+
+	if (!pdata->filename) {
+		struct sandbox_state *state = state_get_current();
+
+		assert(bus->seq != -1);
+		if (bus->seq < CONFIG_SANDBOX_SPI_MAX_BUS)
+			spec = state->spi[bus->seq][cs].spec;
+		if (!spec) {
+			debug("%s:  No spec found for bus %d, cs %d\n",
+			      __func__, bus->seq, cs);
+			ret = -ENOENT;
+			goto error;
+		}
+
+		file = strchr(spec, ':');
+		if (!file) {
+			printf("%s: unable to parse file\n", __func__);
+			ret = -EINVAL;
+			goto error;
+		}
+		idname_len = file - spec;
+		pdata->filename = file + 1;
+		pdata->device_name = spec;
+		++file;
+	} else {
+		spec = strchr(pdata->device_name, ',');
+		if (spec)
+			spec++;
+		else
+			spec = pdata->device_name;
+		idname_len = strlen(spec);
+	}
+	debug("%s: device='%s'\n", __func__, spec);
+
+	for (data = spi_flash_params_table; data->name; data++) {
+		len = strlen(data->name);
+		if (idname_len != len)
+			continue;
+		if (!strncasecmp(spec, data->name, len))
+			break;
+	}
+	if (!data->name) {
+		printf("%s: unknown flash '%*s'\n", __func__, (int)idname_len,
+		       spec);
+		ret = -EINVAL;
+		goto error;
+	}
+
+	if (sandbox_sf_0xff[0] == 0x00)
+		memset(sandbox_sf_0xff, 0xff, sizeof(sandbox_sf_0xff));
+
+	sbsf->fd = os_open(pdata->filename, 02);
+	if (sbsf->fd == -1) {
+		printf("%s: unable to open file '%s'\n", __func__,
+		       pdata->filename);
+		ret = -EIO;
+		goto error;
+	}
+
+	sbsf->data = data;
+	sbsf->cs = cs;
+
+	return 0;
+
+ error:
+	debug("%s: Got error %d\n", __func__, ret);
+	return ret;
+}
+
+static int sandbox_sf_remove(struct udevice *dev)
+{
+	struct sandbox_spi_flash *sbsf = dev_get_priv(dev);
+
+	os_close(sbsf->fd);
+
+	return 0;
+}
+
+static void sandbox_sf_cs_activate(struct udevice *dev)
+{
+	struct sandbox_spi_flash *sbsf = dev_get_priv(dev);
+
+	debug("sandbox_sf: CS activated; state is fresh!\n");
+
+	/* CS is asserted, so reset state */
+	sbsf->off = 0;
+	sbsf->addr_bytes = 0;
+	sbsf->pad_addr_bytes = 0;
+	sbsf->state = SF_CMD;
+	sbsf->cmd = SF_CMD;
+}
+
+static void sandbox_sf_cs_deactivate(struct udevice *dev)
+{
+	debug("sandbox_sf: CS deactivated; cmd done processing!\n");
+}
+
+/*
+ * There are times when the data lines are allowed to tristate.  What
+ * is actually sensed on the line depends on the hardware.  It could
+ * always be 0xFF/0x00 (if there are pull ups/downs), or things could
+ * float and so we'd get garbage back.  This func encapsulates that
+ * scenario so we can worry about the details here.
+ */
+static void sandbox_spi_tristate(u8 *buf, uint len)
+{
+	/* XXX: make this into a user config option ? */
+	memset(buf, 0xff, len);
+}
+
+/* Figure out what command this stream is telling us to do */
+static int sandbox_sf_process_cmd(struct sandbox_spi_flash *sbsf, const u8 *rx,
+				  u8 *tx)
+{
+	enum sandbox_sf_state oldstate = sbsf->state;
+
+	/* We need to output a byte for the cmd byte we just ate */
+	if (tx)
+		sandbox_spi_tristate(tx, 1);
+
+	sbsf->cmd = rx[0];
+	switch (sbsf->cmd) {
+	case CMD_READ_ID:
+		sbsf->state = SF_ID;
+		sbsf->cmd = SF_ID;
+		break;
+	case CMD_READ_ARRAY_FAST:
+		sbsf->pad_addr_bytes = 1;
+	case CMD_READ_ARRAY_SLOW:
+	case CMD_PAGE_PROGRAM:
+		sbsf->state = SF_ADDR;
+		break;
+	case CMD_WRITE_DISABLE:
+		debug(" write disabled\n");
+		sbsf->status &= ~STAT_WEL;
+		break;
+	case CMD_READ_STATUS:
+		sbsf->state = SF_READ_STATUS;
+		break;
+	case CMD_READ_STATUS1:
+		sbsf->state = SF_READ_STATUS1;
+		break;
+	case CMD_WRITE_ENABLE:
+		debug(" write enabled\n");
+		sbsf->status |= STAT_WEL;
+		break;
+	case CMD_WRITE_STATUS:
+		sbsf->state = SF_WRITE_STATUS;
+		break;
+	default: {
+		int flags = sbsf->data->flags;
+
+		/* we only support erase here */
+		if (sbsf->cmd == CMD_ERASE_CHIP) {
+			sbsf->erase_size = sbsf->data->sector_size *
+				sbsf->data->nr_sectors;
+		} else if (sbsf->cmd == CMD_ERASE_4K && (flags & SECT_4K)) {
+			sbsf->erase_size = 4 << 10;
+		} else if (sbsf->cmd == CMD_ERASE_32K && (flags & SECT_32K)) {
+			sbsf->erase_size = 32 << 10;
+		} else if (sbsf->cmd == CMD_ERASE_64K &&
+			   !(flags & (SECT_4K | SECT_32K))) {
+			sbsf->erase_size = 64 << 10;
+		} else {
+			debug(" cmd unknown: %#x\n", sbsf->cmd);
+			return -EIO;
+		}
+		sbsf->state = SF_ADDR;
+		break;
+	}
+	}
+
+	if (oldstate != sbsf->state)
+		debug(" cmd: transition to %s state\n",
+		      sandbox_sf_state_name(sbsf->state));
+
+	return 0;
+}
+
+int sandbox_erase_part(struct sandbox_spi_flash *sbsf, int size)
+{
+	int todo;
+	int ret;
+
+	while (size > 0) {
+		todo = min(size, (int)sizeof(sandbox_sf_0xff));
+		ret = os_write(sbsf->fd, sandbox_sf_0xff, todo);
+		if (ret != todo)
+			return ret;
+		size -= todo;
+	}
+
+	return 0;
+}
+
+static int sandbox_sf_xfer(struct udevice *dev, unsigned int bitlen,
+			   const void *rxp, void *txp, unsigned long flags)
+{
+	struct sandbox_spi_flash *sbsf = dev_get_priv(dev);
+	const uint8_t *rx = rxp;
+	uint8_t *tx = txp;
+	uint cnt, pos = 0;
+	int bytes = bitlen / 8;
+	int ret;
+
+	debug("sandbox_sf: state:%x(%s) bytes:%u\n", sbsf->state,
+	      sandbox_sf_state_name(sbsf->state), bytes);
+
+	if ((flags & SPI_XFER_BEGIN))
+		sandbox_sf_cs_activate(dev);
+
+	if (sbsf->state == SF_CMD) {
+		/* Figure out the initial state */
+		ret = sandbox_sf_process_cmd(sbsf, rx, tx);
+		if (ret)
+			return ret;
+		++pos;
+	}
+
+	/* Process the remaining data */
+	while (pos < bytes) {
+		switch (sbsf->state) {
+		case SF_ID: {
+			u8 id;
+
+			debug(" id: off:%u tx:", sbsf->off);
+			if (sbsf->off < IDCODE_LEN) {
+				/* Extract correct byte from ID 0x00aabbcc */
+				id = sbsf->data->jedec >>
+					(8 * (IDCODE_LEN - 1 - sbsf->off));
+			} else {
+				id = 0;
+			}
+			debug("%d %02x\n", sbsf->off, id);
+			tx[pos++] = id;
+			++sbsf->off;
+			break;
+		}
+		case SF_ADDR:
+			debug(" addr: bytes:%u rx:%02x ", sbsf->addr_bytes,
+			      rx[pos]);
+
+			if (sbsf->addr_bytes++ < SF_ADDR_LEN)
+				sbsf->off = (sbsf->off << 8) | rx[pos];
+			debug("addr:%06x\n", sbsf->off);
+
+			if (tx)
+				sandbox_spi_tristate(&tx[pos], 1);
+			pos++;
+
+			/* See if we're done processing */
+			if (sbsf->addr_bytes <
+					SF_ADDR_LEN + sbsf->pad_addr_bytes)
+				break;
+
+			/* Next state! */
+			if (os_lseek(sbsf->fd, sbsf->off, OS_SEEK_SET) < 0) {
+				puts("sandbox_sf: os_lseek() failed");
+				return -EIO;
+			}
+			switch (sbsf->cmd) {
+			case CMD_READ_ARRAY_FAST:
+			case CMD_READ_ARRAY_SLOW:
+				sbsf->state = SF_READ;
+				break;
+			case CMD_PAGE_PROGRAM:
+				sbsf->state = SF_WRITE;
+				break;
+			default:
+				/* assume erase state ... */
+				sbsf->state = SF_ERASE;
+				goto case_sf_erase;
+			}
+			debug(" cmd: transition to %s state\n",
+			      sandbox_sf_state_name(sbsf->state));
+			break;
+		case SF_READ:
+			/*
+			 * XXX: need to handle exotic behavior:
+			 *      - reading past end of device
+			 */
+
+			cnt = bytes - pos;
+			debug(" tx: read(%u)\n", cnt);
+			assert(tx);
+			ret = os_read(sbsf->fd, tx + pos, cnt);
+			if (ret < 0) {
+				puts("sandbox_sf: os_read() failed\n");
+				return -EIO;
+			}
+			pos += ret;
+			break;
+		case SF_READ_STATUS:
+			debug(" read status: %#x\n", sbsf->status);
+			cnt = bytes - pos;
+			memset(tx + pos, sbsf->status, cnt);
+			pos += cnt;
+			break;
+		case SF_READ_STATUS1:
+			debug(" read status: %#x\n", sbsf->status);
+			cnt = bytes - pos;
+			memset(tx + pos, sbsf->status >> 8, cnt);
+			pos += cnt;
+			break;
+		case SF_WRITE_STATUS:
+			debug(" write status: %#x (ignored)\n", rx[pos]);
+			pos = bytes;
+			break;
+		case SF_WRITE:
+			/*
+			 * XXX: need to handle exotic behavior:
+			 *      - unaligned addresses
+			 *      - more than a page (256) worth of data
+			 *      - reading past end of device
+			 */
+			if (!(sbsf->status & STAT_WEL)) {
+				puts("sandbox_sf: write enable not set before write\n");
+				goto done;
+			}
+
+			cnt = bytes - pos;
+			debug(" rx: write(%u)\n", cnt);
+			if (tx)
+				sandbox_spi_tristate(&tx[pos], cnt);
+			ret = os_write(sbsf->fd, rx + pos, cnt);
+			if (ret < 0) {
+				puts("sandbox_spi: os_write() failed\n");
+				return -EIO;
+			}
+			pos += ret;
+			sbsf->status &= ~STAT_WEL;
+			break;
+		case SF_ERASE:
+ case_sf_erase: {
+			if (!(sbsf->status & STAT_WEL)) {
+				puts("sandbox_sf: write enable not set before erase\n");
+				goto done;
+			}
+
+			/* verify address is aligned */
+			if (sbsf->off & (sbsf->erase_size - 1)) {
+				debug(" sector erase: cmd:%#x needs align:%#x, but we got %#x\n",
+				      sbsf->cmd, sbsf->erase_size,
+				      sbsf->off);
+				sbsf->status &= ~STAT_WEL;
+				goto done;
+			}
+
+			debug(" sector erase addr: %u, size: %u\n", sbsf->off,
+			      sbsf->erase_size);
+
+			cnt = bytes - pos;
+			if (tx)
+				sandbox_spi_tristate(&tx[pos], cnt);
+			pos += cnt;
+
+			/*
+			 * TODO(vapier at gentoo.org): latch WIP in status, and
+			 * delay before clearing it ?
+			 */
+			ret = sandbox_erase_part(sbsf, sbsf->erase_size);
+			sbsf->status &= ~STAT_WEL;
+			if (ret) {
+				debug("sandbox_sf: Erase failed\n");
+				goto done;
+			}
+			goto done;
+		}
+		default:
+			debug(" ??? no idea what to do ???\n");
+			goto done;
+		}
+	}
+
+ done:
+	if (flags & SPI_XFER_END)
+		sandbox_sf_cs_deactivate(dev);
+	return pos == bytes ? 0 : -EIO;
+}
+
+int sandbox_sf_ofdata_to_platdata(struct udevice *dev)
+{
+	struct sandbox_spi_flash_plat_data *pdata = dev_get_platdata(dev);
+	const void *blob = gd->fdt_blob;
+	int node = dev->of_offset;
+
+	pdata->filename = fdt_getprop(blob, node, "sandbox,filename", NULL);
+	pdata->device_name = fdt_getprop(blob, node, "compatible", NULL);
+	if (!pdata->filename || !pdata->device_name) {
+		debug("%s: Missing properties, filename=%s, device_name=%s\n",
+		      __func__, pdata->filename, pdata->device_name);
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static const struct dm_spi_emul_ops sandbox_sf_emul_ops = {
+	.xfer          = sandbox_sf_xfer,
+};
+
+#ifdef CONFIG_SPI_FLASH
+static int sandbox_cmdline_cb_spi_sf(struct sandbox_state *state,
+				     const char *arg)
+{
+	unsigned long bus, cs;
+	const char *spec = sandbox_spi_parse_spec(arg, &bus, &cs);
+
+	if (!spec)
+		return 1;
+
+	/*
+	 * It is safe to not make a copy of 'spec' because it comes from the
+	 * command line.
+	 *
+	 * TODO(sjg at chromium.org): It would be nice if we could parse the
+	 * spec here, but the problem is that no U-Boot init has been done
+	 * yet. Perhaps we can figure something out.
+	 */
+	state->spi[bus][cs].spec = spec;
+	debug("%s:  Setting up spec '%s' for bus %ld, cs %ld\n", __func__,
+	      spec, bus, cs);
+
+	return 0;
+}
+SANDBOX_CMDLINE_OPT(spi_sf, 1, "connect a SPI flash: <bus>:<cs>:<id>:<file>");
+
+int sandbox_sf_bind_emul(struct sandbox_state *state, int busnum, int cs,
+			 struct udevice *bus, int of_offset, const char *spec)
+{
+	struct udevice *emul;
+	char name[20], *str;
+	struct driver *drv;
+	int ret;
+
+	/* now the emulator */
+	strncpy(name, spec, sizeof(name) - 6);
+	name[sizeof(name) - 6] = '\0';
+	strcat(name, "-emul");
+	str = strdup(name);
+	if (!str)
+		return -ENOMEM;
+	drv = lists_driver_lookup_name("sandbox_sf_emul");
+	if (!drv) {
+		puts("Cannot find sandbox_sf_emul driver\n");
+		return -ENOENT;
+	}
+	ret = device_bind(bus, drv, str, NULL, of_offset, &emul);
+	if (ret) {
+		printf("Cannot create emul device for spec '%s' (err=%d)\n",
+		       spec, ret);
+		return ret;
+	}
+	state->spi[busnum][cs].emul = emul;
+
+	return 0;
+}
+
+void sandbox_sf_unbind_emul(struct sandbox_state *state, int busnum, int cs)
+{
+	struct udevice *dev;
+
+	dev = state->spi[busnum][cs].emul;
+	device_remove(dev);
+	device_unbind(dev);
+	state->spi[busnum][cs].emul = NULL;
+}
+
+static int sandbox_sf_bind_bus_cs(struct sandbox_state *state, int busnum,
+				  int cs, const char *spec)
+{
+	struct udevice *bus, *slave;
+	int ret;
+
+	ret = uclass_find_device_by_seq(UCLASS_SPI, busnum, true, &bus);
+	if (ret) {
+		printf("Invalid bus %d for spec '%s' (err=%d)\n", busnum,
+		       spec, ret);
+		return ret;
+	}
+	ret = spi_find_chip_select(bus, cs, &slave);
+	if (!ret) {
+		printf("Chip select %d already exists for spec '%s'\n", cs,
+		       spec);
+		return -EEXIST;
+	}
+
+	ret = device_bind_driver(bus, "spi_flash_std", spec, &slave);
+	if (ret)
+		return ret;
+
+	return sandbox_sf_bind_emul(state, busnum, cs, bus, -1, spec);
+}
+
+int sandbox_spi_get_emul(struct sandbox_state *state,
+			 struct udevice *bus, struct udevice *slave,
+			 struct udevice **emulp)
+{
+	struct sandbox_spi_info *info;
+	int busnum = bus->seq;
+	int cs = spi_chip_select(slave);
+	int ret;
+
+	info = &state->spi[busnum][cs];
+	if (!info->emul) {
+		/* Use the same device tree node as the SPI flash device */
+		debug("%s: busnum=%u, cs=%u: binding SPI flash emulation: ",
+		      __func__, busnum, cs);
+		ret = sandbox_sf_bind_emul(state, busnum, cs, bus,
+					   slave->of_offset, slave->name);
+		if (ret) {
+			debug("failed (err=%d)\n", ret);
+			return ret;
+		}
+		debug("OK\n");
+	}
+	*emulp = info->emul;
+
+	return 0;
+}
+
+int dm_scan_other(bool pre_reloc_only)
+{
+	struct sandbox_state *state = state_get_current();
+	int busnum, cs;
+
+	if (pre_reloc_only)
+		return 0;
+	for (busnum = 0; busnum < CONFIG_SANDBOX_SPI_MAX_BUS; busnum++) {
+		for (cs = 0; cs < CONFIG_SANDBOX_SPI_MAX_CS; cs++) {
+			const char *spec = state->spi[busnum][cs].spec;
+			int ret;
+
+			if (spec) {
+				ret = sandbox_sf_bind_bus_cs(state, busnum,
+							     cs, spec);
+				if (ret) {
+					debug("%s: Bind failed for bus %d, cs %d\n",
+					      __func__, busnum, cs);
+					return ret;
+				}
+				debug("%s:  Setting up spec '%s' for bus %d, cs %d\n",
+				      __func__, spec, busnum, cs);
+			}
+		}
+	}
+
+	return 0;
+}
+#endif
+
+static const struct udevice_id sandbox_sf_ids[] = {
+	{ .compatible = "sandbox,spi-flash" },
+	{ }
+};
+
+U_BOOT_DRIVER(sandbox_sf_emul) = {
+	.name		= "sandbox_sf_emul",
+	.id		= UCLASS_SPI_EMUL,
+	.of_match	= sandbox_sf_ids,
+	.ofdata_to_platdata = sandbox_sf_ofdata_to_platdata,
+	.probe		= sandbox_sf_probe,
+	.remove		= sandbox_sf_remove,
+	.priv_auto_alloc_size = sizeof(struct sandbox_spi_flash),
+	.platdata_auto_alloc_size = sizeof(struct sandbox_spi_flash_plat_data),
+	.ops		= &sandbox_sf_emul_ops,
+};
Signature · 1 line
1.9.1
author
#46 lore raw

PATCH v7 47/87 mtd: spi-nor: sandbox: Use spi-nor header

In reply to Jagan Teki

Since sandbox moved to use spi-nor layer, this patch replaced the header changes from sf_internal.h to mtd/spi-nor.h

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
---
 drivers/mtd/spi-nor/sandbox.c | 46 +++++++++++++++++++++----------------------
 1 file changed, 23 insertions(+), 23 deletions(-)
drivers/mtd/spi-nor/sandbox.c +23 -23
index 53470b9..cc7b2a4 100644
@@ -12,10 +12,8 @@
 #include <dm.h>
 #include <malloc.h>
 #include <spi.h>
-#include <os.h>
-
 #include <spi_flash.h>
-#include "sf_internal.h"
+#include <os.h>
 
 #include <asm/getopt.h>
 #include <asm/spi.h>
@@ -24,6 +22,8 @@
 #include <dm/lists.h>
 #include <dm/uclass-internal.h>
 
+#include <linux/mtd/spi-nor.h>
+
 DECLARE_GLOBAL_DATA_PTR;
 
 /*
@@ -88,7 +88,7 @@ struct sandbox_spi_flash {
 	/* The current flash status (see STAT_XXX defines above) */
 	u16 status;
 	/* Data describing the flash we're emulating */
-	const struct spi_flash_params *data;
+	const struct spi_nor_info *data;
 	/* The file on disk to serv up data from */
 	int fd;
 };
@@ -112,7 +112,7 @@ static int sandbox_sf_probe(struct udevice *dev)
 	struct sandbox_spi_flash *sbsf = dev_get_priv(dev);
 	const char *file;
 	size_t len, idname_len;
-	const struct spi_flash_params *data;
+	const struct spi_nor_info *data;
 	struct sandbox_spi_flash_plat_data *pdata = dev_get_platdata(dev);
 	struct sandbox_state *state = state_get_current();
 	struct udevice *bus = dev->parent;
@@ -168,7 +168,7 @@ static int sandbox_sf_probe(struct udevice *dev)
 	}
 	debug("%s: device='%s'\n", __func__, spec);
 
-	for (data = spi_flash_params_table; data->name; data++) {
+	for (data = spi_nor_ids; data->name; data++) {
 		len = strlen(data->name);
 		if (idname_len != len)
 			continue;
@@ -256,45 +256,45 @@ static int sandbox_sf_process_cmd(struct sandbox_spi_flash *sbsf, const u8 *rx,
 
 	sbsf->cmd = rx[0];
 	switch (sbsf->cmd) {
-	case CMD_READ_ID:
+	case SNOR_OP_RDID:
 		sbsf->state = SF_ID;
 		sbsf->cmd = SF_ID;
 		break;
-	case CMD_READ_ARRAY_FAST:
+	case SNOR_OP_READ_FAST:
 		sbsf->pad_addr_bytes = 1;
-	case CMD_READ_ARRAY_SLOW:
-	case CMD_PAGE_PROGRAM:
+	case SNOR_OP_READ:
+	case SNOR_OP_PP:
 		sbsf->state = SF_ADDR;
 		break;
-	case CMD_WRITE_DISABLE:
+	case SNOR_OP_WRDI:
 		debug(" write disabled\n");
 		sbsf->status &= ~STAT_WEL;
 		break;
-	case CMD_READ_STATUS:
+	case SNOR_OP_RDSR:
 		sbsf->state = SF_READ_STATUS;
 		break;
-	case CMD_READ_STATUS1:
+	case SNOR_OP_RDCR:
 		sbsf->state = SF_READ_STATUS1;
 		break;
-	case CMD_WRITE_ENABLE:
+	case SNOR_OP_WREN:
 		debug(" write enabled\n");
 		sbsf->status |= STAT_WEL;
 		break;
-	case CMD_WRITE_STATUS:
+	case SNOR_OP_WRSR:
 		sbsf->state = SF_WRITE_STATUS;
 		break;
 	default: {
 		int flags = sbsf->data->flags;
 
 		/* we only support erase here */
-		if (sbsf->cmd == CMD_ERASE_CHIP) {
+		if (sbsf->cmd == SPINOR_OP_CHIP_ERASE) {
 			sbsf->erase_size = sbsf->data->sector_size *
-				sbsf->data->nr_sectors;
-		} else if (sbsf->cmd == CMD_ERASE_4K && (flags & SECT_4K)) {
+				sbsf->data->n_sectors;
+		} else if (sbsf->cmd == SNOR_OP_BE_4K && (flags & SECT_4K)) {
 			sbsf->erase_size = 4 << 10;
-		} else if (sbsf->cmd == CMD_ERASE_32K && (flags & SECT_32K)) {
+		} else if (sbsf->cmd == SNOR_OP_BE_32K && (flags & SECT_32K)) {
 			sbsf->erase_size = 32 << 10;
-		} else if (sbsf->cmd == CMD_ERASE_64K &&
+		} else if (sbsf->cmd == SNOR_OP_SE &&
 			   !(flags & (SECT_4K | SECT_32K))) {
 			sbsf->erase_size = 64 << 10;
 		} else {
@@ -395,11 +395,11 @@ static int sandbox_sf_xfer(struct udevice *dev, unsigned int bitlen,
 				return -EIO;
 			}
 			switch (sbsf->cmd) {
-			case CMD_READ_ARRAY_FAST:
-			case CMD_READ_ARRAY_SLOW:
+			case SNOR_OP_READ_FAST:
+			case SNOR_OP_READ:
 				sbsf->state = SF_READ;
 				break;
-			case CMD_PAGE_PROGRAM:
+			case SNOR_OP_PP:
 				sbsf->state = SF_WRITE;
 				break;
 			default:
Signature · 1 line
1.9.1
author
#47 lore raw

PATCH v7 48/87 mtd: spi-nor: sandbox: Fix ID exctract from spi_nor_info

In reply to Jagan Teki

This patch fix the id exctract from spi_nor_info ids.

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
---
 drivers/mtd/spi-nor/sandbox.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/mtd/spi-nor/sandbox.c +2 -1
index cc7b2a4..8bd06f4 100644
@@ -362,7 +362,8 @@ static int sandbox_sf_xfer(struct udevice *dev, unsigned int bitlen,
 			debug(" id: off:%u tx:", sbsf->off);
 			if (sbsf->off < IDCODE_LEN) {
 				/* Extract correct byte from ID 0x00aabbcc */
-				id = sbsf->data->jedec >>
+				id = ((JEDEC_MFR(sbsf->data) << 16) |
+					JEDEC_ID(sbsf->data)) >>
 					(8 * (IDCODE_LEN - 1 - sbsf->off));
 			} else {
 				id = 0;
Signature · 1 line
1.9.1
author
#48 lore raw

PATCH v7 49/87 mtd: spi-nor: Add SPI_NOR_SANDBOX

In reply to Jagan Teki

To follow spi-nor notation replaced CONFIG_SPI_FLASH_SANDBOX with CONFIG_SPI_NOR_SANDBOX.

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
---
 drivers/mtd/spi-nor/Kconfig  | 10 ++++++++++
 drivers/mtd/spi-nor/Makefile |  1 +
 2 files changed, 11 insertions(+)
drivers/mtd/spi-nor/Kconfig +10 -0
index 12dcede..cdef6aa 100644
@@ -98,6 +98,16 @@ config SPI_FLASH_WINBOND
 	help
 	  Add support for various Winbond SPI flash chips (W25xxx)
 
+config SPI_NOR_SANDBOX
+	bool "Support sandbox SPI flash device"
+	depends on SANDBOX
+	help
+	  Since sandbox cannot access real devices, an emulation mechanism is
+	  provided instead. Drivers can be connected up to the sandbox SPI
+	  bus (see CONFIG_SANDBOX_SPI) and SPI traffic will be routed to this
+	  device. Typically the contents of the emulated SPI flash device is
+	  stored in a file on the host filesystem.
+
 endif # MTD_SPI_NOR
 
 config MTD_DATAFLASH
drivers/mtd/spi-nor/Makefile +1 -0
index 525fccd..a4bd5ba 100644
@@ -17,3 +17,4 @@ endif
 
 obj-$(CONFIG_MTD_M25P80)	+= m25p80.o
 obj-$(CONFIG_MTD_DATAFLASH)	+= mtd_dataflash.o
+obj-$(CONFIG_SPI_NOR_SANDBOX)	+= sandbox.o
Signature · 1 line
1.9.1
author
#49 lore raw

PATCH v7 50/87 test/dm: Makefile: Use CONFIG_DM_MTD_SPI_NOR

In reply to Jagan Teki

Use CONFIG_DM_MTD_SPI_NOR instead of CONFIG_DM_SPI_FLASH

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
---
 test/dm/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
test/dm/Makefile +1 -1
index df2d71f..ae8e5c2 100644
@@ -28,7 +28,7 @@ obj-y += regmap.o
 obj-$(CONFIG_REMOTEPROC) += remoteproc.o
 obj-$(CONFIG_RESET) += reset.o
 obj-$(CONFIG_DM_RTC) += rtc.o
-obj-$(CONFIG_DM_SPI_FLASH) += sf.o
+obj-$(CONFIG_DM_MTD_SPI_NOR) += sf.o
 obj-$(CONFIG_DM_SPI) += spi.o
 obj-y += syscon.o
 obj-$(CONFIG_DM_USB) += usb.o
Signature · 1 line
1.9.1
author
#50 lore raw

PATCH v7 51/87 test/dm: spi: Use CONFIG_DM_MTD_SPI_NOR

In reply to Jagan Teki

Use CONFIG_DM_MTD_SPI_NOR instead of CONFIG_DM_SPI_FLASH

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
---
 test/dm/spi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
test/dm/spi.c +1 -1
index 2e27da7..f234c80 100644
@@ -118,7 +118,7 @@ static int dm_test_spi_xfer(struct unit_test_state *uts)
 	 * Since we are about to destroy all devices, we must tell sandbox
 	 * to forget the emulation device
 	 */
-#ifdef CONFIG_DM_SPI_FLASH
+#ifdef CONFIG_DM_MTD_SPI_NOR
 	sandbox_sf_unbind_emul(state_get_current(), busnum, cs);
 #endif
 
Signature · 1 line
1.9.1
author
#51 lore raw

PATCH v7 52/87 configs: sandbox: Enable SPI-NOR sandbox driver

In reply to Jagan Teki

- CONFIG_DM_SPI_FLASH
+ CONFIG_MTD
+ CONFIG_MTD_M25P80
+ CONFIG_MTD_SPI_NOR
+ CONFIG_SPI_NOR_SANDBOX

Replace CONFIG_SPI_FLASH with CONFIG_MTD_SPI_NOR

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
---
 arch/Kconfig                  |  2 +-
 configs/sandbox_defconfig     |  5 +++--
 drivers/mtd/spi-nor/sandbox.c |  2 +-
 include/spi_flash.h           | 14 +++++++-------
 4 files changed, 12 insertions(+), 11 deletions(-)
arch/Kconfig +1 -1
index ec12013..2c58b9a 100644
@@ -87,11 +87,11 @@ config SANDBOX
 	select SYS_GENERIC_BOARD
 	select SUPPORT_OF_CONTROL
 	select DM
-	select DM_SPI_FLASH
 	select DM_SERIAL
 	select DM_I2C
 	select DM_SPI
 	select DM_GPIO
+	select MTD
 
 config SH
 	bool "SuperH architecture"
configs/sandbox_defconfig +3 -2
index d69c9fc..6873d7a 100644
@@ -40,8 +40,9 @@ CONFIG_CROS_EC=y
 CONFIG_CROS_EC_SANDBOX=y
 CONFIG_RESET=y
 CONFIG_DM_MMC=y
-CONFIG_SPI_FLASH_SANDBOX=y
-CONFIG_SPI_FLASH=y
+CONFIG_SPI_NOR_SANDBOX=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_ATMEL=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_GIGADEVICE=y
drivers/mtd/spi-nor/sandbox.c +1 -1
index 8bd06f4..a3ffea2 100644
@@ -536,7 +536,7 @@ static const struct dm_spi_emul_ops sandbox_sf_emul_ops = {
 	.xfer          = sandbox_sf_xfer,
 };
 
-#ifdef CONFIG_SPI_FLASH
+#ifdef CONFIG_MTD_SPI_NOR
 static int sandbox_cmdline_cb_spi_sf(struct sandbox_state *state,
 				     const char *arg)
 {
include/spi_flash.h +7 -7
index f77a9c9..712ad61 100644
@@ -148,6 +148,13 @@ static inline int spi_flash_protect(spi_flash_t *info, u32 ofs,
 
 #ifdef CONFIG_DM_MTD_SPI_NOR
 
+struct sandbox_state;
+
+int sandbox_sf_bind_emul(struct sandbox_state *state, int busnum, int cs,
+			 struct udevice *bus, int of_offset, const char *spec);
+
+void sandbox_sf_unbind_emul(struct sandbox_state *state, int busnum, int cs);
+
 int spi_flash_probe_bus_cs(unsigned int busnum, unsigned int cs,
 			   unsigned int max_hz, unsigned int spi_mode,
 			   struct udevice **devp);
@@ -273,13 +280,6 @@ void sandbox_sf_unbind_emul(struct sandbox_state *state, int busnum, int cs);
 
 #elif !defined(CONFIG_MTD_SPI_NOR)
 
-struct sandbox_state;
-
-int sandbox_sf_bind_emul(struct sandbox_state *state, int busnum, int cs,
-			 struct udevice *bus, int of_offset, const char *spec);
-
-void sandbox_sf_unbind_emul(struct sandbox_state *state, int busnum, int cs);
-
 struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs,
 		unsigned int max_hz, unsigned int spi_mode);
 
Signature · 1 line
1.9.1
author
#52 lore raw

PATCH v7 53/87 test/dm: spi: Use m25p80 as driver name

In reply to Jagan Teki

Since new spi-nor using m25p80 as a driver name for probing flash chip using spi_get_bus_and_cs, hence replace the 'spi_flash_std' with 'm25p80

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
---
 test/dm/spi.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
test/dm/spi.c +3 -3
index f234c80..82ddd7e 100644
@@ -59,7 +59,7 @@ static int dm_test_spi_find(struct unit_test_state *uts)
 	 */
 	ut_asserteq(-ENODEV, spi_find_bus_and_cs(busnum, cs, &bus, &dev));
 	ut_asserteq(-ENOENT, spi_get_bus_and_cs(busnum, cs, speed, mode,
-						"spi_flash_std", "name", &bus,
+						"m25p80", "name", &bus,
 						&slave));
 	sandbox_sf_unbind_emul(state_get_current(), busnum, cs);
 	ut_assertok(spi_cs_info(bus, cs, &info));
@@ -70,7 +70,7 @@ static int dm_test_spi_find(struct unit_test_state *uts)
 					 "name"));
 	ut_assertok(spi_find_bus_and_cs(busnum, cs, &bus, &dev));
 	ut_assertok(spi_get_bus_and_cs(busnum, cs, speed, mode,
-				       "spi_flash_std", "name", &bus, &slave));
+				       "m25p80", "name", &bus, &slave));
 
 	ut_assertok(spi_cs_info(bus, cs, &info));
 	ut_asserteq_ptr(info.dev, slave->dev);
@@ -79,7 +79,7 @@ static int dm_test_spi_find(struct unit_test_state *uts)
 	ut_assertok(sandbox_sf_bind_emul(state, busnum, cs_b, bus, of_offset,
 					 "name"));
 	ut_assertok(spi_get_bus_and_cs(busnum, cs_b, speed, mode,
-				       "spi_flash_std", "name", &bus, &slave));
+				       "m25p80", "name", &bus, &slave));
 	ut_assertok(spi_cs_info(bus, cs_b, &info));
 	ut_asserteq_ptr(info.dev, slave->dev);
 
Signature · 1 line
1.9.1
author
#53 lore raw

PATCH v7 54/87 dts: sandbox: Use jedec, spi-nor compatible string

In reply to Jagan Teki

Use spi-nor flash driver compatible string as 'jedec,spi-nor' instead of spi-flash

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
---
 arch/sandbox/dts/test.dts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
arch/sandbox/dts/test.dts +1 -1
index 9b8d658..cdb21a5 100644
@@ -267,7 +267,7 @@
 		cs-gpios = <0>, <&gpio_a 0>;
 		spi.bin at 0 {
 			reg = <0>;
-			compatible = "spansion,m25p16", "spi-flash";
+			compatible = "spansion,m25p16", "jedec,spi-nor";
 			spi-max-frequency = <40000000>;
 			sandbox,filename = "spi.bin";
 		};
Signature · 1 line
1.9.1
author
#54 lore raw

PATCH v7 55/87 x86: Drop using spi_flash_dm_ops

In reply to Jagan Teki

Since spi-nor flash is part of MTD uclass, so replaced UCLASS_SPI_FLASH with UCLASS_MTD and use respective spi_flash operations as well.

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 arch/arm/mach-rockchip/rk3288-board-spl.c | 2 +-
 arch/x86/lib/mrccache.c                   | 9 ++++-----
 2 files changed, 5 insertions(+), 6 deletions(-)
arch/arm/mach-rockchip/rk3288-board-spl.c +1 -1
index e133cca..7aed5c6 100644
@@ -53,7 +53,7 @@ u32 spl_boot_device(void)
 	}
 	debug("Found device %s\n", dev->name);
 	switch (device_get_uclass_id(dev)) {
-	case UCLASS_SPI_FLASH:
+	case UCLASS_MTD:
 		return BOOT_DEVICE_SPI;
 	case UCLASS_MMC:
 		return BOOT_DEVICE_MMC1;
arch/x86/lib/mrccache.c +4 -5
index 67bace4..1d6ce35 100644
@@ -109,6 +109,7 @@ static struct mrc_data_container *find_next_mrc_cache(struct mrc_region *entry,
 int mrccache_update(struct udevice *sf, struct mrc_region *entry,
 		    struct mrc_data_container *cur)
 {
+	spi_flash_t *flash = dev_get_uclass_priv(sf);
 	struct mrc_data_container *cache;
 	ulong offset;
 	ulong base_addr;
@@ -139,7 +140,7 @@ int mrccache_update(struct udevice *sf, struct mrc_region *entry,
 		debug("Erasing the MRC cache region of %x bytes at %x\n",
 		      entry->length, entry->offset);
 
-		ret = spi_flash_erase_dm(sf, entry->offset, entry->length);
+		ret = spi_flash_erase(flash, entry->offset, entry->length);
 		if (ret) {
 			debug("Failed to erase flash region\n");
 			return ret;
@@ -150,8 +151,7 @@ int mrccache_update(struct udevice *sf, struct mrc_region *entry,
 	/* Write the data out */
 	offset = (ulong)cache - base_addr + entry->offset;
 	debug("Write MRC cache update to flash at %lx\n", offset);
-	ret = spi_flash_write_dm(sf, offset, cur->data_size + sizeof(*cur),
-				 cur);
+	ret = spi_flash_write(flash, offset, cur->data_size + sizeof(*cur), cur);
 	if (ret) {
 		debug("Failed to write to SPI flash\n");
 		return ret;
@@ -216,8 +216,7 @@ int mrccache_get_region(struct udevice **devp, struct mrc_region *entry)
 	entry->length = reg[1];
 
 	if (devp) {
-		ret = uclass_get_device_by_of_offset(UCLASS_SPI_FLASH, node,
-						     devp);
+		ret = uclass_get_device_by_of_offset(UCLASS_MTD, node, devp);
 		debug("ret = %d\n", ret);
 		if (ret)
 			return ret;
Signature · 1 line
1.9.1
author
#55 lore raw

PATCH v7 56/87 spi_flash: Use spi_flash_t

In reply to Jagan Teki

Use spi_flash_t instead of struct spi_flash.

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 board/Arcturus/ucp1020/cmd_arc.c         | 2 +-
 board/Synology/ds414/cmd_syno.c          | 2 +-
 board/buffalo/lsxl/lsxl.c                | 2 +-
 board/congatec/cgtqmx6eval/cgtqmx6eval.c | 2 +-
 board/davinci/da8xxevm/da850evm.c        | 2 +-
 board/renesas/sh7752evb/sh7752evb.c      | 4 ++--
 board/renesas/sh7753evb/sh7753evb.c      | 4 ++--
 board/renesas/sh7757lcr/sh7757lcr.c      | 6 +++---
 board/siemens/taurus/taurus.c            | 2 +-
 common/splash_source.c                   | 2 +-
 drivers/dfu/dfu_sf.c                     | 4 ++--
 drivers/net/fm/fm.c                      | 2 +-
 drivers/net/phy/cortina.c                | 2 +-
 include/dfu.h                            | 2 +-
 14 files changed, 19 insertions(+), 19 deletions(-)
board/Arcturus/ucp1020/cmd_arc.c +1 -1
index fa6b485..9f98d6d 100644
@@ -37,7 +37,7 @@
 #define FIRM_ADDR3 (CONFIG_ENV_SECT_SIZE + 0x200 - sizeof(smac))
 #define FIRM_ADDR4 (CONFIG_ENV_SECT_SIZE + 0x400 - sizeof(smac))
 
-static struct spi_flash *flash;
+static spi_flash_t *flash;
 char smac[4][18];
 
 static int ishwaddr(char *hwaddr)
board/Synology/ds414/cmd_syno.c +1 -1
index 20544e2..1d0f3e7 100644
@@ -27,7 +27,7 @@ static int do_syno_populate(int argc, char * const argv[])
 	unsigned int cs = CONFIG_SF_DEFAULT_CS;
 	unsigned int speed = CONFIG_SF_DEFAULT_SPEED;
 	unsigned int mode = CONFIG_SF_DEFAULT_MODE;
-	struct spi_flash *flash;
+	spi_flash_t *flash;
 	unsigned long addr = 0x80000; /* XXX: parameterize this? */
 	loff_t offset = 0x007d0000;
 	loff_t len = 0x00010000;
board/buffalo/lsxl/lsxl.c +1 -1
index 0f37345..298d26e 100644
@@ -211,7 +211,7 @@ void check_enetaddr(void)
 
 static void erase_environment(void)
 {
-	struct spi_flash *flash;
+	spi_flash_t *flash;
 
 	printf("Erasing environment..\n");
 	flash = spi_flash_probe(0, 0, 1000000, SPI_MODE_3);
board/congatec/cgtqmx6eval/cgtqmx6eval.c +1 -1
index 225de7c..8db2b9e 100644
@@ -1005,7 +1005,7 @@ static void conv_ascii(unsigned char *dst, unsigned char *src, int len)
 #define CFG_MFG_ADDR_OFFSET	(spi->size - SZ_16K)
 static bool is_2gb(void)
 {
-	struct spi_flash *spi;
+	spi_flash_t *spi;
 	int ret;
 	char buf[sizeof(struct mfgdata)];
 	struct mfgdata *data = (struct mfgdata *)buf;
board/davinci/da8xxevm/da850evm.c +1 -1
index b82385a..356d3ce 100644
@@ -49,7 +49,7 @@ DECLARE_GLOBAL_DATA_PTR;
 #ifdef CONFIG_MAC_ADDR_IN_SPIFLASH
 static int get_mac_addr(u8 *addr)
 {
-	struct spi_flash *flash;
+	spi_flash_t *flash;
 	int ret;
 
 	flash = spi_flash_probe(CFG_MAC_ADDR_SPI_BUS, CFG_MAC_ADDR_SPI_CS,
board/renesas/sh7752evb/sh7752evb.c +2 -2
index 3aad532..35360fd 100644
@@ -185,7 +185,7 @@ int board_mmc_init(bd_t *bis)
 
 static int get_sh_eth_mac_raw(unsigned char *buf, int size)
 {
-	struct spi_flash *spi;
+	spi_flash_t *spi;
 	int ret;
 
 	spi = spi_flash_probe(0, 0, 1000000, SPI_MODE_3);
@@ -254,7 +254,7 @@ int do_write_mac(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
 	int i, ret;
 	char mac_string[256];
-	struct spi_flash *spi;
+	spi_flash_t *spi;
 	unsigned char *buf;
 
 	if (argc != 3) {
board/renesas/sh7753evb/sh7753evb.c +2 -2
index 52a1906..8d609ec 100644
@@ -201,7 +201,7 @@ int board_mmc_init(bd_t *bis)
 
 static int get_sh_eth_mac_raw(unsigned char *buf, int size)
 {
-	struct spi_flash *spi;
+	spi_flash_t *spi;
 	int ret;
 
 	spi = spi_flash_probe(0, 0, 1000000, SPI_MODE_3);
@@ -270,7 +270,7 @@ int do_write_mac(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
 	int i, ret;
 	char mac_string[256];
-	struct spi_flash *spi;
+	spi_flash_t *spi;
 	unsigned char *buf;
 
 	if (argc != 3) {
board/renesas/sh7757lcr/sh7757lcr.c +3 -3
index ddcf275..9793f1f 100644
@@ -30,7 +30,7 @@ static void init_gctrl(void)
 
 static int init_pcie_bridge_from_spi(void *buf, size_t size)
 {
-	struct spi_flash *spi;
+	spi_flash_t *spi;
 	int ret;
 	unsigned long pcie_addr;
 
@@ -256,7 +256,7 @@ int board_mmc_init(bd_t *bis)
 
 static int get_sh_eth_mac_raw(unsigned char *buf, int size)
 {
-	struct spi_flash *spi;
+	spi_flash_t *spi;
 	int ret;
 
 	spi = spi_flash_probe(0, 0, 1000000, SPI_MODE_3);
@@ -381,7 +381,7 @@ int do_write_mac(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
 	int i, ret;
 	char mac_string[256];
-	struct spi_flash *spi;
+	spi_flash_t *spi;
 	unsigned char *buf;
 
 	if (argc != 5) {
board/siemens/taurus/taurus.c +1 -1
index b0385d8..14907c8 100644
@@ -121,7 +121,7 @@ void spl_board_init(void)
 
 	/* check for recovery mode */
 	if (at91_is_recovery() == 1) {
-		struct spi_flash *flash;
+		spi_flash_t *flash;
 
 		puts("Recovery button pressed\n");
 		nand_init();
common/splash_source.c +1 -1
index a09dd4b..3393f73 100644
@@ -20,7 +20,7 @@
 DECLARE_GLOBAL_DATA_PTR;
 
 #ifdef CONFIG_SPI_FLASH
-static struct spi_flash *sf;
+static spi_flash_t *sf;
 static int splash_sf_read_raw(u32 bmp_load_addr, int offset, size_t read_size)
 {
 	if (!sf) {
drivers/dfu/dfu_sf.c +2 -2
index 13e7f92..48eb546 100644
@@ -63,14 +63,14 @@ static void dfu_free_entity_sf(struct dfu_entity *dfu)
 	spi_flash_free(dfu->data.sf.dev);
 }
 
-static struct spi_flash *parse_dev(char *devstr)
+static spi_flash_t *parse_dev(char *devstr)
 {
 	unsigned int bus;
 	unsigned int cs;
 	unsigned int speed = CONFIG_SF_DEFAULT_SPEED;
 	unsigned int mode = CONFIG_SF_DEFAULT_MODE;
 	char *s, *endp;
-	struct spi_flash *dev;
+	spi_flash_t *dev;
 
 	s = strsep(&devstr, ":");
 	if (!s || !*s || (bus = simple_strtoul(s, &endp, 0), *endp)) {
drivers/net/fm/fm.c +1 -1
index e2a8ed3..9647ec1 100644
@@ -367,7 +367,7 @@ int fm_init_common(int index, struct ccsr_fman *reg)
 			CONFIG_SYS_FMAN_FW_ADDR, rc);
 	}
 #elif defined(CONFIG_SYS_QE_FW_IN_SPIFLASH)
-	struct spi_flash *ucode_flash;
+	spi_flash_t *ucode_flash;
 	void *addr = malloc(CONFIG_SYS_QE_FMAN_FW_LENGTH);
 	int ret = 0;
 
drivers/net/phy/cortina.c +1 -1
index f975fd8..f7961a4 100644
@@ -147,7 +147,7 @@ void cs4340_upload_firmware(struct phy_device *phydev)
 	}
 #elif defined(CONFIG_SYS_CORTINA_FW_IN_SPIFLASH)
 	int ret;
-	struct spi_flash *ucode_flash;
+	spi_flash_t *ucode_flash;
 
 	addr = malloc(CONFIG_CORTINA_FW_LENGTH);
 	ucode_flash = spi_flash_probe(CONFIG_ENV_SPI_BUS, CONFIG_ENV_SPI_CS,
include/dfu.h +1 -1
index f39d3f1..28d263d 100644
@@ -73,7 +73,7 @@ struct ram_internal_data {
 };
 
 struct sf_internal_data {
-	struct spi_flash *dev;
+	spi_flash_t *dev;
 
 	/* RAW programming */
 	u64 start;
Signature · 1 line
1.9.1
author
#56 lore raw

PATCH v7 57/87 defconfig: zynq_zc770_xm013: Enable ZYNQ_QSPI

In reply to Jagan Teki

Use zynq qspi driver for zynq zc770_xm013 board.

Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 configs/zynq_zc770_xm013_defconfig | 1 +
 1 file changed, 1 insertion(+)
configs/zynq_zc770_xm013_defconfig +1 -0
index 9672940..9feaca8 100644
@@ -17,3 +17,4 @@ CONFIG_SPL_DM_SEQ_ALIAS=y
 CONFIG_SPI_FLASH=y
 CONFIG_SPI_FLASH_BAR=y
 CONFIG_ZYNQ_GEM=y
+CONFIG_ZYNQ_QSPI=y
Signature · 1 line
1.9.1
author
#57 lore raw

PATCH v7 58/87 configs: Drop CONFIG_SPI_FLASH_MTD

In reply to Jagan Teki

Since mtd support is part of spi-nor core, hence removed legacy defines.

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 include/configs/aristainetos-common.h | 1 -
 include/configs/gw_ventana.h          | 1 -
 include/configs/socfpga_common.h      | 1 -
 3 files changed, 3 deletions(-)
include/configs/aristainetos-common.h +0 -1
index efbf816..d9e14b2 100644
@@ -42,7 +42,6 @@
 #define CONFIG_PHY_MICREL
 
 #define CONFIG_CMD_SF
-#define CONFIG_SPI_FLASH_MTD
 #define CONFIG_MXC_SPI
 #define CONFIG_SF_DEFAULT_SPEED		20000000
 #define CONFIG_SF_DEFAULT_MODE		SPI_MODE_0
include/configs/gw_ventana.h +0 -1
index 38c921a..cf71f21 100644
@@ -68,7 +68,6 @@
 #define CONFIG_CMD_SF
 #ifdef CONFIG_CMD_SF
   #define CONFIG_MXC_SPI
-  #define CONFIG_SPI_FLASH_MTD
   #define CONFIG_SPI_FLASH_BAR
   #define CONFIG_SF_DEFAULT_BUS              0
   #define CONFIG_SF_DEFAULT_CS               0
include/configs/socfpga_common.h +0 -1
index 56d32e6..b002260 100644
@@ -206,7 +206,6 @@ unsigned int cm_get_l4_sp_clk_hz(void);
  */
 /* Enable multiple SPI NOR flash manufacturers */
 #ifndef CONFIG_SPL_BUILD
-#define CONFIG_SPI_FLASH_MTD
 #define CONFIG_CMD_MTDPARTS
 #define CONFIG_MTD_DEVICE
 #define CONFIG_MTD_PARTITIONS
Signature · 1 line
1.9.1
author
#58 lore raw

PATCH v7 59/87 config: Enable SPI-NOR framework

In reply to Jagan Teki

- CONFIG_DM_SPI_FLASH
- CONFIG_SPI_FLASH
- CONFIG_SPL_SPI_FLASH_SUPPORT
+ CONFIG_MTD
+ CONFIG_MTD_M25P80
+ CONFIG_MTD_SPI_NOR
+ CONFIG_SPL_SPI_NOR_SUPPORT
+ CONFIG_SPL_MTD_SUPPORT

for conditional construct
CONFIG_SPI_FLASH => CONFIG_MTD_SPI_NOR

Cc Tom Rini <[email protected]>
Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc York Sun <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 arch/Kconfig                                           |  2 +-
 arch/arm/Kconfig                                       | 11 ++++++-----
 arch/arm/mach-rockchip/Kconfig                         |  2 +-
 arch/arm/mach-tegra/Kconfig                            |  2 +-
 board/davinci/ea20/ea20.c                              |  2 +-
 configs/B4420QDS_NAND_defconfig                        |  3 ++-
 configs/B4420QDS_SPIFLASH_defconfig                    |  3 ++-
 configs/B4420QDS_defconfig                             |  3 ++-
 configs/B4860QDS_NAND_defconfig                        |  3 ++-
 configs/B4860QDS_SECURE_BOOT_defconfig                 |  3 ++-
 configs/B4860QDS_SPIFLASH_defconfig                    |  3 ++-
 configs/B4860QDS_SRIO_PCIE_BOOT_defconfig              |  3 ++-
 configs/B4860QDS_defconfig                             |  3 ++-
 configs/BSC9131RDB_NAND_SYSCLK100_defconfig            |  3 ++-
 configs/BSC9131RDB_NAND_defconfig                      |  3 ++-
 configs/BSC9131RDB_SPIFLASH_SYSCLK100_defconfig        |  3 ++-
 configs/BSC9131RDB_SPIFLASH_defconfig                  |  3 ++-
 configs/BSC9132QDS_NAND_DDRCLK100_SECURE_defconfig     |  3 ++-
 configs/BSC9132QDS_NAND_DDRCLK100_defconfig            |  3 ++-
 configs/BSC9132QDS_NAND_DDRCLK133_SECURE_defconfig     |  3 ++-
 configs/BSC9132QDS_NAND_DDRCLK133_defconfig            |  3 ++-
 configs/BSC9132QDS_NOR_DDRCLK100_SECURE_defconfig      |  3 ++-
 configs/BSC9132QDS_NOR_DDRCLK100_defconfig             |  3 ++-
 configs/BSC9132QDS_NOR_DDRCLK133_SECURE_defconfig      |  3 ++-
 configs/BSC9132QDS_NOR_DDRCLK133_defconfig             |  3 ++-
 configs/BSC9132QDS_SDCARD_DDRCLK100_SECURE_defconfig   |  3 ++-
 configs/BSC9132QDS_SDCARD_DDRCLK100_defconfig          |  3 ++-
 configs/BSC9132QDS_SDCARD_DDRCLK133_SECURE_defconfig   |  3 ++-
 configs/BSC9132QDS_SDCARD_DDRCLK133_defconfig          |  3 ++-
 configs/BSC9132QDS_SPIFLASH_DDRCLK100_SECURE_defconfig |  3 ++-
 configs/BSC9132QDS_SPIFLASH_DDRCLK100_defconfig        |  3 ++-
 configs/BSC9132QDS_SPIFLASH_DDRCLK133_SECURE_defconfig |  3 ++-
 configs/BSC9132QDS_SPIFLASH_DDRCLK133_defconfig        |  3 ++-
 configs/C29XPCIE_NAND_defconfig                        |  3 ++-
 configs/C29XPCIE_NOR_SECBOOT_defconfig                 |  3 ++-
 configs/C29XPCIE_SPIFLASH_SECBOOT_defconfig            |  3 ++-
 configs/C29XPCIE_SPIFLASH_defconfig                    |  3 ++-
 configs/C29XPCIE_defconfig                             |  3 ++-
 configs/M52277EVB_defconfig                            |  3 ++-
 configs/M52277EVB_stmicro_defconfig                    |  3 ++-
 configs/M54418TWR_defconfig                            |  3 ++-
 configs/M54418TWR_nand_mii_defconfig                   |  3 ++-
 configs/M54418TWR_nand_rmii_defconfig                  |  3 ++-
 configs/M54418TWR_nand_rmii_lowfreq_defconfig          |  3 ++-
 configs/M54418TWR_serial_mii_defconfig                 |  3 ++-
 configs/M54418TWR_serial_rmii_defconfig                |  3 ++-
 configs/M54451EVB_defconfig                            |  3 ++-
 configs/M54451EVB_stmicro_defconfig                    |  3 ++-
 configs/M54455EVB_a66_defconfig                        |  3 ++-
 configs/M54455EVB_defconfig                            |  3 ++-
 configs/M54455EVB_i66_defconfig                        |  3 ++-
 configs/M54455EVB_intel_defconfig                      |  3 ++-
 configs/M54455EVB_stm33_defconfig                      |  3 ++-
 configs/MPC8536DS_36BIT_defconfig                      |  3 ++-
 configs/MPC8536DS_SDCARD_defconfig                     |  3 ++-
 configs/MPC8536DS_SPIFLASH_defconfig                   |  3 ++-
 configs/MPC8536DS_defconfig                            |  3 ++-
 configs/P1010RDB-PA_36BIT_NAND_SECBOOT_defconfig       |  3 ++-
 configs/P1010RDB-PA_36BIT_NAND_defconfig               |  3 ++-
 configs/P1010RDB-PA_36BIT_NOR_SECBOOT_defconfig        |  3 ++-
 configs/P1010RDB-PA_36BIT_NOR_defconfig                |  3 ++-
 configs/P1010RDB-PA_36BIT_SDCARD_defconfig             |  3 ++-
 configs/P1010RDB-PA_36BIT_SPIFLASH_SECBOOT_defconfig   |  3 ++-
 configs/P1010RDB-PA_36BIT_SPIFLASH_defconfig           |  3 ++-
 configs/P1010RDB-PA_NAND_SECBOOT_defconfig             |  3 ++-
 configs/P1010RDB-PA_NAND_defconfig                     |  3 ++-
 configs/P1010RDB-PA_NOR_SECBOOT_defconfig              |  3 ++-
 configs/P1010RDB-PA_NOR_defconfig                      |  3 ++-
 configs/P1010RDB-PA_SDCARD_defconfig                   |  3 ++-
 configs/P1010RDB-PA_SPIFLASH_SECBOOT_defconfig         |  3 ++-
 configs/P1010RDB-PA_SPIFLASH_defconfig                 |  3 ++-
 configs/P1010RDB-PB_36BIT_NAND_SECBOOT_defconfig       |  3 ++-
 configs/P1010RDB-PB_36BIT_NAND_defconfig               |  3 ++-
 configs/P1010RDB-PB_36BIT_NOR_SECBOOT_defconfig        |  3 ++-
 configs/P1010RDB-PB_36BIT_NOR_defconfig                |  3 ++-
 configs/P1010RDB-PB_36BIT_SDCARD_defconfig             |  3 ++-
 configs/P1010RDB-PB_36BIT_SPIFLASH_SECBOOT_defconfig   |  3 ++-
 configs/P1010RDB-PB_36BIT_SPIFLASH_defconfig           |  3 ++-
 configs/P1010RDB-PB_NAND_SECBOOT_defconfig             |  3 ++-
 configs/P1010RDB-PB_NAND_defconfig                     |  3 ++-
 configs/P1010RDB-PB_NOR_SECBOOT_defconfig              |  3 ++-
 configs/P1010RDB-PB_NOR_defconfig                      |  3 ++-
 configs/P1010RDB-PB_SDCARD_defconfig                   |  3 ++-
 configs/P1010RDB-PB_SPIFLASH_SECBOOT_defconfig         |  3 ++-
 configs/P1010RDB-PB_SPIFLASH_defconfig                 |  3 ++-
 configs/P1020RDB-PC_36BIT_NAND_defconfig               |  3 ++-
 configs/P1020RDB-PC_36BIT_SDCARD_defconfig             |  3 ++-
 configs/P1020RDB-PC_36BIT_SPIFLASH_defconfig           |  3 ++-
 configs/P1020RDB-PC_36BIT_defconfig                    |  3 ++-
 configs/P1020RDB-PC_NAND_defconfig                     |  3 ++-
 configs/P1020RDB-PC_SDCARD_defconfig                   |  3 ++-
 configs/P1020RDB-PC_SPIFLASH_defconfig                 |  3 ++-
 configs/P1020RDB-PC_defconfig                          |  3 ++-
 configs/P1020RDB-PD_NAND_defconfig                     |  3 ++-
 configs/P1020RDB-PD_SDCARD_defconfig                   |  3 ++-
 configs/P1020RDB-PD_SPIFLASH_defconfig                 |  3 ++-
 configs/P1020RDB-PD_defconfig                          |  3 ++-
 configs/P1021RDB-PC_36BIT_NAND_defconfig               |  3 ++-
 configs/P1021RDB-PC_36BIT_SDCARD_defconfig             |  3 ++-
 configs/P1021RDB-PC_36BIT_SPIFLASH_defconfig           |  3 ++-
 configs/P1021RDB-PC_36BIT_defconfig                    |  3 ++-
 configs/P1021RDB-PC_NAND_defconfig                     |  3 ++-
 configs/P1021RDB-PC_SDCARD_defconfig                   |  3 ++-
 configs/P1021RDB-PC_SPIFLASH_defconfig                 |  3 ++-
 configs/P1021RDB-PC_defconfig                          |  3 ++-
 configs/P1022DS_36BIT_NAND_defconfig                   |  3 ++-
 configs/P1022DS_36BIT_SDCARD_defconfig                 |  3 ++-
 configs/P1022DS_36BIT_SPIFLASH_defconfig               |  3 ++-
 configs/P1022DS_36BIT_defconfig                        |  3 ++-
 configs/P1022DS_NAND_defconfig                         |  3 ++-
 configs/P1022DS_SDCARD_defconfig                       |  3 ++-
 configs/P1022DS_SPIFLASH_defconfig                     |  3 ++-
 configs/P1022DS_defconfig                              |  3 ++-
 configs/P1024RDB_36BIT_defconfig                       |  3 ++-
 configs/P1024RDB_NAND_defconfig                        |  3 ++-
 configs/P1024RDB_SDCARD_defconfig                      |  3 ++-
 configs/P1024RDB_SPIFLASH_defconfig                    |  3 ++-
 configs/P1024RDB_defconfig                             |  3 ++-
 configs/P1025RDB_36BIT_defconfig                       |  3 ++-
 configs/P1025RDB_NAND_defconfig                        |  3 ++-
 configs/P1025RDB_SDCARD_defconfig                      |  3 ++-
 configs/P1025RDB_SPIFLASH_defconfig                    |  3 ++-
 configs/P1025RDB_defconfig                             |  3 ++-
 configs/P2020RDB-PC_36BIT_NAND_defconfig               |  3 ++-
 configs/P2020RDB-PC_36BIT_SDCARD_defconfig             |  3 ++-
 configs/P2020RDB-PC_36BIT_SPIFLASH_defconfig           |  3 ++-
 configs/P2020RDB-PC_36BIT_defconfig                    |  3 ++-
 configs/P2020RDB-PC_NAND_defconfig                     |  3 ++-
 configs/P2020RDB-PC_SDCARD_defconfig                   |  3 ++-
 configs/P2020RDB-PC_SPIFLASH_defconfig                 |  3 ++-
 configs/P2020RDB-PC_defconfig                          |  3 ++-
 configs/P2041RDB_NAND_defconfig                        |  3 ++-
 configs/P2041RDB_SDCARD_defconfig                      |  3 ++-
 configs/P2041RDB_SECURE_BOOT_defconfig                 |  3 ++-
 configs/P2041RDB_SPIFLASH_defconfig                    |  3 ++-
 configs/P2041RDB_SRIO_PCIE_BOOT_defconfig              |  3 ++-
 configs/P2041RDB_defconfig                             |  3 ++-
 configs/P3041DS_NAND_SECURE_BOOT_defconfig             |  3 ++-
 configs/P3041DS_NAND_defconfig                         |  3 ++-
 configs/P3041DS_SDCARD_defconfig                       |  3 ++-
 configs/P3041DS_SECURE_BOOT_defconfig                  |  3 ++-
 configs/P3041DS_SPIFLASH_defconfig                     |  3 ++-
 configs/P3041DS_SRIO_PCIE_BOOT_defconfig               |  3 ++-
 configs/P3041DS_defconfig                              |  3 ++-
 configs/P4080DS_SDCARD_defconfig                       |  3 ++-
 configs/P4080DS_SECURE_BOOT_defconfig                  |  3 ++-
 configs/P4080DS_SPIFLASH_defconfig                     |  3 ++-
 configs/P4080DS_SRIO_PCIE_BOOT_defconfig               |  3 ++-
 configs/P4080DS_defconfig                              |  3 ++-
 configs/P5020DS_NAND_SECURE_BOOT_defconfig             |  3 ++-
 configs/P5020DS_NAND_defconfig                         |  3 ++-
 configs/P5020DS_SDCARD_defconfig                       |  3 ++-
 configs/P5020DS_SECURE_BOOT_defconfig                  |  3 ++-
 configs/P5020DS_SPIFLASH_defconfig                     |  3 ++-
 configs/P5020DS_SRIO_PCIE_BOOT_defconfig               |  3 ++-
 configs/P5020DS_defconfig                              |  3 ++-
 configs/P5040DS_NAND_SECURE_BOOT_defconfig             |  3 ++-
 configs/P5040DS_NAND_defconfig                         |  3 ++-
 configs/P5040DS_SDCARD_defconfig                       |  3 ++-
 configs/P5040DS_SECURE_BOOT_defconfig                  |  3 ++-
 configs/P5040DS_SPIFLASH_defconfig                     |  3 ++-
 configs/P5040DS_defconfig                              |  3 ++-
 configs/T1023RDB_NAND_defconfig                        |  3 ++-
 configs/T1023RDB_SDCARD_defconfig                      |  3 ++-
 configs/T1023RDB_SECURE_BOOT_defconfig                 |  3 ++-
 configs/T1023RDB_SPIFLASH_defconfig                    |  3 ++-
 configs/T1023RDB_defconfig                             |  3 ++-
 configs/T1024QDS_DDR4_SECURE_BOOT_defconfig            |  3 ++-
 configs/T1024QDS_DDR4_defconfig                        |  3 ++-
 configs/T1024QDS_NAND_defconfig                        |  3 ++-
 configs/T1024QDS_SDCARD_defconfig                      |  3 ++-
 configs/T1024QDS_SECURE_BOOT_defconfig                 |  3 ++-
 configs/T1024QDS_SPIFLASH_defconfig                    |  3 ++-
 configs/T1024QDS_defconfig                             |  3 ++-
 configs/T1024RDB_NAND_defconfig                        |  3 ++-
 configs/T1024RDB_SDCARD_defconfig                      |  3 ++-
 configs/T1024RDB_SECURE_BOOT_defconfig                 |  3 ++-
 configs/T1024RDB_SPIFLASH_defconfig                    |  3 ++-
 configs/T1024RDB_defconfig                             |  3 ++-
 configs/T1040D4RDB_NAND_defconfig                      |  3 ++-
 configs/T1040D4RDB_SDCARD_defconfig                    |  3 ++-
 configs/T1040D4RDB_SECURE_BOOT_defconfig               |  3 ++-
 configs/T1040D4RDB_SPIFLASH_defconfig                  |  3 ++-
 configs/T1040D4RDB_defconfig                           |  3 ++-
 configs/T1040QDS_DDR4_defconfig                        |  3 ++-
 configs/T1040QDS_SECURE_BOOT_defconfig                 |  3 ++-
 configs/T1040QDS_defconfig                             |  3 ++-
 configs/T1040RDB_NAND_defconfig                        |  3 ++-
 configs/T1040RDB_SDCARD_defconfig                      |  3 ++-
 configs/T1040RDB_SECURE_BOOT_defconfig                 |  3 ++-
 configs/T1040RDB_SPIFLASH_defconfig                    |  3 ++-
 configs/T1040RDB_defconfig                             |  3 ++-
 configs/T1042D4RDB_NAND_defconfig                      |  3 ++-
 configs/T1042D4RDB_SDCARD_defconfig                    |  3 ++-
 configs/T1042D4RDB_SECURE_BOOT_defconfig               |  3 ++-
 configs/T1042D4RDB_SPIFLASH_defconfig                  |  3 ++-
 configs/T1042D4RDB_defconfig                           |  3 ++-
 configs/T1042RDB_PI_NAND_defconfig                     |  3 ++-
 configs/T1042RDB_PI_SDCARD_defconfig                   |  3 ++-
 configs/T1042RDB_PI_SPIFLASH_defconfig                 |  3 ++-
 configs/T1042RDB_PI_defconfig                          |  3 ++-
 configs/T1042RDB_SECURE_BOOT_defconfig                 |  3 ++-
 configs/T1042RDB_defconfig                             |  3 ++-
 configs/T2080QDS_NAND_defconfig                        |  3 ++-
 configs/T2080QDS_SDCARD_defconfig                      |  3 ++-
 configs/T2080QDS_SECURE_BOOT_defconfig                 |  3 ++-
 configs/T2080QDS_SPIFLASH_defconfig                    |  3 ++-
 configs/T2080QDS_SRIO_PCIE_BOOT_defconfig              |  3 ++-
 configs/T2080QDS_defconfig                             |  3 ++-
 configs/T2080RDB_NAND_defconfig                        |  3 ++-
 configs/T2080RDB_SDCARD_defconfig                      |  3 ++-
 configs/T2080RDB_SECURE_BOOT_defconfig                 |  3 ++-
 configs/T2080RDB_SPIFLASH_defconfig                    |  3 ++-
 configs/T2080RDB_SRIO_PCIE_BOOT_defconfig              |  3 ++-
 configs/T2080RDB_defconfig                             |  3 ++-
 configs/T2081QDS_NAND_defconfig                        |  3 ++-
 configs/T2081QDS_SDCARD_defconfig                      |  3 ++-
 configs/T2081QDS_SPIFLASH_defconfig                    |  3 ++-
 configs/T2081QDS_SRIO_PCIE_BOOT_defconfig              |  3 ++-
 configs/T2081QDS_defconfig                             |  3 ++-
 configs/T4160QDS_NAND_defconfig                        |  3 ++-
 configs/T4160QDS_SDCARD_defconfig                      |  3 ++-
 configs/T4160QDS_SECURE_BOOT_defconfig                 |  3 ++-
 configs/T4160QDS_defconfig                             |  3 ++-
 configs/T4160RDB_defconfig                             |  3 ++-
 configs/T4240QDS_NAND_defconfig                        |  3 ++-
 configs/T4240QDS_SDCARD_defconfig                      |  3 ++-
 configs/T4240QDS_SECURE_BOOT_defconfig                 |  3 ++-
 configs/T4240QDS_SRIO_PCIE_BOOT_defconfig              |  3 ++-
 configs/T4240QDS_defconfig                             |  3 ++-
 configs/T4240RDB_SDCARD_defconfig                      |  3 ++-
 configs/T4240RDB_defconfig                             |  3 ++-
 configs/UCP1020_SPIFLASH_defconfig                     |  3 ++-
 configs/UCP1020_defconfig                              |  3 ++-
 configs/alt_defconfig                                  |  3 ++-
 configs/am335x_boneblack_defconfig                     |  3 ++-
 configs/am335x_boneblack_vboot_defconfig               |  3 ++-
 configs/am335x_evm_defconfig                           |  3 ++-
 configs/am335x_evm_nor_defconfig                       |  3 ++-
 configs/am335x_evm_norboot_defconfig                   |  3 ++-
 configs/am335x_evm_spiboot_defconfig                   |  3 ++-
 configs/am335x_evm_usbspl_defconfig                    |  3 ++-
 configs/am335x_gp_evm_defconfig                        |  3 ++-
 configs/am437x_gp_evm_defconfig                        |  3 ++-
 configs/am437x_sk_evm_defconfig                        |  5 +++--
 configs/am43xx_evm_defconfig                           |  3 ++-
 configs/am43xx_evm_ethboot_defconfig                   |  3 ++-
 configs/am43xx_evm_qspiboot_defconfig                  |  3 ++-
 configs/am43xx_evm_usbhost_boot_defconfig              |  3 ++-
 configs/am57xx_evm_defconfig                           |  3 ++-
 configs/aristainetos2_defconfig                        |  3 ++-
 configs/aristainetos2b_defconfig                       |  3 ++-
 configs/aristainetos_defconfig                         |  3 ++-
 configs/at91sam9n12ek_mmc_defconfig                    |  3 ++-
 configs/at91sam9n12ek_nandflash_defconfig              |  3 ++-
 configs/at91sam9n12ek_spiflash_defconfig               |  3 ++-
 configs/at91sam9x5ek_dataflash_defconfig               |  3 ++-
 configs/at91sam9x5ek_mmc_defconfig                     |  3 ++-
 configs/at91sam9x5ek_nandflash_defconfig               |  3 ++-
 configs/at91sam9x5ek_spiflash_defconfig                |  3 ++-
 configs/atngw100_defconfig                             |  3 ++-
 configs/atngw100mkii_defconfig                         |  3 ++-
 configs/axm_defconfig                                  |  3 ++-
 configs/bayleybay_defconfig                            |  3 ++-
 configs/beaver_defconfig                               |  3 ++-
 configs/bf518f-ezbrd_defconfig                         |  3 ++-
 configs/bf525-ucr2_defconfig                           |  3 ++-
 configs/bf526-ezbrd_defconfig                          |  3 ++-
 configs/bf527-ad7160-eval_defconfig                    |  3 ++-
 configs/bf527-ezkit-v2_defconfig                       |  3 ++-
 configs/bf527-ezkit_defconfig                          |  3 ++-
 configs/bf527-sdp_defconfig                            |  3 ++-
 configs/bf537-minotaur_defconfig                       |  3 ++-
 configs/bf537-pnav_defconfig                           |  3 ++-
 configs/bf537-srv1_defconfig                           |  3 ++-
 configs/bf537-stamp_defconfig                          |  3 ++-
 configs/bf548-ezkit_defconfig                          |  3 ++-
 configs/bf561-acvilon_defconfig                        |  3 ++-
 configs/bf609-ezkit_defconfig                          |  3 ++-
 configs/bg0900_defconfig                               |  3 ++-
 configs/birdland_bav335a_defconfig                     |  3 ++-
 configs/birdland_bav335b_defconfig                     |  3 ++-
 configs/blackstamp_defconfig                           |  3 ++-
 configs/blackvme_defconfig                             |  3 ++-
 configs/br4_defconfig                                  |  3 ++-
 configs/cardhu_defconfig                               |  3 ++-
 configs/cgtqmx6eval_defconfig                          |  2 ++
 configs/chromebook_jerry_defconfig                     |  2 ++
 configs/chromebook_link_defconfig                      |  3 ++-
 configs/chromebook_samus_defconfig                     |  3 ++-
 configs/chromebox_panther_defconfig                    |  3 ++-
 configs/clearfog_defconfig                             |  3 ++-
 configs/cm_fx6_defconfig                               |  3 ++-
 configs/cm_t43_defconfig                               |  3 ++-
 configs/conga-qeval20-qa3-e3845_defconfig              |  3 ++-
 configs/controlcenterd_36BIT_SDCARD_DEVELOP_defconfig  |  3 ++-
 configs/controlcenterd_36BIT_SDCARD_defconfig          |  3 ++-
 configs/coreboot-x86_defconfig                         |  3 ++-
 configs/cougarcanyon2_defconfig                        |  3 ++-
 configs/crownbay_defconfig                             |  3 ++-
 configs/d2net_v2_defconfig                             |  3 ++-
 configs/da850_am18xxevm_defconfig                      |  3 ++-
 configs/da850evm_defconfig                             |  3 ++-
 configs/da850evm_direct_nor_defconfig                  |  3 ++-
 configs/dalmore_defconfig                              |  3 ++-
 configs/db-88f6820-gp_defconfig                        |  3 ++-
 configs/db-mv784mp-gp_defconfig                        |  3 ++-
 configs/dra72_evm_defconfig                            |  5 +++--
 configs/dra74_evm_defconfig                            |  5 +++--
 configs/dra7xx_evm_defconfig                           |  4 +++-
 configs/dra7xx_evm_qspiboot_defconfig                  |  4 +++-
 configs/dra7xx_evm_uart3_defconfig                     |  4 +++-
 configs/draco_defconfig                                |  3 ++-
 configs/dreamplug_defconfig                            |  3 ++-
 configs/ds414_defconfig                                |  3 ++-
 configs/e2220-1170_defconfig                           |  3 ++-
 configs/ea20_defconfig                                 |  3 ++-
 configs/ethernut5_defconfig                            |  3 ++-
 configs/firefly-rk3288_defconfig                       |  2 ++
 configs/galileo_defconfig                              |  3 ++-
 configs/gose_defconfig                                 |  3 ++-
 configs/gplugd_defconfig                               |  3 ++-
 configs/inetspace_v2_defconfig                         |  3 ++-
 configs/ip04_defconfig                                 |  3 ++-
 configs/jetson-tk1_defconfig                           |  3 ++-
 configs/k2e_evm_defconfig                              |  3 ++-
 configs/k2g_evm_defconfig                              |  3 ++-
 configs/k2hk_evm_defconfig                             |  3 ++-
 configs/k2l_evm_defconfig                              |  3 ++-
 configs/km_kirkwood_128m16_defconfig                   |  3 ++-
 configs/km_kirkwood_defconfig                          |  3 ++-
 configs/km_kirkwood_pci_defconfig                      |  3 ++-
 configs/kmcoge4_defconfig                              |  3 ++-
 configs/kmcoge5un_defconfig                            |  3 ++-
 configs/kmlion1_defconfig                              |  3 ++-
 configs/kmnusa_defconfig                               |  3 ++-
 configs/kmsugp1_defconfig                              |  3 ++-
 configs/kmsuv31_defconfig                              |  3 ++-
 configs/koelsch_defconfig                              |  3 ++-
 configs/kylin-rk3036_defconfig                         |  2 ++
 configs/lager_defconfig                                |  3 ++-
 configs/legoev3_defconfig                              |  3 ++-
 configs/ls1021aqds_sdcard_qspi_defconfig               |  3 ++-
 configs/ls1021atwr_qspi_defconfig                      |  4 +++-
 configs/ls1021atwr_sdcard_qspi_defconfig               |  3 ++-
 configs/ls1043aqds_defconfig                           |  3 ++-
 configs/ls1043aqds_lpuart_defconfig                    |  3 ++-
 configs/ls1043aqds_nand_defconfig                      |  3 ++-
 configs/ls1043aqds_nor_ddr3_defconfig                  |  3 ++-
 configs/ls1043aqds_qspi_defconfig                      |  3 ++-
 configs/ls1043aqds_sdcard_ifc_defconfig                |  3 ++-
 configs/ls1043aqds_sdcard_qspi_defconfig               |  3 ++-
 configs/ls1043ardb_SECURE_BOOT_defconfig               |  3 ++-
 configs/ls1043ardb_defconfig                           |  3 ++-
 configs/ls1043ardb_nand_defconfig                      |  3 ++-
 configs/ls1043ardb_sdcard_defconfig                    |  3 ++-
 configs/ls2080aqds_defconfig                           |  2 +-
 configs/ls2080ardb_defconfig                           |  2 +-
 configs/ls2085aqds_defconfig                           |  2 +-
 configs/ls2085ardb_defconfig                           |  2 +-
 configs/lschlv2_defconfig                              |  3 ++-
 configs/lsxhl_defconfig                                |  3 ++-
 configs/m28evk_defconfig                               |  3 ++-
 configs/ma5d4evk_defconfig                             |  3 ++-
 configs/marsboard_defconfig                            |  3 ++-
 configs/maxbcm_defconfig                               |  3 ++-
 configs/mgcoge3un_defconfig                            |  3 ++-
 configs/minnowmax_defconfig                            |  3 ++-
 configs/mx28evk_auart_console_defconfig                |  3 ++-
 configs/mx28evk_defconfig                              |  3 ++-
 configs/mx28evk_nand_defconfig                         |  3 ++-
 configs/mx28evk_spi_defconfig                          |  3 ++-
 configs/mx6dlsabreauto_defconfig                       |  3 ++-
 configs/mx6dlsabresd_defconfig                         |  3 ++-
 configs/mx6qpsabreauto_defconfig                       |  3 ++-
 configs/mx6qsabreauto_defconfig                        |  3 ++-
 configs/mx6qsabrelite_defconfig                        |  3 ++-
 configs/mx6qsabresd_defconfig                          |  3 ++-
 configs/mx6sabresd_spl_defconfig                       |  3 ++-
 configs/mx6slevk_defconfig                             |  3 ++-
 configs/mx6slevk_spinor_defconfig                      |  3 ++-
 configs/mx6slevk_spl_defconfig                         |  3 ++-
 configs/mx6sxsabreauto_defconfig                       |  3 ++-
 configs/mx6sxsabresd_defconfig                         |  3 ++-
 configs/mx6sxsabresd_spl_defconfig                     |  3 ++-
 configs/net2big_v2_defconfig                           |  3 ++-
 configs/netspace_lite_v2_defconfig                     |  3 ++-
 configs/netspace_max_v2_defconfig                      |  3 ++-
 configs/netspace_mini_v2_defconfig                     |  3 ++-
 configs/netspace_v2_defconfig                          |  3 ++-
 configs/nitrogen6dl2g_defconfig                        |  3 ++-
 configs/nitrogen6dl_defconfig                          |  3 ++-
 configs/nitrogen6q2g_defconfig                         |  3 ++-
 configs/nitrogen6q_defconfig                           |  3 ++-
 configs/nitrogen6s1g_defconfig                         |  3 ++-
 configs/nitrogen6s_defconfig                           |  3 ++-
 configs/nyan-big_defconfig                             |  3 ++-
 configs/omapl138_lcdk_defconfig                        |  3 ++-
 configs/ot1200_defconfig                               |  3 ++-
 configs/ot1200_spl_defconfig                           |  3 ++-
 configs/p2371-0000_defconfig                           |  3 ++-
 configs/p2371-2180_defconfig                           |  3 ++-
 configs/p2571_defconfig                                |  3 ++-
 configs/pcm051_rev1_defconfig                          |  3 ++-
 configs/pcm051_rev3_defconfig                          |  3 ++-
 configs/peach-pi_defconfig                             |  3 ++-
 configs/peach-pit_defconfig                            |  3 ++-
 configs/porter_defconfig                               |  3 ++-
 configs/portl2_defconfig                               |  3 ++-
 configs/pr1_defconfig                                  |  3 ++-
 configs/pxm2_defconfig                                 |  3 ++-
 configs/qemu-x86_defconfig                             |  3 ++-
 configs/rastaban_defconfig                             |  3 ++-
 configs/riotboard_defconfig                            |  3 ++-
 configs/rock2_defconfig                                |  2 ++
 configs/rut_defconfig                                  |  3 ++-
 configs/sama5d2_xplained_mmc_defconfig                 |  3 ++-
 configs/sama5d2_xplained_spiflash_defconfig            |  3 ++-
 configs/sama5d3xek_mmc_defconfig                       |  3 ++-
 configs/sama5d3xek_nandflash_defconfig                 |  3 ++-
 configs/sama5d3xek_spiflash_defconfig                  |  3 ++-
 configs/sama5d4_xplained_mmc_defconfig                 |  3 ++-
 configs/sama5d4_xplained_nandflash_defconfig           |  3 ++-
 configs/sama5d4_xplained_spiflash_defconfig            |  3 ++-
 configs/sama5d4ek_mmc_defconfig                        |  3 ++-
 configs/sama5d4ek_nandflash_defconfig                  |  3 ++-
 configs/sama5d4ek_spiflash_defconfig                   |  3 ++-
 configs/sh7752evb_defconfig                            |  3 ++-
 configs/sh7753evb_defconfig                            |  3 ++-
 configs/sh7757lcr_defconfig                            |  3 ++-
 configs/silk_defconfig                                 |  3 ++-
 configs/smdk5250_defconfig                             |  3 ++-
 configs/smdk5420_defconfig                             |  3 ++-
 configs/snow_defconfig                                 |  3 ++-
 configs/socfpga_arria5_defconfig                       |  3 ++-
 configs/socfpga_cyclone5_defconfig                     |  3 ++-
 configs/socfpga_de0_nano_soc_defconfig                 |  3 +++
 configs/socfpga_mcvevk_defconfig                       |  2 ++
 configs/socfpga_sockit_defconfig                       |  3 ++-
 configs/socfpga_socrates_defconfig                     |  3 ++-
 configs/socfpga_sr1500_defconfig                       |  3 ++-
 configs/spring_defconfig                               |  3 ++-
 configs/stout_defconfig                                |  3 ++-
 configs/taurus_defconfig                               |  3 ++-
 configs/tec-ng_defconfig                               |  3 ++-
 configs/theadorable_debug_defconfig                    |  3 ++-
 configs/theadorable_defconfig                          |  3 ++-
 configs/thuban_defconfig                               |  3 ++-
 configs/tqma6q_mba6_mmc_defconfig                      |  3 ++-
 configs/tqma6q_mba6_spi_defconfig                      |  3 ++-
 configs/tqma6s_mba6_mmc_defconfig                      |  3 ++-
 configs/tqma6s_mba6_spi_defconfig                      |  3 ++-
 configs/trimslice_defconfig                            |  3 ++-
 configs/tseries_spi_defconfig                          |  3 ++-
 configs/venice2_defconfig                              |  3 ++-
 configs/vf610twr_defconfig                             |  3 ++-
 configs/vf610twr_nand_defconfig                        |  3 ++-
 configs/vinco_defconfig                                |  3 ++-
 configs/zynq_microzed_defconfig                        |  3 ++-
 configs/zynq_zc702_defconfig                           |  3 ++-
 configs/zynq_zc706_defconfig                           |  3 ++-
 configs/zynq_zc770_xm010_defconfig                     |  3 ++-
 configs/zynq_zc770_xm013_defconfig                     |  3 ++-
 configs/zynq_zed_defconfig                             |  3 ++-
 configs/zynq_zybo_defconfig                            |  3 ++-
 include/configs/MPC8536DS.h                            |  2 +-
 include/configs/P1010RDB.h                             |  3 ++-
 include/configs/P1022DS.h                              |  3 ++-
 include/configs/T102xQDS.h                             |  3 ++-
 include/configs/T102xRDB.h                             |  3 ++-
 include/configs/T104xRDB.h                             |  3 ++-
 include/configs/T208xQDS.h                             |  5 +++--
 include/configs/T208xRDB.h                             |  5 +++--
 include/configs/UCP1020.h                              |  4 ++--
 include/configs/am335x_evm.h                           |  3 ++-
 include/configs/am43xx_evm.h                           |  2 +-
 include/configs/at91sam9n12ek.h                        |  3 ++-
 include/configs/at91sam9x5ek.h                         |  3 ++-
 include/configs/bav335x.h                              |  3 ++-
 include/configs/bfin_adi_common.h                      |  2 +-
 include/configs/cgtqmx6eval.h                          |  4 ++--
 include/configs/chromebook_jerry.h                     |  3 ++-
 include/configs/clearfog.h                             |  3 ++-
 include/configs/cm_fx6.h                               |  3 ++-
 include/configs/cm_t43.h                               |  3 ++-
 include/configs/da850evm.h                             |  6 ++++--
 include/configs/db-88f6820-gp.h                        |  3 ++-
 include/configs/db-mv784mp-gp.h                        |  3 ++-
 include/configs/dra7xx_evm.h                           |  5 +++--
 include/configs/dreamplug.h                            |  2 +-
 include/configs/ds414.h                                |  3 ++-
 include/configs/exynos5-common.h                       |  2 +-
 include/configs/gw_ventana.h                           | 10 +++++-----
 include/configs/ls1021atwr.h                           |  1 -
 include/configs/ls1043a_common.h                       |  2 +-
 include/configs/ls2080aqds.h                           |  3 ++-
 include/configs/ls2080ardb.h                           |  3 ++-
 include/configs/lsxl.h                                 |  2 +-
 include/configs/ma5d4evk.h                             |  3 ++-
 include/configs/maxbcm.h                               |  3 ++-
 include/configs/mx6ul_14x14_evk.h                      |  3 ++-
 include/configs/mx7dsabresd.h                          |  3 ++-
 include/configs/omapl138_lcdk.h                        |  3 ++-
 include/configs/ot1200.h                               |  3 ++-
 include/configs/p1_p2_rdb_pc.h                         |  5 +++--
 include/configs/pcm051.h                               |  3 ++-
 include/configs/pcm052.h                               |  3 ++-
 include/configs/rk3036_common.h                        |  1 -
 include/configs/rk3288_common.h                        |  1 -
 include/configs/sama5d2_xplained.h                     |  3 ++-
 include/configs/sama5d3xek.h                           |  3 ++-
 include/configs/sama5d4_xplained.h                     |  3 ++-
 include/configs/sama5d4ek.h                            |  3 ++-
 include/configs/siemens-am33x-common.h                 |  3 ++-
 include/configs/socfpga_common.h                       |  3 ++-
 include/configs/taurus.h                               |  3 ++-
 include/configs/tegra-common-usb-gadget.h              |  2 +-
 include/configs/theadorable.h                          |  3 ++-
 include/configs/ti_armv7_keystone2.h                   |  3 ++-
 include/configs/tseries.h                              |  3 ++-
 include/configs/zynq-common.h                          |  3 ++-
 521 files changed, 1041 insertions(+), 532 deletions(-)
arch/Kconfig +1 -1
index 2c58b9a..4aa4dd5 100644
@@ -113,7 +113,7 @@ config X86
 	select DM_SERIAL
 	select DM_GPIO
 	select DM_SPI
-	select DM_SPI_FLASH
+	select MTD
 
 endchoice
 
arch/arm/Kconfig +6 -5
index b22a04f..c6487ac 100644
@@ -120,7 +120,7 @@ config ARCH_MVEBU
 	select DM_ETH
 	select DM_SERIAL
 	select DM_SPI
-	select DM_SPI_FLASH
+	select MTD
 	select SPL_DM
 	select SPL_DM_SEQ_ALIAS
 	select SPL_OF_CONTROL
@@ -220,8 +220,9 @@ config TARGET_STV0991
 	select DM
 	select DM_SERIAL
 	select DM_SPI
-	select DM_SPI_FLASH
-	select SPI_FLASH
+	select MTD
+	select MTD_M25P80
+	select MTD_SPI_NOR
 
 config TARGET_X600
 	bool "Support x600"
@@ -424,7 +425,7 @@ config ARCH_EXYNOS
 	bool "Samsung EXYNOS"
 	select CPU_V7
 	select DM
-	select DM_SPI_FLASH
+	select MTD
 	select DM_SERIAL
 	select DM_SPI
 	select DM_GPIO
@@ -514,7 +515,7 @@ config ARCH_SOCFPGA
 	select OF_CONTROL
 	select SPL_OF_CONTROL
 	select DM
-	select DM_SPI_FLASH
+	select MTD
 	select DM_SPI
 
 config TARGET_CM_T43
arch/arm/mach-rockchip/Kconfig +1 -1
index d3bddb7..a515a5c 100644
@@ -32,7 +32,7 @@ config DM_SERIAL
 config DM_SPI
 	default y
 
-config DM_SPI_FLASH
+config MTD
 	default y
 
 config DM_I2C
arch/arm/mach-tegra/Kconfig +1 -1
index ba6983f..2bc8747 100644
@@ -12,7 +12,7 @@ config TEGRA_COMMON
 	select DM_PWM
 	select DM_SERIAL
 	select DM_SPI
-	select DM_SPI_FLASH
+	select MTD
 	select OF_CONTROL
 	select VIDCONSOLE_AS_LCD if DM_VIDEO
 
board/davinci/ea20/ea20.c +1 -1
index 66804d7..ef72d6b 100644
@@ -160,7 +160,7 @@ const struct pinmux_config halten_pin[] = {
 };
 
 static const struct pinmux_resource pinmuxes[] = {
-#ifdef CONFIG_SPI_FLASH
+#ifdef CONFIG_MTD_SPI_NOR
 	PINMUX_ITEM(spi1_pins),
 #endif
 	PINMUX_ITEM(uart_pins),
configs/B4420QDS_NAND_defconfig +2 -1
index 0e2b0a8..c343a26 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_B4420,RAMBOOT_PBL,SPL_FSL_PBL,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/B4420QDS_SPIFLASH_defconfig +2 -1
index 9875191..a0486c0 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_B4420,RAMBOOT_PBL,SPIFLASH,SYS_TEXT_BASE=0xFFF40000"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/B4420QDS_defconfig +2 -1
index c2f903b..8490edf 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_B4420"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/B4860QDS_NAND_defconfig +2 -1
index 5533cb3..108af5d 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_B4860,RAMBOOT_PBL,SPL_FSL_PBL,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/B4860QDS_SECURE_BOOT_defconfig +2 -1
index 051dccb..5ae9de8 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_B4860,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/B4860QDS_SPIFLASH_defconfig +2 -1
index e6807df..0bb8c60 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_B4860,RAMBOOT_PBL,SPIFLASH,SYS_TEXT_BASE=0xFFF40000"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/B4860QDS_SRIO_PCIE_BOOT_defconfig +2 -1
index b7832db..963a942 100644
@@ -8,7 +8,8 @@ CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_B4860,SRIO_PCIE_BOOT_SLAVE,SYS_TEXT_BASE=0xFFF40000"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/B4860QDS_defconfig +2 -1
index e68c19f..04f0672 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_B4860"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/BSC9131RDB_NAND_SYSCLK100_defconfig +2 -1
index a199806..98b2c75 100644
@@ -9,7 +9,8 @@ CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="BSC9131RDB,NAND,SYS_CLK_100"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SYS_NS16550=y
 CONFIG_FSL_ESPI=y
configs/BSC9131RDB_NAND_defconfig +2 -1
index 1f2d2b8..a146494 100644
@@ -9,7 +9,8 @@ CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="BSC9131RDB,NAND"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SYS_NS16550=y
 CONFIG_FSL_ESPI=y
configs/BSC9131RDB_SPIFLASH_SYSCLK100_defconfig +2 -1
index e9c3723..69718ad 100644
@@ -8,7 +8,8 @@ CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="BSC9131RDB,SPIFLASH,SYS_CLK_100"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SYS_NS16550=y
 CONFIG_FSL_ESPI=y
configs/BSC9131RDB_SPIFLASH_defconfig +2 -1
index f46c0ca..6673920 100644
@@ -8,7 +8,8 @@ CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="BSC9131RDB,SPIFLASH"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SYS_NS16550=y
 CONFIG_FSL_ESPI=y
configs/BSC9132QDS_NAND_DDRCLK100_SECURE_defconfig +2 -1
index b3829f5..d9726ab 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="BSC9132QDS,NAND_SECBOOT,SYS_CLK_100_DDR_100,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/BSC9132QDS_NAND_DDRCLK100_defconfig +2 -1
index 88f2ade..69bcfd7 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="BSC9132QDS,NAND,SYS_CLK_100_DDR_100"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/BSC9132QDS_NAND_DDRCLK133_SECURE_defconfig +2 -1
index 568470b..0cee1d6 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="BSC9132QDS,NAND_SECBOOT,SYS_CLK_100_DDR_133,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/BSC9132QDS_NAND_DDRCLK133_defconfig +2 -1
index 58bf069..d512def 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="BSC9132QDS,NAND,SYS_CLK_100_DDR_133"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/BSC9132QDS_NOR_DDRCLK100_SECURE_defconfig +2 -1
index 13e8325..d8653ca 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="BSC9132QDS,SYS_CLK_100_DDR_100,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/BSC9132QDS_NOR_DDRCLK100_defconfig +2 -1
index 92c4e28..09677c2 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="BSC9132QDS,SYS_CLK_100_DDR_100"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/BSC9132QDS_NOR_DDRCLK133_SECURE_defconfig +2 -1
index 291c879..1f7955e 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="BSC9132QDS,SYS_CLK_100_DDR_133,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/BSC9132QDS_NOR_DDRCLK133_defconfig +2 -1
index bb49265..3f2097d 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="BSC9132QDS,SYS_CLK_100_DDR_133"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/BSC9132QDS_SDCARD_DDRCLK100_SECURE_defconfig +2 -1
index 076a99e..bc8bffd 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="BSC9132QDS,SDCARD,SYS_CLK_100_DDR_100,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/BSC9132QDS_SDCARD_DDRCLK100_defconfig +2 -1
index 3e21ef4..b997cb0 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="BSC9132QDS,SDCARD,SYS_CLK_100_DDR_100"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/BSC9132QDS_SDCARD_DDRCLK133_SECURE_defconfig +2 -1
index 5c4ba30..b1c287e 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="BSC9132QDS,SDCARD,SYS_CLK_100_DDR_133,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/BSC9132QDS_SDCARD_DDRCLK133_defconfig +2 -1
index 047f315..3d5f683 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="BSC9132QDS,SDCARD,SYS_CLK_100_DDR_133"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/BSC9132QDS_SPIFLASH_DDRCLK100_SECURE_defconfig +2 -1
index 1aa92e5..4de2c88 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="BSC9132QDS,SPIFLASH,SYS_CLK_100_DDR_100,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/BSC9132QDS_SPIFLASH_DDRCLK100_defconfig +2 -1
index 66500e7..867a3c0 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="BSC9132QDS,SPIFLASH,SYS_CLK_100_DDR_100"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/BSC9132QDS_SPIFLASH_DDRCLK133_SECURE_defconfig +2 -1
index 3531479..45c3442 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="BSC9132QDS,SPIFLASH,SYS_CLK_100_DDR_133,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/BSC9132QDS_SPIFLASH_DDRCLK133_defconfig +2 -1
index 7ceec10..ed738f7 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="BSC9132QDS,SPIFLASH,SYS_CLK_100_DDR_133"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/C29XPCIE_NAND_defconfig +2 -1
index bea850f..8f927ee 100644
@@ -8,7 +8,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="C29XPCIE,36BIT,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
configs/C29XPCIE_NOR_SECBOOT_defconfig +2 -1
index c6e5e08..291051d 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="C29XPCIE,36BIT,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
configs/C29XPCIE_SPIFLASH_SECBOOT_defconfig +2 -1
index 53889f1..5035b66 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="C29XPCIE,36BIT,SPIFLASH,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
configs/C29XPCIE_SPIFLASH_defconfig +2 -1
index e236129..9e553c8 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="C29XPCIE,36BIT,SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
configs/C29XPCIE_defconfig +2 -1
index 214aff7..d421a5e 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="C29XPCIE,36BIT"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
configs/M52277EVB_defconfig +2 -1
index 711a411..9683bb9 100644
@@ -6,5 +6,6 @@ CONFIG_SYS_PROMPT="-> "
 # CONFIG_CMD_SETEXPR is not set
 # CONFIG_CMD_NET is not set
 # CONFIG_CMD_NFS is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
configs/M52277EVB_stmicro_defconfig +2 -1
index 05d20d6..7ca2611 100644
@@ -5,5 +5,6 @@ CONFIG_SYS_EXTRA_OPTIONS="CF_SBF,SYS_STMICRO_BOOT"
 # CONFIG_CMD_SETEXPR is not set
 # CONFIG_CMD_NET is not set
 # CONFIG_CMD_NFS is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
configs/M54418TWR_defconfig +2 -1
index 62cebda..b019b63 100644
@@ -8,5 +8,6 @@ CONFIG_SYS_PROMPT="-> "
 # CONFIG_CMD_LOADS is not set
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_ATMEL=y
configs/M54418TWR_nand_mii_defconfig +2 -1
index de73e30..eedee6c 100644
@@ -8,5 +8,6 @@ CONFIG_SYS_PROMPT="-> "
 # CONFIG_CMD_LOADS is not set
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_ATMEL=y
configs/M54418TWR_nand_rmii_defconfig +2 -1
index 139811c..c8000a8 100644
@@ -8,5 +8,6 @@ CONFIG_SYS_PROMPT="-> "
 # CONFIG_CMD_LOADS is not set
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_ATMEL=y
configs/M54418TWR_nand_rmii_lowfreq_defconfig +2 -1
index a3cf48b..184936b 100644
@@ -8,5 +8,6 @@ CONFIG_SYS_PROMPT="-> "
 # CONFIG_CMD_LOADS is not set
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_ATMEL=y
configs/M54418TWR_serial_mii_defconfig +2 -1
index ad29d52..fd827e3 100644
@@ -8,5 +8,6 @@ CONFIG_SYS_PROMPT="-> "
 # CONFIG_CMD_LOADS is not set
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_ATMEL=y
configs/M54418TWR_serial_rmii_defconfig +2 -1
index 62cebda..b019b63 100644
@@ -8,5 +8,6 @@ CONFIG_SYS_PROMPT="-> "
 # CONFIG_CMD_LOADS is not set
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_ATMEL=y
configs/M54451EVB_defconfig +2 -1
index a9fe02f..62cf895 100644
@@ -6,5 +6,6 @@ CONFIG_SYS_PROMPT="-> "
 # CONFIG_CMD_LOADB is not set
 # CONFIG_CMD_LOADS is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
configs/M54451EVB_stmicro_defconfig +2 -1
index f10e86c..447a506 100644
@@ -5,5 +5,6 @@ CONFIG_SYS_EXTRA_OPTIONS="CF_SBF,SYS_STMICRO_BOOT,SYS_INPUT_CLKSRC=24000000"
 # CONFIG_CMD_LOADB is not set
 # CONFIG_CMD_LOADS is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
configs/M54455EVB_a66_defconfig +2 -1
index 3053514..f9d6f73 100644
@@ -5,5 +5,6 @@ CONFIG_SYS_EXTRA_OPTIONS="SYS_ATMEL_BOOT,SYS_INPUT_CLKSRC=66666666"
 # CONFIG_CMD_LOADB is not set
 # CONFIG_CMD_LOADS is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
configs/M54455EVB_defconfig +2 -1
index 9f70f7e..b9275b0 100644
@@ -6,5 +6,6 @@ CONFIG_SYS_PROMPT="-> "
 # CONFIG_CMD_LOADB is not set
 # CONFIG_CMD_LOADS is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
configs/M54455EVB_i66_defconfig +2 -1
index 8421393..ddba2d5 100644
@@ -5,5 +5,6 @@ CONFIG_SYS_EXTRA_OPTIONS="SYS_INTEL_BOOT,SYS_INPUT_CLKSRC=66666666"
 # CONFIG_CMD_LOADB is not set
 # CONFIG_CMD_LOADS is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
configs/M54455EVB_intel_defconfig +2 -1
index c630108..d3312c5 100644
@@ -5,5 +5,6 @@ CONFIG_SYS_EXTRA_OPTIONS="SYS_INTEL_BOOT,SYS_INPUT_CLKSRC=33333333"
 # CONFIG_CMD_LOADB is not set
 # CONFIG_CMD_LOADS is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
configs/M54455EVB_stm33_defconfig +2 -1
index 4e8aee4..c3a4bb0 100644
@@ -5,5 +5,6 @@ CONFIG_SYS_EXTRA_OPTIONS="SYS_STMICRO_BOOT,CF_SBF,SYS_INPUT_CLKSRC=33333333"
 # CONFIG_CMD_LOADB is not set
 # CONFIG_CMD_LOADS is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
configs/MPC8536DS_36BIT_defconfig +2 -1
index af1ea37..77ac30d 100644
@@ -4,7 +4,8 @@ CONFIG_TARGET_MPC8536DS=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="36BIT"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/MPC8536DS_SDCARD_defconfig +2 -1
index b91b4e4..1413b63 100644
@@ -4,7 +4,8 @@ CONFIG_TARGET_MPC8536DS=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/MPC8536DS_SPIFLASH_defconfig +2 -1
index 9163118..2ab025c 100644
@@ -4,7 +4,8 @@ CONFIG_TARGET_MPC8536DS=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/MPC8536DS_defconfig +2 -1
index ff5f90b..08e4785 100644
@@ -3,7 +3,8 @@ CONFIG_MPC85xx=y
 CONFIG_TARGET_MPC8536DS=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PA_36BIT_NAND_SECBOOT_defconfig +2 -1
index 70140f4..0ed30f8 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PA,36BIT,NAND_SECBOOT,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PA_36BIT_NAND_defconfig +2 -1
index a0a8d06..90077ac 100644
@@ -8,7 +8,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PA,36BIT,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PA_36BIT_NOR_SECBOOT_defconfig +2 -1
index ef2c1ef..2f806e9 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PA,36BIT,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PA_36BIT_NOR_defconfig +2 -1
index 7df594d..2d93cf8 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PA,36BIT"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PA_36BIT_SDCARD_defconfig +2 -1
index 6d6710f..7d33d4b 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PA,36BIT,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PA_36BIT_SPIFLASH_SECBOOT_defconfig +2 -1
index 775ed29..34b37f8 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PA,36BIT,SPIFLASH,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PA_36BIT_SPIFLASH_defconfig +2 -1
index 60f736f..be401df 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PA,36BIT,SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PA_NAND_SECBOOT_defconfig +2 -1
index 406334a..aa42783 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PA,NAND_SECBOOT,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PA_NAND_defconfig +2 -1
index 1dd5cef..6e1fb61 100644
@@ -8,7 +8,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PA,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PA_NOR_SECBOOT_defconfig +2 -1
index d969d0e..1a0cece 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PA,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PA_NOR_defconfig +2 -1
index fefbf64..8c0d26a 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PA"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PA_SDCARD_defconfig +2 -1
index e5f29c0..0124b1f 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PA,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PA_SPIFLASH_SECBOOT_defconfig +2 -1
index 5540a61..b9892d7 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PA,SPIFLASH,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PA_SPIFLASH_defconfig +2 -1
index d551d3f..d830316 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PA,SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PB_36BIT_NAND_SECBOOT_defconfig +2 -1
index a8fbfaa..0237271 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PB,36BIT,NAND_SECBOOT,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PB_36BIT_NAND_defconfig +2 -1
index 627d953..f140058 100644
@@ -8,7 +8,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PB,36BIT,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PB_36BIT_NOR_SECBOOT_defconfig +2 -1
index 2215969..5064415 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PB,36BIT,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PB_36BIT_NOR_defconfig +2 -1
index 980cf7c..ce9e65f 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PB,36BIT"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PB_36BIT_SDCARD_defconfig +2 -1
index f98ccb3..4d30464 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PB,36BIT,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PB_36BIT_SPIFLASH_SECBOOT_defconfig +2 -1
index 2fd6c47..4d858c8 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PB,36BIT,SPIFLASH,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PB_36BIT_SPIFLASH_defconfig +2 -1
index 33bff1f..e1e9d44 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PB,36BIT,SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PB_NAND_SECBOOT_defconfig +2 -1
index 2cfc763..90122ec 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PB,NAND_SECBOOT,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PB_NAND_defconfig +2 -1
index c9c6de9..56a853b 100644
@@ -8,7 +8,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PB,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PB_NOR_SECBOOT_defconfig +2 -1
index 29ae621..b6d1e0f 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PB,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PB_NOR_defconfig +2 -1
index 5fa7e72..bb37b28 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PB"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PB_SDCARD_defconfig +2 -1
index 4379db5..313e4a0 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PB,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PB_SPIFLASH_SECBOOT_defconfig +2 -1
index 1b478e4..d966677 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PB,SPIFLASH,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1010RDB-PB_SPIFLASH_defconfig +2 -1
index f92483f..53e112f 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1010RDB_PB,SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1020RDB-PC_36BIT_NAND_defconfig +2 -1
index 7817039..a4364f3 100644
@@ -8,7 +8,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1020RDB_PC,36BIT,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1020RDB-PC_36BIT_SDCARD_defconfig +2 -1
index f2aae6e..ae24451 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1020RDB_PC,36BIT,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1020RDB-PC_36BIT_SPIFLASH_defconfig +2 -1
index b54ab14..52a0ec1 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1020RDB_PC,36BIT,SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1020RDB-PC_36BIT_defconfig +2 -1
index aec845c..34d1615 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1020RDB_PC,36BIT"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1020RDB-PC_NAND_defconfig +2 -1
index 6a2affe..399ca0c 100644
@@ -8,7 +8,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1020RDB_PC,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1020RDB-PC_SDCARD_defconfig +2 -1
index 4ebb430..44764d6 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1020RDB_PC,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1020RDB-PC_SPIFLASH_defconfig +2 -1
index 91aed54..a8e712e 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1020RDB_PC,SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1020RDB-PC_defconfig +2 -1
index a6fb793..81ed66f 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1020RDB_PC"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1020RDB-PD_NAND_defconfig +2 -1
index 3cfe779..468c6b2 100644
@@ -8,7 +8,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1020RDB_PD,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1020RDB-PD_SDCARD_defconfig +2 -1
index 7d8f0db..f4614c9 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1020RDB_PD,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1020RDB-PD_SPIFLASH_defconfig +2 -1
index 486ff91..634983a 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1020RDB_PD,SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1020RDB-PD_defconfig +2 -1
index 69930fe..92714e9 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1020RDB_PD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1021RDB-PC_36BIT_NAND_defconfig +2 -1
index 1a9e1a8..df188f7 100644
@@ -8,7 +8,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1021RDB,36BIT,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1021RDB-PC_36BIT_SDCARD_defconfig +2 -1
index 4487d01..da4a512 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1021RDB,36BIT,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1021RDB-PC_36BIT_SPIFLASH_defconfig +2 -1
index f0cd301..d31f4b4 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1021RDB,36BIT,SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1021RDB-PC_36BIT_defconfig +2 -1
index f2dcdeb..fc32688 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1021RDB,36BIT"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1021RDB-PC_NAND_defconfig +2 -1
index c14adaf..9725306 100644
@@ -8,7 +8,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1021RDB,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1021RDB-PC_SDCARD_defconfig +2 -1
index 21b154a..af6125a 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1021RDB,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1021RDB-PC_SPIFLASH_defconfig +2 -1
index 61f56e1..c658ea9 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1021RDB,SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1021RDB-PC_defconfig +2 -1
index 2b4c7e7..a0b1e91 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1021RDB"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1022DS_36BIT_NAND_defconfig +2 -1
index 2a83e6a..bc7b3ce 100644
@@ -8,7 +8,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="36BIT,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1022DS_36BIT_SDCARD_defconfig +2 -1
index 34b61f4..34cf86b 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="36BIT,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1022DS_36BIT_SPIFLASH_defconfig +2 -1
index c9b06fe..0178a96 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="36BIT,SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1022DS_36BIT_defconfig +2 -1
index fe781aa..611d972 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="36BIT"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1022DS_NAND_defconfig +2 -1
index 5f8c788..4d3d4c8 100644
@@ -8,7 +8,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1022DS_SDCARD_defconfig +2 -1
index 3072c16..9264fe6 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1022DS_SPIFLASH_defconfig +2 -1
index e6eac27..1d1873c 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1022DS_defconfig +2 -1
index dfe7696..0fdc8c0 100644
@@ -5,7 +5,8 @@ CONFIG_FIT=y
 CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1024RDB_36BIT_defconfig +2 -1
index 6c3e547..0f2cb71 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1024RDB,36BIT"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1024RDB_NAND_defconfig +2 -1
index ee181de..77b3795 100644
@@ -8,7 +8,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1024RDB,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1024RDB_SDCARD_defconfig +2 -1
index b874f55..efc2e3f 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1024RDB,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1024RDB_SPIFLASH_defconfig +2 -1
index 8e8c1af..4eee960 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1024RDB,SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1024RDB_defconfig +2 -1
index d0e363c..acdf6c7 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1024RDB"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1025RDB_36BIT_defconfig +2 -1
index aff4ae0..bb198d8 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1025RDB,36BIT"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1025RDB_NAND_defconfig +2 -1
index 8b0fdd9..d577617 100644
@@ -8,7 +8,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1025RDB,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1025RDB_SDCARD_defconfig +2 -1
index 7d39a34..989d019 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1025RDB,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1025RDB_SPIFLASH_defconfig +2 -1
index 945d51f..f5af87d 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1025RDB,SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P1025RDB_defconfig +2 -1
index 176cd74..f38f629 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P1025RDB"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P2020RDB-PC_36BIT_NAND_defconfig +2 -1
index e6ebb61..dcb3dc2 100644
@@ -8,7 +8,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P2020RDB,36BIT,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P2020RDB-PC_36BIT_SDCARD_defconfig +2 -1
index d4f00e6..8e0cae3 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P2020RDB,36BIT,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P2020RDB-PC_36BIT_SPIFLASH_defconfig +2 -1
index ac345f6..4487440 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P2020RDB,36BIT,SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P2020RDB-PC_36BIT_defconfig +2 -1
index e8e56b6..e05802c 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P2020RDB,36BIT"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P2020RDB-PC_NAND_defconfig +2 -1
index 641784b..61e09d4 100644
@@ -8,7 +8,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P2020RDB,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P2020RDB-PC_SDCARD_defconfig +2 -1
index 1484ac2..ad2df4d 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P2020RDB,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P2020RDB-PC_SPIFLASH_defconfig +2 -1
index 2226979..8b9cc6c 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P2020RDB,SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P2020RDB-PC_defconfig +2 -1
index 09416fb..75a6523 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="P2020RDB"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P2041RDB_NAND_defconfig +2 -1
index c9eb16a..57d500d 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,NAND,SYS_TEXT_BASE=0xFFF40000"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P2041RDB_SDCARD_defconfig +2 -1
index 036fd70..aaf29ce 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,SDCARD,SYS_TEXT_BASE=0xFFF40000"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P2041RDB_SECURE_BOOT_defconfig +2 -1
index 2896693..cb76065 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P2041RDB_SPIFLASH_defconfig +2 -1
index f488251..25e2315 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,SPIFLASH,SYS_TEXT_BASE=0xFFF40000"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P2041RDB_SRIO_PCIE_BOOT_defconfig +2 -1
index 0afbd0c..8aba19b 100644
@@ -8,7 +8,8 @@ CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="SRIO_PCIE_BOOT_SLAVE,SYS_TEXT_BASE=0xFFF40000"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P2041RDB_defconfig +2 -1
index c234c71..4e4e469 100644
@@ -5,7 +5,8 @@ CONFIG_FIT=y
 CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P3041DS_NAND_SECURE_BOOT_defconfig +2 -1
index da81767..c6b7cdc 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,NAND,SECURE_BOOT,SYS_TEXT_BASE=0xFFF40000"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P3041DS_NAND_defconfig +2 -1
index db083a0..b8fc9e9 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,NAND,SYS_TEXT_BASE=0xFFF40000"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P3041DS_SDCARD_defconfig +2 -1
index 43a7c59..6a2def9 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,SDCARD,SYS_TEXT_BASE=0xFFF40000"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P3041DS_SECURE_BOOT_defconfig +2 -1
index b9bdac0..e6f219b 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P3041DS_SPIFLASH_defconfig +2 -1
index 8b861d3..6bef8d8 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,SPIFLASH,SYS_TEXT_BASE=0xFFF40000"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P3041DS_SRIO_PCIE_BOOT_defconfig +2 -1
index c341b51..a81ffb2 100644
@@ -8,7 +8,8 @@ CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="SRIO_PCIE_BOOT_SLAVE,SYS_TEXT_BASE=0xFFF40000"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P3041DS_defconfig +2 -1
index 3cc04a9..5ccbf7a 100644
@@ -5,7 +5,8 @@ CONFIG_FIT=y
 CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P4080DS_SDCARD_defconfig +2 -1
index 492910b..b5558a2 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,SDCARD,SYS_TEXT_BASE=0xFFF40000"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P4080DS_SECURE_BOOT_defconfig +2 -1
index 760194c..2738947 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P4080DS_SPIFLASH_defconfig +2 -1
index ae2e13a..0addc13 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,SPIFLASH,SYS_TEXT_BASE=0xFFF40000"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P4080DS_SRIO_PCIE_BOOT_defconfig +2 -1
index baf548e..25f8894 100644
@@ -8,7 +8,8 @@ CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="SRIO_PCIE_BOOT_SLAVE,SYS_TEXT_BASE=0xFFF40000"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P4080DS_defconfig +2 -1
index e2b96c3..fa3b249 100644
@@ -5,7 +5,8 @@ CONFIG_FIT=y
 CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P5020DS_NAND_SECURE_BOOT_defconfig +2 -1
index cb57053..be0a423 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,NAND,SECURE_BOOT,SYS_TEXT_BASE=0xFFF40000"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P5020DS_NAND_defconfig +2 -1
index a9ea36b..dfecf0b 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,NAND,SYS_TEXT_BASE=0xFFF40000"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P5020DS_SDCARD_defconfig +2 -1
index fb7bda6..6eb7d1d 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,SDCARD,SYS_TEXT_BASE=0xFFF40000"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P5020DS_SECURE_BOOT_defconfig +2 -1
index 9d9ff67..f278908 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P5020DS_SPIFLASH_defconfig +2 -1
index bc6c190..0a490aa 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,SPIFLASH,SYS_TEXT_BASE=0xFFF40000"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P5020DS_SRIO_PCIE_BOOT_defconfig +2 -1
index a7d32bc..35ef6f7 100644
@@ -8,7 +8,8 @@ CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="SRIO_PCIE_BOOT_SLAVE,SYS_TEXT_BASE=0xFFF40000"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P5020DS_defconfig +2 -1
index 00731af..efe03dd 100644
@@ -5,7 +5,8 @@ CONFIG_FIT=y
 CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P5040DS_NAND_SECURE_BOOT_defconfig +2 -1
index 229cd56..9be0e2f 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,NAND,SECURE_BOOT,SYS_TEXT_BASE=0xFFF40000"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P5040DS_NAND_defconfig +2 -1
index eeff54d..a47d4fa 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,NAND,SYS_TEXT_BASE=0xFFF40000"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P5040DS_SDCARD_defconfig +2 -1
index 6fafb44..a9e3468 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,SDCARD,SYS_TEXT_BASE=0xFFF40000"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P5040DS_SECURE_BOOT_defconfig +2 -1
index 9e35593..5e9523d 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P5040DS_SPIFLASH_defconfig +2 -1
index 28230ad..8473e7c 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,SPIFLASH,SYS_TEXT_BASE=0xFFF40000"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/P5040DS_defconfig +2 -1
index 388c1c0..2f55952 100644
@@ -5,7 +5,8 @@ CONFIG_FIT=y
 CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1023RDB_NAND_defconfig +2 -1
index 28d7e1f..f5a1f1f 100644
@@ -9,7 +9,8 @@ CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1023,T1023RDB,RAMBOOT_PBL,SPL_FSL_PBL,NAND"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1023RDB_SDCARD_defconfig +2 -1
index ce3bc30..1969c33 100644
@@ -9,7 +9,8 @@ CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1023,T1023RDB,RAMBOOT_PBL,SPL_FSL_PBL,SDCARD"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1023RDB_SECURE_BOOT_defconfig +2 -1
index 0030f8d..b4665f2 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1023,T1023RDB,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1023RDB_SPIFLASH_defconfig +2 -1
index 7b9c518..a5f0afb 100644
@@ -9,7 +9,8 @@ CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1023,T1023RDB,RAMBOOT_PBL,SPL_FSL_PBL,SPIFLASH"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1023RDB_defconfig +2 -1
index d3131cb..d9db1b1 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1023,T1023RDB"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1024QDS_DDR4_SECURE_BOOT_defconfig +2 -1
index c4b2f1a..00672f7 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1024,SYS_FSL_DDR4,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
configs/T1024QDS_DDR4_defconfig +2 -1
index 7a7cf65..489f817 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1024,SYS_FSL_DDR4"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
configs/T1024QDS_NAND_defconfig +2 -1
index 308e009..cb842e8 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1024,RAMBOOT_PBL,SPL_FSL_PBL,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
configs/T1024QDS_SDCARD_defconfig +2 -1
index c12abf4..37eca91 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1024,RAMBOOT_PBL,SPL_FSL_PBL,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
configs/T1024QDS_SECURE_BOOT_defconfig +2 -1
index bd96807..20b3807 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1024,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
configs/T1024QDS_SPIFLASH_defconfig +2 -1
index 8874033..c1013f4 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1024,RAMBOOT_PBL,SPL_FSL_PBL,SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
configs/T1024QDS_defconfig +2 -1
index 42b9552..abc12dc 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1024"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
configs/T1024RDB_NAND_defconfig +2 -1
index e2e9373..b6065fd 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1024,T1024RDB,RAMBOOT_PBL,SPL_FSL_PBL,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1024RDB_SDCARD_defconfig +2 -1
index c68982c..3b3ef9b 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1024,T1024RDB,RAMBOOT_PBL,SPL_FSL_PBL,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1024RDB_SECURE_BOOT_defconfig +2 -1
index 9f29bbf..d5290dc 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1024,T1024RDB,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1024RDB_SPIFLASH_defconfig +2 -1
index 712eec4..5b2ee8e 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1024,T1024RDB,RAMBOOT_PBL,SPL_FSL_PBL,SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1024RDB_defconfig +2 -1
index b1f5549..8ec8535 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1024,T1024RDB"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1040D4RDB_NAND_defconfig +2 -1
index b2fe48a..abf98ae 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1040,T1040D4RDB,RAMBOOT_PBL,SPL_FSL_PBL,NAND,T104XD4RDB,SYS_FSL_DDR4"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1040D4RDB_SDCARD_defconfig +2 -1
index f93b541..dd47735 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1040,T1040D4RDB,RAMBOOT_PBL,SPL_FSL_PBL,SDCARD,T104XD4RDB,SYS_FSL_DDR4"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1040D4RDB_SECURE_BOOT_defconfig +2 -1
index 1e1c5cc..8604192 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1040,T1040D4RDB,T104XD4RDB,SYS_FSL_DDR4,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1040D4RDB_SPIFLASH_defconfig +2 -1
index ee68bf7..a1e682f 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1040,T1040D4RDB,RAMBOOT_PBL,SPL_FSL_PBL,SPIFLASH,T104XD4RDB,SYS_FSL_DDR4"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1040D4RDB_defconfig +2 -1
index 744e37d..afe7a0c 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1040,T1040D4RDB,T104XD4RDB,SYS_FSL_DDR4"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1040QDS_DDR4_defconfig +2 -1
index 6a4332a..c93a65f 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1040,SYS_FSL_DDR4"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
configs/T1040QDS_SECURE_BOOT_defconfig +2 -1
index 46fed6d..423a141 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1040,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
configs/T1040QDS_defconfig +2 -1
index 5b1ddb6..bca4631 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1040"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
configs/T1040RDB_NAND_defconfig +2 -1
index 7198bb2..92ec845 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1040,T1040RDB,RAMBOOT_PBL,SPL_FSL_PBL,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1040RDB_SDCARD_defconfig +2 -1
index a60420b..b8359f1 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1040,T1040RDB,RAMBOOT_PBL,SPL_FSL_PBL,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1040RDB_SECURE_BOOT_defconfig +2 -1
index 7bc8872..c2f06ae 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1040,SECURE_BOOT,T1040RDB"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1040RDB_SPIFLASH_defconfig +2 -1
index 3492c83..99d9f53 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1040,T1040RDB,RAMBOOT_PBL,SPL_FSL_PBL,SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1040RDB_defconfig +2 -1
index 17cdce3..ef09e28 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1040,T1040RDB"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1042D4RDB_NAND_defconfig +2 -1
index 99e6723..91edfaa 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1042,T1042D4RDB,RAMBOOT_PBL,SPL_FSL_PBL,NAND,T104XD4RDB,SYS_FSL_DDR4"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1042D4RDB_SDCARD_defconfig +2 -1
index 9101b9b..f4e9957 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1042,T1042D4RDB,RAMBOOT_PBL,SPL_FSL_PBL,SDCARD,T104XD4RDB,SYS_FSL_DDR4"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1042D4RDB_SECURE_BOOT_defconfig +2 -1
index 9764c1d..d12e35c 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1042,T1042D4RDB,T104XD4RDB,SYS_FSL_DDR4,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1042D4RDB_SPIFLASH_defconfig +2 -1
index 1d1799b..5644b7e 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1042,T1042D4RDB,RAMBOOT_PBL,SPL_FSL_PBL,SPIFLASH,T104XD4RDB,SYS_FSL_DDR4"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1042D4RDB_defconfig +2 -1
index 56f9f4e..5e0c620 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1042,T1042D4RDB,T104XD4RDB,SYS_FSL_DDR4"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1042RDB_PI_NAND_defconfig +2 -1
index f079ccb..195842e 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1042,T1042RDB_PI,RAMBOOT_PBL,SPL_FSL_PBL,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1042RDB_PI_SDCARD_defconfig +2 -1
index b78eb28..65c21c4 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1042,T1042RDB_PI,RAMBOOT_PBL,SPL_FSL_PBL,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1042RDB_PI_SPIFLASH_defconfig +2 -1
index 11df100..946cab2 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1042,T1042RDB_PI,RAMBOOT_PBL,SPL_FSL_PBL,SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1042RDB_PI_defconfig +2 -1
index dd4a2cc..4df3280 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1042,T1042RDB_PI"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1042RDB_SECURE_BOOT_defconfig +2 -1
index 65d51c7..ccfe987 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1042,SECURE_BOOT,T1042RDB"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T1042RDB_defconfig +2 -1
index 421ebd6..0b3fea6 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T1042,T1042RDB"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T2080QDS_NAND_defconfig +2 -1
index 55463a6..6217718 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T2080,RAMBOOT_PBL,SPL_FSL_PBL,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
configs/T2080QDS_SDCARD_defconfig +2 -1
index 4074a65..2bc2127 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T2080,RAMBOOT_PBL,SPL_FSL_PBL,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
configs/T2080QDS_SECURE_BOOT_defconfig +2 -1
index 7beaad7..ac8077d 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T2080,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
configs/T2080QDS_SPIFLASH_defconfig +2 -1
index 7c7b131..8510f37 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T2080,RAMBOOT_PBL,SPL_FSL_PBL,SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
configs/T2080QDS_SRIO_PCIE_BOOT_defconfig +2 -1
index e30048a..e37bc35 100644
@@ -8,7 +8,8 @@ CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T2080,SRIO_PCIE_BOOT_SLAVE,SYS_TEXT_BASE=0xFFF40000"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
configs/T2080QDS_defconfig +2 -1
index a2236e1..e0c8029 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T2080"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
configs/T2080RDB_NAND_defconfig +2 -1
index 9753814..d735a05 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T2080,RAMBOOT_PBL,SPL_FSL_PBL,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T2080RDB_SDCARD_defconfig +2 -1
index 75d33c5..b1c1f04 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T2080,RAMBOOT_PBL,SPL_FSL_PBL,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T2080RDB_SECURE_BOOT_defconfig +2 -1
index 33f7d5f..c53d889 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T2080,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T2080RDB_SPIFLASH_defconfig +2 -1
index 07a5b06..1a71146 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T2080,RAMBOOT_PBL,SPL_FSL_PBL,SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T2080RDB_SRIO_PCIE_BOOT_defconfig +2 -1
index c1549c1..558f6d3 100644
@@ -8,7 +8,8 @@ CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T2080,SRIO_PCIE_BOOT_SLAVE,SYS_TEXT_BASE=0xFFF40000"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T2080RDB_defconfig +2 -1
index ab5453c..1179909 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T2080"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T2081QDS_NAND_defconfig +2 -1
index 6275d27..244a295 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T2081,RAMBOOT_PBL,SPL_FSL_PBL,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
configs/T2081QDS_SDCARD_defconfig +2 -1
index 9c805d0..9b784f6 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T2081,RAMBOOT_PBL,SPL_FSL_PBL,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
configs/T2081QDS_SPIFLASH_defconfig +2 -1
index 2cef3ec..3092131 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T2081,RAMBOOT_PBL,SPL_FSL_PBL,SPIFLASH"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
configs/T2081QDS_SRIO_PCIE_BOOT_defconfig +2 -1
index b8bb371..ad86efd 100644
@@ -8,7 +8,8 @@ CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T2081,SRIO_PCIE_BOOT_SLAVE,SYS_TEXT_BASE=0xFFF40000"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
configs/T2081QDS_defconfig +2 -1
index f8488b6..a67be2d 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T2081"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
configs/T4160QDS_NAND_defconfig +2 -1
index 255ae58..3c318f9 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T4160,RAMBOOT_PBL,SPL_FSL_PBL,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T4160QDS_SDCARD_defconfig +2 -1
index c74aecf..cac5965 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T4160,RAMBOOT_PBL,SPL_FSL_PBL,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T4160QDS_SECURE_BOOT_defconfig +2 -1
index f430c34..333fd51 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T4160,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T4160QDS_defconfig +2 -1
index 191370f..2fa2fe8 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T4160"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T4160RDB_defconfig +2 -1
index 1ffecc3..63b1c6d 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T4160"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T4240QDS_NAND_defconfig +2 -1
index 8bd2174..4d138ec 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T4240,RAMBOOT_PBL,SPL_FSL_PBL,NAND"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T4240QDS_SDCARD_defconfig +2 -1
index fa4f1dd..be19d3b 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T4240,RAMBOOT_PBL,SPL_FSL_PBL,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T4240QDS_SECURE_BOOT_defconfig +2 -1
index 2737244..21efc1e 100644
@@ -8,7 +8,8 @@ CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T4240,SECURE_BOOT"
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T4240QDS_SRIO_PCIE_BOOT_defconfig +2 -1
index 10513aa..13b2b36 100644
@@ -8,7 +8,8 @@ CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T4240,SRIO_PCIE_BOOT_SLAVE,SYS_TEXT_BASE=0xFFF40000"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T4240QDS_defconfig +2 -1
index a6525aa..c02e534 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T4240"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T4240RDB_SDCARD_defconfig +2 -1
index a124477..073f049 100644
@@ -7,7 +7,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T4240,RAMBOOT_PBL,SPL_FSL_PBL,SDCARD"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/T4240RDB_defconfig +2 -1
index fc622c9..3dcdf6b 100644
@@ -6,7 +6,8 @@ CONFIG_FIT_VERBOSE=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="PPC_T4240"
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_NETDEVICES=y
 CONFIG_E1000=y
configs/UCP1020_SPIFLASH_defconfig +2 -1
index 52750f4..6ce3d41 100644
@@ -10,7 +10,8 @@ CONFIG_AUTOBOOT_KEYED=y
 CONFIG_AUTOBOOT_PROMPT="Autobooting in %d seconds, press \"<Esc>\" to stop\n"
 CONFIG_AUTOBOOT_STOP_STR="\x1b"
 CONFIG_CMD_GPIO=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_SPI_FLASH_WINBOND=y
configs/UCP1020_defconfig +2 -1
index 0633752..69a3391 100644
@@ -10,7 +10,8 @@ CONFIG_AUTOBOOT_KEYED=y
 CONFIG_AUTOBOOT_PROMPT="Autobooting in %d seconds, press \"<Esc>\" to stop\n"
 CONFIG_AUTOBOOT_STOP_STR="\x1b"
 CONFIG_CMD_GPIO=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_SPI_FLASH_WINBOND=y
configs/alt_defconfig +2 -1
index 4ea33ef..72ba038 100644
@@ -17,7 +17,8 @@ CONFIG_TARGET_ALT=y
 # CONFIG_CMD_SETEXPR is not set
 # CONFIG_CMD_MISC is not set
 CONFIG_SH_SDHI=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_OF_LIBFDT=y
configs/am335x_boneblack_defconfig +2 -1
index 4ba2579..269c06c 100644
@@ -14,7 +14,8 @@ CONFIG_AUTOBOOT_STOP_STR=" "
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_DFU_TFTP=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_SYS_NS16550=y
 CONFIG_OF_LIBFDT=y
configs/am335x_boneblack_vboot_defconfig +2 -1
index 060aa1c..7d0ab0b 100644
@@ -18,7 +18,8 @@ CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_OF_CONTROL=y
 CONFIG_DM_MMC=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_DM_ETH=y
 CONFIG_SYS_NS16550=y
configs/am335x_evm_defconfig +2 -1
index 836950c..5b1ac34 100644
@@ -13,7 +13,8 @@ CONFIG_AUTOBOOT_STOP_STR=" "
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_SYS_NS16550=y
 CONFIG_OF_LIBFDT=y
configs/am335x_evm_nor_defconfig +2 -1
index f336dfd..fcf5bca 100644
@@ -9,7 +9,8 @@ CONFIG_SYS_EXTRA_OPTIONS="NAND"
 # CONFIG_CMD_IMLS is not set
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_SYS_NS16550=y
 CONFIG_OF_LIBFDT=y
configs/am335x_evm_norboot_defconfig +2 -1
index 707014b..e69754f 100644
@@ -6,7 +6,8 @@ CONFIG_FIT=y
 # CONFIG_CMD_IMLS is not set
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_SYS_NS16550=y
 CONFIG_OF_LIBFDT=y
configs/am335x_evm_spiboot_defconfig +2 -1
index 665dad3..48c7724 100644
@@ -9,7 +9,8 @@ CONFIG_SYS_EXTRA_OPTIONS="SPI_BOOT"
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_SYS_NS16550=y
 CONFIG_OF_LIBFDT=y
configs/am335x_evm_usbspl_defconfig +2 -1
index 17370bb..6b64ea8 100644
@@ -9,7 +9,8 @@ CONFIG_SYS_EXTRA_OPTIONS="NAND,SPL_USBETH_SUPPORT"
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_SYS_NS16550=y
 CONFIG_OF_LIBFDT=y
configs/am335x_gp_evm_defconfig +2 -1
index 7f12972..e2269d4 100644
@@ -12,7 +12,8 @@ CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_OF_CONTROL=y
 CONFIG_DM_MMC=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_DM_ETH=y
 CONFIG_SYS_NS16550=y
configs/am437x_gp_evm_defconfig +2 -1
index 1d79ba19..e68c752 100644
@@ -14,7 +14,8 @@ CONFIG_CMD_GPIO=y
 CONFIG_OF_CONTROL=y
 CONFIG_DM=y
 CONFIG_DM_MMC=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SYS_NS16550=y
 CONFIG_TI_QSPI=y
configs/am437x_sk_evm_defconfig +3 -2
index 149a028..08d006b 100644
@@ -2,7 +2,7 @@ CONFIG_ARM=y
 CONFIG_TARGET_AM43XX_EVM=y
 CONFIG_DM_SERIAL=y
 CONFIG_DM_SPI=y
-CONFIG_DM_SPI_FLASH=y
+CONFIG_MTD=y
 CONFIG_DM_GPIO=y
 CONFIG_SPL_STACK_R_ADDR=0x82000000
 CONFIG_DEFAULT_DEVICE_TREE="am437x-sk-evm"
@@ -16,7 +16,8 @@ CONFIG_CMD_GPIO=y
 CONFIG_OF_CONTROL=y
 CONFIG_DM=y
 CONFIG_DM_MMC=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_BAR=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SYS_NS16550=y
configs/am43xx_evm_defconfig +2 -1
index 8ef28f3..a8b84e4 100644
@@ -6,7 +6,8 @@ CONFIG_SYS_EXTRA_OPTIONS="SERIAL1,CONS_INDEX=1,NAND"
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_BAR=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SYS_NS16550=y
configs/am43xx_evm_ethboot_defconfig +2 -1
index 7143597..cd07549 100644
@@ -6,7 +6,8 @@ CONFIG_SYS_EXTRA_OPTIONS="SERIAL1,CONS_INDEX=1,NAND,SPL_ETH_SUPPORT"
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SYS_NS16550=y
 CONFIG_TI_QSPI=y
configs/am43xx_evm_qspiboot_defconfig +2 -1
index a9a862b..27a9f9f 100644
@@ -5,7 +5,8 @@ CONFIG_SYS_EXTRA_OPTIONS="SERIAL1,CONS_INDEX=1,QSPI,QSPI_BOOT"
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SYS_NS16550=y
 CONFIG_TI_QSPI=y
configs/am43xx_evm_usbhost_boot_defconfig +2 -1
index 2c73dbe..ed2afe0 100644
@@ -6,7 +6,8 @@ CONFIG_SYS_EXTRA_OPTIONS="SERIAL1,CONS_INDEX=1,NAND,SPL_USB_HOST_SUPPORT"
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SYS_NS16550=y
 CONFIG_TI_QSPI=y
configs/am57xx_evm_defconfig +2 -1
index 1090287..824107c 100644
@@ -15,6 +15,7 @@ CONFIG_CMD_GPIO=y
 CONFIG_OF_CONTROL=y
 CONFIG_DM=y
 CONFIG_DM_MMC=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_BAR=y
 CONFIG_SYS_NS16550=y
configs/aristainetos2_defconfig +2 -1
index 7e2c026..1fbadd7 100644
@@ -6,6 +6,7 @@ CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/aristainetos/aristainetos2.cfg,MX6DL"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_OF_LIBFDT=y
configs/aristainetos2b_defconfig +2 -1
index 88670df..11bd14f 100644
@@ -6,6 +6,7 @@ CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/aristainetos/aristainetos2.cfg,MX6DL"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_OF_LIBFDT=y
configs/aristainetos_defconfig +2 -1
index e808c21..3248a62 100644
@@ -6,6 +6,7 @@ CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/aristainetos/aristainetos.cfg,MX6DL"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_OF_LIBFDT=y
configs/at91sam9n12ek_mmc_defconfig +2 -1
index 6f45120..9322456 100644
@@ -7,6 +7,7 @@ CONFIG_SYS_PROMPT="U-Boot> "
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_FPGA is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_ATMEL=y
 CONFIG_OF_LIBFDT=y
configs/at91sam9n12ek_nandflash_defconfig +2 -1
index df099b2..17ebed6 100644
@@ -8,6 +8,7 @@ CONFIG_SYS_PROMPT="U-Boot> "
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_FPGA is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_ATMEL=y
 CONFIG_OF_LIBFDT=y
configs/at91sam9n12ek_spiflash_defconfig +2 -1
index 20cf592..323d7b7 100644
@@ -8,6 +8,7 @@ CONFIG_SYS_PROMPT="U-Boot> "
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_FPGA is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_ATMEL=y
 CONFIG_OF_LIBFDT=y
configs/at91sam9x5ek_dataflash_defconfig +2 -1
index b6154da..14a2a20 100644
@@ -8,6 +8,7 @@ CONFIG_SYS_PROMPT="U-Boot> "
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_FPGA is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_ATMEL=y
 CONFIG_OF_LIBFDT=y
configs/at91sam9x5ek_mmc_defconfig +2 -1
index b782e25..5cc56ea 100644
@@ -8,6 +8,7 @@ CONFIG_SYS_PROMPT="U-Boot> "
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_FPGA is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_ATMEL=y
 CONFIG_OF_LIBFDT=y
configs/at91sam9x5ek_nandflash_defconfig +2 -1
index 66be263..0ce027b 100644
@@ -9,6 +9,7 @@ CONFIG_SYS_PROMPT="U-Boot> "
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_FPGA is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_ATMEL=y
 CONFIG_OF_LIBFDT=y
configs/at91sam9x5ek_spiflash_defconfig +2 -1
index 0eba857..4c7fa59 100644
@@ -9,6 +9,7 @@ CONFIG_SYS_PROMPT="U-Boot> "
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_FPGA is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_ATMEL=y
 CONFIG_OF_LIBFDT=y
configs/atngw100_defconfig +2 -1
index 7ef4677..56ab790 100644
@@ -10,5 +10,6 @@ CONFIG_AUTOBOOT_STOP_STR=" "
 # CONFIG_CMD_FPGA is not set
 # CONFIG_CMD_SOURCE is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_ATMEL=y
configs/atngw100mkii_defconfig +2 -1
index b552421..fa6e3f8 100644
@@ -9,5 +9,6 @@ CONFIG_AUTOBOOT_STOP_STR=" "
 # CONFIG_CMD_XIMG is not set
 # CONFIG_CMD_FPGA is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_ATMEL=y
configs/axm_defconfig +2 -1
index 65c13eb..bf68562 100644
@@ -10,7 +10,8 @@ CONFIG_SYS_EXTRA_OPTIONS="AT91SAM9G20,MACH_TYPE=2068,BOARD_AXM"
 # CONFIG_CMD_FPGA is not set
 # CONFIG_CMD_SOURCE is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_USE_TINY_PRINTF=y
 CONFIG_OF_LIBFDT=y
configs/bayleybay_defconfig +2 -1
index dfafb0b..27dce42 100644
@@ -23,7 +23,8 @@ CONFIG_OF_CONTROL=y
 CONFIG_REGMAP=y
 CONFIG_SYSCON=y
 CONFIG_CPU=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_GIGADEVICE=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SPI_FLASH_WINBOND=y
configs/beaver_defconfig +2 -1
index fcfbf65..3d5bf5d 100644
@@ -13,7 +13,8 @@ CONFIG_SYS_PROMPT="Tegra30 (Beaver) # "
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 # CONFIG_CMD_NFS is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_PCI_TEGRA=y
 CONFIG_SYS_NS16550=y
configs/bf518f-ezbrd_defconfig +2 -1
index a8eab8c..a211b44 100644
@@ -3,7 +3,8 @@ CONFIG_TARGET_BF518F_EZBRD=y
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_NET_RANDOM_ETHADDR=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_CC_OPTIMIZE_LIBS_FOR_SPEED=y
configs/bf525-ucr2_defconfig +2 -1
index 15a8f1f..416ffc0 100644
@@ -5,5 +5,6 @@ CONFIG_TARGET_BF525_UCR2=y
 # CONFIG_CMD_SETEXPR is not set
 # CONFIG_CMD_NET is not set
 # CONFIG_CMD_NFS is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_EON=y
configs/bf526-ezbrd_defconfig +2 -1
index a5f4b73..cf608cd 100644
@@ -3,5 +3,6 @@ CONFIG_TARGET_BF526_EZBRD=y
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_NET_RANDOM_ETHADDR=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SST=y
configs/bf527-ad7160-eval_defconfig +2 -1
index 4751df4..7aaf740 100644
@@ -5,6 +5,7 @@ CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 # CONFIG_CMD_NET is not set
 # CONFIG_CMD_NFS is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_CC_OPTIMIZE_LIBS_FOR_SPEED=y
configs/bf527-ezkit-v2_defconfig +2 -1
index 356ab64..ef8ae9e 100644
@@ -3,6 +3,7 @@ CONFIG_TARGET_BF527_EZKIT=y
 CONFIG_SYS_EXTRA_OPTIONS="BF527_EZKIT_REV_2_1"
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_LIB_RAND=y
configs/bf527-ezkit_defconfig +2 -1
index c1b139c..478e21a 100644
@@ -3,5 +3,6 @@ CONFIG_TARGET_BF527_EZKIT=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_NET_RANDOM_ETHADDR=y
 # CONFIG_NET_TFTP_VARS is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
configs/bf527-sdp_defconfig +2 -1
index 383f62e..34ee175 100644
@@ -5,7 +5,8 @@ CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 # CONFIG_CMD_NET is not set
 # CONFIG_CMD_NFS is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_ATMEL=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_MACRONIX=y
configs/bf537-minotaur_defconfig +2 -1
index bf3d79f..4ce5aed 100644
@@ -5,5 +5,6 @@ CONFIG_SYS_PROMPT="minotaur> "
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_NET_RANDOM_ETHADDR=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
configs/bf537-pnav_defconfig +2 -1
index e737561..3df58d7 100644
@@ -3,5 +3,6 @@ CONFIG_TARGET_BF537_PNAV=y
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_NET_RANDOM_ETHADDR=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
configs/bf537-srv1_defconfig +2 -1
index ba80e63..580bc83 100644
@@ -5,5 +5,6 @@ CONFIG_SYS_PROMPT="srv1> "
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_NET_RANDOM_ETHADDR=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
configs/bf537-stamp_defconfig +2 -1
index 34c774c..2e21cc5 100644
@@ -3,7 +3,8 @@ CONFIG_TARGET_BF537_STAMP=y
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_NET_RANDOM_ETHADDR=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_ATMEL=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_MACRONIX=y
configs/bf548-ezkit_defconfig +2 -1
index eca4c85..d0b96ff 100644
@@ -2,7 +2,8 @@ CONFIG_BLACKFIN=y
 CONFIG_TARGET_BF548_EZKIT=y
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_CC_OPTIMIZE_LIBS_FOR_SPEED=y
 CONFIG_LIB_RAND=y
configs/bf561-acvilon_defconfig +2 -1
index 4a25d2e..171de78 100644
@@ -5,7 +5,8 @@ CONFIG_SYS_PROMPT="Acvilon> "
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_ATMEL=y
 CONFIG_CC_OPTIMIZE_LIBS_FOR_SPEED=y
 CONFIG_LIB_RAND=y
configs/bf609-ezkit_defconfig +2 -1
index 642ca87..f050eff 100644
@@ -2,7 +2,8 @@ CONFIG_BLACKFIN=y
 CONFIG_TARGET_BF609_EZKIT=y
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_ATMEL=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_MACRONIX=y
configs/bg0900_defconfig +2 -1
index c11617a..60d2a53 100644
@@ -4,7 +4,8 @@ CONFIG_SPL=y
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_BAR=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_OF_LIBFDT=y
configs/birdland_bav335a_defconfig +2 -1
index 6d7c20d..db8a573 100644
@@ -8,7 +8,8 @@ CONFIG_SYS_EXTRA_OPTIONS="SERIAL1,CONS_INDEX=1"
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_SYS_NS16550=y
 CONFIG_OF_LIBFDT=y
configs/birdland_bav335b_defconfig +2 -1
index 910ddc7..9ea3a87 100644
@@ -8,7 +8,8 @@ CONFIG_SYS_EXTRA_OPTIONS="SERIAL1,CONS_INDEX=1"
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_SYS_NS16550=y
 CONFIG_OF_LIBFDT=y
configs/blackstamp_defconfig +2 -1
index 944145a..0a2bd94 100644
@@ -3,5 +3,6 @@ CONFIG_TARGET_BLACKSTAMP=y
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
configs/blackvme_defconfig +2 -1
index 41b5a23..e941e42 100644
@@ -3,5 +3,6 @@ CONFIG_TARGET_BLACKVME=y
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
configs/br4_defconfig +2 -1
index effba78..ae39cbb 100644
@@ -5,7 +5,8 @@ CONFIG_SYS_PROMPT="br4>"
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_CC_OPTIMIZE_LIBS_FOR_SPEED=y
 CONFIG_LIB_RAND=y
configs/cardhu_defconfig +2 -1
index 808e0e2..229dcbe 100644
@@ -13,7 +13,8 @@ CONFIG_SYS_PROMPT="Tegra30 (Cardhu) # "
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 # CONFIG_CMD_NFS is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_PCI_TEGRA=y
 CONFIG_SYS_NS16550=y
configs/cgtqmx6eval_defconfig +2 -0
index 8fc8e64..a59ab7f 100644
@@ -9,3 +9,5 @@ CONFIG_SYS_PROMPT="CGT-QMX6-Quad U-Boot > "
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_OF_LIBFDT=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
configs/chromebook_jerry_defconfig +2 -0
index 4c72035..7930899 100644
@@ -63,3 +63,5 @@ CONFIG_USE_PRIVATE_LIBGCC=y
 CONFIG_USE_TINY_PRINTF=y
 CONFIG_CMD_DHRYSTONE=y
 CONFIG_ERRNO_STR=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
configs/chromebook_link_defconfig +2 -1
index 8a39740..6ddfb47 100644
@@ -28,7 +28,8 @@ CONFIG_SYS_I2C_INTEL=y
 CONFIG_CMD_CROS_EC=y
 CONFIG_CROS_EC=y
 CONFIG_CROS_EC_LPC=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_GIGADEVICE=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SPI_FLASH_WINBOND=y
configs/chromebook_samus_defconfig +2 -1
index 448446d..f74d76a 100644
@@ -27,7 +27,8 @@ CONFIG_INTEL_BROADWELL_GPIO=y
 CONFIG_CMD_CROS_EC=y
 CONFIG_CROS_EC=y
 CONFIG_CROS_EC_LPC=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_GIGADEVICE=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SPI_FLASH_WINBOND=y
configs/chromebox_panther_defconfig +2 -1
index 3b32e51..ccbf42d 100644
@@ -22,7 +22,8 @@ CONFIG_SYSCON=y
 CONFIG_CMD_CROS_EC=y
 CONFIG_CROS_EC=y
 CONFIG_CROS_EC_LPC=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_GIGADEVICE=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SPI_FLASH_WINBOND=y
configs/clearfog_defconfig +2 -1
index 57d6a64..5d7b7fd 100644
@@ -9,7 +9,8 @@ CONFIG_SPL=y
 CONFIG_CMD_USB=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_SPL_OF_TRANSLATE=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_DEBUG_UART=y
 CONFIG_DEBUG_UART_BASE=0xd0012000
 CONFIG_DEBUG_UART_CLOCK=250000000
configs/cm_fx6_defconfig +2 -1
index c37442d..65c926e 100644
@@ -18,7 +18,8 @@ CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_CMD_DHCP=y
 CONFIG_CMD_PING=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_ATMEL=y
 CONFIG_SPI_FLASH_EON=y
 CONFIG_SPI_FLASH_GIGADEVICE=y
configs/cm_t43_defconfig +2 -1
index 28a96fb..7f4b247 100644
@@ -13,7 +13,8 @@ CONFIG_DM=y
 CONFIG_SYS_NS16550=y
 CONFIG_OF_LIBFDT=y
 CONFIG_DM_SERIAL=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_BAR=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_SPI_FLASH_SST=y
configs/conga-qeval20-qa3-e3845_defconfig +2 -1
index 24a927d..65c11f3 100644
@@ -24,7 +24,8 @@ CONFIG_REGMAP=y
 CONFIG_SYSCON=y
 CONFIG_CPU=y
 CONFIG_WINBOND_W83627=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_GIGADEVICE=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SPI_FLASH_STMICRO=y
configs/controlcenterd_36BIT_SDCARD_DEVELOP_defconfig +2 -1
index b46f4cc..eed6771 100644
@@ -10,7 +10,8 @@ CONFIG_SYS_EXTRA_OPTIONS="36BIT,SDCARD,DEVELOP"
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_TPM=y
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SYS_NS16550=y
 CONFIG_FSL_ESPI=y
configs/controlcenterd_36BIT_SDCARD_defconfig +2 -1
index 25eb520..0af8739 100644
@@ -10,7 +10,8 @@ CONFIG_SYS_EXTRA_OPTIONS="36BIT,SDCARD"
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_TPM=y
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SYS_NS16550=y
 CONFIG_FSL_ESPI=y
configs/coreboot-x86_defconfig +2 -1
index a1c7df7..1d39b9e 100644
@@ -12,7 +12,8 @@ CONFIG_CMD_BOOTSTAGE=y
 CONFIG_CMD_TPM=y
 CONFIG_CMD_TPM_TEST=y
 CONFIG_OF_CONTROL=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_GIGADEVICE=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SPI_FLASH_WINBOND=y
configs/cougarcanyon2_defconfig +2 -1
index 71028cf..d9992c2 100644
@@ -10,7 +10,8 @@ CONFIG_CMD_GPIO=y
 CONFIG_OF_CONTROL=y
 CONFIG_REGMAP=y
 CONFIG_SYSCON=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_DM_PCI=y
 CONFIG_DM_RTC=y
configs/crownbay_defconfig +2 -1
index b4e1876..3209d44 100644
@@ -21,7 +21,8 @@ CONFIG_OF_CONTROL=y
 CONFIG_REGMAP=y
 CONFIG_SYSCON=y
 CONFIG_CPU=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_GIGADEVICE=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SPI_FLASH_SST=y
configs/d2net_v2_defconfig +2 -1
index b2d2aeb..42976f4 100644
@@ -5,7 +5,8 @@ CONFIG_SYS_EXTRA_OPTIONS="D2NET_V2"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SYS_NS16550=y
 CONFIG_OF_LIBFDT=y
configs/da850_am18xxevm_defconfig +2 -1
index 870186c..84e5571 100644
@@ -6,7 +6,8 @@ CONFIG_SYS_EXTRA_OPTIONS="DA850_AM18X_EVM,MAC_ADDR_IN_EEPROM,SYS_I2C_EEPROM_ADDR
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_SYS_NS16550=y
configs/da850evm_defconfig +2 -1
index 6d7f984..feafcf3 100644
@@ -7,7 +7,8 @@ CONFIG_SYS_PROMPT="U-Boot > "
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_SYS_NS16550=y
configs/da850evm_direct_nor_defconfig +2 -1
index 7aba5c4..7d68722 100644
@@ -4,7 +4,8 @@ CONFIG_TARGET_DA850EVM=y
 CONFIG_SYS_EXTRA_OPTIONS="MAC_ADDR_IN_SPIFLASH,USE_NOR,DIRECT_NOR_BOOT"
 CONFIG_SYS_PROMPT="U-Boot > "
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_SYS_NS16550=y
configs/dalmore_defconfig +2 -1
index 15bd9f1..727eb96 100644
@@ -13,7 +13,8 @@ CONFIG_SYS_PROMPT="Tegra114 (Dalmore) # "
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 # CONFIG_CMD_NFS is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_SYS_NS16550=y
 CONFIG_TEGRA114_SPI=y
configs/db-88f6820-gp_defconfig +2 -1
index 111f3a1..2c474c9 100644
@@ -9,7 +9,8 @@ CONFIG_SPL=y
 CONFIG_CMD_USB=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_SPL_OF_TRANSLATE=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_DEBUG_UART=y
configs/db-mv784mp-gp_defconfig +2 -1
index 6dda2ae..5f9bc78 100644
@@ -11,7 +11,8 @@ CONFIG_CMD_USB=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_SPL_OF_TRANSLATE=y
 CONFIG_NAND_PXA3XX=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_DEBUG_UART=y
configs/dra72_evm_defconfig +3 -2
index 0a5f70b..4b9ced4 100644
@@ -4,7 +4,7 @@ CONFIG_SYS_MALLOC_F_LEN=0x2000
 CONFIG_TARGET_DRA7XX_EVM=y
 CONFIG_DM_SERIAL=y
 CONFIG_DM_SPI=y
-CONFIG_DM_SPI_FLASH=y
+CONFIG_MTD=y
 CONFIG_DM_GPIO=y
 CONFIG_SPL_STACK_R_ADDR=0x82000000
 CONFIG_DEFAULT_DEVICE_TREE="dra72-evm"
@@ -16,7 +16,8 @@ CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_OF_CONTROL=y
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SYS_NS16550=y
configs/dra74_evm_defconfig +3 -2
index 916016d..9c7773a 100644
@@ -3,7 +3,7 @@ CONFIG_OMAP54XX=y
 CONFIG_TARGET_DRA7XX_EVM=y
 CONFIG_DM_SERIAL=y
 CONFIG_DM_SPI=y
-CONFIG_DM_SPI_FLASH=y
+CONFIG_MTD=y
 CONFIG_DM_GPIO=y
 CONFIG_SPL_STACK_R_ADDR=0x82000000
 CONFIG_DEFAULT_DEVICE_TREE="dra7-evm"
@@ -15,7 +15,8 @@ CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_OF_CONTROL=y
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SYS_NS16550=y
configs/dra7xx_evm_defconfig +3 -1
index 7aaef1b..0c22f7f 100644
@@ -8,7 +8,9 @@ CONFIG_SPL_STACK_R=y
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+# CONFIG_CMD_NFS is not set
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SYS_NS16550=y
configs/dra7xx_evm_qspiboot_defconfig +3 -1
index 0789cff..76d1de3 100644
@@ -9,7 +9,9 @@ CONFIG_SYS_EXTRA_OPTIONS="QSPI_BOOT"
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+# CONFIG_CMD_NFS is not set
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SYS_NS16550=y
 CONFIG_TI_QSPI=y
configs/dra7xx_evm_uart3_defconfig +3 -1
index 768920b..2369095 100644
@@ -10,7 +10,9 @@ CONFIG_SYS_EXTRA_OPTIONS="SPL_YMODEM_SUPPORT"
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+# CONFIG_CMD_NFS is not set
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SYS_NS16550=y
 CONFIG_TI_QSPI=y
configs/draco_defconfig +2 -1
index 967f2ff..902f645 100644
@@ -9,7 +9,8 @@ CONFIG_AUTOBOOT_STOP_STR="\x1b\x1b"
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_SYS_NS16550=y
 CONFIG_OF_LIBFDT=y
configs/dreamplug_defconfig +2 -1
index c6b3b53..8cea602 100644
@@ -9,7 +9,8 @@ CONFIG_CMD_USB=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_CMD_DHCP=y
 CONFIG_CMD_PING=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SYS_NS16550=y
 CONFIG_OF_LIBFDT=y
configs/ds414_defconfig +2 -1
index 4c3c1df..f43d358 100644
@@ -8,7 +8,8 @@ CONFIG_SPL=y
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_SPL_OF_TRANSLATE=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_BAR=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_DEBUG_UART=y
configs/e2220-1170_defconfig +2 -1
index 1a7b07d..d490116 100644
@@ -11,7 +11,8 @@ CONFIG_SYS_PROMPT="Tegra210 (E2220-1170) # "
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 # CONFIG_CMD_NFS is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_SYS_NS16550=y
 CONFIG_TEGRA114_SPI=y
configs/ea20_defconfig +2 -1
index 6fe19c7..27ef793 100644
@@ -6,6 +6,7 @@ CONFIG_SYS_PROMPT="ea20 > "
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SYS_NS16550=y
configs/ethernut5_defconfig +2 -1
index 04d8611..b3d4f82 100644
@@ -6,5 +6,6 @@ CONFIG_SYS_PROMPT="U-Boot> "
 # CONFIG_CMD_BDI is not set
 # CONFIG_CMD_LOADS is not set
 # CONFIG_CMD_FPGA is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_ATMEL=y
configs/firefly-rk3288_defconfig +2 -0
index d27e4a5..1680149 100644
@@ -55,3 +55,5 @@ CONFIG_USE_PRIVATE_LIBGCC=y
 CONFIG_USE_TINY_PRINTF=y
 CONFIG_CMD_DHRYSTONE=y
 CONFIG_ERRNO_STR=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
configs/galileo_defconfig +2 -1
index 832ac4d..98a6a72 100644
@@ -17,7 +17,8 @@ CONFIG_OF_CONTROL=y
 CONFIG_REGMAP=y
 CONFIG_SYSCON=y
 CONFIG_NET_RANDOM_ETHADDR=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_GIGADEVICE=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SPI_FLASH_WINBOND=y
configs/gose_defconfig +2 -1
index 475bdd1..6158df2 100644
@@ -17,7 +17,8 @@ CONFIG_TARGET_GOSE=y
 # CONFIG_CMD_SETEXPR is not set
 # CONFIG_CMD_MISC is not set
 CONFIG_SH_SDHI=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_OF_LIBFDT=y
configs/gplugd_defconfig +2 -1
index b7ef262..6406004 100644
@@ -4,7 +4,8 @@ CONFIG_TARGET_GPLUGD=y
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_FPGA is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_ATMEL=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SYS_NS16550=y
configs/inetspace_v2_defconfig +2 -1
index 6e49081..a3d98e2 100644
@@ -5,7 +5,8 @@ CONFIG_SYS_EXTRA_OPTIONS="INETSPACE_V2"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SYS_NS16550=y
 CONFIG_OF_LIBFDT=y
configs/ip04_defconfig +2 -1
index e2aa906..00160eb 100644
@@ -5,7 +5,8 @@ CONFIG_TARGET_IP04=y
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_NET_RANDOM_ETHADDR=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_CC_OPTIMIZE_LIBS_FOR_SPEED=y
configs/jetson-tk1_defconfig +2 -1
index c07b278..f6ede45 100644
@@ -13,7 +13,8 @@ CONFIG_SYS_PROMPT="Tegra124 (Jetson TK1) # "
 CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 # CONFIG_CMD_NFS is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_PCI_TEGRA=y
 CONFIG_SYS_NS16550=y
configs/k2e_evm_defconfig +2 -1
index 0949468..1df0600 100644
@@ -11,7 +11,8 @@ CONFIG_SYS_PROMPT="K2E EVM # "
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_OF_CONTROL=y
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SYS_NS16550=y
 CONFIG_DM_ETH=y
configs/k2g_evm_defconfig +2 -1
index b721a1c..026f38b 100644
@@ -12,7 +12,8 @@ CONFIG_REMOTEPROC_TI_POWER=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_OF_CONTROL=y
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SYS_NS16550=y
 CONFIG_DM_ETH=y
configs/k2hk_evm_defconfig +2 -1
index 579c6b8..1e8767e 100644
@@ -11,7 +11,8 @@ CONFIG_SYS_PROMPT="K2HK EVM # "
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_OF_CONTROL=y
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SYS_NS16550=y
 CONFIG_DM_ETH=y
configs/k2l_evm_defconfig +2 -1
index af1dc2c..cca7df2 100644
@@ -11,7 +11,8 @@ CONFIG_SYS_PROMPT="K2L EVM # "
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_OF_CONTROL=y
 CONFIG_DM=y
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SYS_NS16550=y
 CONFIG_DM_ETH=y
configs/km_kirkwood_128m16_defconfig +2 -1
index 349651d..1eab5fc 100644
@@ -4,7 +4,8 @@ CONFIG_TARGET_KM_KIRKWOOD=y
 CONFIG_SYS_EXTRA_OPTIONS="KM_KIRKWOOD_128M16"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SYS_NS16550=y
 CONFIG_OF_LIBFDT=y
configs/km_kirkwood_defconfig +2 -1
index 9a0d85c..befd17f 100644
@@ -4,7 +4,8 @@ CONFIG_TARGET_KM_KIRKWOOD=y
 CONFIG_SYS_EXTRA_OPTIONS="KM_KIRKWOOD"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SYS_NS16550=y
 CONFIG_OF_LIBFDT=y
configs/km_kirkwood_pci_defconfig +2 -1
index d2c488e..3405c24 100644
@@ -4,7 +4,8 @@ CONFIG_TARGET_KM_KIRKWOOD=y
 CONFIG_SYS_EXTRA_OPTIONS="KM_KIRKWOOD_PCI"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SYS_NS16550=y
 CONFIG_OF_LIBFDT=y
configs/kmcoge4_defconfig +2 -1
index 49e1c9b..60a28c0 100644
@@ -8,7 +8,8 @@ CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="KMCOGE4"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
configs/kmcoge5un_defconfig +2 -1
index b390e3e..fec962a 100644
@@ -4,7 +4,8 @@ CONFIG_TARGET_KM_KIRKWOOD=y
 CONFIG_SYS_EXTRA_OPTIONS="KM_COGE5UN"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SYS_NS16550=y
 CONFIG_OF_LIBFDT=y
configs/kmlion1_defconfig +2 -1
index 12d0131..55c4f1c 100644
@@ -8,7 +8,8 @@ CONFIG_OF_STDOUT_VIA_ALIAS=y
 CONFIG_SYS_EXTRA_OPTIONS="KMLION1"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_NETDEVICES=y
configs/kmnusa_defconfig +2 -1
index 3a1aa69..295b2bb 100644
@@ -4,7 +4,8 @@ CONFIG_TARGET_KM_KIRKWOOD=y
 CONFIG_SYS_EXTRA_OPTIONS="KM_NUSA"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SYS_NS16550=y
 CONFIG_OF_LIBFDT=y
configs/kmsugp1_defconfig +2 -1
index bc9aaec..e6e3cd0 100644
@@ -4,7 +4,8 @@ CONFIG_TARGET_KM_KIRKWOOD=y
 CONFIG_SYS_EXTRA_OPTIONS="KM_SUGP1"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
-CONFIG_SPI_FLASH=y
+CONFIG_MTD_SPI_NOR=y
[… more lines in the raw message]

Lines of this file are not shown. View the raw message.

configs/kmsuv31_defconfig +2 -1
index 0a16c04..33e74ca 100644

Lines of this file are not shown. View the raw message.

configs/koelsch_defconfig +2 -1
index 24ea181..eb9432c 100644

Lines of this file are not shown. View the raw message.

configs/kylin-rk3036_defconfig +2 -0
index 2cc9de4..2e18a40 100644

Lines of this file are not shown. View the raw message.

configs/lager_defconfig +2 -1
index f042ff7..cf9511f 100644

Lines of this file are not shown. View the raw message.

configs/legoev3_defconfig +2 -1
index d838baa..2a494a5 100644

Lines of this file are not shown. View the raw message.

configs/ls1021aqds_sdcard_qspi_defconfig +2 -1
index cd75af6..809178a 100644

Lines of this file are not shown. View the raw message.

configs/ls1021atwr_qspi_defconfig +3 -1
index c94581e..1a03726 100644

Lines of this file are not shown. View the raw message.

configs/ls1021atwr_sdcard_qspi_defconfig +2 -1
index a44988a..9adc55b 100644

Lines of this file are not shown. View the raw message.

configs/ls1043aqds_defconfig +2 -1
index c1a6736..cde7708 100644

Lines of this file are not shown. View the raw message.

configs/ls1043aqds_lpuart_defconfig +2 -1
index 7468c1b..5e000bd 100644

Lines of this file are not shown. View the raw message.

configs/ls1043aqds_nand_defconfig +2 -1
index 4ba0cef..46990c6 100644

Lines of this file are not shown. View the raw message.

configs/ls1043aqds_nor_ddr3_defconfig +2 -1
index 0a79e98..b1eeee8 100644

Lines of this file are not shown. View the raw message.

configs/ls1043aqds_qspi_defconfig +2 -1
index 3864dd6..01c8045 100644

Lines of this file are not shown. View the raw message.

configs/ls1043aqds_sdcard_ifc_defconfig +2 -1
index 622d26e..9e8cac1 100644

Lines of this file are not shown. View the raw message.

configs/ls1043aqds_sdcard_qspi_defconfig +2 -1
index 02597f2..b43e5d4 100644

Lines of this file are not shown. View the raw message.

configs/ls1043ardb_SECURE_BOOT_defconfig +2 -1
index c25c3c1..094e6b1 100644

Lines of this file are not shown. View the raw message.

configs/ls1043ardb_defconfig +2 -1
index 97f224d..3945432 100644

Lines of this file are not shown. View the raw message.

configs/ls1043ardb_nand_defconfig +2 -1
index a273331..180f464 100644

Lines of this file are not shown. View the raw message.

configs/ls1043ardb_sdcard_defconfig +2 -1
index 50f4955..b8731df 100644

Lines of this file are not shown. View the raw message.

configs/ls2080aqds_defconfig +1 -1
index a16a6d5..7ced493 100644

Lines of this file are not shown. View the raw message.

configs/ls2080ardb_defconfig +1 -1
index f8f54e7..8b3e082 100644

Lines of this file are not shown. View the raw message.

configs/ls2085aqds_defconfig +1 -1
index a5c8388..04ac068 100644

Lines of this file are not shown. View the raw message.

configs/ls2085ardb_defconfig +1 -1
index fe46dbc..058ceb5 100644

Lines of this file are not shown. View the raw message.

configs/lschlv2_defconfig +2 -1
index f33cda6..847cae2 100644

Lines of this file are not shown. View the raw message.

configs/lsxhl_defconfig +2 -1
index 9f3fde5..175ec1a 100644

Lines of this file are not shown. View the raw message.

configs/m28evk_defconfig +2 -1
index b587617..59d4164 100644

Lines of this file are not shown. View the raw message.

configs/ma5d4evk_defconfig +2 -1
index 378dc30..847383b 100644

Lines of this file are not shown. View the raw message.

configs/marsboard_defconfig +2 -1
index 4bdbb6d..10199ba 100644

Lines of this file are not shown. View the raw message.

configs/maxbcm_defconfig +2 -1
index 200c7a0..5fb993d 100644

Lines of this file are not shown. View the raw message.

configs/mgcoge3un_defconfig +2 -1
index f1e8fd7..a36c922 100644

Lines of this file are not shown. View the raw message.

configs/minnowmax_defconfig +2 -1
index ea39e6a..ab83076 100644

Lines of this file are not shown. View the raw message.

configs/mx28evk_auart_console_defconfig +2 -1
index f4c934f..f56ec28 100644

Lines of this file are not shown. View the raw message.

configs/mx28evk_defconfig +2 -1
index d0e413d..eee2651 100644

Lines of this file are not shown. View the raw message.

configs/mx28evk_nand_defconfig +2 -1
index 0f76bde..8fa0702 100644

Lines of this file are not shown. View the raw message.

configs/mx28evk_spi_defconfig +2 -1
index ad939ca..1768d90 100644

Lines of this file are not shown. View the raw message.

configs/mx6dlsabreauto_defconfig +2 -1
index 46b8a9f..b4a84bc 100644

Lines of this file are not shown. View the raw message.

configs/mx6dlsabresd_defconfig +2 -1
index 45a7ec3..e2181b0 100644

Lines of this file are not shown. View the raw message.

configs/mx6qpsabreauto_defconfig +2 -1
index 0877c41..49427ed 100644

Lines of this file are not shown. View the raw message.

configs/mx6qsabreauto_defconfig +2 -1
index 36ebc89..16eda5d 100644

Lines of this file are not shown. View the raw message.

configs/mx6qsabrelite_defconfig +2 -1
index fc8323c..6681a32 100644

Lines of this file are not shown. View the raw message.

configs/mx6qsabresd_defconfig +2 -1
index 224e6ed..ff022d7 100644

Lines of this file are not shown. View the raw message.

configs/mx6sabresd_spl_defconfig +2 -1
index 406777c..816ab97 100644

Lines of this file are not shown. View the raw message.

configs/mx6slevk_defconfig +2 -1
index 2d24622..6a1045d 100644

Lines of this file are not shown. View the raw message.

configs/mx6slevk_spinor_defconfig +2 -1
index 65b5e9d..4aa4b14 100644

Lines of this file are not shown. View the raw message.

configs/mx6slevk_spl_defconfig +2 -1
index fee352c..6a903ae 100644

Lines of this file are not shown. View the raw message.

configs/mx6sxsabreauto_defconfig +2 -1
index d9e35df..4dd2f8f 100644

Lines of this file are not shown. View the raw message.

configs/mx6sxsabresd_defconfig +2 -1
index f4e88f2..8c6085e 100644

Lines of this file are not shown. View the raw message.

configs/mx6sxsabresd_spl_defconfig +2 -1
index 2713a4b..92d9a06 100644

Lines of this file are not shown. View the raw message.

configs/net2big_v2_defconfig +2 -1
index c0aee31..ed4860d 100644

Lines of this file are not shown. View the raw message.

configs/netspace_lite_v2_defconfig +2 -1
index eb26f88..351da4a 100644

Lines of this file are not shown. View the raw message.

configs/netspace_max_v2_defconfig +2 -1
index e37523e..34abc94 100644

Lines of this file are not shown. View the raw message.

configs/netspace_mini_v2_defconfig +2 -1
index e847123..0a16c0c 100644

Lines of this file are not shown. View the raw message.

configs/netspace_v2_defconfig +2 -1
index 01a6f7e..cc22465 100644

Lines of this file are not shown. View the raw message.

configs/nitrogen6dl2g_defconfig +2 -1
index 40da15c..c2dccda 100644

Lines of this file are not shown. View the raw message.

configs/nitrogen6dl_defconfig +2 -1
index 5f7c17a..2d76de1 100644

Lines of this file are not shown. View the raw message.

configs/nitrogen6q2g_defconfig +2 -1
index 8707d7e..f4503e2 100644

Lines of this file are not shown. View the raw message.

configs/nitrogen6q_defconfig +2 -1
index fbe9b6f..aca3318 100644

Lines of this file are not shown. View the raw message.

configs/nitrogen6s1g_defconfig +2 -1
index 078fc20..7c65fe1 100644

Lines of this file are not shown. View the raw message.

configs/nitrogen6s_defconfig +2 -1
index 707fb58..e7fbe42 100644

Lines of this file are not shown. View the raw message.

configs/nyan-big_defconfig +2 -1
index 604aacf..275e998 100644

Lines of this file are not shown. View the raw message.

configs/omapl138_lcdk_defconfig +2 -1
index 8b97508..41f9039 100644

Lines of this file are not shown. View the raw message.

configs/ot1200_defconfig +2 -1
index 5e8671f..1b77d05 100644

Lines of this file are not shown. View the raw message.

configs/ot1200_spl_defconfig +2 -1
index 2d37d8b..3cb0ae5 100644

Lines of this file are not shown. View the raw message.

configs/p2371-0000_defconfig +2 -1
index 6282acf..eacb3f7 100644

Lines of this file are not shown. View the raw message.

configs/p2371-2180_defconfig +2 -1
index 392c539..857fef2 100644

Lines of this file are not shown. View the raw message.

configs/p2571_defconfig +2 -1
index 04df7e9..67e186e 100644

Lines of this file are not shown. View the raw message.

configs/pcm051_rev1_defconfig +2 -1
index b74b372..809cce1 100644

Lines of this file are not shown. View the raw message.

configs/pcm051_rev3_defconfig +2 -1
index 18be2a0..654d657 100644

Lines of this file are not shown. View the raw message.

configs/peach-pi_defconfig +2 -1
index 23b9762..aa6b29a 100644

Lines of this file are not shown. View the raw message.

configs/peach-pit_defconfig +2 -1
index adde56f..285e4ae 100644

Lines of this file are not shown. View the raw message.

configs/porter_defconfig +2 -1
index 5899f73..4b9a153 100644

Lines of this file are not shown. View the raw message.

configs/portl2_defconfig +2 -1
index 37c9ddb..e463766 100644

Lines of this file are not shown. View the raw message.

configs/pr1_defconfig +2 -1
index c813502..2f92389 100644

Lines of this file are not shown. View the raw message.

configs/pxm2_defconfig +2 -1
index 5b32bb1..85cb63a 100644

Lines of this file are not shown. View the raw message.

configs/qemu-x86_defconfig +2 -1
index bb9c6cd..d22c859 100644

Lines of this file are not shown. View the raw message.

configs/rastaban_defconfig +2 -1
index 6e7d0d2..6bba132 100644

Lines of this file are not shown. View the raw message.

configs/riotboard_defconfig +2 -1
index 35b96a3..aa711f2 100644

Lines of this file are not shown. View the raw message.

configs/rock2_defconfig +2 -0
index 68e674d..73cadef 100644

Lines of this file are not shown. View the raw message.

configs/rut_defconfig +2 -1
index 7a4011e..d6e4423 100644

Lines of this file are not shown. View the raw message.

configs/sama5d2_xplained_mmc_defconfig +2 -1
index d6bc70e..e716f0e 100644

Lines of this file are not shown. View the raw message.

configs/sama5d2_xplained_spiflash_defconfig +2 -1
index eb2f1f0..7f339f2 100644

Lines of this file are not shown. View the raw message.

configs/sama5d3xek_mmc_defconfig +2 -1
index 4a97da1..82aa782 100644

Lines of this file are not shown. View the raw message.

configs/sama5d3xek_nandflash_defconfig +2 -1
index 968cd66..0914ede 100644

Lines of this file are not shown. View the raw message.

configs/sama5d3xek_spiflash_defconfig +2 -1
index bc98e6b..622e71a 100644

Lines of this file are not shown. View the raw message.

configs/sama5d4_xplained_mmc_defconfig +2 -1
index f1261ab..a6afa56 100644

Lines of this file are not shown. View the raw message.

configs/sama5d4_xplained_nandflash_defconfig +2 -1
index 0e53b32..b871d9b 100644

Lines of this file are not shown. View the raw message.

configs/sama5d4_xplained_spiflash_defconfig +2 -1
index a1b2c53..d8fdcf9 100644

Lines of this file are not shown. View the raw message.

configs/sama5d4ek_mmc_defconfig +2 -1
index bf81f9b..3ea5f85 100644

Lines of this file are not shown. View the raw message.

configs/sama5d4ek_nandflash_defconfig +2 -1
index c78266e..8443781 100644

Lines of this file are not shown. View the raw message.

configs/sama5d4ek_spiflash_defconfig +2 -1
index 7c10aab..5c578dc 100644

Lines of this file are not shown. View the raw message.

configs/sh7752evb_defconfig +2 -1
index 4c8883b..5754fe5 100644

Lines of this file are not shown. View the raw message.

configs/sh7753evb_defconfig +2 -1
index 9992cff..ae46a8f 100644

Lines of this file are not shown. View the raw message.

configs/sh7757lcr_defconfig +2 -1
index 54d6436..51f9061 100644

Lines of this file are not shown. View the raw message.

configs/silk_defconfig +2 -1
index 67fca2a..d1db8ab 100644

Lines of this file are not shown. View the raw message.

configs/smdk5250_defconfig +2 -1
index b3d16ab..8bbafa5 100644

Lines of this file are not shown. View the raw message.

configs/smdk5420_defconfig +2 -1
index a84d159..790790a 100644

Lines of this file are not shown. View the raw message.

configs/snow_defconfig +2 -1
index 5dbd18a..09eb339 100644

Lines of this file are not shown. View the raw message.

configs/socfpga_arria5_defconfig +2 -1
index 7b60d95..32e787b 100644

Lines of this file are not shown. View the raw message.

configs/socfpga_cyclone5_defconfig +2 -1
index 6a487f4..3c5b7cc 100644

Lines of this file are not shown. View the raw message.

configs/socfpga_de0_nano_soc_defconfig +3 -0
index cfcae5d..53a43f3 100644

Lines of this file are not shown. View the raw message.

configs/socfpga_mcvevk_defconfig +2 -0
index b6f6a65..e602b3a 100644

Lines of this file are not shown. View the raw message.

configs/socfpga_sockit_defconfig +2 -1
index f45c3ed..48947b1 100644

Lines of this file are not shown. View the raw message.

configs/socfpga_socrates_defconfig +2 -1
index e25d09b..336d30b 100644

Lines of this file are not shown. View the raw message.

configs/socfpga_sr1500_defconfig +2 -1
index d499a14..b7fc8a1 100644

Lines of this file are not shown. View the raw message.

configs/spring_defconfig +2 -1
index 352bd1a..f6d7f05 100644

Lines of this file are not shown. View the raw message.

configs/stout_defconfig +2 -1
index c5af189..c2ba137 100644

Lines of this file are not shown. View the raw message.

configs/taurus_defconfig +2 -1
index 0af7f2d..bb56c38 100644

Lines of this file are not shown. View the raw message.

configs/tec-ng_defconfig +2 -1
index 389603c..4a27e12 100644

Lines of this file are not shown. View the raw message.

configs/theadorable_debug_defconfig +2 -1
index 62a6ee6..b6897f5 100644

Lines of this file are not shown. View the raw message.

configs/theadorable_defconfig +2 -1
index 4d5f3b0..291b90e 100644

Lines of this file are not shown. View the raw message.

configs/thuban_defconfig +2 -1
index 666cf5e..8820831 100644

Lines of this file are not shown. View the raw message.

configs/tqma6q_mba6_mmc_defconfig +2 -1
index 6c52fff..f0175f0 100644

Lines of this file are not shown. View the raw message.

configs/tqma6q_mba6_spi_defconfig +2 -1
index 85b239b..c5b6103 100644

Lines of this file are not shown. View the raw message.

configs/tqma6s_mba6_mmc_defconfig +2 -1
index 977f98a..70b7d5f 100644

Lines of this file are not shown. View the raw message.

configs/tqma6s_mba6_spi_defconfig +2 -1
index c6dac61..bbe279c 100644

Lines of this file are not shown. View the raw message.

configs/trimslice_defconfig +2 -1
index a0b3a3e..bfd0cf7 100644

Lines of this file are not shown. View the raw message.

configs/tseries_spi_defconfig +2 -1
index 4c6d544..1bfa9d6 100644

Lines of this file are not shown. View the raw message.

configs/venice2_defconfig +2 -1
index 954c1de..1501622 100644

Lines of this file are not shown. View the raw message.

configs/vf610twr_defconfig +2 -1
index 7c83887..f5a3134 100644

Lines of this file are not shown. View the raw message.

configs/vf610twr_nand_defconfig +2 -1
index 4591526..db172c0 100644

Lines of this file are not shown. View the raw message.

configs/vinco_defconfig +2 -1
index 7cae79b..f279770 100644

Lines of this file are not shown. View the raw message.

configs/zynq_microzed_defconfig +2 -1
index 4c5152f..49232e1 100644

Lines of this file are not shown. View the raw message.

configs/zynq_zc702_defconfig +2 -1
index f01874f..cddb49b 100644

Lines of this file are not shown. View the raw message.

configs/zynq_zc706_defconfig +2 -1
index 215f00d..9991081 100644

Lines of this file are not shown. View the raw message.

configs/zynq_zc770_xm010_defconfig +2 -1
index cec722f..995b700 100644

Lines of this file are not shown. View the raw message.

configs/zynq_zc770_xm013_defconfig +2 -1
index 9feaca8..7ffc7b8 100644

Lines of this file are not shown. View the raw message.

configs/zynq_zed_defconfig +2 -1
index 4a2a2fc..a595075 100644

Lines of this file are not shown. View the raw message.

configs/zynq_zybo_defconfig +2 -1
index 7c23fec..78eeb30 100644

Lines of this file are not shown. View the raw message.

include/configs/MPC8536DS.h +1 -1
index 9298c30..f9138c1 100644

Lines of this file are not shown. View the raw message.

include/configs/P1010RDB.h +2 -1
index 81af871..fe34d40 100644

Lines of this file are not shown. View the raw message.

include/configs/P1022DS.h +2 -1
index bc4c733..440ec14 100644

Lines of this file are not shown. View the raw message.

include/configs/T102xQDS.h +2 -1
index f07b2d1..7031fba 100644

Lines of this file are not shown. View the raw message.

include/configs/T102xRDB.h +2 -1
index 1a22bee..96498a1 100644

Lines of this file are not shown. View the raw message.

include/configs/T104xRDB.h +2 -1
index 84e195d..cc2dae1 100644

Lines of this file are not shown. View the raw message.

include/configs/T208xQDS.h +3 -2
index 5957fa8..82db256 100644

Lines of this file are not shown. View the raw message.

include/configs/T208xRDB.h +3 -2
index e0769d0..ee8fccd 100644

Lines of this file are not shown. View the raw message.

include/configs/UCP1020.h +2 -2
index 139e629..7c565b6 100644

Lines of this file are not shown. View the raw message.

include/configs/am335x_evm.h +2 -1
index 150c523..4462a58 100644

Lines of this file are not shown. View the raw message.

include/configs/am43xx_evm.h +1 -1
index b982ed6..7386625 100644

Lines of this file are not shown. View the raw message.

include/configs/at91sam9n12ek.h +2 -1
index 14a8436..b432c79 100644

Lines of this file are not shown. View the raw message.

include/configs/at91sam9x5ek.h +2 -1
index cd91a7b..4bfb7c8 100644

Lines of this file are not shown. View the raw message.

include/configs/bav335x.h +2 -1
index a9df0b3..50060d5 100644

Lines of this file are not shown. View the raw message.

include/configs/bfin_adi_common.h +1 -1
index 9c537e0..fb9d5bf 100644

Lines of this file are not shown. View the raw message.

include/configs/cgtqmx6eval.h +2 -2
index 487c011..da81dc4 100644

Lines of this file are not shown. View the raw message.

include/configs/chromebook_jerry.h +2 -1
index 67f45c0..a4d768d 100644

Lines of this file are not shown. View the raw message.

include/configs/clearfog.h +2 -1
index f0de827..b6ebd66 100644

Lines of this file are not shown. View the raw message.

include/configs/cm_fx6.h +2 -1
index b36ba14..af63d0b 100644

Lines of this file are not shown. View the raw message.

include/configs/cm_t43.h +2 -1
index 1c1951c..854032b 100644

Lines of this file are not shown. View the raw message.

include/configs/da850evm.h +4 -2
index 24e55e8..e78b8d4 100644

Lines of this file are not shown. View the raw message.

include/configs/db-88f6820-gp.h +2 -1
index ef14132..1255c8b 100644

Lines of this file are not shown. View the raw message.

include/configs/db-mv784mp-gp.h +2 -1
index c8b0344..5a88fed 100644

Lines of this file are not shown. View the raw message.

include/configs/dra7xx_evm.h +3 -2
index 45bda4f..e124c45 100644

Lines of this file are not shown. View the raw message.

include/configs/dreamplug.h +1 -1
index 0b7d89b..a9e1219 100644

Lines of this file are not shown. View the raw message.

include/configs/ds414.h +2 -1
index e3c7087..334f61b 100644

Lines of this file are not shown. View the raw message.

include/configs/exynos5-common.h +1 -1
index 7d600bf..86ba4ba 100644

Lines of this file are not shown. View the raw message.

include/configs/gw_ventana.h +5 -5
index cf71f21..3d479db 100644

Lines of this file are not shown. View the raw message.

include/configs/ls1021atwr.h +0 -1
index cee6281..e6f8f6b 100644

Lines of this file are not shown. View the raw message.

include/configs/ls1043a_common.h +1 -1
index ea25aad..74e5c81 100644

Lines of this file are not shown. View the raw message.

include/configs/ls2080aqds.h +2 -1
index dab3820..6efda6f 100644

Lines of this file are not shown. View the raw message.

include/configs/ls2080ardb.h +2 -1
index b2c0181..b53bb76 100644

Lines of this file are not shown. View the raw message.

include/configs/lsxl.h +1 -1
index 8fb0135..b9a66dd 100644

Lines of this file are not shown. View the raw message.

include/configs/ma5d4evk.h +2 -1
index 7f8a59f..472d4fb 100644

Lines of this file are not shown. View the raw message.

include/configs/maxbcm.h +2 -1
index 43d7fd0..aa006e8 100644

Lines of this file are not shown. View the raw message.

include/configs/mx6ul_14x14_evk.h +2 -1
index 2fff34a..4707a9b 100644

Lines of this file are not shown. View the raw message.

include/configs/mx7dsabresd.h +2 -1
index 2c981e0..d28cc97 100644

Lines of this file are not shown. View the raw message.

include/configs/omapl138_lcdk.h +2 -1
index fc7bfce..2ad67c9 100644

Lines of this file are not shown. View the raw message.

include/configs/ot1200.h +2 -1
index 879ad58..2165562 100644

Lines of this file are not shown. View the raw message.

include/configs/p1_p2_rdb_pc.h +3 -2
index 799521e..4d428f6 100644

Lines of this file are not shown. View the raw message.

include/configs/pcm051.h +2 -1
index 45c140d..3583152 100644

Lines of this file are not shown. View the raw message.

include/configs/pcm052.h +2 -1
index 4e29cf3..0427059 100644

Lines of this file are not shown. View the raw message.

include/configs/rk3036_common.h +0 -1
index 368d046..4dcf1a1 100644

Lines of this file are not shown. View the raw message.

include/configs/rk3288_common.h +0 -1
index 5322685..25af39d 100644

Lines of this file are not shown. View the raw message.

include/configs/sama5d2_xplained.h +2 -1
index 272257e..aa29ed9 100644

Lines of this file are not shown. View the raw message.

include/configs/sama5d3xek.h +2 -1
index bd5f4ee..02df0f2 100644

Lines of this file are not shown. View the raw message.

include/configs/sama5d4_xplained.h +2 -1
index 52b4584..486e4e0 100644

Lines of this file are not shown. View the raw message.

include/configs/sama5d4ek.h +2 -1
index ce96a7c..98368a7 100644

Lines of this file are not shown. View the raw message.

include/configs/siemens-am33x-common.h +2 -1
index 3a8b90e..b455918 100644

Lines of this file are not shown. View the raw message.

include/configs/socfpga_common.h +2 -1
index b002260..ad18fed 100644

Lines of this file are not shown. View the raw message.

include/configs/taurus.h +2 -1
index c1581d8..81b93a7 100644

Lines of this file are not shown. View the raw message.

include/configs/tegra-common-usb-gadget.h +1 -1
index f6e1d5c..30e6f9c 100644

Lines of this file are not shown. View the raw message.

include/configs/theadorable.h +2 -1
index 9f186ad..b7529e8 100644

Lines of this file are not shown. View the raw message.

include/configs/ti_armv7_keystone2.h +2 -1
index 6a3beac..c91bac6 100644

Lines of this file are not shown. View the raw message.

include/configs/tseries.h +2 -1
index 901dfd7..6de02bd 100644

Lines of this file are not shown. View the raw message.

include/configs/zynq-common.h +2 -1
index 77edbb8..3177297 100644

Lines of this file are not shown. View the raw message.

The rest of this diff is not shown. View the raw message.

Signature · 1 line
1.9.1

Part of the diff is not shown here. View the raw message.

author
#59 lore raw

PATCH v7 60/87 spi-nor: Use CONFIG_MTD_SPI_NOR

In reply to Jagan Teki

Replace legacy CONFIG_SPI_FLASH with CONFIG_MTD_SPI_NOR

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 board/davinci/da8xxevm/da850evm.c | 2 +-
 common/splash_source.c            | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
board/davinci/da8xxevm/da850evm.c +1 -1
index 356d3ce..7a2b8e0 100644
@@ -234,7 +234,7 @@ const struct pinmux_resource pinmuxes[] = {
 	PINMUX_ITEM(emac_pins_mii),
 #endif
 #endif
-#ifdef CONFIG_SPI_FLASH
+#ifdef CONFIG_MTD_SPI_NOR
 	PINMUX_ITEM(spi1_pins_base),
 	PINMUX_ITEM(spi1_pins_scs0),
 #endif
common/splash_source.c +1 -1
index 3393f73..505fa2a 100644
@@ -19,7 +19,7 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#ifdef CONFIG_SPI_FLASH
+#ifdef CONFIG_MTD_SPI_NOR
 static spi_flash_t *sf;
 static int splash_sf_read_raw(u32 bmp_load_addr, int offset, size_t read_size)
 {
Signature · 1 line
1.9.1
author
#60 lore raw

PATCH v7 61/87 configs: Use CONFIG_SPI_NOR_BAR

In reply to Jagan Teki

- CONFIG_SPI_FLASH_BAR
+ CONFIG_SPI_NOR_BAR

Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Mugunthan V N <[email protected]>
Cc Michal Simek <[email protected]>
Cc Siva Durga Prasad Paladugu <[email protected]>
---
 configs/alt_defconfig               |  2 +-
 configs/am437x_sk_evm_defconfig     |  2 +-
 configs/am43xx_evm_defconfig        |  2 +-
 configs/am57xx_evm_defconfig        |  2 +-
 configs/bg0900_defconfig            |  2 +-
 configs/cm_t43_defconfig            |  2 +-
 configs/dra72_evm_defconfig         |  2 +-
 configs/dra74_evm_defconfig         |  2 +-
 configs/dra7xx_evm_defconfig        |  2 +-
 configs/ds414_defconfig             |  2 +-
 configs/gose_defconfig              |  2 +-
 configs/koelsch_defconfig           |  2 +-
 configs/lager_defconfig             |  2 +-
 configs/maxbcm_defconfig            |  2 +-
 configs/mx6sxsabreauto_defconfig    |  2 +-
 configs/mx6sxsabresd_defconfig      |  2 +-
 configs/porter_defconfig            |  2 +-
 configs/silk_defconfig              |  2 +-
 configs/stout_defconfig             |  2 +-
 configs/zynq_zc702_defconfig        |  2 +-
 configs/zynq_zc706_defconfig        |  2 +-
 configs/zynq_zc770_xm010_defconfig  |  2 +-
 configs/zynq_zc770_xm013_defconfig  |  2 +-
 configs/zynq_zed_defconfig          |  2 +-
 doc/SPI/README.ti_qspi_dra_test     |  2 +-
 drivers/spi/fsl_qspi.c              | 18 +++++++++---------
 include/configs/T102xQDS.h          |  2 +-
 include/configs/T102xRDB.h          |  2 +-
 include/configs/T104xRDB.h          |  2 +-
 include/configs/T208xQDS.h          |  2 +-
 include/configs/T208xRDB.h          |  2 +-
 include/configs/gw_ventana.h        |  2 +-
 include/configs/km/kmp204x-common.h |  2 +-
 include/configs/ls2080ardb.h        |  2 +-
 include/configs/mx6ul_14x14_evk.h   |  2 +-
 include/configs/mx7dsabresd.h       |  2 +-
 include/configs/socfpga_common.h    |  4 ++--
 include/linux/mtd/spi-nor.h         |  2 +-
 38 files changed, 47 insertions(+), 47 deletions(-)
configs/alt_defconfig +1 -1
index 72ba038..07428c7 100644
@@ -19,6 +19,6 @@ CONFIG_TARGET_ALT=y
 CONFIG_SH_SDHI=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_OF_LIBFDT=y
configs/am437x_sk_evm_defconfig +1 -1
index 08d006b..456d978 100644
@@ -18,7 +18,7 @@ CONFIG_DM=y
 CONFIG_DM_MMC=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SYS_NS16550=y
 CONFIG_TI_QSPI=y
configs/am43xx_evm_defconfig +1 -1
index a8b84e4..eccb04a 100644
@@ -8,7 +8,7 @@ CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SYS_NS16550=y
 CONFIG_TI_QSPI=y
configs/am57xx_evm_defconfig +1 -1
index 824107c..504a25a 100644
@@ -17,5 +17,5 @@ CONFIG_DM=y
 CONFIG_DM_MMC=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_SYS_NS16550=y
configs/bg0900_defconfig +1 -1
index 60d2a53..acc2b5e 100644
@@ -6,6 +6,6 @@ CONFIG_SPL=y
 CONFIG_CMD_GPIO=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_OF_LIBFDT=y
configs/cm_t43_defconfig +1 -1
index 7f4b247..ae79cdf 100644
@@ -15,7 +15,7 @@ CONFIG_OF_LIBFDT=y
 CONFIG_DM_SERIAL=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_SPI_FLASH_STMICRO=y
configs/dra72_evm_defconfig +1 -1
index 4b9ced4..24dd7fb 100644
@@ -18,7 +18,7 @@ CONFIG_OF_CONTROL=y
 CONFIG_DM=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SYS_NS16550=y
 CONFIG_TI_QSPI=y
configs/dra74_evm_defconfig +1 -1
index 9c7773a..743a2aa 100644
@@ -17,7 +17,7 @@ CONFIG_OF_CONTROL=y
 CONFIG_DM=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SYS_NS16550=y
 CONFIG_TI_QSPI=y
configs/dra7xx_evm_defconfig +1 -1
index 0c22f7f..e82c264 100644
@@ -11,7 +11,7 @@ CONFIG_CMD_GPIO=y
 # CONFIG_CMD_NFS is not set
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SYS_NS16550=y
 CONFIG_TI_QSPI=y
configs/ds414_defconfig +1 -1
index f43d358..a4ccc52 100644
@@ -10,7 +10,7 @@ CONFIG_SPL=y
 CONFIG_SPL_OF_TRANSLATE=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_DEBUG_UART=y
 CONFIG_DEBUG_UART_BASE=0xd0012000
configs/gose_defconfig +1 -1
index 6158df2..f1457ca 100644
@@ -19,6 +19,6 @@ CONFIG_TARGET_GOSE=y
 CONFIG_SH_SDHI=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_OF_LIBFDT=y
configs/koelsch_defconfig +1 -1
index eb9432c..d9b6590 100644
@@ -19,6 +19,6 @@ CONFIG_TARGET_KOELSCH=y
 CONFIG_SH_SDHI=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_OF_LIBFDT=y
configs/lager_defconfig +1 -1
index cf9511f..922c11e 100644
@@ -19,6 +19,6 @@ CONFIG_TARGET_LAGER=y
 CONFIG_SH_SDHI=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_OF_LIBFDT=y
configs/maxbcm_defconfig +1 -1
index 5fb993d..03ab40e 100644
@@ -10,7 +10,7 @@ CONFIG_SPL=y
 CONFIG_SPL_OF_TRANSLATE=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SPI_FLASH_STMICRO=y
configs/mx6sxsabreauto_defconfig +1 -1
index 4dd2f8f..3616c82 100644
@@ -8,5 +8,5 @@ CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_SPI_FLASH_STMICRO=y
configs/mx6sxsabresd_defconfig +1 -1
index 8c6085e..f3437c9 100644
@@ -8,5 +8,5 @@ CONFIG_CMD_GPIO=y
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_OF_LIBFDT=y
configs/porter_defconfig +1 -1
index 4b9a153..99ba1d5 100644
@@ -19,6 +19,6 @@ CONFIG_TARGET_PORTER=y
 CONFIG_SH_SDHI=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_OF_LIBFDT=y
configs/silk_defconfig +1 -1
index d1db8ab..d7ddcb8 100644
@@ -19,6 +19,6 @@ CONFIG_TARGET_SILK=y
 CONFIG_SH_SDHI=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_OF_LIBFDT=y
configs/stout_defconfig +1 -1
index c2ba137..60896de 100644
@@ -19,6 +19,6 @@ CONFIG_TARGET_STOUT=y
 CONFIG_SH_SDHI=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_OF_LIBFDT=y
configs/zynq_zc702_defconfig +1 -1
index cddb49b..f1d169f 100644
@@ -15,7 +15,7 @@ CONFIG_SPL_DM_SEQ_ALIAS=y
 CONFIG_ZYNQ_SDHCI=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_WINBOND=y
configs/zynq_zc706_defconfig +1 -1
index 9991081..d250cc8 100644
@@ -16,7 +16,7 @@ CONFIG_SPL_DM_SEQ_ALIAS=y
 CONFIG_ZYNQ_SDHCI=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_WINBOND=y
configs/zynq_zc770_xm010_defconfig +1 -1
index 995b700..b17e9b8 100644
@@ -17,7 +17,7 @@ CONFIG_SPL_DM_SEQ_ALIAS=y
 CONFIG_ZYNQ_SDHCI=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
configs/zynq_zc770_xm013_defconfig +1 -1
index 7ffc7b8..1e57040 100644
@@ -16,6 +16,6 @@ CONFIG_NET_RANDOM_ETHADDR=y
 CONFIG_SPL_DM_SEQ_ALIAS=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_ZYNQ_GEM=y
 CONFIG_ZYNQ_QSPI=y
configs/zynq_zed_defconfig +1 -1
index a595075..4783c20 100644
@@ -16,7 +16,7 @@ CONFIG_SPL_DM_SEQ_ALIAS=y
 CONFIG_ZYNQ_SDHCI=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_M25P80=y
-CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_NOR_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_WINBOND=y
doc/SPI/README.ti_qspi_dra_test +1 -1
index fe37857..bff1be1 100644
@@ -22,7 +22,7 @@ Commands to erase/write u-boot/mlo to flash device
 --------------------------------------------------
 U-Boot# sf probe 0
 SF: Detected S25FL256S_64K with page size 256 Bytes, erase size 64 KiB, total 32 MiB, mapped at 5c000000
-SF: Warning - Only lower 16MiB accessible, Full access #define CONFIG_SPI_FLASH_BAR
+SF: Warning - Only lower 16MiB accessible, Full access #define CONFIG_SPI_NOR_BAR
 U-Boot# sf erase 0 0x10000
 SF: 65536 bytes @ 0x0 Erased: OK
 U-Boot# sf erase 0x20000 0x10000
drivers/spi/fsl_qspi.c +9 -9
index cb8d929..1c4cb72 100644
@@ -38,7 +38,7 @@ DECLARE_GLOBAL_DATA_PTR;
 #define SEQID_PP		6
 #define SEQID_RDID		7
 #define SEQID_BE_4K		8
-#ifdef CONFIG_SPI_FLASH_BAR
+#ifdef CONFIG_SPI_NOR_BAR
 #define SEQID_BRRD		9
 #define SEQID_BRWR		10
 #define SEQID_RDEAR		11
@@ -178,7 +178,7 @@ static void qspi_set_lut(struct fsl_qspi_priv *priv)
 
 	/* Fast Read */
 	lut_base = SEQID_FAST_READ * 4;
-#ifdef CONFIG_SPI_FLASH_BAR
+#ifdef CONFIG_SPI_NOR_BAR
 	qspi_write32(priv->flags, &regs->lut[lut_base],
 		     OPRND0(QSPI_CMD_FAST_READ) | PAD0(LUT_PAD1) |
 		     INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
@@ -214,7 +214,7 @@ static void qspi_set_lut(struct fsl_qspi_priv *priv)
 
 	/* Erase a sector */
 	lut_base = SEQID_SE * 4;
-#ifdef CONFIG_SPI_FLASH_BAR
+#ifdef CONFIG_SPI_NOR_BAR
 	qspi_write32(priv->flags, &regs->lut[lut_base], OPRND0(QSPI_CMD_SE) |
 		     PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
 		     PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
@@ -245,7 +245,7 @@ static void qspi_set_lut(struct fsl_qspi_priv *priv)
 
 	/* Page Program */
 	lut_base = SEQID_PP * 4;
-#ifdef CONFIG_SPI_FLASH_BAR
+#ifdef CONFIG_SPI_NOR_BAR
 	qspi_write32(priv->flags, &regs->lut[lut_base], OPRND0(QSPI_CMD_PP) |
 		     PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
 		     PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
@@ -291,7 +291,7 @@ static void qspi_set_lut(struct fsl_qspi_priv *priv)
 		     PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
 		     PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
 
-#ifdef CONFIG_SPI_FLASH_BAR
+#ifdef CONFIG_SPI_NOR_BAR
 	/*
 	 * BRRD BRWR RDEAR WREAR are all supported, because it is hard to
 	 * dynamically check whether to set BRRD BRWR or RDEAR WREAR during
@@ -430,7 +430,7 @@ static void qspi_init_ahb_read(struct fsl_qspi_priv *priv)
 }
 #endif
 
-#ifdef CONFIG_SPI_FLASH_BAR
+#ifdef CONFIG_SPI_NOR_BAR
 /* Bank register read/write, EAR register read/write */
 static void qspi_op_rdbank(struct fsl_qspi_priv *priv, u8 *rxbuf, u32 len)
 {
@@ -601,7 +601,7 @@ static void qspi_op_write(struct fsl_qspi_priv *priv, u8 *txbuf, u32 len)
 
 	/* Default is page programming */
 	seqid = SEQID_PP;
-#ifdef CONFIG_SPI_FLASH_BAR
+#ifdef CONFIG_SPI_NOR_BAR
 	if (priv->cur_seqid == QSPI_CMD_BRWR)
 		seqid = SEQID_BRWR;
 	else if (priv->cur_seqid == QSPI_CMD_WREAR)
@@ -735,7 +735,7 @@ int qspi_xfer(struct fsl_qspi_priv *priv, unsigned int bitlen,
 			wr_sfaddr = swab32(txbuf) & OFFSET_BITS_MASK;
 		} else if ((priv->cur_seqid == QSPI_CMD_BRWR) ||
 			 (priv->cur_seqid == QSPI_CMD_WREAR)) {
-#ifdef CONFIG_SPI_FLASH_BAR
+#ifdef CONFIG_SPI_NOR_BAR
 			wr_sfaddr = 0;
 #endif
 		}
@@ -752,7 +752,7 @@ int qspi_xfer(struct fsl_qspi_priv *priv, unsigned int bitlen,
 			qspi_op_rdid(priv, din, bytes);
 		else if (priv->cur_seqid == QSPI_CMD_RDSR)
 			qspi_op_rdsr(priv, din, bytes);
-#ifdef CONFIG_SPI_FLASH_BAR
+#ifdef CONFIG_SPI_NOR_BAR
 		else if ((priv->cur_seqid == QSPI_CMD_BRRD) ||
 			 (priv->cur_seqid == QSPI_CMD_RDEAR)) {
 			priv->sf_addr = 0;
include/configs/T102xQDS.h +1 -1
index 7031fba..6e9da7e 100644
@@ -575,7 +575,7 @@ unsigned long get_board_ddr_clk(void);
 #ifndef CONFIG_SPL_BUILD
 #endif
 #define CONFIG_CMD_SF
-#define CONFIG_SPI_FLASH_BAR
+#define CONFIG_SPI_NOR_BAR
 #define CONFIG_SF_DEFAULT_SPEED	 10000000
 #define CONFIG_SF_DEFAULT_MODE	  0
 
include/configs/T102xRDB.h +1 -1
index 96498a1..6f47844 100644
@@ -565,7 +565,7 @@ unsigned long get_board_ddr_clk(void);
 #elif defined(CONFIG_T1023RDB)
 #endif
 #define CONFIG_CMD_SF
-#define CONFIG_SPI_FLASH_BAR
+#define CONFIG_SPI_NOR_BAR
 #define CONFIG_SF_DEFAULT_SPEED	10000000
 #define CONFIG_SF_DEFAULT_MODE	0
 
include/configs/T104xRDB.h +1 -1
index cc2dae1..e3ad2e7 100644
@@ -529,7 +529,7 @@ $(SRCTREE)/board/freescale/t104xrdb/t1042d4_rcw.cfg
 /*
  * eSPI - Enhanced SPI
  */
-#define CONFIG_SPI_FLASH_BAR
+#define CONFIG_SPI_NOR_BAR
 #define CONFIG_CMD_SF
 #define CONFIG_SF_DEFAULT_SPEED         10000000
 #define CONFIG_SF_DEFAULT_MODE          0
include/configs/T208xQDS.h +1 -1
index 82db256..59011c2 100644
@@ -546,7 +546,7 @@ unsigned long get_board_ddr_clk(void);
 #endif
 
 #define CONFIG_CMD_SF
-#define CONFIG_SPI_FLASH_BAR
+#define CONFIG_SPI_NOR_BAR
 #define CONFIG_SF_DEFAULT_SPEED	 10000000
 #define CONFIG_SF_DEFAULT_MODE	  0
 #endif
include/configs/T208xRDB.h +1 -1
index ee8fccd..66319c7 100644
@@ -496,7 +496,7 @@ unsigned long get_board_ddr_clk(void);
  * eSPI - Enhanced SPI
  */
 #ifdef CONFIG_MTD_SPI_NOR
-#define CONFIG_SPI_FLASH_BAR
+#define CONFIG_SPI_NOR_BAR
 #define CONFIG_CMD_SF
 #define CONFIG_SF_DEFAULT_SPEED	 10000000
 #define CONFIG_SF_DEFAULT_MODE	  0
include/configs/gw_ventana.h +1 -1
index 3d479db..6d62f38 100644
@@ -68,7 +68,7 @@
 #define CONFIG_CMD_SF
 #ifdef CONFIG_CMD_SF
   #define CONFIG_MXC_SPI
-  #define CONFIG_SPI_FLASH_BAR
+  #define CONFIG_SPI_NOR_BAR
   #define CONFIG_SF_DEFAULT_BUS              0
   #define CONFIG_SF_DEFAULT_CS               0
 					     /* GPIO 3-19 (21248) */
include/configs/km/kmp204x-common.h +1 -1
index d981951..5501238 100644
@@ -287,7 +287,7 @@ int get_scl(void);
 /*
  * eSPI - Enhanced SPI
  */
-#define CONFIG_SPI_FLASH_BAR	/* 4 byte-addressing */
+#define CONFIG_SPI_NOR_BAR	/* 4 byte-addressing */
 #define CONFIG_CMD_SF
 #define CONFIG_SF_DEFAULT_SPEED         20000000
 #define CONFIG_SF_DEFAULT_MODE          0
include/configs/ls2080ardb.h +1 -1
index b53bb76..65cc273 100644
@@ -259,7 +259,7 @@ unsigned long get_board_sys_clk(void);
 #define CONFIG_CMD_SF
 #define CONFIG_MTD_SPI_NOR
 #define CONFIG_MTD_M25P80
-#define CONFIG_SPI_FLASH_BAR
+#define CONFIG_SPI_NOR_BAR
 #endif
 
 /*
include/configs/mx6ul_14x14_evk.h +1 -1
index 4707a9b..683af6d 100644
@@ -199,7 +199,7 @@
 #define CONFIG_CMD_SF
 #define CONFIG_MTD_SPI_NOR
 #define CONFIG_MTD_M25P80
-#define CONFIG_SPI_FLASH_BAR
+#define CONFIG_SPI_NOR_BAR
 #define CONFIG_SF_DEFAULT_BUS		0
 #define CONFIG_SF_DEFAULT_CS		0
 #define CONFIG_SF_DEFAULT_SPEED	40000000
include/configs/mx7dsabresd.h +1 -1
index d28cc97..c824d28 100644
@@ -290,7 +290,7 @@
 #define CONFIG_MTD_SPI_NOR
 #define CONFIG_MTD_M25P80
 #define CONFIG_SPI_FLASH_MACRONIX
-#define CONFIG_SPI_FLASH_BAR
+#define CONFIG_SPI_NOR_BAR
 #define CONFIG_SF_DEFAULT_BUS		0
 #define CONFIG_SF_DEFAULT_CS		0
 #define CONFIG_SF_DEFAULT_SPEED		40000000
include/configs/socfpga_common.h +2 -2
index ad18fed..7b1dcc6 100644
@@ -93,7 +93,7 @@
 #define CONFIG_CMD_SPI
 #define CONFIG_CMD_SF
 #define CONFIG_SF_DEFAULT_SPEED		30000000
-#define CONFIG_SPI_FLASH_BAR
+#define CONFIG_SPI_NOR_BAR
 /*
  * The base address is configurable in QSys, each board must specify the
  * base address based on it's particular FPGA configuration. Please note
@@ -218,7 +218,7 @@ unsigned int cm_get_qspi_controller_clk_hz(void);
 #endif
 #define CONFIG_CQSPI_DECODER		0
 #define CONFIG_CMD_SF
-#define CONFIG_SPI_FLASH_BAR
+#define CONFIG_SPI_NOR_BAR
 
 /*
  * Designware SPI support
include/linux/mtd/spi-nor.h +1 -1
index 4f2e8bc..8b46b93 100644
@@ -205,7 +205,7 @@ struct spi_nor {
 	u8			read_opcode;
 	u8			read_dummy;
 	u8			program_opcode;
-#ifdef CONFIG_SPI_FLASH_BAR
+#ifdef CONFIG_SPI_NOR_BAR
 	u8			bar_read_opcode;
 	u8			bar_program_opcode;
 	u8			bank_curr;
Signature · 1 line
1.9.1