Hi Peng, On 08/23/2016 05:12 PM, Peng Fan wrote: > To SD, there is no erase group, then the value erase_grp_size > will be default 1. When erasing SD blocks, the blocks will be > erased one by one, which is time consuming. > > We use AU_SIZE as a group to speed up the erasing. > > Erasing 4MB with a SD2.0 Card with AU_SIZE 4MB. > `time mmc erase 0x100000 0x2000` > time: 44.856 seconds (before optimization) > time: 0.335 seconds (after optimization) > > Signed-off-by: Peng Fan <peng....@nxp.com> > Cc: Jaehoon Chung <jh80.ch...@samsung.com> > Cc: Simon Glass <s...@chromium.org> > Cc: Bin Meng <bmeng...@gmail.com> > Cc: Stefan Wahren <stefan.wah...@i2se.com> > Cc: Clemens Gruber <clemens.gru...@pqgruber.com> > Cc: Kever Yang <kever.y...@rock-chips.com> > Cc: Eric Nelson <e...@nelint.com> > Cc: Stephen Warren <swar...@nvidia.com>
Applied on u-boot-mmc. Thanks! Best Regards, Jaehoon Chung > --- > > V3: > No change. > > V2: > Add test results. > > drivers/mmc/mmc_write.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/drivers/mmc/mmc_write.c b/drivers/mmc/mmc_write.c > index 0f8b5c7..2289640 100644 > --- a/drivers/mmc/mmc_write.c > +++ b/drivers/mmc/mmc_write.c > @@ -100,8 +100,13 @@ unsigned long mmc_berase(struct blk_desc *block_dev, > lbaint_t start, > & ~(mmc->erase_grp_size - 1)) - 1); > > while (blk < blkcnt) { > - blk_r = ((blkcnt - blk) > mmc->erase_grp_size) ? > - mmc->erase_grp_size : (blkcnt - blk); > + if (IS_SD(mmc) && mmc->ssr.au) { > + blk_r = ((blkcnt - blk) > mmc->ssr.au) ? > + mmc->ssr.au : (blkcnt - blk); > + } else { > + blk_r = ((blkcnt - blk) > mmc->erase_grp_size) ? > + mmc->erase_grp_size : (blkcnt - blk); > + } > err = mmc_erase_t(mmc, start + blk, blk_r); > if (err) > break; > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot