static inline int mmc_blk_part_switch(struct mmc_card *card,
unsigned int part_type);
static void mmc_blk_rw_rq_prep(struct mmc_queue_req *mqrq,
-@@ -2970,6 +2977,8 @@ static int mmc_blk_probe(struct mmc_card
+@@ -3050,6 +3057,8 @@ static int mmc_blk_probe(struct mmc_card
{
struct mmc_blk_data *md;
int ret = 0;
/*
* Check that the card supports the command class(es) we need.
-@@ -2977,7 +2986,16 @@ static int mmc_blk_probe(struct mmc_card
+@@ -3057,7 +3066,16 @@ static int mmc_blk_probe(struct mmc_card
if (!(card->csd.cmdclass & CCC_BLOCK_READ))
return -ENODEV;
card->complete_wq = alloc_workqueue("mmc_complete",
WQ_MEM_RECLAIM | WQ_HIGHPRI, 0);
-@@ -2992,6 +3010,17 @@ static int mmc_blk_probe(struct mmc_card
+@@ -3072,6 +3090,17 @@ static int mmc_blk_probe(struct mmc_card
goto out_free;
}
goto out;
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
-@@ -1814,7 +1814,8 @@ EXPORT_SYMBOL(mmc_erase);
+@@ -1819,7 +1819,8 @@ EXPORT_SYMBOL(mmc_erase);
int mmc_can_erase(struct mmc_card *card)
{
}
--- a/drivers/mmc/core/quirks.h
+++ b/drivers/mmc/core/quirks.h
-@@ -129,6 +129,14 @@ static const struct mmc_fixup __maybe_un
+@@ -130,6 +130,14 @@ static const struct mmc_fixup __maybe_un
MMC_FIXUP(CID_NAME_ANY, CID_MANFID_SANDISK_SD, 0x5344, add_quirk_sd,
MMC_QUIRK_BROKEN_SD_DISCARD),
sdhci_dumpregs(host);
--- a/include/linux/mmc/card.h
+++ b/include/linux/mmc/card.h
-@@ -296,6 +296,8 @@ struct mmc_card {
- #define MMC_QUIRK_BROKEN_SD_DISCARD (1<<14) /* Disable broken SD discard support */
+@@ -297,6 +297,8 @@ struct mmc_card {
#define MMC_QUIRK_BROKEN_SD_CACHE (1<<15) /* Disable broken SD cache support */
+ #define MMC_QUIRK_BROKEN_CACHE_FLUSH (1<<16) /* Don't flush cache until the write has occurred */
+#define MMC_QUIRK_ERASE_BROKEN (1<<31) /* Skip erase */
+
+ bool written_flag; /* Indicates eMMC has been written since power on */
bool reenable_cmdq; /* Re-enable Command Queue */
- unsigned int erase_size; /* erase size in sectors */