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

Scott Wood scottwood at freescale.com
Mon Jul 22 23:24:27 CEST 2013


On 07/18/2013 11:32:14 PM, Heiko Schocher wrote:
> updating an ubi partition needs a completely erased mtd partition,
> see:
> http://lists.infradead.org/pipermail/linux-mtd/2011-May/035416.html
> 
> So, add partubi alt setting for the dfu_alt_info environment
> variable to mark this partition as an ubi partition. In case we
> update an ubi partition, we erase after flashing the image into the
> partition, the remaining sektors.
> 
> Signed-off-by: Heiko Schocher <hs at denx.de>
> Cc: Pantelis Antoniou <panto at antoniou-consulting.com>
> Cc: Tom Rini <trini at ti.com>
> Cc: Lukasz Majewski <l.majewski at samsung.com>
> Cc: Kyungmin Park <kyungmin.park at samsung.com>
> Cc: Marek Vasut <marex at denx.de>
> Cc: Wolfgang Denk <wd at denx.de>
> 
> ---
> 
> - This patch is also a good starting point to fix up updating ubi, as
>   we currently use "nand erase" for erasing the sektors. This is
>   not the prefered way for writing an ubi image, see:
>   http://www.linux-mtd.infradead.org/faq/ubi.html#L_flash_img
> 
>   This must be fixed ... we have no "ubiformat" in u-boot, or?

In the meantime, should you be using WITH_DROP_FFS when "ubi" is set?   
Though we really should be skipping FFs at the end of each block,  
rather than just at the end of the image.

> - changes for v2:
>   - do not use spread = 1 for nand_erase_opts, to prevent
>     errormessage if there are bad blocks in the erase range.
> 
> - changes for v3:
>   - add comment from Marek Vasut:
>     - prevent losing memory
>   - added comment from Lukasz Majewski:
>     - move code to dfu_nand.c dfu_flush_medium_nand()
> 
> - changes for v4:
>   - add comment from Lukasz Majewski:
>     - move ubi var to internal struct struct nand_internal_data
> ---
>  drivers/dfu/dfu_nand.c | 58  
> ++++++++++++++++++++++++++++++++++++++++++++++++++
>  include/dfu.h          |  2 ++
>  2 Dateien geändert, 60 Zeilen hinzugefügt(+)
> 
> diff --git a/drivers/dfu/dfu_nand.c b/drivers/dfu/dfu_nand.c
> index 07dee89..c0f8adf 100644
> --- a/drivers/dfu/dfu_nand.c
> +++ b/drivers/dfu/dfu_nand.c
> @@ -148,11 +148,43 @@ static int dfu_read_medium_nand(struct  
> dfu_entity *dfu, u64 offset, void *buf,
>  	return ret;
>  }
> 
> +static int dfu_flush_medium_nand(struct dfu_entity *dfu)
> +{
> +	int ret = 0;
> +
> +	/* in case of ubi partition, erase rest of the partition */

Did you have a chance to investigate the errors you saw when erasing  
the whole partition up front?  If there's other DFU data in the  
partition that needs to be preserved, then replace "partition" with  
"area reserved for this image".

-Scott


More information about the U-Boot mailing list