x86/amd-iommu: Add per IOMMU reference counting
[linux/fpc-iii.git] / drivers / mmc / host / at91_mci.c
blob63924e0c7ea9a6c3fab8c2b38857be8832149612
1 /*
2 * linux/drivers/mmc/host/at91_mci.c - ATMEL AT91 MCI Driver
4 * Copyright (C) 2005 Cougar Creek Computing Devices Ltd, All Rights Reserved
6 * Copyright (C) 2006 Malcolm Noyes
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.
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.
18 The three entry points are at91_mci_request, at91_mci_set_ios
19 and at91_mci_get_ro.
21 SET IOS
22 This configures the device to put it into the correct mode and clock speed
23 required.
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.
30 There are three main types of request, commands, reads and writes.
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.
37 Reads and writes work in a similar manner to normal commands but involve the PDC (DMA)
38 controller to manage the transfers.
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.
44 The sequence of read interrupts is: ENDRX, RXBUFF, CMDRDY
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.
50 The sequence of write interrupts is: ENDTX, TXBUFE, NOTBUSY, CMDRDY
52 GET RO
53 Gets the status of the write protect pin, if available.
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>
69 #include <linux/mmc/host.h>
71 #include <asm/io.h>
72 #include <asm/irq.h>
73 #include <asm/gpio.h>
75 #include <mach/board.h>
76 #include <mach/cpu.h>
77 #include <mach/at91_mci.h>
79 #define DRIVER_NAME "at91_mci"
81 #define FL_SENT_COMMAND (1 << 0)
82 #define FL_SENT_STOP (1 << 1)
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)
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))
93 * Low level type for this driver
95 struct at91mci_host
97 struct mmc_host *mmc;
98 struct mmc_command *cmd;
99 struct mmc_request *request;
101 void __iomem *baseaddr;
102 int irq;
104 struct at91_mmc_data *board;
105 int present;
107 struct clk *mci_clk;
110 * Flag indicating when the command has been sent. This is used to
111 * work out whether or not to send the stop
113 unsigned int flags;
114 /* flag for current bus settings */
115 u32 bus_mode;
117 /* DMA buffer used for transmitting */
118 unsigned int* buffer;
119 dma_addr_t physical_address;
120 unsigned int total_length;
122 /* Latest in the scatterlist that has been enabled for transfer, but not freed */
123 int in_use_index;
125 /* Latest in the scatterlist that has been enabled for transfer */
126 int transfer_index;
128 /* Timer for timeouts */
129 struct timer_list timer;
133 * Reset the controller and restore most of the state
135 static void at91_reset_host(struct at91mci_host *host)
137 unsigned long flags;
138 u32 mr;
139 u32 sdcr;
140 u32 dtor;
141 u32 imr;
143 local_irq_save(flags);
144 imr = at91_mci_read(host, AT91_MCI_IMR);
146 at91_mci_write(host, AT91_MCI_IDR, 0xffffffff);
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);
153 /* reset the controller */
154 at91_mci_write(host, AT91_MCI_CR, AT91_MCI_MCIDIS | AT91_MCI_SWRST);
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);
163 /* make sure sdio interrupts will fire */
164 at91_mci_read(host, AT91_MCI_SR);
166 local_irq_restore(flags);
169 static void at91_timeout_timer(unsigned long data)
171 struct at91mci_host *host;
173 host = (struct at91mci_host *)data;
175 if (host->request) {
176 dev_err(host->mmc->parent, "Timeout waiting end of packet\n");
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;
187 at91_reset_host(host);
188 mmc_request_done(host->mmc, host->request);
193 * Copy from sg to a dma block - used for transfers
195 static inline void at91_mci_sg_to_dma(struct at91mci_host *host, struct mmc_data *data)
197 unsigned int len, i, size;
198 unsigned *dmabuf = host->buffer;
200 size = data->blksz * data->blocks;
201 len = data->sg_len;
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);
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.
213 for (i = 0; i < len; i++) {
214 struct scatterlist *sg;
215 int amount;
216 unsigned int *sgbuffer;
218 sg = &data->sg[i];
220 sgbuffer = kmap_atomic(sg_page(sg), KM_BIO_SRC_IRQ) + sg->offset;
221 amount = min(size, sg->length);
222 size -= amount;
224 if (cpu_is_at91rm9200()) { /* AT91RM9200 errata */
225 int index;
227 for (index = 0; index < (amount / 4); index++)
228 *dmabuf++ = swab32(sgbuffer[index]);
229 } else {
230 memcpy(dmabuf, sgbuffer, amount);
231 dmabuf += amount;
234 kunmap_atomic(sgbuffer, KM_BIO_SRC_IRQ);
236 if (size == 0)
237 break;
241 * Check that we didn't get a request to transfer
242 * more data than can fit into the SG list.
244 BUG_ON(size != 0);
248 * Prepare a dma read
250 static void at91_mci_pre_dma_read(struct at91mci_host *host)
252 int i;
253 struct scatterlist *sg;
254 struct mmc_command *cmd;
255 struct mmc_data *data;
257 pr_debug("pre dma read\n");
259 cmd = host->cmd;
260 if (!cmd) {
261 pr_debug("no command\n");
262 return;
265 data = cmd->data;
266 if (!data) {
267 pr_debug("no data\n");
268 return;
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;
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;
285 else {
286 if (at91_mci_read(host, ATMEL_PDC_RNCR) != 0) {
287 pr_debug("Transfer active in next\n");
288 continue;
292 /* Setup the next transfer */
293 pr_debug("Using transfer index %d\n", host->transfer_index);
295 sg = &data->sg[host->transfer_index++];
296 pr_debug("sg = %p\n", sg);
298 sg->dma_address = dma_map_page(NULL, sg_page(sg), sg->offset, sg->length, DMA_FROM_DEVICE);
300 pr_debug("dma address = %08X, length = %d\n", sg->dma_address, sg->length);
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);
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);
312 pr_debug("pre dma read done\n");
316 * Handle after a dma read
318 static void at91_mci_post_dma_read(struct at91mci_host *host)
320 struct mmc_command *cmd;
321 struct mmc_data *data;
323 pr_debug("post dma read\n");
325 cmd = host->cmd;
326 if (!cmd) {
327 pr_debug("no command\n");
328 return;
331 data = cmd->data;
332 if (!data) {
333 pr_debug("no data\n");
334 return;
337 while (host->in_use_index < host->transfer_index) {
338 struct scatterlist *sg;
340 pr_debug("finishing index %d\n", host->in_use_index);
342 sg = &data->sg[host->in_use_index++];
344 pr_debug("Unmapping page %08X\n", sg->dma_address);
346 dma_unmap_page(NULL, sg->dma_address, sg->length, DMA_FROM_DEVICE);
348 if (cpu_is_at91rm9200()) { /* AT91RM9200 errata */
349 unsigned int *buffer;
350 int index;
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);
356 for (index = 0; index < (sg->length / 4); index++)
357 buffer[index] = swab32(buffer[index]);
359 kunmap_atomic(buffer, KM_BIO_SRC_IRQ);
362 flush_dcache_page(sg_page(sg));
364 data->bytes_xfered += sg->length;
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);
375 pr_debug("post dma read done\n");
379 * Handle transmitted data
381 static void at91_mci_handle_transmitted(struct at91mci_host *host)
383 struct mmc_command *cmd;
384 struct mmc_data *data;
386 pr_debug("Handling the transmit\n");
388 /* Disable the transfer */
389 at91_mci_write(host, ATMEL_PDC_PTCR, ATMEL_PDC_RXTDIS | ATMEL_PDC_TXTDIS);
391 /* Now wait for cmd ready */
392 at91_mci_write(host, AT91_MCI_IDR, AT91_MCI_TXBUFE);
394 cmd = host->cmd;
395 if (!cmd) return;
397 data = cmd->data;
398 if (!data) return;
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);
408 * Update bytes tranfered count during a write operation
410 static void at91_mci_update_bytes_xfered(struct at91mci_host *host)
412 struct mmc_data *data;
414 /* always deal with the effective request (and not the current cmd) */
416 if (host->request->cmd && host->request->cmd->error != 0)
417 return;
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;
431 /*Handle after command sent ready*/
432 static int at91_mci_handle_cmdrdy(struct at91mci_host *host)
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);
447 /* command not completed, have to wait */
448 return 0;
453 * Enable the controller
455 static void at91_mci_enable(struct at91mci_host *host)
457 unsigned int mr;
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;
464 if (cpu_is_at91sam9260() || cpu_is_at91sam9263())
465 mr |= AT91_MCI_RDPROOF | AT91_MCI_WRPROOF;
467 at91_mci_write(host, AT91_MCI_MR, mr);
469 /* use Slot A or B (only one at same time) */
470 at91_mci_write(host, AT91_MCI_SDCR, host->board->slot_b);
474 * Disable the controller
476 static void at91_mci_disable(struct at91mci_host *host)
478 at91_mci_write(host, AT91_MCI_CR, AT91_MCI_MCIDIS | AT91_MCI_SWRST);
482 * Send a command
484 static void at91_mci_send_command(struct at91mci_host *host, struct mmc_command *cmd)
486 unsigned int cmdr, mr;
487 unsigned int block_length;
488 struct mmc_data *data = cmd->data;
490 unsigned int blocks;
491 unsigned int ier = 0;
493 host->cmd = cmd;
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));
506 cmdr = cmd->opcode;
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;
520 if (data) {
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;
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;
537 block_length = data->blksz;
538 blocks = data->blocks;
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;
546 if (data->flags & MMC_DATA_STREAM)
547 cmdr |= AT91_MCI_TRTYP_STREAM;
548 if (data->blocks > 1)
549 cmdr |= AT91_MCI_TRTYP_MULTIPLE;
551 else {
552 block_length = 0;
553 blocks = 0;
556 if (host->flags & FL_SENT_STOP)
557 cmdr |= AT91_MCI_TRCMD_STOP;
559 if (host->bus_mode == MMC_BUSMODE_OPENDRAIN)
560 cmdr |= AT91_MCI_OPDCMD;
563 * Set the arguments and send the command
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));
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);
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));
593 * Disable the PDC controller
595 at91_mci_write(host, ATMEL_PDC_PTCR, ATMEL_PDC_RXTDIS | ATMEL_PDC_TXTDIS);
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) {
603 * Handle a read
605 host->buffer = NULL;
606 host->total_length = 0;
608 at91_mci_pre_dma_read(host);
609 ier = AT91_MCI_ENDRX /* | AT91_MCI_RXBUFF */;
611 else {
613 * Handle a write
615 host->total_length = block_length * blocks;
617 * AT91SAM926[0/3] Data Write Operation and
618 * number of bytes erratum
620 if (cpu_is_at91sam9260 () || cpu_is_at91sam9263())
621 if (host->total_length < 12)
622 host->total_length = 12;
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;
632 at91_mci_sg_to_dma(host, data);
634 host->physical_address = dma_map_single(NULL,
635 host->buffer, host->total_length,
636 DMA_TO_DEVICE);
638 pr_debug("Transmitting %d bytes\n", host->total_length);
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);
644 ier = AT91_MCI_CMDRDY;
650 * Send the command and then enable the PDC - not the other way round as
651 * the data sheet says
654 at91_mci_write(host, AT91_MCI_ARGR, cmd->arg);
655 at91_mci_write(host, AT91_MCI_CMDR, cmdr);
657 if (cmdr & AT91_MCI_TRCMD_START) {
658 if (cmdr & AT91_MCI_TRDIR)
659 at91_mci_write(host, ATMEL_PDC_PTCR, ATMEL_PDC_RXTEN);
662 /* Enable selected interrupts */
663 at91_mci_write(host, AT91_MCI_IER, AT91_MCI_ERRORS | ier);
667 * Process the next step in the request
669 static void at91_mci_process_next(struct at91mci_host *host)
671 if (!(host->flags & FL_SENT_COMMAND)) {
672 host->flags |= FL_SENT_COMMAND;
673 at91_mci_send_command(host, host->request->cmd);
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.
683 if (cpu_is_at91rm9200())
684 at91_reset_host(host);
685 mmc_request_done(host->mmc, host->request);
690 * Handle a command that has been completed
692 static void at91_mci_completed_command(struct at91mci_host *host, unsigned int status)
694 struct mmc_command *cmd = host->cmd;
695 struct mmc_data *data = cmd->data;
697 at91_mci_write(host, AT91_MCI_IDR, 0xffffffff & ~(AT91_MCI_SDIOIRQA | AT91_MCI_SDIOIRQB));
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));
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;
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]);
716 if (status & AT91_MCI_ERRORS) {
717 if ((status & AT91_MCI_RCRCE) && !(mmc_resp_type(cmd) & MMC_RSP_CRC)) {
718 cmd->error = 0;
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;
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;
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);
742 else
743 cmd->error = 0;
745 at91_mci_process_next(host);
749 * Handle an MMC request
751 static void at91_mci_request(struct mmc_host *mmc, struct mmc_request *mrq)
753 struct at91mci_host *host = mmc_priv(mmc);
754 host->request = mrq;
755 host->flags = 0;
757 mod_timer(&host->timer, jiffies + HZ);
759 at91_mci_process_next(host);
763 * Set the IOS
765 static void at91_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
767 int clkdiv;
768 struct at91mci_host *host = mmc_priv(mmc);
769 unsigned long at91_master_clock = clk_get_rate(host->mci_clk);
771 host->bus_mode = ios->bus_mode;
773 if (ios->clock == 0) {
774 /* Disable the MCI controller */
775 at91_mci_write(host, AT91_MCI_CR, AT91_MCI_MCIDIS);
776 clkdiv = 0;
778 else {
779 /* Enable the MCI controller */
780 at91_mci_write(host, AT91_MCI_CR, AT91_MCI_MCIEN);
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;
787 pr_debug("clkdiv = %d. mcck = %ld\n", clkdiv,
788 at91_master_clock / (2 * (clkdiv + 1)));
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);
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);
799 /* Set the clock divider */
800 at91_mci_write(host, AT91_MCI_MR, (at91_mci_read(host, AT91_MCI_MR) & ~AT91_MCI_CLKDIV) | clkdiv);
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);
820 * Handle an interrupt
822 static irqreturn_t at91_mci_irq(int irq, void *devid)
824 struct at91mci_host *host = devid;
825 int completed = 0;
826 unsigned int int_status, int_mask;
828 int_status = at91_mci_read(host, AT91_MCI_SR);
829 int_mask = at91_mci_read(host, AT91_MCI_IMR);
831 pr_debug("MCI irq: status = %08X, %08X, %08X\n", int_status, int_mask,
832 int_status & int_mask);
834 int_status = int_status & int_mask;
836 if (int_status & AT91_MCI_ERRORS) {
837 completed = 1;
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 */
860 if (int_status & AT91_MCI_TXBUFE) {
861 pr_debug("TX buffer empty\n");
862 at91_mci_handle_transmitted(host);
865 if (int_status & AT91_MCI_ENDRX) {
866 pr_debug("ENDRX\n");
867 at91_mci_post_dma_read(host);
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;
877 if (int_status & AT91_MCI_ENDTX)
878 pr_debug("Transmit has ended\n");
880 if (int_status & AT91_MCI_NOTBUSY) {
881 pr_debug("Card is ready\n");
882 at91_mci_update_bytes_xfered(host);
883 completed = 1;
886 if (int_status & AT91_MCI_DTIP)
887 pr_debug("Data transfer in progress\n");
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);
900 if (int_status & AT91_MCI_SDIOIRQA)
901 mmc_signal_sdio_irq(host->mmc);
903 if (int_status & AT91_MCI_SDIOIRQB)
904 mmc_signal_sdio_irq(host->mmc);
906 if (int_status & AT91_MCI_TXRDY)
907 pr_debug("Ready to transmit\n");
909 if (int_status & AT91_MCI_RXRDY)
910 pr_debug("Ready to receive\n");
912 if (int_status & AT91_MCI_CMDRDY) {
913 pr_debug("Command ready\n");
914 completed = at91_mci_handle_cmdrdy(host);
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));
925 return IRQ_HANDLED;
928 static irqreturn_t at91_mmc_det_irq(int irq, void *_host)
930 struct at91mci_host *host = _host;
931 int present = !gpio_get_value(irq_to_gpio(irq));
934 * we expect this irq on both insert and remove,
935 * and use a short delay to debounce.
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);
945 mmc_detect_change(host->mmc, msecs_to_jiffies(100));
947 return IRQ_HANDLED;
950 static int at91_mci_get_ro(struct mmc_host *mmc)
952 struct at91mci_host *host = mmc_priv(mmc);
954 if (host->board->wp_pin)
955 return !!gpio_get_value(host->board->wp_pin);
957 * Board doesn't support read only detection; let the mmc core
958 * decide what to do.
960 return -ENOSYS;
963 static void at91_mci_enable_sdio_irq(struct mmc_host *mmc, int enable)
965 struct at91mci_host *host = mmc_priv(mmc);
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);
974 static 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,
982 * Probe for the device
984 static int __init at91_mci_probe(struct platform_device *pdev)
986 struct mmc_host *mmc;
987 struct at91mci_host *host;
988 struct resource *res;
989 int ret;
991 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
992 if (!res)
993 return -ENXIO;
995 if (!request_mem_region(res->start, res->end - res->start + 1, DRIVER_NAME))
996 return -EBUSY;
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;
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;
1011 mmc->max_blk_size = 4095;
1012 mmc->max_blk_count = mmc->max_req_size;
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");
1028 * Reserve GPIOs ... board init code makes sure these pins are set
1029 * up as GPIOs with the right direction (input, except for vcc)
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;
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;
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;
1054 * Get Clock
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;
1064 * Map I/O region
1066 host->baseaddr = ioremap(res->start, res->end - res->start + 1);
1067 if (!host->baseaddr) {
1068 ret = -ENOMEM;
1069 goto fail1;
1073 * Reset hardware
1075 clk_enable(host->mci_clk); /* Enable the peripheral clock */
1076 at91_mci_disable(host);
1077 at91_mci_enable(host);
1080 * Allocate the MCI interrupt
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;
1090 setup_timer(&host->timer, at91_timeout_timer, (unsigned long)host);
1092 platform_set_drvdata(pdev, mmc);
1095 * Add host to MMC layer
1097 if (host->board->det_pin) {
1098 host->present = !gpio_get_value(host->board->det_pin);
1100 else
1101 host->present = -1;
1103 mmc_add_host(mmc);
1106 * monitor card insertion/removal if we can
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);
1117 pr_debug("Added MCI driver\n");
1119 return 0;
1121 fail0:
1122 clk_disable(host->mci_clk);
1123 iounmap(host->baseaddr);
1124 fail1:
1125 clk_put(host->mci_clk);
1126 fail2:
1127 if (host->board->vcc_pin)
1128 gpio_free(host->board->vcc_pin);
1129 fail3:
1130 if (host->board->wp_pin)
1131 gpio_free(host->board->wp_pin);
1132 fail4:
1133 if (host->board->det_pin)
1134 gpio_free(host->board->det_pin);
1135 fail5:
1136 mmc_free_host(mmc);
1137 fail6:
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;
1144 * Remove a device
1146 static int __exit at91_mci_remove(struct platform_device *pdev)
1148 struct mmc_host *mmc = platform_get_drvdata(pdev);
1149 struct at91mci_host *host;
1150 struct resource *res;
1152 if (!mmc)
1153 return -1;
1155 host = mmc_priv(mmc);
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);
1164 at91_mci_disable(host);
1165 del_timer_sync(&host->timer);
1166 mmc_remove_host(mmc);
1167 free_irq(host->irq, host);
1169 clk_disable(host->mci_clk); /* Disable the peripheral clock */
1170 clk_put(host->mci_clk);
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);
1177 iounmap(host->baseaddr);
1178 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1179 release_mem_region(res->start, res->end - res->start + 1);
1181 mmc_free_host(mmc);
1182 platform_set_drvdata(pdev, NULL);
1183 pr_debug("MCI Removed\n");
1185 return 0;
1188 #ifdef CONFIG_PM
1189 static int at91_mci_suspend(struct platform_device *pdev, pm_message_t state)
1191 struct mmc_host *mmc = platform_get_drvdata(pdev);
1192 struct at91mci_host *host = mmc_priv(mmc);
1193 int ret = 0;
1195 if (host->board->det_pin && device_may_wakeup(&pdev->dev))
1196 enable_irq_wake(host->board->det_pin);
1198 if (mmc)
1199 ret = mmc_suspend_host(mmc, state);
1201 return ret;
1204 static int at91_mci_resume(struct platform_device *pdev)
1206 struct mmc_host *mmc = platform_get_drvdata(pdev);
1207 struct at91mci_host *host = mmc_priv(mmc);
1208 int ret = 0;
1210 if (host->board->det_pin && device_may_wakeup(&pdev->dev))
1211 disable_irq_wake(host->board->det_pin);
1213 if (mmc)
1214 ret = mmc_resume_host(mmc);
1216 return ret;
1218 #else
1219 #define at91_mci_suspend NULL
1220 #define at91_mci_resume NULL
1221 #endif
1223 static 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,
1233 static int __init at91_mci_init(void)
1235 return platform_driver_probe(&at91_mci_driver, at91_mci_probe);
1238 static void __exit at91_mci_exit(void)
1240 platform_driver_unregister(&at91_mci_driver);
1243 module_init(at91_mci_init);
1244 module_exit(at91_mci_exit);
1246 MODULE_DESCRIPTION("AT91 Multimedia Card Interface driver");
1247 MODULE_AUTHOR("Nick Randell");
1248 MODULE_LICENSE("GPL");
1249 MODULE_ALIAS("platform:at91_mci");