UBI/cfi-mtd: Fix mtd name for multiple chips
On platforms with multiple NOR chips, currently only the first one
can be selected using the "ubi part" command. This patch fixes this
problem by using different names for the NOR "mtd devices".
It also changes the name of the NOR MTD device from "cfi-mtd" to
"norX" (X indexing the device numer) to better match the mtdparts
defaults.
Signed-off-by: Stefan Roese <sr@denx.de>
Signed-off-by: Andreas Huber <andreas.huber@keymile.com>
diff --git a/common/cmd_ubi.c b/common/cmd_ubi.c
index b99fd58..9c17d71 100644
--- a/common/cmd_ubi.c
+++ b/common/cmd_ubi.c
@@ -404,9 +404,6 @@
u8 pnum;
int err;
- if (mtdparts_init() != 0)
- return 1;
-
if (find_dev_and_part(ubidev, &dev, &pnum, &part) != 0)
return 1;
@@ -445,6 +442,11 @@
return 1;
}
+ if (mtdparts_init() != 0) {
+ printf("Error initializing mtdparts!\n");
+ return 1;
+ }
+
if (strcmp(argv[1], "part") == 0) {
/* Print current partition */
if (argc == 2) {
@@ -475,7 +477,7 @@
}
/*
- * Check for nand|onenand selection
+ * Check for nor|nand|onenand selection
*/
#if defined(CONFIG_CMD_NAND)
if (strcmp(argv[2], "nand") == 0) {
@@ -486,9 +488,23 @@
#endif
#if defined(CONFIG_FLASH_CFI_MTD)
if (strcmp(argv[2], "nor") == 0) {
+ char mtd_dev[16];
+ struct mtd_device *dev;
+ struct part_info *part;
+ u8 pnum;
+
+ /*
+ * Search the mtd device number where this partition
+ * is located
+ */
+ if (find_dev_and_part(argv[3], &dev, &pnum, &part)) {
+ printf("Partition %s not found!\n", argv[3]);
+ return 1;
+ }
+ sprintf(mtd_dev, "nor%d", dev->id->num);
+ ubi_dev.mtd_info = get_mtd_device_nm(mtd_dev);
strcpy(ubi_dev.dev_name, "NOR");
ubi_dev.type = DEV_TYPE_NOR;
- ubi_dev.mtd_info = get_mtd_device_nm(CFI_MTD_DEV_NAME);
}
#endif
#if defined(CONFIG_CMD_ONENAND)