mmc: card: Skip secure option for MoviNAND.
PATCH v2 1/1 mmc: card: Skip secure option for MoviNAND.
For several MoviNAND, there are some known issue with secure option. For these specific MoviNAND device, we skip secure option.
--- drivers/mmc/card/block.c | 24 +++++++++++++++++++++++- include/linux/mmc/card.h | 1 + 2 files changed, 24 insertions(+), 1 deletions(-)
drivers/mmc/card/block.c +0 -0
@@ -1411,7 +1411,8 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq,
struct request *req)
/* complete ongoing async transfer before issuing discard */ if (card->host->areq)
mmc_blk_issue_rw_rq(mq, NULL);
- if (req->cmd_flags & REQ_SECURE)
+ if (req->cmd_flags & REQ_SECURE &&
+ !(card->quirks & MMC_QUIRK_SKIP_SECURE))
ret = mmc_blk_issue_secdiscard_rq(mq, req);
else
ret = mmc_blk_issue_discard_rq(mq, req);
@@ -1716,6 +1717,7 @@ force_ro_fail:
#define CID_MANFID_SANDISK 0x2
#define CID_MANFID_TOSHIBA 0x11
#define CID_MANFID_MICRON 0x13
+#define CID_MANFID_SAMSUNG 0x15
static const struct mmc_fixup blk_fixups[] =
{
@@ -1752,6 +1754,26 @@ static const struct mmc_fixup blk_fixups[] =
MMC_FIXUP(CID_NAME_ANY, CID_MANFID_MICRON, 0x200, add_quirk_mmc,
MMC_QUIRK_LONG_READ_TIME),
+ /*
+ * Some issue about secure erase/secure trim for Samsung MoviNAND
+ */
+ MMC_FIXUP("M8G2FA", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
+ MMC_QUIRK_MOVINAND_SECURE),
+ MMC_FIXUP("MAG4FA", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
+ MMC_QUIRK_MOVINAND_SECURE),
+ MMC_FIXUP("MBG8FA", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
+ MMC_QUIRK_MOVINAND_SECURE),
+ MMC_FIXUP("MCGAFA", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
+ MMC_QUIRK_MOVINAND_SECURE),
+ MMC_FIXUP("VAL00M", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
+ MMC_QUIRK_MOVINAND_SECURE),
+ MMC_FIXUP("VYL00M", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
+ MMC_QUIRK_MOVINAND_SECURE),
+ MMC_FIXUP("KYL00M", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
+ MMC_QUIRK_MOVINAND_SECURE),
+ MMC_FIXUP("VZL00M", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
+ MMC_QUIRK_MOVINAND_SECURE),
+
END_FIXUP
};
include/linux/mmc/card.h +0 -0
@@ -239,6 +239,7 @@ struct mmc_card {#define MMC_QUIRK_BLK_NO_CMD23 (1<<7)/* Avoid CMD23 for regular
multiblock */
#define MMC_QUIRK_BROKEN_BYTE_MODE_512 (1<<8) /* Avoid sending 512
bytes in */
#define MMC_QUIRK_LONG_READ_TIME (1<<9) /* Data read time > CSD says */
+#define MMC_QUIRK_SKIP_SECURE (1<<10) /* Skip secure for erase/trim */
/* byte mode */
unsigned int poweroff_notify_state; /* eMMC4.5 notify feature */
#define MMC_NO_POWER_NOTIFICATION 0
Signature · 1 line
1.7.0.4
Hi Ian,
"MMC_QUIRK_SKIP_SECURE"? It seems it support secure discard but want to skip. but it's wrong. it's broken feature at listed MoviNAND. As linus suggested, SECURE_BROKEN is better.
Thank you,
Kyungmin Park
Quoted 80 lines · IAN CHEN
For several MoviNAND, there are some known issue with secure option. For these specific MoviNAND device, we skip secure option.
Signed-off-by Ian Chen <[email protected]>--- drivers/mmc/card/block.c | 24 +++++++++++++++++++++++- include/linux/mmc/card.h | 1 + 2 files changed, 24 insertions(+), 1 deletions(-)drivers/mmc/card/block.c +2
-1@@ -1411,7 +1411,8 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)/* complete ongoing async transfer before issuing discard */ if (card->host->areq)mmc_blk_issue_rw_rq (mq,NULL ); -if (req->cmd_flags &REQ_SECURE ) +if (req->cmd_flags &REQ_SECURE && + !(card->quirks &MMC_QUIRK_SKIP_SECURE )) ret =mmc_blk_issue_secdiscard_rq (mq, req);else drivers/mmc/card/block.c +21
-0ret =mmc_blk_issue_discard_rq (mq, req);@@ -1716,6 +1717,7 @@ force_ro_fail:#define CID_MANFID_SANDISK 0x2#define CID_MANFID_TOSHIBA 0x11#define CID_MANFID_MICRON 0x13 +#define CID_MANFID_SAMSUNG 0x15static const struct mmc_fixup blk_fixups[] = {@@ -1752,6 +1754,26 @@ static const struct mmc_fixup blk_fixups[] =MMC_FIXUP (CID_NAME_ANY ,CID_MANFID_MICRON ,0x200 , add_quirk_mmc,MMC_QUIRK_LONG_READ_TIME ), +/* +* Some issue about secure erase/secure trim for Samsung MoviNAND +*/ +MMC_FIXUP ("M8G2FA" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_MOVINAND_SECURE ), +MMC_FIXUP ("MAG4FA" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_MOVINAND_SECURE ), +MMC_FIXUP ("MBG8FA" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_MOVINAND_SECURE ), +MMC_FIXUP ("MCGAFA" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_MOVINAND_SECURE ), +MMC_FIXUP ("VAL00M" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_MOVINAND_SECURE ), +MMC_FIXUP ("VYL00M" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_MOVINAND_SECURE ), +MMC_FIXUP ("KYL00M" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_MOVINAND_SECURE ), +MMC_FIXUP ("VZL00M" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_MOVINAND_SECURE ), +END_FIXUP };include/linux/mmc/card.h +0
-0@@ -239,6 +239,7 @@ struct mmc_card {#define MMC_QUIRK_BLK_NO_CMD23 (1<<7)/* Avoid CMD23 for regular multiblock */
#defineMMC_QUIRK_BROKEN_BYTE_MODE_512(1<<8) /* Avoid sending 512
bytes in */
#defineMMC_QUIRK_LONG_READ_TIME(1<<9) /* Data read time > CSD says */include/linux/mmc/card.h +1
-1+#define MMC_QUIRK_SKIP_SECURE (1<<10)/* Skip secure for erase/trim */ /* byte mode */ unsigned int poweroff_notify_state;/* eMMC4.5 notify feature */ #define MMC_NO_POWER_NOTIFICATION 0 --1.7.0.4
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
and also you should update "MMC_QUIRK_MOVINAND_SECURE" also.
Quoted 91 lines · Kyungmin Park
Hi Ian,
"
MMC_QUIRK_SKIP_SECURE"? It seems it support secure discard but want to skip. but it's wrong. it's broken feature at listed MoviNAND. As linus suggested,SECURE_BROKENis better.Thank you,
Kyungmin ParkQuoted 80 lines · IAN CHEN
For several MoviNAND, there are some known issue with secure option. For these specific MoviNAND device, we skip secure option.
Signed-off-by Ian Chen <[email protected]>--- drivers/mmc/card/block.c | 24 +++++++++++++++++++++++- include/linux/mmc/card.h | 1 + 2 files changed, 24 insertions(+), 1 deletions(-)drivers/mmc/card/block.c +2
-1@@ -1411,7 +1411,8 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)/* complete ongoing async transfer before issuing discard */ if (card->host->areq)mmc_blk_issue_rw_rq (mq,NULL ); -if (req->cmd_flags &REQ_SECURE ) +if (req->cmd_flags &REQ_SECURE && + !(card->quirks &MMC_QUIRK_SKIP_SECURE )) ret =mmc_blk_issue_secdiscard_rq (mq, req);else drivers/mmc/card/block.c +21
-0ret =mmc_blk_issue_discard_rq (mq, req);@@ -1716,6 +1717,7 @@ force_ro_fail:#define CID_MANFID_SANDISK 0x2#define CID_MANFID_TOSHIBA 0x11#define CID_MANFID_MICRON 0x13 +#define CID_MANFID_SAMSUNG 0x15static const struct mmc_fixup blk_fixups[] = {@@ -1752,6 +1754,26 @@ static const struct mmc_fixup blk_fixups[] =MMC_FIXUP (CID_NAME_ANY ,CID_MANFID_MICRON ,0x200 , add_quirk_mmc,MMC_QUIRK_LONG_READ_TIME ), +/* +* Some issue about secure erase/secure trim for Samsung MoviNAND +*/ +MMC_FIXUP ("M8G2FA" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_MOVINAND_SECURE ), +MMC_FIXUP ("MAG4FA" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_MOVINAND_SECURE ), +MMC_FIXUP ("MBG8FA" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_MOVINAND_SECURE ), +MMC_FIXUP ("MCGAFA" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_MOVINAND_SECURE ), +MMC_FIXUP ("VAL00M" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_MOVINAND_SECURE ), +MMC_FIXUP ("VYL00M" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_MOVINAND_SECURE ), +MMC_FIXUP ("KYL00M" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_MOVINAND_SECURE ), +MMC_FIXUP ("VZL00M" ,CID_MANFID_SAMSUNG ,CID_OEMID_ANY , add_quirk_mmc, +MMC_QUIRK_MOVINAND_SECURE ), +END_FIXUP };include/linux/mmc/card.h +0
-0@@ -239,6 +239,7 @@ struct mmc_card {#define MMC_QUIRK_BLK_NO_CMD23 (1<<7)/* Avoid CMD23 for regular multiblock */
#defineMMC_QUIRK_BROKEN_BYTE_MODE_512(1<<8) /* Avoid sending 512
bytes in */
#defineMMC_QUIRK_LONG_READ_TIME(1<<9) /* Data read time > CSD says */include/linux/mmc/card.h +1
-1+#define MMC_QUIRK_SKIP_SECURE (1<<10)/* Skip secure for erase/trim */ /* byte mode */ unsigned int poweroff_notify_state;/* eMMC4.5 notify feature */ #define MMC_NO_POWER_NOTIFICATION 0 --1.7.0.4
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html