aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShawn Lin <shawn.lin@rock-chips.com>2017-02-15 03:35:31 -0500
committerUlf Hansson <ulf.hansson@linaro.org>2017-02-15 05:34:27 -0500
commit0e9cfcf44e4aced8d45f409dcb48a0994fa77979 (patch)
tree01b1a1d60c89f9f3202d76847909c8683f809962
parent1144c1e4ddab9339e262e2702744e8f5c6220824 (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.c80
-rw-r--r--drivers/mmc/core/mmc.c11
-rw-r--r--drivers/mmc/core/quirks.h91
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
2111static 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
2185static int mmc_blk_probe(struct mmc_card *card) 2105static 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
52static 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
16static 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
96static 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
16static const struct mmc_fixup sdio_fixup_methods[] = { 107static 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),