linux/drivers/mmc/core/mmc_ops.c
<<
>>
Prefs
   1/*
   2 *  linux/drivers/mmc/core/mmc_ops.h
   3 *
   4 *  Copyright 2006-2007 Pierre Ossman
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License as published by
   8 * the Free Software Foundation; either version 2 of the License, or (at
   9 * your option) any later version.
  10 */
  11
  12#include <linux/slab.h>
  13#include <linux/export.h>
  14#include <linux/types.h>
  15#include <linux/scatterlist.h>
  16
  17#include <linux/mmc/host.h>
  18#include <linux/mmc/card.h>
  19#include <linux/mmc/mmc.h>
  20
  21#include "core.h"
  22#include "host.h"
  23#include "mmc_ops.h"
  24
  25#define MMC_OPS_TIMEOUT_MS      (10 * 60 * 1000) /* 10 minute timeout */
  26
  27static const u8 tuning_blk_pattern_4bit[] = {
  28        0xff, 0x0f, 0xff, 0x00, 0xff, 0xcc, 0xc3, 0xcc,
  29        0xc3, 0x3c, 0xcc, 0xff, 0xfe, 0xff, 0xfe, 0xef,
  30        0xff, 0xdf, 0xff, 0xdd, 0xff, 0xfb, 0xff, 0xfb,
  31        0xbf, 0xff, 0x7f, 0xff, 0x77, 0xf7, 0xbd, 0xef,
  32        0xff, 0xf0, 0xff, 0xf0, 0x0f, 0xfc, 0xcc, 0x3c,
  33        0xcc, 0x33, 0xcc, 0xcf, 0xff, 0xef, 0xff, 0xee,
  34        0xff, 0xfd, 0xff, 0xfd, 0xdf, 0xff, 0xbf, 0xff,
  35        0xbb, 0xff, 0xf7, 0xff, 0xf7, 0x7f, 0x7b, 0xde,
  36};
  37
  38static const u8 tuning_blk_pattern_8bit[] = {
  39        0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00,
  40        0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc, 0xcc,
  41        0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff, 0xff,
  42        0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee, 0xff,
  43        0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd, 0xdd,
  44        0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xbb,
  45        0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0xff,
  46        0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee, 0xff,
  47        0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00,
  48        0x00, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc,
  49        0xcc, 0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff,
  50        0xff, 0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee,
  51        0xff, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd,
  52        0xdd, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff,
  53        0xbb, 0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff,
  54        0xff, 0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee,
  55};
  56
  57static inline int __mmc_send_status(struct mmc_card *card, u32 *status,
  58                                    bool ignore_crc)
  59{
  60        int err;
  61        struct mmc_command cmd = {0};
  62
  63        BUG_ON(!card);
  64        BUG_ON(!card->host);
  65
  66        cmd.opcode = MMC_SEND_STATUS;
  67        if (!mmc_host_is_spi(card->host))
  68                cmd.arg = card->rca << 16;
  69        cmd.flags = MMC_RSP_SPI_R2 | MMC_RSP_R1 | MMC_CMD_AC;
  70        if (ignore_crc)
  71                cmd.flags &= ~MMC_RSP_CRC;
  72
  73        err = mmc_wait_for_cmd(card->host, &cmd, MMC_CMD_RETRIES);
  74        if (err)
  75                return err;
  76
  77        /* NOTE: callers are required to understand the difference
  78         * between "native" and SPI format status words!
  79         */
  80        if (status)
  81                *status = cmd.resp[0];
  82
  83        return 0;
  84}
  85
  86int mmc_send_status(struct mmc_card *card, u32 *status)
  87{
  88        return __mmc_send_status(card, status, false);
  89}
  90
  91static int _mmc_select_card(struct mmc_host *host, struct mmc_card *card)
  92{
  93        struct mmc_command cmd = {0};
  94
  95        BUG_ON(!host);
  96
  97        cmd.opcode = MMC_SELECT_CARD;
  98
  99        if (card) {
 100                cmd.arg = card->rca << 16;
 101                cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
 102        } else {
 103                cmd.arg = 0;
 104                cmd.flags = MMC_RSP_NONE | MMC_CMD_AC;
 105        }
 106
 107        return mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
 108}
 109
 110int mmc_select_card(struct mmc_card *card)
 111{
 112        BUG_ON(!card);
 113
 114        return _mmc_select_card(card->host, card);
 115}
 116
 117int mmc_deselect_cards(struct mmc_host *host)
 118{
 119        return _mmc_select_card(host, NULL);
 120}
 121
 122/*
 123 * Write the value specified in the device tree or board code into the optional
 124 * 16 bit Driver Stage Register. This can be used to tune raise/fall times and
 125 * drive strength of the DAT and CMD outputs. The actual meaning of a given
 126 * value is hardware dependant.
 127 * The presence of the DSR register can be determined from the CSD register,
 128 * bit 76.
 129 */
 130int mmc_set_dsr(struct mmc_host *host)
 131{
 132        struct mmc_command cmd = {0};
 133
 134        cmd.opcode = MMC_SET_DSR;
 135
 136        cmd.arg = (host->dsr << 16) | 0xffff;
 137        cmd.flags = MMC_RSP_NONE | MMC_CMD_AC;
 138
 139        return mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
 140}
 141
 142int mmc_go_idle(struct mmc_host *host)
 143{
 144        int err;
 145        struct mmc_command cmd = {0};
 146
 147        /*
 148         * Non-SPI hosts need to prevent chipselect going active during
 149         * GO_IDLE; that would put chips into SPI mode.  Remind them of
 150         * that in case of hardware that won't pull up DAT3/nCS otherwise.
 151         *
 152         * SPI hosts ignore ios.chip_select; it's managed according to
 153         * rules that must accommodate non-MMC slaves which this layer
 154         * won't even know about.
 155         */
 156        if (!mmc_host_is_spi(host)) {
 157                mmc_set_chip_select(host, MMC_CS_HIGH);
 158                mmc_delay(1);
 159        }
 160
 161        cmd.opcode = MMC_GO_IDLE_STATE;
 162        cmd.arg = 0;
 163        cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_NONE | MMC_CMD_BC;
 164
 165        err = mmc_wait_for_cmd(host, &cmd, 0);
 166
 167        mmc_delay(1);
 168
 169        if (!mmc_host_is_spi(host)) {
 170                mmc_set_chip_select(host, MMC_CS_DONTCARE);
 171                mmc_delay(1);
 172        }
 173
 174        host->use_spi_crc = 0;
 175
 176        return err;
 177}
 178
 179int mmc_send_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr)
 180{
 181        struct mmc_command cmd = {0};
 182        int i, err = 0;
 183
 184        BUG_ON(!host);
 185
 186        cmd.opcode = MMC_SEND_OP_COND;
 187        cmd.arg = mmc_host_is_spi(host) ? 0 : ocr;
 188        cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R3 | MMC_CMD_BCR;
 189
 190        for (i = 100; i; i--) {
 191                err = mmc_wait_for_cmd(host, &cmd, 0);
 192                if (err)
 193                        break;
 194
 195                /* if we're just probing, do a single pass */
 196                if (ocr == 0)
 197                        break;
 198
 199                /* otherwise wait until reset completes */
 200                if (mmc_host_is_spi(host)) {
 201                        if (!(cmd.resp[0] & R1_SPI_IDLE))
 202                                break;
 203                } else {
 204                        if (cmd.resp[0] & MMC_CARD_BUSY)
 205                                break;
 206                }
 207
 208                err = -ETIMEDOUT;
 209
 210                mmc_delay(10);
 211        }
 212
 213        if (rocr && !mmc_host_is_spi(host))
 214                *rocr = cmd.resp[0];
 215
 216        return err;
 217}
 218
 219int mmc_all_send_cid(struct mmc_host *host, u32 *cid)
 220{
 221        int err;
 222        struct mmc_command cmd = {0};
 223
 224        BUG_ON(!host);
 225        BUG_ON(!cid);
 226
 227        cmd.opcode = MMC_ALL_SEND_CID;
 228        cmd.arg = 0;
 229        cmd.flags = MMC_RSP_R2 | MMC_CMD_BCR;
 230
 231        err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
 232        if (err)
 233                return err;
 234
 235        memcpy(cid, cmd.resp, sizeof(u32) * 4);
 236
 237        return 0;
 238}
 239
 240int mmc_set_relative_addr(struct mmc_card *card)
 241{
 242        struct mmc_command cmd = {0};
 243
 244        BUG_ON(!card);
 245        BUG_ON(!card->host);
 246
 247        cmd.opcode = MMC_SET_RELATIVE_ADDR;
 248        cmd.arg = card->rca << 16;
 249        cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
 250
 251        return mmc_wait_for_cmd(card->host, &cmd, MMC_CMD_RETRIES);
 252}
 253
 254static int
 255mmc_send_cxd_native(struct mmc_host *host, u32 arg, u32 *cxd, int opcode)
 256{
 257        int err;
 258        struct mmc_command cmd = {0};
 259
 260        BUG_ON(!host);
 261        BUG_ON(!cxd);
 262
 263        cmd.opcode = opcode;
 264        cmd.arg = arg;
 265        cmd.flags = MMC_RSP_R2 | MMC_CMD_AC;
 266
 267        err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
 268        if (err)
 269                return err;
 270
 271        memcpy(cxd, cmd.resp, sizeof(u32) * 4);
 272
 273        return 0;
 274}
 275
 276/*
 277 * NOTE: void *buf, caller for the buf is required to use DMA-capable
 278 * buffer or on-stack buffer (with some overhead in callee).
 279 */
 280static int
 281mmc_send_cxd_data(struct mmc_card *card, struct mmc_host *host,
 282                u32 opcode, void *buf, unsigned len)
 283{
 284        struct mmc_request mrq = {NULL};
 285        struct mmc_command cmd = {0};
 286        struct mmc_data data = {0};
 287        struct scatterlist sg;
 288
 289        mrq.cmd = &cmd;
 290        mrq.data = &data;
 291
 292        cmd.opcode = opcode;
 293        cmd.arg = 0;
 294
 295        /* NOTE HACK:  the MMC_RSP_SPI_R1 is always correct here, but we
 296         * rely on callers to never use this with "native" calls for reading
 297         * CSD or CID.  Native versions of those commands use the R2 type,
 298         * not R1 plus a data block.
 299         */
 300        cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_ADTC;
 301
 302        data.blksz = len;
 303        data.blocks = 1;
 304        data.flags = MMC_DATA_READ;
 305        data.sg = &sg;
 306        data.sg_len = 1;
 307
 308        sg_init_one(&sg, buf, len);
 309
 310        if (opcode == MMC_SEND_CSD || opcode == MMC_SEND_CID) {
 311                /*
 312                 * The spec states that CSR and CID accesses have a timeout
 313                 * of 64 clock cycles.
 314                 */
 315                data.timeout_ns = 0;
 316                data.timeout_clks = 64;
 317        } else
 318                mmc_set_data_timeout(&data, card);
 319
 320        mmc_wait_for_req(host, &mrq);
 321
 322        if (cmd.error)
 323                return cmd.error;
 324        if (data.error)
 325                return data.error;
 326
 327        return 0;
 328}
 329
 330int mmc_send_csd(struct mmc_card *card, u32 *csd)
 331{
 332        int ret, i;
 333        u32 *csd_tmp;
 334
 335        if (!mmc_host_is_spi(card->host))
 336                return mmc_send_cxd_native(card->host, card->rca << 16,
 337                                csd, MMC_SEND_CSD);
 338
 339        csd_tmp = kzalloc(16, GFP_KERNEL);
 340        if (!csd_tmp)
 341                return -ENOMEM;
 342
 343        ret = mmc_send_cxd_data(card, card->host, MMC_SEND_CSD, csd_tmp, 16);
 344        if (ret)
 345                goto err;
 346
 347        for (i = 0;i < 4;i++)
 348                csd[i] = be32_to_cpu(csd_tmp[i]);
 349
 350err:
 351        kfree(csd_tmp);
 352        return ret;
 353}
 354
 355int mmc_send_cid(struct mmc_host *host, u32 *cid)
 356{
 357        int ret, i;
 358        u32 *cid_tmp;
 359
 360        if (!mmc_host_is_spi(host)) {
 361                if (!host->card)
 362                        return -EINVAL;
 363                return mmc_send_cxd_native(host, host->card->rca << 16,
 364                                cid, MMC_SEND_CID);
 365        }
 366
 367        cid_tmp = kzalloc(16, GFP_KERNEL);
 368        if (!cid_tmp)
 369                return -ENOMEM;
 370
 371        ret = mmc_send_cxd_data(NULL, host, MMC_SEND_CID, cid_tmp, 16);
 372        if (ret)
 373                goto err;
 374
 375        for (i = 0;i < 4;i++)
 376                cid[i] = be32_to_cpu(cid_tmp[i]);
 377
 378err:
 379        kfree(cid_tmp);
 380        return ret;
 381}
 382
 383int mmc_get_ext_csd(struct mmc_card *card, u8 **new_ext_csd)
 384{
 385        int err;
 386        u8 *ext_csd;
 387
 388        if (!card || !new_ext_csd)
 389                return -EINVAL;
 390
 391        if (!mmc_can_ext_csd(card))
 392                return -EOPNOTSUPP;
 393
 394        /*
 395         * As the ext_csd is so large and mostly unused, we don't store the
 396         * raw block in mmc_card.
 397         */
 398        ext_csd = kzalloc(512, GFP_KERNEL);
 399        if (!ext_csd)
 400                return -ENOMEM;
 401
 402        err = mmc_send_cxd_data(card, card->host, MMC_SEND_EXT_CSD, ext_csd,
 403                                512);
 404        if (err)
 405                kfree(ext_csd);
 406        else
 407                *new_ext_csd = ext_csd;
 408
 409        return err;
 410}
 411EXPORT_SYMBOL_GPL(mmc_get_ext_csd);
 412
 413int mmc_spi_read_ocr(struct mmc_host *host, int highcap, u32 *ocrp)
 414{
 415        struct mmc_command cmd = {0};
 416        int err;
 417
 418        cmd.opcode = MMC_SPI_READ_OCR;
 419        cmd.arg = highcap ? (1 << 30) : 0;
 420        cmd.flags = MMC_RSP_SPI_R3;
 421
 422        err = mmc_wait_for_cmd(host, &cmd, 0);
 423
 424        *ocrp = cmd.resp[1];
 425        return err;
 426}
 427
 428int mmc_spi_set_crc(struct mmc_host *host, int use_crc)
 429{
 430        struct mmc_command cmd = {0};
 431        int err;
 432
 433        cmd.opcode = MMC_SPI_CRC_ON_OFF;
 434        cmd.flags = MMC_RSP_SPI_R1;
 435        cmd.arg = use_crc;
 436
 437        err = mmc_wait_for_cmd(host, &cmd, 0);
 438        if (!err)
 439                host->use_spi_crc = use_crc;
 440        return err;
 441}
 442
 443int mmc_switch_status_error(struct mmc_host *host, u32 status)
 444{
 445        if (mmc_host_is_spi(host)) {
 446                if (status & R1_SPI_ILLEGAL_COMMAND)
 447                        return -EBADMSG;
 448        } else {
 449                if (status & 0xFDFFA000)
 450                        pr_warn("%s: unexpected status %#x after switch\n",
 451                                mmc_hostname(host), status);
 452                if (status & R1_SWITCH_ERROR)
 453                        return -EBADMSG;
 454        }
 455        return 0;
 456}
 457
 458/**
 459 *      __mmc_switch - modify EXT_CSD register
 460 *      @card: the MMC card associated with the data transfer
 461 *      @set: cmd set values
 462 *      @index: EXT_CSD register index
 463 *      @value: value to program into EXT_CSD register
 464 *      @timeout_ms: timeout (ms) for operation performed by register write,
 465 *                   timeout of zero implies maximum possible timeout
 466 *      @use_busy_signal: use the busy signal as response type
 467 *      @send_status: send status cmd to poll for busy
 468 *      @ignore_crc: ignore CRC errors when sending status cmd to poll for busy
 469 *
 470 *      Modifies the EXT_CSD register for selected card.
 471 */
 472int __mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value,
 473                unsigned int timeout_ms, bool use_busy_signal, bool send_status,
 474                bool ignore_crc)
 475{
 476        struct mmc_host *host = card->host;
 477        int err;
 478        struct mmc_command cmd = {0};
 479        unsigned long timeout;
 480        u32 status = 0;
 481        bool use_r1b_resp = use_busy_signal;
 482        bool expired = false;
 483
 484        mmc_retune_hold(host);
 485
 486        /*
 487         * If the cmd timeout and the max_busy_timeout of the host are both
 488         * specified, let's validate them. A failure means we need to prevent
 489         * the host from doing hw busy detection, which is done by converting
 490         * to a R1 response instead of a R1B.
 491         */
 492        if (timeout_ms && host->max_busy_timeout &&
 493                (timeout_ms > host->max_busy_timeout))
 494                use_r1b_resp = false;
 495
 496        cmd.opcode = MMC_SWITCH;
 497        cmd.arg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
 498                  (index << 16) |
 499                  (value << 8) |
 500                  set;
 501        cmd.flags = MMC_CMD_AC;
 502        if (use_r1b_resp) {
 503                cmd.flags |= MMC_RSP_SPI_R1B | MMC_RSP_R1B;
 504                /*
 505                 * A busy_timeout of zero means the host can decide to use
 506                 * whatever value it finds suitable.
 507                 */
 508                cmd.busy_timeout = timeout_ms;
 509        } else {
 510                cmd.flags |= MMC_RSP_SPI_R1 | MMC_RSP_R1;
 511        }
 512
 513        if (index == EXT_CSD_SANITIZE_START)
 514                cmd.sanitize_busy = true;
 515
 516        err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
 517        if (err)
 518                goto out;
 519
 520        /* No need to check card status in case of unblocking command */
 521        if (!use_busy_signal)
 522                goto out;
 523
 524        /*
 525         * CRC errors shall only be ignored in cases were CMD13 is used to poll
 526         * to detect busy completion.
 527         */
 528        if ((host->caps & MMC_CAP_WAIT_WHILE_BUSY) && use_r1b_resp)
 529                ignore_crc = false;
 530
 531        /* We have an unspecified cmd timeout, use the fallback value. */
 532        if (!timeout_ms)
 533                timeout_ms = MMC_OPS_TIMEOUT_MS;
 534
 535        /* Must check status to be sure of no errors. */
 536        timeout = jiffies + msecs_to_jiffies(timeout_ms);
 537        do {
 538                if (send_status) {
 539                        /*
 540                         * Due to the possibility of being preempted after
 541                         * sending the status command, check the expiration
 542                         * time first.
 543                         */
 544                        expired = time_after(jiffies, timeout);
 545                        err = __mmc_send_status(card, &status, ignore_crc);
 546                        if (err)
 547                                goto out;
 548                }
 549                if ((host->caps & MMC_CAP_WAIT_WHILE_BUSY) && use_r1b_resp)
 550                        break;
 551                if (mmc_host_is_spi(host))
 552                        break;
 553
 554                /*
 555                 * We are not allowed to issue a status command and the host
 556                 * does'nt support MMC_CAP_WAIT_WHILE_BUSY, then we can only
 557                 * rely on waiting for the stated timeout to be sufficient.
 558                 */
 559                if (!send_status) {
 560                        mmc_delay(timeout_ms);
 561                        goto out;
 562                }
 563
 564                /* Timeout if the device never leaves the program state. */
 565                if (expired && R1_CURRENT_STATE(status) == R1_STATE_PRG) {
 566                        pr_err("%s: Card stuck in programming state! %s\n",
 567                                mmc_hostname(host), __func__);
 568                        err = -ETIMEDOUT;
 569                        goto out;
 570                }
 571        } while (R1_CURRENT_STATE(status) == R1_STATE_PRG);
 572
 573        err = mmc_switch_status_error(host, status);
 574out:
 575        mmc_retune_release(host);
 576
 577        return err;
 578}
 579
 580int mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value,
 581                unsigned int timeout_ms)
 582{
 583        return __mmc_switch(card, set, index, value, timeout_ms, true, true,
 584                                false);
 585}
 586EXPORT_SYMBOL_GPL(mmc_switch);
 587
 588int mmc_send_tuning(struct mmc_host *host, u32 opcode, int *cmd_error)
 589{
 590        struct mmc_request mrq = {NULL};
 591        struct mmc_command cmd = {0};
 592        struct mmc_data data = {0};
 593        struct scatterlist sg;
 594        struct mmc_ios *ios = &host->ios;
 595        const u8 *tuning_block_pattern;
 596        int size, err = 0;
 597        u8 *data_buf;
 598
 599        if (ios->bus_width == MMC_BUS_WIDTH_8) {
 600                tuning_block_pattern = tuning_blk_pattern_8bit;
 601                size = sizeof(tuning_blk_pattern_8bit);
 602        } else if (ios->bus_width == MMC_BUS_WIDTH_4) {
 603                tuning_block_pattern = tuning_blk_pattern_4bit;
 604                size = sizeof(tuning_blk_pattern_4bit);
 605        } else
 606                return -EINVAL;
 607
 608        data_buf = kzalloc(size, GFP_KERNEL);
 609        if (!data_buf)
 610                return -ENOMEM;
 611
 612        mrq.cmd = &cmd;
 613        mrq.data = &data;
 614
 615        cmd.opcode = opcode;
 616        cmd.flags = MMC_RSP_R1 | MMC_CMD_ADTC;
 617
 618        data.blksz = size;
 619        data.blocks = 1;
 620        data.flags = MMC_DATA_READ;
 621
 622        /*
 623         * According to the tuning specs, Tuning process
 624         * is normally shorter 40 executions of CMD19,
 625         * and timeout value should be shorter than 150 ms
 626         */
 627        data.timeout_ns = 150 * NSEC_PER_MSEC;
 628
 629        data.sg = &sg;
 630        data.sg_len = 1;
 631        sg_init_one(&sg, data_buf, size);
 632
 633        mmc_wait_for_req(host, &mrq);
 634
 635        if (cmd_error)
 636                *cmd_error = cmd.error;
 637
 638        if (cmd.error) {
 639                err = cmd.error;
 640                goto out;
 641        }
 642
 643        if (data.error) {
 644                err = data.error;
 645                goto out;
 646        }
 647
 648        if (memcmp(data_buf, tuning_block_pattern, size))
 649                err = -EIO;
 650
 651out:
 652        kfree(data_buf);
 653        return err;
 654}
 655EXPORT_SYMBOL_GPL(mmc_send_tuning);
 656
 657static int
 658mmc_send_bus_test(struct mmc_card *card, struct mmc_host *host, u8 opcode,
 659                  u8 len)
 660{
 661        struct mmc_request mrq = {NULL};
 662        struct mmc_command cmd = {0};
 663        struct mmc_data data = {0};
 664        struct scatterlist sg;
 665        u8 *data_buf;
 666        u8 *test_buf;
 667        int i, err;
 668        static u8 testdata_8bit[8] = { 0x55, 0xaa, 0, 0, 0, 0, 0, 0 };
 669        static u8 testdata_4bit[4] = { 0x5a, 0, 0, 0 };
 670
 671        /* dma onto stack is unsafe/nonportable, but callers to this
 672         * routine normally provide temporary on-stack buffers ...
 673         */
 674        data_buf = kmalloc(len, GFP_KERNEL);
 675        if (!data_buf)
 676                return -ENOMEM;
 677
 678        if (len == 8)
 679                test_buf = testdata_8bit;
 680        else if (len == 4)
 681                test_buf = testdata_4bit;
 682        else {
 683                pr_err("%s: Invalid bus_width %d\n",
 684                       mmc_hostname(host), len);
 685                kfree(data_buf);
 686                return -EINVAL;
 687        }
 688
 689        if (opcode == MMC_BUS_TEST_W)
 690                memcpy(data_buf, test_buf, len);
 691
 692        mrq.cmd = &cmd;
 693        mrq.data = &data;
 694        cmd.opcode = opcode;
 695        cmd.arg = 0;
 696
 697        /* NOTE HACK:  the MMC_RSP_SPI_R1 is always correct here, but we
 698         * rely on callers to never use this with "native" calls for reading
 699         * CSD or CID.  Native versions of those commands use the R2 type,
 700         * not R1 plus a data block.
 701         */
 702        cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_ADTC;
 703
 704        data.blksz = len;
 705        data.blocks = 1;
 706        if (opcode == MMC_BUS_TEST_R)
 707                data.flags = MMC_DATA_READ;
 708        else
 709                data.flags = MMC_DATA_WRITE;
 710
 711        data.sg = &sg;
 712        data.sg_len = 1;
 713        mmc_set_data_timeout(&data, card);
 714        sg_init_one(&sg, data_buf, len);
 715        mmc_wait_for_req(host, &mrq);
 716        err = 0;
 717        if (opcode == MMC_BUS_TEST_R) {
 718                for (i = 0; i < len / 4; i++)
 719                        if ((test_buf[i] ^ data_buf[i]) != 0xff) {
 720                                err = -EIO;
 721                                break;
 722                        }
 723        }
 724        kfree(data_buf);
 725
 726        if (cmd.error)
 727                return cmd.error;
 728        if (data.error)
 729                return data.error;
 730
 731        return err;
 732}
 733
 734int mmc_bus_test(struct mmc_card *card, u8 bus_width)
 735{
 736        int width;
 737
 738        if (bus_width == MMC_BUS_WIDTH_8)
 739                width = 8;
 740        else if (bus_width == MMC_BUS_WIDTH_4)
 741                width = 4;
 742        else if (bus_width == MMC_BUS_WIDTH_1)
 743                return 0; /* no need for test */
 744        else
 745                return -EINVAL;
 746
 747        /*
 748         * Ignore errors from BUS_TEST_W.  BUS_TEST_R will fail if there
 749         * is a problem.  This improves chances that the test will work.
 750         */
 751        mmc_send_bus_test(card, card->host, MMC_BUS_TEST_W, width);
 752        return mmc_send_bus_test(card, card->host, MMC_BUS_TEST_R, width);
 753}
 754
 755int mmc_send_hpi_cmd(struct mmc_card *card, u32 *status)
 756{
 757        struct mmc_command cmd = {0};
 758        unsigned int opcode;
 759        int err;
 760
 761        if (!card->ext_csd.hpi) {
 762                pr_warn("%s: Card didn't support HPI command\n",
 763                        mmc_hostname(card->host));
 764                return -EINVAL;
 765        }
 766
 767        opcode = card->ext_csd.hpi_cmd;
 768        if (opcode == MMC_STOP_TRANSMISSION)
 769                cmd.flags = MMC_RSP_R1B | MMC_CMD_AC;
 770        else if (opcode == MMC_SEND_STATUS)
 771                cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
 772
 773        cmd.opcode = opcode;
 774        cmd.arg = card->rca << 16 | 1;
 775
 776        err = mmc_wait_for_cmd(card->host, &cmd, 0);
 777        if (err) {
 778                pr_warn("%s: error %d interrupting operation. "
 779                        "HPI command response %#x\n", mmc_hostname(card->host),
 780                        err, cmd.resp[0]);
 781                return err;
 782        }
 783        if (status)
 784                *status = cmd.resp[0];
 785
 786        return 0;
 787}
 788
 789int mmc_can_ext_csd(struct mmc_card *card)
 790{
 791        return (card && card->csd.mmca_vsn > CSD_SPEC_VER_3);
 792}
 793