aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorKyungmin Park <kyungmin.park@samsung.com>2011-10-14 01:15:48 -0400
committerChris Ball <cjb@laptop.org>2011-10-26 16:32:26 -0400
commitd9ddd62943ee07a75d0428ffcf52f1a747a28c39 (patch)
treee4fb8b0b2ba2fe39bf725762b2c04441f1adf3b8 /drivers
parent4e0a5adf46ee7810af2e1b7e4e8c2a298652618e (diff)
mmc: core: mmc sanitize feature support for v4.5
In the v4.5, there's no secure erase & trim support. Instead it supports the sanitize feature. Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com> Signed-off-by: Chris Ball <cjb@laptop.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/mmc/card/block.c9
-rw-r--r--drivers/mmc/card/queue.c2
-rw-r--r--drivers/mmc/core/core.c8
3 files changed, 17 insertions, 2 deletions
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
index 049445eb4f74..e85816e1634a 100644
--- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c
@@ -792,11 +792,18 @@ static int mmc_blk_issue_secdiscard_rq(struct mmc_queue *mq,
792 unsigned int from, nr, arg; 792 unsigned int from, nr, arg;
793 int err = 0, type = MMC_BLK_SECDISCARD; 793 int err = 0, type = MMC_BLK_SECDISCARD;
794 794
795 if (!mmc_can_secure_erase_trim(card)) { 795 if (!(mmc_can_secure_erase_trim(card) || mmc_can_sanitize(card))) {
796 err = -EOPNOTSUPP; 796 err = -EOPNOTSUPP;
797 goto out; 797 goto out;
798 } 798 }
799 799
800 /* The sanitize operation is supported at v4.5 only */
801 if (mmc_can_sanitize(card)) {
802 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
803 EXT_CSD_SANITIZE_START, 1, 0);
804 goto out;
805 }
806
800 from = blk_rq_pos(req); 807 from = blk_rq_pos(req);
801 nr = blk_rq_sectors(req); 808 nr = blk_rq_sectors(req);
802 809
diff --git a/drivers/mmc/card/queue.c b/drivers/mmc/card/queue.c
index fed290ecc242..dcad59cbfef1 100644
--- a/drivers/mmc/card/queue.c
+++ b/drivers/mmc/card/queue.c
@@ -140,7 +140,7 @@ static void mmc_queue_setup_discard(struct request_queue *q,
140 /* granularity must not be greater than max. discard */ 140 /* granularity must not be greater than max. discard */
141 if (card->pref_erase > max_discard) 141 if (card->pref_erase > max_discard)
142 q->limits.discard_granularity = 0; 142 q->limits.discard_granularity = 0;
143 if (mmc_can_secure_erase_trim(card)) 143 if (mmc_can_secure_erase_trim(card) || mmc_can_sanitize(card))
144 queue_flag_set_unlocked(QUEUE_FLAG_SECDISCARD, q); 144 queue_flag_set_unlocked(QUEUE_FLAG_SECDISCARD, q);
145} 145}
146 146
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index a3c4e0fe9434..d9836e5a4e59 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -1713,6 +1713,14 @@ int mmc_can_trim(struct mmc_card *card)
1713} 1713}
1714EXPORT_SYMBOL(mmc_can_trim); 1714EXPORT_SYMBOL(mmc_can_trim);
1715 1715
1716int mmc_can_sanitize(struct mmc_card *card)
1717{
1718 if (card->ext_csd.sec_feature_support & EXT_CSD_SEC_SANITIZE)
1719 return 1;
1720 return 0;
1721}
1722EXPORT_SYMBOL(mmc_can_sanitize);
1723
1716int mmc_can_secure_erase_trim(struct mmc_card *card) 1724int mmc_can_secure_erase_trim(struct mmc_card *card)
1717{ 1725{
1718 if (card->ext_csd.sec_feature_support & EXT_CSD_SEC_ER_EN) 1726 if (card->ext_csd.sec_feature_support & EXT_CSD_SEC_ER_EN)