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