linux-mtd.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [RFC 3/3] mtd: spi-nor: Support for s25fs512s
  2016-06-27 10:19 [RFC 0/3] mtd: spi-nor: DUAL/QUAD I/O read modes implementation marcin.krzeminski
@ 2016-06-27 10:19 ` marcin.krzeminski
  0 siblings, 0 replies; 5+ messages in thread
From: marcin.krzeminski @ 2016-06-27 10:19 UTC (permalink / raw)
  To: linux-mtd

From: Marcin Krzeminski <marcin.krzeminski@nokia.com>

Add support for new Cypress flash. Difference between FS and FL family
can be noticed at 5th JEDEC byte, so update s25fl512s device entry.

Signed-off-by: Marcin Krzeminski <marcin.krzeminski@nokia.com>
---
 drivers/mtd/spi-nor/spi-nor.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
index 026544b..182762f 100644
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
@@ -920,7 +920,7 @@ static const struct flash_info spi_nor_ids[] = {
 	{ "s25sl064p",  INFO(0x010216, 0x4d00,  64 * 1024, 128, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
 	{ "s25fl256s0", INFO(0x010219, 0x4d00, 256 * 1024, 128, 0) },
 	{ "s25fl256s1", INFO(0x010219, 0x4d01,  64 * 1024, 512, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
-	{ "s25fl512s",  INFO(0x010220, 0x4d00, 256 * 1024, 256, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
+	{ "s25fl512s",  INFO6(0x010220, 0x4d0080, 256 * 1024, 256, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
 	{ "s70fl01gs",  INFO(0x010221, 0x4d00, 256 * 1024, 256, 0) },
 	{ "s25sl12800", INFO(0x012018, 0x0300, 256 * 1024,  64, 0) },
 	{ "s25sl12801", INFO(0x012018, 0x0301,  64 * 1024, 256, 0) },
@@ -941,6 +941,9 @@ static const struct flash_info spi_nor_ids[] = {
 	{ "s25fl164k",  INFO(0x014017,      0,  64 * 1024, 128, SECT_4K) },
 	{ "s25fl204k",  INFO(0x014013,      0,  64 * 1024,   8, SECT_4K | SPI_NOR_DUAL_READ) },
 
+#ifdef CONFIG_DUAL_QUAD_IO
+	{ "s25fs512s",  INFO6(0x010220, 0x4d0081, 256 * 1024, 256, SECT_4K | SPI_NOR_DUALIO_READ | SPI_NOR_QUADIO_READ) },
+#endif
 	/* SST -- large erase sizes are "overlays", "sectors" are 4K */
 	{ "sst25vf040b", INFO(0xbf258d, 0, 64 * 1024,  8, SECT_4K | SST_WRITE) },
 	{ "sst25vf080b", INFO(0xbf258e, 0, 64 * 1024, 16, SECT_4K | SST_WRITE) },
@@ -1572,7 +1575,6 @@ int spi_nor_scan(struct spi_nor *nor, const char *name, enum read_mode mode)
 #ifdef CONFIG_DUAL_QUAD_IO
 	spi_nor_read_mode(nor, info);
 #endif
-
 	dev_info(dev, "%s (%lld Kbytes)\n", info->name,
 			(long long)mtd->size >> 10);
 
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [RFC 0/3] mtd: spi-nor: DUAL/QUAD I/O read modes implementation
@ 2016-06-27 10:20 marcin.krzeminski
  2016-06-27 10:20 ` [RFC 1/3] mtd: spi-nor: DUAL I/O and QUAD I/O modes support marcin.krzeminski
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: marcin.krzeminski @ 2016-06-27 10:20 UTC (permalink / raw)
  To: linux-mtd
  Cc: dwmw2, computersforpeace, hramrach, jteki, cyrille.pitchen,
	rfsw-patches, pawel.lenkow

From: Marcin Krzeminski <marcin.krzeminski@nokia.com>

This small series adds support for new spi-nor Cypress(Spansion) FS-S
family based on s25fs512s device. This family stopped to support
QUAD/DUAL read modes, so fastest supported read is FAST_READ
in current framework. Series implements DUAL/QUAD I/O
read modes, as well as continuous read mode configuration byte.

Chnages are under KConfig entry because it is easier for me
to merge them between kernel version.

RFC since you are working on new framework, this might help to define
some requirememnts.

Marcin Krzeminski (3):
  mtd: spi-nor: DUAL I/O and QUAD I/O modes support
  mtd: spi-nor: Read Mode byte implementation
  mtd: spi-nor: Support for s25fs512s

 drivers/mtd/spi-nor/Kconfig   |  8 ++++
 drivers/mtd/spi-nor/spi-nor.c | 91 ++++++++++++++++++++++++++++++++++++++++++-
 include/linux/mtd/spi-nor.h   | 21 ++++++++++
 3 files changed, 118 insertions(+), 2 deletions(-)

-- 
2.7.4

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [RFC 1/3] mtd: spi-nor: DUAL I/O and QUAD I/O modes support
  2016-06-27 10:20 [RFC 0/3] mtd: spi-nor: DUAL/QUAD I/O read modes implementation marcin.krzeminski
@ 2016-06-27 10:20 ` marcin.krzeminski
  2016-06-27 10:20 ` [RFC 2/3] mtd: spi-nor: Read Mode byte implementation marcin.krzeminski
  2016-06-27 10:21 ` [RFC 3/3] mtd: spi-nor: Support for s25fs512s marcin.krzeminski
  2 siblings, 0 replies; 5+ messages in thread
From: marcin.krzeminski @ 2016-06-27 10:20 UTC (permalink / raw)
  To: linux-mtd
  Cc: dwmw2, computersforpeace, hramrach, jteki, cyrille.pitchen,
	rfsw-patches, pawel.lenkow

From: Marcin Krzeminski <marcin.krzeminski@nokia.com>

This commit adds support for DUAL/QUAD I/O modes.
The work is based on Pawel Lenkow work for 3.18 kernel.

Signed-off-by: Marcin Krzeminski <marcin.krzeminski@nokia.com>
---
 drivers/mtd/spi-nor/Kconfig   |  8 +++++++
 drivers/mtd/spi-nor/spi-nor.c | 54 +++++++++++++++++++++++++++++++++++++++++++
 include/linux/mtd/spi-nor.h   | 12 ++++++++++
 3 files changed, 74 insertions(+)

diff --git a/drivers/mtd/spi-nor/Kconfig b/drivers/mtd/spi-nor/Kconfig
index d42c98e..8975977 100644
--- a/drivers/mtd/spi-nor/Kconfig
+++ b/drivers/mtd/spi-nor/Kconfig
@@ -49,4 +49,12 @@ config SPI_NXP_SPIFI
 	  Flash. Enable this option if you have a device with a SPIFI
 	  controller and want to access the Flash as a mtd device.
 
+config DUAL_QUAD_IO
+	bool "Dual and Quad I/O support"
+	help
+	   Enable support for Dual I/O and Quad I/O read commands that are
+	   available in some Spansion and Macronix devices.
+	   In Spansion FS-S family you must enable this if you want to use
+	   Quad/Dual but not QPI mode.
+
 endif # MTD_SPI_NOR
diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
index a63922e..847db69 100644
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
@@ -75,6 +75,10 @@ struct flash_info {
 					 * bit. Must be used with
 					 * SPI_NOR_HAS_LOCK.
 					 */
+#ifdef CONFIG_DUAL_QUAD_IO
+#define	SPI_NOR_DUALIO_READ	BIT(10)	/* Flash supports Dual I/O Read */
+#define	SPI_NOR_QUADIO_READ	BIT(11)	/* Flash supports Quad I/O Read */
+#endif
 };
 
 #define JEDEC_MFR(info)	((info)->id[0])
@@ -149,6 +153,10 @@ static inline int spi_nor_read_dummy_cycles(struct spi_nor *nor)
 	case SPI_NOR_FAST:
 	case SPI_NOR_DUAL:
 	case SPI_NOR_QUAD:
+#ifdef CONFIG_DUAL_QUAD_IO
+	case SPI_NOR_DUALIO:
+	case SPI_NOR_QUADIO:
+#endif
 		return 8;
 	case SPI_NOR_NORMAL:
 		return 0;
@@ -1415,7 +1423,37 @@ int spi_nor_scan(struct spi_nor *nor, const char *name, enum read_mode mode)
 	/* Some devices cannot do fast-read, no matter what DT tells us */
 	if (info->flags & SPI_NOR_NO_FR)
 		nor->flash_read = SPI_NOR_NORMAL;
+#ifdef CONFIG_DUAL_QUAD_IO
+	/*
+	 * Quad/Dual-read mode takes precedence over fast/normal
+	 * and Quad/Dual I/O take precedence over Quad/Dual
+	 */
+	if (mode == SPI_NOR_QUADIO) {
+		if (info->flags & SPI_NOR_QUADIO_READ)
+			nor->flash_read = SPI_NOR_QUADIO;
+		else
+			mode = SPI_NOR_QUAD;
+	} else if (mode == SPI_NOR_DUALIO) {
+		if (info->flags & SPI_NOR_DUALIO_READ)
+			nor->flash_read = SPI_NOR_DUALIO;
+		else
+			mode = SPI_NOR_DUAL;
+	}
 
+	if (mode == SPI_NOR_QUAD && (info->flags & SPI_NOR_QUAD_READ))
+		nor->flash_read = SPI_NOR_QUAD;
+	else if (mode == SPI_NOR_DUAL && (info->flags & SPI_NOR_DUAL_READ))
+		nor->flash_read = SPI_NOR_DUAL;
+
+	if (nor->flash_read == SPI_NOR_QUAD
+			|| nor->flash_read == SPI_NOR_QUADIO) {
+		ret = set_quad_mode(nor, info);
+		if (ret) {
+			dev_err(dev, "quad mode not supported\n");
+			return ret;
+		}
+	}
+#else
 	/* Quad/Dual-read mode takes precedence over fast/normal */
 	if (mode == SPI_NOR_QUAD && info->flags & SPI_NOR_QUAD_READ) {
 		ret = set_quad_mode(nor, info);
@@ -1442,6 +1480,14 @@ int spi_nor_scan(struct spi_nor *nor, const char *name, enum read_mode mode)
 	case SPI_NOR_NORMAL:
 		nor->read_opcode = SPINOR_OP_READ;
 		break;
+#ifdef CONFIG_DUAL_QUAD_IO
+	case SPI_NOR_DUALIO:
+		nor->read_opcode = SPINOR_OP_READ_1_2_2;
+		break;
+	case SPI_NOR_QUADIO:
+		nor->read_opcode = SPINOR_OP_READ_1_4_4;
+		break;
+#endif
 	default:
 		dev_err(dev, "No Read opcode defined\n");
 		return -EINVAL;
@@ -1469,6 +1515,14 @@ int spi_nor_scan(struct spi_nor *nor, const char *name, enum read_mode mode)
 			case SPI_NOR_NORMAL:
 				nor->read_opcode = SPINOR_OP_READ4;
 				break;
+#ifdef CONFIG_DUAL_QUAD_IO
+			case SPI_NOR_DUALIO:
+				nor->read_opcode = SPINOR_OP_READ4_1_2_2;
+				break;
+			case SPI_NOR_QUADIO:
+				nor->read_opcode = SPINOR_OP_READ4_1_4_4;
+				break;
+#endif
 			}
 			nor->program_opcode = SPINOR_OP_PP_4B;
 			/* No small sector erase for 4-byte command set */
diff --git a/include/linux/mtd/spi-nor.h b/include/linux/mtd/spi-nor.h
index c425c7b..652a8d2 100644
--- a/include/linux/mtd/spi-nor.h
+++ b/include/linux/mtd/spi-nor.h
@@ -45,6 +45,10 @@
 #define SPINOR_OP_READ_FAST	0x0b	/* Read data bytes (high frequency) */
 #define SPINOR_OP_READ_1_1_2	0x3b	/* Read data bytes (Dual SPI) */
 #define SPINOR_OP_READ_1_1_4	0x6b	/* Read data bytes (Quad SPI) */
+#ifdef CONFIG_DUAL_QUAD_IO
+#define SPINOR_OP_READ_1_2_2	0xbb	/* Read data bytes (DualIO SPI) */
+#define SPINOR_OP_READ_1_4_4	0xeb    /* Read data bytes (QuadIO SPI) */
+#endif
 #define SPINOR_OP_PP		0x02	/* Page program (up to 256 bytes) */
 #define SPINOR_OP_BE_4K		0x20	/* Erase 4KiB block */
 #define SPINOR_OP_BE_4K_PMC	0xd7	/* Erase 4KiB block on PMC chips */
@@ -60,6 +64,10 @@
 #define SPINOR_OP_READ4_FAST	0x0c	/* Read data bytes (high frequency) */
 #define SPINOR_OP_READ4_1_1_2	0x3c	/* Read data bytes (Dual SPI) */
 #define SPINOR_OP_READ4_1_1_4	0x6c	/* Read data bytes (Quad SPI) */
+#ifdef CONFIG_DUAL_QUAD_IO
+#define SPINOR_OP_READ4_1_2_2	0xbc    /* Read data bytes (DualIO SPI) */
+#define SPINOR_OP_READ4_1_4_4	0xec    /* Read data bytes (QuadIO SPI) */
+#endif
 #define SPINOR_OP_PP_4B		0x12	/* Page program (up to 256 bytes) */
 #define SPINOR_OP_SE_4B		0xdc	/* Sector erase (usually 64KiB) */
 
@@ -105,6 +113,10 @@ enum read_mode {
 	SPI_NOR_FAST,
 	SPI_NOR_DUAL,
 	SPI_NOR_QUAD,
+#ifdef CONFIG_DUAL_QUAD_IO
+	SPI_NOR_DUALIO,
+	SPI_NOR_QUADIO,
+#endif
 };
 
 #define SPI_NOR_MAX_CMD_SIZE	8
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [RFC 2/3] mtd: spi-nor: Read Mode byte implementation
  2016-06-27 10:20 [RFC 0/3] mtd: spi-nor: DUAL/QUAD I/O read modes implementation marcin.krzeminski
  2016-06-27 10:20 ` [RFC 1/3] mtd: spi-nor: DUAL I/O and QUAD I/O modes support marcin.krzeminski
@ 2016-06-27 10:20 ` marcin.krzeminski
  2016-06-27 10:21 ` [RFC 3/3] mtd: spi-nor: Support for s25fs512s marcin.krzeminski
  2 siblings, 0 replies; 5+ messages in thread
From: marcin.krzeminski @ 2016-06-27 10:20 UTC (permalink / raw)
  To: linux-mtd
  Cc: dwmw2, computersforpeace, hramrach, jteki, cyrille.pitchen,
	rfsw-patches, pawel.lenkow

From: Marcin Krzeminski <marcin.krzeminski@nokia.com>

DUAL/QUAD I/O modes often need an additional byte at first
read command to configure flash in continuous read mode.
Continuous read mode is not supported, but we need to send this
byte to flash anyway.

Signed-off-by: Marcin Krzeminski <marcin.krzeminski@nokia.com>
---
 drivers/mtd/spi-nor/spi-nor.c | 31 +++++++++++++++++++++++++++++++
 include/linux/mtd/spi-nor.h   |  9 +++++++++
 2 files changed, 40 insertions(+)

diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
index 847db69..026544b 100644
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
@@ -164,6 +164,34 @@ static inline int spi_nor_read_dummy_cycles(struct spi_nor *nor)
 	return 0;
 }
 
+#ifdef CONFIG_DUAL_QUAD_IO
+/*
+ * Read mode option, allows to continue
+ * fast reading without sending the command again.
+ * Could be used by the driver or this framework
+ * to speed up reading.
+ */
+static void spi_nor_read_mode(struct spi_nor *nor,
+		const struct flash_info *info)
+{
+	nor->read_mode_size = 0;
+	nor->read_mode_cmd = 0;
+
+	if (nor->flash_read == SPI_NOR_QUADIO
+		|| nor->flash_read == SPI_NOR_DUALIO) {
+
+		switch (JEDEC_MFR(info)) {
+		case SNOR_MFR_SPANSION:
+			nor->read_mode_size = 8;
+			nor->read_mode_cmd = SPANSION_CONTINUOUS_READ_MODE;
+		break;
+		default:
+			break;
+		}
+	}
+}
+#endif
+
 /*
  * Write status register 1 byte
  * Returns negative if error occurred.
@@ -1541,6 +1569,9 @@ int spi_nor_scan(struct spi_nor *nor, const char *name, enum read_mode mode)
 	}
 
 	nor->read_dummy = spi_nor_read_dummy_cycles(nor);
+#ifdef CONFIG_DUAL_QUAD_IO
+	spi_nor_read_mode(nor, info);
+#endif
 
 	dev_info(dev, "%s (%lld Kbytes)\n", info->name,
 			(long long)mtd->size >> 10);
diff --git a/include/linux/mtd/spi-nor.h b/include/linux/mtd/spi-nor.h
index 652a8d2..78196a8 100644
--- a/include/linux/mtd/spi-nor.h
+++ b/include/linux/mtd/spi-nor.h
@@ -108,6 +108,11 @@
 /* Configuration Register bits. */
 #define CR_QUAD_EN_SPAN		BIT(1)	/* Spansion Quad I/O */
 
+#ifdef CONFIG_DUAL_QUAD_IO
+/* Spansion continuous read mode for Quad/Dual I/O reads */
+#define SPANSION_CONTINUOUS_READ_MODE 0xA0
+#endif
+
 enum read_mode {
 	SPI_NOR_NORMAL = 0,
 	SPI_NOR_FAST,
@@ -179,6 +184,10 @@ struct spi_nor {
 	bool			sst_write_second;
 	u32			flags;
 	u8			cmd_buf[SPI_NOR_MAX_CMD_SIZE];
+#ifdef CONFIG_DUAL_QUAD_IO
+	u32			read_mode_size; /*read mode command size in bits */
+	u32			read_mode_cmd; /*read mode command */
+#endif
 
 	int (*prepare)(struct spi_nor *nor, enum spi_nor_ops ops);
 	void (*unprepare)(struct spi_nor *nor, enum spi_nor_ops ops);
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [RFC 3/3] mtd: spi-nor: Support for s25fs512s
  2016-06-27 10:20 [RFC 0/3] mtd: spi-nor: DUAL/QUAD I/O read modes implementation marcin.krzeminski
  2016-06-27 10:20 ` [RFC 1/3] mtd: spi-nor: DUAL I/O and QUAD I/O modes support marcin.krzeminski
  2016-06-27 10:20 ` [RFC 2/3] mtd: spi-nor: Read Mode byte implementation marcin.krzeminski
@ 2016-06-27 10:21 ` marcin.krzeminski
  2 siblings, 0 replies; 5+ messages in thread
From: marcin.krzeminski @ 2016-06-27 10:21 UTC (permalink / raw)
  To: linux-mtd
  Cc: dwmw2, computersforpeace, hramrach, jteki, cyrille.pitchen,
	rfsw-patches, pawel.lenkow

From: Marcin Krzeminski <marcin.krzeminski@nokia.com>

Add support for new Cypress flash. Difference between FS and FL family
can be noticed at 5th JEDEC byte, so update s25fl512s device entry.

Signed-off-by: Marcin Krzeminski <marcin.krzeminski@nokia.com>
---
 drivers/mtd/spi-nor/spi-nor.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
index 026544b..182762f 100644
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
@@ -920,7 +920,7 @@ static const struct flash_info spi_nor_ids[] = {
 	{ "s25sl064p",  INFO(0x010216, 0x4d00,  64 * 1024, 128, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
 	{ "s25fl256s0", INFO(0x010219, 0x4d00, 256 * 1024, 128, 0) },
 	{ "s25fl256s1", INFO(0x010219, 0x4d01,  64 * 1024, 512, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
-	{ "s25fl512s",  INFO(0x010220, 0x4d00, 256 * 1024, 256, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
+	{ "s25fl512s",  INFO6(0x010220, 0x4d0080, 256 * 1024, 256, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
 	{ "s70fl01gs",  INFO(0x010221, 0x4d00, 256 * 1024, 256, 0) },
 	{ "s25sl12800", INFO(0x012018, 0x0300, 256 * 1024,  64, 0) },
 	{ "s25sl12801", INFO(0x012018, 0x0301,  64 * 1024, 256, 0) },
@@ -941,6 +941,9 @@ static const struct flash_info spi_nor_ids[] = {
 	{ "s25fl164k",  INFO(0x014017,      0,  64 * 1024, 128, SECT_4K) },
 	{ "s25fl204k",  INFO(0x014013,      0,  64 * 1024,   8, SECT_4K | SPI_NOR_DUAL_READ) },
 
+#ifdef CONFIG_DUAL_QUAD_IO
+	{ "s25fs512s",  INFO6(0x010220, 0x4d0081, 256 * 1024, 256, SECT_4K | SPI_NOR_DUALIO_READ | SPI_NOR_QUADIO_READ) },
+#endif
 	/* SST -- large erase sizes are "overlays", "sectors" are 4K */
 	{ "sst25vf040b", INFO(0xbf258d, 0, 64 * 1024,  8, SECT_4K | SST_WRITE) },
 	{ "sst25vf080b", INFO(0xbf258e, 0, 64 * 1024, 16, SECT_4K | SST_WRITE) },
@@ -1572,7 +1575,6 @@ int spi_nor_scan(struct spi_nor *nor, const char *name, enum read_mode mode)
 #ifdef CONFIG_DUAL_QUAD_IO
 	spi_nor_read_mode(nor, info);
 #endif
-
 	dev_info(dev, "%s (%lld Kbytes)\n", info->name,
 			(long long)mtd->size >> 10);
 
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-06-27 10:22 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-06-27 10:20 [RFC 0/3] mtd: spi-nor: DUAL/QUAD I/O read modes implementation marcin.krzeminski
2016-06-27 10:20 ` [RFC 1/3] mtd: spi-nor: DUAL I/O and QUAD I/O modes support marcin.krzeminski
2016-06-27 10:20 ` [RFC 2/3] mtd: spi-nor: Read Mode byte implementation marcin.krzeminski
2016-06-27 10:21 ` [RFC 3/3] mtd: spi-nor: Support for s25fs512s marcin.krzeminski
  -- strict thread matches above, loose matches on Subject: below --
2016-06-27 10:19 [RFC 0/3] mtd: spi-nor: DUAL/QUAD I/O read modes implementation marcin.krzeminski
2016-06-27 10:19 ` [RFC 3/3] mtd: spi-nor: Support for s25fs512s marcin.krzeminski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).