linux/drivers/mmc/core/mmc.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 *  linux/drivers/mmc/core/mmc.c
   4 *
   5 *  Copyright (C) 2003-2004 Russell King, All Rights Reserved.
   6 *  Copyright (C) 2005-2007 Pierre Ossman, All Rights Reserved.
   7 *  MMCv4 support Copyright (C) 2006 Philip Langdale, All Rights Reserved.
   8 */
   9
  10#include <linux/err.h>
  11#include <linux/of.h>
  12#include <linux/slab.h>
  13#include <linux/stat.h>
  14#include <linux/pm_runtime.h>
  15
  16#include <linux/mmc/host.h>
  17#include <linux/mmc/card.h>
  18#include <linux/mmc/mmc.h>
  19
  20#include "core.h"
  21#include "card.h"
  22#include "host.h"
  23#include "bus.h"
  24#include "mmc_ops.h"
  25#include "quirks.h"
  26#include "sd_ops.h"
  27#include "pwrseq.h"
  28
  29#define DEFAULT_CMD6_TIMEOUT_MS 500
  30#define MIN_CACHE_EN_TIMEOUT_MS 1600
  31#define CACHE_FLUSH_TIMEOUT_MS 30000 /* 30s */
  32
  33static const unsigned int tran_exp[] = {
  34        10000,          100000,         1000000,        10000000,
  35        0,              0,              0,              0
  36};
  37
  38static const unsigned char tran_mant[] = {
  39        0,      10,     12,     13,     15,     20,     25,     30,
  40        35,     40,     45,     50,     55,     60,     70,     80,
  41};
  42
  43static const unsigned int taac_exp[] = {
  44        1,      10,     100,    1000,   10000,  100000, 1000000, 10000000,
  45};
  46
  47static const unsigned int taac_mant[] = {
  48        0,      10,     12,     13,     15,     20,     25,     30,
  49        35,     40,     45,     50,     55,     60,     70,     80,
  50};
  51
  52#define UNSTUFF_BITS(resp,start,size)                                   \
  53        ({                                                              \
  54                const int __size = size;                                \
  55                const u32 __mask = (__size < 32 ? 1 << __size : 0) - 1; \
  56                const int __off = 3 - ((start) / 32);                   \
  57                const int __shft = (start) & 31;                        \
  58                u32 __res;                                              \
  59                                                                        \
  60                __res = resp[__off] >> __shft;                          \
  61                if (__size + __shft > 32)                               \
  62                        __res |= resp[__off-1] << ((32 - __shft) % 32); \
  63                __res & __mask;                                         \
  64        })
  65
  66/*
  67 * Given the decoded CSD structure, decode the raw CID to our CID structure.
  68 */
  69static int mmc_decode_cid(struct mmc_card *card)
  70{
  71        u32 *resp = card->raw_cid;
  72
  73        /*
  74         * The selection of the format here is based upon published
  75         * specs from sandisk and from what people have reported.
  76         */
  77        switch (card->csd.mmca_vsn) {
  78        case 0: /* MMC v1.0 - v1.2 */
  79        case 1: /* MMC v1.4 */
  80                card->cid.manfid        = UNSTUFF_BITS(resp, 104, 24);
  81                card->cid.prod_name[0]  = UNSTUFF_BITS(resp, 96, 8);
  82                card->cid.prod_name[1]  = UNSTUFF_BITS(resp, 88, 8);
  83                card->cid.prod_name[2]  = UNSTUFF_BITS(resp, 80, 8);
  84                card->cid.prod_name[3]  = UNSTUFF_BITS(resp, 72, 8);
  85                card->cid.prod_name[4]  = UNSTUFF_BITS(resp, 64, 8);
  86                card->cid.prod_name[5]  = UNSTUFF_BITS(resp, 56, 8);
  87                card->cid.prod_name[6]  = UNSTUFF_BITS(resp, 48, 8);
  88                card->cid.hwrev         = UNSTUFF_BITS(resp, 44, 4);
  89                card->cid.fwrev         = UNSTUFF_BITS(resp, 40, 4);
  90                card->cid.serial        = UNSTUFF_BITS(resp, 16, 24);
  91                card->cid.month         = UNSTUFF_BITS(resp, 12, 4);
  92                card->cid.year          = UNSTUFF_BITS(resp, 8, 4) + 1997;
  93                break;
  94
  95        case 2: /* MMC v2.0 - v2.2 */
  96        case 3: /* MMC v3.1 - v3.3 */
  97        case 4: /* MMC v4 */
  98                card->cid.manfid        = UNSTUFF_BITS(resp, 120, 8);
  99                card->cid.oemid         = UNSTUFF_BITS(resp, 104, 16);
 100                card->cid.prod_name[0]  = UNSTUFF_BITS(resp, 96, 8);
 101                card->cid.prod_name[1]  = UNSTUFF_BITS(resp, 88, 8);
 102                card->cid.prod_name[2]  = UNSTUFF_BITS(resp, 80, 8);
 103                card->cid.prod_name[3]  = UNSTUFF_BITS(resp, 72, 8);
 104                card->cid.prod_name[4]  = UNSTUFF_BITS(resp, 64, 8);
 105                card->cid.prod_name[5]  = UNSTUFF_BITS(resp, 56, 8);
 106                card->cid.prv           = UNSTUFF_BITS(resp, 48, 8);
 107                card->cid.serial        = UNSTUFF_BITS(resp, 16, 32);
 108                card->cid.month         = UNSTUFF_BITS(resp, 12, 4);
 109                card->cid.year          = UNSTUFF_BITS(resp, 8, 4) + 1997;
 110                break;
 111
 112        default:
 113                pr_err("%s: card has unknown MMCA version %d\n",
 114                        mmc_hostname(card->host), card->csd.mmca_vsn);
 115                return -EINVAL;
 116        }
 117
 118        return 0;
 119}
 120
 121static void mmc_set_erase_size(struct mmc_card *card)
 122{
 123        if (card->ext_csd.erase_group_def & 1)
 124                card->erase_size = card->ext_csd.hc_erase_size;
 125        else
 126                card->erase_size = card->csd.erase_size;
 127
 128        mmc_init_erase(card);
 129}
 130
 131/*
 132 * Given a 128-bit response, decode to our card CSD structure.
 133 */
 134static int mmc_decode_csd(struct mmc_card *card)
 135{
 136        struct mmc_csd *csd = &card->csd;
 137        unsigned int e, m, a, b;
 138        u32 *resp = card->raw_csd;
 139
 140        /*
 141         * We only understand CSD structure v1.1 and v1.2.
 142         * v1.2 has extra information in bits 15, 11 and 10.
 143         * We also support eMMC v4.4 & v4.41.
 144         */
 145        csd->structure = UNSTUFF_BITS(resp, 126, 2);
 146        if (csd->structure == 0) {
 147                pr_err("%s: unrecognised CSD structure version %d\n",
 148                        mmc_hostname(card->host), csd->structure);
 149                return -EINVAL;
 150        }
 151
 152        csd->mmca_vsn    = UNSTUFF_BITS(resp, 122, 4);
 153        m = UNSTUFF_BITS(resp, 115, 4);
 154        e = UNSTUFF_BITS(resp, 112, 3);
 155        csd->taac_ns     = (taac_exp[e] * taac_mant[m] + 9) / 10;
 156        csd->taac_clks   = UNSTUFF_BITS(resp, 104, 8) * 100;
 157
 158        m = UNSTUFF_BITS(resp, 99, 4);
 159        e = UNSTUFF_BITS(resp, 96, 3);
 160        csd->max_dtr      = tran_exp[e] * tran_mant[m];
 161        csd->cmdclass     = UNSTUFF_BITS(resp, 84, 12);
 162
 163        e = UNSTUFF_BITS(resp, 47, 3);
 164        m = UNSTUFF_BITS(resp, 62, 12);
 165        csd->capacity     = (1 + m) << (e + 2);
 166
 167        csd->read_blkbits = UNSTUFF_BITS(resp, 80, 4);
 168        csd->read_partial = UNSTUFF_BITS(resp, 79, 1);
 169        csd->write_misalign = UNSTUFF_BITS(resp, 78, 1);
 170        csd->read_misalign = UNSTUFF_BITS(resp, 77, 1);
 171        csd->dsr_imp = UNSTUFF_BITS(resp, 76, 1);
 172        csd->r2w_factor = UNSTUFF_BITS(resp, 26, 3);
 173        csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4);
 174        csd->write_partial = UNSTUFF_BITS(resp, 21, 1);
 175
 176        if (csd->write_blkbits >= 9) {
 177                a = UNSTUFF_BITS(resp, 42, 5);
 178                b = UNSTUFF_BITS(resp, 37, 5);
 179                csd->erase_size = (a + 1) * (b + 1);
 180                csd->erase_size <<= csd->write_blkbits - 9;
 181        }
 182
 183        return 0;
 184}
 185
 186static void mmc_select_card_type(struct mmc_card *card)
 187{
 188        struct mmc_host *host = card->host;
 189        u8 card_type = card->ext_csd.raw_card_type;
 190        u32 caps = host->caps, caps2 = host->caps2;
 191        unsigned int hs_max_dtr = 0, hs200_max_dtr = 0;
 192        unsigned int avail_type = 0;
 193
 194        if (caps & MMC_CAP_MMC_HIGHSPEED &&
 195            card_type & EXT_CSD_CARD_TYPE_HS_26) {
 196                hs_max_dtr = MMC_HIGH_26_MAX_DTR;
 197                avail_type |= EXT_CSD_CARD_TYPE_HS_26;
 198        }
 199
 200        if (caps & MMC_CAP_MMC_HIGHSPEED &&
 201            card_type & EXT_CSD_CARD_TYPE_HS_52) {
 202                hs_max_dtr = MMC_HIGH_52_MAX_DTR;
 203                avail_type |= EXT_CSD_CARD_TYPE_HS_52;
 204        }
 205
 206        if (caps & (MMC_CAP_1_8V_DDR | MMC_CAP_3_3V_DDR) &&
 207            card_type & EXT_CSD_CARD_TYPE_DDR_1_8V) {
 208                hs_max_dtr = MMC_HIGH_DDR_MAX_DTR;
 209                avail_type |= EXT_CSD_CARD_TYPE_DDR_1_8V;
 210        }
 211
 212        if (caps & MMC_CAP_1_2V_DDR &&
 213            card_type & EXT_CSD_CARD_TYPE_DDR_1_2V) {
 214                hs_max_dtr = MMC_HIGH_DDR_MAX_DTR;
 215                avail_type |= EXT_CSD_CARD_TYPE_DDR_1_2V;
 216        }
 217
 218        if (caps2 & MMC_CAP2_HS200_1_8V_SDR &&
 219            card_type & EXT_CSD_CARD_TYPE_HS200_1_8V) {
 220                hs200_max_dtr = MMC_HS200_MAX_DTR;
 221                avail_type |= EXT_CSD_CARD_TYPE_HS200_1_8V;
 222        }
 223
 224        if (caps2 & MMC_CAP2_HS200_1_2V_SDR &&
 225            card_type & EXT_CSD_CARD_TYPE_HS200_1_2V) {
 226                hs200_max_dtr = MMC_HS200_MAX_DTR;
 227                avail_type |= EXT_CSD_CARD_TYPE_HS200_1_2V;
 228        }
 229
 230        if (caps2 & MMC_CAP2_HS400_1_8V &&
 231            card_type & EXT_CSD_CARD_TYPE_HS400_1_8V) {
 232                hs200_max_dtr = MMC_HS200_MAX_DTR;
 233                avail_type |= EXT_CSD_CARD_TYPE_HS400_1_8V;
 234        }
 235
 236        if (caps2 & MMC_CAP2_HS400_1_2V &&
 237            card_type & EXT_CSD_CARD_TYPE_HS400_1_2V) {
 238                hs200_max_dtr = MMC_HS200_MAX_DTR;
 239                avail_type |= EXT_CSD_CARD_TYPE_HS400_1_2V;
 240        }
 241
 242        if ((caps2 & MMC_CAP2_HS400_ES) &&
 243            card->ext_csd.strobe_support &&
 244            (avail_type & EXT_CSD_CARD_TYPE_HS400))
 245                avail_type |= EXT_CSD_CARD_TYPE_HS400ES;
 246
 247        card->ext_csd.hs_max_dtr = hs_max_dtr;
 248        card->ext_csd.hs200_max_dtr = hs200_max_dtr;
 249        card->mmc_avail_type = avail_type;
 250}
 251
 252static void mmc_manage_enhanced_area(struct mmc_card *card, u8 *ext_csd)
 253{
 254        u8 hc_erase_grp_sz, hc_wp_grp_sz;
 255
 256        /*
 257         * Disable these attributes by default
 258         */
 259        card->ext_csd.enhanced_area_offset = -EINVAL;
 260        card->ext_csd.enhanced_area_size = -EINVAL;
 261
 262        /*
 263         * Enhanced area feature support -- check whether the eMMC
 264         * card has the Enhanced area enabled.  If so, export enhanced
 265         * area offset and size to user by adding sysfs interface.
 266         */
 267        if ((ext_csd[EXT_CSD_PARTITION_SUPPORT] & 0x2) &&
 268            (ext_csd[EXT_CSD_PARTITION_ATTRIBUTE] & 0x1)) {
 269                if (card->ext_csd.partition_setting_completed) {
 270                        hc_erase_grp_sz =
 271                                ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
 272                        hc_wp_grp_sz =
 273                                ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
 274
 275                        /*
 276                         * calculate the enhanced data area offset, in bytes
 277                         */
 278                        card->ext_csd.enhanced_area_offset =
 279                                (((unsigned long long)ext_csd[139]) << 24) +
 280                                (((unsigned long long)ext_csd[138]) << 16) +
 281                                (((unsigned long long)ext_csd[137]) << 8) +
 282                                (((unsigned long long)ext_csd[136]));
 283                        if (mmc_card_blockaddr(card))
 284                                card->ext_csd.enhanced_area_offset <<= 9;
 285                        /*
 286                         * calculate the enhanced data area size, in kilobytes
 287                         */
 288                        card->ext_csd.enhanced_area_size =
 289                                (ext_csd[142] << 16) + (ext_csd[141] << 8) +
 290                                ext_csd[140];
 291                        card->ext_csd.enhanced_area_size *=
 292                                (size_t)(hc_erase_grp_sz * hc_wp_grp_sz);
 293                        card->ext_csd.enhanced_area_size <<= 9;
 294                } else {
 295                        pr_warn("%s: defines enhanced area without partition setting complete\n",
 296                                mmc_hostname(card->host));
 297                }
 298        }
 299}
 300
 301static void mmc_part_add(struct mmc_card *card, u64 size,
 302                         unsigned int part_cfg, char *name, int idx, bool ro,
 303                         int area_type)
 304{
 305        card->part[card->nr_parts].size = size;
 306        card->part[card->nr_parts].part_cfg = part_cfg;
 307        sprintf(card->part[card->nr_parts].name, name, idx);
 308        card->part[card->nr_parts].force_ro = ro;
 309        card->part[card->nr_parts].area_type = area_type;
 310        card->nr_parts++;
 311}
 312
 313static void mmc_manage_gp_partitions(struct mmc_card *card, u8 *ext_csd)
 314{
 315        int idx;
 316        u8 hc_erase_grp_sz, hc_wp_grp_sz;
 317        u64 part_size;
 318
 319        /*
 320         * General purpose partition feature support --
 321         * If ext_csd has the size of general purpose partitions,
 322         * set size, part_cfg, partition name in mmc_part.
 323         */
 324        if (ext_csd[EXT_CSD_PARTITION_SUPPORT] &
 325            EXT_CSD_PART_SUPPORT_PART_EN) {
 326                hc_erase_grp_sz =
 327                        ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
 328                hc_wp_grp_sz =
 329                        ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
 330
 331                for (idx = 0; idx < MMC_NUM_GP_PARTITION; idx++) {
 332                        if (!ext_csd[EXT_CSD_GP_SIZE_MULT + idx * 3] &&
 333                            !ext_csd[EXT_CSD_GP_SIZE_MULT + idx * 3 + 1] &&
 334                            !ext_csd[EXT_CSD_GP_SIZE_MULT + idx * 3 + 2])
 335                                continue;
 336                        if (card->ext_csd.partition_setting_completed == 0) {
 337                                pr_warn("%s: has partition size defined without partition complete\n",
 338                                        mmc_hostname(card->host));
 339                                break;
 340                        }
 341                        part_size =
 342                                (ext_csd[EXT_CSD_GP_SIZE_MULT + idx * 3 + 2]
 343                                << 16) +
 344                                (ext_csd[EXT_CSD_GP_SIZE_MULT + idx * 3 + 1]
 345                                << 8) +
 346                                ext_csd[EXT_CSD_GP_SIZE_MULT + idx * 3];
 347                        part_size *= (hc_erase_grp_sz * hc_wp_grp_sz);
 348                        mmc_part_add(card, part_size << 19,
 349                                EXT_CSD_PART_CONFIG_ACC_GP0 + idx,
 350                                "gp%d", idx, false,
 351                                MMC_BLK_DATA_AREA_GP);
 352                }
 353        }
 354}
 355
 356/* Minimum partition switch timeout in milliseconds */
 357#define MMC_MIN_PART_SWITCH_TIME        300
 358
 359/*
 360 * Decode extended CSD.
 361 */
 362static int mmc_decode_ext_csd(struct mmc_card *card, u8 *ext_csd)
 363{
 364        int err = 0, idx;
 365        u64 part_size;
 366        struct device_node *np;
 367        bool broken_hpi = false;
 368
 369        /* Version is coded in the CSD_STRUCTURE byte in the EXT_CSD register */
 370        card->ext_csd.raw_ext_csd_structure = ext_csd[EXT_CSD_STRUCTURE];
 371        if (card->csd.structure == 3) {
 372                if (card->ext_csd.raw_ext_csd_structure > 2) {
 373                        pr_err("%s: unrecognised EXT_CSD structure "
 374                                "version %d\n", mmc_hostname(card->host),
 375                                        card->ext_csd.raw_ext_csd_structure);
 376                        err = -EINVAL;
 377                        goto out;
 378                }
 379        }
 380
 381        np = mmc_of_find_child_device(card->host, 0);
 382        if (np && of_device_is_compatible(np, "mmc-card"))
 383                broken_hpi = of_property_read_bool(np, "broken-hpi");
 384        of_node_put(np);
 385
 386        /*
 387         * The EXT_CSD format is meant to be forward compatible. As long
 388         * as CSD_STRUCTURE does not change, all values for EXT_CSD_REV
 389         * are authorized, see JEDEC JESD84-B50 section B.8.
 390         */
 391        card->ext_csd.rev = ext_csd[EXT_CSD_REV];
 392
 393        /* fixup device after ext_csd revision field is updated */
 394        mmc_fixup_device(card, mmc_ext_csd_fixups);
 395
 396        card->ext_csd.raw_sectors[0] = ext_csd[EXT_CSD_SEC_CNT + 0];
 397        card->ext_csd.raw_sectors[1] = ext_csd[EXT_CSD_SEC_CNT + 1];
 398        card->ext_csd.raw_sectors[2] = ext_csd[EXT_CSD_SEC_CNT + 2];
 399        card->ext_csd.raw_sectors[3] = ext_csd[EXT_CSD_SEC_CNT + 3];
 400        if (card->ext_csd.rev >= 2) {
 401                card->ext_csd.sectors =
 402                        ext_csd[EXT_CSD_SEC_CNT + 0] << 0 |
 403                        ext_csd[EXT_CSD_SEC_CNT + 1] << 8 |
 404                        ext_csd[EXT_CSD_SEC_CNT + 2] << 16 |
 405                        ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
 406
 407                /* Cards with density > 2GiB are sector addressed */
 408                if (card->ext_csd.sectors > (2u * 1024 * 1024 * 1024) / 512)
 409                        mmc_card_set_blockaddr(card);
 410        }
 411
 412        card->ext_csd.strobe_support = ext_csd[EXT_CSD_STROBE_SUPPORT];
 413        card->ext_csd.raw_card_type = ext_csd[EXT_CSD_CARD_TYPE];
 414        mmc_select_card_type(card);
 415
 416        card->ext_csd.raw_s_a_timeout = ext_csd[EXT_CSD_S_A_TIMEOUT];
 417        card->ext_csd.raw_erase_timeout_mult =
 418                ext_csd[EXT_CSD_ERASE_TIMEOUT_MULT];
 419        card->ext_csd.raw_hc_erase_grp_size =
 420                ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
 421        card->ext_csd.raw_boot_mult =
 422                ext_csd[EXT_CSD_BOOT_MULT];
 423        if (card->ext_csd.rev >= 3) {
 424                u8 sa_shift = ext_csd[EXT_CSD_S_A_TIMEOUT];
 425                card->ext_csd.part_config = ext_csd[EXT_CSD_PART_CONFIG];
 426
 427                /* EXT_CSD value is in units of 10ms, but we store in ms */
 428                card->ext_csd.part_time = 10 * ext_csd[EXT_CSD_PART_SWITCH_TIME];
 429
 430                /* Sleep / awake timeout in 100ns units */
 431                if (sa_shift > 0 && sa_shift <= 0x17)
 432                        card->ext_csd.sa_timeout =
 433                                        1 << ext_csd[EXT_CSD_S_A_TIMEOUT];
 434                card->ext_csd.erase_group_def =
 435                        ext_csd[EXT_CSD_ERASE_GROUP_DEF];
 436                card->ext_csd.hc_erase_timeout = 300 *
 437                        ext_csd[EXT_CSD_ERASE_TIMEOUT_MULT];
 438                card->ext_csd.hc_erase_size =
 439                        ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] << 10;
 440
 441                card->ext_csd.rel_sectors = ext_csd[EXT_CSD_REL_WR_SEC_C];
 442
 443                /*
 444                 * There are two boot regions of equal size, defined in
 445                 * multiples of 128K.
 446                 */
 447                if (ext_csd[EXT_CSD_BOOT_MULT] && mmc_boot_partition_access(card->host)) {
 448                        for (idx = 0; idx < MMC_NUM_BOOT_PARTITION; idx++) {
 449                                part_size = ext_csd[EXT_CSD_BOOT_MULT] << 17;
 450                                mmc_part_add(card, part_size,
 451                                        EXT_CSD_PART_CONFIG_ACC_BOOT0 + idx,
 452                                        "boot%d", idx, true,
 453                                        MMC_BLK_DATA_AREA_BOOT);
 454                        }
 455                }
 456        }
 457
 458        card->ext_csd.raw_hc_erase_gap_size =
 459                ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
 460        card->ext_csd.raw_sec_trim_mult =
 461                ext_csd[EXT_CSD_SEC_TRIM_MULT];
 462        card->ext_csd.raw_sec_erase_mult =
 463                ext_csd[EXT_CSD_SEC_ERASE_MULT];
 464        card->ext_csd.raw_sec_feature_support =
 465                ext_csd[EXT_CSD_SEC_FEATURE_SUPPORT];
 466        card->ext_csd.raw_trim_mult =
 467                ext_csd[EXT_CSD_TRIM_MULT];
 468        card->ext_csd.raw_partition_support = ext_csd[EXT_CSD_PARTITION_SUPPORT];
 469        card->ext_csd.raw_driver_strength = ext_csd[EXT_CSD_DRIVER_STRENGTH];
 470        if (card->ext_csd.rev >= 4) {
 471                if (ext_csd[EXT_CSD_PARTITION_SETTING_COMPLETED] &
 472                    EXT_CSD_PART_SETTING_COMPLETED)
 473                        card->ext_csd.partition_setting_completed = 1;
 474                else
 475                        card->ext_csd.partition_setting_completed = 0;
 476
 477                mmc_manage_enhanced_area(card, ext_csd);
 478
 479                mmc_manage_gp_partitions(card, ext_csd);
 480
 481                card->ext_csd.sec_trim_mult =
 482                        ext_csd[EXT_CSD_SEC_TRIM_MULT];
 483                card->ext_csd.sec_erase_mult =
 484                        ext_csd[EXT_CSD_SEC_ERASE_MULT];
 485                card->ext_csd.sec_feature_support =
 486                        ext_csd[EXT_CSD_SEC_FEATURE_SUPPORT];
 487                card->ext_csd.trim_timeout = 300 *
 488                        ext_csd[EXT_CSD_TRIM_MULT];
 489
 490                /*
 491                 * Note that the call to mmc_part_add above defaults to read
 492                 * only. If this default assumption is changed, the call must
 493                 * take into account the value of boot_locked below.
 494                 */
 495                card->ext_csd.boot_ro_lock = ext_csd[EXT_CSD_BOOT_WP];
 496                card->ext_csd.boot_ro_lockable = true;
 497
 498                /* Save power class values */
 499                card->ext_csd.raw_pwr_cl_52_195 =
 500                        ext_csd[EXT_CSD_PWR_CL_52_195];
 501                card->ext_csd.raw_pwr_cl_26_195 =
 502                        ext_csd[EXT_CSD_PWR_CL_26_195];
 503                card->ext_csd.raw_pwr_cl_52_360 =
 504                        ext_csd[EXT_CSD_PWR_CL_52_360];
 505                card->ext_csd.raw_pwr_cl_26_360 =
 506                        ext_csd[EXT_CSD_PWR_CL_26_360];
 507                card->ext_csd.raw_pwr_cl_200_195 =
 508                        ext_csd[EXT_CSD_PWR_CL_200_195];
 509                card->ext_csd.raw_pwr_cl_200_360 =
 510                        ext_csd[EXT_CSD_PWR_CL_200_360];
 511                card->ext_csd.raw_pwr_cl_ddr_52_195 =
 512                        ext_csd[EXT_CSD_PWR_CL_DDR_52_195];
 513                card->ext_csd.raw_pwr_cl_ddr_52_360 =
 514                        ext_csd[EXT_CSD_PWR_CL_DDR_52_360];
 515                card->ext_csd.raw_pwr_cl_ddr_200_360 =
 516                        ext_csd[EXT_CSD_PWR_CL_DDR_200_360];
 517        }
 518
 519        if (card->ext_csd.rev >= 5) {
 520                /* Adjust production date as per JEDEC JESD84-B451 */
 521                if (card->cid.year < 2010)
 522                        card->cid.year += 16;
 523
 524                /* check whether the eMMC card supports BKOPS */
 525                if (ext_csd[EXT_CSD_BKOPS_SUPPORT] & 0x1) {
 526                        card->ext_csd.bkops = 1;
 527                        card->ext_csd.man_bkops_en =
 528                                        (ext_csd[EXT_CSD_BKOPS_EN] &
 529                                                EXT_CSD_MANUAL_BKOPS_MASK);
 530                        card->ext_csd.raw_bkops_status =
 531                                ext_csd[EXT_CSD_BKOPS_STATUS];
 532                        if (card->ext_csd.man_bkops_en)
 533                                pr_debug("%s: MAN_BKOPS_EN bit is set\n",
 534                                        mmc_hostname(card->host));
 535                        card->ext_csd.auto_bkops_en =
 536                                        (ext_csd[EXT_CSD_BKOPS_EN] &
 537                                                EXT_CSD_AUTO_BKOPS_MASK);
 538                        if (card->ext_csd.auto_bkops_en)
 539                                pr_debug("%s: AUTO_BKOPS_EN bit is set\n",
 540                                        mmc_hostname(card->host));
 541                }
 542
 543                /* check whether the eMMC card supports HPI */
 544                if (!mmc_card_broken_hpi(card) &&
 545                    !broken_hpi && (ext_csd[EXT_CSD_HPI_FEATURES] & 0x1)) {
 546                        card->ext_csd.hpi = 1;
 547                        if (ext_csd[EXT_CSD_HPI_FEATURES] & 0x2)
 548                                card->ext_csd.hpi_cmd = MMC_STOP_TRANSMISSION;
 549                        else
 550                                card->ext_csd.hpi_cmd = MMC_SEND_STATUS;
 551                        /*
 552                         * Indicate the maximum timeout to close
 553                         * a command interrupted by HPI
 554                         */
 555                        card->ext_csd.out_of_int_time =
 556                                ext_csd[EXT_CSD_OUT_OF_INTERRUPT_TIME] * 10;
 557                }
 558
 559                card->ext_csd.rel_param = ext_csd[EXT_CSD_WR_REL_PARAM];
 560                card->ext_csd.rst_n_function = ext_csd[EXT_CSD_RST_N_FUNCTION];
 561
 562                /*
 563                 * RPMB regions are defined in multiples of 128K.
 564                 */
 565                card->ext_csd.raw_rpmb_size_mult = ext_csd[EXT_CSD_RPMB_MULT];
 566                if (ext_csd[EXT_CSD_RPMB_MULT] && mmc_host_cmd23(card->host)) {
 567                        mmc_part_add(card, ext_csd[EXT_CSD_RPMB_MULT] << 17,
 568                                EXT_CSD_PART_CONFIG_ACC_RPMB,
 569                                "rpmb", 0, false,
 570                                MMC_BLK_DATA_AREA_RPMB);
 571                }
 572        }
 573
 574        card->ext_csd.raw_erased_mem_count = ext_csd[EXT_CSD_ERASED_MEM_CONT];
 575        if (ext_csd[EXT_CSD_ERASED_MEM_CONT])
 576                card->erased_byte = 0xFF;
 577        else
 578                card->erased_byte = 0x0;
 579
 580        /* eMMC v4.5 or later */
 581        card->ext_csd.generic_cmd6_time = DEFAULT_CMD6_TIMEOUT_MS;
 582        if (card->ext_csd.rev >= 6) {
 583                card->ext_csd.feature_support |= MMC_DISCARD_FEATURE;
 584
 585                card->ext_csd.generic_cmd6_time = 10 *
 586                        ext_csd[EXT_CSD_GENERIC_CMD6_TIME];
 587                card->ext_csd.power_off_longtime = 10 *
 588                        ext_csd[EXT_CSD_POWER_OFF_LONG_TIME];
 589
 590                card->ext_csd.cache_size =
 591                        ext_csd[EXT_CSD_CACHE_SIZE + 0] << 0 |
 592                        ext_csd[EXT_CSD_CACHE_SIZE + 1] << 8 |
 593                        ext_csd[EXT_CSD_CACHE_SIZE + 2] << 16 |
 594                        ext_csd[EXT_CSD_CACHE_SIZE + 3] << 24;
 595
 596                if (ext_csd[EXT_CSD_DATA_SECTOR_SIZE] == 1)
 597                        card->ext_csd.data_sector_size = 4096;
 598                else
 599                        card->ext_csd.data_sector_size = 512;
 600
 601                if ((ext_csd[EXT_CSD_DATA_TAG_SUPPORT] & 1) &&
 602                    (ext_csd[EXT_CSD_TAG_UNIT_SIZE] <= 8)) {
 603                        card->ext_csd.data_tag_unit_size =
 604                        ((unsigned int) 1 << ext_csd[EXT_CSD_TAG_UNIT_SIZE]) *
 605                        (card->ext_csd.data_sector_size);
 606                } else {
 607                        card->ext_csd.data_tag_unit_size = 0;
 608                }
 609
 610                card->ext_csd.max_packed_writes =
 611                        ext_csd[EXT_CSD_MAX_PACKED_WRITES];
 612                card->ext_csd.max_packed_reads =
 613                        ext_csd[EXT_CSD_MAX_PACKED_READS];
 614        } else {
 615                card->ext_csd.data_sector_size = 512;
 616        }
 617
 618        /*
 619         * GENERIC_CMD6_TIME is to be used "unless a specific timeout is defined
 620         * when accessing a specific field", so use it here if there is no
 621         * PARTITION_SWITCH_TIME.
 622         */
 623        if (!card->ext_csd.part_time)
 624                card->ext_csd.part_time = card->ext_csd.generic_cmd6_time;
 625        /* Some eMMC set the value too low so set a minimum */
 626        if (card->ext_csd.part_time < MMC_MIN_PART_SWITCH_TIME)
 627                card->ext_csd.part_time = MMC_MIN_PART_SWITCH_TIME;
 628
 629        /* eMMC v5 or later */
 630        if (card->ext_csd.rev >= 7) {
 631                memcpy(card->ext_csd.fwrev, &ext_csd[EXT_CSD_FIRMWARE_VERSION],
 632                       MMC_FIRMWARE_LEN);
 633                card->ext_csd.ffu_capable =
 634                        (ext_csd[EXT_CSD_SUPPORTED_MODE] & 0x1) &&
 635                        !(ext_csd[EXT_CSD_FW_CONFIG] & 0x1);
 636
 637                card->ext_csd.pre_eol_info = ext_csd[EXT_CSD_PRE_EOL_INFO];
 638                card->ext_csd.device_life_time_est_typ_a =
 639                        ext_csd[EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_A];
 640                card->ext_csd.device_life_time_est_typ_b =
 641                        ext_csd[EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_B];
 642        }
 643
 644        /* eMMC v5.1 or later */
 645        if (card->ext_csd.rev >= 8) {
 646                card->ext_csd.cmdq_support = ext_csd[EXT_CSD_CMDQ_SUPPORT] &
 647                                             EXT_CSD_CMDQ_SUPPORTED;
 648                card->ext_csd.cmdq_depth = (ext_csd[EXT_CSD_CMDQ_DEPTH] &
 649                                            EXT_CSD_CMDQ_DEPTH_MASK) + 1;
 650                /* Exclude inefficiently small queue depths */
 651                if (card->ext_csd.cmdq_depth <= 2) {
 652                        card->ext_csd.cmdq_support = false;
 653                        card->ext_csd.cmdq_depth = 0;
 654                }
 655                if (card->ext_csd.cmdq_support) {
 656                        pr_debug("%s: Command Queue supported depth %u\n",
 657                                 mmc_hostname(card->host),
 658                                 card->ext_csd.cmdq_depth);
 659                }
 660                card->ext_csd.enhanced_rpmb_supported =
 661                                        (card->ext_csd.rel_param &
 662                                         EXT_CSD_WR_REL_PARAM_EN_RPMB_REL_WR);
 663        }
 664out:
 665        return err;
 666}
 667
 668static int mmc_read_ext_csd(struct mmc_card *card)
 669{
 670        u8 *ext_csd;
 671        int err;
 672
 673        if (!mmc_can_ext_csd(card))
 674                return 0;
 675
 676        err = mmc_get_ext_csd(card, &ext_csd);
 677        if (err) {
 678                /* If the host or the card can't do the switch,
 679                 * fail more gracefully. */
 680                if ((err != -EINVAL)
 681                 && (err != -ENOSYS)
 682                 && (err != -EFAULT))
 683                        return err;
 684
 685                /*
 686                 * High capacity cards should have this "magic" size
 687                 * stored in their CSD.
 688                 */
 689                if (card->csd.capacity == (4096 * 512)) {
 690                        pr_err("%s: unable to read EXT_CSD on a possible high capacity card. Card will be ignored.\n",
 691                                mmc_hostname(card->host));
 692                } else {
 693                        pr_warn("%s: unable to read EXT_CSD, performance might suffer\n",
 694                                mmc_hostname(card->host));
 695                        err = 0;
 696                }
 697
 698                return err;
 699        }
 700
 701        err = mmc_decode_ext_csd(card, ext_csd);
 702        kfree(ext_csd);
 703        return err;
 704}
 705
 706static int mmc_compare_ext_csds(struct mmc_card *card, unsigned bus_width)
 707{
 708        u8 *bw_ext_csd;
 709        int err;
 710
 711        if (bus_width == MMC_BUS_WIDTH_1)
 712                return 0;
 713
 714        err = mmc_get_ext_csd(card, &bw_ext_csd);
 715        if (err)
 716                return err;
 717
 718        /* only compare read only fields */
 719        err = !((card->ext_csd.raw_partition_support ==
 720                        bw_ext_csd[EXT_CSD_PARTITION_SUPPORT]) &&
 721                (card->ext_csd.raw_erased_mem_count ==
 722                        bw_ext_csd[EXT_CSD_ERASED_MEM_CONT]) &&
 723                (card->ext_csd.rev ==
 724                        bw_ext_csd[EXT_CSD_REV]) &&
 725                (card->ext_csd.raw_ext_csd_structure ==
 726                        bw_ext_csd[EXT_CSD_STRUCTURE]) &&
 727                (card->ext_csd.raw_card_type ==
 728                        bw_ext_csd[EXT_CSD_CARD_TYPE]) &&
 729                (card->ext_csd.raw_s_a_timeout ==
 730                        bw_ext_csd[EXT_CSD_S_A_TIMEOUT]) &&
 731                (card->ext_csd.raw_hc_erase_gap_size ==
 732                        bw_ext_csd[EXT_CSD_HC_WP_GRP_SIZE]) &&
 733                (card->ext_csd.raw_erase_timeout_mult ==
 734                        bw_ext_csd[EXT_CSD_ERASE_TIMEOUT_MULT]) &&
 735                (card->ext_csd.raw_hc_erase_grp_size ==
 736                        bw_ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]) &&
 737                (card->ext_csd.raw_sec_trim_mult ==
 738                        bw_ext_csd[EXT_CSD_SEC_TRIM_MULT]) &&
 739                (card->ext_csd.raw_sec_erase_mult ==
 740                        bw_ext_csd[EXT_CSD_SEC_ERASE_MULT]) &&
 741                (card->ext_csd.raw_sec_feature_support ==
 742                        bw_ext_csd[EXT_CSD_SEC_FEATURE_SUPPORT]) &&
 743                (card->ext_csd.raw_trim_mult ==
 744                        bw_ext_csd[EXT_CSD_TRIM_MULT]) &&
 745                (card->ext_csd.raw_sectors[0] ==
 746                        bw_ext_csd[EXT_CSD_SEC_CNT + 0]) &&
 747                (card->ext_csd.raw_sectors[1] ==
 748                        bw_ext_csd[EXT_CSD_SEC_CNT + 1]) &&
 749                (card->ext_csd.raw_sectors[2] ==
 750                        bw_ext_csd[EXT_CSD_SEC_CNT + 2]) &&
 751                (card->ext_csd.raw_sectors[3] ==
 752                        bw_ext_csd[EXT_CSD_SEC_CNT + 3]) &&
 753                (card->ext_csd.raw_pwr_cl_52_195 ==
 754                        bw_ext_csd[EXT_CSD_PWR_CL_52_195]) &&
 755                (card->ext_csd.raw_pwr_cl_26_195 ==
 756                        bw_ext_csd[EXT_CSD_PWR_CL_26_195]) &&
 757                (card->ext_csd.raw_pwr_cl_52_360 ==
 758                        bw_ext_csd[EXT_CSD_PWR_CL_52_360]) &&
 759                (card->ext_csd.raw_pwr_cl_26_360 ==
 760                        bw_ext_csd[EXT_CSD_PWR_CL_26_360]) &&
 761                (card->ext_csd.raw_pwr_cl_200_195 ==
 762                        bw_ext_csd[EXT_CSD_PWR_CL_200_195]) &&
 763                (card->ext_csd.raw_pwr_cl_200_360 ==
 764                        bw_ext_csd[EXT_CSD_PWR_CL_200_360]) &&
 765                (card->ext_csd.raw_pwr_cl_ddr_52_195 ==
 766                        bw_ext_csd[EXT_CSD_PWR_CL_DDR_52_195]) &&
 767                (card->ext_csd.raw_pwr_cl_ddr_52_360 ==
 768                        bw_ext_csd[EXT_CSD_PWR_CL_DDR_52_360]) &&
 769                (card->ext_csd.raw_pwr_cl_ddr_200_360 ==
 770                        bw_ext_csd[EXT_CSD_PWR_CL_DDR_200_360]));
 771
 772        if (err)
 773                err = -EINVAL;
 774
 775        kfree(bw_ext_csd);
 776        return err;
 777}
 778
 779MMC_DEV_ATTR(cid, "%08x%08x%08x%08x\n", card->raw_cid[0], card->raw_cid[1],
 780        card->raw_cid[2], card->raw_cid[3]);
 781MMC_DEV_ATTR(csd, "%08x%08x%08x%08x\n", card->raw_csd[0], card->raw_csd[1],
 782        card->raw_csd[2], card->raw_csd[3]);
 783MMC_DEV_ATTR(date, "%02d/%04d\n", card->cid.month, card->cid.year);
 784MMC_DEV_ATTR(erase_size, "%u\n", card->erase_size << 9);
 785MMC_DEV_ATTR(preferred_erase_size, "%u\n", card->pref_erase << 9);
 786MMC_DEV_ATTR(ffu_capable, "%d\n", card->ext_csd.ffu_capable);
 787MMC_DEV_ATTR(hwrev, "0x%x\n", card->cid.hwrev);
 788MMC_DEV_ATTR(manfid, "0x%06x\n", card->cid.manfid);
 789MMC_DEV_ATTR(name, "%s\n", card->cid.prod_name);
 790MMC_DEV_ATTR(oemid, "0x%04x\n", card->cid.oemid);
 791MMC_DEV_ATTR(prv, "0x%x\n", card->cid.prv);
 792MMC_DEV_ATTR(rev, "0x%x\n", card->ext_csd.rev);
 793MMC_DEV_ATTR(pre_eol_info, "0x%02x\n", card->ext_csd.pre_eol_info);
 794MMC_DEV_ATTR(life_time, "0x%02x 0x%02x\n",
 795        card->ext_csd.device_life_time_est_typ_a,
 796        card->ext_csd.device_life_time_est_typ_b);
 797MMC_DEV_ATTR(serial, "0x%08x\n", card->cid.serial);
 798MMC_DEV_ATTR(enhanced_area_offset, "%llu\n",
 799                card->ext_csd.enhanced_area_offset);
 800MMC_DEV_ATTR(enhanced_area_size, "%u\n", card->ext_csd.enhanced_area_size);
 801MMC_DEV_ATTR(raw_rpmb_size_mult, "%#x\n", card->ext_csd.raw_rpmb_size_mult);
 802MMC_DEV_ATTR(enhanced_rpmb_supported, "%#x\n",
 803        card->ext_csd.enhanced_rpmb_supported);
 804MMC_DEV_ATTR(rel_sectors, "%#x\n", card->ext_csd.rel_sectors);
 805MMC_DEV_ATTR(ocr, "0x%08x\n", card->ocr);
 806MMC_DEV_ATTR(rca, "0x%04x\n", card->rca);
 807MMC_DEV_ATTR(cmdq_en, "%d\n", card->ext_csd.cmdq_en);
 808
 809static ssize_t mmc_fwrev_show(struct device *dev,
 810                              struct device_attribute *attr,
 811                              char *buf)
 812{
 813        struct mmc_card *card = mmc_dev_to_card(dev);
 814
 815        if (card->ext_csd.rev < 7) {
 816                return sprintf(buf, "0x%x\n", card->cid.fwrev);
 817        } else {
 818                return sprintf(buf, "0x%*phN\n", MMC_FIRMWARE_LEN,
 819                               card->ext_csd.fwrev);
 820        }
 821}
 822
 823static DEVICE_ATTR(fwrev, S_IRUGO, mmc_fwrev_show, NULL);
 824
 825static ssize_t mmc_dsr_show(struct device *dev,
 826                            struct device_attribute *attr,
 827                            char *buf)
 828{
 829        struct mmc_card *card = mmc_dev_to_card(dev);
 830        struct mmc_host *host = card->host;
 831
 832        if (card->csd.dsr_imp && host->dsr_req)
 833                return sprintf(buf, "0x%x\n", host->dsr);
 834        else
 835                /* return default DSR value */
 836                return sprintf(buf, "0x%x\n", 0x404);
 837}
 838
 839static DEVICE_ATTR(dsr, S_IRUGO, mmc_dsr_show, NULL);
 840
 841static struct attribute *mmc_std_attrs[] = {
 842        &dev_attr_cid.attr,
 843        &dev_attr_csd.attr,
 844        &dev_attr_date.attr,
 845        &dev_attr_erase_size.attr,
 846        &dev_attr_preferred_erase_size.attr,
 847        &dev_attr_fwrev.attr,
 848        &dev_attr_ffu_capable.attr,
 849        &dev_attr_hwrev.attr,
 850        &dev_attr_manfid.attr,
 851        &dev_attr_name.attr,
 852        &dev_attr_oemid.attr,
 853        &dev_attr_prv.attr,
 854        &dev_attr_rev.attr,
 855        &dev_attr_pre_eol_info.attr,
 856        &dev_attr_life_time.attr,
 857        &dev_attr_serial.attr,
 858        &dev_attr_enhanced_area_offset.attr,
 859        &dev_attr_enhanced_area_size.attr,
 860        &dev_attr_raw_rpmb_size_mult.attr,
 861        &dev_attr_enhanced_rpmb_supported.attr,
 862        &dev_attr_rel_sectors.attr,
 863        &dev_attr_ocr.attr,
 864        &dev_attr_rca.attr,
 865        &dev_attr_dsr.attr,
 866        &dev_attr_cmdq_en.attr,
 867        NULL,
 868};
 869ATTRIBUTE_GROUPS(mmc_std);
 870
 871static struct device_type mmc_type = {
 872        .groups = mmc_std_groups,
 873};
 874
 875/*
 876 * Select the PowerClass for the current bus width
 877 * If power class is defined for 4/8 bit bus in the
 878 * extended CSD register, select it by executing the
 879 * mmc_switch command.
 880 */
 881static int __mmc_select_powerclass(struct mmc_card *card,
 882                                   unsigned int bus_width)
 883{
 884        struct mmc_host *host = card->host;
 885        struct mmc_ext_csd *ext_csd = &card->ext_csd;
 886        unsigned int pwrclass_val = 0;
 887        int err = 0;
 888
 889        switch (1 << host->ios.vdd) {
 890        case MMC_VDD_165_195:
 891                if (host->ios.clock <= MMC_HIGH_26_MAX_DTR)
 892                        pwrclass_val = ext_csd->raw_pwr_cl_26_195;
 893                else if (host->ios.clock <= MMC_HIGH_52_MAX_DTR)
 894                        pwrclass_val = (bus_width <= EXT_CSD_BUS_WIDTH_8) ?
 895                                ext_csd->raw_pwr_cl_52_195 :
 896                                ext_csd->raw_pwr_cl_ddr_52_195;
 897                else if (host->ios.clock <= MMC_HS200_MAX_DTR)
 898                        pwrclass_val = ext_csd->raw_pwr_cl_200_195;
 899                break;
 900        case MMC_VDD_27_28:
 901        case MMC_VDD_28_29:
 902        case MMC_VDD_29_30:
 903        case MMC_VDD_30_31:
 904        case MMC_VDD_31_32:
 905        case MMC_VDD_32_33:
 906        case MMC_VDD_33_34:
 907        case MMC_VDD_34_35:
 908        case MMC_VDD_35_36:
 909                if (host->ios.clock <= MMC_HIGH_26_MAX_DTR)
 910                        pwrclass_val = ext_csd->raw_pwr_cl_26_360;
 911                else if (host->ios.clock <= MMC_HIGH_52_MAX_DTR)
 912                        pwrclass_val = (bus_width <= EXT_CSD_BUS_WIDTH_8) ?
 913                                ext_csd->raw_pwr_cl_52_360 :
 914                                ext_csd->raw_pwr_cl_ddr_52_360;
 915                else if (host->ios.clock <= MMC_HS200_MAX_DTR)
 916                        pwrclass_val = (bus_width == EXT_CSD_DDR_BUS_WIDTH_8) ?
 917                                ext_csd->raw_pwr_cl_ddr_200_360 :
 918                                ext_csd->raw_pwr_cl_200_360;
 919                break;
 920        default:
 921                pr_warn("%s: Voltage range not supported for power class\n",
 922                        mmc_hostname(host));
 923                return -EINVAL;
 924        }
 925
 926        if (bus_width & (EXT_CSD_BUS_WIDTH_8 | EXT_CSD_DDR_BUS_WIDTH_8))
 927                pwrclass_val = (pwrclass_val & EXT_CSD_PWR_CL_8BIT_MASK) >>
 928                                EXT_CSD_PWR_CL_8BIT_SHIFT;
 929        else
 930                pwrclass_val = (pwrclass_val & EXT_CSD_PWR_CL_4BIT_MASK) >>
 931                                EXT_CSD_PWR_CL_4BIT_SHIFT;
 932
 933        /* If the power class is different from the default value */
 934        if (pwrclass_val > 0) {
 935                err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
 936                                 EXT_CSD_POWER_CLASS,
 937                                 pwrclass_val,
 938                                 card->ext_csd.generic_cmd6_time);
 939        }
 940
 941        return err;
 942}
 943
 944static int mmc_select_powerclass(struct mmc_card *card)
 945{
 946        struct mmc_host *host = card->host;
 947        u32 bus_width, ext_csd_bits;
 948        int err, ddr;
 949
 950        /* Power class selection is supported for versions >= 4.0 */
 951        if (!mmc_can_ext_csd(card))
 952                return 0;
 953
 954        bus_width = host->ios.bus_width;
 955        /* Power class values are defined only for 4/8 bit bus */
 956        if (bus_width == MMC_BUS_WIDTH_1)
 957                return 0;
 958
 959        ddr = card->mmc_avail_type & EXT_CSD_CARD_TYPE_DDR_52;
 960        if (ddr)
 961                ext_csd_bits = (bus_width == MMC_BUS_WIDTH_8) ?
 962                        EXT_CSD_DDR_BUS_WIDTH_8 : EXT_CSD_DDR_BUS_WIDTH_4;
 963        else
 964                ext_csd_bits = (bus_width == MMC_BUS_WIDTH_8) ?
 965                        EXT_CSD_BUS_WIDTH_8 :  EXT_CSD_BUS_WIDTH_4;
 966
 967        err = __mmc_select_powerclass(card, ext_csd_bits);
 968        if (err)
 969                pr_warn("%s: power class selection to bus width %d ddr %d failed\n",
 970                        mmc_hostname(host), 1 << bus_width, ddr);
 971
 972        return err;
 973}
 974
 975/*
 976 * Set the bus speed for the selected speed mode.
 977 */
 978static void mmc_set_bus_speed(struct mmc_card *card)
 979{
 980        unsigned int max_dtr = (unsigned int)-1;
 981
 982        if ((mmc_card_hs200(card) || mmc_card_hs400(card)) &&
 983             max_dtr > card->ext_csd.hs200_max_dtr)
 984                max_dtr = card->ext_csd.hs200_max_dtr;
 985        else if (mmc_card_hs(card) && max_dtr > card->ext_csd.hs_max_dtr)
 986                max_dtr = card->ext_csd.hs_max_dtr;
 987        else if (max_dtr > card->csd.max_dtr)
 988                max_dtr = card->csd.max_dtr;
 989
 990        mmc_set_clock(card->host, max_dtr);
 991}
 992
 993/*
 994 * Select the bus width amoung 4-bit and 8-bit(SDR).
 995 * If the bus width is changed successfully, return the selected width value.
 996 * Zero is returned instead of error value if the wide width is not supported.
 997 */
 998static int mmc_select_bus_width(struct mmc_card *card)
 999{
1000        static unsigned ext_csd_bits[] = {
1001                EXT_CSD_BUS_WIDTH_8,
1002                EXT_CSD_BUS_WIDTH_4,
1003        };
1004        static unsigned bus_widths[] = {
1005                MMC_BUS_WIDTH_8,
1006                MMC_BUS_WIDTH_4,
1007        };
1008        struct mmc_host *host = card->host;
1009        unsigned idx, bus_width = 0;
1010        int err = 0;
1011
1012        if (!mmc_can_ext_csd(card) ||
1013            !(host->caps & (MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA)))
1014                return 0;
1015
1016        idx = (host->caps & MMC_CAP_8_BIT_DATA) ? 0 : 1;
1017
1018        /*
1019         * Unlike SD, MMC cards dont have a configuration register to notify
1020         * supported bus width. So bus test command should be run to identify
1021         * the supported bus width or compare the ext csd values of current
1022         * bus width and ext csd values of 1 bit mode read earlier.
1023         */
1024        for (; idx < ARRAY_SIZE(bus_widths); idx++) {
1025                /*
1026                 * Host is capable of 8bit transfer, then switch
1027                 * the device to work in 8bit transfer mode. If the
1028                 * mmc switch command returns error then switch to
1029                 * 4bit transfer mode. On success set the corresponding
1030                 * bus width on the host.
1031                 */
1032                err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1033                                 EXT_CSD_BUS_WIDTH,
1034                                 ext_csd_bits[idx],
1035                                 card->ext_csd.generic_cmd6_time);
1036                if (err)
1037                        continue;
1038
1039                bus_width = bus_widths[idx];
1040                mmc_set_bus_width(host, bus_width);
1041
1042                /*
1043                 * If controller can't handle bus width test,
1044                 * compare ext_csd previously read in 1 bit mode
1045                 * against ext_csd at new bus width
1046                 */
1047                if (!(host->caps & MMC_CAP_BUS_WIDTH_TEST))
1048                        err = mmc_compare_ext_csds(card, bus_width);
1049                else
1050                        err = mmc_bus_test(card, bus_width);
1051
1052                if (!err) {
1053                        err = bus_width;
1054                        break;
1055                } else {
1056                        pr_warn("%s: switch to bus width %d failed\n",
1057                                mmc_hostname(host), 1 << bus_width);
1058                }
1059        }
1060
1061        return err;
1062}
1063
1064/*
1065 * Switch to the high-speed mode
1066 */
1067static int mmc_select_hs(struct mmc_card *card)
1068{
1069        int err;
1070
1071        err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1072                           EXT_CSD_HS_TIMING, EXT_CSD_TIMING_HS,
1073                           card->ext_csd.generic_cmd6_time, MMC_TIMING_MMC_HS,
1074                           true, true, MMC_CMD_RETRIES);
1075        if (err)
1076                pr_warn("%s: switch to high-speed failed, err:%d\n",
1077                        mmc_hostname(card->host), err);
1078
1079        return err;
1080}
1081
1082/*
1083 * Activate wide bus and DDR if supported.
1084 */
1085static int mmc_select_hs_ddr(struct mmc_card *card)
1086{
1087        struct mmc_host *host = card->host;
1088        u32 bus_width, ext_csd_bits;
1089        int err = 0;
1090
1091        if (!(card->mmc_avail_type & EXT_CSD_CARD_TYPE_DDR_52))
1092                return 0;
1093
1094        bus_width = host->ios.bus_width;
1095        if (bus_width == MMC_BUS_WIDTH_1)
1096                return 0;
1097
1098        ext_csd_bits = (bus_width == MMC_BUS_WIDTH_8) ?
1099                EXT_CSD_DDR_BUS_WIDTH_8 : EXT_CSD_DDR_BUS_WIDTH_4;
1100
1101        err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1102                           EXT_CSD_BUS_WIDTH,
1103                           ext_csd_bits,
1104                           card->ext_csd.generic_cmd6_time,
1105                           MMC_TIMING_MMC_DDR52,
1106                           true, true, MMC_CMD_RETRIES);
1107        if (err) {
1108                pr_err("%s: switch to bus width %d ddr failed\n",
1109                        mmc_hostname(host), 1 << bus_width);
1110                return err;
1111        }
1112
1113        /*
1114         * eMMC cards can support 3.3V to 1.2V i/o (vccq)
1115         * signaling.
1116         *
1117         * EXT_CSD_CARD_TYPE_DDR_1_8V means 3.3V or 1.8V vccq.
1118         *
1119         * 1.8V vccq at 3.3V core voltage (vcc) is not required
1120         * in the JEDEC spec for DDR.
1121         *
1122         * Even (e)MMC card can support 3.3v to 1.2v vccq, but not all
1123         * host controller can support this, like some of the SDHCI
1124         * controller which connect to an eMMC device. Some of these
1125         * host controller still needs to use 1.8v vccq for supporting
1126         * DDR mode.
1127         *
1128         * So the sequence will be:
1129         * if (host and device can both support 1.2v IO)
1130         *      use 1.2v IO;
1131         * else if (host and device can both support 1.8v IO)
1132         *      use 1.8v IO;
1133         * so if host and device can only support 3.3v IO, this is the
1134         * last choice.
1135         *
1136         * WARNING: eMMC rules are NOT the same as SD DDR
1137         */
1138        if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_DDR_1_2V) {
1139                err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_120);
1140                if (!err)
1141                        return 0;
1142        }
1143
1144        if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_DDR_1_8V &&
1145            host->caps & MMC_CAP_1_8V_DDR)
1146                err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180);
1147
1148        /* make sure vccq is 3.3v after switching disaster */
1149        if (err)
1150                err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330);
1151
1152        return err;
1153}
1154
1155static int mmc_select_hs400(struct mmc_card *card)
1156{
1157        struct mmc_host *host = card->host;
1158        unsigned int max_dtr;
1159        int err = 0;
1160        u8 val;
1161
1162        /*
1163         * HS400 mode requires 8-bit bus width
1164         */
1165        if (!(card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS400 &&
1166              host->ios.bus_width == MMC_BUS_WIDTH_8))
1167                return 0;
1168
1169        /* Switch card to HS mode */
1170        val = EXT_CSD_TIMING_HS;
1171        err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1172                           EXT_CSD_HS_TIMING, val,
1173                           card->ext_csd.generic_cmd6_time, 0,
1174                           false, true, MMC_CMD_RETRIES);
1175        if (err) {
1176                pr_err("%s: switch to high-speed from hs200 failed, err:%d\n",
1177                        mmc_hostname(host), err);
1178                return err;
1179        }
1180
1181        /* Prepare host to downgrade to HS timing */
1182        if (host->ops->hs400_downgrade)
1183                host->ops->hs400_downgrade(host);
1184
1185        /* Set host controller to HS timing */
1186        mmc_set_timing(host, MMC_TIMING_MMC_HS);
1187
1188        /* Reduce frequency to HS frequency */
1189        max_dtr = card->ext_csd.hs_max_dtr;
1190        mmc_set_clock(host, max_dtr);
1191
1192        err = mmc_switch_status(card, true);
1193        if (err)
1194                goto out_err;
1195
1196        if (host->ops->hs400_prepare_ddr)
1197                host->ops->hs400_prepare_ddr(host);
1198
1199        /* Switch card to DDR */
1200        err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1201                         EXT_CSD_BUS_WIDTH,
1202                         EXT_CSD_DDR_BUS_WIDTH_8,
1203                         card->ext_csd.generic_cmd6_time);
1204        if (err) {
1205                pr_err("%s: switch to bus width for hs400 failed, err:%d\n",
1206                        mmc_hostname(host), err);
1207                return err;
1208        }
1209
1210        /* Switch card to HS400 */
1211        val = EXT_CSD_TIMING_HS400 |
1212              card->drive_strength << EXT_CSD_DRV_STR_SHIFT;
1213        err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1214                           EXT_CSD_HS_TIMING, val,
1215                           card->ext_csd.generic_cmd6_time, 0,
1216                           false, true, MMC_CMD_RETRIES);
1217        if (err) {
1218                pr_err("%s: switch to hs400 failed, err:%d\n",
1219                         mmc_hostname(host), err);
1220                return err;
1221        }
1222
1223        /* Set host controller to HS400 timing and frequency */
1224        mmc_set_timing(host, MMC_TIMING_MMC_HS400);
1225        mmc_set_bus_speed(card);
1226
1227        if (host->ops->hs400_complete)
1228                host->ops->hs400_complete(host);
1229
1230        err = mmc_switch_status(card, true);
1231        if (err)
1232                goto out_err;
1233
1234        return 0;
1235
1236out_err:
1237        pr_err("%s: %s failed, error %d\n", mmc_hostname(card->host),
1238               __func__, err);
1239        return err;
1240}
1241
1242int mmc_hs200_to_hs400(struct mmc_card *card)
1243{
1244        return mmc_select_hs400(card);
1245}
1246
1247int mmc_hs400_to_hs200(struct mmc_card *card)
1248{
1249        struct mmc_host *host = card->host;
1250        unsigned int max_dtr;
1251        int err;
1252        u8 val;
1253
1254        /* Reduce frequency to HS */
1255        max_dtr = card->ext_csd.hs_max_dtr;
1256        mmc_set_clock(host, max_dtr);
1257
1258        /* Switch HS400 to HS DDR */
1259        val = EXT_CSD_TIMING_HS;
1260        err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING,
1261                           val, card->ext_csd.generic_cmd6_time, 0,
1262                           false, true, MMC_CMD_RETRIES);
1263        if (err)
1264                goto out_err;
1265
1266        if (host->ops->hs400_downgrade)
1267                host->ops->hs400_downgrade(host);
1268
1269        mmc_set_timing(host, MMC_TIMING_MMC_DDR52);
1270
1271        err = mmc_switch_status(card, true);
1272        if (err)
1273                goto out_err;
1274
1275        /* Switch HS DDR to HS */
1276        err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BUS_WIDTH,
1277                           EXT_CSD_BUS_WIDTH_8, card->ext_csd.generic_cmd6_time,
1278                           0, false, true, MMC_CMD_RETRIES);
1279        if (err)
1280                goto out_err;
1281
1282        mmc_set_timing(host, MMC_TIMING_MMC_HS);
1283
1284        err = mmc_switch_status(card, true);
1285        if (err)
1286                goto out_err;
1287
1288        /* Switch HS to HS200 */
1289        val = EXT_CSD_TIMING_HS200 |
1290              card->drive_strength << EXT_CSD_DRV_STR_SHIFT;
1291        err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING,
1292                           val, card->ext_csd.generic_cmd6_time, 0,
1293                           false, true, MMC_CMD_RETRIES);
1294        if (err)
1295                goto out_err;
1296
1297        mmc_set_timing(host, MMC_TIMING_MMC_HS200);
1298
1299        /*
1300         * For HS200, CRC errors are not a reliable way to know the switch
1301         * failed. If there really is a problem, we would expect tuning will
1302         * fail and the result ends up the same.
1303         */
1304        err = mmc_switch_status(card, false);
1305        if (err)
1306                goto out_err;
1307
1308        mmc_set_bus_speed(card);
1309
1310        /* Prepare tuning for HS400 mode. */
1311        if (host->ops->prepare_hs400_tuning)
1312                host->ops->prepare_hs400_tuning(host, &host->ios);
1313
1314        return 0;
1315
1316out_err:
1317        pr_err("%s: %s failed, error %d\n", mmc_hostname(card->host),
1318               __func__, err);
1319        return err;
1320}
1321
1322static void mmc_select_driver_type(struct mmc_card *card)
1323{
1324        int card_drv_type, drive_strength, drv_type = 0;
1325        int fixed_drv_type = card->host->fixed_drv_type;
1326
1327        card_drv_type = card->ext_csd.raw_driver_strength |
1328                        mmc_driver_type_mask(0);
1329
1330        if (fixed_drv_type >= 0)
1331                drive_strength = card_drv_type & mmc_driver_type_mask(fixed_drv_type)
1332                                 ? fixed_drv_type : 0;
1333        else
1334                drive_strength = mmc_select_drive_strength(card,
1335                                                           card->ext_csd.hs200_max_dtr,
1336                                                           card_drv_type, &drv_type);
1337
1338        card->drive_strength = drive_strength;
1339
1340        if (drv_type)
1341                mmc_set_driver_type(card->host, drv_type);
1342}
1343
1344static int mmc_select_hs400es(struct mmc_card *card)
1345{
1346        struct mmc_host *host = card->host;
1347        int err = -EINVAL;
1348        u8 val;
1349
1350        if (!(host->caps & MMC_CAP_8_BIT_DATA)) {
1351                err = -ENOTSUPP;
1352                goto out_err;
1353        }
1354
1355        if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS400_1_2V)
1356                err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_120);
1357
1358        if (err && card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS400_1_8V)
1359                err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180);
1360
1361        /* If fails try again during next card power cycle */
1362        if (err)
1363                goto out_err;
1364
1365        err = mmc_select_bus_width(card);
1366        if (err != MMC_BUS_WIDTH_8) {
1367                pr_err("%s: switch to 8bit bus width failed, err:%d\n",
1368                        mmc_hostname(host), err);
1369                err = err < 0 ? err : -ENOTSUPP;
1370                goto out_err;
1371        }
1372
1373        /* Switch card to HS mode */
1374        err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1375                           EXT_CSD_HS_TIMING, EXT_CSD_TIMING_HS,
1376                           card->ext_csd.generic_cmd6_time, 0,
1377                           false, true, MMC_CMD_RETRIES);
1378        if (err) {
1379                pr_err("%s: switch to hs for hs400es failed, err:%d\n",
1380                        mmc_hostname(host), err);
1381                goto out_err;
1382        }
1383
1384        mmc_set_timing(host, MMC_TIMING_MMC_HS);
1385        err = mmc_switch_status(card, true);
1386        if (err)
1387                goto out_err;
1388
1389        mmc_set_clock(host, card->ext_csd.hs_max_dtr);
1390
1391        /* Switch card to DDR with strobe bit */
1392        val = EXT_CSD_DDR_BUS_WIDTH_8 | EXT_CSD_BUS_WIDTH_STROBE;
1393        err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1394                         EXT_CSD_BUS_WIDTH,
1395                         val,
1396                         card->ext_csd.generic_cmd6_time);
1397        if (err) {
1398                pr_err("%s: switch to bus width for hs400es failed, err:%d\n",
1399                        mmc_hostname(host), err);
1400                goto out_err;
1401        }
1402
1403        mmc_select_driver_type(card);
1404
1405        /* Switch card to HS400 */
1406        val = EXT_CSD_TIMING_HS400 |
1407              card->drive_strength << EXT_CSD_DRV_STR_SHIFT;
1408        err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1409                           EXT_CSD_HS_TIMING, val,
1410                           card->ext_csd.generic_cmd6_time, 0,
1411                           false, true, MMC_CMD_RETRIES);
1412        if (err) {
1413                pr_err("%s: switch to hs400es failed, err:%d\n",
1414                        mmc_hostname(host), err);
1415                goto out_err;
1416        }
1417
1418        /* Set host controller to HS400 timing and frequency */
1419        mmc_set_timing(host, MMC_TIMING_MMC_HS400);
1420
1421        /* Controller enable enhanced strobe function */
1422        host->ios.enhanced_strobe = true;
1423        if (host->ops->hs400_enhanced_strobe)
1424                host->ops->hs400_enhanced_strobe(host, &host->ios);
1425
1426        err = mmc_switch_status(card, true);
1427        if (err)
1428                goto out_err;
1429
1430        return 0;
1431
1432out_err:
1433        pr_err("%s: %s failed, error %d\n", mmc_hostname(card->host),
1434               __func__, err);
1435        return err;
1436}
1437
1438/*
1439 * For device supporting HS200 mode, the following sequence
1440 * should be done before executing the tuning process.
1441 * 1. set the desired bus width(4-bit or 8-bit, 1-bit is not supported)
1442 * 2. switch to HS200 mode
1443 * 3. set the clock to > 52Mhz and <=200MHz
1444 */
1445static int mmc_select_hs200(struct mmc_card *card)
1446{
1447        struct mmc_host *host = card->host;
1448        unsigned int old_timing, old_signal_voltage;
1449        int err = -EINVAL;
1450        u8 val;
1451
1452        old_signal_voltage = host->ios.signal_voltage;
1453        if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS200_1_2V)
1454                err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_120);
1455
1456        if (err && card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS200_1_8V)
1457                err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180);
1458
1459        /* If fails try again during next card power cycle */
1460        if (err)
1461                return err;
1462
1463        mmc_select_driver_type(card);
1464
1465        /*
1466         * Set the bus width(4 or 8) with host's support and
1467         * switch to HS200 mode if bus width is set successfully.
1468         */
1469        err = mmc_select_bus_width(card);
1470        if (err > 0) {
1471                val = EXT_CSD_TIMING_HS200 |
1472                      card->drive_strength << EXT_CSD_DRV_STR_SHIFT;
1473                err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1474                                   EXT_CSD_HS_TIMING, val,
1475                                   card->ext_csd.generic_cmd6_time, 0,
1476                                   false, true, MMC_CMD_RETRIES);
1477                if (err)
1478                        goto err;
1479                old_timing = host->ios.timing;
1480                mmc_set_timing(host, MMC_TIMING_MMC_HS200);
1481
1482                /*
1483                 * For HS200, CRC errors are not a reliable way to know the
1484                 * switch failed. If there really is a problem, we would expect
1485                 * tuning will fail and the result ends up the same.
1486                 */
1487                err = mmc_switch_status(card, false);
1488
1489                /*
1490                 * mmc_select_timing() assumes timing has not changed if
1491                 * it is a switch error.
1492                 */
1493                if (err == -EBADMSG)
1494                        mmc_set_timing(host, old_timing);
1495        }
1496err:
1497        if (err) {
1498                /* fall back to the old signal voltage, if fails report error */
1499                if (mmc_set_signal_voltage(host, old_signal_voltage))
1500                        err = -EIO;
1501
1502                pr_err("%s: %s failed, error %d\n", mmc_hostname(card->host),
1503                       __func__, err);
1504        }
1505        return err;
1506}
1507
1508/*
1509 * Activate High Speed, HS200 or HS400ES mode if supported.
1510 */
1511static int mmc_select_timing(struct mmc_card *card)
1512{
1513        int err = 0;
1514
1515        if (!mmc_can_ext_csd(card))
1516                goto bus_speed;
1517
1518        if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS400ES)
1519                err = mmc_select_hs400es(card);
1520        else if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS200)
1521                err = mmc_select_hs200(card);
1522        else if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS)
1523                err = mmc_select_hs(card);
1524
1525        if (err && err != -EBADMSG)
1526                return err;
1527
1528bus_speed:
1529        /*
1530         * Set the bus speed to the selected bus timing.
1531         * If timing is not selected, backward compatible is the default.
1532         */
1533        mmc_set_bus_speed(card);
1534        return 0;
1535}
1536
1537/*
1538 * Execute tuning sequence to seek the proper bus operating
1539 * conditions for HS200 and HS400, which sends CMD21 to the device.
1540 */
1541static int mmc_hs200_tuning(struct mmc_card *card)
1542{
1543        struct mmc_host *host = card->host;
1544
1545        /*
1546         * Timing should be adjusted to the HS400 target
1547         * operation frequency for tuning process
1548         */
1549        if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS400 &&
1550            host->ios.bus_width == MMC_BUS_WIDTH_8)
1551                if (host->ops->prepare_hs400_tuning)
1552                        host->ops->prepare_hs400_tuning(host, &host->ios);
1553
1554        return mmc_execute_tuning(card);
1555}
1556
1557/*
1558 * Handle the detection and initialisation of a card.
1559 *
1560 * In the case of a resume, "oldcard" will contain the card
1561 * we're trying to reinitialise.
1562 */
1563static int mmc_init_card(struct mmc_host *host, u32 ocr,
1564        struct mmc_card *oldcard)
1565{
1566        struct mmc_card *card;
1567        int err;
1568        u32 cid[4];
1569        u32 rocr;
1570
1571        WARN_ON(!host->claimed);
1572
1573        /* Set correct bus mode for MMC before attempting init */
1574        if (!mmc_host_is_spi(host))
1575                mmc_set_bus_mode(host, MMC_BUSMODE_OPENDRAIN);
1576
1577        /*
1578         * Since we're changing the OCR value, we seem to
1579         * need to tell some cards to go back to the idle
1580         * state.  We wait 1ms to give cards time to
1581         * respond.
1582         * mmc_go_idle is needed for eMMC that are asleep
1583         */
1584        mmc_go_idle(host);
1585
1586        /* The extra bit indicates that we support high capacity */
1587        err = mmc_send_op_cond(host, ocr | (1 << 30), &rocr);
1588        if (err)
1589                goto err;
1590
1591        /*
1592         * For SPI, enable CRC as appropriate.
1593         */
1594        if (mmc_host_is_spi(host)) {
1595                err = mmc_spi_set_crc(host, use_spi_crc);
1596                if (err)
1597                        goto err;
1598        }
1599
1600        /*
1601         * Fetch CID from card.
1602         */
1603        err = mmc_send_cid(host, cid);
1604        if (err)
1605                goto err;
1606
1607        if (oldcard) {
1608                if (memcmp(cid, oldcard->raw_cid, sizeof(cid)) != 0) {
1609                        pr_debug("%s: Perhaps the card was replaced\n",
1610                                mmc_hostname(host));
1611                        err = -ENOENT;
1612                        goto err;
1613                }
1614
1615                card = oldcard;
1616        } else {
1617                /*
1618                 * Allocate card structure.
1619                 */
1620                card = mmc_alloc_card(host, &mmc_type);
1621                if (IS_ERR(card)) {
1622                        err = PTR_ERR(card);
1623                        goto err;
1624                }
1625
1626                card->ocr = ocr;
1627                card->type = MMC_TYPE_MMC;
1628                card->rca = 1;
1629                memcpy(card->raw_cid, cid, sizeof(card->raw_cid));
1630        }
1631
1632        /*
1633         * Call the optional HC's init_card function to handle quirks.
1634         */
1635        if (host->ops->init_card)
1636                host->ops->init_card(host, card);
1637
1638        /*
1639         * For native busses:  set card RCA and quit open drain mode.
1640         */
1641        if (!mmc_host_is_spi(host)) {
1642                err = mmc_set_relative_addr(card);
1643                if (err)
1644                        goto free_card;
1645
1646                mmc_set_bus_mode(host, MMC_BUSMODE_PUSHPULL);
1647        }
1648
1649        if (!oldcard) {
1650                /*
1651                 * Fetch CSD from card.
1652                 */
1653                err = mmc_send_csd(card, card->raw_csd);
1654                if (err)
1655                        goto free_card;
1656
1657                err = mmc_decode_csd(card);
1658                if (err)
1659                        goto free_card;
1660                err = mmc_decode_cid(card);
1661                if (err)
1662                        goto free_card;
1663        }
1664
1665        /*
1666         * handling only for cards supporting DSR and hosts requesting
1667         * DSR configuration
1668         */
1669        if (card->csd.dsr_imp && host->dsr_req)
1670                mmc_set_dsr(host);
1671
1672        /*
1673         * Select card, as all following commands rely on that.
1674         */
1675        if (!mmc_host_is_spi(host)) {
1676                err = mmc_select_card(card);
1677                if (err)
1678                        goto free_card;
1679        }
1680
1681        if (!oldcard) {
1682                /* Read extended CSD. */
1683                err = mmc_read_ext_csd(card);
1684                if (err)
1685                        goto free_card;
1686
1687                /*
1688                 * If doing byte addressing, check if required to do sector
1689                 * addressing.  Handle the case of <2GB cards needing sector
1690                 * addressing.  See section 8.1 JEDEC Standard JED84-A441;
1691                 * ocr register has bit 30 set for sector addressing.
1692                 */
1693                if (rocr & BIT(30))
1694                        mmc_card_set_blockaddr(card);
1695
1696                /* Erase size depends on CSD and Extended CSD */
1697                mmc_set_erase_size(card);
1698        }
1699
1700        /* Enable ERASE_GRP_DEF. This bit is lost after a reset or power off. */
1701        if (card->ext_csd.rev >= 3) {
1702                err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1703                                 EXT_CSD_ERASE_GROUP_DEF, 1,
1704                                 card->ext_csd.generic_cmd6_time);
1705
1706                if (err && err != -EBADMSG)
1707                        goto free_card;
1708
1709                if (err) {
1710                        /*
1711                         * Just disable enhanced area off & sz
1712                         * will try to enable ERASE_GROUP_DEF
1713                         * during next time reinit
1714                         */
1715                        card->ext_csd.enhanced_area_offset = -EINVAL;
1716                        card->ext_csd.enhanced_area_size = -EINVAL;
1717                } else {
1718                        card->ext_csd.erase_group_def = 1;
1719                        /*
1720                         * enable ERASE_GRP_DEF successfully.
1721                         * This will affect the erase size, so
1722                         * here need to reset erase size
1723                         */
1724                        mmc_set_erase_size(card);
1725                }
1726        }
1727
1728        /*
1729         * Ensure eMMC user default partition is enabled
1730         */
1731        if (card->ext_csd.part_config & EXT_CSD_PART_CONFIG_ACC_MASK) {
1732                card->ext_csd.part_config &= ~EXT_CSD_PART_CONFIG_ACC_MASK;
1733                err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONFIG,
1734                                 card->ext_csd.part_config,
1735                                 card->ext_csd.part_time);
1736                if (err && err != -EBADMSG)
1737                        goto free_card;
1738        }
1739
1740        /*
1741         * Enable power_off_notification byte in the ext_csd register
1742         */
1743        if (card->ext_csd.rev >= 6) {
1744                err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1745                                 EXT_CSD_POWER_OFF_NOTIFICATION,
1746                                 EXT_CSD_POWER_ON,
1747                                 card->ext_csd.generic_cmd6_time);
1748                if (err && err != -EBADMSG)
1749                        goto free_card;
1750
1751                /*
1752                 * The err can be -EBADMSG or 0,
1753                 * so check for success and update the flag
1754                 */
1755                if (!err)
1756                        card->ext_csd.power_off_notification = EXT_CSD_POWER_ON;
1757        }
1758
1759        /* set erase_arg */
1760        if (mmc_can_discard(card))
1761                card->erase_arg = MMC_DISCARD_ARG;
1762        else if (mmc_can_trim(card))
1763                card->erase_arg = MMC_TRIM_ARG;
1764        else
1765                card->erase_arg = MMC_ERASE_ARG;
1766
1767        /*
1768         * Select timing interface
1769         */
1770        err = mmc_select_timing(card);
1771        if (err)
1772                goto free_card;
1773
1774        if (mmc_card_hs200(card)) {
1775                host->doing_init_tune = 1;
1776
1777                err = mmc_hs200_tuning(card);
1778                if (!err)
1779                        err = mmc_select_hs400(card);
1780
1781                host->doing_init_tune = 0;
1782
1783                if (err)
1784                        goto free_card;
1785
1786        } else if (!mmc_card_hs400es(card)) {
1787                /* Select the desired bus width optionally */
1788                err = mmc_select_bus_width(card);
1789                if (err > 0 && mmc_card_hs(card)) {
1790                        err = mmc_select_hs_ddr(card);
1791                        if (err)
1792                                goto free_card;
1793                }
1794        }
1795
1796        /*
1797         * Choose the power class with selected bus interface
1798         */
1799        mmc_select_powerclass(card);
1800
1801        /*
1802         * Enable HPI feature (if supported)
1803         */
1804        if (card->ext_csd.hpi) {
1805                err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1806                                EXT_CSD_HPI_MGMT, 1,
1807                                card->ext_csd.generic_cmd6_time);
1808                if (err && err != -EBADMSG)
1809                        goto free_card;
1810                if (err) {
1811                        pr_warn("%s: Enabling HPI failed\n",
1812                                mmc_hostname(card->host));
1813                        card->ext_csd.hpi_en = 0;
1814                } else {
1815                        card->ext_csd.hpi_en = 1;
1816                }
1817        }
1818
1819        /*
1820         * If cache size is higher than 0, this indicates the existence of cache
1821         * and it can be turned on. Note that some eMMCs from Micron has been
1822         * reported to need ~800 ms timeout, while enabling the cache after
1823         * sudden power failure tests. Let's extend the timeout to a minimum of
1824         * DEFAULT_CACHE_EN_TIMEOUT_MS and do it for all cards.
1825         */
1826        if (card->ext_csd.cache_size > 0) {
1827                unsigned int timeout_ms = MIN_CACHE_EN_TIMEOUT_MS;
1828
1829                timeout_ms = max(card->ext_csd.generic_cmd6_time, timeout_ms);
1830                err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1831                                EXT_CSD_CACHE_CTRL, 1, timeout_ms);
1832                if (err && err != -EBADMSG)
1833                        goto free_card;
1834
1835                /*
1836                 * Only if no error, cache is turned on successfully.
1837                 */
1838                if (err) {
1839                        pr_warn("%s: Cache is supported, but failed to turn on (%d)\n",
1840                                mmc_hostname(card->host), err);
1841                        card->ext_csd.cache_ctrl = 0;
1842                } else {
1843                        card->ext_csd.cache_ctrl = 1;
1844                }
1845        }
1846
1847        /*
1848         * Enable Command Queue if supported. Note that Packed Commands cannot
1849         * be used with Command Queue.
1850         */
1851        card->ext_csd.cmdq_en = false;
1852        if (card->ext_csd.cmdq_support && host->caps2 & MMC_CAP2_CQE) {
1853                err = mmc_cmdq_enable(card);
1854                if (err && err != -EBADMSG)
1855                        goto free_card;
1856                if (err) {
1857                        pr_warn("%s: Enabling CMDQ failed\n",
1858                                mmc_hostname(card->host));
1859                        card->ext_csd.cmdq_support = false;
1860                        card->ext_csd.cmdq_depth = 0;
1861                }
1862        }
1863        /*
1864         * In some cases (e.g. RPMB or mmc_test), the Command Queue must be
1865         * disabled for a time, so a flag is needed to indicate to re-enable the
1866         * Command Queue.
1867         */
1868        card->reenable_cmdq = card->ext_csd.cmdq_en;
1869
1870        if (host->cqe_ops && !host->cqe_enabled) {
1871                err = host->cqe_ops->cqe_enable(host, card);
1872                if (!err) {
1873                        host->cqe_enabled = true;
1874
1875                        if (card->ext_csd.cmdq_en) {
1876                                pr_info("%s: Command Queue Engine enabled\n",
1877                                        mmc_hostname(host));
1878                        } else {
1879                                host->hsq_enabled = true;
1880                                pr_info("%s: Host Software Queue enabled\n",
1881                                        mmc_hostname(host));
1882                        }
1883                }
1884        }
1885
1886        if (host->caps2 & MMC_CAP2_AVOID_3_3V &&
1887            host->ios.signal_voltage == MMC_SIGNAL_VOLTAGE_330) {
1888                pr_err("%s: Host failed to negotiate down from 3.3V\n",
1889                        mmc_hostname(host));
1890                err = -EINVAL;
1891                goto free_card;
1892        }
1893
1894        if (!oldcard)
1895                host->card = card;
1896
1897        return 0;
1898
1899free_card:
1900        if (!oldcard)
1901                mmc_remove_card(card);
1902err:
1903        return err;
1904}
1905
1906static int mmc_can_sleep(struct mmc_card *card)
1907{
1908        return card->ext_csd.rev >= 3;
1909}
1910
1911static int mmc_sleep_busy_cb(void *cb_data, bool *busy)
1912{
1913        struct mmc_host *host = cb_data;
1914
1915        *busy = host->ops->card_busy(host);
1916        return 0;
1917}
1918
1919static int mmc_sleep(struct mmc_host *host)
1920{
1921        struct mmc_command cmd = {};
1922        struct mmc_card *card = host->card;
1923        unsigned int timeout_ms = DIV_ROUND_UP(card->ext_csd.sa_timeout, 10000);
1924        bool use_r1b_resp;
1925        int err;
1926
1927        /* Re-tuning can't be done once the card is deselected */
1928        mmc_retune_hold(host);
1929
1930        err = mmc_deselect_cards(host);
1931        if (err)
1932                goto out_release;
1933
1934        cmd.opcode = MMC_SLEEP_AWAKE;
1935        cmd.arg = card->rca << 16;
1936        cmd.arg |= 1 << 15;
1937        use_r1b_resp = mmc_prepare_busy_cmd(host, &cmd, timeout_ms);
1938
1939        err = mmc_wait_for_cmd(host, &cmd, 0);
1940        if (err)
1941                goto out_release;
1942
1943        /*
1944         * If the host does not wait while the card signals busy, then we can
1945         * try to poll, but only if the host supports HW polling, as the
1946         * SEND_STATUS cmd is not allowed. If we can't poll, then we simply need
1947         * to wait the sleep/awake timeout.
1948         */
1949        if (host->caps & MMC_CAP_WAIT_WHILE_BUSY && use_r1b_resp)
1950                goto out_release;
1951
1952        if (!host->ops->card_busy) {
1953                mmc_delay(timeout_ms);
1954                goto out_release;
1955        }
1956
1957        err = __mmc_poll_for_busy(card, timeout_ms, &mmc_sleep_busy_cb, host);
1958
1959out_release:
1960        mmc_retune_release(host);
1961        return err;
1962}
1963
1964static int mmc_can_poweroff_notify(const struct mmc_card *card)
1965{
1966        return card &&
1967                mmc_card_mmc(card) &&
1968                (card->ext_csd.power_off_notification == EXT_CSD_POWER_ON);
1969}
1970
1971static int mmc_poweroff_notify(struct mmc_card *card, unsigned int notify_type)
1972{
1973        unsigned int timeout = card->ext_csd.generic_cmd6_time;
1974        int err;
1975
1976        /* Use EXT_CSD_POWER_OFF_SHORT as default notification type. */
1977        if (notify_type == EXT_CSD_POWER_OFF_LONG)
1978                timeout = card->ext_csd.power_off_longtime;
1979
1980        err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1981                        EXT_CSD_POWER_OFF_NOTIFICATION,
1982                        notify_type, timeout, 0, false, false, MMC_CMD_RETRIES);
1983        if (err)
1984                pr_err("%s: Power Off Notification timed out, %u\n",
1985                       mmc_hostname(card->host), timeout);
1986
1987        /* Disable the power off notification after the switch operation. */
1988        card->ext_csd.power_off_notification = EXT_CSD_NO_POWER_NOTIFICATION;
1989
1990        return err;
1991}
1992
1993/*
1994 * Host is being removed. Free up the current card.
1995 */
1996static void mmc_remove(struct mmc_host *host)
1997{
1998        mmc_remove_card(host->card);
1999        host->card = NULL;
2000}
2001
2002/*
2003 * Card detection - card is alive.
2004 */
2005static int mmc_alive(struct mmc_host *host)
2006{
2007        return mmc_send_status(host->card, NULL);
2008}
2009
2010/*
2011 * Card detection callback from host.
2012 */
2013static void mmc_detect(struct mmc_host *host)
2014{
2015        int err;
2016
2017        mmc_get_card(host->card, NULL);
2018
2019        /*
2020         * Just check if our card has been removed.
2021         */
2022        err = _mmc_detect_card_removed(host);
2023
2024        mmc_put_card(host->card, NULL);
2025
2026        if (err) {
2027                mmc_remove(host);
2028
2029                mmc_claim_host(host);
2030                mmc_detach_bus(host);
2031                mmc_power_off(host);
2032                mmc_release_host(host);
2033        }
2034}
2035
2036static bool _mmc_cache_enabled(struct mmc_host *host)
2037{
2038        return host->card->ext_csd.cache_size > 0 &&
2039               host->card->ext_csd.cache_ctrl & 1;
2040}
2041
2042/*
2043 * Flush the internal cache of the eMMC to non-volatile storage.
2044 */
2045static int _mmc_flush_cache(struct mmc_host *host)
2046{
2047        int err = 0;
2048
2049        if (_mmc_cache_enabled(host)) {
2050                err = mmc_switch(host->card, EXT_CSD_CMD_SET_NORMAL,
2051                                 EXT_CSD_FLUSH_CACHE, 1,
2052                                 CACHE_FLUSH_TIMEOUT_MS);
2053                if (err)
2054                        pr_err("%s: cache flush error %d\n",
2055                               mmc_hostname(host), err);
2056        }
2057
2058        return err;
2059}
2060
2061static int _mmc_suspend(struct mmc_host *host, bool is_suspend)
2062{
2063        int err = 0;
2064        unsigned int notify_type = is_suspend ? EXT_CSD_POWER_OFF_SHORT :
2065                                        EXT_CSD_POWER_OFF_LONG;
2066
2067        mmc_claim_host(host);
2068
2069        if (mmc_card_suspended(host->card))
2070                goto out;
2071
2072        err = _mmc_flush_cache(host);
2073        if (err)
2074                goto out;
2075
2076        if (mmc_can_poweroff_notify(host->card) &&
2077            ((host->caps2 & MMC_CAP2_FULL_PWR_CYCLE) || !is_suspend ||
2078             (host->caps2 & MMC_CAP2_FULL_PWR_CYCLE_IN_SUSPEND)))
2079                err = mmc_poweroff_notify(host->card, notify_type);
2080        else if (mmc_can_sleep(host->card))
2081                err = mmc_sleep(host);
2082        else if (!mmc_host_is_spi(host))
2083                err = mmc_deselect_cards(host);
2084
2085        if (!err) {
2086                mmc_power_off(host);
2087                mmc_card_set_suspended(host->card);
2088        }
2089out:
2090        mmc_release_host(host);
2091        return err;
2092}
2093
2094/*
2095 * Suspend callback
2096 */
2097static int mmc_suspend(struct mmc_host *host)
2098{
2099        int err;
2100
2101        err = _mmc_suspend(host, true);
2102        if (!err) {
2103                pm_runtime_disable(&host->card->dev);
2104                pm_runtime_set_suspended(&host->card->dev);
2105        }
2106
2107        return err;
2108}
2109
2110/*
2111 * This function tries to determine if the same card is still present
2112 * and, if so, restore all state to it.
2113 */
2114static int _mmc_resume(struct mmc_host *host)
2115{
2116        int err = 0;
2117
2118        mmc_claim_host(host);
2119
2120        if (!mmc_card_suspended(host->card))
2121                goto out;
2122
2123        mmc_power_up(host, host->card->ocr);
2124        err = mmc_init_card(host, host->card->ocr, host->card);
2125        mmc_card_clr_suspended(host->card);
2126
2127out:
2128        mmc_release_host(host);
2129        return err;
2130}
2131
2132/*
2133 * Shutdown callback
2134 */
2135static int mmc_shutdown(struct mmc_host *host)
2136{
2137        int err = 0;
2138
2139        /*
2140         * In a specific case for poweroff notify, we need to resume the card
2141         * before we can shutdown it properly.
2142         */
2143        if (mmc_can_poweroff_notify(host->card) &&
2144                !(host->caps2 & MMC_CAP2_FULL_PWR_CYCLE))
2145                err = _mmc_resume(host);
2146
2147        if (!err)
2148                err = _mmc_suspend(host, false);
2149
2150        return err;
2151}
2152
2153/*
2154 * Callback for resume.
2155 */
2156static int mmc_resume(struct mmc_host *host)
2157{
2158        pm_runtime_enable(&host->card->dev);
2159        return 0;
2160}
2161
2162/*
2163 * Callback for runtime_suspend.
2164 */
2165static int mmc_runtime_suspend(struct mmc_host *host)
2166{
2167        int err;
2168
2169        if (!(host->caps & MMC_CAP_AGGRESSIVE_PM))
2170                return 0;
2171
2172        err = _mmc_suspend(host, true);
2173        if (err)
2174                pr_err("%s: error %d doing aggressive suspend\n",
2175                        mmc_hostname(host), err);
2176
2177        return err;
2178}
2179
2180/*
2181 * Callback for runtime_resume.
2182 */
2183static int mmc_runtime_resume(struct mmc_host *host)
2184{
2185        int err;
2186
2187        err = _mmc_resume(host);
2188        if (err && err != -ENOMEDIUM)
2189                pr_err("%s: error %d doing runtime resume\n",
2190                        mmc_hostname(host), err);
2191
2192        return 0;
2193}
2194
2195static int mmc_can_reset(struct mmc_card *card)
2196{
2197        u8 rst_n_function;
2198
2199        rst_n_function = card->ext_csd.rst_n_function;
2200        if ((rst_n_function & EXT_CSD_RST_N_EN_MASK) != EXT_CSD_RST_N_ENABLED)
2201                return 0;
2202        return 1;
2203}
2204
2205static int _mmc_hw_reset(struct mmc_host *host)
2206{
2207        struct mmc_card *card = host->card;
2208
2209        /*
2210         * In the case of recovery, we can't expect flushing the cache to work
2211         * always, but we have a go and ignore errors.
2212         */
2213        _mmc_flush_cache(host);
2214
2215        if ((host->caps & MMC_CAP_HW_RESET) && host->ops->hw_reset &&
2216             mmc_can_reset(card)) {
2217                /* If the card accept RST_n signal, send it. */
2218                mmc_set_clock(host, host->f_init);
2219                host->ops->hw_reset(host);
2220                /* Set initial state and call mmc_set_ios */
2221                mmc_set_initial_state(host);
2222        } else {
2223                /* Do a brute force power cycle */
2224                mmc_power_cycle(host, card->ocr);
2225                mmc_pwrseq_reset(host);
2226        }
2227        return mmc_init_card(host, card->ocr, card);
2228}
2229
2230static const struct mmc_bus_ops mmc_ops = {
2231        .remove = mmc_remove,
2232        .detect = mmc_detect,
2233        .suspend = mmc_suspend,
2234        .resume = mmc_resume,
2235        .runtime_suspend = mmc_runtime_suspend,
2236        .runtime_resume = mmc_runtime_resume,
2237        .alive = mmc_alive,
2238        .shutdown = mmc_shutdown,
2239        .hw_reset = _mmc_hw_reset,
2240        .cache_enabled = _mmc_cache_enabled,
2241        .flush_cache = _mmc_flush_cache,
2242};
2243
2244/*
2245 * Starting point for MMC card init.
2246 */
2247int mmc_attach_mmc(struct mmc_host *host)
2248{
2249        int err;
2250        u32 ocr, rocr;
2251
2252        WARN_ON(!host->claimed);
2253
2254        /* Set correct bus mode for MMC before attempting attach */
2255        if (!mmc_host_is_spi(host))
2256                mmc_set_bus_mode(host, MMC_BUSMODE_OPENDRAIN);
2257
2258        err = mmc_send_op_cond(host, 0, &ocr);
2259        if (err)
2260                return err;
2261
2262        mmc_attach_bus(host, &mmc_ops);
2263        if (host->ocr_avail_mmc)
2264                host->ocr_avail = host->ocr_avail_mmc;
2265
2266        /*
2267         * We need to get OCR a different way for SPI.
2268         */
2269        if (mmc_host_is_spi(host)) {
2270                err = mmc_spi_read_ocr(host, 1, &ocr);
2271                if (err)
2272                        goto err;
2273        }
2274
2275        rocr = mmc_select_voltage(host, ocr);
2276
2277        /*
2278         * Can we support the voltage of the card?
2279         */
2280        if (!rocr) {
2281                err = -EINVAL;
2282                goto err;
2283        }
2284
2285        /*
2286         * Detect and init the card.
2287         */
2288        err = mmc_init_card(host, rocr, NULL);
2289        if (err)
2290                goto err;
2291
2292        mmc_release_host(host);
2293        err = mmc_add_card(host->card);
2294        if (err)
2295                goto remove_card;
2296
2297        mmc_claim_host(host);
2298        return 0;
2299
2300remove_card:
2301        mmc_remove_card(host->card);
2302        mmc_claim_host(host);
2303        host->card = NULL;
2304err:
2305        mmc_detach_bus(host);
2306
2307        pr_err("%s: error %d whilst initialising MMC card\n",
2308                mmc_hostname(host), err);
2309
2310        return err;
2311}
2312