@ -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 typ e ;
int selec ted ;
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 "