From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Schocher Date: Tue, 16 Jul 2013 07:11:04 +0200 Subject: [U-Boot] [PATCH v2] dfu, nand, ubi: add partubi alt settings for updating ubi partition In-Reply-To: <201307160700.57788.marex@denx.de> References: <1373881752-22676-1-git-send-email-hs@denx.de> <1373950449-21686-1-git-send-email-hs@denx.de> <201307160700.57788.marex@denx.de> Message-ID: <51E4D5E8.6000308@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hello Marek, Am 16.07.2013 07:00, schrieb Marek Vasut: > Dear Heiko Schocher, > >> 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 >> Cc: Pantelis Antoniou >> Cc: Tom Rini >> Cc: Lukasz Majewski >> Cc: Kyungmin Park >> Cc: Marek Vasut >> Cc: Wolfgang Denk >> >> --- >> >> - 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? >> >> - changes for v2: >> - do not use spread = 1 for nand_erase_opts, to prevent >> errormessage if there are bad blocks in the erase range. >> --- >> drivers/dfu/dfu.c | 30 +++++++++++++++++++++++++++++- >> drivers/dfu/dfu_nand.c | 26 ++++++++++++++++++++++++++ >> include/dfu.h | 2 ++ >> 3 Dateien ge?ndert, 57 Zeilen hinzugef?gt(+), 1 Zeile entfernt(-) >> >> diff --git a/drivers/dfu/dfu.c b/drivers/dfu/dfu.c >> index 0521752..7ba7026 100644 >> --- a/drivers/dfu/dfu.c >> +++ b/drivers/dfu/dfu.c >> @@ -23,6 +23,7 @@ >> #include >> #include >> #include >> +#include >> #include >> #include >> #include >> @@ -176,6 +177,34 @@ int dfu_write(struct dfu_entity *dfu, void *buf, int >> size, int blk_seq_num) ret = dfu->flush_medium(dfu); >> printf("\nDFU complete CRC32: 0x%08x\n", dfu->crc); >> >> + /* in case of ubi partition, erase rest of the partition */ >> + if (dfu->ubi == 1) { >> + int ret; >> + nand_info_t *nand; >> + /* erase complete partition */ >> + 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; >> + ret = nand_erase_opts(nand,&opts); >> + if (ret != 0) { >> + printf("Failure erase: %d\n", ret); >> + return ret; > > Are you not leaking memory here ? I suspect you should call dfu_free_buf() as > below ? Yes, fixed. Thanks! bye, Heiko -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany