[U-Boot] [PATCH v4] dfu, nand, ubi: add partubi alt settings for updating ubi partition

Scott Wood scottwood at freescale.com
Wed Jul 24 01:22:37 CEST 2013


On 07/18/2013 11:32:14 PM, Heiko Schocher wrote:
> +static int dfu_flush_medium_nand(struct dfu_entity *dfu)
> +{
> +	int ret = 0;
> +
> +	/* in case of ubi partition, erase rest of the partition */
> +	if (dfu->data.nand.ubi) {
> +		nand_info_t *nand;
> +		nand_erase_options_t opts;
> +
> +		if (nand_curr_device < 0 ||
> +		    nand_curr_device >= CONFIG_SYS_MAX_NAND_DEVICE ||
> +		    !nand_info[nand_curr_device].name) {
> +			printf("%s: invalid nand device\n", __func__);
> +			return -1;
> +		}
> +
> +		nand = &nand_info[nand_curr_device];
> +
> +		memset(&opts, 0, sizeof(opts));
> +		opts.offset = dfu->data.nand.start + dfu->offset +
> +				dfu->bad_skip;
> +		opts.length = dfu->data.nand.start +
> +				dfu->data.nand.size - opts.offset;

opts.length is equivalent to dfu->data.nand.size - dfu->offset -  
dfu->bad_skip.  Is this correct?  dfu->data.nand.size includes  
dfu->offset, but dfu->data.nand.start doesn't?

> @@ -185,7 +217,32 @@ int dfu_fill_entity_nand(struct dfu_entity *dfu,  
> char *s)
> 
>  		dfu->data.nand.start = pi->offset;
> +	} else if (!strcmp(st, "partubi")) {
>  		dfu->data.nand.size = pi->size;
> +		char mtd_id[32];
> +		struct mtd_device *mtd_dev;
> +		u8 part_num;
> +		struct part_info *pi;
> 
> +		dfu->layout = DFU_RAW_ADDR;
> +
> +		dev = simple_strtoul(s, &s, 10);
> +		s++;
> +		part = simple_strtoul(s, &s, 10);
> +
> +		sprintf(mtd_id, "%s%d,%d", "nand", dev, part - 1);
> +		printf("using id '%s'\n", mtd_id);
> +
> +		mtdparts_init();
> +
> +		ret = find_dev_and_part(mtd_id, &mtd_dev, &part_num,  
> &pi);
> +		if (ret != 0) {
> +			printf("Could not locate '%s'\n", mtd_id);
> +			return -1;
> +		}
> +
> +		dfu->data.nand.start = pi->offset;
> +		dfu->data.nand.size = pi->size;
> +		dfu->data.nand.ubi = 1;

Please don't duplicate all of this just to set one flag at the end.

-Scott


More information about the U-Boot mailing list