|
18 | 18 | static const struct mmc_fixup __maybe_unused mmc_sd_fixups[] = { |
19 | 19 | /* |
20 | 20 | * 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. |
23 | 23 | */ |
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, |
25 | 37 | 0, -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd, |
26 | 38 | MMC_QUIRK_BROKEN_SD_CACHE, EXT_CSD_REV_ANY), |
27 | 39 |
|
@@ -50,6 +62,36 @@ static const struct mmc_fixup __maybe_unused mmc_sd_fixups[] = { |
50 | 62 | MMC_FIXUP(CID_NAME_ANY, CID_MANFID_SANDISK_SD, 0x5344, add_quirk_sd, |
51 | 63 | MMC_QUIRK_BROKEN_SD_DISCARD), |
52 | 64 |
|
| 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 | + |
53 | 95 | END_FIXUP |
54 | 96 | }; |
55 | 97 |
|
@@ -162,6 +204,29 @@ static const struct mmc_fixup __maybe_unused mmc_blk_fixups[] = { |
162 | 204 | MMC_FIXUP("IB2932", CID_MANFID_KINGSTON, 0x0100, add_quirk_mmc, |
163 | 205 | MMC_QUIRK_FIXED_SECURE_ERASE_TRIM_TIME), |
164 | 206 |
|
| 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 | + |
165 | 230 | END_FIXUP |
166 | 231 | }; |
167 | 232 |
|
|
0 commit comments