summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiego Santa Cruz <Diego.SantaCruz@spinetix.com>2014-12-23 10:50:25 +0100
committerPantelis Antoniou <pantelis.antoniou@konsulko.com>2015-01-19 17:02:29 +0200
commit037dc0ab5dff36984d97735987dff01a7ec73893 (patch)
tree44d5c457ea5ee33b65ca061b3a57ac515a52d938
parenta4ff9f83f5f902717e87c05cf9d2d02b472d4257 (diff)
downloadu-boot-imx-037dc0ab5dff36984d97735987dff01a7ec73893.zip
u-boot-imx-037dc0ab5dff36984d97735987dff01a7ec73893.tar.gz
u-boot-imx-037dc0ab5dff36984d97735987dff01a7ec73893.tar.bz2
mmc: read the high capacity WP group size for eMMC
Read the eMMC high capacity write protect group size at mmc device initialization. This is useful to correctly partition an eMMC device, as partitions need to be aligned to this size. Signed-off-by: Diego Santa Cruz <Diego.SantaCruz@spinetix.com>
-rw-r--r--drivers/mmc/mmc.c6
-rw-r--r--include/mmc.h1
2 files changed, 7 insertions, 0 deletions
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index be21101..16a7a90 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -1065,7 +1065,9 @@ static int mmc_startup(struct mmc *mmc)
return err;
else
ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1;
+ }
+ if (ext_csd[EXT_CSD_ERASE_GROUP_DEF] & 0x01) {
/* Read out group size from ext_csd */
mmc->erase_grp_size =
ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 1024;
@@ -1092,6 +1094,10 @@ static int mmc_startup(struct mmc *mmc)
mmc->erase_grp_size = (erase_gsz + 1)
* (erase_gmul + 1);
}
+
+ mmc->hc_wp_grp_size = 1024
+ * ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
+ * ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
}
err = mmc_set_capacity(mmc, mmc->part_num);
diff --git a/include/mmc.h b/include/mmc.h
index 6c8bbfc..bcaf9f0 100644
--- a/include/mmc.h
+++ b/include/mmc.h
@@ -316,6 +316,7 @@ struct mmc {
uint read_bl_len;
uint write_bl_len;
uint erase_grp_size; /* in 512-byte sectors */
+ uint hc_wp_grp_size; /* in 512-byte sectors */
u64 capacity;
u64 capacity_user;
u64 capacity_boot;