|
@@ -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_SEC_ERASE_TRIM_BROKEN))
|
|
|
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,28 @@ static const struct mmc_fixup blk_fixups[] =
|
|
|
MMC_FIXUP(CID_NAME_ANY, CID_MANFID_MICRON, 0x200, add_quirk_mmc,
|
|
|
MMC_QUIRK_LONG_READ_TIME),
|
|
|
|
|
|
+ /*
|
|
|
+ * On these Samsung MoviNAND parts, performing secure erase or
|
|
|
+ * secure trim can result in unrecoverable corruption due to a
|
|
|
+ * firmware bug.
|
|
|
+ */
|
|
|
+ MMC_FIXUP("M8G2FA", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
|
|
|
+ MMC_QUIRK_SEC_ERASE_TRIM_BROKEN),
|
|
|
+ MMC_FIXUP("MAG4FA", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
|
|
|
+ MMC_QUIRK_SEC_ERASE_TRIM_BROKEN),
|
|
|
+ MMC_FIXUP("MBG8FA", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
|
|
|
+ MMC_QUIRK_SEC_ERASE_TRIM_BROKEN),
|
|
|
+ MMC_FIXUP("MCGAFA", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
|
|
|
+ MMC_QUIRK_SEC_ERASE_TRIM_BROKEN),
|
|
|
+ MMC_FIXUP("VAL00M", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
|
|
|
+ MMC_QUIRK_SEC_ERASE_TRIM_BROKEN),
|
|
|
+ MMC_FIXUP("VYL00M", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
|
|
|
+ MMC_QUIRK_SEC_ERASE_TRIM_BROKEN),
|
|
|
+ MMC_FIXUP("KYL00M", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
|
|
|
+ MMC_QUIRK_SEC_ERASE_TRIM_BROKEN),
|
|
|
+ MMC_FIXUP("VZL00M", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc,
|
|
|
+ MMC_QUIRK_SEC_ERASE_TRIM_BROKEN),
|
|
|
+
|
|
|
END_FIXUP
|
|
|
};
|
|
|
|