Skip to contentSkip to conversation

sf: Add MTD layer support

PATCH Superseded Jagan Teki 2 participants 8 messages Jun 22, 2015 – Jun 23, 2015

Subsystems (3)
lore
Share & tools
lore

Jagan Teki

author
#0 lore raw

v7 cover sf: Add MTD layer support

Just resend the whole series with below changes,
Changes for v7:
- Add more notes on commit message
- Update the info for CONFIG_SPI_FLASH_MTD in README
- Remove ^ character in sf erase line sf help text
- Update starting character in commit message heads with capitals

Heiko and Daniel - send your comments on this series once all clear I will push on my tree.

thanks!
Jagan.

Daniel Schwierzeck (1):
mtd, spi: Add MTD layer driver

Heiko Schocher (3):
mtd, nand: Move common functions from cmd_nand.c to common place spi, sf: Use offset and size in sf cmd from mtdpartition mtd, spi: Check if flash pointer is used

 README                        |   9 +++
 common/cmd_nand.c             | 148 +++++++++---------------------------------
 common/cmd_onenand.c          |  19 ++----
 common/cmd_sf.c               |  61 +++++++++--------
 common/cmd_test.c             |  12 +---
 drivers/mtd/Makefile          |   4 +-
 drivers/mtd/mtd_uboot.c       |  99 ++++++++++++++++++++++++++++
 drivers/mtd/spi/Makefile      |   1 +
 drivers/mtd/spi/sf_internal.h |   5 ++
 drivers/mtd/spi/sf_mtd.c      | 104 +++++++++++++++++++++++++++++
 drivers/mtd/spi/sf_probe.c    |  11 ++--
 include/linux/mtd/mtd.h       |   5 ++
 include/vsprintf.h            |   2 +
 lib/vsprintf.c                |  16 +++++
 14 files changed, 323 insertions(+), 173 deletions(-)
 create mode 100644 drivers/mtd/mtd_uboot.c
 create mode 100644 drivers/mtd/spi/sf_mtd.c
Signature · 1 line
1.9.1
author
#1 lore raw

PATCH v7 1/4 mtd, spi: Add MTD layer driver

From: Daniel Schwierzeck <[email protected]>

Add MTD layer driver for spi, original patch from:
http://git.denx.de/?p=u-boot/u-boot-mips.git;a=commitdiff;h=bb246819cdc90493dd7089eaa51b9e639765cced

Changes from Heiko Schocher against this patch:
- Remove compile error if not defining CONFIG_SPI_FLASH_MTD:

LD drivers/mtd/spi/built-in.o
drivers/mtd/spi/sf_probe.o: In function `spi_flash_mtd_unregister':
/home/hs/abb/imx6/u-boot/drivers/mtd/spi/sf_internal.h:168: multiple definition of spi_flash_mtd_unregister' drivers/mtd/spi/sf_params.o:/home/hs/abb/imx6/u-boot/drivers/mtd/spi/sf_internal.h:168: first defined here drivers/mtd/spi/sf_ops.o: In function spi_flash_mtd_unregister':
/home/hs/abb/imx6/u-boot/drivers/mtd/spi/sf_internal.h:168: multiple definition of `spi_flash_mtd_unregister' drivers/mtd/spi/sf_params.o:/home/hs/abb/imx6/u-boot/drivers/mtd/spi/sf_internal.h:168: first defined here make[1]: *** [drivers/mtd/spi/built-in.o] Fehler 1
make: *** [drivers/mtd/spi] Fehler 2

- Add a README entry.
- Add correct writebufsize, to fit with Linux v3.14 MTD, UBI/UBIFS sync.

Note (From Jagan): For testing raw mtd parition erase/read/write operations using cmd_sf, sf_mtd should be required to register the spi flash device to MTD layer but the sf_mtd_info ops were not required until and unless if we use any flash filesystem layer say for example UBI. Due to this the foot-print got increased ~290bytes in non-UBI case here that should be acceptible.

---
Changes in v7:
- Add more notes on commit message
- Update the info for CONFIG_SPI_FLASH_MTD in README Changes in v6: None
Changes in v2:
- add comment from Daniel Schwierzeck:
fix compile error from original patch with "static inline" rather than "static __maybe_unused"
Series-changes: 3
- rebase with d6c1ffc7d23f4fe4ae8c91101861055b8e1501b6
Series-changes: 4
- rebased against 385a08a60f042061b004642d6b9bb6cfb794ad5a
Series-changes: 5
- no changes
Series-changes: 6
- add comments from Jagan Teki:
move code, which checks if flash pointer is used into a new patch.
- use #ifdef in Code
- call mtd register before the spi_release_bus

 README                        |   9 ++++
 common/cmd_sf.c               |   2 -
 drivers/mtd/spi/Makefile      |   1 +
 drivers/mtd/spi/sf_internal.h |   5 ++
 drivers/mtd/spi/sf_mtd.c      | 104 ++++++++++++++++++++++++++++++++++++++++++
 drivers/mtd/spi/sf_probe.c    |  11 +++--
 6 files changed, 125 insertions(+), 7 deletions(-)
 create mode 100644 drivers/mtd/spi/sf_mtd.c
README +9 -0
index 3b406c2..2c3ba04 100644
@@ -3079,6 +3079,15 @@ CBFS (Coreboot Filesystem) support
 		memories can be connected with a given cs line.
 		Currently Xilinx Zynq qspi supports these type of connections.
 
+		CONFIG_SPI_FLASH_MTD		spi-flash MTD layer
+
+		Define this option to use mtd support for spi flash layer, this
+		adapter is for translating mtd_read/mtd_write commands into
+		spi_flash_read/spi_flash_write commands. It is not intended to
+		use it within sf_cmd or the SPI flash subsystem. Such an adapter
+		is needed for subsystems like UBI which can only operate on top
+		of the MTD layer.
+
 - SystemACE Support:
 		CONFIG_SYSTEMACE
 
common/cmd_sf.c +0 -2
index 342021d..ed3e398 100644
@@ -139,8 +139,6 @@ static int do_spi_flash_probe(int argc, char * const argv[])
 		return 1;
 	}
 
-	if (flash)
-		spi_flash_free(flash);
 	flash = new;
 #endif
 
drivers/mtd/spi/Makefile +1 -0
index 87f20bc..ed46648 100644
@@ -18,5 +18,6 @@ obj-$(CONFIG_SPI_FLASH) += sf_probe.o
 obj-$(CONFIG_SF_DATAFLASH) += sf_dataflash.o
 obj-$(CONFIG_CMD_SF) += sf.o
 obj-$(CONFIG_SPI_FLASH) += sf_ops.o sf_params.o
+obj-$(CONFIG_SPI_FLASH_MTD) += sf_mtd.o
 obj-$(CONFIG_SPI_FLASH_SANDBOX) += sandbox.o
 obj-$(CONFIG_SPI_M95XXX) += eeprom_m95xxx.o
drivers/mtd/spi/sf_internal.h +5 -0
index 4158e13..81eea8c 100644
@@ -218,4 +218,9 @@ int spi_flash_read_common(struct spi_flash *flash, const u8 *cmd,
 int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset,
 		size_t len, void *data);
 
+#ifdef CONFIG_SPI_FLASH_MTD
+int spi_flash_mtd_register(struct spi_flash *flash);
+void spi_flash_mtd_unregister(void);
+#endif
+
 #endif /* _SF_INTERNAL_H_ */
drivers/mtd/spi/sf_mtd.c new file +104 -0

104 lines not on this page · raw message

drivers/mtd/spi/sf_probe.c +6 -5
index 201471c..e0283dc 100644
@@ -372,11 +372,9 @@ int spi_flash_probe_slave(struct spi_slave *spi, struct spi_flash *flash)
 		puts(" Full access #define CONFIG_SPI_FLASH_BAR\n");
 	}
 #endif
-
-	/* Release spi bus */
-	spi_release_bus(spi);
-
-	return 0;
+#ifdef CONFIG_SPI_FLASH_MTD
+	ret = spi_flash_mtd_register(flash);
+#endif
 
 err_read_id:
 	spi_release_bus(spi);
@@ -430,6 +428,9 @@ struct spi_flash *spi_flash_probe_fdt(const void *blob, int slave_node,
 
 void spi_flash_free(struct spi_flash *flash)
 {
+#ifdef CONFIG_SPI_FLASH_MTD
+	spi_flash_mtd_unregister();
+#endif
 	spi_free_slave(flash->spi);
 	free(flash);
 }
Signature · 1 line
1.9.1
author
#2 lore raw

PATCH v7 2/4 mtd, nand: Move common functions from cmd_nand.c to common place

In reply to Jagan Teki

From: Heiko Schocher <[email protected]>

Move common functions from cmd_nand.c (for calculating offset and size from cmdline paramter) to common place, so they could used from other commands which use mtd partitions.

For onenand the arg_off_size() is left in common/cmd_onenand.c. It should use now the common arg_off() function, but as I could not test onenand I let it there ...

---
Changes in v7: None
Changes in v6: None
Changes in v2:
- none
Series-changes: 3
- add comments from scott wood:
- align MTD_DEV_TYPE_NAND correct
- remove unnecessary inline
- rework "jffs2 header" problem later
- rebase with d6c1ffc7d23f4fe4ae8c91101861055b8e1501b6
Series-changes: 4
- rebased against 385a08a60f042061b004642d6b9bb6cfb794ad5a
Series-changes: 5
- add comment from Scott Wood:
keep the continuation line aligned with the arguments
Series-changes: 6
- add Reviewed-by: Jagannadha Sutradharudu Teki <[email protected]>
- fix Tom Rinis mail addr
- add comment from Scott Wood:
- fix indentation level
- add mtd_ prefix
- move str2off and str2long into common place, as they are no mtd specific functions and change return value from int to bool

 common/cmd_nand.c       | 148 ++++++++++--------------------------------------
 common/cmd_onenand.c    |  19 ++-----
 common/cmd_test.c       |  12 +---
 drivers/mtd/Makefile    |   4 +-
 drivers/mtd/mtd_uboot.c |  99 ++++++++++++++++++++++++++++++++
 include/linux/mtd/mtd.h |   5 ++
 include/vsprintf.h      |   2 +
 lib/vsprintf.c          |  16 ++++++
 8 files changed, 164 insertions(+), 141 deletions(-)
 create mode 100644 drivers/mtd/mtd_uboot.c
common/cmd_nand.c +31 -117
index 9433c80..1482462 100644
@@ -133,115 +133,6 @@ static int set_dev(int dev)
 	return 0;
 }
 
-static inline int str2off(const char *p, loff_t *num)
-{
-	char *endptr;
-
-	*num = simple_strtoull(p, &endptr, 16);
-	return *p != '\0' && *endptr == '\0';
-}
-
-static inline int str2long(const char *p, ulong *num)
-{
-	char *endptr;
-
-	*num = simple_strtoul(p, &endptr, 16);
-	return *p != '\0' && *endptr == '\0';
-}
-
-static int get_part(const char *partname, int *idx, loff_t *off, loff_t *size,
-		loff_t *maxsize)
-{
-#ifdef CONFIG_CMD_MTDPARTS
-	struct mtd_device *dev;
-	struct part_info *part;
-	u8 pnum;
-	int ret;
-
-	ret = mtdparts_init();
-	if (ret)
-		return ret;
-
-	ret = find_dev_and_part(partname, &dev, &pnum, &part);
-	if (ret)
-		return ret;
-
-	if (dev->id->type != MTD_DEV_TYPE_NAND) {
-		puts("not a NAND device\n");
-		return -1;
-	}
-
-	*off = part->offset;
-	*size = part->size;
-	*maxsize = part->size;
-	*idx = dev->id->num;
-
-	ret = set_dev(*idx);
-	if (ret)
-		return ret;
-
-	return 0;
-#else
-	puts("offset is not a number\n");
-	return -1;
-#endif
-}
-
-static int arg_off(const char *arg, int *idx, loff_t *off, loff_t *size,
-		loff_t *maxsize)
-{
-	if (!str2off(arg, off))
-		return get_part(arg, idx, off, size, maxsize);
-
-	if (*off >= nand_info[*idx].size) {
-		puts("Offset exceeds device limit\n");
-		return -1;
-	}
-
-	*maxsize = nand_info[*idx].size - *off;
-	*size = *maxsize;
-	return 0;
-}
-
-static int arg_off_size(int argc, char *const argv[], int *idx,
-			loff_t *off, loff_t *size, loff_t *maxsize)
-{
-	int ret;
-
-	if (argc == 0) {
-		*off = 0;
-		*size = nand_info[*idx].size;
-		*maxsize = *size;
-		goto print;
-	}
-
-	ret = arg_off(argv[0], idx, off, size, maxsize);
-	if (ret)
-		return ret;
-
-	if (argc == 1)
-		goto print;
-
-	if (!str2off(argv[1], size)) {
-		printf("'%s' is not a number\n", argv[1]);
-		return -1;
-	}
-
-	if (*size > *maxsize) {
-		puts("Size exceeds partition or device limit\n");
-		return -1;
-	}
-
-print:
-	printf("device %d ", *idx);
-	if (*size == nand_info[*idx].size)
-		puts("whole chip\n");
-	else
-		printf("offset 0x%llx, size 0x%llx\n",
-		       (unsigned long long)*off, (unsigned long long)*size);
-	return 0;
-}
-
 #ifdef CONFIG_CMD_NAND_LOCK_UNLOCK
 static void print_status(ulong start, ulong end, ulong erasesize, int status)
 {
@@ -322,7 +213,12 @@ int do_nand_env_oob(cmd_tbl_t *cmdtp, int argc, char *const argv[])
 			goto usage;
 
 		/* We don't care about size, or maxsize. */
-		if (arg_off(argv[2], &idx, &addr, &maxsize, &maxsize)) {
+		if (mtd_arg_off(argv[2], &idx, &addr, &maxsize, &maxsize,
+				MTD_DEV_TYPE_NAND, nand_info[idx].size)) {
+			puts("Offset or partition name expected\n");
+			return 1;
+		}
+		if (set_dev(idx)) {
 			puts("Offset or partition name expected\n");
 			return 1;
 		}
@@ -597,8 +493,12 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
 		printf("\nNAND %s: ", cmd);
 		/* skip first two or three arguments, look for offset and size */
-		if (arg_off_size(argc - o, argv + o, &dev, &off, &size,
-				 &maxsize) != 0)
+		if (mtd_arg_off_size(argc - o, argv + o, &dev, &off, &size,
+				     &maxsize, MTD_DEV_TYPE_NAND,
+				     nand_info[dev].size) != 0)
+			return 1;
+
+		if (set_dev(dev))
 			return 1;
 
 		nand = &nand_info[dev];
@@ -658,7 +558,12 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 		if (s && !strcmp(s, ".raw")) {
 			raw = 1;
 
-			if (arg_off(argv[3], &dev, &off, &size, &maxsize))
+			if (mtd_arg_off(argv[3], &dev, &off, &size, &maxsize,
+					MTD_DEV_TYPE_NAND,
+					nand_info[dev].size))
+				return 1;
+
+			if (set_dev(dev))
 				return 1;
 
 			nand = &nand_info[dev];
@@ -675,8 +580,13 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
 			rwsize = pagecount * (nand->writesize + nand->oobsize);
 		} else {
-			if (arg_off_size(argc - 3, argv + 3, &dev,
-						&off, &size, &maxsize) != 0)
+			if (mtd_arg_off_size(argc - 3, argv + 3, &dev, &off,
+					     &size, &maxsize,
+					     MTD_DEV_TYPE_NAND,
+					     nand_info[dev].size) != 0)
+				return 1;
+
+			if (set_dev(dev))
 				return 1;
 
 			/* size is unspecified */
@@ -814,8 +724,12 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 		if (s && !strcmp(s, ".allexcept"))
 			allexcept = 1;
 
-		if (arg_off_size(argc - 2, argv + 2, &dev, &off, &size,
-				 &maxsize) < 0)
+		if (mtd_arg_off_size(argc - 2, argv + 2, &dev, &off, &size,
+				     &maxsize, MTD_DEV_TYPE_NAND,
+				     nand_info[dev].size) < 0)
+			return 1;
+
+		if (set_dev(dev))
 			return 1;
 
 		if (!nand_unlock(&nand_info[dev], off, size, allexcept)) {
common/cmd_onenand.c +6 -13
index 06cc140..feab01a 100644
@@ -24,15 +24,8 @@ static struct mtd_info *mtd;
 static loff_t next_ofs;
 static loff_t skip_ofs;
 
-static inline int str2long(char *p, ulong *num)
-{
-	char *endptr;
-
-	*num = simple_strtoul(p, &endptr, 16);
-	return (*p != '\0' && *endptr == '\0') ? 1 : 0;
-}
-
-static int arg_off_size(int argc, char * const argv[], ulong *off, size_t *size)
+static int arg_off_size_onenand(int argc, char * const argv[], ulong *off,
+				size_t *size)
 {
 	if (argc >= 1) {
 		if (!(str2long(argv[0], off))) {
@@ -399,7 +392,7 @@ static int do_onenand_read(cmd_tbl_t * cmdtp, int flag, int argc, char * const a
 	addr = (ulong)simple_strtoul(argv[1], NULL, 16);
 
 	printf("\nOneNAND read: ");
-	if (arg_off_size(argc - 2, argv + 2, &ofs, &len) != 0)
+	if (arg_off_size_onenand(argc - 2, argv + 2, &ofs, &len) != 0)
 		return 1;
 
 	ret = onenand_block_read(ofs, len, &retlen, (u8 *)addr, oob);
@@ -425,7 +418,7 @@ static int do_onenand_write(cmd_tbl_t * cmdtp, int flag, int argc, char * const
 	addr = (ulong)simple_strtoul(argv[1], NULL, 16);
 
 	printf("\nOneNAND write: ");
-	if (arg_off_size(argc - 2, argv + 2, &ofs, &len) != 0)
+	if (arg_off_size_onenand(argc - 2, argv + 2, &ofs, &len) != 0)
 		return 1;
 
 	ret = onenand_block_write(ofs, len, &retlen, (u8 *)addr, withoob);
@@ -461,7 +454,7 @@ static int do_onenand_erase(cmd_tbl_t * cmdtp, int flag, int argc, char * const
 	printf("\nOneNAND erase: ");
 
 	/* skip first two or three arguments, look for offset and size */
-	if (arg_off_size(argc, argv, &ofs, &len) != 0)
+	if (arg_off_size_onenand(argc, argv, &ofs, &len) != 0)
 		return 1;
 
 	ret = onenand_block_erase(ofs, len, force);
@@ -486,7 +479,7 @@ static int do_onenand_test(cmd_tbl_t * cmdtp, int flag, int argc, char * const a
 	printf("\nOneNAND test: ");
 
 	/* skip first two or three arguments, look for offset and size */
-	if (arg_off_size(argc - 1, argv + 1, &ofs, &len) != 0)
+	if (arg_off_size_onenand(argc - 1, argv + 1, &ofs, &len) != 0)
 		return 1;
 
 	ret = onenand_block_test(ofs, len);
common/cmd_test.c +3 -9
index c93fe78..7285f75 100644
@@ -5,15 +5,6 @@
  * SPDX-License-Identifier:	GPL-2.0+
  */
 
-/*
- * Define _STDBOOL_H here to avoid macro expansion of true and false.
- * If the future code requires macro true or false, remove this define
- * and undef true and false before U_BOOT_CMD. This define and comment
- * shall be removed if change to U_BOOT_CMD is made to take string
- * instead of stringifying it.
- */
-#define _STDBOOL_H
-
 #include <common.h>
 #include <command.h>
 #include <fs.h>
@@ -191,6 +182,9 @@ static int do_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	return expr;
 }
 
+#undef true
+#undef false
+
 U_BOOT_CMD(
 	test,	CONFIG_SYS_MAXARGS,	1,	do_test,
 	"minimal test like /bin/sh",
drivers/mtd/Makefile +2 -2
index 5467a95..a623f4c 100644
@@ -5,8 +5,8 @@
 # SPDX-License-Identifier:	GPL-2.0+
 #
 
-ifneq (,$(findstring y,$(CONFIG_MTD_DEVICE)$(CONFIG_CMD_NAND)$(CONFIG_CMD_ONENAND)))
-obj-y += mtdcore.o
+ifneq (,$(findstring y,$(CONFIG_MTD_DEVICE)$(CONFIG_CMD_NAND)$(CONFIG_CMD_ONENAND)$(CONFIG_CMD_SF)))
+obj-y += mtdcore.o mtd_uboot.o
 endif
 obj-$(CONFIG_MTD_PARTITIONS) += mtdpart.o
 obj-$(CONFIG_MTD_CONCAT) += mtdconcat.o
drivers/mtd/mtd_uboot.c new file +99 -0

99 lines not on this page · raw message

include/linux/mtd/mtd.h +5 -0
index 8666413..33669da 100644
@@ -482,5 +482,10 @@ int add_mtd_device(struct mtd_info *mtd);
 int del_mtd_device(struct mtd_info *mtd);
 int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int);
 int del_mtd_partitions(struct mtd_info *);
+
+int mtd_arg_off(const char *arg, int *idx, loff_t *off, loff_t *size,
+		loff_t *maxsize, int devtype, int chipsize);
+int mtd_arg_off_size(int argc, char *const argv[], int *idx, loff_t *off,
+		 loff_t *size, loff_t *maxsize, int devtype, int chipsize);
 #endif
 #endif /* __MTD_MTD_H__ */
include/vsprintf.h +2 -0
index 09c8abd..d2fcca3 100644
@@ -196,4 +196,6 @@ int vscnprintf(char *buf, size_t size, const char *fmt, va_list args);
  */
 void print_grouped_ull(unsigned long long int_val, int digits);
 
+bool str2off(const char *p, loff_t *num);
+bool str2long(const char *p, ulong *num);
 #endif
lib/vsprintf.c +16 -0
index bedc865..a9b8a3a 100644
@@ -909,3 +909,19 @@ void print_grouped_ull(unsigned long long int_val, int digits)
 		grab = 3;
 	}
 }
+
+bool str2off(const char *p, loff_t *num)
+{
+	char *endptr;
+
+	*num = simple_strtoull(p, &endptr, 16);
+	return *p != '\0' && *endptr == '\0';
+}
+
+bool str2long(const char *p, ulong *num)
+{
+	char *endptr;
+
+	*num = simple_strtoul(p, &endptr, 16);
+	return *p != '\0' && *endptr == '\0';
+}
Signature · 1 line
1.9.1
author
#3 lore raw

PATCH v7 3/4 spi, sf: Use offset and size in sf cmd from mtdpartition

In reply to Jagan Teki

From: Heiko Schocher <[email protected]>

With this patch, it is possible to get the offset and size information from the mtdpartiton setting in "mtdparts", similiar to the "nand" commandos.

=> sf
sf - SPI flash sub-system

Usage:
sf probe [[bus:]cs] [hz] [mode] - init flash device on given SPI bus
and chip select
sf read addr offset|partition len - read `len' bytes starting at
offset' to memory at addr'
sf write addr offset|partition len - write `len' bytes from memory
at addr' to flash at offset'
sf erase offset|partition [+]len - erase len' bytes from offset'
+len' round up len' to block size
sf update addr offset|partition len - erase and write `len' bytes from memory
at addr' to flash at offset'
=>
for example "env" is defined in mtdparts:

=> sf read 13000000 env
device 0 offset 0xd0000, size 0x10000
SF: 65536 bytes @ 0xd0000 Read: OK

zynq-uboot> mtdparts add nor0 0x10000 at 0x0 env
zynq-uboot> sf erase env 0x10000
SF: 65536 bytes @ 0x0 Erased: OK

zynq-uboot> sf write 0x100 env
device 0 offset 0x0, size 0x10000
SF: 65536 bytes @ 0x0 Written: OK

zynq-uboot> sf read 0x40000 env
device 0 offset 0x0, size 0x10000
SF: 65536 bytes @ 0x0 Read: OK

---
Changes in v7:
- Remove ^ character in sf erase line sf help text Changes in v6: None
Changes in v2:
- none
Series-changes: 3
- rebase with d6c1ffc7d23f4fe4ae8c91101861055b8e1501b6
Series-changes: 4
- rebased against 385a08a60f042061b004642d6b9bb6cfb794ad5a
Series-changes: 5
- no changes
series-changes: 6
- add comment from Jagan Teki:
- append help text
- add Reviewed-by from Jagannadha Sutradharudu Teki

 common/cmd_sf.c | 54 +++++++++++++++++++++++++++++-------------------------
 1 file changed, 29 insertions(+), 25 deletions(-)
common/cmd_sf.c +29 -25
index ed3e398..9bced29 100644
@@ -13,6 +13,8 @@
 #include <mapmem.h>
 #include <spi.h>
 #include <spi_flash.h>
+#include <jffs2/jffs2.h>
+#include <linux/mtd/mtd.h>
 
 #include <asm/io.h>
 #include <dm/device-internal.h>
@@ -254,23 +256,21 @@ static int spi_flash_update(struct spi_flash *flash, u32 offset,
 static int do_spi_flash_read_write(int argc, char * const argv[])
 {
 	unsigned long addr;
-	unsigned long offset;
-	unsigned long len;
 	void *buf;
 	char *endp;
 	int ret = 1;
+	int dev = 0;
+	loff_t offset, len, maxsize;
 
-	if (argc < 4)
+	if (argc < 3)
 		return -1;
 
 	addr = simple_strtoul(argv[1], &endp, 16);
 	if (*argv[1] == 0 || *endp != 0)
 		return -1;
-	offset = simple_strtoul(argv[2], &endp, 16);
-	if (*argv[2] == 0 || *endp != 0)
-		return -1;
-	len = simple_strtoul(argv[3], &endp, 16);
-	if (*argv[3] == 0 || *endp != 0)
+
+	if (mtd_arg_off_size(argc - 2, &argv[2], &dev, &offset, &len,
+			     &maxsize, MTD_DEV_TYPE_NOR, flash->size))
 		return -1;
 
 	/* Consistency checking */
@@ -309,31 +309,31 @@ static int do_spi_flash_read_write(int argc, char * const argv[])
 
 static int do_spi_flash_erase(int argc, char * const argv[])
 {
-	unsigned long offset;
-	unsigned long len;
-	char *endp;
 	int ret;
+	int dev = 0;
+	loff_t offset, len, maxsize;
+	ulong size;
 
 	if (argc < 3)
 		return -1;
 
-	offset = simple_strtoul(argv[1], &endp, 16);
-	if (*argv[1] == 0 || *endp != 0)
+	if (mtd_arg_off(argv[1], &dev, &offset, &len, &maxsize,
+			MTD_DEV_TYPE_NOR, flash->size))
 		return -1;
 
-	ret = sf_parse_len_arg(argv[2], &len);
+	ret = sf_parse_len_arg(argv[2], &size);
 	if (ret != 1)
 		return -1;
 
 	/* Consistency checking */
-	if (offset + len > flash->size) {
+	if (offset + size > flash->size) {
 		printf("ERROR: attempting %s past flash size (%#x)\n",
 		       argv[0], flash->size);
 		return 1;
 	}
 
-	ret = spi_flash_erase(flash, offset, len);
-	printf("SF: %zu bytes @ %#x Erased: %s\n", (size_t)len, (u32)offset,
+	ret = spi_flash_erase(flash, offset, size);
+	printf("SF: %zu bytes @ %#x Erased: %s\n", (size_t)size, (u32)offset,
 	       ret ? "ERROR" : "OK");
 
 	return ret == 0 ? 0 : 1;
@@ -558,13 +558,17 @@ U_BOOT_CMD(
 	"SPI flash sub-system",
 	"probe [[bus:]cs] [hz] [mode]	- init flash device on given SPI bus\n"
 	"				  and chip select\n"
-	"sf read addr offset len	- read `len' bytes starting at\n"
-	"				  `offset' to memory at `addr'\n"
-	"sf write addr offset len	- write `len' bytes from memory\n"
-	"				  at `addr' to flash at `offset'\n"
-	"sf erase offset [+]len		- erase `len' bytes from `offset'\n"
-	"				  `+len' round up `len' to block size\n"
-	"sf update addr offset len	- erase and write `len' bytes from memory\n"
-	"				  at `addr' to flash at `offset'"
+	"sf read addr offset|partition len	- read `len' bytes starting at\n"
+	"				          `offset' or from start of mtd\n"
+	"					  `partition'to memory at `addr'\n"
+	"sf write addr offset|partition len	- write `len' bytes from memory\n"
+	"				          at `addr' to flash at `offset'\n"
+	"					  or to start of mtd `partition'\n"
+	"sf erase offset|partition [+]len	- erase `len' bytes from `offset'\n"
+	"					  or from start of mtd `partition'\n"
+	"					 `+len' round up `len' to block size\n"
+	"sf update addr offset|partition len	- erase and write `len' bytes from memory\n"
+	"					  at `addr' to flash at `offset'\n"
+	"					  or to start of mtd `partition'\n"
 	SF_TEST_HELP
 );
Signature · 1 line
1.9.1
author
#4 lore raw

PATCH v7 4/4 mtd, spi: Check if flash pointer is used

In reply to Jagan Teki

From: Heiko Schocher <[email protected]>

If flash pointer is used free it, before probing a new flash and storing it in flash.

---
Changes in v7: none
Changes in v6:
- add comments from Jagan Teki:
new patch in this patchserie, extract this piece of code into a new patch.

 common/cmd_sf.c | 5 +++++
 1 file changed, 5 insertions(+)
common/cmd_sf.c +5 -0
index 9bced29..aef8c2a 100644
@@ -135,7 +135,12 @@ static int do_spi_flash_probe(int argc, char * const argv[])
 
 	flash = dev_get_uclass_priv(new);
 #else
+	if (flash)
+		spi_flash_free(flash);
+
 	new = spi_flash_probe(bus, cs, speed, mode);
+	flash = new;
+
 	if (!new) {
 		printf("Failed to initialize SPI flash at %u:%u\n", bus, cs);
 		return 1;
Signature · 1 line
1.9.1
author
#5 lore raw

v7 cover sf: Add MTD layer support

In reply to Jagan Teki

+ Heiko
+ Daniel

---------- Forwarded message ----------
From: Jagan Teki <[email protected]>
Date: 23 June 2015 at 01:30
Subject: [U-Boot] [PATCH v7 0/4] sf: Add MTD layer support
To: u-boot at lists.denx.de
Cc: Jagan Teki <[email protected]>

Just resend the whole series with below changes,
Changes for v7:
- Add more notes on commit message
- Update the info for CONFIG_SPI_FLASH_MTD in README
- Remove ^ character in sf erase line sf help text
- Update starting character in commit message heads with capitals

Heiko and Daniel - send your comments on this series once all clear I will push on my tree.

thanks!
Jagan.

Daniel Schwierzeck (1):
mtd, spi: Add MTD layer driver

Heiko Schocher (3):
mtd, nand: Move common functions from cmd_nand.c to common place spi, sf: Use offset and size in sf cmd from mtdpartition mtd, spi: Check if flash pointer is used

 README                        |   9 +++
 common/cmd_nand.c             | 148 +++++++++---------------------------------
 common/cmd_onenand.c          |  19 ++----
 common/cmd_sf.c               |  61 +++++++++--------
 common/cmd_test.c             |  12 +---
 drivers/mtd/Makefile          |   4 +-
 drivers/mtd/mtd_uboot.c       |  99 ++++++++++++++++++++++++++++
 drivers/mtd/spi/Makefile      |   1 +
 drivers/mtd/spi/sf_internal.h |   5 ++
 drivers/mtd/spi/sf_mtd.c      | 104 +++++++++++++++++++++++++++++
 drivers/mtd/spi/sf_probe.c    |  11 ++--
 include/linux/mtd/mtd.h       |   5 ++
 include/vsprintf.h            |   2 +
 lib/vsprintf.c                |  16 +++++
 14 files changed, 323 insertions(+), 173 deletions(-)
 create mode 100644 drivers/mtd/mtd_uboot.c
 create mode 100644 drivers/mtd/spi/sf_mtd.c

--
1.9.1

_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Signature · 1 line
Jagan | openedev.
#6 lore raw

v7 cover sf: Add MTD layer support

In reply to Jagan Teki

Hello Jagan,

Am 22.06.2015 um 22:00 schrieb Jagan Teki:

Quoted 9 lines

Just resend the whole series with below changes,
Changes for v7:
- Add more notes on commit message
- Update the info for CONFIG_SPI_FLASH_MTD in README
- Remove ^ character in sf erase line sf help text
- Update starting character in commit message heads with capitals

Heiko and Daniel - send your comments on this series once all clear I will push on my tree.

Ok, from my side, thanks!

bye,
Heiko

Quoted 30 lines

thanks!
Jagan.

Daniel Schwierzeck (1):
mtd, spi: Add MTD layer driver

Heiko Schocher (3):
mtd, nand: Move common functions from cmd_nand.c to common place spi, sf: Use offset and size in sf cmd from mtdpartition mtd, spi: Check if flash pointer is used

  README                        |   9 +++
  common/cmd_nand.c             | 148 +++++++++---------------------------------
  common/cmd_onenand.c          |  19 ++----
  common/cmd_sf.c               |  61 +++++++++--------
  common/cmd_test.c             |  12 +---
  drivers/mtd/Makefile          |   4 +-
  drivers/mtd/mtd_uboot.c       |  99 ++++++++++++++++++++++++++++
  drivers/mtd/spi/Makefile      |   1 +
  drivers/mtd/spi/sf_internal.h |   5 ++
  drivers/mtd/spi/sf_mtd.c      | 104 +++++++++++++++++++++++++++++
  drivers/mtd/spi/sf_probe.c    |  11 ++--
  include/linux/mtd/mtd.h       |   5 ++
  include/vsprintf.h            |   2 +
  lib/vsprintf.c                |  16 +++++
  14 files changed, 323 insertions(+), 173 deletions(-)

create mode 100644 drivers/mtd/mtd_uboot.c
create mode 100644 drivers/mtd/spi/sf_mtd.c

Signature · 2 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
author
#7 lore raw

v7 cover sf: Add MTD layer support

Quoted 11 lines · Heiko Schocher denx

Hello Jagan,

Am 22.06.2015 um 22:00 schrieb Jagan Teki:

Quoted 8 lines

Just resend the whole series with below changes,
Changes for v7:
- Add more notes on commit message
- Update the info for CONFIG_SPI_FLASH_MTD in README
- Remove ^ character in sf erase line sf help text
- Update starting character in commit message heads with capitals

Quoted 39 lines
Quoted 2 lines

Heiko and Daniel - send your comments on this series once all clear I will push on my tree.

Ok, from my side, thanks!

bye,
Heiko

Quoted 30 lines

thanks!
Jagan.

Daniel Schwierzeck (1):
mtd, spi: Add MTD layer driver

Heiko Schocher (3):
mtd, nand: Move common functions from cmd_nand.c to common place spi, sf: Use offset and size in sf cmd from mtdpartition mtd, spi: Check if flash pointer is used

  README                        |   9 +++
  common/cmd_nand.c             | 148
+++++++++---------------------------------
  common/cmd_onenand.c          |  19 ++----
  common/cmd_sf.c               |  61 +++++++++--------
  common/cmd_test.c             |  12 +---
  drivers/mtd/Makefile          |   4 +-
  drivers/mtd/mtd_uboot.c       |  99 ++++++++++++++++++++++++++++
  drivers/mtd/spi/Makefile      |   1 +
  drivers/mtd/spi/sf_internal.h |   5 ++
  drivers/mtd/spi/sf_mtd.c      | 104 +++++++++++++++++++++++++++++
  drivers/mtd/spi/sf_probe.c    |  11 ++--
  include/linux/mtd/mtd.h       |   5 ++
  include/vsprintf.h            |   2 +
  lib/vsprintf.c                |  16 +++++
  14 files changed, 323 insertions(+), 173 deletions(-)

create mode 100644 drivers/mtd/mtd_uboot.c
create mode 100644 drivers/mtd/spi/sf_mtd.c

Applied to u-boot-spi/master

thanks!

Signature · 1 line
Jagan | openedev.