Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d60cdc30 authored by Dov Levenglick's avatar Dov Levenglick Committed by Gerrit - the friendly Code Review server
Browse files

mmc: core: set MMC_PM_KEEP_POWER for certain Hynix mmc cards



Certain Hynix eMMC 5.0 cards might reach a fast EOL if
the card's power is disabled between CMD5 and CMD0
(power off during reset).
This patch sets the MMC_PM_KEEP_POWER flag to indicate
that the card's power should be retained for suspend/resume
sequences.

Change-Id: I4bcc0f4bfd608745626816ca261369b432602c45
Signed-off-by: default avatarDov Levenglick <dovl@codeaurora.org>
parent 205e1263
Loading
Loading
Loading
Loading
+12 −0
Original line number Original line Diff line number Diff line
@@ -124,6 +124,12 @@ static void mmc_set_erase_size(struct mmc_card *card)
	mmc_init_erase(card);
	mmc_init_erase(card);
}
}


static void add_pm_flag_mmc(struct mmc_card *card, int data)
{
	if (mmc_card_mmc(card))
		card->host->pm_flags |= data;
}

static const struct mmc_fixup mmc_fixups[] = {
static const struct mmc_fixup mmc_fixups[] = {


	/* avoid HPI for specific cards */
	/* avoid HPI for specific cards */
@@ -134,6 +140,9 @@ static const struct mmc_fixup mmc_fixups[] = {
	MMC_FIXUP("MMC16G", CID_MANFID_KINGSTON, CID_OEMID_ANY,
	MMC_FIXUP("MMC16G", CID_MANFID_KINGSTON, CID_OEMID_ANY,
		add_quirk_mmc, MMC_QUIRK_CACHE_DISABLE),
		add_quirk_mmc, MMC_QUIRK_CACHE_DISABLE),


	MMC_FIXUP_EXT_CSD_REV(CID_NAME_ANY, CID_MANFID_HYNIX, CID_OEMID_ANY,
		add_pm_flag_mmc, MMC_PM_KEEP_POWER, MMC_V5_0),

	END_FIXUP
	END_FIXUP
};
};


@@ -435,6 +444,9 @@ static int mmc_read_ext_csd(struct mmc_card *card, u8 *ext_csd)
	 */
	 */
	card->ext_csd.rev = ext_csd[EXT_CSD_REV];
	card->ext_csd.rev = ext_csd[EXT_CSD_REV];


	/* fixup device after ext_csd revision field is updated */
	mmc_fixup_device(card, mmc_fixups);

	card->ext_csd.raw_sectors[0] = ext_csd[EXT_CSD_SEC_CNT + 0];
	card->ext_csd.raw_sectors[0] = ext_csd[EXT_CSD_SEC_CNT + 0];
	card->ext_csd.raw_sectors[1] = ext_csd[EXT_CSD_SEC_CNT + 1];
	card->ext_csd.raw_sectors[1] = ext_csd[EXT_CSD_SEC_CNT + 1];
	card->ext_csd.raw_sectors[2] = ext_csd[EXT_CSD_SEC_CNT + 2];
	card->ext_csd.raw_sectors[2] = ext_csd[EXT_CSD_SEC_CNT + 2];
+1 −0
Original line number Original line Diff line number Diff line
@@ -465,6 +465,7 @@ struct mmc_fixup {
#define CID_MANFID_MICRON	0x13
#define CID_MANFID_MICRON	0x13
#define CID_MANFID_SAMSUNG	0x15
#define CID_MANFID_SAMSUNG	0x15
#define CID_MANFID_KINGSTON	0x70
#define CID_MANFID_KINGSTON	0x70
#define CID_MANFID_HYNIX	0x90


#define CID_MANFID_ANY (-1u)
#define CID_MANFID_ANY (-1u)
#define CID_OEMID_ANY ((unsigned short) -1)
#define CID_OEMID_ANY ((unsigned short) -1)