platform: msm_shared: include wp_grp_size in mmc_device structure
including the write protect group size for the mmc card
in mmc_device structure
CRs-Fixed: 647262
Change-Id: I4db9b8e1b7453271d562d842a3e8e7bf7ad0f2cf
diff --git a/platform/msm_shared/include/mmc_sdhci.h b/platform/msm_shared/include/mmc_sdhci.h
index 398f982..7ea664e 100644
--- a/platform/msm_shared/include/mmc_sdhci.h
+++ b/platform/msm_shared/include/mmc_sdhci.h
@@ -282,6 +282,7 @@
uint32_t rca; /* Relative addres of the card*/
uint32_t ocr; /* Operating range of the card*/
uint32_t block_size; /* Block size for the card */
+ uint32_t wp_grp_size; /* WP group size for the card */
uint64_t capacity; /* card capacity */
uint32_t type; /* Type of the card */
uint32_t status; /* Card status */
diff --git a/platform/msm_shared/mmc_sdhci.c b/platform/msm_shared/mmc_sdhci.c
index 9f5cd0f..9916ef9 100644
--- a/platform/msm_shared/mmc_sdhci.c
+++ b/platform/msm_shared/mmc_sdhci.c
@@ -232,6 +232,13 @@
memcpy((struct mmc_csd *)&card->csd,(struct mmc_csd *)&mmc_csd,
sizeof(struct mmc_csd));
+ /* Calculate the wp grp size */
+ if (card->ext_csd[MMC_ERASE_GRP_DEF])
+ card->wp_grp_size = MMC_HC_ERASE_MULT * card->ext_csd[MMC_HC_ERASE_GRP_SIZE] / MMC_BLK_SZ;
+ else
+ card->wp_grp_size = (card->csd.wp_grp_size + 1) * (card->csd.erase_grp_size + 1) \
+ * (card->csd.erase_grp_mult + 1);
+
dprintf(SPEW, "Decoded CSD fields:\n");
dprintf(SPEW, "cmmc_structure: %u\n", mmc_csd.cmmc_structure);
dprintf(SPEW, "card_cmd_class: %x\n", mmc_csd.card_cmd_class);
@@ -249,6 +256,7 @@
dprintf(SPEW, "write_blk_misalign: %u\n", mmc_csd.write_blk_misalign);
dprintf(SPEW, "read_blk_partial: %u\n", mmc_csd.read_blk_partial);
dprintf(SPEW, "write_blk_partial: %u\n", mmc_csd.write_blk_partial);
+ dprintf(SPEW, "wp_grp_size: %u\n", card->wp_grp_size);
dprintf(SPEW, "Card Capacity: %llu Bytes\n", card->capacity);
return 0;
@@ -2185,6 +2193,7 @@
/* Convert len into blocks */
len = len / MMC_BLK_SZ;
+ wp_grp_size = dev->card.wp_grp_size;
/* Disable PERM WP */
ret = mmc_switch_cmd(&dev->host, &dev->card, MMC_SET_BIT, MMC_USR_WP, MMC_US_PERM_WP_DIS);
@@ -2212,15 +2221,6 @@
return 1;
}
- /* Calculate the wp grp size */
- if (dev->card.ext_csd[MMC_ERASE_GRP_DEF])
- wp_grp_size = (MMC_HC_ERASE_MULT * dev->card.ext_csd[MMC_HC_ERASE_GRP_SIZE]
- * dev->card.ext_csd[MMC_EXT_HC_WP_GRP_SIZE]) / MMC_BLK_SZ;
- else
- wp_grp_size = (dev->card.csd.wp_grp_size + 1) * (dev->card.csd.erase_grp_size + 1) \
- * (dev->card.csd.erase_grp_mult + 1);
-
-
if (len < wp_grp_size)
{
dprintf(CRITICAL, "Length is less than min WP size, WP was not set\n");