]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - drivers/mmc/mmc_write.c
Merge git://git.denx.de/u-boot-mmc
[people/ms/u-boot.git] / drivers / mmc / mmc_write.c
index 0f8b5c79d7c6073d47964e25140b1991b119cbc4..54acbf73367b8acbb7d4597ef9c4c9815a05e7f4 100644 (file)
@@ -66,9 +66,15 @@ err_out:
        return err;
 }
 
-unsigned long mmc_berase(struct blk_desc *block_dev, lbaint_t start,
-                        lbaint_t blkcnt)
+#ifdef CONFIG_BLK
+ulong mmc_berase(struct udevice *dev, lbaint_t start, lbaint_t blkcnt)
+#else
+ulong mmc_berase(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt)
+#endif
 {
+#ifdef CONFIG_BLK
+       struct blk_desc *block_dev = dev_get_uclass_platdata(dev);
+#endif
        int dev_num = block_dev->devnum;
        int err = 0;
        u32 start_rem, blkcnt_rem;
@@ -100,8 +106,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;