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), |