From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Schocher Date: Thu, 18 Jul 2013 07:01:35 +0200 Subject: [U-Boot] [PATCH v2] dfu, nand, ubi: add partubi alt settings for updating ubi partition In-Reply-To: <1374100553.8183.371@snotra> References: <1373881752-22676-1-git-send-email-hs@denx.de> <1373950449-21686-1-git-send-email-hs@denx.de> <1374100553.8183.371@snotra> Message-ID: <51E776AF.1000101@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 Scott, Am 18.07.2013 00:35, schrieb Scott Wood: > On 07/15/2013 11:54:09 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 >> 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? > > The lack of erase counter preservation is a problem, but the part about ECC on erased pages is dealt with in U-Boot by the WITH_DROP_FFS flag. Ah, ok! >> - 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; >> + } >> + } > > Instead of separately erasing the remainder of the partition, how about recognizing up front that it's UBI (or that a full partition erase is otherwise desired) and erasing the full partition then? Besides being cleaner, it would be easier to convert to > an ubi-aware mechanism. I tried this too, but if I erase the hole partition first (when a dfu transfer is started) I got: GADGET DRIVER: usb_dnl_dfu dfu_write: Wrong sequence number! [7] [0] dfu_write: Wrong sequence number! [7] [1] dfu_write: Wrong sequence number! [7] [2] So, this version needs more investigation ... bye, Heiko -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany