diff options
author | Sanrio Alvares <sanrio.alvares@intel.com> | 2016-11-29 11:36:11 -0800 |
---|---|---|
committer | Beare, Bruce J <bruce.j.beare@intel.com> | 2016-11-30 08:13:37 -0800 |
commit | 223f96fda993f93dce4706a0d112e58b2648e046 (patch) | |
tree | 6986e8a1bcd14b5c3e41dd9e0d5f43b6e93f7700 | |
parent | aa835184b066c28881c024055107252988e95e3b (diff) | |
download | edison-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.c | 10 |
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"); |