linux/drivers/mmc/core/sd.c
<<
>>
Prefs
   1/*
   2 *  linux/drivers/mmc/core/sd.c
   3 *
   4 *  Copyright (C) 2003-2004 Russell King, All Rights Reserved.
   5 *  SD support Copyright (C) 2004 Ian Molton, All Rights Reserved.
   6 *  Copyright (C) 2005-2007 Pierre Ossman, All Rights Reserved.
   7 *
   8 * This program is free software; you can redistribute it and/or modify
   9 * it under the terms of the GNU General Public License version 2 as
  10 * published by the Free Software Foundation.
  11 */
  12
  13#include <linux/err.h>
  14#include <linux/sizes.h>
  15#include <linux/slab.h>
  16#include <linux/stat.h>
  17#include <linux/pm_runtime.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 "bus.h"
  26#include "mmc_ops.h"
  27#include "sd.h"
  28#include "sd_ops.h"
  29
  30static const unsigned int tran_exp[] = {
  31        10000,          100000,         1000000,        10000000,
  32        0,              0,              0,              0
  33};
  34
  35static const unsigned char tran_mant[] = {
  36        0,      10,     12,     13,     15,     20,     25,     30,
  37        35,     40,     45,     50,     55,     60,     70,     80,
  38};
  39
  40static const unsigned int tacc_exp[] = {
  41        1,      10,     100,    1000,   10000,  100000, 1000000, 10000000,
  42};
  43
  44static const unsigned int tacc_mant[] = {
  45        0,      10,     12,     13,     15,     20,     25,     30,
  46        35,     40,     45,     50,     55,     60,     70,     80,
  47};
  48
  49static const unsigned int sd_au_size[] = {
  50        0,              SZ_16K / 512,           SZ_32K / 512,   SZ_64K / 512,
  51        SZ_128K / 512,  SZ_256K / 512,          SZ_512K / 512,  SZ_1M / 512,
  52        SZ_2M / 512,    SZ_4M / 512,            SZ_8M / 512,    (SZ_8M + SZ_4M) / 512,
  53        SZ_16M / 512,   (SZ_16M + SZ_8M) / 512, SZ_32M / 512,   SZ_64M / 512,
  54};
  55
  56#define UNSTUFF_BITS(resp,start,size)                                   \
  57        ({                                                              \
  58                const int __size = size;                                \
  59                const u32 __mask = (__size < 32 ? 1 << __size : 0) - 1; \
  60                const int __off = 3 - ((start) / 32);                   \
  61                const int __shft = (start) & 31;                        \
  62                u32 __res;                                              \
  63                                                                        \
  64                __res = resp[__off] >> __shft;                          \
  65                if (__size + __shft > 32)                               \
  66                        __res |= resp[__off-1] << ((32 - __shft) % 32); \
  67                __res & __mask;                                         \
  68        })
  69
  70/*
  71 * Given the decoded CSD structure, decode the raw CID to our CID structure.
  72 */
  73void mmc_decode_cid(struct mmc_card *card)
  74{
  75        u32 *resp = card->raw_cid;
  76
  77        memset(&card->cid, 0, sizeof(struct mmc_cid));
  78
  79        /*
  80         * SD doesn't currently have a version field so we will
  81         * have to assume we can parse this.
  82         */
  83        card->cid.manfid                = UNSTUFF_BITS(resp, 120, 8);
  84        card->cid.oemid                 = UNSTUFF_BITS(resp, 104, 16);
  85        card->cid.prod_name[0]          = UNSTUFF_BITS(resp, 96, 8);
  86        card->cid.prod_name[1]          = UNSTUFF_BITS(resp, 88, 8);
  87        card->cid.prod_name[2]          = UNSTUFF_BITS(resp, 80, 8);
  88        card->cid.prod_name[3]          = UNSTUFF_BITS(resp, 72, 8);
  89        card->cid.prod_name[4]          = UNSTUFF_BITS(resp, 64, 8);
  90        card->cid.hwrev                 = UNSTUFF_BITS(resp, 60, 4);
  91        card->cid.fwrev                 = UNSTUFF_BITS(resp, 56, 4);
  92        card->cid.serial                = UNSTUFF_BITS(resp, 24, 32);
  93        card->cid.year                  = UNSTUFF_BITS(resp, 12, 8);
  94        card->cid.month                 = UNSTUFF_BITS(resp, 8, 4);
  95
  96        card->cid.year += 2000; /* SD cards year offset */
  97}
  98
  99/*
 100 * Given a 128-bit response, decode to our card CSD structure.
 101 */
 102static int mmc_decode_csd(struct mmc_card *card)
 103{
 104        struct mmc_csd *csd = &card->csd;
 105        unsigned int e, m, csd_struct;
 106        u32 *resp = card->raw_csd;
 107
 108        csd_struct = UNSTUFF_BITS(resp, 126, 2);
 109
 110        switch (csd_struct) {
 111        case 0:
 112                m = UNSTUFF_BITS(resp, 115, 4);
 113                e = UNSTUFF_BITS(resp, 112, 3);
 114                csd->tacc_ns     = (tacc_exp[e] * tacc_mant[m] + 9) / 10;
 115                csd->tacc_clks   = UNSTUFF_BITS(resp, 104, 8) * 100;
 116
 117                m = UNSTUFF_BITS(resp, 99, 4);
 118                e = UNSTUFF_BITS(resp, 96, 3);
 119                csd->max_dtr      = tran_exp[e] * tran_mant[m];
 120                csd->cmdclass     = UNSTUFF_BITS(resp, 84, 12);
 121
 122                e = UNSTUFF_BITS(resp, 47, 3);
 123                m = UNSTUFF_BITS(resp, 62, 12);
 124                csd->capacity     = (1 + m) << (e + 2);
 125
 126                csd->read_blkbits = UNSTUFF_BITS(resp, 80, 4);
 127                csd->read_partial = UNSTUFF_BITS(resp, 79, 1);
 128                csd->write_misalign = UNSTUFF_BITS(resp, 78, 1);
 129                csd->read_misalign = UNSTUFF_BITS(resp, 77, 1);
 130                csd->r2w_factor = UNSTUFF_BITS(resp, 26, 3);
 131                csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4);
 132                csd->write_partial = UNSTUFF_BITS(resp, 21, 1);
 133
 134                if (UNSTUFF_BITS(resp, 46, 1)) {
 135                        csd->erase_size = 1;
 136                } else if (csd->write_blkbits >= 9) {
 137                        csd->erase_size = UNSTUFF_BITS(resp, 39, 7) + 1;
 138                        csd->erase_size <<= csd->write_blkbits - 9;
 139                }
 140                break;
 141        case 1:
 142                /*
 143                 * This is a block-addressed SDHC or SDXC card. Most
 144                 * interesting fields are unused and have fixed
 145                 * values. To avoid getting tripped by buggy cards,
 146                 * we assume those fixed values ourselves.
 147                 */
 148                mmc_card_set_blockaddr(card);
 149
 150                csd->tacc_ns     = 0; /* Unused */
 151                csd->tacc_clks   = 0; /* Unused */
 152
 153                m = UNSTUFF_BITS(resp, 99, 4);
 154                e = UNSTUFF_BITS(resp, 96, 3);
 155                csd->max_dtr      = tran_exp[e] * tran_mant[m];
 156                csd->cmdclass     = UNSTUFF_BITS(resp, 84, 12);
 157                csd->c_size       = UNSTUFF_BITS(resp, 48, 22);
 158
 159                /* SDXC cards have a minimum C_SIZE of 0x00FFFF */
 160                if (csd->c_size >= 0xFFFF)
 161                        mmc_card_set_ext_capacity(card);
 162
 163                m = UNSTUFF_BITS(resp, 48, 22);
 164                csd->capacity     = (1 + m) << 10;
 165
 166                csd->read_blkbits = 9;
 167                csd->read_partial = 0;
 168                csd->write_misalign = 0;
 169                csd->read_misalign = 0;
 170                csd->r2w_factor = 4; /* Unused */
 171                csd->write_blkbits = 9;
 172                csd->write_partial = 0;
 173                csd->erase_size = 1;
 174                break;
 175        default:
 176                pr_err("%s: unrecognised CSD structure version %d\n",
 177                        mmc_hostname(card->host), csd_struct);
 178                return -EINVAL;
 179        }
 180
 181        card->erase_size = csd->erase_size;
 182
 183        return 0;
 184}
 185
 186/*
 187 * Given a 64-bit response, decode to our card SCR structure.
 188 */
 189static int mmc_decode_scr(struct mmc_card *card)
 190{
 191        struct sd_scr *scr = &card->scr;
 192        unsigned int scr_struct;
 193        u32 resp[4];
 194
 195        resp[3] = card->raw_scr[1];
 196        resp[2] = card->raw_scr[0];
 197
 198        scr_struct = UNSTUFF_BITS(resp, 60, 4);
 199        if (scr_struct != 0) {
 200                pr_err("%s: unrecognised SCR structure version %d\n",
 201                        mmc_hostname(card->host), scr_struct);
 202                return -EINVAL;
 203        }
 204
 205        scr->sda_vsn = UNSTUFF_BITS(resp, 56, 4);
 206        scr->bus_widths = UNSTUFF_BITS(resp, 48, 4);
 207        if (scr->sda_vsn == SCR_SPEC_VER_2)
 208                /* Check if Physical Layer Spec v3.0 is supported */
 209                scr->sda_spec3 = UNSTUFF_BITS(resp, 47, 1);
 210
 211        if (UNSTUFF_BITS(resp, 55, 1))
 212                card->erased_byte = 0xFF;
 213        else
 214                card->erased_byte = 0x0;
 215
 216        if (scr->sda_spec3)
 217                scr->cmds = UNSTUFF_BITS(resp, 32, 2);
 218        return 0;
 219}
 220
 221/*
 222 * Fetch and process SD Status register.
 223 */
 224static int mmc_read_ssr(struct mmc_card *card)
 225{
 226        unsigned int au, es, et, eo;
 227        int err, i;
 228        u32 *ssr;
 229
 230        if (!(card->csd.cmdclass & CCC_APP_SPEC)) {
 231                pr_warning("%s: card lacks mandatory SD Status "
 232                        "function.\n", mmc_hostname(card->host));
 233                return 0;
 234        }
 235
 236        ssr = kmalloc(64, GFP_KERNEL);
 237        if (!ssr)
 238                return -ENOMEM;
 239
 240        err = mmc_app_sd_status(card, ssr);
 241        if (err) {
 242                pr_warning("%s: problem reading SD Status "
 243                        "register.\n", mmc_hostname(card->host));
 244                err = 0;
 245                goto out;
 246        }
 247
 248        for (i = 0; i < 16; i++)
 249                ssr[i] = be32_to_cpu(ssr[i]);
 250
 251        /*
 252         * UNSTUFF_BITS only works with four u32s so we have to offset the
 253         * bitfield positions accordingly.
 254         */
 255        au = UNSTUFF_BITS(ssr, 428 - 384, 4);
 256        if (au) {
 257                if (au <= 9 || card->scr.sda_spec3) {
 258                        card->ssr.au = sd_au_size[au];
 259                        es = UNSTUFF_BITS(ssr, 408 - 384, 16);
 260                        et = UNSTUFF_BITS(ssr, 402 - 384, 6);
 261                        if (es && et) {
 262                                eo = UNSTUFF_BITS(ssr, 400 - 384, 2);
 263                                card->ssr.erase_timeout = (et * 1000) / es;
 264                                card->ssr.erase_offset = eo * 1000;
 265                        }
 266                } else {
 267                        pr_warning("%s: SD Status: Invalid Allocation Unit size.\n",
 268                                   mmc_hostname(card->host));
 269                }
 270        }
 271out:
 272        kfree(ssr);
 273        return err;
 274}
 275
 276/*
 277 * Fetches and decodes switch information
 278 */
 279static int mmc_read_switch(struct mmc_card *card)
 280{
 281        int err;
 282        u8 *status;
 283
 284        if (card->scr.sda_vsn < SCR_SPEC_VER_1)
 285                return 0;
 286
 287        if (!(card->csd.cmdclass & CCC_SWITCH)) {
 288                pr_warning("%s: card lacks mandatory switch "
 289                        "function, performance might suffer.\n",
 290                        mmc_hostname(card->host));
 291                return 0;
 292        }
 293
 294        err = -EIO;
 295
 296        status = kmalloc(64, GFP_KERNEL);
 297        if (!status) {
 298                pr_err("%s: could not allocate a buffer for "
 299                        "switch capabilities.\n",
 300                        mmc_hostname(card->host));
 301                return -ENOMEM;
 302        }
 303
 304        /*
 305         * Find out the card's support bits with a mode 0 operation.
 306         * The argument does not matter, as the support bits do not
 307         * change with the arguments.
 308         */
 309        err = mmc_sd_switch(card, 0, 0, 0, status);
 310        if (err) {
 311                /*
 312                 * If the host or the card can't do the switch,
 313                 * fail more gracefully.
 314                 */
 315                if (err != -EINVAL && err != -ENOSYS && err != -EFAULT)
 316                        goto out;
 317
 318                pr_warning("%s: problem reading Bus Speed modes.\n",
 319                        mmc_hostname(card->host));
 320                err = 0;
 321
 322                goto out;
 323        }
 324
 325        if (status[13] & SD_MODE_HIGH_SPEED)
 326                card->sw_caps.hs_max_dtr = HIGH_SPEED_MAX_DTR;
 327
 328        if (card->scr.sda_spec3) {
 329                card->sw_caps.sd3_bus_mode = status[13];
 330                /* Driver Strengths supported by the card */
 331                card->sw_caps.sd3_drv_type = status[9];
 332        }
 333
 334out:
 335        kfree(status);
 336
 337        return err;
 338}
 339
 340/*
 341 * Test if the card supports high-speed mode and, if so, switch to it.
 342 */
 343int mmc_sd_switch_hs(struct mmc_card *card)
 344{
 345        int err;
 346        u8 *status;
 347
 348        if (card->scr.sda_vsn < SCR_SPEC_VER_1)
 349                return 0;
 350
 351        if (!(card->csd.cmdclass & CCC_SWITCH))
 352                return 0;
 353
 354        if (!(card->host->caps & MMC_CAP_SD_HIGHSPEED))
 355                return 0;
 356
 357        if (card->sw_caps.hs_max_dtr == 0)
 358                return 0;
 359
 360        err = -EIO;
 361
 362        status = kmalloc(64, GFP_KERNEL);
 363        if (!status) {
 364                pr_err("%s: could not allocate a buffer for "
 365                        "switch capabilities.\n", mmc_hostname(card->host));
 366                return -ENOMEM;
 367        }
 368
 369        err = mmc_sd_switch(card, 1, 0, 1, status);
 370        if (err)
 371                goto out;
 372
 373        if ((status[16] & 0xF) != 1) {
 374                pr_warning("%s: Problem switching card "
 375                        "into high-speed mode!\n",
 376                        mmc_hostname(card->host));
 377                err = 0;
 378        } else {
 379                err = 1;
 380        }
 381
 382out:
 383        kfree(status);
 384
 385        return err;
 386}
 387
 388static int sd_select_driver_type(struct mmc_card *card, u8 *status)
 389{
 390        int host_drv_type = SD_DRIVER_TYPE_B;
 391        int card_drv_type = SD_DRIVER_TYPE_B;
 392        int drive_strength;
 393        int err;
 394
 395        /*
 396         * If the host doesn't support any of the Driver Types A,C or D,
 397         * or there is no board specific handler then default Driver
 398         * Type B is used.
 399         */
 400        if (!(card->host->caps & (MMC_CAP_DRIVER_TYPE_A | MMC_CAP_DRIVER_TYPE_C
 401            | MMC_CAP_DRIVER_TYPE_D)))
 402                return 0;
 403
 404        if (!card->host->ops->select_drive_strength)
 405                return 0;
 406
 407        if (card->host->caps & MMC_CAP_DRIVER_TYPE_A)
 408                host_drv_type |= SD_DRIVER_TYPE_A;
 409
 410        if (card->host->caps & MMC_CAP_DRIVER_TYPE_C)
 411                host_drv_type |= SD_DRIVER_TYPE_C;
 412
 413        if (card->host->caps & MMC_CAP_DRIVER_TYPE_D)
 414                host_drv_type |= SD_DRIVER_TYPE_D;
 415
 416        if (card->sw_caps.sd3_drv_type & SD_DRIVER_TYPE_A)
 417                card_drv_type |= SD_DRIVER_TYPE_A;
 418
 419        if (card->sw_caps.sd3_drv_type & SD_DRIVER_TYPE_C)
 420                card_drv_type |= SD_DRIVER_TYPE_C;
 421
 422        if (card->sw_caps.sd3_drv_type & SD_DRIVER_TYPE_D)
 423                card_drv_type |= SD_DRIVER_TYPE_D;
 424
 425        /*
 426         * The drive strength that the hardware can support
 427         * depends on the board design.  Pass the appropriate
 428         * information and let the hardware specific code
 429         * return what is possible given the options
 430         */
 431        mmc_host_clk_hold(card->host);
 432        drive_strength = card->host->ops->select_drive_strength(
 433                card->sw_caps.uhs_max_dtr,
 434                host_drv_type, card_drv_type);
 435        mmc_host_clk_release(card->host);
 436
 437        err = mmc_sd_switch(card, 1, 2, drive_strength, status);
 438        if (err)
 439                return err;
 440
 441        if ((status[15] & 0xF) != drive_strength) {
 442                pr_warning("%s: Problem setting drive strength!\n",
 443                        mmc_hostname(card->host));
 444                return 0;
 445        }
 446
 447        mmc_set_driver_type(card->host, drive_strength);
 448
 449        return 0;
 450}
 451
 452static void sd_update_bus_speed_mode(struct mmc_card *card)
 453{
 454        /*
 455         * If the host doesn't support any of the UHS-I modes, fallback on
 456         * default speed.
 457         */
 458        if (!mmc_host_uhs(card->host)) {
 459                card->sd_bus_speed = 0;
 460                return;
 461        }
 462
 463        if ((card->host->caps & MMC_CAP_UHS_SDR104) &&
 464            (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR104)) {
 465                        card->sd_bus_speed = UHS_SDR104_BUS_SPEED;
 466        } else if ((card->host->caps & MMC_CAP_UHS_DDR50) &&
 467                   (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_DDR50)) {
 468                        card->sd_bus_speed = UHS_DDR50_BUS_SPEED;
 469        } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
 470                    MMC_CAP_UHS_SDR50)) && (card->sw_caps.sd3_bus_mode &
 471                    SD_MODE_UHS_SDR50)) {
 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                        card->sd_bus_speed = UHS_SDR25_BUS_SPEED;
 477        } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
 478                    MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25 |
 479                    MMC_CAP_UHS_SDR12)) && (card->sw_caps.sd3_bus_mode &
 480                    SD_MODE_UHS_SDR12)) {
 481                        card->sd_bus_speed = UHS_SDR12_BUS_SPEED;
 482        }
 483}
 484
 485static int sd_set_bus_speed_mode(struct mmc_card *card, u8 *status)
 486{
 487        int err;
 488        unsigned int timing = 0;
 489
 490        switch (card->sd_bus_speed) {
 491        case UHS_SDR104_BUS_SPEED:
 492                timing = MMC_TIMING_UHS_SDR104;
 493                card->sw_caps.uhs_max_dtr = UHS_SDR104_MAX_DTR;
 494                break;
 495        case UHS_DDR50_BUS_SPEED:
 496                timing = MMC_TIMING_UHS_DDR50;
 497                card->sw_caps.uhs_max_dtr = UHS_DDR50_MAX_DTR;
 498                break;
 499        case UHS_SDR50_BUS_SPEED:
 500                timing = MMC_TIMING_UHS_SDR50;
 501                card->sw_caps.uhs_max_dtr = UHS_SDR50_MAX_DTR;
 502                break;
 503        case UHS_SDR25_BUS_SPEED:
 504                timing = MMC_TIMING_UHS_SDR25;
 505                card->sw_caps.uhs_max_dtr = UHS_SDR25_MAX_DTR;
 506                break;
 507        case UHS_SDR12_BUS_SPEED:
 508                timing = MMC_TIMING_UHS_SDR12;
 509                card->sw_caps.uhs_max_dtr = UHS_SDR12_MAX_DTR;
 510                break;
 511        default:
 512                return 0;
 513        }
 514
 515        err = mmc_sd_switch(card, 1, 0, card->sd_bus_speed, status);
 516        if (err)
 517                return err;
 518
 519        if ((status[16] & 0xF) != card->sd_bus_speed)
 520                pr_warning("%s: Problem setting bus speed mode!\n",
 521                        mmc_hostname(card->host));
 522        else {
 523                mmc_set_timing(card->host, timing);
 524                mmc_set_clock(card->host, card->sw_caps.uhs_max_dtr);
 525        }
 526
 527        return 0;
 528}
 529
 530/* Get host's max current setting at its current voltage */
 531static u32 sd_get_host_max_current(struct mmc_host *host)
 532{
 533        u32 voltage, max_current;
 534
 535        voltage = 1 << host->ios.vdd;
 536        switch (voltage) {
 537        case MMC_VDD_165_195:
 538                max_current = host->max_current_180;
 539                break;
 540        case MMC_VDD_29_30:
 541        case MMC_VDD_30_31:
 542                max_current = host->max_current_300;
 543                break;
 544        case MMC_VDD_32_33:
 545        case MMC_VDD_33_34:
 546                max_current = host->max_current_330;
 547                break;
 548        default:
 549                max_current = 0;
 550        }
 551
 552        return max_current;
 553}
 554
 555static int sd_set_current_limit(struct mmc_card *card, u8 *status)
 556{
 557        int current_limit = SD_SET_CURRENT_NO_CHANGE;
 558        int err;
 559        u32 max_current;
 560
 561        /*
 562         * Current limit switch is only defined for SDR50, SDR104, and DDR50
 563         * bus speed modes. For other bus speed modes, we do not change the
 564         * current limit.
 565         */
 566        if ((card->sd_bus_speed != UHS_SDR50_BUS_SPEED) &&
 567            (card->sd_bus_speed != UHS_SDR104_BUS_SPEED) &&
 568            (card->sd_bus_speed != UHS_DDR50_BUS_SPEED))
 569                return 0;
 570
 571        /*
 572         * Host has different current capabilities when operating at
 573         * different voltages, so find out its max current first.
 574         */
 575        max_current = sd_get_host_max_current(card->host);
 576
 577        /*
 578         * We only check host's capability here, if we set a limit that is
 579         * higher than the card's maximum current, the card will be using its
 580         * maximum current, e.g. if the card's maximum current is 300ma, and
 581         * when we set current limit to 200ma, the card will draw 200ma, and
 582         * when we set current limit to 400/600/800ma, the card will draw its
 583         * maximum 300ma from the host.
 584         */
 585        if (max_current >= 800)
 586                current_limit = SD_SET_CURRENT_LIMIT_800;
 587        else if (max_current >= 600)
 588                current_limit = SD_SET_CURRENT_LIMIT_600;
 589        else if (max_current >= 400)
 590                current_limit = SD_SET_CURRENT_LIMIT_400;
 591        else if (max_current >= 200)
 592                current_limit = SD_SET_CURRENT_LIMIT_200;
 593
 594        if (current_limit != SD_SET_CURRENT_NO_CHANGE) {
 595                err = mmc_sd_switch(card, 1, 3, current_limit, status);
 596                if (err)
 597                        return err;
 598
 599                if (((status[15] >> 4) & 0x0F) != current_limit)
 600                        pr_warning("%s: Problem setting current limit!\n",
 601                                mmc_hostname(card->host));
 602
 603        }
 604
 605        return 0;
 606}
 607
 608/*
 609 * UHS-I specific initialization procedure
 610 */
 611static int mmc_sd_init_uhs_card(struct mmc_card *card)
 612{
 613        int err;
 614        u8 *status;
 615
 616        if (!card->scr.sda_spec3)
 617                return 0;
 618
 619        if (!(card->csd.cmdclass & CCC_SWITCH))
 620                return 0;
 621
 622        status = kmalloc(64, GFP_KERNEL);
 623        if (!status) {
 624                pr_err("%s: could not allocate a buffer for "
 625                        "switch capabilities.\n", mmc_hostname(card->host));
 626                return -ENOMEM;
 627        }
 628
 629        /* Set 4-bit bus width */
 630        if ((card->host->caps & MMC_CAP_4_BIT_DATA) &&
 631            (card->scr.bus_widths & SD_SCR_BUS_WIDTH_4)) {
 632                err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4);
 633                if (err)
 634                        goto out;
 635
 636                mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4);
 637        }
 638
 639        /*
 640         * Select the bus speed mode depending on host
 641         * and card capability.
 642         */
 643        sd_update_bus_speed_mode(card);
 644
 645        /* Set the driver strength for the card */
 646        err = sd_select_driver_type(card, status);
 647        if (err)
 648                goto out;
 649
 650        /* Set current limit for the card */
 651        err = sd_set_current_limit(card, status);
 652        if (err)
 653                goto out;
 654
 655        /* Set bus speed mode of the card */
 656        err = sd_set_bus_speed_mode(card, status);
 657        if (err)
 658                goto out;
 659
 660        /*
 661         * SPI mode doesn't define CMD19 and tuning is only valid for SDR50 and
 662         * SDR104 mode SD-cards. Note that tuning is mandatory for SDR104.
 663         */
 664        if (!mmc_host_is_spi(card->host) && card->host->ops->execute_tuning &&
 665                        (card->sd_bus_speed == UHS_SDR50_BUS_SPEED ||
 666                         card->sd_bus_speed == UHS_SDR104_BUS_SPEED)) {
 667                mmc_host_clk_hold(card->host);
 668                err = card->host->ops->execute_tuning(card->host,
 669                                                      MMC_SEND_TUNING_BLOCK);
 670                mmc_host_clk_release(card->host);
 671        }
 672
 673out:
 674        kfree(status);
 675
 676        return err;
 677}
 678
 679MMC_DEV_ATTR(cid, "%08x%08x%08x%08x\n", card->raw_cid[0], card->raw_cid[1],
 680        card->raw_cid[2], card->raw_cid[3]);
 681MMC_DEV_ATTR(csd, "%08x%08x%08x%08x\n", card->raw_csd[0], card->raw_csd[1],
 682        card->raw_csd[2], card->raw_csd[3]);
 683MMC_DEV_ATTR(scr, "%08x%08x\n", card->raw_scr[0], card->raw_scr[1]);
 684MMC_DEV_ATTR(date, "%02d/%04d\n", card->cid.month, card->cid.year);
 685MMC_DEV_ATTR(erase_size, "%u\n", card->erase_size << 9);
 686MMC_DEV_ATTR(preferred_erase_size, "%u\n", card->pref_erase << 9);
 687MMC_DEV_ATTR(fwrev, "0x%x\n", card->cid.fwrev);
 688MMC_DEV_ATTR(hwrev, "0x%x\n", card->cid.hwrev);
 689MMC_DEV_ATTR(manfid, "0x%06x\n", card->cid.manfid);
 690MMC_DEV_ATTR(name, "%s\n", card->cid.prod_name);
 691MMC_DEV_ATTR(oemid, "0x%04x\n", card->cid.oemid);
 692MMC_DEV_ATTR(serial, "0x%08x\n", card->cid.serial);
 693
 694
 695static struct attribute *sd_std_attrs[] = {
 696        &dev_attr_cid.attr,
 697        &dev_attr_csd.attr,
 698        &dev_attr_scr.attr,
 699        &dev_attr_date.attr,
 700        &dev_attr_erase_size.attr,
 701        &dev_attr_preferred_erase_size.attr,
 702        &dev_attr_fwrev.attr,
 703        &dev_attr_hwrev.attr,
 704        &dev_attr_manfid.attr,
 705        &dev_attr_name.attr,
 706        &dev_attr_oemid.attr,
 707        &dev_attr_serial.attr,
 708        NULL,
 709};
 710ATTRIBUTE_GROUPS(sd_std);
 711
 712struct device_type sd_type = {
 713        .groups = sd_std_groups,
 714};
 715
 716/*
 717 * Fetch CID from card.
 718 */
 719int mmc_sd_get_cid(struct mmc_host *host, u32 ocr, u32 *cid, u32 *rocr)
 720{
 721        int err;
 722        u32 max_current;
 723        int retries = 10;
 724        u32 pocr = ocr;
 725
 726try_again:
 727        if (!retries) {
 728                ocr &= ~SD_OCR_S18R;
 729                pr_warning("%s: Skipping voltage switch\n",
 730                        mmc_hostname(host));
 731        }
 732
 733        /*
 734         * Since we're changing the OCR value, we seem to
 735         * need to tell some cards to go back to the idle
 736         * state.  We wait 1ms to give cards time to
 737         * respond.
 738         */
 739        mmc_go_idle(host);
 740
 741        /*
 742         * If SD_SEND_IF_COND indicates an SD 2.0
 743         * compliant card and we should set bit 30
 744         * of the ocr to indicate that we can handle
 745         * block-addressed SDHC cards.
 746         */
 747        err = mmc_send_if_cond(host, ocr);
 748        if (!err)
 749                ocr |= SD_OCR_CCS;
 750
 751        /*
 752         * If the host supports one of UHS-I modes, request the card
 753         * to switch to 1.8V signaling level. If the card has failed
 754         * repeatedly to switch however, skip this.
 755         */
 756        if (retries && mmc_host_uhs(host))
 757                ocr |= SD_OCR_S18R;
 758
 759        /*
 760         * If the host can supply more than 150mA at current voltage,
 761         * XPC should be set to 1.
 762         */
 763        max_current = sd_get_host_max_current(host);
 764        if (max_current > 150)
 765                ocr |= SD_OCR_XPC;
 766
 767        err = mmc_send_app_op_cond(host, ocr, rocr);
 768        if (err)
 769                return err;
 770
 771        /*
 772         * In case CCS and S18A in the response is set, start Signal Voltage
 773         * Switch procedure. SPI mode doesn't support CMD11.
 774         */
 775        if (!mmc_host_is_spi(host) && rocr &&
 776           ((*rocr & 0x41000000) == 0x41000000)) {
 777                err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180,
 778                                        pocr);
 779                if (err == -EAGAIN) {
 780                        retries--;
 781                        goto try_again;
 782                } else if (err) {
 783                        retries = 0;
 784                        goto try_again;
 785                }
 786        }
 787
 788        if (mmc_host_is_spi(host))
 789                err = mmc_send_cid(host, cid);
 790        else
 791                err = mmc_all_send_cid(host, cid);
 792
 793        return err;
 794}
 795
 796int mmc_sd_get_csd(struct mmc_host *host, struct mmc_card *card)
 797{
 798        int err;
 799
 800        /*
 801         * Fetch CSD from card.
 802         */
 803        err = mmc_send_csd(card, card->raw_csd);
 804        if (err)
 805                return err;
 806
 807        err = mmc_decode_csd(card);
 808        if (err)
 809                return err;
 810
 811        return 0;
 812}
 813
 814int mmc_sd_setup_card(struct mmc_host *host, struct mmc_card *card,
 815        bool reinit)
 816{
 817        int err;
 818
 819        if (!reinit) {
 820                /*
 821                 * Fetch SCR from card.
 822                 */
 823                err = mmc_app_send_scr(card, card->raw_scr);
 824                if (err)
 825                        return err;
 826
 827                err = mmc_decode_scr(card);
 828                if (err)
 829                        return err;
 830
 831                /*
 832                 * Fetch and process SD Status register.
 833                 */
 834                err = mmc_read_ssr(card);
 835                if (err)
 836                        return err;
 837
 838                /* Erase init depends on CSD and SSR */
 839                mmc_init_erase(card);
 840
 841                /*
 842                 * Fetch switch information from card.
 843                 */
 844                err = mmc_read_switch(card);
 845                if (err)
 846                        return err;
 847        }
 848
 849        /*
 850         * For SPI, enable CRC as appropriate.
 851         * This CRC enable is located AFTER the reading of the
 852         * card registers because some SDHC cards are not able
 853         * to provide valid CRCs for non-512-byte blocks.
 854         */
 855        if (mmc_host_is_spi(host)) {
 856                err = mmc_spi_set_crc(host, use_spi_crc);
 857                if (err)
 858                        return err;
 859        }
 860
 861        /*
 862         * Check if read-only switch is active.
 863         */
 864        if (!reinit) {
 865                int ro = -1;
 866
 867                if (host->ops->get_ro) {
 868                        mmc_host_clk_hold(card->host);
 869                        ro = host->ops->get_ro(host);
 870                        mmc_host_clk_release(card->host);
 871                }
 872
 873                if (ro < 0) {
 874                        pr_warning("%s: host does not "
 875                                "support reading read-only "
 876                                "switch. assuming write-enable.\n",
 877                                mmc_hostname(host));
 878                } else if (ro > 0) {
 879                        mmc_card_set_readonly(card);
 880                }
 881        }
 882
 883        return 0;
 884}
 885
 886unsigned mmc_sd_get_max_clock(struct mmc_card *card)
 887{
 888        unsigned max_dtr = (unsigned int)-1;
 889
 890        if (mmc_card_hs(card)) {
 891                if (max_dtr > card->sw_caps.hs_max_dtr)
 892                        max_dtr = card->sw_caps.hs_max_dtr;
 893        } else if (max_dtr > card->csd.max_dtr) {
 894                max_dtr = card->csd.max_dtr;
 895        }
 896
 897        return max_dtr;
 898}
 899
 900/*
 901 * Handle the detection and initialisation of a card.
 902 *
 903 * In the case of a resume, "oldcard" will contain the card
 904 * we're trying to reinitialise.
 905 */
 906static int mmc_sd_init_card(struct mmc_host *host, u32 ocr,
 907        struct mmc_card *oldcard)
 908{
 909        struct mmc_card *card;
 910        int err;
 911        u32 cid[4];
 912        u32 rocr = 0;
 913
 914        BUG_ON(!host);
 915        WARN_ON(!host->claimed);
 916
 917        err = mmc_sd_get_cid(host, ocr, cid, &rocr);
 918        if (err)
 919                return err;
 920
 921        if (oldcard) {
 922                if (memcmp(cid, oldcard->raw_cid, sizeof(cid)) != 0)
 923                        return -ENOENT;
 924
 925                card = oldcard;
 926        } else {
 927                /*
 928                 * Allocate card structure.
 929                 */
 930                card = mmc_alloc_card(host, &sd_type);
 931                if (IS_ERR(card))
 932                        return PTR_ERR(card);
 933
 934                card->ocr = ocr;
 935                card->type = MMC_TYPE_SD;
 936                memcpy(card->raw_cid, cid, sizeof(card->raw_cid));
 937        }
 938
 939        /*
 940         * For native busses:  get card RCA and quit open drain mode.
 941         */
 942        if (!mmc_host_is_spi(host)) {
 943                err = mmc_send_relative_addr(host, &card->rca);
 944                if (err)
 945                        goto free_card;
 946        }
 947
 948        if (!oldcard) {
 949                err = mmc_sd_get_csd(host, card);
 950                if (err)
 951                        goto free_card;
 952
 953                mmc_decode_cid(card);
 954        }
 955
 956        /*
 957         * Select card, as all following commands rely on that.
 958         */
 959        if (!mmc_host_is_spi(host)) {
 960                err = mmc_select_card(card);
 961                if (err)
 962                        goto free_card;
 963        }
 964
 965        err = mmc_sd_setup_card(host, card, oldcard != NULL);
 966        if (err)
 967                goto free_card;
 968
 969        /* Initialization sequence for UHS-I cards */
 970        if (rocr & SD_ROCR_S18A) {
 971                err = mmc_sd_init_uhs_card(card);
 972                if (err)
 973                        goto free_card;
 974        } else {
 975                /*
 976                 * Attempt to change to high-speed (if supported)
 977                 */
 978                err = mmc_sd_switch_hs(card);
 979                if (err > 0)
 980                        mmc_set_timing(card->host, MMC_TIMING_SD_HS);
 981                else if (err)
 982                        goto free_card;
 983
 984                /*
 985                 * Set bus speed.
 986                 */
 987                mmc_set_clock(host, mmc_sd_get_max_clock(card));
 988
 989                /*
 990                 * Switch to wider bus (if supported).
 991                 */
 992                if ((host->caps & MMC_CAP_4_BIT_DATA) &&
 993                        (card->scr.bus_widths & SD_SCR_BUS_WIDTH_4)) {
 994                        err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4);
 995                        if (err)
 996                                goto free_card;
 997
 998                        mmc_set_bus_width(host, MMC_BUS_WIDTH_4);
 999                }
1000        }
1001
1002        host->card = card;
1003        return 0;
1004
1005free_card:
1006        if (!oldcard)
1007                mmc_remove_card(card);
1008
1009        return err;
1010}
1011
1012/*
1013 * Host is being removed. Free up the current card.
1014 */
1015static void mmc_sd_remove(struct mmc_host *host)
1016{
1017        BUG_ON(!host);
1018        BUG_ON(!host->card);
1019
1020        mmc_remove_card(host->card);
1021        host->card = NULL;
1022}
1023
1024/*
1025 * Card detection - card is alive.
1026 */
1027static int mmc_sd_alive(struct mmc_host *host)
1028{
1029        return mmc_send_status(host->card, NULL);
1030}
1031
1032/*
1033 * Card detection callback from host.
1034 */
1035static void mmc_sd_detect(struct mmc_host *host)
1036{
1037        int err;
1038
1039        BUG_ON(!host);
1040        BUG_ON(!host->card);
1041
1042        mmc_get_card(host->card);
1043
1044        /*
1045         * Just check if our card has been removed.
1046         */
1047        err = _mmc_detect_card_removed(host);
1048
1049        mmc_put_card(host->card);
1050
1051        if (err) {
1052                mmc_sd_remove(host);
1053
1054                mmc_claim_host(host);
1055                mmc_detach_bus(host);
1056                mmc_power_off(host);
1057                mmc_release_host(host);
1058        }
1059}
1060
1061static int _mmc_sd_suspend(struct mmc_host *host)
1062{
1063        int err = 0;
1064
1065        BUG_ON(!host);
1066        BUG_ON(!host->card);
1067
1068        mmc_claim_host(host);
1069
1070        if (mmc_card_suspended(host->card))
1071                goto out;
1072
1073        if (!mmc_host_is_spi(host))
1074                err = mmc_deselect_cards(host);
1075
1076        if (!err) {
1077                mmc_power_off(host);
1078                mmc_card_set_suspended(host->card);
1079        }
1080
1081out:
1082        mmc_release_host(host);
1083        return err;
1084}
1085
1086/*
1087 * Callback for suspend
1088 */
1089static int mmc_sd_suspend(struct mmc_host *host)
1090{
1091        int err;
1092
1093        err = _mmc_sd_suspend(host);
1094        if (!err) {
1095                pm_runtime_disable(&host->card->dev);
1096                pm_runtime_set_suspended(&host->card->dev);
1097        }
1098
1099        return err;
1100}
1101
1102/*
1103 * This function tries to determine if the same card is still present
1104 * and, if so, restore all state to it.
1105 */
1106static int _mmc_sd_resume(struct mmc_host *host)
1107{
1108        int err = 0;
1109
1110        BUG_ON(!host);
1111        BUG_ON(!host->card);
1112
1113        mmc_claim_host(host);
1114
1115        if (!mmc_card_suspended(host->card))
1116                goto out;
1117
1118        mmc_power_up(host, host->card->ocr);
1119        err = mmc_sd_init_card(host, host->card->ocr, host->card);
1120        mmc_card_clr_suspended(host->card);
1121
1122out:
1123        mmc_release_host(host);
1124        return err;
1125}
1126
1127/*
1128 * Callback for resume
1129 */
1130static int mmc_sd_resume(struct mmc_host *host)
1131{
1132        int err = 0;
1133
1134        if (!(host->caps & MMC_CAP_RUNTIME_RESUME)) {
1135                err = _mmc_sd_resume(host);
1136                pm_runtime_set_active(&host->card->dev);
1137                pm_runtime_mark_last_busy(&host->card->dev);
1138        }
1139        pm_runtime_enable(&host->card->dev);
1140
1141        return err;
1142}
1143
1144/*
1145 * Callback for runtime_suspend.
1146 */
1147static int mmc_sd_runtime_suspend(struct mmc_host *host)
1148{
1149        int err;
1150
1151        if (!(host->caps & MMC_CAP_AGGRESSIVE_PM))
1152                return 0;
1153
1154        err = _mmc_sd_suspend(host);
1155        if (err)
1156                pr_err("%s: error %d doing aggessive suspend\n",
1157                        mmc_hostname(host), err);
1158
1159        return err;
1160}
1161
1162/*
1163 * Callback for runtime_resume.
1164 */
1165static int mmc_sd_runtime_resume(struct mmc_host *host)
1166{
1167        int err;
1168
1169        if (!(host->caps & (MMC_CAP_AGGRESSIVE_PM | MMC_CAP_RUNTIME_RESUME)))
1170                return 0;
1171
1172        err = _mmc_sd_resume(host);
1173        if (err)
1174                pr_err("%s: error %d doing aggessive resume\n",
1175                        mmc_hostname(host), err);
1176
1177        return 0;
1178}
1179
1180static int mmc_sd_power_restore(struct mmc_host *host)
1181{
1182        int ret;
1183
1184        mmc_claim_host(host);
1185        ret = mmc_sd_init_card(host, host->card->ocr, host->card);
1186        mmc_release_host(host);
1187
1188        return ret;
1189}
1190
1191static const struct mmc_bus_ops mmc_sd_ops = {
1192        .remove = mmc_sd_remove,
1193        .detect = mmc_sd_detect,
1194        .runtime_suspend = mmc_sd_runtime_suspend,
1195        .runtime_resume = mmc_sd_runtime_resume,
1196        .suspend = mmc_sd_suspend,
1197        .resume = mmc_sd_resume,
1198        .power_restore = mmc_sd_power_restore,
1199        .alive = mmc_sd_alive,
1200        .shutdown = mmc_sd_suspend,
1201};
1202
1203/*
1204 * Starting point for SD card init.
1205 */
1206int mmc_attach_sd(struct mmc_host *host)
1207{
1208        int err;
1209        u32 ocr, rocr;
1210
1211        BUG_ON(!host);
1212        WARN_ON(!host->claimed);
1213
1214        err = mmc_send_app_op_cond(host, 0, &ocr);
1215        if (err)
1216                return err;
1217
1218        mmc_attach_bus(host, &mmc_sd_ops);
1219        if (host->ocr_avail_sd)
1220                host->ocr_avail = host->ocr_avail_sd;
1221
1222        /*
1223         * We need to get OCR a different way for SPI.
1224         */
1225        if (mmc_host_is_spi(host)) {
1226                mmc_go_idle(host);
1227
1228                err = mmc_spi_read_ocr(host, 0, &ocr);
1229                if (err)
1230                        goto err;
1231        }
1232
1233        rocr = mmc_select_voltage(host, ocr);
1234
1235        /*
1236         * Can we support the voltage(s) of the card(s)?
1237         */
1238        if (!rocr) {
1239                err = -EINVAL;
1240                goto err;
1241        }
1242
1243        /*
1244         * Detect and init the card.
1245         */
1246        err = mmc_sd_init_card(host, rocr, NULL);
1247        if (err)
1248                goto err;
1249
1250        mmc_release_host(host);
1251        err = mmc_add_card(host->card);
1252        mmc_claim_host(host);
1253        if (err)
1254                goto remove_card;
1255
1256        return 0;
1257
1258remove_card:
1259        mmc_release_host(host);
1260        mmc_remove_card(host->card);
1261        host->card = NULL;
1262        mmc_claim_host(host);
1263err:
1264        mmc_detach_bus(host);
1265
1266        pr_err("%s: error %d whilst initialising SD card\n",
1267                mmc_hostname(host), err);
1268
1269        return err;
1270}
1271
1272