summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSanrio Alvares <sanrio.alvares@intel.com>2016-11-29 11:36:11 -0800
committerBeare, Bruce J <bruce.j.beare@intel.com>2016-11-30 08:13:37 -0800
commit223f96fda993f93dce4706a0d112e58b2648e046 (patch)
tree6986e8a1bcd14b5c3e41dd9e0d5f43b6e93f7700
parentaa835184b066c28881c024055107252988e95e3b (diff)
downloadedison-u-boot-223f96fda993f93dce4706a0d112e58b2648e046.tar.gz
Fix mmc erase
This is only partially fixed. Larger sizes use mmc_erase while smaller sizes use mmc_write. Change-Id: Iff27fc3682ab3a5f540de46b5e63c215b5d91727 Signed-off-by: Sanrio Alvares <sanrio.alvares@intel.com> Reviewed-on: https://android.intel.com/554613 Reviewed-by: Beare, Bruce J <bruce.j.beare@intel.com> Tested-by: Beare, Bruce J <bruce.j.beare@intel.com>
-rw-r--r--common/fb_mmc.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/common/fb_mmc.c b/common/fb_mmc.c
index 44ad72ae94..17c450f7a8 100644
--- a/common/fb_mmc.c
+++ b/common/fb_mmc.c
@@ -303,6 +303,7 @@ void fb_mmc_erase(const char *cmd, char *response)
disk_partition_t info;
lbaint_t blks, blks_start, blks_size, grp_size;
struct mmc *mmc = find_mmc_device(CONFIG_FASTBOOT_FLASH_MMC_DEV);
+ void *src;
if (mmc == NULL) {
error("invalid mmc device");
@@ -339,7 +340,14 @@ void fb_mmc_erase(const char *cmd, char *response)
printf("Erasing blocks " LBAFU " to " LBAFU " due to alignment\n",
blks_start, blks_start + blks_size);
- blks = dev_desc->block_erase(dev_desc->dev, blks_start, blks_size);
+ /* Erase fails so only erase for block size smaller than 1000000 (512MB) */
+ if (blks_size > 1000000)
+ blks = dev_desc->block_erase(dev_desc->dev, blks_start, blks_size);
+ else {
+ src = calloc(blks_size, info.blksz);
+ blks = dev_desc->block_write(dev_desc->dev, info.start, blks_size, src);
+ }
+
if (blks != blks_size) {
error("failed erasing from device %d", dev_desc->dev);
fastboot_fail("failed erasing from device");