linux/drivers/mmc/host/at91_mci.c
<<
>>
Prefs
   1/*
   2 *  linux/drivers/mmc/host/at91_mci.c - ATMEL AT91 MCI Driver
   3 *
   4 *  Copyright (C) 2005 Cougar Creek Computing Devices Ltd, All Rights Reserved
   5 *
   6 *  Copyright (C) 2006 Malcolm Noyes
   7 *
   8 * This program is free software; you can redistribute it and/or modify
   9 * it under the terms of the GNU General Public License version 2 as
  10 * published by the Free Software Foundation.
  11 */
  12
  13/*
  14   This is the AT91 MCI driver that has been tested with both MMC cards
  15   and SD-cards.  Boards that support write protect are now supported.
  16   The CCAT91SBC001 board does not support SD cards.
  17
  18   The three entry points are at91_mci_request, at91_mci_set_ios
  19   and at91_mci_get_ro.
  20
  21   SET IOS
  22     This configures the device to put it into the correct mode and clock speed
  23     required.
  24
  25   MCI REQUEST
  26     MCI request processes the commands sent in the mmc_request structure. This
  27     can consist of a processing command and a stop command in the case of
  28     multiple block transfers.
  29
  30     There are three main types of request, commands, reads and writes.
  31
  32     Commands are straight forward. The command is submitted to the controller and
  33     the request function returns. When the controller generates an interrupt to indicate
  34     the command is finished, the response to the command are read and the mmc_request_done
  35     function called to end the request.
  36
  37     Reads and writes work in a similar manner to normal commands but involve the PDC (DMA)
  38     controller to manage the transfers.
  39
  40     A read is done from the controller directly to the scatterlist passed in from the request.
  41     Due to a bug in the AT91RM9200 controller, when a read is completed, all the words are byte
  42     swapped in the scatterlist buffers.  AT91SAM926x are not affected by this bug.
  43
  44     The sequence of read interrupts is: ENDRX, RXBUFF, CMDRDY
  45
  46     A write is slightly different in that the bytes to write are read from the scatterlist
  47     into a dma memory buffer (this is in case the source buffer should be read only). The
  48     entire write buffer is then done from this single dma memory buffer.
  49
  50     The sequence of write interrupts is: ENDTX, TXBUFE, NOTBUSY, CMDRDY
  51
  52   GET RO
  53     Gets the status of the write protect pin, if available.
  54*/
  55
  56#include <linux/module.h>
  57#include <linux/moduleparam.h>
  58#include <linux/init.h>
  59#include <linux/ioport.h>
  60#include <linux/platform_device.h>
  61#include <linux/interrupt.h>
  62#include <linux/blkdev.h>
  63#include <linux/delay.h>
  64#include <linux/err.h>
  65#include <linux/dma-mapping.h>
  66#include <linux/clk.h>
  67#include <linux/atmel_pdc.h>
  68
  69#include <linux/mmc/host.h>
  70
  71#include <asm/io.h>
  72#include <asm/irq.h>
  73#include <asm/gpio.h>
  74
  75#include <mach/board.h>
  76#include <mach/cpu.h>
  77#include <mach/at91_mci.h>
  78
  79#define DRIVER_NAME "at91_mci"
  80
  81#define FL_SENT_COMMAND (1 << 0)
  82#define FL_SENT_STOP    (1 << 1)
  83
  84#define AT91_MCI_ERRORS (AT91_MCI_RINDE | AT91_MCI_RDIRE | AT91_MCI_RCRCE       \
  85                | AT91_MCI_RENDE | AT91_MCI_RTOE | AT91_MCI_DCRCE               \
  86                | AT91_MCI_DTOE | AT91_MCI_OVRE | AT91_MCI_UNRE)
  87
  88#define at91_mci_read(host, reg)        __raw_readl((host)->baseaddr + (reg))
  89#define at91_mci_write(host, reg, val)  __raw_writel((val), (host)->baseaddr + (reg))
  90
  91
  92/*
  93 * Low level type for this driver
  94 */
  95struct at91mci_host
  96{
  97        struct mmc_host *mmc;
  98        struct mmc_command *cmd;
  99        struct mmc_request *request;
 100
 101        void __iomem *baseaddr;
 102        int irq;
 103
 104        struct at91_mmc_data *board;
 105        int present;
 106
 107        struct clk *mci_clk;
 108
 109        /*
 110         * Flag indicating when the command has been sent. This is used to
 111         * work out whether or not to send the stop
 112         */
 113        unsigned int flags;
 114        /* flag for current bus settings */
 115        u32 bus_mode;
 116
 117        /* DMA buffer used for transmitting */
 118        unsigned int* buffer;
 119        dma_addr_t physical_address;
 120        unsigned int total_length;
 121
 122        /* Latest in the scatterlist that has been enabled for transfer, but not freed */
 123        int in_use_index;
 124
 125        /* Latest in the scatterlist that has been enabled for transfer */
 126        int transfer_index;
 127
 128        /* Timer for timeouts */
 129        struct timer_list timer;
 130};
 131
 132/*
 133 * Reset the controller and restore most of the state
 134 */
 135static void at91_reset_host(struct at91mci_host *host)
 136{
 137        unsigned long flags;
 138        u32 mr;
 139        u32 sdcr;
 140        u32 dtor;
 141        u32 imr;
 142
 143        local_irq_save(flags);
 144        imr = at91_mci_read(host, AT91_MCI_IMR);
 145
 146        at91_mci_write(host, AT91_MCI_IDR, 0xffffffff);
 147
 148        /* save current state */
 149        mr = at91_mci_read(host, AT91_MCI_MR) & 0x7fff;
 150        sdcr = at91_mci_read(host, AT91_MCI_SDCR);
 151        dtor = at91_mci_read(host, AT91_MCI_DTOR);
 152
 153        /* reset the controller */
 154        at91_mci_write(host, AT91_MCI_CR, AT91_MCI_MCIDIS | AT91_MCI_SWRST);
 155
 156        /* restore state */
 157        at91_mci_write(host, AT91_MCI_CR, AT91_MCI_MCIEN);
 158        at91_mci_write(host, AT91_MCI_MR, mr);
 159        at91_mci_write(host, AT91_MCI_SDCR, sdcr);
 160        at91_mci_write(host, AT91_MCI_DTOR, dtor);
 161        at91_mci_write(host, AT91_MCI_IER, imr);
 162
 163        /* make sure sdio interrupts will fire */
 164        at91_mci_read(host, AT91_MCI_SR);
 165
 166        local_irq_restore(flags);
 167}
 168
 169static void at91_timeout_timer(unsigned long data)
 170{
 171        struct at91mci_host *host;
 172
 173        host = (struct at91mci_host *)data;
 174
 175        if (host->request) {
 176                dev_err(host->mmc->parent, "Timeout waiting end of packet\n");
 177
 178                if (host->cmd && host->cmd->data) {
 179                        host->cmd->data->error = -ETIMEDOUT;
 180                } else {
 181                        if (host->cmd)
 182                                host->cmd->error = -ETIMEDOUT;
 183                        else
 184                                host->request->cmd->error = -ETIMEDOUT;
 185                }
 186
 187                at91_reset_host(host);
 188                mmc_request_done(host->mmc, host->request);
 189        }
 190}
 191
 192/*
 193 * Copy from sg to a dma block - used for transfers
 194 */
 195static inline void at91_mci_sg_to_dma(struct at91mci_host *host, struct mmc_data *data)
 196{
 197        unsigned int len, i, size;
 198        unsigned *dmabuf = host->buffer;
 199
 200        size = data->blksz * data->blocks;
 201        len = data->sg_len;
 202
 203        /* AT91SAM926[0/3] Data Write Operation and number of bytes erratum */
 204        if (cpu_is_at91sam9260() || cpu_is_at91sam9263())
 205                if (host->total_length == 12)
 206                        memset(dmabuf, 0, 12);
 207
 208        /*
 209         * Just loop through all entries. Size might not
 210         * be the entire list though so make sure that
 211         * we do not transfer too much.
 212         */
 213        for (i = 0; i < len; i++) {
 214                struct scatterlist *sg;
 215                int amount;
 216                unsigned int *sgbuffer;
 217
 218                sg = &data->sg[i];
 219
 220                sgbuffer = kmap_atomic(sg_page(sg), KM_BIO_SRC_IRQ) + sg->offset;
 221                amount = min(size, sg->length);
 222                size -= amount;
 223
 224                if (cpu_is_at91rm9200()) {      /* AT91RM9200 errata */
 225                        int index;
 226
 227                        for (index = 0; index < (amount / 4); index++)
 228                                *dmabuf++ = swab32(sgbuffer[index]);
 229                } else {
 230                        memcpy(dmabuf, sgbuffer, amount);
 231                        dmabuf += amount;
 232                }
 233
 234                kunmap_atomic(sgbuffer, KM_BIO_SRC_IRQ);
 235
 236                if (size == 0)
 237                        break;
 238        }
 239
 240        /*
 241         * Check that we didn't get a request to transfer
 242         * more data than can fit into the SG list.
 243         */
 244        BUG_ON(size != 0);
 245}
 246
 247/*
 248 * Prepare a dma read
 249 */
 250static void at91_mci_pre_dma_read(struct at91mci_host *host)
 251{
 252        int i;
 253        struct scatterlist *sg;
 254        struct mmc_command *cmd;
 255        struct mmc_data *data;
 256
 257        pr_debug("pre dma read\n");
 258
 259        cmd = host->cmd;
 260        if (!cmd) {
 261                pr_debug("no command\n");
 262                return;
 263        }
 264
 265        data = cmd->data;
 266        if (!data) {
 267                pr_debug("no data\n");
 268                return;
 269        }
 270
 271        for (i = 0; i < 2; i++) {
 272                /* nothing left to transfer */
 273                if (host->transfer_index >= data->sg_len) {
 274                        pr_debug("Nothing left to transfer (index = %d)\n", host->transfer_index);
 275                        break;
 276                }
 277
 278                /* Check to see if this needs filling */
 279                if (i == 0) {
 280                        if (at91_mci_read(host, ATMEL_PDC_RCR) != 0) {
 281                                pr_debug("Transfer active in current\n");
 282                                continue;
 283                        }
 284                }
 285                else {
 286                        if (at91_mci_read(host, ATMEL_PDC_RNCR) != 0) {
 287                                pr_debug("Transfer active in next\n");
 288                                continue;
 289                        }
 290                }
 291
 292                /* Setup the next transfer */
 293                pr_debug("Using transfer index %d\n", host->transfer_index);
 294
 295                sg = &data->sg[host->transfer_index++];
 296                pr_debug("sg = %p\n", sg);
 297
 298                sg->dma_address = dma_map_page(NULL, sg_page(sg), sg->offset, sg->length, DMA_FROM_DEVICE);
 299
 300                pr_debug("dma address = %08X, length = %d\n", sg->dma_address, sg->length);
 301
 302                if (i == 0) {
 303                        at91_mci_write(host, ATMEL_PDC_RPR, sg->dma_address);
 304                        at91_mci_write(host, ATMEL_PDC_RCR, (data->blksz & 0x3) ? sg->length : sg->length / 4);
 305                }
 306                else {
 307                        at91_mci_write(host, ATMEL_PDC_RNPR, sg->dma_address);
 308                        at91_mci_write(host, ATMEL_PDC_RNCR, (data->blksz & 0x3) ? sg->length : sg->length / 4);
 309                }
 310        }
 311
 312        pr_debug("pre dma read done\n");
 313}
 314
 315/*
 316 * Handle after a dma read
 317 */
 318static void at91_mci_post_dma_read(struct at91mci_host *host)
 319{
 320        struct mmc_command *cmd;
 321        struct mmc_data *data;
 322
 323        pr_debug("post dma read\n");
 324
 325        cmd = host->cmd;
 326        if (!cmd) {
 327                pr_debug("no command\n");
 328                return;
 329        }
 330
 331        data = cmd->data;
 332        if (!data) {
 333                pr_debug("no data\n");
 334                return;
 335        }
 336
 337        while (host->in_use_index < host->transfer_index) {
 338                struct scatterlist *sg;
 339
 340                pr_debug("finishing index %d\n", host->in_use_index);
 341
 342                sg = &data->sg[host->in_use_index++];
 343
 344                pr_debug("Unmapping page %08X\n", sg->dma_address);
 345
 346                dma_unmap_page(NULL, sg->dma_address, sg->length, DMA_FROM_DEVICE);
 347
 348                if (cpu_is_at91rm9200()) {      /* AT91RM9200 errata */
 349                        unsigned int *buffer;
 350                        int index;
 351
 352                        /* Swap the contents of the buffer */
 353                        buffer = kmap_atomic(sg_page(sg), KM_BIO_SRC_IRQ) + sg->offset;
 354                        pr_debug("buffer = %p, length = %d\n", buffer, sg->length);
 355
 356                        for (index = 0; index < (sg->length / 4); index++)
 357                                buffer[index] = swab32(buffer[index]);
 358
 359                        kunmap_atomic(buffer, KM_BIO_SRC_IRQ);
 360                }
 361
 362                flush_dcache_page(sg_page(sg));
 363
 364                data->bytes_xfered += sg->length;
 365        }
 366
 367        /* Is there another transfer to trigger? */
 368        if (host->transfer_index < data->sg_len)
 369                at91_mci_pre_dma_read(host);
 370        else {
 371                at91_mci_write(host, AT91_MCI_IDR, AT91_MCI_ENDRX);
 372                at91_mci_write(host, AT91_MCI_IER, AT91_MCI_RXBUFF);
 373        }
 374
 375        pr_debug("post dma read done\n");
 376}
 377
 378/*
 379 * Handle transmitted data
 380 */
 381static void at91_mci_handle_transmitted(struct at91mci_host *host)
 382{
 383        struct mmc_command *cmd;
 384        struct mmc_data *data;
 385
 386        pr_debug("Handling the transmit\n");
 387
 388        /* Disable the transfer */
 389        at91_mci_write(host, ATMEL_PDC_PTCR, ATMEL_PDC_RXTDIS | ATMEL_PDC_TXTDIS);
 390
 391        /* Now wait for cmd ready */
 392        at91_mci_write(host, AT91_MCI_IDR, AT91_MCI_TXBUFE);
 393
 394        cmd = host->cmd;
 395        if (!cmd) return;
 396
 397        data = cmd->data;
 398        if (!data) return;
 399
 400        if (cmd->data->blocks > 1) {
 401                pr_debug("multiple write : wait for BLKE...\n");
 402                at91_mci_write(host, AT91_MCI_IER, AT91_MCI_BLKE);
 403        } else
 404                at91_mci_write(host, AT91_MCI_IER, AT91_MCI_NOTBUSY);
 405}
 406
 407/*
 408 * Update bytes tranfered count during a write operation
 409 */
 410static void at91_mci_update_bytes_xfered(struct at91mci_host *host)
 411{
 412        struct mmc_data *data;
 413
 414        /* always deal with the effective request (and not the current cmd) */
 415
 416        if (host->request->cmd && host->request->cmd->error != 0)
 417                return;
 418
 419        if (host->request->data) {
 420                data = host->request->data;
 421                if (data->flags & MMC_DATA_WRITE) {
 422                        /* card is in IDLE mode now */
 423                        pr_debug("-> bytes_xfered %d, total_length = %d\n",
 424                                data->bytes_xfered, host->total_length);
 425                        data->bytes_xfered = data->blksz * data->blocks;
 426                }
 427        }
 428}
 429
 430
 431/*Handle after command sent ready*/
 432static int at91_mci_handle_cmdrdy(struct at91mci_host *host)
 433{
 434        if (!host->cmd)
 435                return 1;
 436        else if (!host->cmd->data) {
 437                if (host->flags & FL_SENT_STOP) {
 438                        /*After multi block write, we must wait for NOTBUSY*/
 439                        at91_mci_write(host, AT91_MCI_IER, AT91_MCI_NOTBUSY);
 440                } else return 1;
 441        } else if (host->cmd->data->flags & MMC_DATA_WRITE) {
 442                /*After sendding multi-block-write command, start DMA transfer*/
 443                at91_mci_write(host, AT91_MCI_IER, AT91_MCI_TXBUFE | AT91_MCI_BLKE);
 444                at91_mci_write(host, ATMEL_PDC_PTCR, ATMEL_PDC_TXTEN);
 445        }
 446
 447        /* command not completed, have to wait */
 448        return 0;
 449}
 450
 451
 452/*
 453 * Enable the controller
 454 */
 455static void at91_mci_enable(struct at91mci_host *host)
 456{
 457        unsigned int mr;
 458
 459        at91_mci_write(host, AT91_MCI_CR, AT91_MCI_MCIEN);
 460        at91_mci_write(host, AT91_MCI_IDR, 0xffffffff);
 461        at91_mci_write(host, AT91_MCI_DTOR, AT91_MCI_DTOMUL_1M | AT91_MCI_DTOCYC);
 462        mr = AT91_MCI_PDCMODE | 0x34a;
 463
 464        if (cpu_is_at91sam9260() || cpu_is_at91sam9263())
 465                mr |= AT91_MCI_RDPROOF | AT91_MCI_WRPROOF;
 466
 467        at91_mci_write(host, AT91_MCI_MR, mr);
 468
 469        /* use Slot A or B (only one at same time) */
 470        at91_mci_write(host, AT91_MCI_SDCR, host->board->slot_b);
 471}
 472
 473/*
 474 * Disable the controller
 475 */
 476static void at91_mci_disable(struct at91mci_host *host)
 477{
 478        at91_mci_write(host, AT91_MCI_CR, AT91_MCI_MCIDIS | AT91_MCI_SWRST);
 479}
 480
 481/*
 482 * Send a command
 483 */
 484static void at91_mci_send_command(struct at91mci_host *host, struct mmc_command *cmd)
 485{
 486        unsigned int cmdr, mr;
 487        unsigned int block_length;
 488        struct mmc_data *data = cmd->data;
 489
 490        unsigned int blocks;
 491        unsigned int ier = 0;
 492
 493        host->cmd = cmd;
 494
 495        /* Needed for leaving busy state before CMD1 */
 496        if ((at91_mci_read(host, AT91_MCI_SR) & AT91_MCI_RTOE) && (cmd->opcode == 1)) {
 497                pr_debug("Clearing timeout\n");
 498                at91_mci_write(host, AT91_MCI_ARGR, 0);
 499                at91_mci_write(host, AT91_MCI_CMDR, AT91_MCI_OPDCMD);
 500                while (!(at91_mci_read(host, AT91_MCI_SR) & AT91_MCI_CMDRDY)) {
 501                        /* spin */
 502                        pr_debug("Clearing: SR = %08X\n", at91_mci_read(host, AT91_MCI_SR));
 503                }
 504        }
 505
 506        cmdr = cmd->opcode;
 507
 508        if (mmc_resp_type(cmd) == MMC_RSP_NONE)
 509                cmdr |= AT91_MCI_RSPTYP_NONE;
 510        else {
 511                /* if a response is expected then allow maximum response latancy */
 512                cmdr |= AT91_MCI_MAXLAT;
 513                /* set 136 bit response for R2, 48 bit response otherwise */
 514                if (mmc_resp_type(cmd) == MMC_RSP_R2)
 515                        cmdr |= AT91_MCI_RSPTYP_136;
 516                else
 517                        cmdr |= AT91_MCI_RSPTYP_48;
 518        }
 519
 520        if (data) {
 521
 522                if (cpu_is_at91rm9200() || cpu_is_at91sam9261()) {
 523                        if (data->blksz & 0x3) {
 524                                pr_debug("Unsupported block size\n");
 525                                cmd->error = -EINVAL;
 526                                mmc_request_done(host->mmc, host->request);
 527                                return;
 528                        }
 529                        if (data->flags & MMC_DATA_STREAM) {
 530                                pr_debug("Stream commands not supported\n");
 531                                cmd->error = -EINVAL;
 532                                mmc_request_done(host->mmc, host->request);
 533                                return;
 534                        }
 535                }
 536
 537                block_length = data->blksz;
 538                blocks = data->blocks;
 539
 540                /* always set data start - also set direction flag for read */
 541                if (data->flags & MMC_DATA_READ)
 542                        cmdr |= (AT91_MCI_TRDIR | AT91_MCI_TRCMD_START);
 543                else if (data->flags & MMC_DATA_WRITE)
 544                        cmdr |= AT91_MCI_TRCMD_START;
 545
 546                if (data->flags & MMC_DATA_STREAM)
 547                        cmdr |= AT91_MCI_TRTYP_STREAM;
 548                if (data->blocks > 1)
 549                        cmdr |= AT91_MCI_TRTYP_MULTIPLE;
 550        }
 551        else {
 552                block_length = 0;
 553                blocks = 0;
 554        }
 555
 556        if (host->flags & FL_SENT_STOP)
 557                cmdr |= AT91_MCI_TRCMD_STOP;
 558
 559        if (host->bus_mode == MMC_BUSMODE_OPENDRAIN)
 560                cmdr |= AT91_MCI_OPDCMD;
 561
 562        /*
 563         * Set the arguments and send the command
 564         */
 565        pr_debug("Sending command %d as %08X, arg = %08X, blocks = %d, length = %d (MR = %08X)\n",
 566                cmd->opcode, cmdr, cmd->arg, blocks, block_length, at91_mci_read(host, AT91_MCI_MR));
 567
 568        if (!data) {
 569                at91_mci_write(host, ATMEL_PDC_PTCR, ATMEL_PDC_TXTDIS | ATMEL_PDC_RXTDIS);
 570                at91_mci_write(host, ATMEL_PDC_RPR, 0);
 571                at91_mci_write(host, ATMEL_PDC_RCR, 0);
 572                at91_mci_write(host, ATMEL_PDC_RNPR, 0);
 573                at91_mci_write(host, ATMEL_PDC_RNCR, 0);
 574                at91_mci_write(host, ATMEL_PDC_TPR, 0);
 575                at91_mci_write(host, ATMEL_PDC_TCR, 0);
 576                at91_mci_write(host, ATMEL_PDC_TNPR, 0);
 577                at91_mci_write(host, ATMEL_PDC_TNCR, 0);
 578                ier = AT91_MCI_CMDRDY;
 579        } else {
 580                /* zero block length and PDC mode */
 581                mr = at91_mci_read(host, AT91_MCI_MR) & 0x5fff;
 582                mr |= (data->blksz & 0x3) ? AT91_MCI_PDCFBYTE : 0;
 583                mr |= (block_length << 16);
 584                mr |= AT91_MCI_PDCMODE;
 585                at91_mci_write(host, AT91_MCI_MR, mr);
 586
 587                if (!(cpu_is_at91rm9200() || cpu_is_at91sam9261()))
 588                        at91_mci_write(host, AT91_MCI_BLKR,
 589                                AT91_MCI_BLKR_BCNT(blocks) |
 590                                AT91_MCI_BLKR_BLKLEN(block_length));
 591
 592                /*
 593                 * Disable the PDC controller
 594                 */
 595                at91_mci_write(host, ATMEL_PDC_PTCR, ATMEL_PDC_RXTDIS | ATMEL_PDC_TXTDIS);
 596
 597                if (cmdr & AT91_MCI_TRCMD_START) {
 598                        data->bytes_xfered = 0;
 599                        host->transfer_index = 0;
 600                        host->in_use_index = 0;
 601                        if (cmdr & AT91_MCI_TRDIR) {
 602                                /*
 603                                 * Handle a read
 604                                 */
 605                                host->buffer = NULL;
 606                                host->total_length = 0;
 607
 608                                at91_mci_pre_dma_read(host);
 609                                ier = AT91_MCI_ENDRX /* | AT91_MCI_RXBUFF */;
 610                        }
 611                        else {
 612                                /*
 613                                 * Handle a write
 614                                 */
 615                                host->total_length = block_length * blocks;
 616                                /*
 617                                 * AT91SAM926[0/3] Data Write Operation and
 618                                 * number of bytes erratum
 619                                 */
 620                                if (cpu_is_at91sam9260 () || cpu_is_at91sam9263())
 621                                        if (host->total_length < 12)
 622                                                host->total_length = 12;
 623
 624                                host->buffer = kmalloc(host->total_length, GFP_KERNEL);
 625                                if (!host->buffer) {
 626                                        pr_debug("Can't alloc tx buffer\n");
 627                                        cmd->error = -ENOMEM;
 628                                        mmc_request_done(host->mmc, host->request);
 629                                        return;
 630                                }
 631
 632                                at91_mci_sg_to_dma(host, data);
 633
 634                                host->physical_address = dma_map_single(NULL,
 635                                                host->buffer, host->total_length,
 636                                                DMA_TO_DEVICE);
 637
 638                                pr_debug("Transmitting %d bytes\n", host->total_length);
 639
 640                                at91_mci_write(host, ATMEL_PDC_TPR, host->physical_address);
 641                                at91_mci_write(host, ATMEL_PDC_TCR, (data->blksz & 0x3) ?
 642                                                host->total_length : host->total_length / 4);
 643
 644                                ier = AT91_MCI_CMDRDY;
 645                        }
 646                }
 647        }
 648
 649        /*
 650         * Send the command and then enable the PDC - not the other way round as
 651         * the data sheet says
 652         */
 653
 654        at91_mci_write(host, AT91_MCI_ARGR, cmd->arg);
 655        at91_mci_write(host, AT91_MCI_CMDR, cmdr);
 656
 657        if (cmdr & AT91_MCI_TRCMD_START) {
 658                if (cmdr & AT91_MCI_TRDIR)
 659                        at91_mci_write(host, ATMEL_PDC_PTCR, ATMEL_PDC_RXTEN);
 660        }
 661
 662        /* Enable selected interrupts */
 663        at91_mci_write(host, AT91_MCI_IER, AT91_MCI_ERRORS | ier);
 664}
 665
 666/*
 667 * Process the next step in the request
 668 */
 669static void at91_mci_process_next(struct at91mci_host *host)
 670{
 671        if (!(host->flags & FL_SENT_COMMAND)) {
 672                host->flags |= FL_SENT_COMMAND;
 673                at91_mci_send_command(host, host->request->cmd);
 674        }
 675        else if ((!(host->flags & FL_SENT_STOP)) && host->request->stop) {
 676                host->flags |= FL_SENT_STOP;
 677                at91_mci_send_command(host, host->request->stop);
 678        } else {
 679                del_timer(&host->timer);
 680                /* the at91rm9200 mci controller hangs after some transfers,
 681                 * and the workaround is to reset it after each transfer.
 682                 */
 683                if (cpu_is_at91rm9200())
 684                        at91_reset_host(host);
 685                mmc_request_done(host->mmc, host->request);
 686        }
 687}
 688
 689/*
 690 * Handle a command that has been completed
 691 */
 692static void at91_mci_completed_command(struct at91mci_host *host, unsigned int status)
 693{
 694        struct mmc_command *cmd = host->cmd;
 695        struct mmc_data *data = cmd->data;
 696
 697        at91_mci_write(host, AT91_MCI_IDR, 0xffffffff & ~(AT91_MCI_SDIOIRQA | AT91_MCI_SDIOIRQB));
 698
 699        cmd->resp[0] = at91_mci_read(host, AT91_MCI_RSPR(0));
 700        cmd->resp[1] = at91_mci_read(host, AT91_MCI_RSPR(1));
 701        cmd->resp[2] = at91_mci_read(host, AT91_MCI_RSPR(2));
 702        cmd->resp[3] = at91_mci_read(host, AT91_MCI_RSPR(3));
 703
 704        if (host->buffer) {
 705                dma_unmap_single(NULL,
 706                                host->physical_address, host->total_length,
 707                                DMA_TO_DEVICE);
 708                kfree(host->buffer);
 709                host->buffer = NULL;
 710        }
 711
 712        pr_debug("Status = %08X/%08x [%08X %08X %08X %08X]\n",
 713                 status, at91_mci_read(host, AT91_MCI_SR),
 714                 cmd->resp[0], cmd->resp[1], cmd->resp[2], cmd->resp[3]);
 715
 716        if (status & AT91_MCI_ERRORS) {
 717                if ((status & AT91_MCI_RCRCE) && !(mmc_resp_type(cmd) & MMC_RSP_CRC)) {
 718                        cmd->error = 0;
 719                }
 720                else {
 721                        if (status & (AT91_MCI_DTOE | AT91_MCI_DCRCE)) {
 722                                if (data) {
 723                                        if (status & AT91_MCI_DTOE)
 724                                                data->error = -ETIMEDOUT;
 725                                        else if (status & AT91_MCI_DCRCE)
 726                                                data->error = -EILSEQ;
 727                                }
 728                        } else {
 729                                if (status & AT91_MCI_RTOE)
 730                                        cmd->error = -ETIMEDOUT;
 731                                else if (status & AT91_MCI_RCRCE)
 732                                        cmd->error = -EILSEQ;
 733                                else
 734                                        cmd->error = -EIO;
 735                        }
 736
 737                        pr_debug("Error detected and set to %d/%d (cmd = %d, retries = %d)\n",
 738                                cmd->error, data ? data->error : 0,
 739                                 cmd->opcode, cmd->retries);
 740                }
 741        }
 742        else
 743                cmd->error = 0;
 744
 745        at91_mci_process_next(host);
 746}
 747
 748/*
 749 * Handle an MMC request
 750 */
 751static void at91_mci_request(struct mmc_host *mmc, struct mmc_request *mrq)
 752{
 753        struct at91mci_host *host = mmc_priv(mmc);
 754        host->request = mrq;
 755        host->flags = 0;
 756
 757        mod_timer(&host->timer, jiffies +  HZ);
 758
 759        at91_mci_process_next(host);
 760}
 761
 762/*
 763 * Set the IOS
 764 */
 765static void at91_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
 766{
 767        int clkdiv;
 768        struct at91mci_host *host = mmc_priv(mmc);
 769        unsigned long at91_master_clock = clk_get_rate(host->mci_clk);
 770
 771        host->bus_mode = ios->bus_mode;
 772
 773        if (ios->clock == 0) {
 774                /* Disable the MCI controller */
 775                at91_mci_write(host, AT91_MCI_CR, AT91_MCI_MCIDIS);
 776                clkdiv = 0;
 777        }
 778        else {
 779                /* Enable the MCI controller */
 780                at91_mci_write(host, AT91_MCI_CR, AT91_MCI_MCIEN);
 781
 782                if ((at91_master_clock % (ios->clock * 2)) == 0)
 783                        clkdiv = ((at91_master_clock / ios->clock) / 2) - 1;
 784                else
 785                        clkdiv = (at91_master_clock / ios->clock) / 2;
 786
 787                pr_debug("clkdiv = %d. mcck = %ld\n", clkdiv,
 788                        at91_master_clock / (2 * (clkdiv + 1)));
 789        }
 790        if (ios->bus_width == MMC_BUS_WIDTH_4 && host->board->wire4) {
 791                pr_debug("MMC: Setting controller bus width to 4\n");
 792                at91_mci_write(host, AT91_MCI_SDCR, at91_mci_read(host, AT91_MCI_SDCR) | AT91_MCI_SDCBUS);
 793        }
 794        else {
 795                pr_debug("MMC: Setting controller bus width to 1\n");
 796                at91_mci_write(host, AT91_MCI_SDCR, at91_mci_read(host, AT91_MCI_SDCR) & ~AT91_MCI_SDCBUS);
 797        }
 798
 799        /* Set the clock divider */
 800        at91_mci_write(host, AT91_MCI_MR, (at91_mci_read(host, AT91_MCI_MR) & ~AT91_MCI_CLKDIV) | clkdiv);
 801
 802        /* maybe switch power to the card */
 803        if (host->board->vcc_pin) {
 804                switch (ios->power_mode) {
 805                        case MMC_POWER_OFF:
 806                                gpio_set_value(host->board->vcc_pin, 0);
 807                                break;
 808                        case MMC_POWER_UP:
 809                                gpio_set_value(host->board->vcc_pin, 1);
 810                                break;
 811                        case MMC_POWER_ON:
 812                                break;
 813                        default:
 814                                WARN_ON(1);
 815                }
 816        }
 817}
 818
 819/*
 820 * Handle an interrupt
 821 */
 822static irqreturn_t at91_mci_irq(int irq, void *devid)
 823{
 824        struct at91mci_host *host = devid;
 825        int completed = 0;
 826        unsigned int int_status, int_mask;
 827
 828        int_status = at91_mci_read(host, AT91_MCI_SR);
 829        int_mask = at91_mci_read(host, AT91_MCI_IMR);
 830
 831        pr_debug("MCI irq: status = %08X, %08X, %08X\n", int_status, int_mask,
 832                int_status & int_mask);
 833
 834        int_status = int_status & int_mask;
 835
 836        if (int_status & AT91_MCI_ERRORS) {
 837                completed = 1;
 838
 839                if (int_status & AT91_MCI_UNRE)
 840                        pr_debug("MMC: Underrun error\n");
 841                if (int_status & AT91_MCI_OVRE)
 842                        pr_debug("MMC: Overrun error\n");
 843                if (int_status & AT91_MCI_DTOE)
 844                        pr_debug("MMC: Data timeout\n");
 845                if (int_status & AT91_MCI_DCRCE)
 846                        pr_debug("MMC: CRC error in data\n");
 847                if (int_status & AT91_MCI_RTOE)
 848                        pr_debug("MMC: Response timeout\n");
 849                if (int_status & AT91_MCI_RENDE)
 850                        pr_debug("MMC: Response end bit error\n");
 851                if (int_status & AT91_MCI_RCRCE)
 852                        pr_debug("MMC: Response CRC error\n");
 853                if (int_status & AT91_MCI_RDIRE)
 854                        pr_debug("MMC: Response direction error\n");
 855                if (int_status & AT91_MCI_RINDE)
 856                        pr_debug("MMC: Response index error\n");
 857        } else {
 858                /* Only continue processing if no errors */
 859
 860                if (int_status & AT91_MCI_TXBUFE) {
 861                        pr_debug("TX buffer empty\n");
 862                        at91_mci_handle_transmitted(host);
 863                }
 864
 865                if (int_status & AT91_MCI_ENDRX) {
 866                        pr_debug("ENDRX\n");
 867                        at91_mci_post_dma_read(host);
 868                }
 869
 870                if (int_status & AT91_MCI_RXBUFF) {
 871                        pr_debug("RX buffer full\n");
 872                        at91_mci_write(host, ATMEL_PDC_PTCR, ATMEL_PDC_RXTDIS | ATMEL_PDC_TXTDIS);
 873                        at91_mci_write(host, AT91_MCI_IDR, AT91_MCI_RXBUFF | AT91_MCI_ENDRX);
 874                        completed = 1;
 875                }
 876
 877                if (int_status & AT91_MCI_ENDTX)
 878                        pr_debug("Transmit has ended\n");
 879
 880                if (int_status & AT91_MCI_NOTBUSY) {
 881                        pr_debug("Card is ready\n");
 882                        at91_mci_update_bytes_xfered(host);
 883                        completed = 1;
 884                }
 885
 886                if (int_status & AT91_MCI_DTIP)
 887                        pr_debug("Data transfer in progress\n");
 888
 889                if (int_status & AT91_MCI_BLKE) {
 890                        pr_debug("Block transfer has ended\n");
 891                        if (host->request->data && host->request->data->blocks > 1) {
 892                                /* multi block write : complete multi write
 893                                 * command and send stop */
 894                                completed = 1;
 895                        } else {
 896                                at91_mci_write(host, AT91_MCI_IER, AT91_MCI_NOTBUSY);
 897                        }
 898                }
 899
 900                if (int_status & AT91_MCI_SDIOIRQA)
 901                        mmc_signal_sdio_irq(host->mmc);
 902
 903                if (int_status & AT91_MCI_SDIOIRQB)
 904                        mmc_signal_sdio_irq(host->mmc);
 905
 906                if (int_status & AT91_MCI_TXRDY)
 907                        pr_debug("Ready to transmit\n");
 908
 909                if (int_status & AT91_MCI_RXRDY)
 910                        pr_debug("Ready to receive\n");
 911
 912                if (int_status & AT91_MCI_CMDRDY) {
 913                        pr_debug("Command ready\n");
 914                        completed = at91_mci_handle_cmdrdy(host);
 915                }
 916        }
 917
 918        if (completed) {
 919                pr_debug("Completed command\n");
 920                at91_mci_write(host, AT91_MCI_IDR, 0xffffffff & ~(AT91_MCI_SDIOIRQA | AT91_MCI_SDIOIRQB));
 921                at91_mci_completed_command(host, int_status);
 922        } else
 923                at91_mci_write(host, AT91_MCI_IDR, int_status & ~(AT91_MCI_SDIOIRQA | AT91_MCI_SDIOIRQB));
 924
 925        return IRQ_HANDLED;
 926}
 927
 928static irqreturn_t at91_mmc_det_irq(int irq, void *_host)
 929{
 930        struct at91mci_host *host = _host;
 931        int present = !gpio_get_value(irq_to_gpio(irq));
 932
 933        /*
 934         * we expect this irq on both insert and remove,
 935         * and use a short delay to debounce.
 936         */
 937        if (present != host->present) {
 938                host->present = present;
 939                pr_debug("%s: card %s\n", mmc_hostname(host->mmc),
 940                        present ? "insert" : "remove");
 941                if (!present) {
 942                        pr_debug("****** Resetting SD-card bus width ******\n");
 943                        at91_mci_write(host, AT91_MCI_SDCR, at91_mci_read(host, AT91_MCI_SDCR) & ~AT91_MCI_SDCBUS);
 944                }
 945                mmc_detect_change(host->mmc, msecs_to_jiffies(100));
 946        }
 947        return IRQ_HANDLED;
 948}
 949
 950static int at91_mci_get_ro(struct mmc_host *mmc)
 951{
 952        struct at91mci_host *host = mmc_priv(mmc);
 953
 954        if (host->board->wp_pin)
 955                return !!gpio_get_value(host->board->wp_pin);
 956        /*
 957         * Board doesn't support read only detection; let the mmc core
 958         * decide what to do.
 959         */
 960        return -ENOSYS;
 961}
 962
 963static void at91_mci_enable_sdio_irq(struct mmc_host *mmc, int enable)
 964{
 965        struct at91mci_host *host = mmc_priv(mmc);
 966
 967        pr_debug("%s: sdio_irq %c : %s\n", mmc_hostname(host->mmc),
 968                host->board->slot_b ? 'B':'A', enable ? "enable" : "disable");
 969        at91_mci_write(host, enable ? AT91_MCI_IER : AT91_MCI_IDR,
 970                host->board->slot_b ? AT91_MCI_SDIOIRQB : AT91_MCI_SDIOIRQA);
 971
 972}
 973
 974static const struct mmc_host_ops at91_mci_ops = {
 975        .request        = at91_mci_request,
 976        .set_ios        = at91_mci_set_ios,
 977        .get_ro         = at91_mci_get_ro,
 978        .enable_sdio_irq = at91_mci_enable_sdio_irq,
 979};
 980
 981/*
 982 * Probe for the device
 983 */
 984static int __init at91_mci_probe(struct platform_device *pdev)
 985{
 986        struct mmc_host *mmc;
 987        struct at91mci_host *host;
 988        struct resource *res;
 989        int ret;
 990
 991        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 992        if (!res)
 993                return -ENXIO;
 994
 995        if (!request_mem_region(res->start, res->end - res->start + 1, DRIVER_NAME))
 996                return -EBUSY;
 997
 998        mmc = mmc_alloc_host(sizeof(struct at91mci_host), &pdev->dev);
 999        if (!mmc) {
1000                ret = -ENOMEM;
1001                dev_dbg(&pdev->dev, "couldn't allocate mmc host\n");
1002                goto fail6;
1003        }
1004
1005        mmc->ops = &at91_mci_ops;
1006        mmc->f_min = 375000;
1007        mmc->f_max = 25000000;
1008        mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
1009        mmc->caps = MMC_CAP_SDIO_IRQ;
1010
1011        mmc->max_blk_size = 4095;
1012        mmc->max_blk_count = mmc->max_req_size;
1013
1014        host = mmc_priv(mmc);
1015        host->mmc = mmc;
1016        host->buffer = NULL;
1017        host->bus_mode = 0;
1018        host->board = pdev->dev.platform_data;
1019        if (host->board->wire4) {
1020                if (cpu_is_at91sam9260() || cpu_is_at91sam9263())
1021                        mmc->caps |= MMC_CAP_4_BIT_DATA;
1022                else
1023                        dev_warn(&pdev->dev, "4 wire bus mode not supported"
1024                                " - using 1 wire\n");
1025        }
1026
1027        /*
1028         * Reserve GPIOs ... board init code makes sure these pins are set
1029         * up as GPIOs with the right direction (input, except for vcc)
1030         */
1031        if (host->board->det_pin) {
1032                ret = gpio_request(host->board->det_pin, "mmc_detect");
1033                if (ret < 0) {
1034                        dev_dbg(&pdev->dev, "couldn't claim card detect pin\n");
1035                        goto fail5;
1036                }
1037        }
1038        if (host->board->wp_pin) {
1039                ret = gpio_request(host->board->wp_pin, "mmc_wp");
1040                if (ret < 0) {
1041                        dev_dbg(&pdev->dev, "couldn't claim wp sense pin\n");
1042                        goto fail4;
1043                }
1044        }
1045        if (host->board->vcc_pin) {
1046                ret = gpio_request(host->board->vcc_pin, "mmc_vcc");
1047                if (ret < 0) {
1048                        dev_dbg(&pdev->dev, "couldn't claim vcc switch pin\n");
1049                        goto fail3;
1050                }
1051        }
1052
1053        /*
1054         * Get Clock
1055         */
1056        host->mci_clk = clk_get(&pdev->dev, "mci_clk");
1057        if (IS_ERR(host->mci_clk)) {
1058                ret = -ENODEV;
1059                dev_dbg(&pdev->dev, "no mci_clk?\n");
1060                goto fail2;
1061        }
1062
1063        /*
1064         * Map I/O region
1065         */
1066        host->baseaddr = ioremap(res->start, res->end - res->start + 1);
1067        if (!host->baseaddr) {
1068                ret = -ENOMEM;
1069                goto fail1;
1070        }
1071
1072        /*
1073         * Reset hardware
1074         */
1075        clk_enable(host->mci_clk);              /* Enable the peripheral clock */
1076        at91_mci_disable(host);
1077        at91_mci_enable(host);
1078
1079        /*
1080         * Allocate the MCI interrupt
1081         */
1082        host->irq = platform_get_irq(pdev, 0);
1083        ret = request_irq(host->irq, at91_mci_irq, IRQF_SHARED,
1084                        mmc_hostname(mmc), host);
1085        if (ret) {
1086                dev_dbg(&pdev->dev, "request MCI interrupt failed\n");
1087                goto fail0;
1088        }
1089
1090        setup_timer(&host->timer, at91_timeout_timer, (unsigned long)host);
1091
1092        platform_set_drvdata(pdev, mmc);
1093
1094        /*
1095         * Add host to MMC layer
1096         */
1097        if (host->board->det_pin) {
1098                host->present = !gpio_get_value(host->board->det_pin);
1099        }
1100        else
1101                host->present = -1;
1102
1103        mmc_add_host(mmc);
1104
1105        /*
1106         * monitor card insertion/removal if we can
1107         */
1108        if (host->board->det_pin) {
1109                ret = request_irq(gpio_to_irq(host->board->det_pin),
1110                                at91_mmc_det_irq, 0, mmc_hostname(mmc), host);
1111                if (ret)
1112                        dev_warn(&pdev->dev, "request MMC detect irq failed\n");
1113                else
1114                        device_init_wakeup(&pdev->dev, 1);
1115        }
1116
1117        pr_debug("Added MCI driver\n");
1118
1119        return 0;
1120
1121fail0:
1122        clk_disable(host->mci_clk);
1123        iounmap(host->baseaddr);
1124fail1:
1125        clk_put(host->mci_clk);
1126fail2:
1127        if (host->board->vcc_pin)
1128                gpio_free(host->board->vcc_pin);
1129fail3:
1130        if (host->board->wp_pin)
1131                gpio_free(host->board->wp_pin);
1132fail4:
1133        if (host->board->det_pin)
1134                gpio_free(host->board->det_pin);
1135fail5:
1136        mmc_free_host(mmc);
1137fail6:
1138        release_mem_region(res->start, res->end - res->start + 1);
1139        dev_err(&pdev->dev, "probe failed, err %d\n", ret);
1140        return ret;
1141}
1142
1143/*
1144 * Remove a device
1145 */
1146static int __exit at91_mci_remove(struct platform_device *pdev)
1147{
1148        struct mmc_host *mmc = platform_get_drvdata(pdev);
1149        struct at91mci_host *host;
1150        struct resource *res;
1151
1152        if (!mmc)
1153                return -1;
1154
1155        host = mmc_priv(mmc);
1156
1157        if (host->board->det_pin) {
1158                if (device_can_wakeup(&pdev->dev))
1159                        free_irq(gpio_to_irq(host->board->det_pin), host);
1160                device_init_wakeup(&pdev->dev, 0);
1161                gpio_free(host->board->det_pin);
1162        }
1163
1164        at91_mci_disable(host);
1165        del_timer_sync(&host->timer);
1166        mmc_remove_host(mmc);
1167        free_irq(host->irq, host);
1168
1169        clk_disable(host->mci_clk);                     /* Disable the peripheral clock */
1170        clk_put(host->mci_clk);
1171
1172        if (host->board->vcc_pin)
1173                gpio_free(host->board->vcc_pin);
1174        if (host->board->wp_pin)
1175                gpio_free(host->board->wp_pin);
1176
1177        iounmap(host->baseaddr);
1178        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1179        release_mem_region(res->start, res->end - res->start + 1);
1180
1181        mmc_free_host(mmc);
1182        platform_set_drvdata(pdev, NULL);
1183        pr_debug("MCI Removed\n");
1184
1185        return 0;
1186}
1187
1188#ifdef CONFIG_PM
1189static int at91_mci_suspend(struct platform_device *pdev, pm_message_t state)
1190{
1191        struct mmc_host *mmc = platform_get_drvdata(pdev);
1192        struct at91mci_host *host = mmc_priv(mmc);
1193        int ret = 0;
1194
1195        if (host->board->det_pin && device_may_wakeup(&pdev->dev))
1196                enable_irq_wake(host->board->det_pin);
1197
1198        if (mmc)
1199                ret = mmc_suspend_host(mmc, state);
1200
1201        return ret;
1202}
1203
1204static int at91_mci_resume(struct platform_device *pdev)
1205{
1206        struct mmc_host *mmc = platform_get_drvdata(pdev);
1207        struct at91mci_host *host = mmc_priv(mmc);
1208        int ret = 0;
1209
1210        if (host->board->det_pin && device_may_wakeup(&pdev->dev))
1211                disable_irq_wake(host->board->det_pin);
1212
1213        if (mmc)
1214                ret = mmc_resume_host(mmc);
1215
1216        return ret;
1217}
1218#else
1219#define at91_mci_suspend        NULL
1220#define at91_mci_resume         NULL
1221#endif
1222
1223static struct platform_driver at91_mci_driver = {
1224        .remove         = __exit_p(at91_mci_remove),
1225        .suspend        = at91_mci_suspend,
1226        .resume         = at91_mci_resume,
1227        .driver         = {
1228                .name   = DRIVER_NAME,
1229                .owner  = THIS_MODULE,
1230        },
1231};
1232
1233static int __init at91_mci_init(void)
1234{
1235        return platform_driver_probe(&at91_mci_driver, at91_mci_probe);
1236}
1237
1238static void __exit at91_mci_exit(void)
1239{
1240        platform_driver_unregister(&at91_mci_driver);
1241}
1242
1243module_init(at91_mci_init);
1244module_exit(at91_mci_exit);
1245
1246MODULE_DESCRIPTION("AT91 Multimedia Card Interface driver");
1247MODULE_AUTHOR("Nick Randell");
1248MODULE_LICENSE("GPL");
1249MODULE_ALIAS("platform:at91_mci");
1250