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