aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/core
diff options
context:
space:
mode:
authorAndrei Warkentin <andreiw@motorola.com>2011-03-31 19:40:00 -0400
committerChris Ball <cjb@laptop.org>2011-05-24 20:59:38 -0400
commitf4c5522b0a8827f39f83f928961d87e081bfe71c (patch)
tree3c2126f0adb2a3444b2fd152cc1a880c192c9d77 /drivers/mmc/core
parent766a6bf6e987ff5f5085c614b5a62a55006b6a7e (diff)
mmc: Reliable write support.
Allows reliable writes to be used for MMC writes. Reliable writes are used to service write REQ_FUA/REQ_META requests. Handles both the legacy and the enhanced reliable write support in MMC cards. Signed-off-by: Andrei Warkentin <andreiw@motorola.com> Reviewed-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Chris Ball <cjb@laptop.org>
Diffstat (limited to 'drivers/mmc/core')
-rw-r--r--drivers/mmc/core/mmc.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index 5c611a6e008..ae6b8fd3880 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -300,6 +300,8 @@ static int mmc_read_ext_csd(struct mmc_card *card)
300 ext_csd[EXT_CSD_ERASE_TIMEOUT_MULT]; 300 ext_csd[EXT_CSD_ERASE_TIMEOUT_MULT];
301 card->ext_csd.hc_erase_size = 301 card->ext_csd.hc_erase_size =
302 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] << 10; 302 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] << 10;
303
304 card->ext_csd.rel_sectors = ext_csd[EXT_CSD_REL_WR_SEC_C];
303 } 305 }
304 306
305 if (card->ext_csd.rev >= 4) { 307 if (card->ext_csd.rev >= 4) {
@@ -351,6 +353,9 @@ static int mmc_read_ext_csd(struct mmc_card *card)
351 ext_csd[EXT_CSD_TRIM_MULT]; 353 ext_csd[EXT_CSD_TRIM_MULT];
352 } 354 }
353 355
356 if (card->ext_csd.rev >= 5)
357 card->ext_csd.rel_param = ext_csd[EXT_CSD_WR_REL_PARAM];
358
354 if (ext_csd[EXT_CSD_ERASED_MEM_CONT]) 359 if (ext_csd[EXT_CSD_ERASED_MEM_CONT])
355 card->erased_byte = 0xFF; 360 card->erased_byte = 0xFF;
356 else 361 else