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 @@ static int ubi_dev_scan(struct mtd_info *info, char *ubidev) 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 @@ static int do_ubi(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) 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 @@ static int do_ubi(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) } /* - * 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 @@ static int do_ubi(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) #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) diff --git a/drivers/mtd/cfi_mtd.c b/drivers/mtd/cfi_mtd.c index cf82d92..9ac1c86 100644 --- a/drivers/mtd/cfi_mtd.c +++ b/drivers/mtd/cfi_mtd.c @@ -32,6 +32,7 @@ extern flash_info_t flash_info[]; static struct mtd_info cfi_mtd_info[CONFIG_SYS_MAX_FLASH_BANKS]; +static char cfi_mtd_names[CONFIG_SYS_MAX_FLASH_BANKS][16]; static int cfi_mtd_erase(struct mtd_info *mtd, struct erase_info *instr) { @@ -180,7 +181,8 @@ int cfi_mtd_init(void) if (error) continue; - mtd->name = CFI_MTD_DEV_NAME; + sprintf(cfi_mtd_names[i], "nor%d", i); + mtd->name = cfi_mtd_names[i]; mtd->type = MTD_NORFLASH; mtd->flags = MTD_CAP_NORFLASH; mtd->size = fi->size; diff --git a/include/flash.h b/include/flash.h index 8b8979e..b016162 100644 --- a/include/flash.h +++ b/include/flash.h @@ -87,8 +87,6 @@ typedef unsigned long flash_sect_t; /* convert between bit value and numeric value */ #define CFI_FLASH_SHIFT_WIDTH 3 -/* cfi-mtd device name */ -#define CFI_MTD_DEV_NAME "cfi-mtd" /* Prototypes */ extern unsigned long flash_init (void);