root/drivers/mmc/core/sdio.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. sdio_read_fbr
  2. sdio_init_func
  3. sdio_read_cccr
  4. sdio_enable_wide
  5. sdio_disable_cd
  6. sdio_disable_wide
  7. sdio_enable_4bit_bus
  8. mmc_sdio_switch_hs
  9. sdio_enable_hs
  10. mmc_sdio_get_max_clock
  11. host_drive_to_sdio_drive
  12. sdio_select_driver_type
  13. sdio_set_bus_speed_mode
  14. mmc_sdio_init_uhs_card
  15. mmc_sdio_resend_if_cond
  16. mmc_sdio_init_card
  17. mmc_sdio_reinit_card
  18. mmc_sdio_remove
  19. mmc_sdio_alive
  20. mmc_sdio_detect
  21. mmc_sdio_pre_suspend
  22. mmc_sdio_suspend
  23. mmc_sdio_resume
  24. mmc_sdio_runtime_suspend
  25. mmc_sdio_runtime_resume
  26. mmc_sdio_hw_reset
  27. mmc_sdio_sw_reset
  28. mmc_attach_sdio

   1 // SPDX-License-Identifier: GPL-2.0-or-later
   2 /*
   3  *  linux/drivers/mmc/sdio.c
   4  *
   5  *  Copyright 2006-2007 Pierre Ossman
   6  */
   7 
   8 #include <linux/err.h>
   9 #include <linux/pm_runtime.h>
  10 
  11 #include <linux/mmc/host.h>
  12 #include <linux/mmc/card.h>
  13 #include <linux/mmc/mmc.h>
  14 #include <linux/mmc/sdio.h>
  15 #include <linux/mmc/sdio_func.h>
  16 #include <linux/mmc/sdio_ids.h>
  17 
  18 #include "core.h"
  19 #include "card.h"
  20 #include "host.h"
  21 #include "bus.h"
  22 #include "quirks.h"
  23 #include "sd.h"
  24 #include "sdio_bus.h"
  25 #include "mmc_ops.h"
  26 #include "sd_ops.h"
  27 #include "sdio_ops.h"
  28 #include "sdio_cis.h"
  29 
  30 static int sdio_read_fbr(struct sdio_func *func)
  31 {
  32         int ret;
  33         unsigned char data;
  34 
  35         if (mmc_card_nonstd_func_interface(func->card)) {
  36                 func->class = SDIO_CLASS_NONE;
  37                 return 0;
  38         }
  39 
  40         ret = mmc_io_rw_direct(func->card, 0, 0,
  41                 SDIO_FBR_BASE(func->num) + SDIO_FBR_STD_IF, 0, &data);
  42         if (ret)
  43                 goto out;
  44 
  45         data &= 0x0f;
  46 
  47         if (data == 0x0f) {
  48                 ret = mmc_io_rw_direct(func->card, 0, 0,
  49                         SDIO_FBR_BASE(func->num) + SDIO_FBR_STD_IF_EXT, 0, &data);
  50                 if (ret)
  51                         goto out;
  52         }
  53 
  54         func->class = data;
  55 
  56 out:
  57         return ret;
  58 }
  59 
  60 static int sdio_init_func(struct mmc_card *card, unsigned int fn)
  61 {
  62         int ret;
  63         struct sdio_func *func;
  64 
  65         if (WARN_ON(fn > SDIO_MAX_FUNCS))
  66                 return -EINVAL;
  67 
  68         func = sdio_alloc_func(card);
  69         if (IS_ERR(func))
  70                 return PTR_ERR(func);
  71 
  72         func->num = fn;
  73 
  74         if (!(card->quirks & MMC_QUIRK_NONSTD_SDIO)) {
  75                 ret = sdio_read_fbr(func);
  76                 if (ret)
  77                         goto fail;
  78 
  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         }
  87 
  88         card->sdio_func[fn - 1] = func;
  89 
  90         return 0;
  91 
  92 fail:
  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;
  99 }
 100 
 101 static int sdio_read_cccr(struct mmc_card *card, u32 ocr)
 102 {
 103         int ret;
 104         int cccr_vsn;
 105         int uhs = ocr & R4_18V_PRESENT;
 106         unsigned char data;
 107         unsigned char speed;
 108 
 109         ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_CCCR, 0, &data);
 110         if (ret)
 111                 goto out;
 112 
 113         cccr_vsn = data & 0x0f;
 114 
 115         if (cccr_vsn > SDIO_CCCR_REV_3_00) {
 116                 pr_err("%s: unrecognised CCCR structure version %d\n",
 117                         mmc_hostname(card->host), cccr_vsn);
 118                 return -EINVAL;
 119         }
 120 
 121         card->cccr.sdio_vsn = (data & 0xf0) >> 4;
 122 
 123         ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_CAPS, 0, &data);
 124         if (ret)
 125                 goto out;
 126 
 127         if (data & SDIO_CCCR_CAP_SMB)
 128                 card->cccr.multi_block = 1;
 129         if (data & SDIO_CCCR_CAP_LSC)
 130                 card->cccr.low_speed = 1;
 131         if (data & SDIO_CCCR_CAP_4BLS)
 132                 card->cccr.wide_bus = 1;
 133 
 134         if (cccr_vsn >= SDIO_CCCR_REV_1_10) {
 135                 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_POWER, 0, &data);
 136                 if (ret)
 137                         goto out;
 138 
 139                 if (data & SDIO_POWER_SMPC)
 140                         card->cccr.high_power = 1;
 141         }
 142 
 143         if (cccr_vsn >= SDIO_CCCR_REV_1_20) {
 144                 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed);
 145                 if (ret)
 146                         goto out;
 147 
 148                 card->scr.sda_spec3 = 0;
 149                 card->sw_caps.sd3_bus_mode = 0;
 150                 card->sw_caps.sd3_drv_type = 0;
 151                 if (cccr_vsn >= SDIO_CCCR_REV_3_00 && uhs) {
 152                         card->scr.sda_spec3 = 1;
 153                         ret = mmc_io_rw_direct(card, 0, 0,
 154                                 SDIO_CCCR_UHS, 0, &data);
 155                         if (ret)
 156                                 goto out;
 157 
 158                         if (mmc_host_uhs(card->host)) {
 159                                 if (data & SDIO_UHS_DDR50)
 160                                         card->sw_caps.sd3_bus_mode
 161                                                 |= SD_MODE_UHS_DDR50;
 162 
 163                                 if (data & SDIO_UHS_SDR50)
 164                                         card->sw_caps.sd3_bus_mode
 165                                                 |= SD_MODE_UHS_SDR50;
 166 
 167                                 if (data & SDIO_UHS_SDR104)
 168                                         card->sw_caps.sd3_bus_mode
 169                                                 |= SD_MODE_UHS_SDR104;
 170                         }
 171 
 172                         ret = mmc_io_rw_direct(card, 0, 0,
 173                                 SDIO_CCCR_DRIVE_STRENGTH, 0, &data);
 174                         if (ret)
 175                                 goto out;
 176 
 177                         if (data & SDIO_DRIVE_SDTA)
 178                                 card->sw_caps.sd3_drv_type |= SD_DRIVER_TYPE_A;
 179                         if (data & SDIO_DRIVE_SDTC)
 180                                 card->sw_caps.sd3_drv_type |= SD_DRIVER_TYPE_C;
 181                         if (data & SDIO_DRIVE_SDTD)
 182                                 card->sw_caps.sd3_drv_type |= SD_DRIVER_TYPE_D;
 183                 }
 184 
 185                 /* if no uhs mode ensure we check for high speed */
 186                 if (!card->sw_caps.sd3_bus_mode) {
 187                         if (speed & SDIO_SPEED_SHS) {
 188                                 card->cccr.high_speed = 1;
 189                                 card->sw_caps.hs_max_dtr = 50000000;
 190                         } else {
 191                                 card->cccr.high_speed = 0;
 192                                 card->sw_caps.hs_max_dtr = 25000000;
 193                         }
 194                 }
 195         }
 196 
 197 out:
 198         return ret;
 199 }
 200 
 201 static int sdio_enable_wide(struct mmc_card *card)
 202 {
 203         int ret;
 204         u8 ctrl;
 205 
 206         if (!(card->host->caps & MMC_CAP_4_BIT_DATA))
 207                 return 0;
 208 
 209         if (card->cccr.low_speed && !card->cccr.wide_bus)
 210                 return 0;
 211 
 212         ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl);
 213         if (ret)
 214                 return ret;
 215 
 216         if ((ctrl & SDIO_BUS_WIDTH_MASK) == SDIO_BUS_WIDTH_RESERVED)
 217                 pr_warn("%s: SDIO_CCCR_IF is invalid: 0x%02x\n",
 218                         mmc_hostname(card->host), ctrl);
 219 
 220         /* set as 4-bit bus width */
 221         ctrl &= ~SDIO_BUS_WIDTH_MASK;
 222         ctrl |= SDIO_BUS_WIDTH_4BIT;
 223 
 224         ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL);
 225         if (ret)
 226                 return ret;
 227 
 228         return 1;
 229 }
 230 
 231 /*
 232  * If desired, disconnect the pull-up resistor on CD/DAT[3] (pin 1)
 233  * of the card. This may be required on certain setups of boards,
 234  * controllers and embedded sdio device which do not need the card's
 235  * pull-up. As a result, card detection is disabled and power is saved.
 236  */
 237 static int sdio_disable_cd(struct mmc_card *card)
 238 {
 239         int ret;
 240         u8 ctrl;
 241 
 242         if (!mmc_card_disable_cd(card))
 243                 return 0;
 244 
 245         ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl);
 246         if (ret)
 247                 return ret;
 248 
 249         ctrl |= SDIO_BUS_CD_DISABLE;
 250 
 251         return mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL);
 252 }
 253 
 254 /*
 255  * Devices that remain active during a system suspend are
 256  * put back into 1-bit mode.
 257  */
 258 static int sdio_disable_wide(struct mmc_card *card)
 259 {
 260         int ret;
 261         u8 ctrl;
 262 
 263         if (!(card->host->caps & MMC_CAP_4_BIT_DATA))
 264                 return 0;
 265 
 266         if (card->cccr.low_speed && !card->cccr.wide_bus)
 267                 return 0;
 268 
 269         ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl);
 270         if (ret)
 271                 return ret;
 272 
 273         if (!(ctrl & SDIO_BUS_WIDTH_4BIT))
 274                 return 0;
 275 
 276         ctrl &= ~SDIO_BUS_WIDTH_4BIT;
 277         ctrl |= SDIO_BUS_ASYNC_INT;
 278 
 279         ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL);
 280         if (ret)
 281                 return ret;
 282 
 283         mmc_set_bus_width(card->host, MMC_BUS_WIDTH_1);
 284 
 285         return 0;
 286 }
 287 
 288 
 289 static int sdio_enable_4bit_bus(struct mmc_card *card)
 290 {
 291         int err;
 292 
 293         if (card->type == MMC_TYPE_SDIO)
 294                 err = sdio_enable_wide(card);
 295         else if ((card->host->caps & MMC_CAP_4_BIT_DATA) &&
 296                  (card->scr.bus_widths & SD_SCR_BUS_WIDTH_4)) {
 297                 err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4);
 298                 if (err)
 299                         return err;
 300                 err = sdio_enable_wide(card);
 301                 if (err <= 0)
 302                         mmc_app_set_bus_width(card, MMC_BUS_WIDTH_1);
 303         } else
 304                 return 0;
 305 
 306         if (err > 0) {
 307                 mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4);
 308                 err = 0;
 309         }
 310 
 311         return err;
 312 }
 313 
 314 
 315 /*
 316  * Test if the card supports high-speed mode and, if so, switch to it.
 317  */
 318 static int mmc_sdio_switch_hs(struct mmc_card *card, int enable)
 319 {
 320         int ret;
 321         u8 speed;
 322 
 323         if (!(card->host->caps & MMC_CAP_SD_HIGHSPEED))
 324                 return 0;
 325 
 326         if (!card->cccr.high_speed)
 327                 return 0;
 328 
 329         ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed);
 330         if (ret)
 331                 return ret;
 332 
 333         if (enable)
 334                 speed |= SDIO_SPEED_EHS;
 335         else
 336                 speed &= ~SDIO_SPEED_EHS;
 337 
 338         ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_SPEED, speed, NULL);
 339         if (ret)
 340                 return ret;
 341 
 342         return 1;
 343 }
 344 
 345 /*
 346  * Enable SDIO/combo card's high-speed mode. Return 0/1 if [not]supported.
 347  */
 348 static int sdio_enable_hs(struct mmc_card *card)
 349 {
 350         int ret;
 351 
 352         ret = mmc_sdio_switch_hs(card, true);
 353         if (ret <= 0 || card->type == MMC_TYPE_SDIO)
 354                 return ret;
 355 
 356         ret = mmc_sd_switch_hs(card);
 357         if (ret <= 0)
 358                 mmc_sdio_switch_hs(card, false);
 359 
 360         return ret;
 361 }
 362 
 363 static unsigned mmc_sdio_get_max_clock(struct mmc_card *card)
 364 {
 365         unsigned max_dtr;
 366 
 367         if (mmc_card_hs(card)) {
 368                 /*
 369                  * The SDIO specification doesn't mention how
 370                  * the CIS transfer speed register relates to
 371                  * high-speed, but it seems that 50 MHz is
 372                  * mandatory.
 373                  */
 374                 max_dtr = 50000000;
 375         } else {
 376                 max_dtr = card->cis.max_dtr;
 377         }
 378 
 379         if (card->type == MMC_TYPE_SD_COMBO)
 380                 max_dtr = min(max_dtr, mmc_sd_get_max_clock(card));
 381 
 382         return max_dtr;
 383 }
 384 
 385 static unsigned char host_drive_to_sdio_drive(int host_strength)
 386 {
 387         switch (host_strength) {
 388         case MMC_SET_DRIVER_TYPE_A:
 389                 return SDIO_DTSx_SET_TYPE_A;
 390         case MMC_SET_DRIVER_TYPE_B:
 391                 return SDIO_DTSx_SET_TYPE_B;
 392         case MMC_SET_DRIVER_TYPE_C:
 393                 return SDIO_DTSx_SET_TYPE_C;
 394         case MMC_SET_DRIVER_TYPE_D:
 395                 return SDIO_DTSx_SET_TYPE_D;
 396         default:
 397                 return SDIO_DTSx_SET_TYPE_B;
 398         }
 399 }
 400 
 401 static void sdio_select_driver_type(struct mmc_card *card)
 402 {
 403         int card_drv_type, drive_strength, drv_type;
 404         unsigned char card_strength;
 405         int err;
 406 
 407         card->drive_strength = 0;
 408 
 409         card_drv_type = card->sw_caps.sd3_drv_type | SD_DRIVER_TYPE_B;
 410 
 411         drive_strength = mmc_select_drive_strength(card,
 412                                                    card->sw_caps.uhs_max_dtr,
 413                                                    card_drv_type, &drv_type);
 414 
 415         if (drive_strength) {
 416                 /* if error just use default for drive strength B */
 417                 err = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_DRIVE_STRENGTH, 0,
 418                                        &card_strength);
 419                 if (err)
 420                         return;
 421 
 422                 card_strength &= ~(SDIO_DRIVE_DTSx_MASK<<SDIO_DRIVE_DTSx_SHIFT);
 423                 card_strength |= host_drive_to_sdio_drive(drive_strength);
 424 
 425                 /* if error default to drive strength B */
 426                 err = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_DRIVE_STRENGTH,
 427                                        card_strength, NULL);
 428                 if (err)
 429                         return;
 430                 card->drive_strength = drive_strength;
 431         }
 432 
 433         if (drv_type)
 434                 mmc_set_driver_type(card->host, drv_type);
 435 }
 436 
 437 
 438 static int sdio_set_bus_speed_mode(struct mmc_card *card)
 439 {
 440         unsigned int bus_speed, timing;
 441         int err;
 442         unsigned char speed;
 443         unsigned int max_rate;
 444 
 445         /*
 446          * If the host doesn't support any of the UHS-I modes, fallback on
 447          * default speed.
 448          */
 449         if (!mmc_host_uhs(card->host))
 450                 return 0;
 451 
 452         bus_speed = SDIO_SPEED_SDR12;
 453         timing = MMC_TIMING_UHS_SDR12;
 454         if ((card->host->caps & MMC_CAP_UHS_SDR104) &&
 455             (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR104)) {
 456                         bus_speed = SDIO_SPEED_SDR104;
 457                         timing = MMC_TIMING_UHS_SDR104;
 458                         card->sw_caps.uhs_max_dtr = UHS_SDR104_MAX_DTR;
 459                         card->sd_bus_speed = UHS_SDR104_BUS_SPEED;
 460         } else if ((card->host->caps & MMC_CAP_UHS_DDR50) &&
 461                    (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_DDR50)) {
 462                         bus_speed = SDIO_SPEED_DDR50;
 463                         timing = MMC_TIMING_UHS_DDR50;
 464                         card->sw_caps.uhs_max_dtr = UHS_DDR50_MAX_DTR;
 465                         card->sd_bus_speed = UHS_DDR50_BUS_SPEED;
 466         } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
 467                     MMC_CAP_UHS_SDR50)) && (card->sw_caps.sd3_bus_mode &
 468                     SD_MODE_UHS_SDR50)) {
 469                         bus_speed = SDIO_SPEED_SDR50;
 470                         timing = MMC_TIMING_UHS_SDR50;
 471                         card->sw_caps.uhs_max_dtr = UHS_SDR50_MAX_DTR;
 472                         card->sd_bus_speed = UHS_SDR50_BUS_SPEED;
 473         } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
 474                     MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25)) &&
 475                    (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR25)) {
 476                         bus_speed = SDIO_SPEED_SDR25;
 477                         timing = MMC_TIMING_UHS_SDR25;
 478                         card->sw_caps.uhs_max_dtr = UHS_SDR25_MAX_DTR;
 479                         card->sd_bus_speed = UHS_SDR25_BUS_SPEED;
 480         } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
 481                     MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25 |
 482                     MMC_CAP_UHS_SDR12)) && (card->sw_caps.sd3_bus_mode &
 483                     SD_MODE_UHS_SDR12)) {
 484                         bus_speed = SDIO_SPEED_SDR12;
 485                         timing = MMC_TIMING_UHS_SDR12;
 486                         card->sw_caps.uhs_max_dtr = UHS_SDR12_MAX_DTR;
 487                         card->sd_bus_speed = UHS_SDR12_BUS_SPEED;
 488         }
 489 
 490         err = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed);
 491         if (err)
 492                 return err;
 493 
 494         speed &= ~SDIO_SPEED_BSS_MASK;
 495         speed |= bus_speed;
 496         err = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_SPEED, speed, NULL);
 497         if (err)
 498                 return err;
 499 
 500         max_rate = min_not_zero(card->quirk_max_rate,
 501                                 card->sw_caps.uhs_max_dtr);
 502 
 503         if (bus_speed) {
 504                 mmc_set_timing(card->host, timing);
 505                 mmc_set_clock(card->host, max_rate);
 506         }
 507 
 508         return 0;
 509 }
 510 
 511 /*
 512  * UHS-I specific initialization procedure
 513  */
 514 static int mmc_sdio_init_uhs_card(struct mmc_card *card)
 515 {
 516         int err;
 517 
 518         if (!card->scr.sda_spec3)
 519                 return 0;
 520 
 521         /* Switch to wider bus */
 522         err = sdio_enable_4bit_bus(card);
 523         if (err)
 524                 goto out;
 525 
 526         /* Set the driver strength for the card */
 527         sdio_select_driver_type(card);
 528 
 529         /* Set bus speed mode of the card */
 530         err = sdio_set_bus_speed_mode(card);
 531         if (err)
 532                 goto out;
 533 
 534         /*
 535          * SPI mode doesn't define CMD19 and tuning is only valid for SDR50 and
 536          * SDR104 mode SD-cards. Note that tuning is mandatory for SDR104.
 537          */
 538         if (!mmc_host_is_spi(card->host) &&
 539             ((card->host->ios.timing == MMC_TIMING_UHS_SDR50) ||
 540               (card->host->ios.timing == MMC_TIMING_UHS_SDR104)))
 541                 err = mmc_execute_tuning(card);
 542 out:
 543         return err;
 544 }
 545 
 546 static void mmc_sdio_resend_if_cond(struct mmc_host *host,
 547                                     struct mmc_card *card)
 548 {
 549         sdio_reset(host);
 550         mmc_go_idle(host);
 551         mmc_send_if_cond(host, host->ocr_avail);
 552         mmc_remove_card(card);
 553 }
 554 
 555 /*
 556  * Handle the detection and initialisation of a card.
 557  *
 558  * In the case of a resume, "oldcard" will contain the card
 559  * we're trying to reinitialise.
 560  */
 561 static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr,
 562                               struct mmc_card *oldcard)
 563 {
 564         struct mmc_card *card;
 565         int err;
 566         int retries = 10;
 567         u32 rocr = 0;
 568         u32 ocr_card = ocr;
 569 
 570         WARN_ON(!host->claimed);
 571 
 572         /* to query card if 1.8V signalling is supported */
 573         if (mmc_host_uhs(host))
 574                 ocr |= R4_18V_PRESENT;
 575 
 576 try_again:
 577         if (!retries) {
 578                 pr_warn("%s: Skipping voltage switch\n", mmc_hostname(host));
 579                 ocr &= ~R4_18V_PRESENT;
 580         }
 581 
 582         /*
 583          * Inform the card of the voltage
 584          */
 585         err = mmc_send_io_op_cond(host, ocr, &rocr);
 586         if (err)
 587                 return err;
 588 
 589         /*
 590          * For SPI, enable CRC as appropriate.
 591          */
 592         if (mmc_host_is_spi(host)) {
 593                 err = mmc_spi_set_crc(host, use_spi_crc);
 594                 if (err)
 595                         return err;
 596         }
 597 
 598         /*
 599          * Allocate card structure.
 600          */
 601         card = mmc_alloc_card(host, NULL);
 602         if (IS_ERR(card))
 603                 return PTR_ERR(card);
 604 
 605         if ((rocr & R4_MEMORY_PRESENT) &&
 606             mmc_sd_get_cid(host, ocr & rocr, card->raw_cid, NULL) == 0) {
 607                 card->type = MMC_TYPE_SD_COMBO;
 608 
 609                 if (oldcard && (oldcard->type != MMC_TYPE_SD_COMBO ||
 610                     memcmp(card->raw_cid, oldcard->raw_cid, sizeof(card->raw_cid)) != 0)) {
 611                         err = -ENOENT;
 612                         goto mismatch;
 613                 }
 614         } else {
 615                 card->type = MMC_TYPE_SDIO;
 616 
 617                 if (oldcard && oldcard->type != MMC_TYPE_SDIO) {
 618                         err = -ENOENT;
 619                         goto mismatch;
 620                 }
 621         }
 622 
 623         /*
 624          * Call the optional HC's init_card function to handle quirks.
 625          */
 626         if (host->ops->init_card)
 627                 host->ops->init_card(host, card);
 628 
 629         /*
 630          * If the host and card support UHS-I mode request the card
 631          * to switch to 1.8V signaling level.  No 1.8v signalling if
 632          * UHS mode is not enabled to maintain compatibility and some
 633          * systems that claim 1.8v signalling in fact do not support
 634          * it. Per SDIO spec v3, section 3.1.2, if the voltage is already
 635          * 1.8v, the card sets S18A to 0 in the R4 response. So it will
 636          * fails to check rocr & R4_18V_PRESENT,  but we still need to
 637          * try to init uhs card. sdio_read_cccr will take over this task
 638          * to make sure which speed mode should work.
 639          */
 640         if (rocr & ocr & R4_18V_PRESENT) {
 641                 err = mmc_set_uhs_voltage(host, ocr_card);
 642                 if (err == -EAGAIN) {
 643                         mmc_sdio_resend_if_cond(host, card);
 644                         retries--;
 645                         goto try_again;
 646                 } else if (err) {
 647                         ocr &= ~R4_18V_PRESENT;
 648                 }
 649         }
 650 
 651         /*
 652          * For native busses:  set card RCA and quit open drain mode.
 653          */
 654         if (!mmc_host_is_spi(host)) {
 655                 err = mmc_send_relative_addr(host, &card->rca);
 656                 if (err)
 657                         goto remove;
 658 
 659                 /*
 660                  * Update oldcard with the new RCA received from the SDIO
 661                  * device -- we're doing this so that it's updated in the
 662                  * "card" struct when oldcard overwrites that later.
 663                  */
 664                 if (oldcard)
 665                         oldcard->rca = card->rca;
 666         }
 667 
 668         /*
 669          * Read CSD, before selecting the card
 670          */
 671         if (!oldcard && card->type == MMC_TYPE_SD_COMBO) {
 672                 err = mmc_sd_get_csd(host, card);
 673                 if (err)
 674                         goto remove;
 675 
 676                 mmc_decode_cid(card);
 677         }
 678 
 679         /*
 680          * Select card, as all following commands rely on that.
 681          */
 682         if (!mmc_host_is_spi(host)) {
 683                 err = mmc_select_card(card);
 684                 if (err)
 685                         goto remove;
 686         }
 687 
 688         if (card->quirks & MMC_QUIRK_NONSTD_SDIO) {
 689                 /*
 690                  * This is non-standard SDIO device, meaning it doesn't
 691                  * have any CIA (Common I/O area) registers present.
 692                  * It's host's responsibility to fill cccr and cis
 693                  * structures in init_card().
 694                  */
 695                 mmc_set_clock(host, card->cis.max_dtr);
 696 
 697                 if (card->cccr.high_speed) {
 698                         mmc_set_timing(card->host, MMC_TIMING_SD_HS);
 699                 }
 700 
 701                 if (oldcard)
 702                         mmc_remove_card(card);
 703                 else
 704                         host->card = card;
 705 
 706                 return 0;
 707         }
 708 
 709         /*
 710          * Read the common registers. Note that we should try to
 711          * validate whether UHS would work or not.
 712          */
 713         err = sdio_read_cccr(card, ocr);
 714         if (err) {
 715                 mmc_sdio_resend_if_cond(host, card);
 716                 if (ocr & R4_18V_PRESENT) {
 717                         /* Retry init sequence, but without R4_18V_PRESENT. */
 718                         retries = 0;
 719                         goto try_again;
 720                 }
 721                 return err;
 722         }
 723 
 724         /*
 725          * Read the common CIS tuples.
 726          */
 727         err = sdio_read_common_cis(card);
 728         if (err)
 729                 goto remove;
 730 
 731         if (oldcard) {
 732                 if (card->cis.vendor == oldcard->cis.vendor &&
 733                     card->cis.device == oldcard->cis.device) {
 734                         mmc_remove_card(card);
 735                         card = oldcard;
 736                 } else {
 737                         err = -ENOENT;
 738                         goto mismatch;
 739                 }
 740         }
 741         card->ocr = ocr_card;
 742         mmc_fixup_device(card, sdio_fixup_methods);
 743 
 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 
 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;
 770         } else {
 771                 /*
 772                  * Switch to high-speed (if supported).
 773                  */
 774                 err = sdio_enable_hs(card);
 775                 if (err > 0)
 776                         mmc_set_timing(card->host, MMC_TIMING_SD_HS);
 777                 else if (err)
 778                         goto remove;
 779 
 780                 /*
 781                  * Change to the card's maximum speed.
 782                  */
 783                 mmc_set_clock(host, mmc_sdio_get_max_clock(card));
 784 
 785                 /*
 786                  * Switch to wider bus (if supported).
 787                  */
 788                 err = sdio_enable_4bit_bus(card);
 789                 if (err)
 790                         goto remove;
 791         }
 792 
 793         if (host->caps2 & MMC_CAP2_AVOID_3_3V &&
 794             host->ios.signal_voltage == MMC_SIGNAL_VOLTAGE_330) {
 795                 pr_err("%s: Host failed to negotiate down from 3.3V\n",
 796                         mmc_hostname(host));
 797                 err = -EINVAL;
 798                 goto remove;
 799         }
 800 
 801         host->card = card;
 802         return 0;
 803 
 804 mismatch:
 805         pr_debug("%s: Perhaps the card was replaced\n", mmc_hostname(host));
 806 remove:
 807         if (oldcard != card)
 808                 mmc_remove_card(card);
 809         return err;
 810 }
 811 
 812 static int mmc_sdio_reinit_card(struct mmc_host *host)
 813 {
 814         int ret;
 815 
 816         /*
 817          * Reset the card by performing the same steps that are taken by
 818          * mmc_rescan_try_freq() and mmc_attach_sdio() during a "normal" probe.
 819          *
 820          * sdio_reset() is technically not needed. Having just powered up the
 821          * hardware, it should already be in reset state. However, some
 822          * platforms (such as SD8686 on OLPC) do not instantly cut power,
 823          * meaning that a reset is required when restoring power soon after
 824          * powering off. It is harmless in other cases.
 825          *
 826          * The CMD5 reset (mmc_send_io_op_cond()), according to the SDIO spec,
 827          * is not necessary for non-removable cards. However, it is required
 828          * for OLPC SD8686 (which expects a [CMD5,5,3,7] init sequence), and
 829          * harmless in other situations.
 830          *
 831          */
 832 
 833         sdio_reset(host);
 834         mmc_go_idle(host);
 835         mmc_send_if_cond(host, host->card->ocr);
 836 
 837         ret = mmc_send_io_op_cond(host, 0, NULL);
 838         if (ret)
 839                 return ret;
 840 
 841         return mmc_sdio_init_card(host, host->card->ocr, host->card);
 842 }
 843 
 844 /*
 845  * Host is being removed. Free up the current card.
 846  */
 847 static void mmc_sdio_remove(struct mmc_host *host)
 848 {
 849         int i;
 850 
 851         for (i = 0;i < host->card->sdio_funcs;i++) {
 852                 if (host->card->sdio_func[i]) {
 853                         sdio_remove_func(host->card->sdio_func[i]);
 854                         host->card->sdio_func[i] = NULL;
 855                 }
 856         }
 857 
 858         mmc_remove_card(host->card);
 859         host->card = NULL;
 860 }
 861 
 862 /*
 863  * Card detection - card is alive.
 864  */
 865 static int mmc_sdio_alive(struct mmc_host *host)
 866 {
 867         return mmc_select_card(host->card);
 868 }
 869 
 870 /*
 871  * Card detection callback from host.
 872  */
 873 static void mmc_sdio_detect(struct mmc_host *host)
 874 {
 875         int err;
 876 
 877         /* Make sure card is powered before detecting it */
 878         if (host->caps & MMC_CAP_POWER_OFF_CARD) {
 879                 err = pm_runtime_get_sync(&host->card->dev);
 880                 if (err < 0) {
 881                         pm_runtime_put_noidle(&host->card->dev);
 882                         goto out;
 883                 }
 884         }
 885 
 886         mmc_claim_host(host);
 887 
 888         /*
 889          * Just check if our card has been removed.
 890          */
 891         err = _mmc_detect_card_removed(host);
 892 
 893         mmc_release_host(host);
 894 
 895         /*
 896          * Tell PM core it's OK to power off the card now.
 897          *
 898          * The _sync variant is used in order to ensure that the card
 899          * is left powered off in case an error occurred, and the card
 900          * is going to be removed.
 901          *
 902          * Since there is no specific reason to believe a new user
 903          * is about to show up at this point, the _sync variant is
 904          * desirable anyway.
 905          */
 906         if (host->caps & MMC_CAP_POWER_OFF_CARD)
 907                 pm_runtime_put_sync(&host->card->dev);
 908 
 909 out:
 910         if (err) {
 911                 mmc_sdio_remove(host);
 912 
 913                 mmc_claim_host(host);
 914                 mmc_detach_bus(host);
 915                 mmc_power_off(host);
 916                 mmc_release_host(host);
 917         }
 918 }
 919 
 920 /*
 921  * SDIO pre_suspend.  We need to suspend all functions separately.
 922  * Therefore all registered functions must have drivers with suspend
 923  * and resume methods.  Failing that we simply remove the whole card.
 924  */
 925 static int mmc_sdio_pre_suspend(struct mmc_host *host)
 926 {
 927         int i, err = 0;
 928 
 929         for (i = 0; i < host->card->sdio_funcs; i++) {
 930                 struct sdio_func *func = host->card->sdio_func[i];
 931                 if (func && sdio_func_present(func) && func->dev.driver) {
 932                         const struct dev_pm_ops *pmops = func->dev.driver->pm;
 933                         if (!pmops || !pmops->suspend || !pmops->resume) {
 934                                 /* force removal of entire card in that case */
 935                                 err = -ENOSYS;
 936                                 break;
 937                         }
 938                 }
 939         }
 940 
 941         return err;
 942 }
 943 
 944 /*
 945  * SDIO suspend.  Suspend all functions separately.
 946  */
 947 static int mmc_sdio_suspend(struct mmc_host *host)
 948 {
 949         WARN_ON(host->sdio_irqs && !mmc_card_keep_power(host));
 950 
 951         /* Prevent processing of SDIO IRQs in suspended state. */
 952         mmc_card_set_suspended(host->card);
 953         cancel_delayed_work_sync(&host->sdio_irq_work);
 954 
 955         mmc_claim_host(host);
 956 
 957         if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host))
 958                 sdio_disable_wide(host->card);
 959 
 960         if (!mmc_card_keep_power(host)) {
 961                 mmc_power_off(host);
 962         } else if (host->retune_period) {
 963                 mmc_retune_timer_stop(host);
 964                 mmc_retune_needed(host);
 965         }
 966 
 967         mmc_release_host(host);
 968 
 969         return 0;
 970 }
 971 
 972 static int mmc_sdio_resume(struct mmc_host *host)
 973 {
 974         int err = 0;
 975 
 976         /* Basic card reinitialization. */
 977         mmc_claim_host(host);
 978 
 979         /*
 980          * Restore power and reinitialize the card when needed. Note that a
 981          * removable card is checked from a detect work later on in the resume
 982          * process.
 983          */
 984         if (!mmc_card_keep_power(host)) {
 985                 mmc_power_up(host, host->card->ocr);
 986                 /*
 987                  * Tell runtime PM core we just powered up the card,
 988                  * since it still believes the card is powered off.
 989                  * Note that currently runtime PM is only enabled
 990                  * for SDIO cards that are MMC_CAP_POWER_OFF_CARD
 991                  */
 992                 if (host->caps & MMC_CAP_POWER_OFF_CARD) {
 993                         pm_runtime_disable(&host->card->dev);
 994                         pm_runtime_set_active(&host->card->dev);
 995                         pm_runtime_enable(&host->card->dev);
 996                 }
 997                 err = mmc_sdio_reinit_card(host);
 998         } else if (mmc_card_wake_sdio_irq(host)) {
 999                 /* We may have switched to 1-bit mode during suspend */
1000                 err = sdio_enable_4bit_bus(host->card);
1001         }
1002 
1003         if (err)
1004                 goto out;
1005 
1006         /* Allow SDIO IRQs to be processed again. */
1007         mmc_card_clr_suspended(host->card);
1008 
1009         if (host->sdio_irqs) {
1010                 if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD))
1011                         wake_up_process(host->sdio_irq_thread);
1012                 else if (host->caps & MMC_CAP_SDIO_IRQ)
1013                         queue_delayed_work(system_wq, &host->sdio_irq_work, 0);
1014         }
1015 
1016 out:
1017         mmc_release_host(host);
1018 
1019         host->pm_flags &= ~MMC_PM_KEEP_POWER;
1020         return err;
1021 }
1022 
1023 static int mmc_sdio_runtime_suspend(struct mmc_host *host)
1024 {
1025         /* No references to the card, cut the power to it. */
1026         mmc_claim_host(host);
1027         mmc_power_off(host);
1028         mmc_release_host(host);
1029 
1030         return 0;
1031 }
1032 
1033 static int mmc_sdio_runtime_resume(struct mmc_host *host)
1034 {
1035         int ret;
1036 
1037         /* Restore power and re-initialize. */
1038         mmc_claim_host(host);
1039         mmc_power_up(host, host->card->ocr);
1040         ret = mmc_sdio_reinit_card(host);
1041         mmc_release_host(host);
1042 
1043         return ret;
1044 }
1045 
1046 /*
1047  * SDIO HW reset
1048  *
1049  * Returns 0 if the HW reset was executed synchronously, returns 1 if the HW
1050  * reset was asynchronously scheduled, else a negative error code.
1051  */
1052 static int mmc_sdio_hw_reset(struct mmc_host *host)
1053 {
1054         struct mmc_card *card = host->card;
1055 
1056         /*
1057          * In case the card is shared among multiple func drivers, reset the
1058          * card through a rescan work. In this way it will be removed and
1059          * re-detected, thus all func drivers becomes informed about it.
1060          */
1061         if (atomic_read(&card->sdio_funcs_probed) > 1) {
1062                 if (mmc_card_removed(card))
1063                         return 1;
1064                 host->rescan_entered = 0;
1065                 mmc_card_set_removed(card);
1066                 _mmc_detect_change(host, 0, false);
1067                 return 1;
1068         }
1069 
1070         /*
1071          * A single func driver has been probed, then let's skip the heavy
1072          * hotplug dance above and execute the reset immediately.
1073          */
1074         mmc_power_cycle(host, card->ocr);
1075         return mmc_sdio_reinit_card(host);
1076 }
1077 
1078 static int mmc_sdio_sw_reset(struct mmc_host *host)
1079 {
1080         mmc_set_clock(host, host->f_init);
1081         sdio_reset(host);
1082         mmc_go_idle(host);
1083 
1084         mmc_set_initial_state(host);
1085         mmc_set_initial_signal_voltage(host);
1086 
1087         return mmc_sdio_reinit_card(host);
1088 }
1089 
1090 static const struct mmc_bus_ops mmc_sdio_ops = {
1091         .remove = mmc_sdio_remove,
1092         .detect = mmc_sdio_detect,
1093         .pre_suspend = mmc_sdio_pre_suspend,
1094         .suspend = mmc_sdio_suspend,
1095         .resume = mmc_sdio_resume,
1096         .runtime_suspend = mmc_sdio_runtime_suspend,
1097         .runtime_resume = mmc_sdio_runtime_resume,
1098         .alive = mmc_sdio_alive,
1099         .hw_reset = mmc_sdio_hw_reset,
1100         .sw_reset = mmc_sdio_sw_reset,
1101 };
1102 
1103 
1104 /*
1105  * Starting point for SDIO card init.
1106  */
1107 int mmc_attach_sdio(struct mmc_host *host)
1108 {
1109         int err, i, funcs;
1110         u32 ocr, rocr;
1111         struct mmc_card *card;
1112 
1113         WARN_ON(!host->claimed);
1114 
1115         err = mmc_send_io_op_cond(host, 0, &ocr);
1116         if (err)
1117                 return err;
1118 
1119         mmc_attach_bus(host, &mmc_sdio_ops);
1120         if (host->ocr_avail_sdio)
1121                 host->ocr_avail = host->ocr_avail_sdio;
1122 
1123 
1124         rocr = mmc_select_voltage(host, ocr);
1125 
1126         /*
1127          * Can we support the voltage(s) of the card(s)?
1128          */
1129         if (!rocr) {
1130                 err = -EINVAL;
1131                 goto err;
1132         }
1133 
1134         /*
1135          * Detect and init the card.
1136          */
1137         err = mmc_sdio_init_card(host, rocr, NULL);
1138         if (err)
1139                 goto err;
1140 
1141         card = host->card;
1142 
1143         /*
1144          * Enable runtime PM only if supported by host+card+board
1145          */
1146         if (host->caps & MMC_CAP_POWER_OFF_CARD) {
1147                 /*
1148                  * Do not allow runtime suspend until after SDIO function
1149                  * devices are added.
1150                  */
1151                 pm_runtime_get_noresume(&card->dev);
1152 
1153                 /*
1154                  * Let runtime PM core know our card is active
1155                  */
1156                 err = pm_runtime_set_active(&card->dev);
1157                 if (err)
1158                         goto remove;
1159 
1160                 /*
1161                  * Enable runtime PM for this card
1162                  */
1163                 pm_runtime_enable(&card->dev);
1164         }
1165 
1166         /*
1167          * The number of functions on the card is encoded inside
1168          * the ocr.
1169          */
1170         funcs = (ocr & 0x70000000) >> 28;
1171         card->sdio_funcs = 0;
1172 
1173         /*
1174          * Initialize (but don't add) all present functions.
1175          */
1176         for (i = 0; i < funcs; i++, card->sdio_funcs++) {
1177                 err = sdio_init_func(host->card, i + 1);
1178                 if (err)
1179                         goto remove;
1180 
1181                 /*
1182                  * Enable Runtime PM for this func (if supported)
1183                  */
1184                 if (host->caps & MMC_CAP_POWER_OFF_CARD)
1185                         pm_runtime_enable(&card->sdio_func[i]->dev);
1186         }
1187 
1188         /*
1189          * First add the card to the driver model...
1190          */
1191         mmc_release_host(host);
1192         err = mmc_add_card(host->card);
1193         if (err)
1194                 goto remove_added;
1195 
1196         /*
1197          * ...then the SDIO functions.
1198          */
1199         for (i = 0;i < funcs;i++) {
1200                 err = sdio_add_func(host->card->sdio_func[i]);
1201                 if (err)
1202                         goto remove_added;
1203         }
1204 
1205         if (host->caps & MMC_CAP_POWER_OFF_CARD)
1206                 pm_runtime_put(&card->dev);
1207 
1208         mmc_claim_host(host);
1209         return 0;
1210 
1211 
1212 remove:
1213         mmc_release_host(host);
1214 remove_added:
1215         /*
1216          * The devices are being deleted so it is not necessary to disable
1217          * runtime PM. Similarly we also don't pm_runtime_put() the SDIO card
1218          * because it needs to be active to remove any function devices that
1219          * were probed, and after that it gets deleted.
1220          */
1221         mmc_sdio_remove(host);
1222         mmc_claim_host(host);
1223 err:
1224         mmc_detach_bus(host);
1225 
1226         pr_err("%s: error %d whilst initialising SDIO card\n",
1227                 mmc_hostname(host), err);
1228 
1229         return err;
1230 }
1231 

/* [<][>][^][v][top][bottom][index][help] */