Skip to content

Commit b2dba81

Browse files
committed
Revert "mmc: Revert to upstream v6.12.87"
This reverts commit 5ee0d54.
1 parent a728036 commit b2dba81

3 files changed

Lines changed: 73 additions & 6 deletions

File tree

drivers/mmc/core/card.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,13 @@ 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_SWISSBIT 0x5D
9394
#define CID_MANFID_KINGSTON 0x70
9495
#define CID_MANFID_HYNIX 0x90
9596
#define CID_MANFID_KINGSTON_SD 0x9F
97+
#define CID_MANFID_LONGSYS_SD 0xAD
9698
#define CID_MANFID_NUMONYX 0xFE
9799

98100
#define END_FIXUP { NULL }
@@ -305,4 +307,9 @@ static inline int mmc_card_fixed_secure_erase_trim_time(const struct mmc_card *c
305307
return c->quirks & MMC_QUIRK_FIXED_SECURE_ERASE_TRIM_TIME;
306308
}
307309

310+
static inline int mmc_card_working_sd_cq(const struct mmc_card *c)
311+
{
312+
return c->quirks & MMC_QUIRK_WORKING_SD_CQ;
313+
}
314+
308315
#endif

drivers/mmc/core/quirks.h

Lines changed: 61 additions & 6 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

@@ -45,10 +57,30 @@ static const struct mmc_fixup __maybe_unused mmc_sd_fixups[] = {
4557
MMC_QUIRK_NO_UHS_DDR50_TUNING, EXT_CSD_REV_ANY),
4658

4759
/*
48-
* Some SD cards reports discard support while they don't
60+
* Samsung Pro Plus/EVO Plus/Pro Ultimate SD cards (2023) claim to cache
61+
* flush OK, but become unresponsive afterwards.
4962
*/
50-
MMC_FIXUP(CID_NAME_ANY, CID_MANFID_SANDISK_SD, 0x5344, add_quirk_sd,
51-
MMC_QUIRK_BROKEN_SD_DISCARD),
63+
_FIXUP_EXT(CID_NAME_ANY, CID_MANFID_SAMSUNG_SD, 0x534d, 2023, CID_MONTH_ANY,
64+
0, -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd,
65+
MMC_QUIRK_BROKEN_SD_CACHE, EXT_CSD_REV_ANY),
66+
67+
/*
68+
* Early Sandisk Extreme and Extreme Pro A2 cards never finish SD cache
69+
* flush in CQ mode. Latest card date this was seen on is 10/2020.
70+
*/
71+
_FIXUP_EXT(CID_NAME_ANY, CID_MANFID_SANDISK_SD, 0x5344, 2019, CID_MONTH_ANY,
72+
0, -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd,
73+
MMC_QUIRK_BROKEN_SD_CACHE, EXT_CSD_REV_ANY),
74+
75+
_FIXUP_EXT(CID_NAME_ANY, CID_MANFID_SANDISK_SD, 0x5344, 2020, CID_MONTH_ANY,
76+
0, -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd,
77+
MMC_QUIRK_BROKEN_SD_CACHE, EXT_CSD_REV_ANY),
78+
79+
/* SD A2 allow-list - only trust CQ on these cards */
80+
/* Raspberry Pi A2 cards */
81+
_FIXUP_EXT(CID_NAME_ANY, CID_MANFID_LONGSYS_SD, 0x4c53, CID_YEAR_ANY, CID_MONTH_ANY,
82+
cid_rev(1, 0, 0, 0), -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd,
83+
MMC_QUIRK_WORKING_SD_CQ, EXT_CSD_REV_ANY),
5284

5385
END_FIXUP
5486
};
@@ -162,6 +194,29 @@ static const struct mmc_fixup __maybe_unused mmc_blk_fixups[] = {
162194
MMC_FIXUP("IB2932", CID_MANFID_KINGSTON, 0x0100, add_quirk_mmc,
163195
MMC_QUIRK_FIXED_SECURE_ERASE_TRIM_TIME),
164196

197+
/*
198+
* Some SD cards reports discard support while they don't
199+
*/
200+
MMC_FIXUP(CID_NAME_ANY, CID_MANFID_SANDISK_SD, 0x5344, add_quirk_sd,
201+
MMC_QUIRK_BROKEN_SD_DISCARD),
202+
203+
/*
204+
* On some Kingston SD cards, multiple erases of less than 64
205+
* sectors can cause corruption.
206+
*/
207+
MMC_FIXUP("SD16G", 0x41, 0x3432, add_quirk, MMC_QUIRK_ERASE_BROKEN),
208+
MMC_FIXUP("SD32G", 0x41, 0x3432, add_quirk, MMC_QUIRK_ERASE_BROKEN),
209+
MMC_FIXUP("SD64G", 0x41, 0x3432, add_quirk, MMC_QUIRK_ERASE_BROKEN),
210+
211+
/*
212+
* Larger Integral SD cards using rebranded Phison controllers trash
213+
* nearby flash blocks after erases.
214+
*/
215+
MMC_FIXUP("SD64G", 0x27, 0x5048, add_quirk, MMC_QUIRK_ERASE_BROKEN),
216+
MMC_FIXUP("SD128", 0x27, 0x5048, add_quirk, MMC_QUIRK_ERASE_BROKEN),
217+
MMC_FIXUP("SD256", 0x27, 0x5048, add_quirk, MMC_QUIRK_ERASE_BROKEN),
218+
MMC_FIXUP("SD512", 0x27, 0x5048, add_quirk, MMC_QUIRK_ERASE_BROKEN),
219+
165220
END_FIXUP
166221
};
167222

include/linux/mmc/card.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,8 @@ struct mmc_card {
297297
#define MMC_QUIRK_BROKEN_SD_POWEROFF_NOTIFY (1<<17) /* Disable broken SD poweroff notify support */
298298
#define MMC_QUIRK_NO_UHS_DDR50_TUNING (1<<18) /* Disable DDR50 tuning */
299299
#define MMC_QUIRK_FIXED_SECURE_ERASE_TRIM_TIME (1<<20) /* Secure erase/trim time is fixed regardless of size */
300+
#define MMC_QUIRK_WORKING_SD_CQ (1<<30) /* SD card has known-good CQ implementation */
301+
#define MMC_QUIRK_ERASE_BROKEN (1<<31) /* Skip erase */
300302

301303
bool written_flag; /* Indicates eMMC has been written since power on */
302304
bool reenable_cmdq; /* Re-enable Command Queue */
@@ -321,6 +323,7 @@ struct mmc_card {
321323
struct sd_switch_caps sw_caps; /* switch (CMD6) caps */
322324
struct sd_ext_reg ext_power; /* SD extension reg for PM */
323325
struct sd_ext_reg ext_perf; /* SD extension reg for PERF */
326+
u8 *ext_reg_buf; /* 512 byte block for extension register R/W */
324327

325328
unsigned int sdio_funcs; /* number of SDIO functions */
326329
atomic_t sdio_funcs_probed; /* number of probed SDIO funcs */
@@ -343,6 +346,8 @@ struct mmc_card {
343346
unsigned int nr_parts;
344347

345348
struct workqueue_struct *complete_wq; /* Private workqueue */
349+
350+
unsigned int max_posted_writes; /* command queue posted write limit */
346351
};
347352

348353
static inline bool mmc_large_sector(struct mmc_card *card)

0 commit comments

Comments
 (0)