Skip to content
Snippets Groups Projects
Commit c203ef5d authored by Andreas Huber's avatar Andreas Huber Committed by Wolfgang Denk
Browse files

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: default avatarStefan Roese <sr@denx.de>
Signed-off-by: default avatarAndreas Huber <andreas.huber@keymile.com>
parent 6b6bb02f
No related branches found
No related tags found
No related merge requests found
......@@ -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)
......
......@@ -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;
......
......@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment