diff options
| author | Rob Herring <rob.herring@calxeda.com> | 2012-08-23 11:31:48 +0000 | 
|---|---|---|
| committer | Tom Rini <trini@ti.com> | 2012-09-25 14:49:05 -0700 | 
| commit | 475c7970c18526adb406f8bc648c44255b300225 (patch) | |
| tree | 15c373899e482d0ce1b9cb44e0b67fdb32cc0f0e /common/cmd_disk.c | |
| parent | cfda5aeab89d73779e26f0d34cf10f64caa67431 (diff) | |
| download | olio-uboot-2014.01-475c7970c18526adb406f8bc648c44255b300225.tar.xz olio-uboot-2014.01-475c7970c18526adb406f8bc648c44255b300225.zip | |
cmd_disk: use common get_device_and_partition function
Signed-off-by: Rob Herring <rob.herring@calxeda.com>
Diffstat (limited to 'common/cmd_disk.c')
| -rw-r--r-- | common/cmd_disk.c | 77 | 
1 files changed, 19 insertions, 58 deletions
| diff --git a/common/cmd_disk.c b/common/cmd_disk.c index e73fc4e45..8df93444d 100644 --- a/common/cmd_disk.c +++ b/common/cmd_disk.c @@ -23,14 +23,16 @@   */  #include <common.h>  #include <command.h> +#include <part.h> +#if defined(CONFIG_CMD_IDE) || defined(CONFIG_CMD_SCSI) || \ +	defined(CONFIG_USB_STORAGE)  int common_diskboot(cmd_tbl_t *cmdtp, const char *intf, int argc,  		    char *const argv[])  { -	char *boot_device = NULL; -	char *ep; -	int dev, part = 0; -	ulong addr, cnt; +	int dev, part; +	ulong addr = CONFIG_SYS_LOAD_ADDR; +	ulong cnt;  	disk_partition_t info;  	image_header_t *hdr;  	block_dev_desc_t *dev_desc; @@ -40,72 +42,30 @@ int common_diskboot(cmd_tbl_t *cmdtp, const char *intf, int argc,  #endif  	bootstage_mark(BOOTSTAGE_ID_IDE_START); -	switch (argc) { -	case 1: -		addr = CONFIG_SYS_LOAD_ADDR; -		boot_device = getenv("bootdevice"); -		break; -	case 2: -		addr = simple_strtoul(argv[1], NULL, 16); -		boot_device = getenv("bootdevice"); -		break; -	case 3: -		addr = simple_strtoul(argv[1], NULL, 16); -		boot_device = argv[2]; -		break; -	default: +	if (argc > 3) {  		bootstage_error(BOOTSTAGE_ID_IDE_ADDR);  		return CMD_RET_USAGE;  	}  	bootstage_mark(BOOTSTAGE_ID_IDE_ADDR); -	if (!boot_device) { -		puts("\n** No boot device **\n"); -		bootstage_error(BOOTSTAGE_ID_IDE_BOOT_DEVICE); -		return 1; -	} -	bootstage_mark(BOOTSTAGE_ID_IDE_BOOT_DEVICE); +	if (argc > 1) +		addr = simple_strtoul(argv[1], NULL, 16); -	dev = simple_strtoul(boot_device, &ep, 16); +	bootstage_mark(BOOTSTAGE_ID_IDE_BOOT_DEVICE); -	dev_desc = get_dev(intf, dev); -	if (dev_desc->type == DEV_TYPE_UNKNOWN) { -		printf("\n** Device %d not available\n", dev); +	part = get_device_and_partition(intf, (argc == 3) ? argv[2] : NULL, +					&dev_desc, &info); +	if (part < 0) {  		bootstage_error(BOOTSTAGE_ID_IDE_TYPE);  		return 1;  	} -	bootstage_mark(BOOTSTAGE_ID_IDE_TYPE); -	if (*ep) { -		if (*ep != ':') { -			puts("\n** Invalid boot device, use `dev[:part]' **\n"); -			bootstage_error(BOOTSTAGE_ID_IDE_PART); -			return 1; -		} -		part = simple_strtoul(++ep, NULL, 16); -	} -	bootstage_mark(BOOTSTAGE_ID_IDE_PART); - -	if (get_partition_info(dev_desc, part, &info)) { -		bootstage_error(BOOTSTAGE_ID_IDE_PART_INFO); -		return 1; -	} -	bootstage_mark(BOOTSTAGE_ID_IDE_PART_INFO); - -	if ((strncmp((char *)info.type, BOOT_PART_TYPE, sizeof(info.type)) != 0) -	    && -	    (strncmp((char *)info.type, BOOT_PART_COMP, sizeof(info.type)) != 0) -	   ) { -		printf("\n** Invalid partition type \"%.32s\"" " (expect \"" -			BOOT_PART_TYPE "\")\n", -			info.type); -		bootstage_error(BOOTSTAGE_ID_IDE_PART_TYPE); -		return 1; -	} -	bootstage_mark(BOOTSTAGE_ID_IDE_PART_TYPE); +	dev = dev_desc->dev; +	bootstage_mark(BOOTSTAGE_ID_IDE_TYPE); -	printf("\nLoading from disk device %d, partition %d: " -	       "Name: %.32s  Type: %.32s\n", dev, part, info.name, info.type); +	printf("\nLoading from %s device %d, partition %d: " +	       "Name: %.32s  Type: %.32s\n", intf, dev, part, info.name, +	       info.type);  	debug("First Block: %ld,  # of blocks: %ld, Block Size: %ld\n",  	      info.start, info.size, info.blksz); @@ -181,3 +141,4 @@ int common_diskboot(cmd_tbl_t *cmdtp, const char *intf, int argc,  	return bootm_maybe_autostart(cmdtp, argv[0]);  } +#endif |