[U-Boot] [PATCH v1 6/7] dfu, nand, ubi: fix erasing after write finish

Lukasz Majewski l.majewski at samsung.com
Mon May 30 15:13:21 CEST 2016


Hi Heiko,

> Hello Lukasz,
> 
> Am 30.05.2016 um 11:51 schrieb Lukasz Majewski:
> > Hi Heiko,
> >
> >> Hello Scott,
> >>
> >> Am 25.05.2016 um 07:33 schrieb Scott Wood:
> >>> On 05/25/2016 12:07 AM, Heiko Schocher wrote:
> >>>> writting to ubi nand partitions need after write ends an erase
> >>>> of the remaining sectors. This fail, if dfu write size was not
> >>>> a multiple of erasesize, example log:
> >>>>
> >>>> Failure erase: -1
> >
> > Is this a new bug? Or is this a regression?
> 
> This is a fix of a current Bug.

Ok.

> 
> >>>> Fix this error.
> >>>>
> >>>> Signed-off-by: Heiko Schocher <hs at denx.de>
> >>>
> >>> Why don't you just erase the whole partition up front?
> >>
> >> Good question ... I think the reason is that if we erase a big
> >> partition at once on dfu start, dfu-util rans into timeout ... but
> >> may I am wrong ...
> >
> > This is interesting, since we had similar problem with eMMC, but on
> > the end of writing large files to FS.
> >
> > To fix this issue, the deferred write has been introduced [1]:
> > SHA1: fc18f8d170ecc7e15269ad5312ec643addb42491
> 
> I had downloaded files > 300MiB IIRC without problems on NAND.
> 
> >> IIRC at the end of a DFU transfer DFU protocol sends a "flush" to
> >> the device ...
> >
> > Yes, correct, we do that.
> >
> >> where we currently erase the remaining sectors
> >
> > I'm not the "regular" user of NAND part of DFU framework. However,
> > AFAIK each sector is erased just before writing (dfu_nand.c @ line
> > 62).
> 
> Yep, and this is currrent state and works fine (on the siemens boards)
> And so we need at the end in the flush state of the dfu protcol
> to erase the sectors on the end of the partition, if it is an ubi
> partition.

Then we should stick with this scheme.

> 
> > The same scheme should be performed just before writing last chunk
> > of data to NAND.
> >
> >> ... we need
> >> this on an ubi partition, else there may remain old used UBI
> >> sectors ... (BTW: we need an "ubi format" command ...)
> >>
> >> @Lukasz? Am I correct? Or could we simple erase before writting?
> >
> > I'm just wondering if have you tried erasing the whole NAND area
> > before starting DFU operation?
> > How long does it take to erase large NAND area for e.g. rootfs?
> 
> I must measure this value ... but just posted the etamin module
> support, and there is a DDP Nand with 4GiB ... and there is a big fat
> (UBI) partition at the end:
> 
> device nand2 <omap2-nand_concat>, # parts = 9
>   #: name                size            offset          mask_flags
> [...]
>   8: rootfs              0xff080000      0x00f80000      0
> 
> > If I remember correctly, the timeout in dfu-util is 5 seconds sharp.
> 
> Yes, this is may too small, right, just erased the DDP nand on the
> etamin module:
> 
> U-Boot# nand device 0
> Device 0: nand0... is now current device
> U-Boot# time nand erase f80000 7f080000
> 
> NAND erase: device 0 offset 0xf80000, size 0x7f080000
> [...]
> Erasing at 0x7ff80000 -- 100% complete.
> OK
> 
> time: 3.999 seconds
> U-Boot# nand device 1
> Device 1: nand1... is now current device
> U-Boot# time nand erase.chip
> 
> NAND erase.chip: device 1 whole chip
> [...]
> Erasing at 0x7ff80000 -- 100% complete.
> OK
> 
> time: 4.019 seconds
> U-Boot#
> 
> ~8seconds for erasing the hole partition ...

So, then we would need to add some extra code to support erasing the
whole partition before flashing. 

However, I think that we should use the current scheme and erase the
last sector just before writing.

> 
> > Generally, I'm fine with erasing NAND sectors just before writing
> > (as we do it up till now in the NAND part of DFU).
> 
> Thanks for clarification!

No problem.

> 
> bye,
> Heiko



-- 
Best regards,

Lukasz Majewski

Samsung R&D Institute Poland (SRPOL) | Linux Platform Group


More information about the U-Boot mailing list