diff options
Diffstat (limited to 'common')
| -rw-r--r-- | common/cmd_bootm.c | 9 | ||||
| -rw-r--r-- | common/cmd_dfu.c | 19 | ||||
| -rw-r--r-- | common/cmd_ext2.c | 5 | ||||
| -rw-r--r-- | common/cmd_ext4.c | 5 | ||||
| -rw-r--r-- | common/cmd_fat.c | 5 | ||||
| -rw-r--r-- | common/cmd_fs.c | 6 | ||||
| -rw-r--r-- | common/cmd_gpt.c | 4 | ||||
| -rw-r--r-- | common/cmd_mmc.c | 4 | ||||
| -rw-r--r-- | common/cmd_mtdparts.c | 63 | ||||
| -rw-r--r-- | common/cmd_pxe.c | 20 | ||||
| -rw-r--r-- | common/cmd_sf.c | 13 | ||||
| -rw-r--r-- | common/cmd_ubi.c | 79 | ||||
| -rw-r--r-- | common/cmd_usb_mass_storage.c | 1 | ||||
| -rw-r--r-- | common/image-fdt.c | 2 | ||||
| -rw-r--r-- | common/image-fit.c | 8 | ||||
| -rw-r--r-- | common/image.c | 8 | ||||
| -rw-r--r-- | common/spl/spl_mmc.c | 17 | 
17 files changed, 155 insertions, 113 deletions
| diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c index b07b0f48b..166b901d7 100644 --- a/common/cmd_bootm.c +++ b/common/cmd_bootm.c @@ -558,6 +558,7 @@ static ulong bootm_disable_interrupts(void)  #ifdef CONFIG_NETCONSOLE  	/* Stop the ethernet stack if NetConsole could have left it up */  	eth_halt(); +	eth_unregister(eth_get_dev());  #endif  #if defined(CONFIG_CMD_USB) @@ -799,8 +800,12 @@ int do_bootm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  	return do_bootm_states(cmdtp, flag, argc, argv, BOOTM_STATE_START |  		BOOTM_STATE_FINDOS | BOOTM_STATE_FINDOTHER | -		BOOTM_STATE_LOADOS | BOOTM_STATE_OS_PREP | -		BOOTM_STATE_OS_FAKE_GO | BOOTM_STATE_OS_GO, &images, 1); +		BOOTM_STATE_LOADOS | +#if defined(CONFIG_PPC) || defined(CONFIG_MIPS) +		BOOTM_STATE_OS_CMDLINE | +#endif +		BOOTM_STATE_OS_PREP | BOOTM_STATE_OS_FAKE_GO | +		BOOTM_STATE_OS_GO, &images, 1);  }  int bootm_maybe_autostart(cmd_tbl_t *cmdtp, const char *cmd) diff --git a/common/cmd_dfu.c b/common/cmd_dfu.c index 793c42212..7ce92cec8 100644 --- a/common/cmd_dfu.c +++ b/common/cmd_dfu.c @@ -9,34 +9,20 @@   */  #include <common.h> -#include <command.h> -#include <malloc.h>  #include <dfu.h> -#include <asm/errno.h>  #include <g_dnl.h>  static int do_dfu(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  { -	const char *str_env;  	char *s = "dfu";  	int ret, i = 0; -	char *env_bkp;  	if (argc < 3)  		return CMD_RET_USAGE; -	str_env = getenv("dfu_alt_info"); -	if (str_env == NULL) { -		printf("%s: \"dfu_alt_info\" env variable not defined!\n", -		       __func__); -		return CMD_RET_FAILURE; -	} - -	env_bkp = strdup(str_env); -	ret = dfu_config_entities(env_bkp, argv[1], -			    (int)simple_strtoul(argv[2], NULL, 10)); +	ret = dfu_init_env_entities(argv[1], simple_strtoul(argv[2], NULL, 10));  	if (ret) -		return CMD_RET_FAILURE; +		return ret;  	if (argc > 3 && strcmp(argv[3], "list") == 0) {  		dfu_show_entities(); @@ -67,7 +53,6 @@ exit:  	g_dnl_unregister();  done:  	dfu_free_entities(); -	free(env_bkp);  	if (dfu_reset())  		run_command("reset", 0); diff --git a/common/cmd_ext2.c b/common/cmd_ext2.c index 173191980..5a4bcc1a3 100644 --- a/common/cmd_ext2.c +++ b/common/cmd_ext2.c @@ -32,7 +32,7 @@ int do_ext2ls (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])   */  int do_ext2load (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  { -	return do_load(cmdtp, flag, argc, argv, FS_TYPE_EXT, 16); +	return do_load(cmdtp, flag, argc, argv, FS_TYPE_EXT);  }  U_BOOT_CMD( @@ -47,6 +47,5 @@ U_BOOT_CMD(  	"load binary file from a Ext2 filesystem",  	"<interface> <dev[:part]> [addr] [filename] [bytes]\n"  	"    - load binary file 'filename' from 'dev' on 'interface'\n" -	"      to address 'addr' from ext2 filesystem.\n" -	"      All numeric parameters are assumed to be hex." +	"      to address 'addr' from ext2 filesystem."  ); diff --git a/common/cmd_ext4.c b/common/cmd_ext4.c index 4a27cd97c..8289d25b0 100644 --- a/common/cmd_ext4.c +++ b/common/cmd_ext4.c @@ -45,7 +45,7 @@  int do_ext4_load(cmd_tbl_t *cmdtp, int flag, int argc,  						char *const argv[])  { -	return do_load(cmdtp, flag, argc, argv, FS_TYPE_EXT, 16); +	return do_load(cmdtp, flag, argc, argv, FS_TYPE_EXT);  }  int do_ext4_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) @@ -122,5 +122,4 @@ U_BOOT_CMD(ext4load, 6, 0, do_ext4_load,  	   "load binary file from a Ext4 filesystem",  	   "<interface> <dev[:part]> [addr] [filename] [bytes]\n"  	   "    - load binary file 'filename' from 'dev' on 'interface'\n" -	   "      to address 'addr' from ext4 filesystem.\n" -	   "      All numeric parameters are assumed to be hex."); +	   "      to address 'addr' from ext4 filesystem"); diff --git a/common/cmd_fat.c b/common/cmd_fat.c index f6d7affa0..a12d8fa09 100644 --- a/common/cmd_fat.c +++ b/common/cmd_fat.c @@ -19,7 +19,7 @@  int do_fat_fsload (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  { -	return do_load(cmdtp, flag, argc, argv, FS_TYPE_FAT, 16); +	return do_load(cmdtp, flag, argc, argv, FS_TYPE_FAT);  } @@ -35,8 +35,7 @@ U_BOOT_CMD(  	"      the load stops on end of file.\n"  	"      If either 'pos' or 'bytes' are not aligned to\n"  	"      ARCH_DMA_MINALIGN then a misaligned buffer warning will\n" -	"      be printed and performance will suffer for the load.\n" -	"      All numeric parameters are assumed to be hex." +	"      be printed and performance will suffer for the load."  );  static int do_fat_ls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) diff --git a/common/cmd_fs.c b/common/cmd_fs.c index a681d03d1..91a205ac1 100644 --- a/common/cmd_fs.c +++ b/common/cmd_fs.c @@ -22,7 +22,7 @@  int do_load_wrapper(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  { -	return do_load(cmdtp, flag, argc, argv, FS_TYPE_ANY, 0); +	return do_load(cmdtp, flag, argc, argv, FS_TYPE_ANY);  }  U_BOOT_CMD( @@ -34,9 +34,7 @@ U_BOOT_CMD(  	"      'bytes' gives the size to load in bytes.\n"  	"      If 'bytes' is 0 or omitted, the file is read until the end.\n"  	"      'pos' gives the file byte position to start reading from.\n" -	"      If 'pos' is 0 or omitted, the file is read from the start.\n" -	"      All numeric parameters are assumed to be decimal,\n" -	"      unless specified otherwise using a leading \"0x\"." +	"      If 'pos' is 0 or omitted, the file is read from the start."  );  int do_ls_wrapper(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) diff --git a/common/cmd_gpt.c b/common/cmd_gpt.c index 06767aa5e..a46f5cc34 100644 --- a/common/cmd_gpt.c +++ b/common/cmd_gpt.c @@ -161,7 +161,7 @@ static int set_gpt_info(block_dev_desc_t *dev_desc,  	/* allocate memory for partitions */  	parts = calloc(sizeof(disk_partition_t), p_count); -	/* retrive partions data from string */ +	/* retrieve partitions data from string */  	for (i = 0; i < p_count; i++) {  		tok = strsep(&s, ";"); @@ -316,7 +316,7 @@ static int do_gpt(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  U_BOOT_CMD(gpt, CONFIG_SYS_MAXARGS, 1, do_gpt,  	"GUID Partition Table", -	"<command> <interface> <dev> <partions_list>\n" +	"<command> <interface> <dev> <partitions_list>\n"  	" - GUID partition table restoration\n"  	" Restore GPT information on a device connected\n"  	" to interface\n" diff --git a/common/cmd_mmc.c b/common/cmd_mmc.c index 1cdeb443f..67a94a746 100644 --- a/common/cmd_mmc.c +++ b/common/cmd_mmc.c @@ -260,7 +260,7 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  				if (!ret)  					mmc->part_num = part; -				printf("switch to partions #%d, %s\n", +				printf("switch to partitions #%d, %s\n",  						part, (!ret) ? "OK" : "ERROR");  			}  		} @@ -421,7 +421,7 @@ U_BOOT_CMD(  	"mmc close <dev> <boot_partition>\n"  	" - Enable boot_part for booting and disable access to boot_part\n"  	"mmc bootpart <device num> <boot part size MB> <RPMB part size MB>\n" -	" - change sizes of boot and RPMB partions of specified device\n" +	" - change sizes of boot and RPMB partitions of specified device\n"  #endif  	);  #endif /* !CONFIG_GENERIC_MMC */ diff --git a/common/cmd_mtdparts.c b/common/cmd_mtdparts.c index 3023479d1..40b6333eb 100644 --- a/common/cmd_mtdparts.c +++ b/common/cmd_mtdparts.c @@ -93,13 +93,13 @@  DECLARE_GLOBAL_DATA_PTR;  /* special size referring to all the remaining space in a partition */ -#define SIZE_REMAINING		0xFFFFFFFF +#define SIZE_REMAINING		(~0llu)  /* special offset value, it is used when not provided by user   *   * this value is used temporarily during parsing, later such offests   * are recalculated */ -#define OFFSET_NOT_SPECIFIED	0xFFFFFFFF +#define OFFSET_NOT_SPECIFIED	(~0llu)  /* minimum partition size */  #define MIN_PART_SIZE		4096 @@ -160,9 +160,9 @@ static int device_del(struct mtd_device *dev);   * @param retptr output pointer to next char after parse completes (output)   * @return resulting unsigned int   */ -static unsigned long memsize_parse (const char *const ptr, const char **retptr) +static u64 memsize_parse (const char *const ptr, const char **retptr)  { -	unsigned long ret = simple_strtoul(ptr, (char **)retptr, 0); +	u64 ret = simple_strtoull(ptr, (char **)retptr, 0);  	switch (**retptr) {  		case 'G': @@ -193,20 +193,20 @@ static unsigned long memsize_parse (const char *const ptr, const char **retptr)   * @param buf output buffer   * @param size size to be converted to string   */ -static void memsize_format(char *buf, u32 size) +static void memsize_format(char *buf, u64 size)  {  #define SIZE_GB ((u32)1024*1024*1024)  #define SIZE_MB ((u32)1024*1024)  #define SIZE_KB ((u32)1024)  	if ((size % SIZE_GB) == 0) -		sprintf(buf, "%ug", size/SIZE_GB); +		sprintf(buf, "%llug", size/SIZE_GB);  	else if ((size % SIZE_MB) == 0) -		sprintf(buf, "%um", size/SIZE_MB); +		sprintf(buf, "%llum", size/SIZE_MB);  	else if (size % SIZE_KB == 0) -		sprintf(buf, "%uk", size/SIZE_KB); +		sprintf(buf, "%lluk", size/SIZE_KB);  	else -		sprintf(buf, "%u", size); +		sprintf(buf, "%llu", size);  }  /** @@ -310,6 +310,7 @@ static int part_validate_eraseblock(struct mtdids *id, struct part_info *part)  	struct mtd_info *mtd = NULL;  	int i, j;  	ulong start; +	u64 offset, size;  	if (get_mtd_info(id->type, id->num, &mtd))  		return 1; @@ -321,14 +322,16 @@ static int part_validate_eraseblock(struct mtdids *id, struct part_info *part)  		 * Only one eraseregion (NAND, OneNAND or uniform NOR),  		 * checking for alignment is easy here  		 */ -		if ((unsigned long)part->offset % mtd->erasesize) { +		offset = part->offset; +		if (do_div(offset, mtd->erasesize)) {  			printf("%s%d: partition (%s) start offset"  			       "alignment incorrect\n",  			       MTD_DEV_TYPE(id->type), id->num, part->name);  			return 1;  		} -		if (part->size % mtd->erasesize) { +		size = part->size; +		if (do_div(size, mtd->erasesize)) {  			printf("%s%d: partition (%s) size alignment incorrect\n",  			       MTD_DEV_TYPE(id->type), id->num, part->name);  			return 1; @@ -381,10 +384,9 @@ static int part_validate_eraseblock(struct mtdids *id, struct part_info *part)  /** - * Performs sanity check for supplied partition. Offset and size are verified - * to be within valid range. Partition type is checked and either - * parts_validate_nor() or parts_validate_nand() is called with the argument - * of part. + * Performs sanity check for supplied partition. Offset and size are + * verified to be within valid range. Partition type is checked and + * part_validate_eraseblock() is called with the argument of part.   *   * @param id of the parent device   * @param part partition to validate @@ -396,7 +398,7 @@ static int part_validate(struct mtdids *id, struct part_info *part)  		part->size = id->size - part->offset;  	if (part->offset > id->size) { -		printf("%s: offset %08x beyond flash size %08x\n", +		printf("%s: offset %08llx beyond flash size %08llx\n",  				id->mtd_id, part->offset, id->size);  		return 1;  	} @@ -420,7 +422,7 @@ static int part_validate(struct mtdids *id, struct part_info *part)  }  /** - * Delete selected partition from the partion list of the specified device. + * Delete selected partition from the partition list of the specified device.   *   * @param dev device to delete partition from   * @param part partition to delete @@ -579,8 +581,8 @@ static int part_add(struct mtd_device *dev, struct part_info *part)  static int part_parse(const char *const partdef, const char **ret, struct part_info **retpart)  {  	struct part_info *part; -	unsigned long size; -	unsigned long offset; +	u64 size; +	u64 offset;  	const char *name;  	int name_len;  	unsigned int mask_flags; @@ -599,7 +601,7 @@ static int part_parse(const char *const partdef, const char **ret, struct part_i  	} else {  		size = memsize_parse(p, &p);  		if (size < MIN_PART_SIZE) { -			printf("partition size too small (%lx)\n", size); +			printf("partition size too small (%llx)\n", size);  			return 1;  		}  	} @@ -671,14 +673,14 @@ static int part_parse(const char *const partdef, const char **ret, struct part_i  		part->auto_name = 0;  	} else {  		/* auto generated name in form of size@offset */ -		sprintf(part->name, "0x%08lx@0x%08lx", size, offset); +		sprintf(part->name, "0x%08llx@0x%08llx", size, offset);  		part->auto_name = 1;  	}  	part->name[name_len - 1] = '\0';  	INIT_LIST_HEAD(&part->link); -	debug("+ partition: name %-22s size 0x%08x offset 0x%08x mask flags %d\n", +	debug("+ partition: name %-22s size 0x%08llx offset 0x%08llx mask flags %d\n",  			part->name, part->size,  			part->offset, part->mask_flags); @@ -694,7 +696,7 @@ static int part_parse(const char *const partdef, const char **ret, struct part_i   * @param size a pointer to the size of the mtd device (output)   * @return 0 if device is valid, 1 otherwise   */ -static int mtd_device_validate(u8 type, u8 num, u32 *size) +static int mtd_device_validate(u8 type, u8 num, u64 *size)  {  	struct mtd_info *mtd = NULL; @@ -827,7 +829,7 @@ static int device_parse(const char *const mtd_dev, const char **ret, struct mtd_  	LIST_HEAD(tmp_list);  	struct list_head *entry, *n;  	u16 num_parts; -	u32 offset; +	u64 offset;  	int err = 1;  	debug("===device_parse===\n"); @@ -1072,7 +1074,8 @@ static int generate_mtdparts(char *buf, u32 buflen)  	struct part_info *part, *prev_part;  	char *p = buf;  	char tmpbuf[32]; -	u32 size, offset, len, part_cnt; +	u64 size, offset; +	u32 len, part_cnt;  	u32 maxlen = buflen - 1;  	debug("--- generate_mtdparts ---\n"); @@ -1271,7 +1274,7 @@ static void print_partition_table(void)  		list_for_each(pentry, &dev->parts) {  			part = list_entry(pentry, struct part_info, link); -			printf("%2d: %-20s0x%08x\t0x%08x\t%d\n", +			printf("%2d: %-20s0x%08llx\t0x%08llx\t%d\n",  					part_num, part->name, part->size,  					part->offset, part->mask_flags);  #endif /* defined(CONFIG_CMD_MTDPARTS_SHOW_NET_SIZES) */ @@ -1298,7 +1301,7 @@ static void list_partitions(void)  	if (current_mtd_dev) {  		part = mtd_part_info(current_mtd_dev, current_mtd_partnum);  		if (part) { -			printf("\nactive partition: %s%d,%d - (%s) 0x%08x @ 0x%08x\n", +			printf("\nactive partition: %s%d,%d - (%s) 0x%08llx @ 0x%08llx\n",  					MTD_DEV_TYPE(current_mtd_dev->id->type),  					current_mtd_dev->id->num, current_mtd_partnum,  					part->name, part->size, part->offset); @@ -1398,7 +1401,7 @@ static int delete_partition(const char *id)  	if (find_dev_and_part(id, &dev, &pnum, &part) == 0) { -		debug("delete_partition: device = %s%d, partition %d = (%s) 0x%08x@0x%08x\n", +		debug("delete_partition: device = %s%d, partition %d = (%s) 0x%08llx@0x%08llx\n",  				MTD_DEV_TYPE(dev->id->type), dev->id->num, pnum,  				part->name, part->size, part->offset); @@ -1590,7 +1593,7 @@ static int parse_mtdids(const char *const ids)  	struct list_head *entry, *n;  	struct mtdids *id_tmp;  	u8 type, num; -	u32 size; +	u64 size;  	int ret = 1;  	debug("\n---parse_mtdids---\nmtdids = %s\n\n", ids); @@ -1664,7 +1667,7 @@ static int parse_mtdids(const char *const ids)  		id->mtd_id[mtd_id_len - 1] = '\0';  		INIT_LIST_HEAD(&id->link); -		debug("+ id %s%d\t%16d bytes\t%s\n", +		debug("+ id %s%d\t%16lld bytes\t%s\n",  				MTD_DEV_TYPE(id->type), id->num,  				id->size, id->mtd_id); diff --git a/common/cmd_pxe.c b/common/cmd_pxe.c index a2fb50ab9..c5f4a221b 100644 --- a/common/cmd_pxe.c +++ b/common/cmd_pxe.c @@ -572,7 +572,7 @@ static int label_localboot(struct pxe_label *label)   * If the label specifies an 'append' line, its contents will overwrite that   * of the 'bootargs' environment variable.   */ -static int label_boot(struct pxe_label *label) +static int label_boot(cmd_tbl_t *cmdtp, struct pxe_label *label)  {  	char *bootm_argv[] = { "bootm", NULL, NULL, NULL, NULL };  	char initrd_str[22]; @@ -684,11 +684,11 @@ static int label_boot(struct pxe_label *label)  	if (bootm_argv[3])  		bootm_argc = 4; -	do_bootm(NULL, 0, bootm_argc, bootm_argv); +	do_bootm(cmdtp, 0, bootm_argc, bootm_argv);  #ifdef CONFIG_CMD_BOOTZ  	/* Try booting a zImage if do_bootm returns */ -	do_bootz(NULL, 0, bootm_argc, bootm_argv); +	do_bootz(cmdtp, 0, bootm_argc, bootm_argv);  #endif  	return 1;  } @@ -1355,7 +1355,7 @@ static struct menu *pxe_menu_to_menu(struct pxe_menu *cfg)  /*   * Try to boot any labels we have yet to attempt to boot.   */ -static void boot_unattempted_labels(struct pxe_menu *cfg) +static void boot_unattempted_labels(cmd_tbl_t *cmdtp, struct pxe_menu *cfg)  {  	struct list_head *pos;  	struct pxe_label *label; @@ -1364,7 +1364,7 @@ static void boot_unattempted_labels(struct pxe_menu *cfg)  		label = list_entry(pos, struct pxe_label, list);  		if (!label->attempted) -			label_boot(label); +			label_boot(cmdtp, label);  	}  } @@ -1380,7 +1380,7 @@ static void boot_unattempted_labels(struct pxe_menu *cfg)   * If this function returns, there weren't any labels that successfully   * booted, or the user interrupted the menu selection via ctrl+c.   */ -static void handle_pxe_menu(struct pxe_menu *cfg) +static void handle_pxe_menu(cmd_tbl_t *cmdtp, struct pxe_menu *cfg)  {  	void *choice;  	struct menu *m; @@ -1406,14 +1406,14 @@ static void handle_pxe_menu(struct pxe_menu *cfg)  	 */  	if (err == 1) { -		err = label_boot(choice); +		err = label_boot(cmdtp, choice);  		if (!err)  			return;  	} else if (err != -ENOENT) {  		return;  	} -	boot_unattempted_labels(cfg); +	boot_unattempted_labels(cmdtp, cfg);  }  /* @@ -1453,7 +1453,7 @@ do_pxe_boot(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  		return 1;  	} -	handle_pxe_menu(cfg); +	handle_pxe_menu(cmdtp, cfg);  	destroy_pxe_menu(cfg); @@ -1559,7 +1559,7 @@ int do_sysboot(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  	if (prompt)  		cfg->prompt = 1; -	handle_pxe_menu(cfg); +	handle_pxe_menu(cmdtp, cfg);  	destroy_pxe_menu(cfg); diff --git a/common/cmd_sf.c b/common/cmd_sf.c index 4af0f0af2..3f60979ae 100644 --- a/common/cmd_sf.c +++ b/common/cmd_sf.c @@ -152,8 +152,10 @@ static const char *spi_flash_update_block(struct spi_flash *flash, u32 offset,  {  	debug("offset=%#x, sector_size=%#x, len=%#zx\n",  	      offset, flash->sector_size, len); -	if (spi_flash_read(flash, offset, len, cmp_buf)) +	/* Read the entire sector so to allow for rewriting */ +	if (spi_flash_read(flash, offset, flash->sector_size, cmp_buf))  		return "read"; +	/* Compare only what is meaningful (len) */  	if (memcmp(cmp_buf, buf, len) == 0) {  		debug("Skip region %x size %zx: no change\n",  		      offset, len); @@ -163,8 +165,17 @@ static const char *spi_flash_update_block(struct spi_flash *flash, u32 offset,  	/* Erase the entire sector */  	if (spi_flash_erase(flash, offset, flash->sector_size))  		return "erase"; +	/* Write the initial part of the block from the source */  	if (spi_flash_write(flash, offset, len, buf))  		return "write"; +	/* If it's a partial sector, rewrite the existing part */ +	if (len != flash->sector_size) { +		/* Rewrite the original data to the end of the sector */ +		if (spi_flash_write(flash, offset + len, +				    flash->sector_size - len, &cmp_buf[len])) +			return "write"; +	} +  	return NULL;  } diff --git a/common/cmd_ubi.c b/common/cmd_ubi.c index 5ba4feb48..122ba7e17 100644 --- a/common/cmd_ubi.c +++ b/common/cmd_ubi.c @@ -167,7 +167,7 @@ bad:  	return err;  } -static int ubi_create_vol(char *volume, int size, int dynamic) +static int ubi_create_vol(char *volume, int64_t size, int dynamic)  {  	struct ubi_mkvol_req req;  	int err; @@ -191,7 +191,7 @@ static int ubi_create_vol(char *volume, int size, int dynamic)  		printf("verify_mkvol_req failed %d\n", err);  		return err;  	} -	printf("Creating %s volume %s of size %d\n", +	printf("Creating %s volume %s of size %lld\n",  		dynamic ? "dynamic" : "static", volume, size);  	/* Call real ubi create volume */  	return ubi_create_volume(ubi, &req); @@ -266,28 +266,15 @@ out_err:  	return err;  } -int ubi_volume_write(char *volume, void *buf, size_t size) +int ubi_volume_continue_write(char *volume, void *buf, size_t size)  {  	int err = 1; -	int rsvd_bytes = 0;  	struct ubi_volume *vol;  	vol = ubi_find_volume(volume);  	if (vol == NULL)  		return ENODEV; -	rsvd_bytes = vol->reserved_pebs * (ubi->leb_size - vol->data_pad); -	if (size < 0 || size > rsvd_bytes) { -		printf("size > volume size! Aborting!\n"); -		return EINVAL; -	} - -	err = ubi_start_update(ubi, vol, size); -	if (err < 0) { -		printf("Cannot start volume update\n"); -		return -err; -	} -  	err = ubi_more_update_data(ubi, vol, buf, size);  	if (err < 0) {  		printf("Couldnt or partially wrote data\n"); @@ -314,6 +301,37 @@ int ubi_volume_write(char *volume, void *buf, size_t size)  	return 0;  } +int ubi_volume_begin_write(char *volume, void *buf, size_t size, +	size_t full_size) +{ +	int err = 1; +	int rsvd_bytes = 0; +	struct ubi_volume *vol; + +	vol = ubi_find_volume(volume); +	if (vol == NULL) +		return ENODEV; + +	rsvd_bytes = vol->reserved_pebs * (ubi->leb_size - vol->data_pad); +	if (size < 0 || size > rsvd_bytes) { +		printf("size > volume size! Aborting!\n"); +		return EINVAL; +	} + +	err = ubi_start_update(ubi, vol, full_size); +	if (err < 0) { +		printf("Cannot start volume update\n"); +		return -err; +	} + +	return ubi_volume_continue_write(volume, buf, size); +} + +int ubi_volume_write(char *volume, void *buf, size_t size) +{ +	return ubi_volume_begin_write(volume, buf, size, size); +} +  int ubi_volume_read(char *volume, char *buf, size_t size)  {  	int err, lnum, off, len, tbuf_size; @@ -498,7 +516,7 @@ int ubi_part(char *part_name, const char *vid_header_offset)  static int do_ubi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  { -	size_t size = 0; +	int64_t size = 0;  	ulong addr = 0;  	if (argc < 2) @@ -558,13 +576,13 @@ static int do_ubi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  		}  		/* E.g., create volume size */  		if (argc == 4) { -			size = simple_strtoul(argv[3], NULL, 16); +			size = simple_strtoull(argv[3], NULL, 16);  			argc--;  		}  		/* Use maximum available size */  		if (!size) { -			size = ubi->avail_pebs * ubi->leb_size; -			printf("No size specified -> Using max size (%u)\n", size); +			size = (int64_t)ubi->avail_pebs * ubi->leb_size; +			printf("No size specified -> Using max size (%lld)\n", size);  		}  		/* E.g., create volume */  		if (argc == 3) @@ -588,9 +606,22 @@ static int do_ubi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  		addr = simple_strtoul(argv[2], NULL, 16);  		size = simple_strtoul(argv[4], NULL, 16); -		ret = ubi_volume_write(argv[3], (void *)addr, size); +		if (strlen(argv[1]) == 10 && +		    strncmp(argv[1] + 5, ".part", 5) == 0) { +			if (argc < 6) { +				ret = ubi_volume_continue_write(argv[3], +						(void *)addr, size); +			} else { +				size_t full_size; +				full_size = simple_strtoul(argv[5], NULL, 16); +				ret = ubi_volume_begin_write(argv[3], +						(void *)addr, size, full_size); +			} +		} else { +			ret = ubi_volume_write(argv[3], (void *)addr, size); +		}  		if (!ret) { -			printf("%d bytes written to volume %s\n", size, +			printf("%lld bytes written to volume %s\n", size,  			       argv[3]);  		} @@ -613,7 +644,7 @@ static int do_ubi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  		}  		if (argc == 3) { -			printf("Read %d bytes from volume %s to %lx\n", size, +			printf("Read %lld bytes from volume %s to %lx\n", size,  			       argv[3], addr);  			return ubi_volume_read(argv[3], (char *)addr, size); @@ -636,6 +667,8 @@ U_BOOT_CMD(  		" - create volume name with size\n"  	"ubi write[vol] address volume size"  		" - Write volume from address with size\n" +	"ubi write.part address volume size [fullsize]\n" +		" - Write part of a volume from address\n"  	"ubi read[vol] address volume [size]"  		" - Read volume to address with size\n"  	"ubi remove[vol] volume" diff --git a/common/cmd_usb_mass_storage.c b/common/cmd_usb_mass_storage.c index 33a471500..ccf719594 100644 --- a/common/cmd_usb_mass_storage.c +++ b/common/cmd_usb_mass_storage.c @@ -5,7 +5,6 @@   * SPDX-License-Identifier:	GPL-2.0+   */ -#include <errno.h>  #include <common.h>  #include <command.h>  #include <g_dnl.h> diff --git a/common/image-fdt.c b/common/image-fdt.c index 2e22cca54..6f9ce7d37 100644 --- a/common/image-fdt.c +++ b/common/image-fdt.c @@ -55,7 +55,7 @@ static const image_header_t *image_get_fdt(ulong fdt_addr)  		fdt_error("uImage is compressed");  		return NULL;  	} -	if (fdt_check_header((char *)image_get_data(fdt_hdr)) != 0) { +	if (fdt_check_header((void *)image_get_data(fdt_hdr)) != 0) {  		fdt_error("uImage data is not a fdt");  		return NULL;  	} diff --git a/common/image-fit.c b/common/image-fit.c index 199b4ed16..cf4b67e3e 100644 --- a/common/image-fit.c +++ b/common/image-fit.c @@ -58,7 +58,7 @@ static int fit_parse_spec(const char *spec, char sepc, ulong addr_curr,   * @conf_name double pointer to a char, will hold pointer to a configuration   * unit name   * - * fit_parse_conf() expects configuration spec in the for of [<addr>]#<conf>, + * fit_parse_conf() expects configuration spec in the form of [<addr>]#<conf>,   * where <addr> is a FIT image address that contains configuration   * with a <conf> unit name.   * @@ -84,7 +84,7 @@ int fit_parse_conf(const char *spec, ulong addr_curr,   * subimage   * @image_name: double pointer to a char, will hold pointer to a subimage name   * - * fit_parse_subimage() expects subimage spec in the for of + * fit_parse_subimage() expects subimage spec in the form of   * [<addr>]:<subimage>, where <addr> is a FIT image address that contains   * subimage with a <subimg> unit name.   * @@ -1331,7 +1331,7 @@ int fit_conf_find_compat(const void *fit, const void *fdt)   *   * When NULL is provided in second argument fit_conf_get_node() will search   * for a default configuration node instead. Default configuration node unit - * name is retrived from FIT_DEFAULT_PROP property of the '/configurations' + * name is retrieved from FIT_DEFAULT_PROP property of the '/configurations'   * node.   *   * returns: @@ -1596,7 +1596,7 @@ int fit_image_load(bootm_headers_t *images, const char *prop_name, ulong addr,  	len = (ulong)size;  	/* verify that image data is a proper FDT blob */ -	if (image_type == IH_TYPE_FLATDT && fdt_check_header((char *)buf)) { +	if (image_type == IH_TYPE_FLATDT && fdt_check_header(buf)) {  		puts("Subimage data is not a FDT");  		return -ENOEXEC;  	} diff --git a/common/image.c b/common/image.c index 2c88091e6..b0ae58ff3 100644 --- a/common/image.c +++ b/common/image.c @@ -652,17 +652,13 @@ int genimg_get_format(const void *img_addr)  {  	ulong format = IMAGE_FORMAT_INVALID;  	const image_header_t *hdr; -#if defined(CONFIG_FIT) || defined(CONFIG_OF_LIBFDT) -	char *fit_hdr; -#endif  	hdr = (const image_header_t *)img_addr;  	if (image_check_magic(hdr))  		format = IMAGE_FORMAT_LEGACY;  #if defined(CONFIG_FIT) || defined(CONFIG_OF_LIBFDT)  	else { -		fit_hdr = (char *)img_addr; -		if (fdt_check_header(fit_hdr) == 0) +		if (fdt_check_header(img_addr) == 0)  			format = IMAGE_FORMAT_FIT;  	}  #endif @@ -965,7 +961,7 @@ int boot_get_ramdisk(int argc, char * const argv[], bootm_headers_t *images,   * @initrd_end: pointer to a ulong variable, will hold final init ramdisk   *      end address (after possible relocation)   * - * boot_ramdisk_high() takes a relocation hint from "initrd_high" environement + * boot_ramdisk_high() takes a relocation hint from "initrd_high" environment   * variable and if requested ramdisk data is moved to a specified location.   *   * Initrd_start and initrd_end are set to final (after relocation) ramdisk diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c index f27b4c277..fc2f2260f 100644 --- a/common/spl/spl_mmc.c +++ b/common/spl/spl_mmc.c @@ -9,7 +9,6 @@  #include <common.h>  #include <spl.h>  #include <asm/u-boot.h> -#include <asm/utils.h>  #include <mmc.h>  #include <fat.h>  #include <version.h> @@ -45,8 +44,10 @@ static int mmc_load_image_raw(struct mmc *mmc, unsigned long sector)  					(void *)spl_image.load_addr);  end: +#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT  	if (err == 0)  		printf("spl: mmc blk read err - %lu\n", err); +#endif  	return (err == 0);  } @@ -58,7 +59,9 @@ static int mmc_load_image_raw_os(struct mmc *mmc)  				       CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR,  				       CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTORS,  				       (void *)CONFIG_SYS_SPL_ARGS_ADDR)) { +#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT  		printf("mmc args blk read error\n"); +#endif  		return -1;  	} @@ -84,9 +87,11 @@ static int mmc_load_image_fat(struct mmc *mmc, const char *filename)  	err = file_fat_read(filename, (u8 *)spl_image.load_addr, 0);  end: +#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT  	if (err <= 0)  		printf("spl: error reading image %s, err - %d\n",  		       filename, err); +#endif  	return (err <= 0);  } @@ -99,8 +104,10 @@ static int mmc_load_image_fat_os(struct mmc *mmc)  	err = file_fat_read(CONFIG_SPL_FAT_LOAD_ARGS_NAME,  			    (void *)CONFIG_SYS_SPL_ARGS_ADDR, 0);  	if (err <= 0) { +#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT  		printf("spl: error reading image %s, err - %d\n",  		       CONFIG_SPL_FAT_LOAD_ARGS_NAME, err); +#endif  		return -1;  	} @@ -120,13 +127,17 @@ void spl_mmc_load_image(void)  	/* We register only one device. So, the dev id is always 0 */  	mmc = find_mmc_device(0);  	if (!mmc) { +#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT  		puts("spl: mmc device not found!!\n"); +#endif  		hang();  	}  	err = mmc_init(mmc);  	if (err) { +#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT  		printf("spl: mmc init failed: err - %d\n", err); +#endif  		hang();  	} @@ -145,7 +156,9 @@ void spl_mmc_load_image(void)  		err = fat_register_device(&mmc->block_dev,  					  CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION);  		if (err) { +#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT  			printf("spl: fat register err - %d\n", err); +#endif  			hang();  		} @@ -155,7 +168,9 @@ void spl_mmc_load_image(void)  		err = mmc_load_image_fat(mmc, CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME);  #endif  	} else { +#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT  		puts("spl: wrong MMC boot mode\n"); +#endif  		hang();  	} |