sf: Add MTD layer support
Subsystems (3)
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
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.odrivers/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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
PATCH v7 2/4 mtd, nand: Move common functions from cmd_nand.c to common place
In reply to Jagan TekiFrom: 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
@@ -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
@@ -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 * constprintf ("\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 aprintf ("\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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
PATCH v7 3/4 spi, sf: Use offset and size in sf cmd from mtdpartition
In reply to Jagan TekiFrom: 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
@@ -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
PATCH v7 4/4 mtd, spi: Check if flash pointer is used
In reply to Jagan TekiFrom: 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
@@ -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
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.
v7 cover sf: Add MTD layer support
In reply to Jagan TekiHello 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 forCONFIG_SPI_FLASH_MTDin README
- Remove ^ character in sf erase line sf help text
- Update starting character in commit message heads with capitalsHeiko 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 driverHeiko Schocher (3):
mtd, nand: Move common functions fromcmd_nand.cto common place spi, sf: Use offset and size in sf cmd from mtdpartition mtd, spi: Check if flash pointer is usedREADME | 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 100644drivers/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
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 forCONFIG_SPI_FLASH_MTDin 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,
HeikoQuoted 30 lines
thanks!
Jagan.Daniel Schwierzeck (1):
mtd, spi: Add MTD layer driverHeiko Schocher (3):
mtd, nand: Move common functions fromcmd_nand.cto common place spi, sf: Use offset and size in sf cmd from mtdpartition mtd, spi: Check if flash pointer is usedREADME | 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 100644drivers/mtd/spi/sf_mtd.c
Applied to u-boot-spi/master
thanks!
Signature · 1 line
Jagan | openedev.