Re: [U-Boot] [PATCH v4] dfu, nand, ubi: add partubi alt settings for updating ubi partition
On 07/23/2013 11:30:55 PM, Heiko Schocher wrote: Hello Scott, Am 24.07.2013 01:22, schrieb Scott Wood: 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? Yes, it is correct! No need to shout... I could not parse dfu-data.nand.size includes dfu-offset, but dfu-data.nand.start doesn't ... What do you mean? I think my confusion was over what dfu-offset and nand.start represent. If nand.start/nand.size describe the raw partition, and dfu-offset is the offset into that partition that the image starts at, then this looks OK. -Scott ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v4] dfu, nand, ubi: add partubi alt settings for updating ubi partition
Hello Scott, Am 24.07.2013 21:08, schrieb Scott Wood: On 07/23/2013 11:30:55 PM, Heiko Schocher wrote: Hello Scott, Am 24.07.2013 01:22, schrieb Scott Wood: 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? Yes, it is correct! No need to shout... Sorry, I did not intent to shout ... I could not parse dfu-data.nand.size includes dfu-offset, but dfu-data.nand.start doesn't ... What do you mean? I think my confusion was over what dfu-offset and nand.start represent. If nand.start/nand.size describe the raw partition, and dfu-offset is the offset into that partition that the image starts at, then this looks OK. Ok, I send an update of this patch for your other comment, thanks. bye, Heiko -- DENX Software Engineering GmbH, MD: Wolfgang Denk Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v4] dfu, nand, ubi: add partubi alt settings for updating ubi partition
Hello Scott, Am 22.07.2013 23:24, schrieb Scott Wood: 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 h...@denx.de Cc: Pantelis Antoniou pa...@antoniou-consulting.com Cc: Tom Rini tr...@ti.com Cc: Lukasz Majewski l.majew...@samsung.com Cc: Kyungmin Park kyungmin.p...@samsung.com Cc: Marek Vasut ma...@denx.de Cc: Wolfgang Denk w...@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. Yes, but this would be another patch, as this patch did not touch the nand write part ...! - 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. Currently no :-( But I hope to get the chance to fix this in the correct way, by introducing an ubi format ... command ... bye, Heiko -- DENX Software Engineering GmbH, MD: Wolfgang Denk Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v4] dfu, nand, ubi: add partubi alt settings for updating ubi partition
On 07/23/2013 08:12:03 AM, Heiko Schocher wrote: Hello Scott, Am 22.07.2013 23:24, schrieb Scott Wood: On 07/18/2013 11:32:14 PM, Heiko Schocher wrote: - 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. Yes, but this would be another patch, as this patch did not touch the nand write part ...! It was a response to the comment, not to the patch. -Scott ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v4] dfu, nand, ubi: add partubi alt settings for updating ubi partition
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 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v4] dfu, nand, ubi: add partubi alt settings for updating ubi partition
Hello Scott, Am 24.07.2013 01:22, schrieb Scott Wood: 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? Yes, it is correct! I could not parse dfu-data.nand.size includes dfu-offset, but dfu-data.nand.start doesn't ... What do you mean? I need to calculate opts-offset and opts.length for nand_erase_opts(): opts.offset contains the starting sector where the erase should begin dfu-data.nand.start is equal to the starting sector of the partition, so this is needed here + dfu-offset + dfu-bad_skip and we are at our starting point. opts.length contains the count of sectors to erase. I just did here end_sector - start_sector with: end_sector = dfu-data.nand.start + dfu-data.nand.size start_sector = opts.offset Maybe my calculation of opts.length is confusing, and I should use dfu-data.nand.size - dfu-offset - dfu-bad_skip ? @@ -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. You are right! Fixed! Thanks! bye, Heiko -- DENX Software Engineering GmbH, MD: Wolfgang Denk Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v4] dfu, nand, ubi: add partubi alt settings for updating ubi partition
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 h...@denx.de Cc: Pantelis Antoniou pa...@antoniou-consulting.com Cc: Tom Rini tr...@ti.com Cc: Lukasz Majewski l.majew...@samsung.com Cc: Kyungmin Park kyungmin.p...@samsung.com Cc: Marek Vasut ma...@denx.de Cc: Wolfgang Denk w...@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 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v4] dfu, nand, ubi: add partubi alt settings for updating ubi partition
On Fri, 19 Jul 2013 06:32:14 +0200 Heiko Schocher h...@denx.de wrote, Hi Heiko, 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. I've tested it on Trats. This patch seems to be orthogonal and doesn't interfere with eMMC. Tested-by: Lukasz Majewski l.majew...@samsung.com Ack-by: Lukasz Majewski l.majew...@samsung.com Signed-off-by: Heiko Schocher h...@denx.de Cc: Pantelis Antoniou pa...@antoniou-consulting.com Cc: Tom Rini tr...@ti.com Cc: Lukasz Majewski l.majew...@samsung.com Cc: Kyungmin Park kyungmin.p...@samsung.com Cc: Marek Vasut ma...@denx.de Cc: Wolfgang Denk w...@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? - 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 */ + 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; + ret = nand_erase_opts(nand, opts); + if (ret != 0) + printf(Failure erase: %d\n, ret); + } + + return ret; +} + int dfu_fill_entity_nand(struct dfu_entity *dfu, char *s) { char *st; int ret, dev, part; + dfu-data.nand.ubi = 0; dfu-dev_type = DFU_DEV_NAND; st = strsep(s, ); if (!strcmp(st, raw)) { @@ -185,7 +217,32 @@ int dfu_fill_entity_nand(struct dfu_entity *dfu, char *s) dfu-data.nand.start = pi-offset; dfu-data.nand.size = pi-size; + } else if (!strcmp(st, partubi)) { + 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; } else { printf(%s: Memory layout (%s) not supported!\n, __func__, st); return -1; @@ -193,6 +250,7 @@ int dfu_fill_entity_nand(struct dfu_entity *dfu, char *s) dfu-read_medium = dfu_read_medium_nand; dfu-write_medium = dfu_write_medium_nand; + dfu-flush_medium = dfu_flush_medium_nand; /* initial state */ dfu-inited = 0; diff --git a/include/dfu.h b/include/dfu.h index 124653c..4de7b34 100644 --- a/include/dfu.h +++ b/include/dfu.h @@ -59,6 +59,8 @@ struct
Re: [U-Boot] [PATCH v4] dfu, nand, ubi: add partubi alt settings for updating ubi partition
Dear Lukasz Majewski, On Fri, 19 Jul 2013 06:32:14 +0200 Heiko Schocher h...@denx.de wrote, Hi Heiko, 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. I've tested it on Trats. This patch seems to be orthogonal and doesn't interfere with eMMC. Tested-by: Lukasz Majewski l.majew...@samsung.com Ack-by: Lukasz Majewski l.majew...@samsung.com I'll wait for Scott's ACK and then pick this, ok? Best regards, Marek Vasut ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v4] dfu, nand, ubi: add partubi alt settings for updating ubi partition
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 h...@denx.de Cc: Pantelis Antoniou pa...@antoniou-consulting.com Cc: Tom Rini tr...@ti.com Cc: Lukasz Majewski l.majew...@samsung.com Cc: Kyungmin Park kyungmin.p...@samsung.com Cc: Marek Vasut ma...@denx.de Cc: Wolfgang Denk w...@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? - 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 */ + 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; + ret = nand_erase_opts(nand, opts); + if (ret != 0) + printf(Failure erase: %d\n, ret); + } + + return ret; +} + int dfu_fill_entity_nand(struct dfu_entity *dfu, char *s) { char *st; int ret, dev, part; + dfu-data.nand.ubi = 0; dfu-dev_type = DFU_DEV_NAND; st = strsep(s, ); if (!strcmp(st, raw)) { @@ -185,7 +217,32 @@ int dfu_fill_entity_nand(struct dfu_entity *dfu, char *s) dfu-data.nand.start = pi-offset; dfu-data.nand.size = pi-size; + } else if (!strcmp(st, partubi)) { + 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; } else { printf(%s: Memory layout (%s) not supported!\n, __func__, st); return -1; @@ -193,6 +250,7 @@ int dfu_fill_entity_nand(struct dfu_entity *dfu, char *s) dfu-read_medium = dfu_read_medium_nand; dfu-write_medium = dfu_write_medium_nand; + dfu-flush_medium = dfu_flush_medium_nand; /* initial state */ dfu-inited = 0; diff --git a/include/dfu.h b/include/dfu.h index 124653c..4de7b34 100644 --- a/include/dfu.h +++ b/include/dfu.h @@ -59,6 +59,8 @@ struct nand_internal_data { unsigned int dev; unsigned int part; + /* for nand/ubi use */ + unsigned int ubi; }; static inline unsigned int get_mmc_blk_size(int dev) -- 1.7.11.7 ___ U-Boot mailing list