diff options
| author | Tom Rini <[email protected]> | 2019-12-04 17:13:35 -0500 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2019-12-04 17:13:35 -0500 |
| commit | c1c6e4a9da674bce5980d82f8a70a56e023e58c3 (patch) | |
| tree | 46548095b9e4baaa3a7de1d0ce8d07168ad3c01a /cmd | |
| parent | 94d022bb400890f22fe35220d2519c3bce73f05e (diff) | |
| parent | fb4384490df4e753dcac0478bdb5e912994ef9d6 (diff) | |
Merge branch '2019-10-27-mtd-cleanup'
- Merge the series to clean up our MTD Kconfig and Makefile logic
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/Kconfig | 34 | ||||
| -rw-r--r-- | cmd/Makefile | 3 | ||||
| -rw-r--r-- | cmd/legacy-mtd-utils.c | 99 | ||||
| -rw-r--r-- | cmd/legacy-mtd-utils.h | 12 | ||||
| -rw-r--r-- | cmd/nand.c | 2 | ||||
| -rw-r--r-- | cmd/sf.c | 2 |
6 files changed, 137 insertions, 15 deletions
diff --git a/cmd/Kconfig b/cmd/Kconfig index cf982ff65e7..3b3722feb40 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -850,6 +850,7 @@ config CMD_FDC config CMD_FLASH bool "flinfo, erase, protect" default y + depends on MTD || FLASH_CFI_DRIVER || MTD_NOR_FLASH help NOR flash support. flinfo - print FLASH memory information @@ -1039,6 +1040,7 @@ config CMD_MMC_SWRITE config CMD_MTD bool "mtd" + depends on MTD select MTD_PARTITIONS help MTD commands support. @@ -1046,6 +1048,7 @@ config CMD_MTD config CMD_NAND bool "nand" default y if NAND_SUNXI + depends on MTD_RAW_NAND help NAND support. @@ -1077,6 +1080,7 @@ config CMD_NVME config CMD_ONENAND bool "onenand - access to onenand device" + depends on MTD help OneNAND is a brand of NAND ('Not AND' gate) flash which provides various useful features. This command allows reading, writing, @@ -1954,7 +1958,7 @@ config CMD_JFFS2 config CMD_MTDPARTS bool "MTD partition support" - select MTD_DEVICE if (CMD_NAND || NAND) + depends on MTD help MTD partitioning tool support. It is strongly encouraged to avoid using this command @@ -1962,20 +1966,6 @@ config CMD_MTDPARTS declare the partitions in the mtdparts environment variable but better use the MTD stack and the 'mtd' command instead. -config MTDIDS_DEFAULT - string "Default MTD IDs" - depends on MTD_PARTITIONS || CMD_MTDPARTS || CMD_NAND || CMD_FLASH - help - Defines a default MTD IDs list for use with MTD partitions in the - Linux MTD command line partitions format. - -config MTDPARTS_DEFAULT - string "Default MTD partition scheme" - depends on MTD_PARTITIONS || CMD_MTDPARTS || CMD_NAND || CMD_FLASH - help - Defines a default MTD partitioning scheme in the Linux MTD command - line partitions format - config CMD_MTDPARTS_SPREAD bool "Padd partition size to take account of bad blocks" depends on CMD_MTDPARTS @@ -1994,6 +1984,20 @@ config CMD_MTDPARTS_SHOW_NET_SIZES effective usable size of a partition, if bad blocks are taken into account. +config MTDIDS_DEFAULT + string "Default MTD IDs" + depends on MTD || SPI_FLASH + help + Defines a default MTD IDs list for use with MTD partitions in the + Linux MTD command line partitions format. + +config MTDPARTS_DEFAULT + string "Default MTD partition scheme" + depends on MTD || SPI_FLASH + help + Defines a default MTD partitioning scheme in the Linux MTD command + line partitions format + config CMD_REISER bool "reiser - Access to reiserfs filesystems" help diff --git a/cmd/Makefile b/cmd/Makefile index f823d16755e..36b3ceca391 100644 --- a/cmd/Makefile +++ b/cmd/Makefile @@ -97,6 +97,9 @@ obj-$(CONFIG_CMD_MMC) += mmc.o obj-$(CONFIG_MP) += mp.o obj-$(CONFIG_CMD_MTD) += mtd.o obj-$(CONFIG_CMD_MTDPARTS) += mtdparts.o +ifneq ($(CONFIG_CMD_NAND)$(CONFIG_CMD_SF),) +obj-y += legacy-mtd-utils.o +endif obj-$(CONFIG_CMD_NAND) += nand.o obj-$(CONFIG_CMD_NET) += net.o obj-$(CONFIG_CMD_NVEDIT_EFI) += nvedit_efi.o diff --git a/cmd/legacy-mtd-utils.c b/cmd/legacy-mtd-utils.c new file mode 100644 index 00000000000..ac7139f84d6 --- /dev/null +++ b/cmd/legacy-mtd-utils.c @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: GPL-2.0+ + +#include <common.h> +#include <jffs2/jffs2.h> +#include <linux/mtd/mtd.h> +#include <linux/mtd/partitions.h> +#include <linux/string.h> +#include <mtd.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("mtdparts support missing.\n"); + return -1; +#endif +} + +int mtd_arg_off(const char *arg, int *idx, loff_t *off, loff_t *size, + loff_t *maxsize, int devtype, uint64_t 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, + uint64_t 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/cmd/legacy-mtd-utils.h b/cmd/legacy-mtd-utils.h new file mode 100644 index 00000000000..ac441d5558a --- /dev/null +++ b/cmd/legacy-mtd-utils.h @@ -0,0 +1,12 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ + +#ifndef __LEGACY_MTD_UTILS_H +#define __LEGACY_MTD_UTILS_H + +int mtd_arg_off(const char *arg, int *idx, loff_t *off, loff_t *size, + loff_t *maxsize, int devtype, uint64_t chipsize); +int mtd_arg_off_size(int argc, char *const argv[], int *idx, loff_t *off, + loff_t *size, loff_t *maxsize, int devtype, + uint64_t chipsize); + +#endif /* LEGACY_MTD_UTILS_H */ diff --git a/cmd/nand.c b/cmd/nand.c index 24c9df89c14..5bda69e819b 100644 --- a/cmd/nand.c +++ b/cmd/nand.c @@ -30,6 +30,8 @@ #include <jffs2/jffs2.h> #include <nand.h> +#include "legacy-mtd-utils.h" + #if defined(CONFIG_CMD_MTDPARTS) /* partition handling routines */ @@ -18,6 +18,8 @@ #include <asm/io.h> #include <dm/device-internal.h> +#include "legacy-mtd-utils.h" + static struct spi_flash *flash; /* |
