Skip to content

Commit edf0433

Browse files
committed
Revert "mmc: Partial revert to upstream v6.18.29"
This reverts commit b68b3ce.
1 parent 5f5a5da commit edf0433

3 files changed

Lines changed: 81 additions & 3 deletions

File tree

drivers/mmc/core/card.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,15 @@ struct mmc_fixup {
8888
#define CID_MANFID_GIGASTONE 0x12
8989
#define CID_MANFID_MICRON 0x13
9090
#define CID_MANFID_SAMSUNG 0x15
91+
#define CID_MANFID_SAMSUNG_SD 0x1b
9192
#define CID_MANFID_APACER 0x27
9293
#define CID_MANFID_SANDISK_MMC 0x45
9394
#define CID_MANFID_SWISSBIT 0x5D
9495
#define CID_MANFID_KINGSTON 0x70
96+
#define CID_MANFID_TRANSCEND_SD 0x74
9597
#define CID_MANFID_HYNIX 0x90
9698
#define CID_MANFID_KINGSTON_SD 0x9F
99+
#define CID_MANFID_LONGSYS_SD 0xAD
97100
#define CID_MANFID_NUMONYX 0xFE
98101

99102
#define END_FIXUP { NULL }
@@ -306,6 +309,11 @@ static inline int mmc_card_no_uhs_ddr50_tuning(const struct mmc_card *c)
306309
return c->quirks & MMC_QUIRK_NO_UHS_DDR50_TUNING;
307310
}
308311

312+
static inline int mmc_card_working_sd_cq(const struct mmc_card *c)
313+
{
314+
return c->quirks & MMC_QUIRK_WORKING_SD_CQ;
315+
}
316+
309317
static inline int mmc_card_broken_mdt(const struct mmc_card *c)
310318
{
311319
return c->quirks & MMC_QUIRK_BROKEN_MDT;

drivers/mmc/core/quirks.h

Lines changed: 68 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,22 @@
1818
static const struct mmc_fixup __maybe_unused mmc_sd_fixups[] = {
1919
/*
2020
* Kingston Canvas Go! Plus microSD cards never finish SD cache flush.
21-
* This has so far only been observed on cards from 11/2019, while new
22-
* cards from 2023/05 do not exhibit this behavior.
21+
* This has been observed on cards from 2019/11 and 2021/11, while new
22+
* cards from 2023/05 and 2024/08 do not exhibit this behavior.
2323
*/
24-
_FIXUP_EXT("SD64G", CID_MANFID_KINGSTON_SD, 0x5449, 2019, 11,
24+
_FIXUP_EXT(CID_NAME_ANY, CID_MANFID_KINGSTON_SD, 0x5449, 2019, CID_MONTH_ANY,
25+
0, -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd,
26+
MMC_QUIRK_BROKEN_SD_CACHE, EXT_CSD_REV_ANY),
27+
28+
_FIXUP_EXT(CID_NAME_ANY, CID_MANFID_KINGSTON_SD, 0x5449, 2020, CID_MONTH_ANY,
29+
0, -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd,
30+
MMC_QUIRK_BROKEN_SD_CACHE, EXT_CSD_REV_ANY),
31+
32+
_FIXUP_EXT(CID_NAME_ANY, CID_MANFID_KINGSTON_SD, 0x5449, 2021, CID_MONTH_ANY,
33+
0, -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd,
34+
MMC_QUIRK_BROKEN_SD_CACHE, EXT_CSD_REV_ANY),
35+
36+
_FIXUP_EXT(CID_NAME_ANY, CID_MANFID_KINGSTON_SD, 0x5449, 2022, CID_MONTH_ANY,
2537
0, -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd,
2638
MMC_QUIRK_BROKEN_SD_CACHE, EXT_CSD_REV_ANY),
2739

@@ -50,6 +62,36 @@ static const struct mmc_fixup __maybe_unused mmc_sd_fixups[] = {
5062
MMC_FIXUP(CID_NAME_ANY, CID_MANFID_SANDISK_SD, 0x5344, add_quirk_sd,
5163
MMC_QUIRK_BROKEN_SD_DISCARD),
5264

65+
/*
66+
* Samsung Pro Plus/EVO Plus/Pro Ultimate SD cards (2023) claim to cache
67+
* flush OK, but become unresponsive afterwards.
68+
*/
69+
_FIXUP_EXT(CID_NAME_ANY, CID_MANFID_SAMSUNG_SD, 0x534d, 2023, CID_MONTH_ANY,
70+
0, -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd,
71+
MMC_QUIRK_BROKEN_SD_CACHE, EXT_CSD_REV_ANY),
72+
73+
/*
74+
* Early Sandisk Extreme and Extreme Pro A2 cards never finish SD cache
75+
* flush in CQ mode. Latest card date this was seen on is 10/2020.
76+
*/
77+
_FIXUP_EXT(CID_NAME_ANY, CID_MANFID_SANDISK_SD, 0x5344, 2019, CID_MONTH_ANY,
78+
0, -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd,
79+
MMC_QUIRK_BROKEN_SD_CACHE, EXT_CSD_REV_ANY),
80+
81+
_FIXUP_EXT(CID_NAME_ANY, CID_MANFID_SANDISK_SD, 0x5344, 2020, CID_MONTH_ANY,
82+
0, -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd,
83+
MMC_QUIRK_BROKEN_SD_CACHE, EXT_CSD_REV_ANY),
84+
85+
/* SD A2 allow-list - only trust CQ on these cards */
86+
/* Raspberry Pi A2 cards */
87+
_FIXUP_EXT(CID_NAME_ANY, CID_MANFID_LONGSYS_SD, 0x4c53, CID_YEAR_ANY, CID_MONTH_ANY,
88+
cid_rev(1, 0, 0, 0), -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd,
89+
MMC_QUIRK_WORKING_SD_CQ, EXT_CSD_REV_ANY),
90+
91+
_FIXUP_EXT(CID_NAME_ANY, CID_MANFID_TRANSCEND_SD, 0x4a60, CID_YEAR_ANY, CID_MONTH_ANY,
92+
cid_rev(2, 0, 2026, 4), -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd,
93+
MMC_QUIRK_WORKING_SD_CQ, EXT_CSD_REV_ANY),
94+
5395
END_FIXUP
5496
};
5597

@@ -162,6 +204,29 @@ static const struct mmc_fixup __maybe_unused mmc_blk_fixups[] = {
162204
MMC_FIXUP("IB2932", CID_MANFID_KINGSTON, 0x0100, add_quirk_mmc,
163205
MMC_QUIRK_FIXED_SECURE_ERASE_TRIM_TIME),
164206

207+
/*
208+
* Some SD cards reports discard support while they don't
209+
*/
210+
MMC_FIXUP(CID_NAME_ANY, CID_MANFID_SANDISK_SD, 0x5344, add_quirk_sd,
211+
MMC_QUIRK_BROKEN_SD_DISCARD),
212+
213+
/*
214+
* On some Kingston SD cards, multiple erases of less than 64
215+
* sectors can cause corruption.
216+
*/
217+
MMC_FIXUP("SD16G", 0x41, 0x3432, add_quirk, MMC_QUIRK_ERASE_BROKEN),
218+
MMC_FIXUP("SD32G", 0x41, 0x3432, add_quirk, MMC_QUIRK_ERASE_BROKEN),
219+
MMC_FIXUP("SD64G", 0x41, 0x3432, add_quirk, MMC_QUIRK_ERASE_BROKEN),
220+
221+
/*
222+
* Larger Integral SD cards using rebranded Phison controllers trash
223+
* nearby flash blocks after erases.
224+
*/
225+
MMC_FIXUP("SD64G", 0x27, 0x5048, add_quirk, MMC_QUIRK_ERASE_BROKEN),
226+
MMC_FIXUP("SD128", 0x27, 0x5048, add_quirk, MMC_QUIRK_ERASE_BROKEN),
227+
MMC_FIXUP("SD256", 0x27, 0x5048, add_quirk, MMC_QUIRK_ERASE_BROKEN),
228+
MMC_FIXUP("SD512", 0x27, 0x5048, add_quirk, MMC_QUIRK_ERASE_BROKEN),
229+
165230
END_FIXUP
166231
};
167232

include/linux/mmc/card.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,8 @@ struct mmc_card {
332332
#define MMC_QUIRK_NO_UHS_DDR50_TUNING (1<<18) /* Disable DDR50 tuning */
333333
#define MMC_QUIRK_BROKEN_MDT (1<<19) /* Wrong manufacturing year */
334334
#define MMC_QUIRK_FIXED_SECURE_ERASE_TRIM_TIME (1<<20) /* Secure erase/trim time is fixed regardless of size */
335+
#define MMC_QUIRK_WORKING_SD_CQ (1<<30) /* SD card has known-good CQ implementation */
336+
#define MMC_QUIRK_ERASE_BROKEN (1<<31) /* Skip erase */
335337

336338
bool written_flag; /* Indicates eMMC has been written since power on */
337339
bool reenable_cmdq; /* Re-enable Command Queue */
@@ -356,6 +358,7 @@ struct mmc_card {
356358
struct sd_switch_caps sw_caps; /* switch (CMD6) caps */
357359
struct sd_ext_reg ext_power; /* SD extension reg for PM */
358360
struct sd_ext_reg ext_perf; /* SD extension reg for PERF */
361+
u8 *ext_reg_buf; /* 512 byte block for extension register R/W */
359362

360363
struct sd_uhs2_config uhs2_config; /* SD UHS-II config */
361364

@@ -380,6 +383,8 @@ struct mmc_card {
380383
unsigned int nr_parts;
381384

382385
struct workqueue_struct *complete_wq; /* Private workqueue */
386+
387+
unsigned int max_posted_writes; /* command queue posted write limit */
383388
};
384389

385390
static inline bool mmc_large_sector(struct mmc_card *card)

0 commit comments

Comments
 (0)