Commit | Line | Data |
---|---|---|
d2912cb1 | 1 | // SPDX-License-Identifier: GPL-2.0-only |
7ea239d9 | 2 | /* |
70f10482 | 3 | * linux/drivers/mmc/core/sd.c |
7ea239d9 PO |
4 | * |
5 | * Copyright (C) 2003-2004 Russell King, All Rights Reserved. | |
6 | * SD support Copyright (C) 2004 Ian Molton, All Rights Reserved. | |
7 | * Copyright (C) 2005-2007 Pierre Ossman, All Rights Reserved. | |
7ea239d9 PO |
8 | */ |
9 | ||
10 | #include <linux/err.h> | |
9288cac0 | 11 | #include <linux/sizes.h> |
5a0e3ad6 | 12 | #include <linux/slab.h> |
0205a904 | 13 | #include <linux/stat.h> |
3b791214 | 14 | #include <linux/string.h> |
0cb403a2 | 15 | #include <linux/pm_runtime.h> |
ac9d2555 | 16 | #include <linux/random.h> |
24b83deb | 17 | #include <linux/scatterlist.h> |
f5d8a5fe | 18 | #include <linux/sysfs.h> |
7ea239d9 PO |
19 | |
20 | #include <linux/mmc/host.h> | |
21 | #include <linux/mmc/card.h> | |
22 | #include <linux/mmc/mmc.h> | |
3373c0ae | 23 | #include <linux/mmc/sd.h> |
7ea239d9 PO |
24 | |
25 | #include "core.h" | |
4facdde1 | 26 | #include "card.h" |
5857b29b | 27 | #include "host.h" |
4101c16a | 28 | #include "bus.h" |
7ea239d9 | 29 | #include "mmc_ops.h" |
469e5e47 | 30 | #include "quirks.h" |
ce101496 | 31 | #include "sd.h" |
7ea239d9 PO |
32 | #include "sd_ops.h" |
33 | ||
7ea239d9 PO |
34 | static const unsigned int tran_exp[] = { |
35 | 10000, 100000, 1000000, 10000000, | |
36 | 0, 0, 0, 0 | |
37 | }; | |
38 | ||
39 | static const unsigned char tran_mant[] = { | |
40 | 0, 10, 12, 13, 15, 20, 25, 30, | |
41 | 35, 40, 45, 50, 55, 60, 70, 80, | |
42 | }; | |
43 | ||
4406ae21 | 44 | static const unsigned int taac_exp[] = { |
7ea239d9 PO |
45 | 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, |
46 | }; | |
47 | ||
4406ae21 | 48 | static const unsigned int taac_mant[] = { |
7ea239d9 PO |
49 | 0, 10, 12, 13, 15, 20, 25, 30, |
50 | 35, 40, 45, 50, 55, 60, 70, 80, | |
51 | }; | |
52 | ||
9288cac0 WS |
53 | static const unsigned int sd_au_size[] = { |
54 | 0, SZ_16K / 512, SZ_32K / 512, SZ_64K / 512, | |
55 | SZ_128K / 512, SZ_256K / 512, SZ_512K / 512, SZ_1M / 512, | |
56 | SZ_2M / 512, SZ_4M / 512, SZ_8M / 512, (SZ_8M + SZ_4M) / 512, | |
57 | SZ_16M / 512, (SZ_16M + SZ_8M) / 512, SZ_32M / 512, SZ_64M / 512, | |
58 | }; | |
59 | ||
379f56c2 | 60 | #define SD_POWEROFF_NOTIFY_TIMEOUT_MS 1000 |
130206a6 | 61 | #define SD_WRITE_EXTR_SINGLE_TIMEOUT_MS 1000 |
2c5d4276 UH |
62 | |
63 | struct sd_busy_data { | |
64 | struct mmc_card *card; | |
65 | u8 *reg_buf; | |
66 | }; | |
67 | ||
7ea239d9 PO |
68 | /* |
69 | * Given the decoded CSD structure, decode the raw CID to our CID structure. | |
70 | */ | |
71578a1e | 71 | void mmc_decode_cid(struct mmc_card *card) |
7ea239d9 PO |
72 | { |
73 | u32 *resp = card->raw_cid; | |
74 | ||
ac9d2555 LW |
75 | /* |
76 | * Add the raw card ID (cid) data to the entropy pool. It doesn't | |
77 | * matter that not all of it is unique, it's just bonus entropy. | |
78 | */ | |
79 | add_device_randomness(&card->raw_cid, sizeof(card->raw_cid)); | |
80 | ||
7ea239d9 PO |
81 | /* |
82 | * SD doesn't currently have a version field so we will | |
83 | * have to assume we can parse this. | |
84 | */ | |
38fb6997 AA |
85 | card->cid.manfid = unstuff_bits(resp, 120, 8); |
86 | card->cid.oemid = unstuff_bits(resp, 104, 16); | |
87 | card->cid.prod_name[0] = unstuff_bits(resp, 96, 8); | |
88 | card->cid.prod_name[1] = unstuff_bits(resp, 88, 8); | |
89 | card->cid.prod_name[2] = unstuff_bits(resp, 80, 8); | |
90 | card->cid.prod_name[3] = unstuff_bits(resp, 72, 8); | |
91 | card->cid.prod_name[4] = unstuff_bits(resp, 64, 8); | |
92 | card->cid.hwrev = unstuff_bits(resp, 60, 4); | |
93 | card->cid.fwrev = unstuff_bits(resp, 56, 4); | |
94 | card->cid.serial = unstuff_bits(resp, 24, 32); | |
95 | card->cid.year = unstuff_bits(resp, 12, 8); | |
96 | card->cid.month = unstuff_bits(resp, 8, 4); | |
7ea239d9 PO |
97 | |
98 | card->cid.year += 2000; /* SD cards year offset */ | |
3b791214 DS |
99 | |
100 | /* some product names may include trailing whitespace */ | |
101 | strim(card->cid.prod_name); | |
7ea239d9 PO |
102 | } |
103 | ||
104 | /* | |
105 | * Given a 128-bit response, decode to our card CSD structure. | |
106 | */ | |
fce2ce78 | 107 | static int mmc_decode_csd(struct mmc_card *card, bool is_sduc) |
7ea239d9 PO |
108 | { |
109 | struct mmc_csd *csd = &card->csd; | |
110 | unsigned int e, m, csd_struct; | |
111 | u32 *resp = card->raw_csd; | |
112 | ||
38fb6997 | 113 | csd_struct = unstuff_bits(resp, 126, 2); |
7ea239d9 PO |
114 | |
115 | switch (csd_struct) { | |
116 | case 0: | |
38fb6997 AA |
117 | m = unstuff_bits(resp, 115, 4); |
118 | e = unstuff_bits(resp, 112, 3); | |
4406ae21 | 119 | csd->taac_ns = (taac_exp[e] * taac_mant[m] + 9) / 10; |
38fb6997 | 120 | csd->taac_clks = unstuff_bits(resp, 104, 8) * 100; |
7ea239d9 | 121 | |
38fb6997 AA |
122 | m = unstuff_bits(resp, 99, 4); |
123 | e = unstuff_bits(resp, 96, 3); | |
7ea239d9 | 124 | csd->max_dtr = tran_exp[e] * tran_mant[m]; |
38fb6997 | 125 | csd->cmdclass = unstuff_bits(resp, 84, 12); |
7ea239d9 | 126 | |
38fb6997 AA |
127 | e = unstuff_bits(resp, 47, 3); |
128 | m = unstuff_bits(resp, 62, 12); | |
7ea239d9 PO |
129 | csd->capacity = (1 + m) << (e + 2); |
130 | ||
38fb6997 AA |
131 | csd->read_blkbits = unstuff_bits(resp, 80, 4); |
132 | csd->read_partial = unstuff_bits(resp, 79, 1); | |
133 | csd->write_misalign = unstuff_bits(resp, 78, 1); | |
134 | csd->read_misalign = unstuff_bits(resp, 77, 1); | |
135 | csd->dsr_imp = unstuff_bits(resp, 76, 1); | |
136 | csd->r2w_factor = unstuff_bits(resp, 26, 3); | |
137 | csd->write_blkbits = unstuff_bits(resp, 22, 4); | |
138 | csd->write_partial = unstuff_bits(resp, 21, 1); | |
dfe86cba | 139 | |
38fb6997 | 140 | if (unstuff_bits(resp, 46, 1)) { |
dfe86cba AH |
141 | csd->erase_size = 1; |
142 | } else if (csd->write_blkbits >= 9) { | |
38fb6997 | 143 | csd->erase_size = unstuff_bits(resp, 39, 7) + 1; |
dfe86cba AH |
144 | csd->erase_size <<= csd->write_blkbits - 9; |
145 | } | |
917a5336 | 146 | |
38fb6997 | 147 | if (unstuff_bits(resp, 13, 1)) |
917a5336 | 148 | mmc_card_set_readonly(card); |
7ea239d9 PO |
149 | break; |
150 | case 1: | |
fce2ce78 | 151 | case 2: |
7ea239d9 | 152 | /* |
fce2ce78 AA |
153 | * This is a block-addressed SDHC, SDXC or SDUC card. |
154 | * Most interesting fields are unused and have fixed | |
7ea239d9 PO |
155 | * values. To avoid getting tripped by buggy cards, |
156 | * we assume those fixed values ourselves. | |
157 | */ | |
158 | mmc_card_set_blockaddr(card); | |
159 | ||
4406ae21 SL |
160 | csd->taac_ns = 0; /* Unused */ |
161 | csd->taac_clks = 0; /* Unused */ | |
7ea239d9 | 162 | |
38fb6997 AA |
163 | m = unstuff_bits(resp, 99, 4); |
164 | e = unstuff_bits(resp, 96, 3); | |
7ea239d9 | 165 | csd->max_dtr = tran_exp[e] * tran_mant[m]; |
38fb6997 | 166 | csd->cmdclass = unstuff_bits(resp, 84, 12); |
3a303511 | 167 | |
fce2ce78 AA |
168 | if (csd_struct == 1) |
169 | m = unstuff_bits(resp, 48, 22); | |
170 | else | |
171 | m = unstuff_bits(resp, 48, 28); | |
172 | csd->c_size = m; | |
173 | ||
174 | if (csd->c_size >= 0x400000 && is_sduc) | |
175 | mmc_card_set_ult_capacity(card); | |
176 | else if (csd->c_size >= 0xFFFF) | |
3a303511 | 177 | mmc_card_set_ext_capacity(card); |
7ea239d9 | 178 | |
fce2ce78 | 179 | csd->capacity = (1 + (typeof(sector_t))m) << 10; |
7ea239d9 PO |
180 | |
181 | csd->read_blkbits = 9; | |
182 | csd->read_partial = 0; | |
183 | csd->write_misalign = 0; | |
184 | csd->read_misalign = 0; | |
185 | csd->r2w_factor = 4; /* Unused */ | |
186 | csd->write_blkbits = 9; | |
187 | csd->write_partial = 0; | |
dfe86cba | 188 | csd->erase_size = 1; |
917a5336 | 189 | |
38fb6997 | 190 | if (unstuff_bits(resp, 13, 1)) |
917a5336 | 191 | mmc_card_set_readonly(card); |
7ea239d9 PO |
192 | break; |
193 | default: | |
a3c76eb9 | 194 | pr_err("%s: unrecognised CSD structure version %d\n", |
7ea239d9 | 195 | mmc_hostname(card->host), csd_struct); |
bd766312 | 196 | return -EINVAL; |
7ea239d9 | 197 | } |
bd766312 | 198 | |
dfe86cba AH |
199 | card->erase_size = csd->erase_size; |
200 | ||
bd766312 | 201 | return 0; |
7ea239d9 PO |
202 | } |
203 | ||
204 | /* | |
205 | * Given a 64-bit response, decode to our card SCR structure. | |
206 | */ | |
9a9f7e13 | 207 | int mmc_decode_scr(struct mmc_card *card) |
7ea239d9 PO |
208 | { |
209 | struct sd_scr *scr = &card->scr; | |
210 | unsigned int scr_struct; | |
211 | u32 resp[4]; | |
212 | ||
7ea239d9 PO |
213 | resp[3] = card->raw_scr[1]; |
214 | resp[2] = card->raw_scr[0]; | |
215 | ||
38fb6997 | 216 | scr_struct = unstuff_bits(resp, 60, 4); |
7ea239d9 | 217 | if (scr_struct != 0) { |
a3c76eb9 | 218 | pr_err("%s: unrecognised SCR structure version %d\n", |
7ea239d9 | 219 | mmc_hostname(card->host), scr_struct); |
bd766312 | 220 | return -EINVAL; |
7ea239d9 PO |
221 | } |
222 | ||
38fb6997 AA |
223 | scr->sda_vsn = unstuff_bits(resp, 56, 4); |
224 | scr->bus_widths = unstuff_bits(resp, 48, 4); | |
013909c4 AN |
225 | if (scr->sda_vsn == SCR_SPEC_VER_2) |
226 | /* Check if Physical Layer Spec v3.0 is supported */ | |
38fb6997 | 227 | scr->sda_spec3 = unstuff_bits(resp, 47, 1); |
bd766312 | 228 | |
68539e2b | 229 | if (scr->sda_spec3) { |
38fb6997 AA |
230 | scr->sda_spec4 = unstuff_bits(resp, 42, 1); |
231 | scr->sda_specx = unstuff_bits(resp, 38, 4); | |
68539e2b AA |
232 | } |
233 | ||
38fb6997 | 234 | if (unstuff_bits(resp, 55, 1)) |
dfe86cba AH |
235 | card->erased_byte = 0xFF; |
236 | else | |
237 | card->erased_byte = 0x0; | |
238 | ||
dbea8ae9 | 239 | if (scr->sda_spec4) |
38fb6997 | 240 | scr->cmds = unstuff_bits(resp, 32, 4); |
dbea8ae9 | 241 | else if (scr->sda_spec3) |
38fb6997 | 242 | scr->cmds = unstuff_bits(resp, 32, 2); |
9e4be8d0 RR |
243 | |
244 | /* SD Spec says: any SD Card shall set at least bits 0 and 2 */ | |
245 | if (!(scr->bus_widths & SD_SCR_BUS_WIDTH_1) || | |
246 | !(scr->bus_widths & SD_SCR_BUS_WIDTH_4)) { | |
247 | pr_err("%s: invalid bus width\n", mmc_hostname(card->host)); | |
248 | return -EINVAL; | |
249 | } | |
250 | ||
bd766312 | 251 | return 0; |
7ea239d9 PO |
252 | } |
253 | ||
dfe86cba AH |
254 | /* |
255 | * Fetch and process SD Status register. | |
256 | */ | |
257 | static int mmc_read_ssr(struct mmc_card *card) | |
258 | { | |
259 | unsigned int au, es, et, eo; | |
06c9ccb7 | 260 | __be32 *raw_ssr; |
bc47e2f6 AA |
261 | u32 resp[4] = {}; |
262 | u8 discard_support; | |
5275a652 | 263 | int i; |
dfe86cba AH |
264 | |
265 | if (!(card->csd.cmdclass & CCC_APP_SPEC)) { | |
6606110d JP |
266 | pr_warn("%s: card lacks mandatory SD Status function\n", |
267 | mmc_hostname(card->host)); | |
dfe86cba AH |
268 | return 0; |
269 | } | |
270 | ||
e85baa88 PB |
271 | raw_ssr = kmalloc(sizeof(card->raw_ssr), GFP_KERNEL); |
272 | if (!raw_ssr) | |
273 | return -ENOMEM; | |
274 | ||
275 | if (mmc_app_sd_status(card, raw_ssr)) { | |
6606110d JP |
276 | pr_warn("%s: problem reading SD Status register\n", |
277 | mmc_hostname(card->host)); | |
e85baa88 | 278 | kfree(raw_ssr); |
5275a652 | 279 | return 0; |
dfe86cba AH |
280 | } |
281 | ||
282 | for (i = 0; i < 16; i++) | |
e85baa88 PB |
283 | card->raw_ssr[i] = be32_to_cpu(raw_ssr[i]); |
284 | ||
285 | kfree(raw_ssr); | |
dfe86cba AH |
286 | |
287 | /* | |
38fb6997 | 288 | * unstuff_bits only works with four u32s so we have to offset the |
dfe86cba AH |
289 | * bitfield positions accordingly. |
290 | */ | |
38fb6997 | 291 | au = unstuff_bits(card->raw_ssr, 428 - 384, 4); |
9288cac0 WS |
292 | if (au) { |
293 | if (au <= 9 || card->scr.sda_spec3) { | |
294 | card->ssr.au = sd_au_size[au]; | |
38fb6997 AA |
295 | es = unstuff_bits(card->raw_ssr, 408 - 384, 16); |
296 | et = unstuff_bits(card->raw_ssr, 402 - 384, 6); | |
9288cac0 | 297 | if (es && et) { |
38fb6997 | 298 | eo = unstuff_bits(card->raw_ssr, 400 - 384, 2); |
9288cac0 WS |
299 | card->ssr.erase_timeout = (et * 1000) / es; |
300 | card->ssr.erase_offset = eo * 1000; | |
301 | } | |
302 | } else { | |
6606110d JP |
303 | pr_warn("%s: SD Status: Invalid Allocation Unit size\n", |
304 | mmc_hostname(card->host)); | |
dfe86cba | 305 | } |
dfe86cba | 306 | } |
5275a652 | 307 | |
bc47e2f6 AA |
308 | /* |
309 | * starting SD5.1 discard is supported if DISCARD_SUPPORT (b313) is set | |
310 | */ | |
311 | resp[3] = card->raw_ssr[6]; | |
38fb6997 | 312 | discard_support = unstuff_bits(resp, 313 - 288, 1); |
bc47e2f6 AA |
313 | card->erase_arg = (card->scr.sda_specx && discard_support) ? |
314 | SD_DISCARD_ARG : SD_ERASE_ARG; | |
01904ff7 | 315 | |
5275a652 | 316 | return 0; |
dfe86cba AH |
317 | } |
318 | ||
7ea239d9 | 319 | /* |
1addfcdb | 320 | * Fetches and decodes switch information |
7ea239d9 | 321 | */ |
1addfcdb | 322 | static int mmc_read_switch(struct mmc_card *card) |
7ea239d9 PO |
323 | { |
324 | int err; | |
325 | u8 *status; | |
326 | ||
3373c0ae | 327 | if (card->scr.sda_vsn < SCR_SPEC_VER_1) |
17b0429d | 328 | return 0; |
3373c0ae PO |
329 | |
330 | if (!(card->csd.cmdclass & CCC_SWITCH)) { | |
6606110d | 331 | pr_warn("%s: card lacks mandatory switch function, performance might suffer\n", |
3373c0ae | 332 | mmc_hostname(card->host)); |
17b0429d | 333 | return 0; |
3373c0ae PO |
334 | } |
335 | ||
7ea239d9 | 336 | status = kmalloc(64, GFP_KERNEL); |
e1df7ae3 | 337 | if (!status) |
17b0429d | 338 | return -ENOMEM; |
7ea239d9 | 339 | |
a39ca6ae AL |
340 | /* |
341 | * Find out the card's support bits with a mode 0 operation. | |
342 | * The argument does not matter, as the support bits do not | |
343 | * change with the arguments. | |
344 | */ | |
4c0a6a0a | 345 | err = mmc_sd_switch(card, SD_SWITCH_CHECK, 0, 0, status); |
17b0429d | 346 | if (err) { |
013909c4 AN |
347 | /* |
348 | * If the host or the card can't do the switch, | |
349 | * fail more gracefully. | |
350 | */ | |
351 | if (err != -EINVAL && err != -ENOSYS && err != -EFAULT) | |
adf66a0d PO |
352 | goto out; |
353 | ||
6606110d | 354 | pr_warn("%s: problem reading Bus Speed modes\n", |
3373c0ae | 355 | mmc_hostname(card->host)); |
17b0429d | 356 | err = 0; |
adf66a0d | 357 | |
7ea239d9 PO |
358 | goto out; |
359 | } | |
360 | ||
fffe5d5a QL |
361 | if (status[13] & SD_MODE_HIGH_SPEED) |
362 | card->sw_caps.hs_max_dtr = HIGH_SPEED_MAX_DTR; | |
f2815f68 | 363 | |
013909c4 AN |
364 | if (card->scr.sda_spec3) { |
365 | card->sw_caps.sd3_bus_mode = status[13]; | |
a39ca6ae | 366 | /* Driver Strengths supported by the card */ |
013909c4 | 367 | card->sw_caps.sd3_drv_type = status[9]; |
d9812780 | 368 | card->sw_caps.sd3_curr_limit = status[7] | status[6] << 8; |
013909c4 | 369 | } |
7ea239d9 | 370 | |
1addfcdb PO |
371 | out: |
372 | kfree(status); | |
373 | ||
374 | return err; | |
375 | } | |
376 | ||
377 | /* | |
378 | * Test if the card supports high-speed mode and, if so, switch to it. | |
379 | */ | |
71578a1e | 380 | int mmc_sd_switch_hs(struct mmc_card *card) |
1addfcdb PO |
381 | { |
382 | int err; | |
383 | u8 *status; | |
384 | ||
3373c0ae | 385 | if (card->scr.sda_vsn < SCR_SPEC_VER_1) |
17b0429d | 386 | return 0; |
3373c0ae PO |
387 | |
388 | if (!(card->csd.cmdclass & CCC_SWITCH)) | |
17b0429d | 389 | return 0; |
3373c0ae | 390 | |
1addfcdb | 391 | if (!(card->host->caps & MMC_CAP_SD_HIGHSPEED)) |
17b0429d | 392 | return 0; |
1addfcdb PO |
393 | |
394 | if (card->sw_caps.hs_max_dtr == 0) | |
17b0429d | 395 | return 0; |
1addfcdb | 396 | |
1addfcdb | 397 | status = kmalloc(64, GFP_KERNEL); |
e1df7ae3 | 398 | if (!status) |
17b0429d | 399 | return -ENOMEM; |
1addfcdb | 400 | |
4c0a6a0a CL |
401 | err = mmc_sd_switch(card, SD_SWITCH_SET, 0, |
402 | HIGH_SPEED_BUS_SPEED, status); | |
17b0429d | 403 | if (err) |
7ea239d9 PO |
404 | goto out; |
405 | ||
9d624f4f | 406 | if ((status[16] & 0xF) != HIGH_SPEED_BUS_SPEED) { |
6606110d | 407 | pr_warn("%s: Problem switching card into high-speed mode!\n", |
7ea239d9 | 408 | mmc_hostname(card->host)); |
71578a1e | 409 | err = 0; |
7ea239d9 | 410 | } else { |
71578a1e | 411 | err = 1; |
7ea239d9 PO |
412 | } |
413 | ||
414 | out: | |
415 | kfree(status); | |
416 | ||
417 | return err; | |
418 | } | |
419 | ||
d6d50a15 AN |
420 | static int sd_select_driver_type(struct mmc_card *card, u8 *status) |
421 | { | |
fa021cef | 422 | int card_drv_type, drive_strength, drv_type; |
d6d50a15 AN |
423 | int err; |
424 | ||
3853a042 AH |
425 | card->drive_strength = 0; |
426 | ||
fa021cef | 427 | card_drv_type = card->sw_caps.sd3_drv_type | SD_DRIVER_TYPE_B; |
ca8e99b3 | 428 | |
e23350b3 AH |
429 | drive_strength = mmc_select_drive_strength(card, |
430 | card->sw_caps.uhs_max_dtr, | |
431 | card_drv_type, &drv_type); | |
d6d50a15 | 432 | |
b4f30a17 | 433 | if (drive_strength) { |
4c0a6a0a CL |
434 | err = mmc_sd_switch(card, SD_SWITCH_SET, 2, |
435 | drive_strength, status); | |
b4f30a17 AH |
436 | if (err) |
437 | return err; | |
438 | if ((status[15] & 0xF) != drive_strength) { | |
439 | pr_warn("%s: Problem setting drive strength!\n", | |
440 | mmc_hostname(card->host)); | |
441 | return 0; | |
442 | } | |
3853a042 | 443 | card->drive_strength = drive_strength; |
d6d50a15 AN |
444 | } |
445 | ||
b4f30a17 AH |
446 | if (drv_type) |
447 | mmc_set_driver_type(card->host, drv_type); | |
d6d50a15 AN |
448 | |
449 | return 0; | |
450 | } | |
451 | ||
93c712f9 | 452 | static void sd_update_bus_speed_mode(struct mmc_card *card) |
49c468fc | 453 | { |
49c468fc AN |
454 | /* |
455 | * If the host doesn't support any of the UHS-I modes, fallback on | |
456 | * default speed. | |
457 | */ | |
f55f7da6 | 458 | if (!mmc_host_can_uhs(card->host)) { |
93c712f9 SJ |
459 | card->sd_bus_speed = 0; |
460 | return; | |
461 | } | |
49c468fc AN |
462 | |
463 | if ((card->host->caps & MMC_CAP_UHS_SDR104) && | |
464 | (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR104)) { | |
93c712f9 | 465 | card->sd_bus_speed = UHS_SDR104_BUS_SPEED; |
49c468fc AN |
466 | } else if ((card->host->caps & MMC_CAP_UHS_DDR50) && |
467 | (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_DDR50)) { | |
93c712f9 | 468 | card->sd_bus_speed = UHS_DDR50_BUS_SPEED; |
49c468fc AN |
469 | } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | |
470 | MMC_CAP_UHS_SDR50)) && (card->sw_caps.sd3_bus_mode & | |
471 | SD_MODE_UHS_SDR50)) { | |
93c712f9 | 472 | card->sd_bus_speed = UHS_SDR50_BUS_SPEED; |
49c468fc AN |
473 | } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | |
474 | MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25)) && | |
475 | (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR25)) { | |
93c712f9 | 476 | card->sd_bus_speed = UHS_SDR25_BUS_SPEED; |
49c468fc AN |
477 | } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | |
478 | MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25 | | |
479 | MMC_CAP_UHS_SDR12)) && (card->sw_caps.sd3_bus_mode & | |
480 | SD_MODE_UHS_SDR12)) { | |
93c712f9 SJ |
481 | card->sd_bus_speed = UHS_SDR12_BUS_SPEED; |
482 | } | |
483 | } | |
484 | ||
485 | static int sd_set_bus_speed_mode(struct mmc_card *card, u8 *status) | |
486 | { | |
487 | int err; | |
488 | unsigned int timing = 0; | |
489 | ||
490 | switch (card->sd_bus_speed) { | |
491 | case UHS_SDR104_BUS_SPEED: | |
492 | timing = MMC_TIMING_UHS_SDR104; | |
493 | card->sw_caps.uhs_max_dtr = UHS_SDR104_MAX_DTR; | |
494 | break; | |
495 | case UHS_DDR50_BUS_SPEED: | |
496 | timing = MMC_TIMING_UHS_DDR50; | |
497 | card->sw_caps.uhs_max_dtr = UHS_DDR50_MAX_DTR; | |
498 | break; | |
499 | case UHS_SDR50_BUS_SPEED: | |
500 | timing = MMC_TIMING_UHS_SDR50; | |
501 | card->sw_caps.uhs_max_dtr = UHS_SDR50_MAX_DTR; | |
502 | break; | |
503 | case UHS_SDR25_BUS_SPEED: | |
504 | timing = MMC_TIMING_UHS_SDR25; | |
505 | card->sw_caps.uhs_max_dtr = UHS_SDR25_MAX_DTR; | |
506 | break; | |
507 | case UHS_SDR12_BUS_SPEED: | |
508 | timing = MMC_TIMING_UHS_SDR12; | |
509 | card->sw_caps.uhs_max_dtr = UHS_SDR12_MAX_DTR; | |
510 | break; | |
511 | default: | |
512 | return 0; | |
49c468fc AN |
513 | } |
514 | ||
4c0a6a0a | 515 | err = mmc_sd_switch(card, SD_SWITCH_SET, 0, card->sd_bus_speed, status); |
49c468fc AN |
516 | if (err) |
517 | return err; | |
518 | ||
93c712f9 | 519 | if ((status[16] & 0xF) != card->sd_bus_speed) |
6606110d | 520 | pr_warn("%s: Problem setting bus speed mode!\n", |
49c468fc AN |
521 | mmc_hostname(card->host)); |
522 | else { | |
523 | mmc_set_timing(card->host, timing); | |
524 | mmc_set_clock(card->host, card->sw_caps.uhs_max_dtr); | |
525 | } | |
526 | ||
527 | return 0; | |
528 | } | |
529 | ||
55c4665e AL |
530 | /* Get host's max current setting at its current voltage */ |
531 | static u32 sd_get_host_max_current(struct mmc_host *host) | |
532 | { | |
533 | u32 voltage, max_current; | |
534 | ||
535 | voltage = 1 << host->ios.vdd; | |
536 | switch (voltage) { | |
537 | case MMC_VDD_165_195: | |
538 | max_current = host->max_current_180; | |
539 | break; | |
540 | case MMC_VDD_29_30: | |
541 | case MMC_VDD_30_31: | |
542 | max_current = host->max_current_300; | |
543 | break; | |
544 | case MMC_VDD_32_33: | |
545 | case MMC_VDD_33_34: | |
546 | max_current = host->max_current_330; | |
547 | break; | |
548 | default: | |
549 | max_current = 0; | |
550 | } | |
551 | ||
552 | return max_current; | |
553 | } | |
554 | ||
5371c927 AN |
555 | static int sd_set_current_limit(struct mmc_card *card, u8 *status) |
556 | { | |
0aa67700 | 557 | int current_limit = SD_SET_CURRENT_NO_CHANGE; |
5371c927 | 558 | int err; |
55c4665e | 559 | u32 max_current; |
5371c927 AN |
560 | |
561 | /* | |
562 | * Current limit switch is only defined for SDR50, SDR104, and DDR50 | |
0aa67700 PR |
563 | * bus speed modes. For other bus speed modes, we do not change the |
564 | * current limit. | |
55c4665e AL |
565 | */ |
566 | if ((card->sd_bus_speed != UHS_SDR50_BUS_SPEED) && | |
567 | (card->sd_bus_speed != UHS_SDR104_BUS_SPEED) && | |
568 | (card->sd_bus_speed != UHS_DDR50_BUS_SPEED)) | |
569 | return 0; | |
570 | ||
571 | /* | |
572 | * Host has different current capabilities when operating at | |
573 | * different voltages, so find out its max current first. | |
574 | */ | |
575 | max_current = sd_get_host_max_current(card->host); | |
576 | ||
577 | /* | |
a39ca6ae AL |
578 | * We only check host's capability here, if we set a limit that is |
579 | * higher than the card's maximum current, the card will be using its | |
580 | * maximum current, e.g. if the card's maximum current is 300ma, and | |
581 | * when we set current limit to 200ma, the card will draw 200ma, and | |
582 | * when we set current limit to 400/600/800ma, the card will draw its | |
583 | * maximum 300ma from the host. | |
d9812780 RK |
584 | * |
585 | * The above is incorrect: if we try to set a current limit that is | |
586 | * not supported by the card, the card can rightfully error out the | |
587 | * attempt, and remain at the default current limit. This results | |
588 | * in a 300mA card being limited to 200mA even though the host | |
589 | * supports 800mA. Failures seen with SanDisk 8GB UHS cards with | |
590 | * an iMX6 host. --rmk | |
5371c927 | 591 | */ |
d9812780 RK |
592 | if (max_current >= 800 && |
593 | card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_800) | |
55c4665e | 594 | current_limit = SD_SET_CURRENT_LIMIT_800; |
d9812780 RK |
595 | else if (max_current >= 600 && |
596 | card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_600) | |
55c4665e | 597 | current_limit = SD_SET_CURRENT_LIMIT_600; |
d9812780 RK |
598 | else if (max_current >= 400 && |
599 | card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_400) | |
55c4665e | 600 | current_limit = SD_SET_CURRENT_LIMIT_400; |
d9812780 RK |
601 | else if (max_current >= 200 && |
602 | card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_200) | |
55c4665e | 603 | current_limit = SD_SET_CURRENT_LIMIT_200; |
5371c927 | 604 | |
0aa67700 | 605 | if (current_limit != SD_SET_CURRENT_NO_CHANGE) { |
4c0a6a0a CL |
606 | err = mmc_sd_switch(card, SD_SWITCH_SET, 3, |
607 | current_limit, status); | |
0aa67700 PR |
608 | if (err) |
609 | return err; | |
5371c927 | 610 | |
0aa67700 | 611 | if (((status[15] >> 4) & 0x0F) != current_limit) |
6606110d | 612 | pr_warn("%s: Problem setting current limit!\n", |
0aa67700 | 613 | mmc_hostname(card->host)); |
5371c927 | 614 | |
0aa67700 | 615 | } |
a39ca6ae | 616 | |
5371c927 AN |
617 | return 0; |
618 | } | |
619 | ||
9510b38d ES |
620 | /* |
621 | * Determine if the card should tune or not. | |
622 | */ | |
623 | static bool mmc_sd_use_tuning(struct mmc_card *card) | |
624 | { | |
625 | /* | |
626 | * SPI mode doesn't define CMD19 and tuning is only valid for SDR50 and | |
627 | * SDR104 mode SD-cards. Note that tuning is mandatory for SDR104. | |
628 | */ | |
629 | if (mmc_host_is_spi(card->host)) | |
630 | return false; | |
631 | ||
632 | switch (card->host->ios.timing) { | |
633 | case MMC_TIMING_UHS_SDR50: | |
634 | case MMC_TIMING_UHS_SDR104: | |
635 | return true; | |
636 | case MMC_TIMING_UHS_DDR50: | |
637 | return !mmc_card_no_uhs_ddr50_tuning(card); | |
638 | } | |
639 | ||
640 | return false; | |
641 | } | |
642 | ||
d6d50a15 AN |
643 | /* |
644 | * UHS-I specific initialization procedure | |
645 | */ | |
646 | static int mmc_sd_init_uhs_card(struct mmc_card *card) | |
647 | { | |
648 | int err; | |
649 | u8 *status; | |
650 | ||
d6d50a15 AN |
651 | if (!(card->csd.cmdclass & CCC_SWITCH)) |
652 | return 0; | |
653 | ||
654 | status = kmalloc(64, GFP_KERNEL); | |
e1df7ae3 | 655 | if (!status) |
d6d50a15 | 656 | return -ENOMEM; |
d6d50a15 AN |
657 | |
658 | /* Set 4-bit bus width */ | |
d6743a8a SL |
659 | err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4); |
660 | if (err) | |
661 | goto out; | |
d6d50a15 | 662 | |
d6743a8a | 663 | mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4); |
d6d50a15 | 664 | |
93c712f9 SJ |
665 | /* |
666 | * Select the bus speed mode depending on host | |
667 | * and card capability. | |
668 | */ | |
669 | sd_update_bus_speed_mode(card); | |
670 | ||
d6d50a15 AN |
671 | /* Set the driver strength for the card */ |
672 | err = sd_select_driver_type(card, status); | |
49c468fc AN |
673 | if (err) |
674 | goto out; | |
675 | ||
93c712f9 SJ |
676 | /* Set current limit for the card */ |
677 | err = sd_set_current_limit(card, status); | |
5371c927 AN |
678 | if (err) |
679 | goto out; | |
680 | ||
93c712f9 SJ |
681 | /* Set bus speed mode of the card */ |
682 | err = sd_set_bus_speed_mode(card, status); | |
b513ea25 AN |
683 | if (err) |
684 | goto out; | |
685 | ||
9510b38d | 686 | if (mmc_sd_use_tuning(card)) { |
63e415c6 | 687 | err = mmc_execute_tuning(card); |
4324f6de WY |
688 | |
689 | /* | |
690 | * As SD Specifications Part1 Physical Layer Specification | |
691 | * Version 3.01 says, CMD19 tuning is available for unlocked | |
692 | * cards in transfer state of 1.8V signaling mode. The small | |
693 | * difference between v3.00 and 3.01 spec means that CMD19 | |
694 | * tuning is also available for DDR50 mode. | |
695 | */ | |
e10c3219 | 696 | if (err && card->host->ios.timing == MMC_TIMING_UHS_DDR50) { |
4324f6de WY |
697 | pr_warn("%s: ddr50 tuning failed\n", |
698 | mmc_hostname(card->host)); | |
699 | err = 0; | |
700 | } | |
701 | } | |
702 | ||
d6d50a15 AN |
703 | out: |
704 | kfree(status); | |
705 | ||
706 | return err; | |
707 | } | |
708 | ||
51ec92e2 PO |
709 | MMC_DEV_ATTR(cid, "%08x%08x%08x%08x\n", card->raw_cid[0], card->raw_cid[1], |
710 | card->raw_cid[2], card->raw_cid[3]); | |
711 | MMC_DEV_ATTR(csd, "%08x%08x%08x%08x\n", card->raw_csd[0], card->raw_csd[1], | |
712 | card->raw_csd[2], card->raw_csd[3]); | |
713 | MMC_DEV_ATTR(scr, "%08x%08x\n", card->raw_scr[0], card->raw_scr[1]); | |
5275a652 UY |
714 | MMC_DEV_ATTR(ssr, |
715 | "%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x\n", | |
716 | card->raw_ssr[0], card->raw_ssr[1], card->raw_ssr[2], | |
717 | card->raw_ssr[3], card->raw_ssr[4], card->raw_ssr[5], | |
718 | card->raw_ssr[6], card->raw_ssr[7], card->raw_ssr[8], | |
719 | card->raw_ssr[9], card->raw_ssr[10], card->raw_ssr[11], | |
720 | card->raw_ssr[12], card->raw_ssr[13], card->raw_ssr[14], | |
721 | card->raw_ssr[15]); | |
51ec92e2 | 722 | MMC_DEV_ATTR(date, "%02d/%04d\n", card->cid.month, card->cid.year); |
dfe86cba AH |
723 | MMC_DEV_ATTR(erase_size, "%u\n", card->erase_size << 9); |
724 | MMC_DEV_ATTR(preferred_erase_size, "%u\n", card->pref_erase << 9); | |
51ec92e2 PO |
725 | MMC_DEV_ATTR(fwrev, "0x%x\n", card->cid.fwrev); |
726 | MMC_DEV_ATTR(hwrev, "0x%x\n", card->cid.hwrev); | |
727 | MMC_DEV_ATTR(manfid, "0x%06x\n", card->cid.manfid); | |
728 | MMC_DEV_ATTR(name, "%s\n", card->cid.prod_name); | |
729 | MMC_DEV_ATTR(oemid, "0x%04x\n", card->cid.oemid); | |
730 | MMC_DEV_ATTR(serial, "0x%08x\n", card->cid.serial); | |
c892b0d8 | 731 | MMC_DEV_ATTR(ocr, "0x%08x\n", card->ocr); |
974e85e9 | 732 | MMC_DEV_ATTR(rca, "0x%04x\n", card->rca); |
51ec92e2 PO |
733 | |
734 | ||
f5d8a5fe SS |
735 | static ssize_t mmc_dsr_show(struct device *dev, struct device_attribute *attr, |
736 | char *buf) | |
6825a606 | 737 | { |
f5d8a5fe SS |
738 | struct mmc_card *card = mmc_dev_to_card(dev); |
739 | struct mmc_host *host = card->host; | |
740 | ||
741 | if (card->csd.dsr_imp && host->dsr_req) | |
742 | return sysfs_emit(buf, "0x%x\n", host->dsr); | |
743 | /* return default DSR value */ | |
744 | return sysfs_emit(buf, "0x%x\n", 0x404); | |
6825a606 BP |
745 | } |
746 | ||
747 | static DEVICE_ATTR(dsr, S_IRUGO, mmc_dsr_show, NULL); | |
748 | ||
254e1754 PR |
749 | MMC_DEV_ATTR(vendor, "0x%04x\n", card->cis.vendor); |
750 | MMC_DEV_ATTR(device, "0x%04x\n", card->cis.device); | |
b698f6ab PR |
751 | MMC_DEV_ATTR(revision, "%u.%u\n", card->major_rev, card->minor_rev); |
752 | ||
753 | #define sdio_info_attr(num) \ | |
754 | static ssize_t info##num##_show(struct device *dev, struct device_attribute *attr, char *buf) \ | |
755 | { \ | |
756 | struct mmc_card *card = mmc_dev_to_card(dev); \ | |
757 | \ | |
758 | if (num > card->num_info) \ | |
759 | return -ENODATA; \ | |
f5d8a5fe | 760 | if (!card->info[num - 1][0]) \ |
b698f6ab | 761 | return 0; \ |
f5d8a5fe | 762 | return sysfs_emit(buf, "%s\n", card->info[num - 1]); \ |
b698f6ab PR |
763 | } \ |
764 | static DEVICE_ATTR_RO(info##num) | |
765 | ||
766 | sdio_info_attr(1); | |
767 | sdio_info_attr(2); | |
768 | sdio_info_attr(3); | |
769 | sdio_info_attr(4); | |
254e1754 | 770 | |
51ec92e2 | 771 | static struct attribute *sd_std_attrs[] = { |
254e1754 PR |
772 | &dev_attr_vendor.attr, |
773 | &dev_attr_device.attr, | |
b698f6ab PR |
774 | &dev_attr_revision.attr, |
775 | &dev_attr_info1.attr, | |
776 | &dev_attr_info2.attr, | |
777 | &dev_attr_info3.attr, | |
778 | &dev_attr_info4.attr, | |
51ec92e2 PO |
779 | &dev_attr_cid.attr, |
780 | &dev_attr_csd.attr, | |
781 | &dev_attr_scr.attr, | |
5275a652 | 782 | &dev_attr_ssr.attr, |
51ec92e2 | 783 | &dev_attr_date.attr, |
dfe86cba AH |
784 | &dev_attr_erase_size.attr, |
785 | &dev_attr_preferred_erase_size.attr, | |
51ec92e2 PO |
786 | &dev_attr_fwrev.attr, |
787 | &dev_attr_hwrev.attr, | |
788 | &dev_attr_manfid.attr, | |
789 | &dev_attr_name.attr, | |
790 | &dev_attr_oemid.attr, | |
791 | &dev_attr_serial.attr, | |
5fb06af7 | 792 | &dev_attr_ocr.attr, |
974e85e9 | 793 | &dev_attr_rca.attr, |
6825a606 | 794 | &dev_attr_dsr.attr, |
51ec92e2 PO |
795 | NULL, |
796 | }; | |
254e1754 PR |
797 | |
798 | static umode_t sd_std_is_visible(struct kobject *kobj, struct attribute *attr, | |
799 | int index) | |
800 | { | |
e449d983 | 801 | struct device *dev = kobj_to_dev(kobj); |
254e1754 PR |
802 | struct mmc_card *card = mmc_dev_to_card(dev); |
803 | ||
b698f6ab PR |
804 | /* CIS vendor and device ids, revision and info string are available only for Combo cards */ |
805 | if ((attr == &dev_attr_vendor.attr || | |
806 | attr == &dev_attr_device.attr || | |
807 | attr == &dev_attr_revision.attr || | |
808 | attr == &dev_attr_info1.attr || | |
809 | attr == &dev_attr_info2.attr || | |
810 | attr == &dev_attr_info3.attr || | |
811 | attr == &dev_attr_info4.attr | |
3beb0ab5 | 812 | ) &&!mmc_card_sd_combo(card)) |
254e1754 PR |
813 | return 0; |
814 | ||
815 | return attr->mode; | |
816 | } | |
817 | ||
818 | static const struct attribute_group sd_std_group = { | |
819 | .attrs = sd_std_attrs, | |
820 | .is_visible = sd_std_is_visible, | |
821 | }; | |
822 | __ATTRIBUTE_GROUPS(sd_std); | |
51ec92e2 | 823 | |
68f5630a | 824 | const struct device_type sd_type = { |
d1e58212 | 825 | .groups = sd_std_groups, |
51ec92e2 PO |
826 | }; |
827 | ||
7ea239d9 | 828 | /* |
71578a1e | 829 | * Fetch CID from card. |
7ea239d9 | 830 | */ |
d6d50a15 | 831 | int mmc_sd_get_cid(struct mmc_host *host, u32 ocr, u32 *cid, u32 *rocr) |
7ea239d9 | 832 | { |
7ea239d9 | 833 | int err; |
55c4665e | 834 | u32 max_current; |
0797e5f1 | 835 | int retries = 10; |
69041150 | 836 | u32 pocr = ocr; |
0797e5f1 JR |
837 | |
838 | try_again: | |
839 | if (!retries) { | |
840 | ocr &= ~SD_OCR_S18R; | |
6606110d | 841 | pr_warn("%s: Skipping voltage switch\n", mmc_hostname(host)); |
0797e5f1 | 842 | } |
7ea239d9 | 843 | |
7ea239d9 PO |
844 | /* |
845 | * Since we're changing the OCR value, we seem to | |
846 | * need to tell some cards to go back to the idle | |
847 | * state. We wait 1ms to give cards time to | |
848 | * respond. | |
849 | */ | |
850 | mmc_go_idle(host); | |
851 | ||
852 | /* | |
853 | * If SD_SEND_IF_COND indicates an SD 2.0 | |
854 | * compliant card and we should set bit 30 | |
855 | * of the ocr to indicate that we can handle | |
856 | * block-addressed SDHC cards. | |
857 | */ | |
6abaa0c9 | 858 | err = mmc_send_if_cond(host, ocr); |
899404e1 | 859 | if (!err) { |
f2119df6 | 860 | ocr |= SD_OCR_CCS; |
899404e1 AA |
861 | /* Set HO2T as well - SDUC card won't respond otherwise */ |
862 | ocr |= SD_OCR_2T; | |
863 | } | |
7ea239d9 | 864 | |
f2119df6 AN |
865 | /* |
866 | * If the host supports one of UHS-I modes, request the card | |
0797e5f1 JR |
867 | * to switch to 1.8V signaling level. If the card has failed |
868 | * repeatedly to switch however, skip this. | |
f2119df6 | 869 | */ |
f55f7da6 | 870 | if (retries && mmc_host_can_uhs(host)) |
f2119df6 AN |
871 | ocr |= SD_OCR_S18R; |
872 | ||
55c4665e AL |
873 | /* |
874 | * If the host can supply more than 150mA at current voltage, | |
875 | * XPC should be set to 1. | |
876 | */ | |
877 | max_current = sd_get_host_max_current(host); | |
878 | if (max_current > 150) | |
f2119df6 AN |
879 | ocr |= SD_OCR_XPC; |
880 | ||
d6d50a15 | 881 | err = mmc_send_app_op_cond(host, ocr, rocr); |
17b0429d | 882 | if (err) |
71578a1e | 883 | return err; |
7ea239d9 | 884 | |
f2119df6 | 885 | /* |
09247e11 CL |
886 | * In case the S18A bit is set in the response, let's start the signal |
887 | * voltage switch procedure. SPI mode doesn't support CMD11. | |
888 | * Note that, according to the spec, the S18A bit is not valid unless | |
889 | * the CCS bit is set as well. We deliberately deviate from the spec in | |
890 | * regards to this, which allows UHS-I to be supported for SDSC cards. | |
f2119df6 | 891 | */ |
e9233917 BN |
892 | if (!mmc_host_is_spi(host) && (ocr & SD_OCR_S18R) && |
893 | rocr && (*rocr & SD_ROCR_S18A)) { | |
2ed573b6 | 894 | err = mmc_set_uhs_voltage(host, pocr); |
0797e5f1 JR |
895 | if (err == -EAGAIN) { |
896 | retries--; | |
897 | goto try_again; | |
898 | } else if (err) { | |
899 | retries = 0; | |
f2119df6 AN |
900 | goto try_again; |
901 | } | |
902 | } | |
903 | ||
a1473732 | 904 | err = mmc_send_cid(host, cid); |
71578a1e MM |
905 | return err; |
906 | } | |
907 | ||
fce2ce78 | 908 | int mmc_sd_get_csd(struct mmc_card *card, bool is_sduc) |
71578a1e MM |
909 | { |
910 | int err; | |
911 | ||
912 | /* | |
913 | * Fetch CSD from card. | |
914 | */ | |
915 | err = mmc_send_csd(card, card->raw_csd); | |
17b0429d | 916 | if (err) |
71578a1e | 917 | return err; |
7ea239d9 | 918 | |
fce2ce78 | 919 | err = mmc_decode_csd(card, is_sduc); |
71578a1e MM |
920 | if (err) |
921 | return err; | |
922 | ||
923 | return 0; | |
924 | } | |
925 | ||
9a9f7e13 | 926 | int mmc_sd_get_ro(struct mmc_host *host) |
9f6e0bff LPC |
927 | { |
928 | int ro; | |
929 | ||
930 | /* | |
931 | * Some systems don't feature a write-protect pin and don't need one. | |
932 | * E.g. because they only have micro-SD card slot. For those systems | |
933 | * assume that the SD card is always read-write. | |
934 | */ | |
935 | if (host->caps2 & MMC_CAP2_NO_WRITE_PROTECT) | |
936 | return 0; | |
937 | ||
938 | if (!host->ops->get_ro) | |
939 | return -1; | |
940 | ||
9f6e0bff | 941 | ro = host->ops->get_ro(host); |
9f6e0bff LPC |
942 | |
943 | return ro; | |
944 | } | |
945 | ||
71578a1e MM |
946 | int mmc_sd_setup_card(struct mmc_host *host, struct mmc_card *card, |
947 | bool reinit) | |
948 | { | |
949 | int err; | |
950 | ||
951 | if (!reinit) { | |
952 | /* | |
953 | * Fetch SCR from card. | |
954 | */ | |
06c9ccb7 | 955 | err = mmc_app_send_scr(card); |
71578a1e MM |
956 | if (err) |
957 | return err; | |
958 | ||
959 | err = mmc_decode_scr(card); | |
960 | if (err) | |
961 | return err; | |
962 | ||
dfe86cba AH |
963 | /* |
964 | * Fetch and process SD Status register. | |
965 | */ | |
966 | err = mmc_read_ssr(card); | |
967 | if (err) | |
968 | return err; | |
969 | ||
970 | /* Erase init depends on CSD and SSR */ | |
971 | mmc_init_erase(card); | |
71578a1e MM |
972 | } |
973 | ||
63f15609 AH |
974 | /* |
975 | * Fetch switch information from card. Note, sd3_bus_mode can change if | |
976 | * voltage switch outcome changes, so do this always. | |
977 | */ | |
978 | err = mmc_read_switch(card); | |
979 | if (err) | |
980 | return err; | |
981 | ||
71578a1e MM |
982 | /* |
983 | * For SPI, enable CRC as appropriate. | |
984 | * This CRC enable is located AFTER the reading of the | |
985 | * card registers because some SDHC cards are not able | |
986 | * to provide valid CRCs for non-512-byte blocks. | |
987 | */ | |
988 | if (mmc_host_is_spi(host)) { | |
989 | err = mmc_spi_set_crc(host, use_spi_crc); | |
990 | if (err) | |
991 | return err; | |
992 | } | |
993 | ||
994 | /* | |
995 | * Check if read-only switch is active. | |
996 | */ | |
997 | if (!reinit) { | |
9f6e0bff | 998 | int ro = mmc_sd_get_ro(host); |
71578a1e MM |
999 | |
1000 | if (ro < 0) { | |
6606110d | 1001 | pr_warn("%s: host does not support reading read-only switch, assuming write-enable\n", |
71578a1e MM |
1002 | mmc_hostname(host)); |
1003 | } else if (ro > 0) { | |
1004 | mmc_card_set_readonly(card); | |
adf66a0d | 1005 | } |
71578a1e MM |
1006 | } |
1007 | ||
1008 | return 0; | |
1009 | } | |
1010 | ||
1011 | unsigned mmc_sd_get_max_clock(struct mmc_card *card) | |
1012 | { | |
1013 | unsigned max_dtr = (unsigned int)-1; | |
1014 | ||
cdc99179 | 1015 | if (mmc_card_hs(card)) { |
71578a1e MM |
1016 | if (max_dtr > card->sw_caps.hs_max_dtr) |
1017 | max_dtr = card->sw_caps.hs_max_dtr; | |
1018 | } else if (max_dtr > card->csd.max_dtr) { | |
1019 | max_dtr = card->csd.max_dtr; | |
1020 | } | |
1021 | ||
1022 | return max_dtr; | |
1023 | } | |
1024 | ||
6a11fc47 AH |
1025 | static bool mmc_sd_card_using_v18(struct mmc_card *card) |
1026 | { | |
1027 | /* | |
1028 | * According to the SD spec., the Bus Speed Mode (function group 1) bits | |
1029 | * 2 to 4 are zero if the card is initialized at 3.3V signal level. Thus | |
1030 | * they can be used to determine if the card has already switched to | |
1031 | * 1.8V signaling. | |
1032 | */ | |
1033 | return card->sw_caps.sd3_bus_mode & | |
1034 | (SD_MODE_UHS_SDR50 | SD_MODE_UHS_SDR104 | SD_MODE_UHS_DDR50); | |
1035 | } | |
1036 | ||
2c5d4276 UH |
1037 | static int sd_write_ext_reg(struct mmc_card *card, u8 fno, u8 page, u16 offset, |
1038 | u8 reg_data) | |
1039 | { | |
1040 | struct mmc_host *host = card->host; | |
1041 | struct mmc_request mrq = {}; | |
1042 | struct mmc_command cmd = {}; | |
1043 | struct mmc_data data = {}; | |
1044 | struct scatterlist sg; | |
1045 | u8 *reg_buf; | |
1046 | ||
1047 | reg_buf = kzalloc(512, GFP_KERNEL); | |
1048 | if (!reg_buf) | |
1049 | return -ENOMEM; | |
1050 | ||
1051 | mrq.cmd = &cmd; | |
1052 | mrq.data = &data; | |
1053 | ||
1054 | /* | |
1055 | * Arguments of CMD49: | |
1056 | * [31:31] MIO (0 = memory). | |
1057 | * [30:27] FNO (function number). | |
1058 | * [26:26] MW - mask write mode (0 = disable). | |
1059 | * [25:18] page number. | |
1060 | * [17:9] offset address. | |
1061 | * [8:0] length (0 = 1 byte). | |
1062 | */ | |
1063 | cmd.arg = fno << 27 | page << 18 | offset << 9; | |
1064 | ||
1065 | /* The first byte in the buffer is the data to be written. */ | |
1066 | reg_buf[0] = reg_data; | |
1067 | ||
1068 | data.flags = MMC_DATA_WRITE; | |
1069 | data.blksz = 512; | |
1070 | data.blocks = 1; | |
1071 | data.sg = &sg; | |
1072 | data.sg_len = 1; | |
1073 | sg_init_one(&sg, reg_buf, 512); | |
1074 | ||
1075 | cmd.opcode = SD_WRITE_EXTR_SINGLE; | |
1076 | cmd.flags = MMC_RSP_R1 | MMC_CMD_ADTC; | |
1077 | ||
1078 | mmc_set_data_timeout(&data, card); | |
1079 | mmc_wait_for_req(host, &mrq); | |
1080 | ||
1081 | kfree(reg_buf); | |
1082 | ||
1083 | /* | |
1084 | * Note that, the SD card is allowed to signal busy on DAT0 up to 1s | |
1085 | * after the CMD49. Although, let's leave this to be managed by the | |
1086 | * caller. | |
1087 | */ | |
1088 | ||
1089 | if (cmd.error) | |
1090 | return cmd.error; | |
1091 | if (data.error) | |
1092 | return data.error; | |
1093 | ||
1094 | return 0; | |
1095 | } | |
1096 | ||
c784f927 UH |
1097 | static int sd_read_ext_reg(struct mmc_card *card, u8 fno, u8 page, |
1098 | u16 offset, u16 len, u8 *reg_buf) | |
1099 | { | |
1100 | u32 cmd_args; | |
1101 | ||
1102 | /* | |
1103 | * Command arguments of CMD48: | |
1104 | * [31:31] MIO (0 = memory). | |
1105 | * [30:27] FNO (function number). | |
1106 | * [26:26] reserved (0). | |
1107 | * [25:18] page number. | |
1108 | * [17:9] offset address. | |
1109 | * [8:0] length (0 = 1 byte, 1ff = 512 bytes). | |
1110 | */ | |
1111 | cmd_args = fno << 27 | page << 18 | offset << 9 | (len -1); | |
1112 | ||
1113 | return mmc_send_adtc_data(card, card->host, SD_READ_EXTR_SINGLE, | |
1114 | cmd_args, reg_buf, 512); | |
1115 | } | |
1116 | ||
1117 | static int sd_parse_ext_reg_power(struct mmc_card *card, u8 fno, u8 page, | |
1118 | u16 offset) | |
1119 | { | |
1120 | int err; | |
1121 | u8 *reg_buf; | |
1122 | ||
1123 | reg_buf = kzalloc(512, GFP_KERNEL); | |
1124 | if (!reg_buf) | |
1125 | return -ENOMEM; | |
1126 | ||
1127 | /* Read the extension register for power management function. */ | |
1128 | err = sd_read_ext_reg(card, fno, page, offset, 512, reg_buf); | |
1129 | if (err) { | |
1130 | pr_warn("%s: error %d reading PM func of ext reg\n", | |
1131 | mmc_hostname(card->host), err); | |
1132 | goto out; | |
1133 | } | |
1134 | ||
1135 | /* PM revision consists of 4 bits. */ | |
1136 | card->ext_power.rev = reg_buf[0] & 0xf; | |
1137 | ||
1138 | /* Power Off Notification support at bit 4. */ | |
cd068d51 | 1139 | if ((reg_buf[1] & BIT(4)) && !mmc_card_broken_sd_poweroff_notify(card)) |
c784f927 UH |
1140 | card->ext_power.feature_support |= SD_EXT_POWER_OFF_NOTIFY; |
1141 | ||
1142 | /* Power Sustenance support at bit 5. */ | |
1143 | if (reg_buf[1] & BIT(5)) | |
1144 | card->ext_power.feature_support |= SD_EXT_POWER_SUSTENANCE; | |
1145 | ||
1146 | /* Power Down Mode support at bit 6. */ | |
1147 | if (reg_buf[1] & BIT(6)) | |
1148 | card->ext_power.feature_support |= SD_EXT_POWER_DOWN_MODE; | |
1149 | ||
1150 | card->ext_power.fno = fno; | |
1151 | card->ext_power.page = page; | |
1152 | card->ext_power.offset = offset; | |
1153 | ||
1154 | out: | |
1155 | kfree(reg_buf); | |
1156 | return err; | |
1157 | } | |
1158 | ||
4e6306e0 UH |
1159 | static int sd_parse_ext_reg_perf(struct mmc_card *card, u8 fno, u8 page, |
1160 | u16 offset) | |
1161 | { | |
1162 | int err; | |
1163 | u8 *reg_buf; | |
1164 | ||
1165 | reg_buf = kzalloc(512, GFP_KERNEL); | |
1166 | if (!reg_buf) | |
1167 | return -ENOMEM; | |
1168 | ||
1169 | err = sd_read_ext_reg(card, fno, page, offset, 512, reg_buf); | |
1170 | if (err) { | |
1171 | pr_warn("%s: error %d reading PERF func of ext reg\n", | |
1172 | mmc_hostname(card->host), err); | |
1173 | goto out; | |
1174 | } | |
1175 | ||
1176 | /* PERF revision. */ | |
1177 | card->ext_perf.rev = reg_buf[0]; | |
1178 | ||
1179 | /* FX_EVENT support at bit 0. */ | |
1180 | if (reg_buf[1] & BIT(0)) | |
1181 | card->ext_perf.feature_support |= SD_EXT_PERF_FX_EVENT; | |
1182 | ||
1183 | /* Card initiated self-maintenance support at bit 0. */ | |
1184 | if (reg_buf[2] & BIT(0)) | |
1185 | card->ext_perf.feature_support |= SD_EXT_PERF_CARD_MAINT; | |
1186 | ||
1187 | /* Host initiated self-maintenance support at bit 1. */ | |
1188 | if (reg_buf[2] & BIT(1)) | |
1189 | card->ext_perf.feature_support |= SD_EXT_PERF_HOST_MAINT; | |
1190 | ||
1191 | /* Cache support at bit 0. */ | |
c467c8f0 | 1192 | if ((reg_buf[4] & BIT(0)) && !mmc_card_broken_sd_cache(card)) |
4e6306e0 UH |
1193 | card->ext_perf.feature_support |= SD_EXT_PERF_CACHE; |
1194 | ||
1195 | /* Command queue support indicated via queue depth bits (0 to 4). */ | |
1196 | if (reg_buf[6] & 0x1f) | |
1197 | card->ext_perf.feature_support |= SD_EXT_PERF_CMD_QUEUE; | |
1198 | ||
1199 | card->ext_perf.fno = fno; | |
1200 | card->ext_perf.page = page; | |
1201 | card->ext_perf.offset = offset; | |
1202 | ||
1203 | out: | |
1204 | kfree(reg_buf); | |
1205 | return err; | |
1206 | } | |
1207 | ||
c784f927 UH |
1208 | static int sd_parse_ext_reg(struct mmc_card *card, u8 *gen_info_buf, |
1209 | u16 *next_ext_addr) | |
1210 | { | |
1211 | u8 num_regs, fno, page; | |
1212 | u16 sfc, offset, ext = *next_ext_addr; | |
1213 | u32 reg_addr; | |
1214 | ||
1215 | /* | |
1216 | * Parse only one register set per extension, as that is sufficient to | |
1217 | * support the standard functions. This means another 48 bytes in the | |
1218 | * buffer must be available. | |
1219 | */ | |
1220 | if (ext + 48 > 512) | |
1221 | return -EFAULT; | |
1222 | ||
1223 | /* Standard Function Code */ | |
1224 | memcpy(&sfc, &gen_info_buf[ext], 2); | |
1225 | ||
1226 | /* Address to the next extension. */ | |
1227 | memcpy(next_ext_addr, &gen_info_buf[ext + 40], 2); | |
1228 | ||
1229 | /* Number of registers for this extension. */ | |
1230 | num_regs = gen_info_buf[ext + 42]; | |
1231 | ||
1232 | /* We support only one register per extension. */ | |
1233 | if (num_regs != 1) | |
1234 | return 0; | |
1235 | ||
1236 | /* Extension register address. */ | |
1237 | memcpy(®_addr, &gen_info_buf[ext + 44], 4); | |
1238 | ||
1239 | /* 9 bits (0 to 8) contains the offset address. */ | |
1240 | offset = reg_addr & 0x1ff; | |
1241 | ||
1242 | /* 8 bits (9 to 16) contains the page number. */ | |
1243 | page = reg_addr >> 9 & 0xff ; | |
1244 | ||
1245 | /* 4 bits (18 to 21) contains the function number. */ | |
1246 | fno = reg_addr >> 18 & 0xf; | |
1247 | ||
1248 | /* Standard Function Code for power management. */ | |
1249 | if (sfc == 0x1) | |
1250 | return sd_parse_ext_reg_power(card, fno, page, offset); | |
1251 | ||
4e6306e0 UH |
1252 | /* Standard Function Code for performance enhancement. */ |
1253 | if (sfc == 0x2) | |
1254 | return sd_parse_ext_reg_perf(card, fno, page, offset); | |
1255 | ||
c784f927 UH |
1256 | return 0; |
1257 | } | |
1258 | ||
1259 | static int sd_read_ext_regs(struct mmc_card *card) | |
1260 | { | |
1261 | int err, i; | |
1262 | u8 num_ext, *gen_info_buf; | |
1263 | u16 rev, len, next_ext_addr; | |
1264 | ||
1265 | if (mmc_host_is_spi(card->host)) | |
1266 | return 0; | |
1267 | ||
1268 | if (!(card->scr.cmds & SD_SCR_CMD48_SUPPORT)) | |
1269 | return 0; | |
1270 | ||
1271 | gen_info_buf = kzalloc(512, GFP_KERNEL); | |
1272 | if (!gen_info_buf) | |
1273 | return -ENOMEM; | |
1274 | ||
1275 | /* | |
1276 | * Read 512 bytes of general info, which is found at function number 0, | |
1277 | * at page 0 and with no offset. | |
1278 | */ | |
1279 | err = sd_read_ext_reg(card, 0, 0, 0, 512, gen_info_buf); | |
1280 | if (err) { | |
fc02e2b5 | 1281 | pr_err("%s: error %d reading general info of SD ext reg\n", |
c784f927 UH |
1282 | mmc_hostname(card->host), err); |
1283 | goto out; | |
1284 | } | |
1285 | ||
1286 | /* General info structure revision. */ | |
1287 | memcpy(&rev, &gen_info_buf[0], 2); | |
1288 | ||
1289 | /* Length of general info in bytes. */ | |
1290 | memcpy(&len, &gen_info_buf[2], 2); | |
1291 | ||
1292 | /* Number of extensions to be find. */ | |
1293 | num_ext = gen_info_buf[4]; | |
1294 | ||
fc02e2b5 ZL |
1295 | /* |
1296 | * We only support revision 0 and limit it to 512 bytes for simplicity. | |
1297 | * No matter what, let's return zero to allow us to continue using the | |
1298 | * card, even if we can't support the features from the SD function | |
1299 | * extensions registers. | |
1300 | */ | |
c784f927 UH |
1301 | if (rev != 0 || len > 512) { |
1302 | pr_warn("%s: non-supported SD ext reg layout\n", | |
1303 | mmc_hostname(card->host)); | |
1304 | goto out; | |
1305 | } | |
1306 | ||
1307 | /* | |
1308 | * Parse the extension registers. The first extension should start | |
1309 | * immediately after the general info header (16 bytes). | |
1310 | */ | |
1311 | next_ext_addr = 16; | |
1312 | for (i = 0; i < num_ext; i++) { | |
1313 | err = sd_parse_ext_reg(card, gen_info_buf, &next_ext_addr); | |
1314 | if (err) { | |
fc02e2b5 | 1315 | pr_err("%s: error %d parsing SD ext reg\n", |
c784f927 UH |
1316 | mmc_hostname(card->host), err); |
1317 | goto out; | |
1318 | } | |
1319 | } | |
1320 | ||
1321 | out: | |
1322 | kfree(gen_info_buf); | |
1323 | return err; | |
1324 | } | |
1325 | ||
130206a6 UH |
1326 | static bool sd_cache_enabled(struct mmc_host *host) |
1327 | { | |
1328 | return host->card->ext_perf.feature_enabled & SD_EXT_PERF_CACHE; | |
1329 | } | |
1330 | ||
1331 | static int sd_flush_cache(struct mmc_host *host) | |
1332 | { | |
1333 | struct mmc_card *card = host->card; | |
1334 | u8 *reg_buf, fno, page; | |
1335 | u16 offset; | |
1336 | int err; | |
1337 | ||
1338 | if (!sd_cache_enabled(host)) | |
1339 | return 0; | |
1340 | ||
1341 | reg_buf = kzalloc(512, GFP_KERNEL); | |
1342 | if (!reg_buf) | |
1343 | return -ENOMEM; | |
1344 | ||
1345 | /* | |
1346 | * Set Flush Cache at bit 0 in the performance enhancement register at | |
1347 | * 261 bytes offset. | |
1348 | */ | |
1349 | fno = card->ext_perf.fno; | |
1350 | page = card->ext_perf.page; | |
1351 | offset = card->ext_perf.offset + 261; | |
1352 | ||
1353 | err = sd_write_ext_reg(card, fno, page, offset, BIT(0)); | |
1354 | if (err) { | |
1355 | pr_warn("%s: error %d writing Cache Flush bit\n", | |
1356 | mmc_hostname(host), err); | |
1357 | goto out; | |
1358 | } | |
1359 | ||
1360 | err = mmc_poll_for_busy(card, SD_WRITE_EXTR_SINGLE_TIMEOUT_MS, false, | |
1361 | MMC_BUSY_EXTR_SINGLE); | |
1362 | if (err) | |
1363 | goto out; | |
1364 | ||
1365 | /* | |
1366 | * Read the Flush Cache bit. The card shall reset it, to confirm that | |
1367 | * it's has completed the flushing of the cache. | |
1368 | */ | |
1369 | err = sd_read_ext_reg(card, fno, page, offset, 1, reg_buf); | |
1370 | if (err) { | |
1371 | pr_warn("%s: error %d reading Cache Flush bit\n", | |
1372 | mmc_hostname(host), err); | |
1373 | goto out; | |
1374 | } | |
1375 | ||
1376 | if (reg_buf[0] & BIT(0)) | |
1377 | err = -ETIMEDOUT; | |
1378 | out: | |
1379 | kfree(reg_buf); | |
1380 | return err; | |
1381 | } | |
1382 | ||
1383 | static int sd_enable_cache(struct mmc_card *card) | |
1384 | { | |
1385 | u8 *reg_buf; | |
1386 | int err; | |
1387 | ||
1388 | card->ext_perf.feature_enabled &= ~SD_EXT_PERF_CACHE; | |
1389 | ||
1390 | reg_buf = kzalloc(512, GFP_KERNEL); | |
1391 | if (!reg_buf) | |
1392 | return -ENOMEM; | |
1393 | ||
1394 | /* | |
1395 | * Set Cache Enable at bit 0 in the performance enhancement register at | |
1396 | * 260 bytes offset. | |
1397 | */ | |
1398 | err = sd_write_ext_reg(card, card->ext_perf.fno, card->ext_perf.page, | |
1399 | card->ext_perf.offset + 260, BIT(0)); | |
1400 | if (err) { | |
1401 | pr_warn("%s: error %d writing Cache Enable bit\n", | |
1402 | mmc_hostname(card->host), err); | |
1403 | goto out; | |
1404 | } | |
1405 | ||
1406 | err = mmc_poll_for_busy(card, SD_WRITE_EXTR_SINGLE_TIMEOUT_MS, false, | |
1407 | MMC_BUSY_EXTR_SINGLE); | |
1408 | if (!err) | |
1409 | card->ext_perf.feature_enabled |= SD_EXT_PERF_CACHE; | |
1410 | ||
1411 | out: | |
1412 | kfree(reg_buf); | |
1413 | return err; | |
1414 | } | |
1415 | ||
71578a1e MM |
1416 | /* |
1417 | * Handle the detection and initialisation of a card. | |
1418 | * | |
1419 | * In the case of a resume, "oldcard" will contain the card | |
1420 | * we're trying to reinitialise. | |
1421 | */ | |
1422 | static int mmc_sd_init_card(struct mmc_host *host, u32 ocr, | |
1423 | struct mmc_card *oldcard) | |
1424 | { | |
1425 | struct mmc_card *card; | |
1426 | int err; | |
1427 | u32 cid[4]; | |
d6d50a15 | 1428 | u32 rocr = 0; |
6a11fc47 | 1429 | bool v18_fixup_failed = false; |
71578a1e | 1430 | |
71578a1e | 1431 | WARN_ON(!host->claimed); |
6a11fc47 | 1432 | retry: |
d6d50a15 | 1433 | err = mmc_sd_get_cid(host, ocr, cid, &rocr); |
71578a1e MM |
1434 | if (err) |
1435 | return err; | |
1436 | ||
1437 | if (oldcard) { | |
099b6481 | 1438 | if (memcmp(cid, oldcard->raw_cid, sizeof(cid)) != 0) { |
1439 | pr_debug("%s: Perhaps the card was replaced\n", | |
1440 | mmc_hostname(host)); | |
71578a1e | 1441 | return -ENOENT; |
099b6481 | 1442 | } |
7ea239d9 | 1443 | |
6abaa0c9 PO |
1444 | card = oldcard; |
1445 | } else { | |
1446 | /* | |
1447 | * Allocate card structure. | |
1448 | */ | |
51ec92e2 | 1449 | card = mmc_alloc_card(host, &sd_type); |
71578a1e MM |
1450 | if (IS_ERR(card)) |
1451 | return PTR_ERR(card); | |
6abaa0c9 | 1452 | |
69041150 | 1453 | card->ocr = ocr; |
6abaa0c9 PO |
1454 | card->type = MMC_TYPE_SD; |
1455 | memcpy(card->raw_cid, cid, sizeof(card->raw_cid)); | |
1456 | } | |
7ea239d9 | 1457 | |
eac86321 DA |
1458 | /* |
1459 | * Call the optional HC's init_card function to handle quirks. | |
1460 | */ | |
1461 | if (host->ops->init_card) | |
1462 | host->ops->init_card(host, card); | |
1463 | ||
7ea239d9 | 1464 | /* |
af517150 | 1465 | * For native busses: get card RCA and quit open drain mode. |
7ea239d9 | 1466 | */ |
af517150 DB |
1467 | if (!mmc_host_is_spi(host)) { |
1468 | err = mmc_send_relative_addr(host, &card->rca); | |
1469 | if (err) | |
7fca9675 | 1470 | goto free_card; |
af517150 | 1471 | } |
7ea239d9 | 1472 | |
6abaa0c9 | 1473 | if (!oldcard) { |
899404e1 AA |
1474 | u32 sduc_arg = SD_OCR_CCS | SD_OCR_2T; |
1475 | bool is_sduc = (rocr & sduc_arg) == sduc_arg; | |
1476 | ||
1477 | err = mmc_sd_get_csd(card, is_sduc); | |
17b0429d | 1478 | if (err) |
7fca9675 | 1479 | goto free_card; |
bd766312 | 1480 | |
6abaa0c9 PO |
1481 | mmc_decode_cid(card); |
1482 | } | |
7ea239d9 | 1483 | |
3d705d14 SH |
1484 | /* |
1485 | * handling only for cards supporting DSR and hosts requesting | |
1486 | * DSR configuration | |
1487 | */ | |
1488 | if (card->csd.dsr_imp && host->dsr_req) | |
1489 | mmc_set_dsr(host); | |
1490 | ||
7ea239d9 | 1491 | /* |
6abaa0c9 | 1492 | * Select card, as all following commands rely on that. |
7ea239d9 | 1493 | */ |
af517150 DB |
1494 | if (!mmc_host_is_spi(host)) { |
1495 | err = mmc_select_card(card); | |
1496 | if (err) | |
7fca9675 | 1497 | goto free_card; |
6abaa0c9 | 1498 | } |
1addfcdb | 1499 | |
469e5e47 JB |
1500 | /* Apply quirks prior to card setup */ |
1501 | mmc_fixup_device(card, mmc_sd_fixups); | |
1502 | ||
71578a1e MM |
1503 | err = mmc_sd_setup_card(host, card, oldcard != NULL); |
1504 | if (err) | |
1505 | goto free_card; | |
9d9f25c0 | 1506 | |
6a11fc47 AH |
1507 | /* |
1508 | * If the card has not been power cycled, it may still be using 1.8V | |
1509 | * signaling. Detect that situation and try to initialize a UHS-I (1.8V) | |
1510 | * transfer mode. | |
1511 | */ | |
f55f7da6 | 1512 | if (!v18_fixup_failed && !mmc_host_is_spi(host) && mmc_host_can_uhs(host) && |
6a11fc47 AH |
1513 | mmc_sd_card_using_v18(card) && |
1514 | host->ios.signal_voltage != MMC_SIGNAL_VOLTAGE_180) { | |
63f15609 AH |
1515 | if (mmc_host_set_uhs_voltage(host) || |
1516 | mmc_sd_init_uhs_card(card)) { | |
1517 | v18_fixup_failed = true; | |
1518 | mmc_power_cycle(host, ocr); | |
1519 | if (!oldcard) | |
1520 | mmc_remove_card(card); | |
1521 | goto retry; | |
6a11fc47 | 1522 | } |
63f15609 | 1523 | goto cont; |
6a11fc47 AH |
1524 | } |
1525 | ||
d6d50a15 | 1526 | /* Initialization sequence for UHS-I cards */ |
f55f7da6 | 1527 | if (rocr & SD_ROCR_S18A && mmc_host_can_uhs(host)) { |
d6d50a15 | 1528 | err = mmc_sd_init_uhs_card(card); |
17b0429d | 1529 | if (err) |
7ea239d9 | 1530 | goto free_card; |
d6d50a15 AN |
1531 | } else { |
1532 | /* | |
1533 | * Attempt to change to high-speed (if supported) | |
1534 | */ | |
1535 | err = mmc_sd_switch_hs(card); | |
1536 | if (err > 0) | |
cdc99179 | 1537 | mmc_set_timing(card->host, MMC_TIMING_SD_HS); |
d6d50a15 AN |
1538 | else if (err) |
1539 | goto free_card; | |
1540 | ||
1541 | /* | |
1542 | * Set bus speed. | |
1543 | */ | |
1544 | mmc_set_clock(host, mmc_sd_get_max_clock(card)); | |
7ea239d9 | 1545 | |
bac80683 WC |
1546 | if (host->ios.timing == MMC_TIMING_SD_HS && |
1547 | host->ops->prepare_sd_hs_tuning) { | |
1548 | err = host->ops->prepare_sd_hs_tuning(host, card); | |
1549 | if (err) | |
1550 | goto free_card; | |
1551 | } | |
1552 | ||
d6d50a15 AN |
1553 | /* |
1554 | * Switch to wider bus (if supported). | |
1555 | */ | |
1556 | if ((host->caps & MMC_CAP_4_BIT_DATA) && | |
1557 | (card->scr.bus_widths & SD_SCR_BUS_WIDTH_4)) { | |
1558 | err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4); | |
1559 | if (err) | |
1560 | goto free_card; | |
1561 | ||
1562 | mmc_set_bus_width(host, MMC_BUS_WIDTH_4); | |
1563 | } | |
bac80683 WC |
1564 | |
1565 | if (host->ios.timing == MMC_TIMING_SD_HS && | |
1566 | host->ops->execute_sd_hs_tuning) { | |
1567 | err = host->ops->execute_sd_hs_tuning(host, card); | |
1568 | if (err) | |
1569 | goto free_card; | |
1570 | } | |
7ea239d9 | 1571 | } |
15c56208 | 1572 | cont: |
c784f927 UH |
1573 | if (!oldcard) { |
1574 | /* Read/parse the extension registers. */ | |
1575 | err = sd_read_ext_regs(card); | |
1576 | if (err) | |
1577 | goto free_card; | |
1578 | } | |
1579 | ||
130206a6 UH |
1580 | /* Enable internal SD cache if supported. */ |
1581 | if (card->ext_perf.feature_support & SD_EXT_PERF_CACHE) { | |
1582 | err = sd_enable_cache(card); | |
1583 | if (err) | |
1584 | goto free_card; | |
1585 | } | |
1586 | ||
a7861651 | 1587 | if (!mmc_card_ult_capacity(card) && host->cqe_ops && !host->cqe_enabled) { |
045d705d BW |
1588 | err = host->cqe_ops->cqe_enable(host, card); |
1589 | if (!err) { | |
1590 | host->cqe_enabled = true; | |
1591 | host->hsq_enabled = true; | |
1592 | pr_info("%s: Host Software Queue enabled\n", | |
1593 | mmc_hostname(host)); | |
1594 | } | |
1595 | } | |
1596 | ||
247cfe53 KR |
1597 | if (host->caps2 & MMC_CAP2_AVOID_3_3V && |
1598 | host->ios.signal_voltage == MMC_SIGNAL_VOLTAGE_330) { | |
1599 | pr_err("%s: Host failed to negotiate down from 3.3V\n", | |
1600 | mmc_hostname(host)); | |
1601 | err = -EINVAL; | |
1602 | goto free_card; | |
1603 | } | |
15c56208 | 1604 | |
71578a1e | 1605 | host->card = card; |
17b0429d | 1606 | return 0; |
6abaa0c9 PO |
1607 | |
1608 | free_card: | |
1609 | if (!oldcard) | |
1610 | mmc_remove_card(card); | |
6abaa0c9 | 1611 | |
adf66a0d | 1612 | return err; |
6abaa0c9 PO |
1613 | } |
1614 | ||
d3049504 AH |
1615 | /* |
1616 | * Card detection - card is alive. | |
1617 | */ | |
1618 | static int mmc_sd_alive(struct mmc_host *host) | |
1619 | { | |
1620 | return mmc_send_status(host->card, NULL); | |
1621 | } | |
1622 | ||
6abaa0c9 PO |
1623 | /* |
1624 | * Card detection callback from host. | |
1625 | */ | |
1626 | static void mmc_sd_detect(struct mmc_host *host) | |
1627 | { | |
1628 | int err; | |
1629 | ||
6c0cedd1 | 1630 | mmc_get_card(host->card, NULL); |
6abaa0c9 PO |
1631 | |
1632 | /* | |
1633 | * Just check if our card has been removed. | |
1634 | */ | |
d3049504 | 1635 | err = _mmc_detect_card_removed(host); |
7ea239d9 | 1636 | |
6c0cedd1 | 1637 | mmc_put_card(host->card, NULL); |
7ea239d9 | 1638 | |
17b0429d | 1639 | if (err) { |
dfc29a10 UH |
1640 | mmc_remove_card(host->card); |
1641 | host->card = NULL; | |
6abaa0c9 PO |
1642 | |
1643 | mmc_claim_host(host); | |
1644 | mmc_detach_bus(host); | |
7f7e4129 | 1645 | mmc_power_off(host); |
6abaa0c9 PO |
1646 | mmc_release_host(host); |
1647 | } | |
1648 | } | |
1649 | ||
2c5d4276 UH |
1650 | static int sd_can_poweroff_notify(struct mmc_card *card) |
1651 | { | |
1652 | return card->ext_power.feature_support & SD_EXT_POWER_OFF_NOTIFY; | |
1653 | } | |
1654 | ||
1655 | static int sd_busy_poweroff_notify_cb(void *cb_data, bool *busy) | |
1656 | { | |
1657 | struct sd_busy_data *data = cb_data; | |
1658 | struct mmc_card *card = data->card; | |
1659 | int err; | |
1660 | ||
1661 | /* | |
1662 | * Read the status register for the power management function. It's at | |
1663 | * one byte offset and is one byte long. The Power Off Notification | |
1664 | * Ready is bit 0. | |
1665 | */ | |
1666 | err = sd_read_ext_reg(card, card->ext_power.fno, card->ext_power.page, | |
1667 | card->ext_power.offset + 1, 1, data->reg_buf); | |
1668 | if (err) { | |
1669 | pr_warn("%s: error %d reading status reg of PM func\n", | |
1670 | mmc_hostname(card->host), err); | |
1671 | return err; | |
1672 | } | |
1673 | ||
1674 | *busy = !(data->reg_buf[0] & BIT(0)); | |
1675 | return 0; | |
1676 | } | |
1677 | ||
1678 | static int sd_poweroff_notify(struct mmc_card *card) | |
1679 | { | |
1680 | struct sd_busy_data cb_data; | |
1681 | u8 *reg_buf; | |
1682 | int err; | |
1683 | ||
1684 | reg_buf = kzalloc(512, GFP_KERNEL); | |
1685 | if (!reg_buf) | |
1686 | return -ENOMEM; | |
1687 | ||
1688 | /* | |
1689 | * Set the Power Off Notification bit in the power management settings | |
1690 | * register at 2 bytes offset. | |
1691 | */ | |
1692 | err = sd_write_ext_reg(card, card->ext_power.fno, card->ext_power.page, | |
1693 | card->ext_power.offset + 2, BIT(0)); | |
1694 | if (err) { | |
1695 | pr_warn("%s: error %d writing Power Off Notify bit\n", | |
1696 | mmc_hostname(card->host), err); | |
1697 | goto out; | |
1698 | } | |
1699 | ||
379f56c2 AS |
1700 | /* Find out when the command is completed. */ |
1701 | err = mmc_poll_for_busy(card, SD_WRITE_EXTR_SINGLE_TIMEOUT_MS, false, | |
1702 | MMC_BUSY_EXTR_SINGLE); | |
1703 | if (err) | |
1704 | goto out; | |
1705 | ||
2c5d4276 UH |
1706 | cb_data.card = card; |
1707 | cb_data.reg_buf = reg_buf; | |
1760fdb6 | 1708 | err = __mmc_poll_for_busy(card->host, 0, SD_POWEROFF_NOTIFY_TIMEOUT_MS, |
2c5d4276 UH |
1709 | &sd_busy_poweroff_notify_cb, &cb_data); |
1710 | ||
1711 | out: | |
1712 | kfree(reg_buf); | |
1713 | return err; | |
1714 | } | |
1715 | ||
0cb403a2 | 1716 | static int _mmc_sd_suspend(struct mmc_host *host) |
6abaa0c9 | 1717 | { |
2c5d4276 | 1718 | struct mmc_card *card = host->card; |
85e727ed JC |
1719 | int err = 0; |
1720 | ||
6abaa0c9 | 1721 | mmc_claim_host(host); |
9ec775f7 | 1722 | |
2c5d4276 | 1723 | if (mmc_card_suspended(card)) |
9ec775f7 UH |
1724 | goto out; |
1725 | ||
2c5d4276 UH |
1726 | if (sd_can_poweroff_notify(card)) |
1727 | err = sd_poweroff_notify(card); | |
1728 | else if (!mmc_host_is_spi(host)) | |
85e727ed | 1729 | err = mmc_deselect_cards(host); |
cdc99179 | 1730 | |
9ec775f7 | 1731 | if (!err) { |
74590263 | 1732 | mmc_power_off(host); |
2c5d4276 | 1733 | mmc_card_set_suspended(card); |
9ec775f7 | 1734 | } |
95cdfb72 | 1735 | |
9ec775f7 UH |
1736 | out: |
1737 | mmc_release_host(host); | |
85e727ed | 1738 | return err; |
6abaa0c9 PO |
1739 | } |
1740 | ||
dfc29a10 UH |
1741 | /* |
1742 | * Host is being removed. Free up the current card and do a graceful power-off. | |
1743 | */ | |
1744 | static void mmc_sd_remove(struct mmc_host *host) | |
1745 | { | |
1746 | get_device(&host->card->dev); | |
1747 | mmc_remove_card(host->card); | |
1748 | ||
1749 | _mmc_sd_suspend(host); | |
1750 | ||
1751 | put_device(&host->card->dev); | |
1752 | host->card = NULL; | |
1753 | } | |
6abaa0c9 | 1754 | /* |
0cb403a2 UH |
1755 | * Callback for suspend |
1756 | */ | |
1757 | static int mmc_sd_suspend(struct mmc_host *host) | |
1758 | { | |
1759 | int err; | |
1760 | ||
1761 | err = _mmc_sd_suspend(host); | |
1762 | if (!err) { | |
1763 | pm_runtime_disable(&host->card->dev); | |
1764 | pm_runtime_set_suspended(&host->card->dev); | |
1765 | } | |
1766 | ||
1767 | return err; | |
1768 | } | |
1769 | ||
1770 | /* | |
6abaa0c9 PO |
1771 | * This function tries to determine if the same card is still present |
1772 | * and, if so, restore all state to it. | |
1773 | */ | |
0cb403a2 | 1774 | static int _mmc_sd_resume(struct mmc_host *host) |
6abaa0c9 | 1775 | { |
9ec775f7 | 1776 | int err = 0; |
6abaa0c9 | 1777 | |
6abaa0c9 | 1778 | mmc_claim_host(host); |
9ec775f7 UH |
1779 | |
1780 | if (!mmc_card_suspended(host->card)) | |
1781 | goto out; | |
1782 | ||
69041150 | 1783 | mmc_power_up(host, host->card->ocr); |
69041150 | 1784 | err = mmc_sd_init_card(host, host->card->ocr, host->card); |
9ec775f7 | 1785 | mmc_card_clr_suspended(host->card); |
2986d0bf | 1786 | |
9ec775f7 UH |
1787 | out: |
1788 | mmc_release_host(host); | |
95cdfb72 | 1789 | return err; |
6abaa0c9 PO |
1790 | } |
1791 | ||
0cb403a2 UH |
1792 | /* |
1793 | * Callback for resume | |
1794 | */ | |
1795 | static int mmc_sd_resume(struct mmc_host *host) | |
1796 | { | |
0cb403a2 | 1797 | pm_runtime_enable(&host->card->dev); |
c29536e8 | 1798 | return 0; |
0cb403a2 UH |
1799 | } |
1800 | ||
c4d770d7 UH |
1801 | /* |
1802 | * Callback for runtime_suspend. | |
1803 | */ | |
1804 | static int mmc_sd_runtime_suspend(struct mmc_host *host) | |
1805 | { | |
1806 | int err; | |
1807 | ||
1808 | if (!(host->caps & MMC_CAP_AGGRESSIVE_PM)) | |
1809 | return 0; | |
1810 | ||
0cb403a2 | 1811 | err = _mmc_sd_suspend(host); |
0cc81a8c | 1812 | if (err) |
f42cf8d6 | 1813 | pr_err("%s: error %d doing aggressive suspend\n", |
c4d770d7 | 1814 | mmc_hostname(host), err); |
c4d770d7 | 1815 | |
c4d770d7 UH |
1816 | return err; |
1817 | } | |
1818 | ||
1819 | /* | |
1820 | * Callback for runtime_resume. | |
1821 | */ | |
1822 | static int mmc_sd_runtime_resume(struct mmc_host *host) | |
1823 | { | |
1824 | int err; | |
1825 | ||
0cb403a2 | 1826 | err = _mmc_sd_resume(host); |
520322d9 | 1827 | if (err && err != -ENOMEDIUM) |
c29536e8 | 1828 | pr_err("%s: error %d doing runtime resume\n", |
c4d770d7 UH |
1829 | mmc_hostname(host), err); |
1830 | ||
c4d770d7 UH |
1831 | return 0; |
1832 | } | |
1833 | ||
3a3db603 | 1834 | static int mmc_sd_hw_reset(struct mmc_host *host) |
dc0ecfef JR |
1835 | { |
1836 | mmc_power_cycle(host, host->card->ocr); | |
3056c49c | 1837 | return mmc_sd_init_card(host, host->card->ocr, host->card); |
dc0ecfef JR |
1838 | } |
1839 | ||
6abaa0c9 PO |
1840 | static const struct mmc_bus_ops mmc_sd_ops = { |
1841 | .remove = mmc_sd_remove, | |
1842 | .detect = mmc_sd_detect, | |
c4d770d7 UH |
1843 | .runtime_suspend = mmc_sd_runtime_suspend, |
1844 | .runtime_resume = mmc_sd_runtime_resume, | |
6abaa0c9 PO |
1845 | .suspend = mmc_sd_suspend, |
1846 | .resume = mmc_sd_resume, | |
d3049504 | 1847 | .alive = mmc_sd_alive, |
5992e786 | 1848 | .shutdown = mmc_sd_suspend, |
3a3db603 | 1849 | .hw_reset = mmc_sd_hw_reset, |
130206a6 UH |
1850 | .cache_enabled = sd_cache_enabled, |
1851 | .flush_cache = sd_flush_cache, | |
6abaa0c9 PO |
1852 | }; |
1853 | ||
1854 | /* | |
1855 | * Starting point for SD card init. | |
1856 | */ | |
807e8e40 | 1857 | int mmc_attach_sd(struct mmc_host *host) |
6abaa0c9 PO |
1858 | { |
1859 | int err; | |
69041150 | 1860 | u32 ocr, rocr; |
6abaa0c9 | 1861 | |
d84075c8 | 1862 | WARN_ON(!host->claimed); |
6abaa0c9 | 1863 | |
807e8e40 AR |
1864 | err = mmc_send_app_op_cond(host, 0, &ocr); |
1865 | if (err) | |
1866 | return err; | |
1867 | ||
2501c917 | 1868 | mmc_attach_bus(host, &mmc_sd_ops); |
8f230f45 TI |
1869 | if (host->ocr_avail_sd) |
1870 | host->ocr_avail = host->ocr_avail_sd; | |
6abaa0c9 | 1871 | |
af517150 DB |
1872 | /* |
1873 | * We need to get OCR a different way for SPI. | |
1874 | */ | |
1875 | if (mmc_host_is_spi(host)) { | |
1876 | mmc_go_idle(host); | |
1877 | ||
1878 | err = mmc_spi_read_ocr(host, 0, &ocr); | |
1879 | if (err) | |
1880 | goto err; | |
1881 | } | |
1882 | ||
72741084 UH |
1883 | /* |
1884 | * Some SD cards claims an out of spec VDD voltage range. Let's treat | |
1885 | * these bits as being in-valid and especially also bit7. | |
1886 | */ | |
1887 | ocr &= ~0x7FFF; | |
1888 | ||
69041150 | 1889 | rocr = mmc_select_voltage(host, ocr); |
6abaa0c9 PO |
1890 | |
1891 | /* | |
1892 | * Can we support the voltage(s) of the card(s)? | |
1893 | */ | |
69041150 | 1894 | if (!rocr) { |
109b5bed | 1895 | err = -EINVAL; |
6abaa0c9 | 1896 | goto err; |
109b5bed | 1897 | } |
6abaa0c9 PO |
1898 | |
1899 | /* | |
1900 | * Detect and init the card. | |
1901 | */ | |
69041150 | 1902 | err = mmc_sd_init_card(host, rocr, NULL); |
17b0429d | 1903 | if (err) |
6abaa0c9 PO |
1904 | goto err; |
1905 | ||
1906 | mmc_release_host(host); | |
4101c16a | 1907 | err = mmc_add_card(host->card); |
7ea239d9 | 1908 | if (err) |
2986d0bf | 1909 | goto remove_card; |
7ea239d9 | 1910 | |
2860d060 | 1911 | mmc_claim_host(host); |
7ea239d9 PO |
1912 | return 0; |
1913 | ||
2986d0bf | 1914 | remove_card: |
6abaa0c9 | 1915 | mmc_remove_card(host->card); |
7ea239d9 | 1916 | host->card = NULL; |
2986d0bf | 1917 | mmc_claim_host(host); |
7ea239d9 PO |
1918 | err: |
1919 | mmc_detach_bus(host); | |
7ea239d9 | 1920 | |
a3c76eb9 | 1921 | pr_err("%s: error %d whilst initialising SD card\n", |
109b5bed PO |
1922 | mmc_hostname(host), err); |
1923 | ||
adf66a0d | 1924 | return err; |
7ea239d9 | 1925 | } |