@ -480,6 +480,91 @@ static int do_mmc_list(cmd_tbl_t *cmdtp, int flag,
print_mmc_devices ( ' \n ' ) ;
return CMD_RET_SUCCESS ;
}
static int do_mmc_hwpartition ( cmd_tbl_t * cmdtp , int flag ,
int argc , char * const argv [ ] )
{
struct mmc * mmc ;
struct mmc_hwpart_conf pconf = { } ;
enum mmc_hwpart_conf_mode mode = MMC_HWPART_CONF_CHECK ;
int i , pidx ;
mmc = init_mmc_device ( curr_device , false ) ;
if ( ! mmc )
return CMD_RET_FAILURE ;
if ( argc < 1 )
return CMD_RET_USAGE ;
i = 1 ;
while ( i < argc ) {
if ( ! strcmp ( argv [ i ] , " userenh " ) ) {
if ( i + 2 > = argc )
return CMD_RET_USAGE ;
memset ( & pconf . user , 0 , sizeof ( pconf . user ) ) ;
pconf . user . enh_start =
simple_strtoul ( argv [ i + 1 ] , NULL , 10 ) ;
pconf . user . enh_size =
simple_strtoul ( argv [ i + 2 ] , NULL , 10 ) ;
i + = 3 ;
} else if ( ! strncmp ( argv [ i ] , " gp " , 2 ) & &
strlen ( argv [ i ] ) = = 3 & &
argv [ i ] [ 2 ] > = ' 1 ' & & argv [ i ] [ 2 ] < = ' 4 ' ) {
if ( i + 1 > = argc )
return CMD_RET_USAGE ;
pidx = argv [ i ] [ 2 ] - ' 1 ' ;
memset ( & pconf . gp_part [ pidx ] , 0 ,
sizeof ( pconf . gp_part [ pidx ] ) ) ;
pconf . gp_part [ pidx ] . size =
simple_strtoul ( argv [ i + 1 ] , NULL , 10 ) ;
i + = 2 ;
if ( i < argc & & ! strcmp ( argv [ i ] , " enh " ) ) {
pconf . gp_part [ pidx ] . enhanced = 1 ;
i + + ;
}
} else if ( ! strcmp ( argv [ i ] , " check " ) ) {
mode = MMC_HWPART_CONF_CHECK ;
i + + ;
} else if ( ! strcmp ( argv [ i ] , " set " ) ) {
mode = MMC_HWPART_CONF_SET ;
i + + ;
} else if ( ! strcmp ( argv [ i ] , " complete " ) ) {
mode = MMC_HWPART_CONF_COMPLETE ;
i + + ;
} else {
return CMD_RET_USAGE ;
}
}
puts ( " Partition configuration: \n " ) ;
if ( pconf . user . enh_size ) {
puts ( " \t User Enhanced Start: " ) ;
print_size ( ( ( u64 ) pconf . user . enh_start ) < < 9 , " \n " ) ;
puts ( " \t User Enhanced Size: " ) ;
print_size ( ( ( u64 ) pconf . user . enh_size ) < < 9 , " \n " ) ;
} else {
puts ( " \t No enhanced user data area \n " ) ;
}
for ( pidx = 0 ; pidx < 4 ; pidx + + ) {
if ( pconf . gp_part [ pidx ] . size ) {
printf ( " \t GP%i Capacity: " , pidx + 1 ) ;
print_size ( ( ( u64 ) pconf . gp_part [ pidx ] . size ) < < 9 ,
pconf . gp_part [ pidx ] . enhanced ?
" ENH \n " : " \n " ) ;
} else {
printf ( " \t No GP%i partition \n " , pidx + 1 ) ;
}
}
if ( ! mmc_hwpart_config ( mmc , & pconf , mode ) ) {
if ( mode = = MMC_HWPART_CONF_COMPLETE )
puts ( " Partitioning successful, "
" power-cycle to make effective \n " ) ;
return CMD_RET_SUCCESS ;
} else {
return CMD_RET_FAILURE ;
}
}
# ifdef CONFIG_SUPPORT_EMMC_BOOT
static int do_mmc_bootbus ( cmd_tbl_t * cmdtp , int flag ,
int argc , char * const argv [ ] )
@ -637,6 +722,7 @@ static cmd_tbl_t cmd_mmc[] = {
U_BOOT_CMD_MKENT ( part , 1 , 1 , do_mmc_part , " " , " " ) ,
U_BOOT_CMD_MKENT ( dev , 3 , 0 , do_mmc_dev , " " , " " ) ,
U_BOOT_CMD_MKENT ( list , 1 , 1 , do_mmc_list , " " , " " ) ,
U_BOOT_CMD_MKENT ( hwpartition , 17 , 0 , do_mmc_hwpartition , " " , " " ) ,
# ifdef CONFIG_SUPPORT_EMMC_BOOT
U_BOOT_CMD_MKENT ( bootbus , 5 , 0 , do_mmc_bootbus , " " , " " ) ,
U_BOOT_CMD_MKENT ( bootpart - resize , 4 , 0 , do_mmc_boot_resize , " " , " " ) ,
@ -676,7 +762,7 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
}
U_BOOT_CMD (
mmc , 7 , 1 , do_mmcops ,
mmc , 18 , 1 , do_mmcops ,
" MMC sub system " ,
" info - display info of the current MMC device \n "
" mmc read addr blk# cnt \n "
@ -686,6 +772,11 @@ U_BOOT_CMD(
" mmc part - lists available partition on current mmc device \n "
" mmc dev [dev] [part] - show or set current mmc device [partition] \n "
" mmc list - lists available devices \n "
" mmc hwpartition [args...] - does hardware partitioning \n "
" arguments (sizes in 512-byte blocks): \n "
" [userenh start cnt] - sets enhanced user data area \n "
" [gp1|gp2|gp3|gp4 cnt [enh]] - general purpose partition \n "
" [check|set|complete] - mode, complete set partitioning completed \n "
# ifdef CONFIG_SUPPORT_EMMC_BOOT
" mmc bootbus dev boot_bus_width reset_boot_bus_width boot_mode \n "
" - Set the BOOT_BUS_WIDTH field of the specified device \n "