diff options
Diffstat (limited to 'common/cmd_ubi.c')
| -rw-r--r-- | 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 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" |