[U-Boot] [PATCH v2] dfu, nand: before write a buffer to nand, erase the nand sectors
Heiko Schocher
hs at denx.de
Mon Jun 17 07:01:01 CEST 2013
before writing the received buffer to nand, erase the nand
sectors. If not doing this, nand write fails. See for
more info here:
http://lists.denx.de/pipermail/u-boot/2013-June/156361.html
Signed-off-by: Heiko Schocher <hs at denx.de>
Cc: Scott Wood <scottwood at freescale.com>
Cc: Pantelis Antoniou <panto at antoniou-consulting.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: Tom Rini <trini at ti.com>
---
- changes for v2:
- use opts.spread as Scott Wood suggested
drivers/dfu/dfu_nand.c | 17 +++++++++++++++--
1 Datei geändert, 15 Zeilen hinzugefügt(+), 2 Zeilen entfernt(-)
diff --git a/drivers/dfu/dfu_nand.c b/drivers/dfu/dfu_nand.c
index 7dc89b2..93db9bd 100644
--- a/drivers/dfu/dfu_nand.c
+++ b/drivers/dfu/dfu_nand.c
@@ -63,12 +63,25 @@ static int nand_block_op(enum dfu_nand_op op, struct dfu_entity *dfu,
nand = &nand_info[nand_curr_device];
- if (op == DFU_OP_READ)
+ if (op == DFU_OP_READ) {
ret = nand_read_skip_bad(nand, start, &count, &actual,
lim, buf);
- else
+ } else {
+ nand_erase_options_t opts;
+
+ memset(&opts, 0, sizeof(opts));
+ opts.offset = start;
+ opts.length = count;
+ opts.spread = 1;
+ opts.quiet = 1;
+ /* first erase */
+ ret = nand_erase_opts(nand, &opts);
+ if (ret)
+ return ret;
+ /* then write */
ret = nand_write_skip_bad(nand, start, &count, &actual,
lim, buf, 0);
+ }
if (ret != 0) {
printf("%s: nand_%s_skip_bad call failed at %llx!\n",
--
1.7.11.7
More information about the U-Boot
mailing list