mmc: sd: optimize erase
[oweals/u-boot.git] / drivers / mmc / mmc_write.c
index 0f8b5c79d7c6073d47964e25140b1991b119cbc4..22896403754beb6c1b1d0481d02ceecf9e3b4f13 100644 (file)
@@ -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;