]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blame - drivers/mmc/core/sdio.c
digsig: Fix memory leakage in digsig_verify_rsa()
[mirror_ubuntu-jammy-kernel.git] / drivers / mmc / core / sdio.c
CommitLineData
5c4e6f13
PO
1/*
2 * linux/drivers/mmc/sdio.c
3 *
4 * Copyright 2006-2007 Pierre Ossman
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or (at
9 * your option) any later version.
10 */
11
12#include <linux/err.h>
81968561 13#include <linux/pm_runtime.h>
5c4e6f13
PO
14
15#include <linux/mmc/host.h>
16#include <linux/mmc/card.h>
a4924c71 17#include <linux/mmc/mmc.h>
35c66c19 18#include <linux/mmc/sdio.h>
e29a7d73 19#include <linux/mmc/sdio_func.h>
eab40687 20#include <linux/mmc/sdio_ids.h>
5c4e6f13
PO
21
22#include "core.h"
23#include "bus.h"
71578a1e 24#include "sd.h"
e29a7d73 25#include "sdio_bus.h"
5c4e6f13
PO
26#include "mmc_ops.h"
27#include "sd_ops.h"
28#include "sdio_ops.h"
b7261261 29#include "sdio_cis.h"
5c4e6f13 30
0597007f
PO
31static int sdio_read_fbr(struct sdio_func *func)
32{
33 int ret;
34 unsigned char data;
35
eab40687
OBC
36 if (mmc_card_nonstd_func_interface(func->card)) {
37 func->class = SDIO_CLASS_NONE;
38 return 0;
39 }
40
0597007f 41 ret = mmc_io_rw_direct(func->card, 0, 0,
7616ee95 42 SDIO_FBR_BASE(func->num) + SDIO_FBR_STD_IF, 0, &data);
0597007f
PO
43 if (ret)
44 goto out;
45
46 data &= 0x0f;
47
48 if (data == 0x0f) {
49 ret = mmc_io_rw_direct(func->card, 0, 0,
7616ee95 50 SDIO_FBR_BASE(func->num) + SDIO_FBR_STD_IF_EXT, 0, &data);
0597007f
PO
51 if (ret)
52 goto out;
53 }
54
55 func->class = data;
56
57out:
58 return ret;
59}
60
e29a7d73
PO
61static int sdio_init_func(struct mmc_card *card, unsigned int fn)
62{
0597007f 63 int ret;
e29a7d73
PO
64 struct sdio_func *func;
65
66 BUG_ON(fn > SDIO_MAX_FUNCS);
67
68 func = sdio_alloc_func(card);
69 if (IS_ERR(func))
70 return PTR_ERR(func);
71
72 func->num = fn;
73
6f51be3d
GI
74 if (!(card->quirks & MMC_QUIRK_NONSTD_SDIO)) {
75 ret = sdio_read_fbr(func);
76 if (ret)
77 goto fail;
0597007f 78
6f51be3d
GI
79 ret = sdio_read_func_cis(func);
80 if (ret)
81 goto fail;
82 } else {
83 func->vendor = func->card->cis.vendor;
84 func->device = func->card->cis.device;
85 func->max_blksize = func->card->cis.blksize;
86 }
b7261261 87
e29a7d73
PO
88 card->sdio_func[fn - 1] = func;
89
90 return 0;
0597007f
PO
91
92fail:
93 /*
94 * It is okay to remove the function here even though we hold
95 * the host lock as we haven't registered the device yet.
96 */
97 sdio_remove_func(func);
98 return ret;
e29a7d73
PO
99}
100
2d0d68f5 101static int sdio_read_cccr(struct mmc_card *card, u32 ocr)
35c66c19
PO
102{
103 int ret;
104 int cccr_vsn;
2d0d68f5 105 int uhs = ocr & R4_18V_PRESENT;
35c66c19 106 unsigned char data;
a303c531 107 unsigned char speed;
35c66c19
PO
108
109 memset(&card->cccr, 0, sizeof(struct sdio_cccr));
110
111 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_CCCR, 0, &data);
112 if (ret)
113 goto out;
114
115 cccr_vsn = data & 0x0f;
116
b4625dab 117 if (cccr_vsn > SDIO_CCCR_REV_3_00) {
a3c76eb9 118 pr_err("%s: unrecognised CCCR structure version %d\n",
35c66c19
PO
119 mmc_hostname(card->host), cccr_vsn);
120 return -EINVAL;
121 }
122
123 card->cccr.sdio_vsn = (data & 0xf0) >> 4;
124
125 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_CAPS, 0, &data);
126 if (ret)
127 goto out;
128
129 if (data & SDIO_CCCR_CAP_SMB)
130 card->cccr.multi_block = 1;
131 if (data & SDIO_CCCR_CAP_LSC)
132 card->cccr.low_speed = 1;
133 if (data & SDIO_CCCR_CAP_4BLS)
134 card->cccr.wide_bus = 1;
135
136 if (cccr_vsn >= SDIO_CCCR_REV_1_10) {
137 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_POWER, 0, &data);
138 if (ret)
139 goto out;
140
141 if (data & SDIO_POWER_SMPC)
142 card->cccr.high_power = 1;
143 }
144
145 if (cccr_vsn >= SDIO_CCCR_REV_1_20) {
a303c531 146 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed);
35c66c19
PO
147 if (ret)
148 goto out;
149
a303c531
PR
150 card->scr.sda_spec3 = 0;
151 card->sw_caps.sd3_bus_mode = 0;
152 card->sw_caps.sd3_drv_type = 0;
2d0d68f5 153 if (cccr_vsn >= SDIO_CCCR_REV_3_00 && uhs) {
a303c531
PR
154 card->scr.sda_spec3 = 1;
155 ret = mmc_io_rw_direct(card, 0, 0,
156 SDIO_CCCR_UHS, 0, &data);
157 if (ret)
158 goto out;
159
160 if (card->host->caps &
161 (MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 |
162 MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR104 |
163 MMC_CAP_UHS_DDR50)) {
164 if (data & SDIO_UHS_DDR50)
165 card->sw_caps.sd3_bus_mode
166 |= SD_MODE_UHS_DDR50;
167
168 if (data & SDIO_UHS_SDR50)
169 card->sw_caps.sd3_bus_mode
170 |= SD_MODE_UHS_SDR50;
171
172 if (data & SDIO_UHS_SDR104)
173 card->sw_caps.sd3_bus_mode
174 |= SD_MODE_UHS_SDR104;
175 }
176
177 ret = mmc_io_rw_direct(card, 0, 0,
178 SDIO_CCCR_DRIVE_STRENGTH, 0, &data);
179 if (ret)
180 goto out;
181
182 if (data & SDIO_DRIVE_SDTA)
183 card->sw_caps.sd3_drv_type |= SD_DRIVER_TYPE_A;
184 if (data & SDIO_DRIVE_SDTC)
185 card->sw_caps.sd3_drv_type |= SD_DRIVER_TYPE_C;
186 if (data & SDIO_DRIVE_SDTD)
187 card->sw_caps.sd3_drv_type |= SD_DRIVER_TYPE_D;
188 }
189
190 /* if no uhs mode ensure we check for high speed */
191 if (!card->sw_caps.sd3_bus_mode) {
192 if (speed & SDIO_SPEED_SHS) {
193 card->cccr.high_speed = 1;
194 card->sw_caps.hs_max_dtr = 50000000;
195 } else {
196 card->cccr.high_speed = 0;
197 card->sw_caps.hs_max_dtr = 25000000;
198 }
199 }
35c66c19
PO
200 }
201
202out:
203 return ret;
204}
205
4ff6471c
PO
206static int sdio_enable_wide(struct mmc_card *card)
207{
208 int ret;
209 u8 ctrl;
210
211 if (!(card->host->caps & MMC_CAP_4_BIT_DATA))
212 return 0;
213
214 if (card->cccr.low_speed && !card->cccr.wide_bus)
215 return 0;
216
217 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl);
218 if (ret)
219 return ret;
220
2a0fe914
YD
221 if ((ctrl & SDIO_BUS_WIDTH_MASK) == SDIO_BUS_WIDTH_RESERVED)
222 pr_warning("%s: SDIO_CCCR_IF is invalid: 0x%02x\n",
223 mmc_hostname(card->host), ctrl);
224
225 /* set as 4-bit bus width */
226 ctrl &= ~SDIO_BUS_WIDTH_MASK;
4ff6471c
PO
227 ctrl |= SDIO_BUS_WIDTH_4BIT;
228
229 ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL);
230 if (ret)
231 return ret;
232
7310ece8 233 return 1;
4ff6471c
PO
234}
235
006ebd5d
OBC
236/*
237 * If desired, disconnect the pull-up resistor on CD/DAT[3] (pin 1)
238 * of the card. This may be required on certain setups of boards,
239 * controllers and embedded sdio device which do not need the card's
240 * pull-up. As a result, card detection is disabled and power is saved.
241 */
242static int sdio_disable_cd(struct mmc_card *card)
243{
244 int ret;
245 u8 ctrl;
246
2059a02d 247 if (!mmc_card_disable_cd(card))
006ebd5d
OBC
248 return 0;
249
250 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl);
251 if (ret)
252 return ret;
253
254 ctrl |= SDIO_BUS_CD_DISABLE;
255
256 return mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL);
257}
258
6b5eda36
DD
259/*
260 * Devices that remain active during a system suspend are
261 * put back into 1-bit mode.
262 */
263static int sdio_disable_wide(struct mmc_card *card)
264{
265 int ret;
266 u8 ctrl;
267
268 if (!(card->host->caps & MMC_CAP_4_BIT_DATA))
269 return 0;
270
271 if (card->cccr.low_speed && !card->cccr.wide_bus)
272 return 0;
273
274 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl);
275 if (ret)
276 return ret;
277
278 if (!(ctrl & SDIO_BUS_WIDTH_4BIT))
279 return 0;
280
281 ctrl &= ~SDIO_BUS_WIDTH_4BIT;
282 ctrl |= SDIO_BUS_ASYNC_INT;
283
284 ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL);
285 if (ret)
286 return ret;
287
288 mmc_set_bus_width(card->host, MMC_BUS_WIDTH_1);
289
290 return 0;
291}
292
7310ece8
MM
293
294static int sdio_enable_4bit_bus(struct mmc_card *card)
295{
296 int err;
297
298 if (card->type == MMC_TYPE_SDIO)
299 return sdio_enable_wide(card);
300
301 if ((card->host->caps & MMC_CAP_4_BIT_DATA) &&
302 (card->scr.bus_widths & SD_SCR_BUS_WIDTH_4)) {
303 err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4);
304 if (err)
305 return err;
306 } else
307 return 0;
308
309 err = sdio_enable_wide(card);
310 if (err <= 0)
311 mmc_app_set_bus_width(card, MMC_BUS_WIDTH_1);
312
313 return err;
314}
315
316
d16f5770
PO
317/*
318 * Test if the card supports high-speed mode and, if so, switch to it.
319 */
7310ece8 320static int mmc_sdio_switch_hs(struct mmc_card *card, int enable)
d16f5770
PO
321{
322 int ret;
323 u8 speed;
324
325 if (!(card->host->caps & MMC_CAP_SD_HIGHSPEED))
326 return 0;
327
328 if (!card->cccr.high_speed)
329 return 0;
330
331 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed);
332 if (ret)
333 return ret;
334
7310ece8
MM
335 if (enable)
336 speed |= SDIO_SPEED_EHS;
337 else
338 speed &= ~SDIO_SPEED_EHS;
d16f5770
PO
339
340 ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_SPEED, speed, NULL);
341 if (ret)
342 return ret;
343
71578a1e
MM
344 return 1;
345}
d16f5770 346
7310ece8
MM
347/*
348 * Enable SDIO/combo card's high-speed mode. Return 0/1 if [not]supported.
349 */
350static int sdio_enable_hs(struct mmc_card *card)
351{
352 int ret;
353
354 ret = mmc_sdio_switch_hs(card, true);
355 if (ret <= 0 || card->type == MMC_TYPE_SDIO)
356 return ret;
357
358 ret = mmc_sd_switch_hs(card);
359 if (ret <= 0)
360 mmc_sdio_switch_hs(card, false);
361
362 return ret;
363}
364
71578a1e
MM
365static unsigned mmc_sdio_get_max_clock(struct mmc_card *card)
366{
367 unsigned max_dtr;
368
369 if (mmc_card_highspeed(card)) {
370 /*
371 * The SDIO specification doesn't mention how
372 * the CIS transfer speed register relates to
373 * high-speed, but it seems that 50 MHz is
374 * mandatory.
375 */
376 max_dtr = 50000000;
377 } else {
378 max_dtr = card->cis.max_dtr;
379 }
380
7310ece8
MM
381 if (card->type == MMC_TYPE_SD_COMBO)
382 max_dtr = min(max_dtr, mmc_sd_get_max_clock(card));
383
71578a1e 384 return max_dtr;
d16f5770
PO
385}
386
a303c531
PR
387static unsigned char host_drive_to_sdio_drive(int host_strength)
388{
389 switch (host_strength) {
390 case MMC_SET_DRIVER_TYPE_A:
391 return SDIO_DTSx_SET_TYPE_A;
392 case MMC_SET_DRIVER_TYPE_B:
393 return SDIO_DTSx_SET_TYPE_B;
394 case MMC_SET_DRIVER_TYPE_C:
395 return SDIO_DTSx_SET_TYPE_C;
396 case MMC_SET_DRIVER_TYPE_D:
397 return SDIO_DTSx_SET_TYPE_D;
398 default:
399 return SDIO_DTSx_SET_TYPE_B;
400 }
401}
402
403static void sdio_select_driver_type(struct mmc_card *card)
404{
405 int host_drv_type = SD_DRIVER_TYPE_B;
406 int card_drv_type = SD_DRIVER_TYPE_B;
407 int drive_strength;
408 unsigned char card_strength;
409 int err;
410
411 /*
412 * If the host doesn't support any of the Driver Types A,C or D,
413 * or there is no board specific handler then default Driver
414 * Type B is used.
415 */
416 if (!(card->host->caps &
417 (MMC_CAP_DRIVER_TYPE_A |
418 MMC_CAP_DRIVER_TYPE_C |
419 MMC_CAP_DRIVER_TYPE_D)))
420 return;
421
422 if (!card->host->ops->select_drive_strength)
423 return;
424
425 if (card->host->caps & MMC_CAP_DRIVER_TYPE_A)
426 host_drv_type |= SD_DRIVER_TYPE_A;
427
428 if (card->host->caps & MMC_CAP_DRIVER_TYPE_C)
429 host_drv_type |= SD_DRIVER_TYPE_C;
430
431 if (card->host->caps & MMC_CAP_DRIVER_TYPE_D)
432 host_drv_type |= SD_DRIVER_TYPE_D;
433
434 if (card->sw_caps.sd3_drv_type & SD_DRIVER_TYPE_A)
435 card_drv_type |= SD_DRIVER_TYPE_A;
436
437 if (card->sw_caps.sd3_drv_type & SD_DRIVER_TYPE_C)
438 card_drv_type |= SD_DRIVER_TYPE_C;
439
440 if (card->sw_caps.sd3_drv_type & SD_DRIVER_TYPE_D)
441 card_drv_type |= SD_DRIVER_TYPE_D;
442
443 /*
444 * The drive strength that the hardware can support
445 * depends on the board design. Pass the appropriate
446 * information and let the hardware specific code
447 * return what is possible given the options
448 */
449 drive_strength = card->host->ops->select_drive_strength(
450 card->sw_caps.uhs_max_dtr,
451 host_drv_type, card_drv_type);
452
453 /* if error just use default for drive strength B */
454 err = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_DRIVE_STRENGTH, 0,
455 &card_strength);
456 if (err)
457 return;
458
459 card_strength &= ~(SDIO_DRIVE_DTSx_MASK<<SDIO_DRIVE_DTSx_SHIFT);
460 card_strength |= host_drive_to_sdio_drive(drive_strength);
461
462 err = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_DRIVE_STRENGTH,
463 card_strength, NULL);
464
465 /* if error default to drive strength B */
466 if (!err)
467 mmc_set_driver_type(card->host, drive_strength);
468}
469
470
471static int sdio_set_bus_speed_mode(struct mmc_card *card)
472{
473 unsigned int bus_speed, timing;
474 int err;
475 unsigned char speed;
476
477 /*
478 * If the host doesn't support any of the UHS-I modes, fallback on
479 * default speed.
480 */
481 if (!(card->host->caps & (MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 |
482 MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR104 | MMC_CAP_UHS_DDR50)))
483 return 0;
484
485 bus_speed = SDIO_SPEED_SDR12;
486 timing = MMC_TIMING_UHS_SDR12;
487 if ((card->host->caps & MMC_CAP_UHS_SDR104) &&
488 (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR104)) {
489 bus_speed = SDIO_SPEED_SDR104;
490 timing = MMC_TIMING_UHS_SDR104;
491 card->sw_caps.uhs_max_dtr = UHS_SDR104_MAX_DTR;
492 } else if ((card->host->caps & MMC_CAP_UHS_DDR50) &&
493 (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_DDR50)) {
494 bus_speed = SDIO_SPEED_DDR50;
495 timing = MMC_TIMING_UHS_DDR50;
496 card->sw_caps.uhs_max_dtr = UHS_DDR50_MAX_DTR;
497 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
498 MMC_CAP_UHS_SDR50)) && (card->sw_caps.sd3_bus_mode &
499 SD_MODE_UHS_SDR50)) {
500 bus_speed = SDIO_SPEED_SDR50;
501 timing = MMC_TIMING_UHS_SDR50;
502 card->sw_caps.uhs_max_dtr = UHS_SDR50_MAX_DTR;
503 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
504 MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25)) &&
505 (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR25)) {
506 bus_speed = SDIO_SPEED_SDR25;
507 timing = MMC_TIMING_UHS_SDR25;
508 card->sw_caps.uhs_max_dtr = UHS_SDR25_MAX_DTR;
509 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
510 MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25 |
511 MMC_CAP_UHS_SDR12)) && (card->sw_caps.sd3_bus_mode &
512 SD_MODE_UHS_SDR12)) {
513 bus_speed = SDIO_SPEED_SDR12;
514 timing = MMC_TIMING_UHS_SDR12;
515 card->sw_caps.uhs_max_dtr = UHS_SDR12_MAX_DTR;
516 }
517
518 err = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed);
519 if (err)
520 return err;
521
522 speed &= ~SDIO_SPEED_BSS_MASK;
523 speed |= bus_speed;
524 err = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_SPEED, speed, NULL);
525 if (err)
526 return err;
527
528 if (bus_speed) {
529 mmc_set_timing(card->host, timing);
530 mmc_set_clock(card->host, card->sw_caps.uhs_max_dtr);
531 }
532
533 return 0;
534}
535
536/*
537 * UHS-I specific initialization procedure
538 */
539static int mmc_sdio_init_uhs_card(struct mmc_card *card)
540{
541 int err;
542
543 if (!card->scr.sda_spec3)
544 return 0;
545
546 /*
547 * Switch to wider bus (if supported).
548 */
549 if (card->host->caps & MMC_CAP_4_BIT_DATA) {
550 err = sdio_enable_4bit_bus(card);
551 if (err > 0) {
552 mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4);
553 err = 0;
554 }
555 }
556
557 /* Set the driver strength for the card */
558 sdio_select_driver_type(card);
559
560 /* Set bus speed mode of the card */
561 err = sdio_set_bus_speed_mode(card);
562 if (err)
563 goto out;
564
565 /* Initialize and start re-tuning timer */
566 if (!mmc_host_is_spi(card->host) && card->host->ops->execute_tuning)
a4924c71
G
567 err = card->host->ops->execute_tuning(card->host,
568 MMC_SEND_TUNING_BLOCK);
a303c531
PR
569
570out:
571
572 return err;
573}
574
17d33e14
NP
575/*
576 * Handle the detection and initialisation of a card.
577 *
578 * In the case of a resume, "oldcard" will contain the card
579 * we're trying to reinitialise.
580 */
581static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr,
3bca4cf7 582 struct mmc_card *oldcard, int powered_resume)
17d33e14
NP
583{
584 struct mmc_card *card;
585 int err;
586
587 BUG_ON(!host);
588 WARN_ON(!host->claimed);
589
590 /*
591 * Inform the card of the voltage
592 */
3bca4cf7
CB
593 if (!powered_resume) {
594 err = mmc_send_io_op_cond(host, host->ocr, &ocr);
595 if (err)
596 goto err;
597 }
17d33e14
NP
598
599 /*
600 * For SPI, enable CRC as appropriate.
601 */
602 if (mmc_host_is_spi(host)) {
603 err = mmc_spi_set_crc(host, use_spi_crc);
604 if (err)
605 goto err;
606 }
607
608 /*
609 * Allocate card structure.
610 */
611 card = mmc_alloc_card(host, NULL);
612 if (IS_ERR(card)) {
613 err = PTR_ERR(card);
614 goto err;
615 }
616
d6d50a15
AN
617 if ((ocr & R4_MEMORY_PRESENT) &&
618 mmc_sd_get_cid(host, host->ocr & ocr, card->raw_cid, NULL) == 0) {
7310ece8
MM
619 card->type = MMC_TYPE_SD_COMBO;
620
621 if (oldcard && (oldcard->type != MMC_TYPE_SD_COMBO ||
622 memcmp(card->raw_cid, oldcard->raw_cid, sizeof(card->raw_cid)) != 0)) {
623 mmc_remove_card(card);
624 return -ENOENT;
625 }
626 } else {
627 card->type = MMC_TYPE_SDIO;
628
629 if (oldcard && oldcard->type != MMC_TYPE_SDIO) {
630 mmc_remove_card(card);
631 return -ENOENT;
632 }
633 }
17d33e14 634
3fcb027d
DM
635 /*
636 * Call the optional HC's init_card function to handle quirks.
637 */
638 if (host->ops->init_card)
639 host->ops->init_card(host, card);
640
a303c531
PR
641 /*
642 * If the host and card support UHS-I mode request the card
643 * to switch to 1.8V signaling level. No 1.8v signalling if
7122bbb0 644 * UHS mode is not enabled to maintain compatibility and some
a303c531
PR
645 * systems that claim 1.8v signalling in fact do not support
646 * it.
647 */
648 if ((ocr & R4_18V_PRESENT) &&
649 (host->caps &
650 (MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 |
651 MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR104 |
652 MMC_CAP_UHS_DDR50))) {
653 err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180,
654 true);
655 if (err) {
656 ocr &= ~R4_18V_PRESENT;
657 host->ocr &= ~R4_18V_PRESENT;
658 }
659 err = 0;
660 } else {
661 ocr &= ~R4_18V_PRESENT;
662 host->ocr &= ~R4_18V_PRESENT;
663 }
664
17d33e14
NP
665 /*
666 * For native busses: set card RCA and quit open drain mode.
667 */
3bca4cf7 668 if (!powered_resume && !mmc_host_is_spi(host)) {
17d33e14
NP
669 err = mmc_send_relative_addr(host, &card->rca);
670 if (err)
671 goto remove;
672
0aab3995
SNX
673 /*
674 * Update oldcard with the new RCA received from the SDIO
675 * device -- we're doing this so that it's updated in the
676 * "card" struct when oldcard overwrites that later.
677 */
678 if (oldcard)
679 oldcard->rca = card->rca;
17d33e14
NP
680 }
681
7310ece8
MM
682 /*
683 * Read CSD, before selecting the card
684 */
685 if (!oldcard && card->type == MMC_TYPE_SD_COMBO) {
686 err = mmc_sd_get_csd(host, card);
687 if (err)
688 return err;
689
690 mmc_decode_cid(card);
691 }
692
17d33e14
NP
693 /*
694 * Select card, as all following commands rely on that.
695 */
3bca4cf7 696 if (!powered_resume && !mmc_host_is_spi(host)) {
17d33e14
NP
697 err = mmc_select_card(card);
698 if (err)
699 goto remove;
700 }
701
6f51be3d
GI
702 if (card->quirks & MMC_QUIRK_NONSTD_SDIO) {
703 /*
704 * This is non-standard SDIO device, meaning it doesn't
705 * have any CIA (Common I/O area) registers present.
706 * It's host's responsibility to fill cccr and cis
707 * structures in init_card().
708 */
709 mmc_set_clock(host, card->cis.max_dtr);
710
711 if (card->cccr.high_speed) {
712 mmc_card_set_highspeed(card);
713 mmc_set_timing(card->host, MMC_TIMING_SD_HS);
714 }
715
716 goto finish;
717 }
718
17d33e14
NP
719 /*
720 * Read the common registers.
721 */
2d0d68f5 722 err = sdio_read_cccr(card, ocr);
17d33e14
NP
723 if (err)
724 goto remove;
725
726 /*
727 * Read the common CIS tuples.
728 */
729 err = sdio_read_common_cis(card);
730 if (err)
731 goto remove;
732
733 if (oldcard) {
734 int same = (card->cis.vendor == oldcard->cis.vendor &&
735 card->cis.device == oldcard->cis.device);
736 mmc_remove_card(card);
7310ece8
MM
737 if (!same)
738 return -ENOENT;
739
17d33e14
NP
740 card = oldcard;
741 }
32780cd1 742 mmc_fixup_device(card, NULL);
17d33e14 743
7310ece8
MM
744 if (card->type == MMC_TYPE_SD_COMBO) {
745 err = mmc_sd_setup_card(host, card, oldcard != NULL);
746 /* handle as SDIO-only card if memory init failed */
747 if (err) {
748 mmc_go_idle(host);
749 if (mmc_host_is_spi(host))
750 /* should not fail, as it worked previously */
751 mmc_spi_set_crc(host, use_spi_crc);
752 card->type = MMC_TYPE_SDIO;
753 } else
754 card->dev.type = &sd_type;
755 }
756
757 /*
758 * If needed, disconnect card detection pull-up resistor.
759 */
760 err = sdio_disable_cd(card);
761 if (err)
762 goto remove;
763
a303c531
PR
764 /* Initialization sequence for UHS-I cards */
765 /* Only if card supports 1.8v and UHS signaling */
766 if ((ocr & R4_18V_PRESENT) && card->sw_caps.sd3_bus_mode) {
767 err = mmc_sdio_init_uhs_card(card);
768 if (err)
769 goto remove;
17d33e14 770
a303c531
PR
771 /* Card is an ultra-high-speed card */
772 mmc_card_set_uhs(card);
773 } else {
774 /*
775 * Switch to high-speed (if supported).
776 */
777 err = sdio_enable_hs(card);
778 if (err > 0)
779 mmc_sd_go_highspeed(card);
780 else if (err)
781 goto remove;
17d33e14 782
a303c531
PR
783 /*
784 * Change to the card's maximum speed.
785 */
786 mmc_set_clock(host, mmc_sdio_get_max_clock(card));
17d33e14 787
a303c531
PR
788 /*
789 * Switch to wider bus (if supported).
790 */
791 err = sdio_enable_4bit_bus(card);
792 if (err > 0)
793 mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4);
794 else if (err)
795 goto remove;
796 }
6f51be3d 797finish:
17d33e14
NP
798 if (!oldcard)
799 host->card = card;
800 return 0;
801
802remove:
803 if (!oldcard)
804 mmc_remove_card(card);
805
806err:
807 return err;
808}
809
5c4e6f13
PO
810/*
811 * Host is being removed. Free up the current card.
812 */
813static void mmc_sdio_remove(struct mmc_host *host)
814{
e29a7d73
PO
815 int i;
816
5c4e6f13
PO
817 BUG_ON(!host);
818 BUG_ON(!host->card);
819
e29a7d73
PO
820 for (i = 0;i < host->card->sdio_funcs;i++) {
821 if (host->card->sdio_func[i]) {
822 sdio_remove_func(host->card->sdio_func[i]);
823 host->card->sdio_func[i] = NULL;
824 }
825 }
826
5c4e6f13
PO
827 mmc_remove_card(host->card);
828 host->card = NULL;
829}
830
d3049504
AH
831/*
832 * Card detection - card is alive.
833 */
834static int mmc_sdio_alive(struct mmc_host *host)
835{
836 return mmc_select_card(host->card);
837}
838
5c4e6f13
PO
839/*
840 * Card detection callback from host.
841 */
842static void mmc_sdio_detect(struct mmc_host *host)
843{
844 int err;
845
846 BUG_ON(!host);
847 BUG_ON(!host->card);
848
87973ba2 849 /* Make sure card is powered before detecting it */
ed919b01
OBC
850 if (host->caps & MMC_CAP_POWER_OFF_CARD) {
851 err = pm_runtime_get_sync(&host->card->dev);
852 if (err < 0)
853 goto out;
854 }
87973ba2 855
5c4e6f13
PO
856 mmc_claim_host(host);
857
858 /*
859 * Just check if our card has been removed.
860 */
d3049504 861 err = _mmc_detect_card_removed(host);
5c4e6f13
PO
862
863 mmc_release_host(host);
864
4d0812c3
OBC
865 /*
866 * Tell PM core it's OK to power off the card now.
867 *
868 * The _sync variant is used in order to ensure that the card
869 * is left powered off in case an error occurred, and the card
870 * is going to be removed.
871 *
872 * Since there is no specific reason to believe a new user
873 * is about to show up at this point, the _sync variant is
874 * desirable anyway.
875 */
ed919b01
OBC
876 if (host->caps & MMC_CAP_POWER_OFF_CARD)
877 pm_runtime_put_sync(&host->card->dev);
4d0812c3 878
87973ba2 879out:
5c4e6f13
PO
880 if (err) {
881 mmc_sdio_remove(host);
882
883 mmc_claim_host(host);
884 mmc_detach_bus(host);
7f7e4129 885 mmc_power_off(host);
5c4e6f13
PO
886 mmc_release_host(host);
887 }
888}
889
17d33e14
NP
890/*
891 * SDIO suspend. We need to suspend all functions separately.
892 * Therefore all registered functions must have drivers with suspend
893 * and resume methods. Failing that we simply remove the whole card.
894 */
95cdfb72 895static int mmc_sdio_suspend(struct mmc_host *host)
17d33e14 896{
95cdfb72 897 int i, err = 0;
17d33e14 898
17d33e14
NP
899 for (i = 0; i < host->card->sdio_funcs; i++) {
900 struct sdio_func *func = host->card->sdio_func[i];
901 if (func && sdio_func_present(func) && func->dev.driver) {
902 const struct dev_pm_ops *pmops = func->dev.driver->pm;
903 if (!pmops || !pmops->suspend || !pmops->resume) {
95cdfb72
NP
904 /* force removal of entire card in that case */
905 err = -ENOSYS;
906 } else
907 err = pmops->suspend(&func->dev);
908 if (err)
909 break;
17d33e14
NP
910 }
911 }
95cdfb72 912 while (err && --i >= 0) {
17d33e14
NP
913 struct sdio_func *func = host->card->sdio_func[i];
914 if (func && sdio_func_present(func) && func->dev.driver) {
915 const struct dev_pm_ops *pmops = func->dev.driver->pm;
95cdfb72 916 pmops->resume(&func->dev);
17d33e14
NP
917 }
918 }
95cdfb72 919
6b93d01f 920 if (!err && mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) {
6b5eda36
DD
921 mmc_claim_host(host);
922 sdio_disable_wide(host->card);
923 mmc_release_host(host);
924 }
925
95cdfb72 926 return err;
17d33e14
NP
927}
928
95cdfb72 929static int mmc_sdio_resume(struct mmc_host *host)
17d33e14 930{
080bc977 931 int i, err = 0;
17d33e14
NP
932
933 BUG_ON(!host);
934 BUG_ON(!host->card);
935
95cdfb72 936 /* Basic card reinitialization. */
17d33e14 937 mmc_claim_host(host);
080bc977
OBC
938
939 /* No need to reinitialize powered-resumed nonremovable cards */
a5e9425d 940 if (mmc_card_is_removable(host) || !mmc_card_keep_power(host))
080bc977 941 err = mmc_sdio_init_card(host, host->ocr, host->card,
a5e9425d 942 mmc_card_keep_power(host));
6b93d01f 943 else if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) {
080bc977
OBC
944 /* We may have switched to 1-bit mode during suspend */
945 err = sdio_enable_4bit_bus(host->card);
946 if (err > 0) {
947 mmc_set_bus_width(host, MMC_BUS_WIDTH_4);
948 err = 0;
949 }
950 }
951
40216842 952 if (!err && host->sdio_irqs)
bbbc4c4d 953 wake_up_process(host->sdio_irq_thread);
17d33e14 954 mmc_release_host(host);
17d33e14 955
95cdfb72
NP
956 /*
957 * If the card looked to be the same as before suspending, then
958 * we proceed to resume all card functions. If one of them returns
959 * an error then we simply return that error to the core and the
960 * card will be redetected as new. It is the responsibility of
961 * the function driver to perform further tests with the extra
962 * knowledge it has of the card to confirm the card is indeed the
963 * same as before suspending (same MAC address for network cards,
964 * etc.) and return an error otherwise.
965 */
966 for (i = 0; !err && i < host->card->sdio_funcs; i++) {
17d33e14
NP
967 struct sdio_func *func = host->card->sdio_func[i];
968 if (func && sdio_func_present(func) && func->dev.driver) {
969 const struct dev_pm_ops *pmops = func->dev.driver->pm;
95cdfb72 970 err = pmops->resume(&func->dev);
17d33e14
NP
971 }
972 }
95cdfb72
NP
973
974 return err;
17d33e14 975}
5c4e6f13 976
d3fe37b1
OBC
977static int mmc_sdio_power_restore(struct mmc_host *host)
978{
979 int ret;
c6e633ad 980 u32 ocr;
d3fe37b1
OBC
981
982 BUG_ON(!host);
983 BUG_ON(!host->card);
984
985 mmc_claim_host(host);
c6e633ad
DD
986
987 /*
988 * Reset the card by performing the same steps that are taken by
989 * mmc_rescan_try_freq() and mmc_attach_sdio() during a "normal" probe.
990 *
991 * sdio_reset() is technically not needed. Having just powered up the
992 * hardware, it should already be in reset state. However, some
993 * platforms (such as SD8686 on OLPC) do not instantly cut power,
994 * meaning that a reset is required when restoring power soon after
995 * powering off. It is harmless in other cases.
996 *
997 * The CMD5 reset (mmc_send_io_op_cond()), according to the SDIO spec,
998 * is not necessary for non-removable cards. However, it is required
999 * for OLPC SD8686 (which expects a [CMD5,5,3,7] init sequence), and
1000 * harmless in other situations.
1001 *
1002 * With these steps taken, mmc_select_voltage() is also required to
1003 * restore the correct voltage setting of the card.
1004 */
e7747475 1005
c6e633ad
DD
1006 sdio_reset(host);
1007 mmc_go_idle(host);
1008 mmc_send_if_cond(host, host->ocr_avail);
1009
1010 ret = mmc_send_io_op_cond(host, 0, &ocr);
1011 if (ret)
1012 goto out;
1013
1014 if (host->ocr_avail_sdio)
1015 host->ocr_avail = host->ocr_avail_sdio;
1016
1017 host->ocr = mmc_select_voltage(host, ocr & ~0x7F);
1018 if (!host->ocr) {
1019 ret = -EINVAL;
1020 goto out;
1021 }
1022
d3fe37b1 1023 ret = mmc_sdio_init_card(host, host->ocr, host->card,
a5e9425d 1024 mmc_card_keep_power(host));
d3fe37b1
OBC
1025 if (!ret && host->sdio_irqs)
1026 mmc_signal_sdio_irq(host);
c6e633ad
DD
1027
1028out:
d3fe37b1
OBC
1029 mmc_release_host(host);
1030
1031 return ret;
1032}
1033
5c4e6f13
PO
1034static const struct mmc_bus_ops mmc_sdio_ops = {
1035 .remove = mmc_sdio_remove,
1036 .detect = mmc_sdio_detect,
17d33e14
NP
1037 .suspend = mmc_sdio_suspend,
1038 .resume = mmc_sdio_resume,
d3fe37b1 1039 .power_restore = mmc_sdio_power_restore,
d3049504 1040 .alive = mmc_sdio_alive,
5c4e6f13
PO
1041};
1042
1043
1044/*
1045 * Starting point for SDIO card init.
1046 */
807e8e40 1047int mmc_attach_sdio(struct mmc_host *host)
5c4e6f13 1048{
807e8e40
AR
1049 int err, i, funcs;
1050 u32 ocr;
5c4e6f13
PO
1051 struct mmc_card *card;
1052
1053 BUG_ON(!host);
d84075c8 1054 WARN_ON(!host->claimed);
5c4e6f13 1055
807e8e40
AR
1056 err = mmc_send_io_op_cond(host, 0, &ocr);
1057 if (err)
1058 return err;
1059
5c4e6f13 1060 mmc_attach_bus(host, &mmc_sdio_ops);
8f230f45
TI
1061 if (host->ocr_avail_sdio)
1062 host->ocr_avail = host->ocr_avail_sdio;
5c4e6f13
PO
1063
1064 /*
1065 * Sanity check the voltages that the card claims to
1066 * support.
1067 */
1068 if (ocr & 0x7F) {
a3c76eb9 1069 pr_warning("%s: card claims to support voltages "
5c4e6f13
PO
1070 "below the defined range. These will be ignored.\n",
1071 mmc_hostname(host));
1072 ocr &= ~0x7F;
1073 }
1074
5c4e6f13
PO
1075 host->ocr = mmc_select_voltage(host, ocr);
1076
1077 /*
1078 * Can we support the voltage(s) of the card(s)?
1079 */
1080 if (!host->ocr) {
1081 err = -EINVAL;
1082 goto err;
1083 }
1084
1085 /*
17d33e14 1086 * Detect and init the card.
5c4e6f13 1087 */
3bca4cf7 1088 err = mmc_sdio_init_card(host, host->ocr, NULL, 0);
a303c531
PR
1089 if (err) {
1090 if (err == -EAGAIN) {
1091 /*
1092 * Retry initialization with S18R set to 0.
1093 */
1094 host->ocr &= ~R4_18V_PRESENT;
1095 err = mmc_sdio_init_card(host, host->ocr, NULL, 0);
1096 }
1097 if (err)
1098 goto err;
1099 }
17d33e14 1100 card = host->card;
af517150 1101
81968561 1102 /*
ed919b01 1103 * Enable runtime PM only if supported by host+card+board
81968561 1104 */
ed919b01
OBC
1105 if (host->caps & MMC_CAP_POWER_OFF_CARD) {
1106 /*
1107 * Let runtime PM core know our card is active
1108 */
1109 err = pm_runtime_set_active(&card->dev);
1110 if (err)
1111 goto remove;
81968561 1112
ed919b01
OBC
1113 /*
1114 * Enable runtime PM for this card
1115 */
1116 pm_runtime_enable(&card->dev);
1117 }
81968561 1118
5c4e6f13
PO
1119 /*
1120 * The number of functions on the card is encoded inside
1121 * the ocr.
1122 */
e8812793
MF
1123 funcs = (ocr & 0x70000000) >> 28;
1124 card->sdio_funcs = 0;
4ff6471c 1125
e29a7d73
PO
1126 /*
1127 * Initialize (but don't add) all present functions.
1128 */
e8812793 1129 for (i = 0; i < funcs; i++, card->sdio_funcs++) {
e29a7d73
PO
1130 err = sdio_init_func(host->card, i + 1);
1131 if (err)
1132 goto remove;
40bba0c1
OBC
1133
1134 /*
ed919b01 1135 * Enable Runtime PM for this func (if supported)
40bba0c1 1136 */
ed919b01
OBC
1137 if (host->caps & MMC_CAP_POWER_OFF_CARD)
1138 pm_runtime_enable(&card->sdio_func[i]->dev);
e29a7d73 1139 }
5c4e6f13 1140
e29a7d73
PO
1141 /*
1142 * First add the card to the driver model...
1143 */
807e8e40 1144 mmc_release_host(host);
5c4e6f13
PO
1145 err = mmc_add_card(host->card);
1146 if (err)
e29a7d73
PO
1147 goto remove_added;
1148
1149 /*
1150 * ...then the SDIO functions.
1151 */
1152 for (i = 0;i < funcs;i++) {
1153 err = sdio_add_func(host->card->sdio_func[i]);
1154 if (err)
1155 goto remove_added;
1156 }
5c4e6f13 1157
34497913 1158 mmc_claim_host(host);
5c4e6f13
PO
1159 return 0;
1160
e29a7d73
PO
1161
1162remove_added:
1163 /* Remove without lock if the device has been added. */
1164 mmc_sdio_remove(host);
5c4e6f13 1165 mmc_claim_host(host);
e29a7d73
PO
1166remove:
1167 /* And with lock if it hasn't been added. */
807e8e40 1168 mmc_release_host(host);
e29a7d73
PO
1169 if (host->card)
1170 mmc_sdio_remove(host);
807e8e40 1171 mmc_claim_host(host);
5c4e6f13
PO
1172err:
1173 mmc_detach_bus(host);
5c4e6f13 1174
a3c76eb9 1175 pr_err("%s: error %d whilst initialising SDIO card\n",
5c4e6f13
PO
1176 mmc_hostname(host), err);
1177
1178 return err;
1179}
1180