diff options
| author | Shawn Lin <shawn.lin@rock-chips.com> | 2017-02-15 03:35:31 -0500 |
|---|---|---|
| committer | Ulf Hansson <ulf.hansson@linaro.org> | 2017-02-15 05:34:27 -0500 |
| commit | 0e9cfcf44e4aced8d45f409dcb48a0994fa77979 (patch) | |
| tree | 01b1a1d60c89f9f3202d76847909c8683f809962 | |
| parent | 1144c1e4ddab9339e262e2702744e8f5c6220824 (diff) | |
mmc: core: move all quirks together into quirks.h
It's not appreciated to place quirks everywhere, let's
put them together just like what we do for USB, PCI etc.
Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
| -rw-r--r-- | drivers/mmc/core/block.c | 80 | ||||
| -rw-r--r-- | drivers/mmc/core/mmc.c | 11 | ||||
| -rw-r--r-- | drivers/mmc/core/quirks.h | 91 |
3 files changed, 91 insertions, 91 deletions
diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c index 6f3a5ff85590..5bf1fba39349 100644 --- a/drivers/mmc/core/block.c +++ b/drivers/mmc/core/block.c | |||
| @@ -61,12 +61,6 @@ MODULE_ALIAS("mmc:block"); | |||
| 61 | #endif | 61 | #endif |
| 62 | #define MODULE_PARAM_PREFIX "mmcblk." | 62 | #define MODULE_PARAM_PREFIX "mmcblk." |
| 63 | 63 | ||
| 64 | #define INAND_CMD38_ARG_EXT_CSD 113 | ||
| 65 | #define INAND_CMD38_ARG_ERASE 0x00 | ||
| 66 | #define INAND_CMD38_ARG_TRIM 0x01 | ||
| 67 | #define INAND_CMD38_ARG_SECERASE 0x80 | ||
| 68 | #define INAND_CMD38_ARG_SECTRIM1 0x81 | ||
| 69 | #define INAND_CMD38_ARG_SECTRIM2 0x88 | ||
| 70 | #define MMC_BLK_TIMEOUT_MS (10 * 60 * 1000) /* 10 minute timeout */ | 64 | #define MMC_BLK_TIMEOUT_MS (10 * 60 * 1000) /* 10 minute timeout */ |
| 71 | #define MMC_SANITIZE_REQ_TIMEOUT 240000 | 65 | #define MMC_SANITIZE_REQ_TIMEOUT 240000 |
| 72 | #define MMC_EXTRACT_INDEX_FROM_ARG(x) ((x & 0x00FF0000) >> 16) | 66 | #define MMC_EXTRACT_INDEX_FROM_ARG(x) ((x & 0x00FF0000) >> 16) |
| @@ -2108,80 +2102,6 @@ force_ro_fail: | |||
| 2108 | return ret; | 2102 | return ret; |
| 2109 | } | 2103 | } |
| 2110 | 2104 | ||
| 2111 | static const struct mmc_fixup blk_fixups[] = | ||
| 2112 | { | ||
| 2113 | MMC_FIXUP("SEM02G", CID_MANFID_SANDISK, 0x100, add_quirk, | ||
| 2114 | MMC_QUIRK_INAND_CMD38), | ||
| 2115 | MMC_FIXUP("SEM04G", CID_MANFID_SANDISK, 0x100, add_quirk, | ||
| 2116 | MMC_QUIRK_INAND_CMD38), | ||
| 2117 | MMC_FIXUP("SEM08G", CID_MANFID_SANDISK, 0x100, add_quirk, | ||
| 2118 | MMC_QUIRK_INAND_CMD38), | ||
| 2119 | MMC_FIXUP("SEM16G", CID_MANFID_SANDISK, 0x100, add_quirk, | ||
| 2120 | MMC_QUIRK_INAND_CMD38), | ||
| 2121 | MMC_FIXUP("SEM32G", CID_MANFID_SANDISK, 0x100, add_quirk, | ||
| 2122 | MMC_QUIRK_INAND_CMD38), | ||
| 2123 | |||
| 2124 | /* | ||
| 2125 | * Some MMC cards experience performance degradation with CMD23 | ||
| 2126 | * instead of CMD12-bounded multiblock transfers. For now we'll | ||
| 2127 | * black list what's bad... | ||
| 2128 | * - Certain Toshiba cards. | ||
| 2129 | * | ||
| 2130 | * N.B. This doesn't affect SD cards. | ||
| 2131 | */ | ||
| 2132 | MMC_FIXUP("SDMB-32", CID_MANFID_SANDISK, CID_OEMID_ANY, add_quirk_mmc, | ||
| 2133 | MMC_QUIRK_BLK_NO_CMD23), | ||
| 2134 | MMC_FIXUP("SDM032", CID_MANFID_SANDISK, CID_OEMID_ANY, add_quirk_mmc, | ||
| 2135 | MMC_QUIRK_BLK_NO_CMD23), | ||
| 2136 | MMC_FIXUP("MMC08G", CID_MANFID_TOSHIBA, CID_OEMID_ANY, add_quirk_mmc, | ||
| 2137 | MMC_QUIRK_BLK_NO_CMD23), | ||
| 2138 | MMC_FIXUP("MMC16G", CID_MANFID_TOSHIBA, CID_OEMID_ANY, add_quirk_mmc, | ||
| 2139 | MMC_QUIRK_BLK_NO_CMD23), | ||
| 2140 | MMC_FIXUP("MMC32G", CID_MANFID_TOSHIBA, CID_OEMID_ANY, add_quirk_mmc, | ||
| 2141 | MMC_QUIRK_BLK_NO_CMD23), | ||
| 2142 | |||
| 2143 | /* | ||
| 2144 | * Some MMC cards need longer data read timeout than indicated in CSD. | ||
| 2145 | */ | ||
| 2146 | MMC_FIXUP(CID_NAME_ANY, CID_MANFID_MICRON, 0x200, add_quirk_mmc, | ||
| 2147 | MMC_QUIRK_LONG_READ_TIME), | ||
| 2148 | MMC_FIXUP("008GE0", CID_MANFID_TOSHIBA, CID_OEMID_ANY, add_quirk_mmc, | ||
| 2149 | MMC_QUIRK_LONG_READ_TIME), | ||
| 2150 | |||
| 2151 | /* | ||
| 2152 | * On these Samsung MoviNAND parts, performing secure erase or | ||
| 2153 | * secure trim can result in unrecoverable corruption due to a | ||
| 2154 | * firmware bug. | ||
| 2155 | */ | ||
| 2156 | MMC_FIXUP("M8G2FA", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc, | ||
| 2157 | MMC_QUIRK_SEC_ERASE_TRIM_BROKEN), | ||
| 2158 | MMC_FIXUP("MAG4FA", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc, | ||
| 2159 | MMC_QUIRK_SEC_ERASE_TRIM_BROKEN), | ||
| 2160 | MMC_FIXUP("MBG8FA", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc, | ||
| 2161 | MMC_QUIRK_SEC_ERASE_TRIM_BROKEN), | ||
| 2162 | MMC_FIXUP("MCGAFA", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc, | ||
| 2163 | MMC_QUIRK_SEC_ERASE_TRIM_BROKEN), | ||
| 2164 | MMC_FIXUP("VAL00M", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc, | ||
| 2165 | MMC_QUIRK_SEC_ERASE_TRIM_BROKEN), | ||
| 2166 | MMC_FIXUP("VYL00M", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc, | ||
| 2167 | MMC_QUIRK_SEC_ERASE_TRIM_BROKEN), | ||
| 2168 | MMC_FIXUP("KYL00M", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc, | ||
| 2169 | MMC_QUIRK_SEC_ERASE_TRIM_BROKEN), | ||
| 2170 | MMC_FIXUP("VZL00M", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc, | ||
| 2171 | MMC_QUIRK_SEC_ERASE_TRIM_BROKEN), | ||
| 2172 | |||
| 2173 | /* | ||
| 2174 | * On Some Kingston eMMCs, performing trim can result in | ||
| 2175 | * unrecoverable data conrruption occasionally due to a firmware bug. | ||
| 2176 | */ | ||
| 2177 | MMC_FIXUP("V10008", CID_MANFID_KINGSTON, CID_OEMID_ANY, add_quirk_mmc, | ||
| 2178 | MMC_QUIRK_TRIM_BROKEN), | ||
| 2179 | MMC_FIXUP("V10016", CID_MANFID_KINGSTON, CID_OEMID_ANY, add_quirk_mmc, | ||
| 2180 | MMC_QUIRK_TRIM_BROKEN), | ||
| 2181 | |||
| 2182 | END_FIXUP | ||
| 2183 | }; | ||
| 2184 | |||
| 2185 | static int mmc_blk_probe(struct mmc_card *card) | 2105 | static int mmc_blk_probe(struct mmc_card *card) |
| 2186 | { | 2106 | { |
| 2187 | struct mmc_blk_data *md, *part_md; | 2107 | struct mmc_blk_data *md, *part_md; |
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index f830970958e6..7fd722868875 100644 --- a/drivers/mmc/core/mmc.c +++ b/drivers/mmc/core/mmc.c | |||
| @@ -49,17 +49,6 @@ static const unsigned int tacc_mant[] = { | |||
| 49 | 35, 40, 45, 50, 55, 60, 70, 80, | 49 | 35, 40, 45, 50, 55, 60, 70, 80, |
| 50 | }; | 50 | }; |
| 51 | 51 | ||
| 52 | static const struct mmc_fixup mmc_ext_csd_fixups[] = { | ||
| 53 | /* | ||
| 54 | * Certain Hynix eMMC 4.41 cards might get broken when HPI feature | ||
| 55 | * is used so disable the HPI feature for such buggy cards. | ||
| 56 | */ | ||
| 57 | MMC_FIXUP_EXT_CSD_REV(CID_NAME_ANY, CID_MANFID_HYNIX, | ||
| 58 | 0x014a, add_quirk, MMC_QUIRK_BROKEN_HPI, 5), | ||
| 59 | |||
| 60 | END_FIXUP | ||
| 61 | }; | ||
| 62 | |||
| 63 | #define UNSTUFF_BITS(resp,start,size) \ | 52 | #define UNSTUFF_BITS(resp,start,size) \ |
| 64 | ({ \ | 53 | ({ \ |
| 65 | const int __size = size; \ | 54 | const int __size = size; \ |
diff --git a/drivers/mmc/core/quirks.h b/drivers/mmc/core/quirks.h index f6d72173168a..7c195e744b33 100644 --- a/drivers/mmc/core/quirks.h +++ b/drivers/mmc/core/quirks.h | |||
| @@ -13,6 +13,97 @@ | |||
| 13 | 13 | ||
| 14 | #include "card.h" | 14 | #include "card.h" |
| 15 | 15 | ||
| 16 | static const struct mmc_fixup blk_fixups[] = { | ||
| 17 | #define INAND_CMD38_ARG_EXT_CSD 113 | ||
| 18 | #define INAND_CMD38_ARG_ERASE 0x00 | ||
| 19 | #define INAND_CMD38_ARG_TRIM 0x01 | ||
| 20 | #define INAND_CMD38_ARG_SECERASE 0x80 | ||
| 21 | #define INAND_CMD38_ARG_SECTRIM1 0x81 | ||
| 22 | #define INAND_CMD38_ARG_SECTRIM2 0x88 | ||
| 23 | /* CMD38 argument is passed through EXT_CSD[113] */ | ||
| 24 | MMC_FIXUP("SEM02G", CID_MANFID_SANDISK, 0x100, add_quirk, | ||
| 25 | MMC_QUIRK_INAND_CMD38), | ||
| 26 | MMC_FIXUP("SEM04G", CID_MANFID_SANDISK, 0x100, add_quirk, | ||
| 27 | MMC_QUIRK_INAND_CMD38), | ||
| 28 | MMC_FIXUP("SEM08G", CID_MANFID_SANDISK, 0x100, add_quirk, | ||
| 29 | MMC_QUIRK_INAND_CMD38), | ||
| 30 | MMC_FIXUP("SEM16G", CID_MANFID_SANDISK, 0x100, add_quirk, | ||
| 31 | MMC_QUIRK_INAND_CMD38), | ||
| 32 | MMC_FIXUP("SEM32G", CID_MANFID_SANDISK, 0x100, add_quirk, | ||
| 33 | MMC_QUIRK_INAND_CMD38), | ||
| 34 | |||
| 35 | /* | ||
| 36 | * Some MMC cards experience performance degradation with CMD23 | ||
| 37 | * instead of CMD12-bounded multiblock transfers. For now we'll | ||
| 38 | * black list what's bad... | ||
| 39 | * - Certain Toshiba cards. | ||
| 40 | * | ||
| 41 | * N.B. This doesn't affect SD cards. | ||
| 42 | */ | ||
| 43 | MMC_FIXUP("SDMB-32", CID_MANFID_SANDISK, CID_OEMID_ANY, add_quirk_mmc, | ||
| 44 | MMC_QUIRK_BLK_NO_CMD23), | ||
| 45 | MMC_FIXUP("SDM032", CID_MANFID_SANDISK, CID_OEMID_ANY, add_quirk_mmc, | ||
| 46 | MMC_QUIRK_BLK_NO_CMD23), | ||
| 47 | MMC_FIXUP("MMC08G", CID_MANFID_TOSHIBA, CID_OEMID_ANY, add_quirk_mmc, | ||
| 48 | MMC_QUIRK_BLK_NO_CMD23), | ||
| 49 | MMC_FIXUP("MMC16G", CID_MANFID_TOSHIBA, CID_OEMID_ANY, add_quirk_mmc, | ||
| 50 | MMC_QUIRK_BLK_NO_CMD23), | ||
| 51 | MMC_FIXUP("MMC32G", CID_MANFID_TOSHIBA, CID_OEMID_ANY, add_quirk_mmc, | ||
| 52 | MMC_QUIRK_BLK_NO_CMD23), | ||
| 53 | |||
| 54 | /* | ||
| 55 | * Some MMC cards need longer data read timeout than indicated in CSD. | ||
| 56 | */ | ||
| 57 | MMC_FIXUP(CID_NAME_ANY, CID_MANFID_MICRON, 0x200, add_quirk_mmc, | ||
| 58 | MMC_QUIRK_LONG_READ_TIME), | ||
| 59 | MMC_FIXUP("008GE0", CID_MANFID_TOSHIBA, CID_OEMID_ANY, add_quirk_mmc, | ||
| 60 | MMC_QUIRK_LONG_READ_TIME), | ||
| 61 | |||
| 62 | /* | ||
| 63 | * On these Samsung MoviNAND parts, performing secure erase or | ||
| 64 | * secure trim can result in unrecoverable corruption due to a | ||
| 65 | * firmware bug. | ||
| 66 | */ | ||
| 67 | MMC_FIXUP("M8G2FA", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc, | ||
| 68 | MMC_QUIRK_SEC_ERASE_TRIM_BROKEN), | ||
| 69 | MMC_FIXUP("MAG4FA", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc, | ||
| 70 | MMC_QUIRK_SEC_ERASE_TRIM_BROKEN), | ||
| 71 | MMC_FIXUP("MBG8FA", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc, | ||
| 72 | MMC_QUIRK_SEC_ERASE_TRIM_BROKEN), | ||
| 73 | MMC_FIXUP("MCGAFA", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc, | ||
| 74 | MMC_QUIRK_SEC_ERASE_TRIM_BROKEN), | ||
| 75 | MMC_FIXUP("VAL00M", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc, | ||
| 76 | MMC_QUIRK_SEC_ERASE_TRIM_BROKEN), | ||
| 77 | MMC_FIXUP("VYL00M", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc, | ||
| 78 | MMC_QUIRK_SEC_ERASE_TRIM_BROKEN), | ||
| 79 | MMC_FIXUP("KYL00M", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc, | ||
| 80 | MMC_QUIRK_SEC_ERASE_TRIM_BROKEN), | ||
| 81 | MMC_FIXUP("VZL00M", CID_MANFID_SAMSUNG, CID_OEMID_ANY, add_quirk_mmc, | ||
| 82 | MMC_QUIRK_SEC_ERASE_TRIM_BROKEN), | ||
| 83 | |||
| 84 | /* | ||
| 85 | * On Some Kingston eMMCs, performing trim can result in | ||
| 86 | * unrecoverable data conrruption occasionally due to a firmware bug. | ||
| 87 | */ | ||
| 88 | MMC_FIXUP("V10008", CID_MANFID_KINGSTON, CID_OEMID_ANY, add_quirk_mmc, | ||
| 89 | MMC_QUIRK_TRIM_BROKEN), | ||
| 90 | MMC_FIXUP("V10016", CID_MANFID_KINGSTON, CID_OEMID_ANY, add_quirk_mmc, | ||
| 91 | MMC_QUIRK_TRIM_BROKEN), | ||
| 92 | |||
| 93 | END_FIXUP | ||
| 94 | }; | ||
| 95 | |||
| 96 | static const struct mmc_fixup mmc_ext_csd_fixups[] = { | ||
| 97 | /* | ||
| 98 | * Certain Hynix eMMC 4.41 cards might get broken when HPI feature | ||
| 99 | * is used so disable the HPI feature for such buggy cards. | ||
| 100 | */ | ||
| 101 | MMC_FIXUP_EXT_CSD_REV(CID_NAME_ANY, CID_MANFID_HYNIX, | ||
| 102 | 0x014a, add_quirk, MMC_QUIRK_BROKEN_HPI, 5), | ||
| 103 | |||
| 104 | END_FIXUP | ||
| 105 | }; | ||
| 106 | |||
| 16 | static const struct mmc_fixup sdio_fixup_methods[] = { | 107 | static const struct mmc_fixup sdio_fixup_methods[] = { |
| 17 | SDIO_FIXUP(SDIO_VENDOR_ID_TI, SDIO_DEVICE_ID_TI_WL1271, | 108 | SDIO_FIXUP(SDIO_VENDOR_ID_TI, SDIO_DEVICE_ID_TI_WL1271, |
| 18 | add_quirk, MMC_QUIRK_NONSTD_FUNC_IF), | 109 | add_quirk, MMC_QUIRK_NONSTD_FUNC_IF), |
