diff options
author | singhome_lee <singhome_lee@asus.com> | 2012-09-20 13:54:43 +0800 |
---|---|---|
committer | Marcel Ziswiler <marcel.ziswiler@toradex.com> | 2015-02-03 16:46:22 +0100 |
commit | ba18f86d405f3188eb2656dbf629845aa5b4759f (patch) | |
tree | 6d43e07781936dd4fbe06910bf92af4f2a1060d0 /drivers/mmc/core/core.c | |
parent | dadec4519ba16fa9fd4d95270d009f08a1811577 (diff) |
mmc: core: new discard feature support at Samsung eMMC v4.41+.
Support discard feature if MID field in the CID register is 0x15, EXT.CSD[192]
(device version) is 5 and Bit 0 in the EXT.CSD[64] is 1. Also removed REQ_SECURE flag
check to avoid kernel hang.
This patch is released from samsung.
Change-Id: I4023a900680e9bca10c40311b09ed077a22617db
(cherry picked from commit 4acc227edfb631d377e14911287c1b73682fc9c2)
Conflicts:
drivers/mmc/card/block.c
Diffstat (limited to 'drivers/mmc/core/core.c')
-rwxr-xr-x[-rw-r--r--] | drivers/mmc/core/core.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index bc200be1b3c0..58a38153db63 100644..100755 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -1579,7 +1579,10 @@ static unsigned int mmc_mmc_erase_timeout(struct mmc_card *card, { unsigned int erase_timeout; - if (card->ext_csd.erase_group_def & 1) { + if (arg == MMC_DISCARD_ARG || + (arg == MMC_TRIM_ARG && card->ext_csd.rev >= 6)) { + erase_timeout = card->ext_csd.trim_timeout; + } else if (card->ext_csd.erase_group_def & 1) { /* High Capacity Erase Group Size uses HC timeouts */ if (arg == MMC_TRIM_ARG) erase_timeout = card->ext_csd.trim_timeout; @@ -1855,6 +1858,14 @@ int mmc_can_trim(struct mmc_card *card) } EXPORT_SYMBOL(mmc_can_trim); +int mmc_can_discard(struct mmc_card *card) +{ + if (card->ext_csd.feature_support & MMC_DISCARD_FEATURE) + return 1; + return 0; +} +EXPORT_SYMBOL( mmc_can_discard); + int mmc_can_secure_erase_trim(struct mmc_card *card) { if (card->ext_csd.sec_feature_support & EXT_CSD_SEC_ER_EN) |