* [U-Boot] [PATCH v7 0/4] sf: Add MTD layer support
@ 2015-06-22 20:00 Jagan Teki
2015-06-22 20:00 ` [U-Boot] [PATCH v7 1/4] mtd, spi: Add MTD layer driver Jagan Teki
` (5 more replies)
0 siblings, 6 replies; 8+ messages in thread
From: Jagan Teki @ 2015-06-22 20:00 UTC (permalink / raw)
To: u-boot
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
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] [PATCH v7 1/4] mtd, spi: Add MTD layer driver
2015-06-22 20:00 [U-Boot] [PATCH v7 0/4] sf: Add MTD layer support Jagan Teki
@ 2015-06-22 20:00 ` Jagan Teki
2015-06-22 20:00 ` [U-Boot] [PATCH v7 2/4] mtd, nand: Move common functions from cmd_nand.c to common place Jagan Teki
` (4 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Jagan Teki @ 2015-06-22 20:00 UTC (permalink / raw)
To: u-boot
From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
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.
Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
Signed-off-by: Heiko Schocher <hs@denx.de>
Tested-by: Jagannadh Teki <jteki@openedev.com>
Reviewed-by: Jagannadh Teki <jteki@openedev.com>
---
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
diff --git a/README b/README
index 3b406c2..2c3ba04 100644
--- a/README
+++ b/README
@@ -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
diff --git a/common/cmd_sf.c b/common/cmd_sf.c
index 342021d..ed3e398 100644
--- a/common/cmd_sf.c
+++ b/common/cmd_sf.c
@@ -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
diff --git a/drivers/mtd/spi/Makefile b/drivers/mtd/spi/Makefile
index 87f20bc..ed46648 100644
--- a/drivers/mtd/spi/Makefile
+++ b/drivers/mtd/spi/Makefile
@@ -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
diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h
index 4158e13..81eea8c 100644
--- a/drivers/mtd/spi/sf_internal.h
+++ b/drivers/mtd/spi/sf_internal.h
@@ -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_ */
diff --git a/drivers/mtd/spi/sf_mtd.c b/drivers/mtd/spi/sf_mtd.c
new file mode 100644
index 0000000..0b9cb62
--- /dev/null
+++ b/drivers/mtd/spi/sf_mtd.c
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2012-2014 Daniel Schwierzeck, daniel.schwierzeck at gmail.com
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <common.h>
+#include <malloc.h>
+#include <asm/errno.h>
+#include <linux/mtd/mtd.h>
+#include <spi_flash.h>
+
+static struct mtd_info sf_mtd_info;
+static char sf_mtd_name[8];
+
+static int spi_flash_mtd_erase(struct mtd_info *mtd, struct erase_info *instr)
+{
+ struct spi_flash *flash = mtd->priv;
+ int err;
+
+ instr->state = MTD_ERASING;
+
+ err = spi_flash_erase(flash, instr->addr, instr->len);
+ if (err) {
+ instr->state = MTD_ERASE_FAILED;
+ instr->fail_addr = MTD_FAIL_ADDR_UNKNOWN;
+ return -EIO;
+ }
+
+ instr->state = MTD_ERASE_DONE;
+ mtd_erase_callback(instr);
+
+ return 0;
+}
+
+static int spi_flash_mtd_read(struct mtd_info *mtd, loff_t from, size_t len,
+ size_t *retlen, u_char *buf)
+{
+ struct spi_flash *flash = mtd->priv;
+ int err;
+
+ err = spi_flash_read(flash, from, len, buf);
+ if (!err)
+ *retlen = len;
+
+ return err;
+}
+
+static int spi_flash_mtd_write(struct mtd_info *mtd, loff_t to, size_t len,
+ size_t *retlen, const u_char *buf)
+{
+ struct spi_flash *flash = mtd->priv;
+ int err;
+
+ err = spi_flash_write(flash, to, len, buf);
+ if (!err)
+ *retlen = len;
+
+ return err;
+}
+
+static void spi_flash_mtd_sync(struct mtd_info *mtd)
+{
+}
+
+static int spi_flash_mtd_number(void)
+{
+#ifdef CONFIG_SYS_MAX_FLASH_BANKS
+ return CONFIG_SYS_MAX_FLASH_BANKS;
+#else
+ return 0;
+#endif
+}
+
+int spi_flash_mtd_register(struct spi_flash *flash)
+{
+ memset(&sf_mtd_info, 0, sizeof(sf_mtd_info));
+ sprintf(sf_mtd_name, "nor%d", spi_flash_mtd_number());
+
+ sf_mtd_info.name = sf_mtd_name;
+ sf_mtd_info.type = MTD_NORFLASH;
+ sf_mtd_info.flags = MTD_CAP_NORFLASH;
+ sf_mtd_info.writesize = 1;
+ sf_mtd_info.writebufsize = flash->page_size;
+
+ sf_mtd_info._erase = spi_flash_mtd_erase;
+ sf_mtd_info._read = spi_flash_mtd_read;
+ sf_mtd_info._write = spi_flash_mtd_write;
+ sf_mtd_info._sync = spi_flash_mtd_sync;
+
+ sf_mtd_info.size = flash->size;
+ sf_mtd_info.priv = flash;
+
+ /* Only uniform flash devices for now */
+ sf_mtd_info.numeraseregions = 0;
+ sf_mtd_info.erasesize = flash->sector_size;
+
+ return add_mtd_device(&sf_mtd_info);
+}
+
+void spi_flash_mtd_unregister(void)
+{
+ del_mtd_device(&sf_mtd_info);
+}
diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
index 201471c..e0283dc 100644
--- a/drivers/mtd/spi/sf_probe.c
+++ b/drivers/mtd/spi/sf_probe.c
@@ -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);
}
--
1.9.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [U-Boot] [PATCH v7 2/4] mtd, nand: Move common functions from cmd_nand.c to common place
2015-06-22 20:00 [U-Boot] [PATCH v7 0/4] sf: Add MTD layer support Jagan Teki
2015-06-22 20:00 ` [U-Boot] [PATCH v7 1/4] mtd, spi: Add MTD layer driver Jagan Teki
@ 2015-06-22 20:00 ` Jagan Teki
2015-06-22 20:00 ` [U-Boot] [PATCH v7 3/4] spi, sf: Use offset and size in sf cmd from mtdpartition Jagan Teki
` (3 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Jagan Teki @ 2015-06-22 20:00 UTC (permalink / raw)
To: u-boot
From: Heiko Schocher <hs@denx.de>
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 ...
Signed-off-by: Heiko Schocher <hs@denx.de>
Acked-by: Scott Wood <scottwood@freescale.com>
Reviewed-by: Jagannadh Teki <jteki@openedev.com>
---
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 <jagannadh.teki@gmail.com>
- 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
diff --git a/common/cmd_nand.c b/common/cmd_nand.c
index 9433c80..1482462 100644
--- a/common/cmd_nand.c
+++ b/common/cmd_nand.c
@@ -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)) {
diff --git a/common/cmd_onenand.c b/common/cmd_onenand.c
index 06cc140..feab01a 100644
--- a/common/cmd_onenand.c
+++ b/common/cmd_onenand.c
@@ -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);
diff --git a/common/cmd_test.c b/common/cmd_test.c
index c93fe78..7285f75 100644
--- a/common/cmd_test.c
+++ b/common/cmd_test.c
@@ -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",
diff --git a/drivers/mtd/Makefile b/drivers/mtd/Makefile
index 5467a95..a623f4c 100644
--- a/drivers/mtd/Makefile
+++ b/drivers/mtd/Makefile
@@ -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
diff --git a/drivers/mtd/mtd_uboot.c b/drivers/mtd/mtd_uboot.c
new file mode 100644
index 0000000..7197007
--- /dev/null
+++ b/drivers/mtd/mtd_uboot.c
@@ -0,0 +1,99 @@
+/*
+ * (C) Copyright 2014
+ * Heiko Schocher, DENX Software Engineering, hs at denx.de.
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+#include <common.h>
+#include <linux/mtd/mtd.h>
+#include <jffs2/jffs2.h>
+
+static int get_part(const char *partname, int *idx, loff_t *off, loff_t *size,
+ loff_t *maxsize, int devtype)
+{
+#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 != devtype) {
+ printf("not same typ %d != %d\n", dev->id->type, devtype);
+ return -1;
+ }
+
+ *off = part->offset;
+ *size = part->size;
+ *maxsize = part->size;
+ *idx = dev->id->num;
+
+ return 0;
+#else
+ puts("offset is not a number\n");
+ return -1;
+#endif
+}
+
+int mtd_arg_off(const char *arg, int *idx, loff_t *off, loff_t *size,
+ loff_t *maxsize, int devtype, int chipsize)
+{
+ if (!str2off(arg, off))
+ return get_part(arg, idx, off, size, maxsize, devtype);
+
+ if (*off >= chipsize) {
+ puts("Offset exceeds device limit\n");
+ return -1;
+ }
+
+ *maxsize = chipsize - *off;
+ *size = *maxsize;
+ return 0;
+}
+
+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)
+{
+ int ret;
+
+ if (argc == 0) {
+ *off = 0;
+ *size = chipsize;
+ *maxsize = *size;
+ goto print;
+ }
+
+ ret = mtd_arg_off(argv[0], idx, off, size, maxsize, devtype,
+ chipsize);
+ 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 == chipsize)
+ puts("whole chip\n");
+ else
+ printf("offset 0x%llx, size 0x%llx\n",
+ (unsigned long long)*off, (unsigned long long)*size);
+ return 0;
+}
diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h
index 8666413..33669da 100644
--- a/include/linux/mtd/mtd.h
+++ b/include/linux/mtd/mtd.h
@@ -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__ */
diff --git a/include/vsprintf.h b/include/vsprintf.h
index 09c8abd..d2fcca3 100644
--- a/include/vsprintf.h
+++ b/include/vsprintf.h
@@ -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
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index bedc865..a9b8a3a 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -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';
+}
--
1.9.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [U-Boot] [PATCH v7 3/4] spi, sf: Use offset and size in sf cmd from mtdpartition
2015-06-22 20:00 [U-Boot] [PATCH v7 0/4] sf: Add MTD layer support Jagan Teki
2015-06-22 20:00 ` [U-Boot] [PATCH v7 1/4] mtd, spi: Add MTD layer driver Jagan Teki
2015-06-22 20:00 ` [U-Boot] [PATCH v7 2/4] mtd, nand: Move common functions from cmd_nand.c to common place Jagan Teki
@ 2015-06-22 20:00 ` Jagan Teki
2015-06-22 20:00 ` [U-Boot] [PATCH v7 4/4] mtd, spi: Check if flash pointer is used Jagan Teki
` (2 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Jagan Teki @ 2015-06-22 20:00 UTC (permalink / raw)
To: u-boot
From: Heiko Schocher <hs@denx.de>
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
Signed-off-by: Heiko Schocher <hs@denx.de>
Tested-by: Jagannadh Teki <jteki@openedev.com>
Reviewed-by: Jagannadh Teki <jteki@openedev.com>
---
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(-)
diff --git a/common/cmd_sf.c b/common/cmd_sf.c
index ed3e398..9bced29 100644
--- a/common/cmd_sf.c
+++ b/common/cmd_sf.c
@@ -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
);
--
1.9.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [U-Boot] [PATCH v7 4/4] mtd, spi: Check if flash pointer is used
2015-06-22 20:00 [U-Boot] [PATCH v7 0/4] sf: Add MTD layer support Jagan Teki
` (2 preceding siblings ...)
2015-06-22 20:00 ` [U-Boot] [PATCH v7 3/4] spi, sf: Use offset and size in sf cmd from mtdpartition Jagan Teki
@ 2015-06-22 20:00 ` Jagan Teki
2015-06-22 20:01 ` [U-Boot] Fwd: [PATCH v7 0/4] sf: Add MTD layer support Jagan Teki
2015-06-23 3:57 ` [U-Boot] " Heiko Schocher denx
5 siblings, 0 replies; 8+ messages in thread
From: Jagan Teki @ 2015-06-22 20:00 UTC (permalink / raw)
To: u-boot
From: Heiko Schocher <hs@denx.de>
If flash pointer is used free it, before probing a new
flash and storing it in flash.
Signed-off-by: Heiko Schocher <hs@denx.de>
Tested-by: Jagannadh Teki <jteki@openedev.com>
Reviewed-by: Jagannadh Teki <jteki@openedev.com>
---
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(+)
diff --git a/common/cmd_sf.c b/common/cmd_sf.c
index 9bced29..aef8c2a 100644
--- a/common/cmd_sf.c
+++ b/common/cmd_sf.c
@@ -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;
--
1.9.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [U-Boot] Fwd: [PATCH v7 0/4] sf: Add MTD layer support
2015-06-22 20:00 [U-Boot] [PATCH v7 0/4] sf: Add MTD layer support Jagan Teki
` (3 preceding siblings ...)
2015-06-22 20:00 ` [U-Boot] [PATCH v7 4/4] mtd, spi: Check if flash pointer is used Jagan Teki
@ 2015-06-22 20:01 ` Jagan Teki
2015-06-23 3:57 ` [U-Boot] " Heiko Schocher denx
5 siblings, 0 replies; 8+ messages in thread
From: Jagan Teki @ 2015-06-22 20:01 UTC (permalink / raw)
To: u-boot
+ Heiko
+ Daniel
---------- Forwarded message ----------
From: Jagan Teki <jteki@openedev.com>
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 <jteki@openedev.com>
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
--
Jagan | openedev.
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] [PATCH v7 0/4] sf: Add MTD layer support
2015-06-22 20:00 [U-Boot] [PATCH v7 0/4] sf: Add MTD layer support Jagan Teki
` (4 preceding siblings ...)
2015-06-22 20:01 ` [U-Boot] Fwd: [PATCH v7 0/4] sf: Add MTD layer support Jagan Teki
@ 2015-06-23 3:57 ` Heiko Schocher denx
2015-06-23 7:25 ` Jagan Teki
5 siblings, 1 reply; 8+ messages in thread
From: Heiko Schocher denx @ 2015-06-23 3:57 UTC (permalink / raw)
To: u-boot
Hello Jagan,
Am 22.06.2015 um 22:00 schrieb Jagan Teki:
> 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
>
> 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
>
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] [PATCH v7 0/4] sf: Add MTD layer support
2015-06-23 3:57 ` [U-Boot] " Heiko Schocher denx
@ 2015-06-23 7:25 ` Jagan Teki
0 siblings, 0 replies; 8+ messages in thread
From: Jagan Teki @ 2015-06-23 7:25 UTC (permalink / raw)
To: u-boot
On 23 June 2015 at 09:27, Heiko Schocher denx <hs@denx.de> wrote:
> Hello Jagan,
>
> Am 22.06.2015 um 22:00 schrieb Jagan Teki:
>>
>> 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
>
>>
>> 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!
--
Jagan | openedev.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2015-06-23 7:25 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-06-22 20:00 [U-Boot] [PATCH v7 0/4] sf: Add MTD layer support Jagan Teki
2015-06-22 20:00 ` [U-Boot] [PATCH v7 1/4] mtd, spi: Add MTD layer driver Jagan Teki
2015-06-22 20:00 ` [U-Boot] [PATCH v7 2/4] mtd, nand: Move common functions from cmd_nand.c to common place Jagan Teki
2015-06-22 20:00 ` [U-Boot] [PATCH v7 3/4] spi, sf: Use offset and size in sf cmd from mtdpartition Jagan Teki
2015-06-22 20:00 ` [U-Boot] [PATCH v7 4/4] mtd, spi: Check if flash pointer is used Jagan Teki
2015-06-22 20:01 ` [U-Boot] Fwd: [PATCH v7 0/4] sf: Add MTD layer support Jagan Teki
2015-06-23 3:57 ` [U-Boot] " Heiko Schocher denx
2015-06-23 7:25 ` Jagan Teki
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.