summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/cmd_ubi.c73
1 files changed, 25 insertions, 48 deletions
diff --git a/common/cmd_ubi.c b/common/cmd_ubi.c
index 9c17d7120..02a2e55b5 100644
--- a/common/cmd_ubi.c
+++ b/common/cmd_ubi.c
@@ -4,7 +4,7 @@
* Copyright (C) 2008 Samsung Electronics
* Kyungmin Park <kyungmin.park@samsung.com>
*
- * Copyright 2008 Stefan Roese <sr@denx.de>, DENX Software Engineering
+ * Copyright 2008-2009 Stefan Roese <sr@denx.de>, DENX Software Engineering
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
@@ -34,9 +34,8 @@ static char buffer[80];
static int ubi_initialized;
struct selected_dev {
- char dev_name[32]; /* NAND/OneNAND etc */
char part_name[80];
- int type;
+ int selected;
int nr;
struct mtd_info *mtd_info;
};
@@ -448,19 +447,24 @@ static int do_ubi(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
}
if (strcmp(argv[1], "part") == 0) {
+ char mtd_dev[16];
+ struct mtd_device *dev;
+ struct part_info *part;
+ u8 pnum;
+
/* Print current partition */
if (argc == 2) {
- if (ubi_dev.type == DEV_TYPE_NONE) {
+ if (!ubi_dev.selected) {
printf("Error, no UBI device/partition selected!\n");
return 1;
}
- printf("%s Device %d: %s, partition %s\n", ubi_dev.dev_name,
+ printf("Device %d: %s, partition %s\n",
ubi_dev.nr, ubi_dev.mtd_info->name, ubi_dev.part_name);
return 0;
}
- if (argc < 4) {
+ if (argc < 3) {
cmd_usage(cmdtp);
return 1;
}
@@ -477,54 +481,27 @@ static int do_ubi(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
}
/*
- * Check for nor|nand|onenand selection
+ * Search the mtd device number where this partition
+ * is located
*/
-#if defined(CONFIG_CMD_NAND)
- if (strcmp(argv[2], "nand") == 0) {
- strcpy(ubi_dev.dev_name, "NAND");
- ubi_dev.type = DEV_TYPE_NAND;
- ubi_dev.mtd_info = &nand_info[ubi_dev.nr];
- }
-#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;
- }
-#endif
-#if defined(CONFIG_CMD_ONENAND)
- if (strcmp(argv[2], "onenand") == 0) {
- strcpy(ubi_dev.dev_name, "OneNAND");
- ubi_dev.type = DEV_TYPE_ONENAND;
- ubi_dev.mtd_info = &onenand_mtd;
+ if (find_dev_and_part(argv[2], &dev, &pnum, &part)) {
+ printf("Partition %s not found!\n", argv[2]);
+ return 1;
}
-#endif
-
- if (ubi_dev.type == DEV_TYPE_NONE) {
- printf("Error, no UBI device/partition selected!\n");
+ sprintf(mtd_dev, "%s%d", MTD_DEV_TYPE(dev->id->type), dev->id->num);
+ ubi_dev.mtd_info = get_mtd_device_nm(mtd_dev);
+ if (IS_ERR(ubi_dev.mtd_info)) {
+ printf("Partition %s not found on device %s!\n", argv[2], mtd_dev);
return 1;
}
- strcpy(ubi_dev.part_name, argv[3]);
+ ubi_dev.selected = 1;
+
+ strcpy(ubi_dev.part_name, argv[2]);
err = ubi_dev_scan(ubi_dev.mtd_info, ubi_dev.part_name);
if (err) {
printf("UBI init error %d\n", err);
- ubi_dev.type = DEV_TYPE_NONE;
+ ubi_dev.selected = 0;
return err;
}
@@ -533,7 +510,7 @@ static int do_ubi(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
return 0;
}
- if ((strcmp(argv[1], "part") != 0) && (ubi_dev.type == DEV_TYPE_NONE)) {
+ if ((strcmp(argv[1], "part") != 0) && (!ubi_dev.selected)) {
printf("Error, no UBI device/partition selected!\n");
return 1;
}
@@ -617,7 +594,7 @@ static int do_ubi(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
U_BOOT_CMD(ubi, 6, 1, do_ubi,
"ubi commands",
- "part [nand|nor|onenand] [part]"
+ "part [part]"
" - Show or set current partition\n"
"ubi info [l[ayout]]"
" - Display volume and ubi layout information\n"