[U-Boot] [PATCH v2] ubi: Remove flash selection parameter (nor|nand|onenand) from "ubi part"

Stefan Roese sr at denx.de
Fri Apr 24 20:24:19 CEST 2009


This patch removes the now unnecessary flash type parameter from the
"ubi part" command. Currently the user has to define the type of flash
he will be using UBI on. Example:

=> ubi part nor partition1

With this patch this type parameter is not needed anymore. The user can
now select the partition directly without the flash type paramter.
Example:

=> ubi part partition1

This breaks backward compatibility right now because of the change in the
command syntax. But UBI support is still quite fresh and the advantage of
this new command is syntax big enough for this change. Additionally the
code is much cleaner now.

Signed-off-by: Stefan Roese <sr at denx.de>
CC: Kyungmin Park <kyungmin.park at samsung.com>
---
v2:
- Remove test-only debug code
- s/spaces/tabs in one line

 common/cmd_ubi.c |   73 ++++++++++++++++++-----------------------------------
 1 files changed, 25 insertions(+), 48 deletions(-)

diff --git a/common/cmd_ubi.c b/common/cmd_ubi.c
index 9c17d71..02a2e55 100644
--- a/common/cmd_ubi.c
+++ b/common/cmd_ubi.c
@@ -4,7 +4,7 @@
  *  Copyright (C) 2008 Samsung Electronics
  *  Kyungmin Park <kyungmin.park at samsung.com>
  *
- * Copyright 2008 Stefan Roese <sr at denx.de>, DENX Software Engineering
+ * Copyright 2008-2009 Stefan Roese <sr at 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"
-- 
1.6.2.4



More information about the U-Boot mailing list