icmp: Fix regression in nexthop resolution during replies.
[pandora-kernel.git] / drivers / mmc / host / dw_mmc.c
1 /*
2  * Synopsys DesignWare Multimedia Card Interface driver
3  *  (Based on NXP driver for lpc 31xx)
4  *
5  * Copyright (C) 2009 NXP Semiconductors
6  * Copyright (C) 2009, 2010 Imagination Technologies Ltd.
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 as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  */
13
14 #include <linux/blkdev.h>
15 #include <linux/clk.h>
16 #include <linux/debugfs.h>
17 #include <linux/device.h>
18 #include <linux/dma-mapping.h>
19 #include <linux/err.h>
20 #include <linux/init.h>
21 #include <linux/interrupt.h>
22 #include <linux/ioport.h>
23 #include <linux/module.h>
24 #include <linux/platform_device.h>
25 #include <linux/scatterlist.h>
26 #include <linux/seq_file.h>
27 #include <linux/slab.h>
28 #include <linux/stat.h>
29 #include <linux/delay.h>
30 #include <linux/irq.h>
31 #include <linux/mmc/host.h>
32 #include <linux/mmc/mmc.h>
33 #include <linux/mmc/dw_mmc.h>
34 #include <linux/bitops.h>
35 #include <linux/regulator/consumer.h>
36
37 #include "dw_mmc.h"
38
39 /* Common flag combinations */
40 #define DW_MCI_DATA_ERROR_FLAGS (SDMMC_INT_DTO | SDMMC_INT_DCRC | \
41                                  SDMMC_INT_HTO | SDMMC_INT_SBE  | \
42                                  SDMMC_INT_EBE)
43 #define DW_MCI_CMD_ERROR_FLAGS  (SDMMC_INT_RTO | SDMMC_INT_RCRC | \
44                                  SDMMC_INT_RESP_ERR)
45 #define DW_MCI_ERROR_FLAGS      (DW_MCI_DATA_ERROR_FLAGS | \
46                                  DW_MCI_CMD_ERROR_FLAGS  | SDMMC_INT_HLE)
47 #define DW_MCI_SEND_STATUS      1
48 #define DW_MCI_RECV_STATUS      2
49 #define DW_MCI_DMA_THRESHOLD    16
50
51 #ifdef CONFIG_MMC_DW_IDMAC
52 struct idmac_desc {
53         u32             des0;   /* Control Descriptor */
54 #define IDMAC_DES0_DIC  BIT(1)
55 #define IDMAC_DES0_LD   BIT(2)
56 #define IDMAC_DES0_FD   BIT(3)
57 #define IDMAC_DES0_CH   BIT(4)
58 #define IDMAC_DES0_ER   BIT(5)
59 #define IDMAC_DES0_CES  BIT(30)
60 #define IDMAC_DES0_OWN  BIT(31)
61
62         u32             des1;   /* Buffer sizes */
63 #define IDMAC_SET_BUFFER1_SIZE(d, s) \
64         ((d)->des1 = ((d)->des1 & 0x03ffc000) | ((s) & 0x3fff))
65
66         u32             des2;   /* buffer 1 physical address */
67
68         u32             des3;   /* buffer 2 physical address */
69 };
70 #endif /* CONFIG_MMC_DW_IDMAC */
71
72 /**
73  * struct dw_mci_slot - MMC slot state
74  * @mmc: The mmc_host representing this slot.
75  * @host: The MMC controller this slot is using.
76  * @ctype: Card type for this slot.
77  * @mrq: mmc_request currently being processed or waiting to be
78  *      processed, or NULL when the slot is idle.
79  * @queue_node: List node for placing this node in the @queue list of
80  *      &struct dw_mci.
81  * @clock: Clock rate configured by set_ios(). Protected by host->lock.
82  * @flags: Random state bits associated with the slot.
83  * @id: Number of this slot.
84  * @last_detect_state: Most recently observed card detect state.
85  */
86 struct dw_mci_slot {
87         struct mmc_host         *mmc;
88         struct dw_mci           *host;
89
90         u32                     ctype;
91
92         struct mmc_request      *mrq;
93         struct list_head        queue_node;
94
95         unsigned int            clock;
96         unsigned long           flags;
97 #define DW_MMC_CARD_PRESENT     0
98 #define DW_MMC_CARD_NEED_INIT   1
99         int                     id;
100         int                     last_detect_state;
101 };
102
103 #if defined(CONFIG_DEBUG_FS)
104 static int dw_mci_req_show(struct seq_file *s, void *v)
105 {
106         struct dw_mci_slot *slot = s->private;
107         struct mmc_request *mrq;
108         struct mmc_command *cmd;
109         struct mmc_command *stop;
110         struct mmc_data *data;
111
112         /* Make sure we get a consistent snapshot */
113         spin_lock_bh(&slot->host->lock);
114         mrq = slot->mrq;
115
116         if (mrq) {
117                 cmd = mrq->cmd;
118                 data = mrq->data;
119                 stop = mrq->stop;
120
121                 if (cmd)
122                         seq_printf(s,
123                                    "CMD%u(0x%x) flg %x rsp %x %x %x %x err %d\n",
124                                    cmd->opcode, cmd->arg, cmd->flags,
125                                    cmd->resp[0], cmd->resp[1], cmd->resp[2],
126                                    cmd->resp[2], cmd->error);
127                 if (data)
128                         seq_printf(s, "DATA %u / %u * %u flg %x err %d\n",
129                                    data->bytes_xfered, data->blocks,
130                                    data->blksz, data->flags, data->error);
131                 if (stop)
132                         seq_printf(s,
133                                    "CMD%u(0x%x) flg %x rsp %x %x %x %x err %d\n",
134                                    stop->opcode, stop->arg, stop->flags,
135                                    stop->resp[0], stop->resp[1], stop->resp[2],
136                                    stop->resp[2], stop->error);
137         }
138
139         spin_unlock_bh(&slot->host->lock);
140
141         return 0;
142 }
143
144 static int dw_mci_req_open(struct inode *inode, struct file *file)
145 {
146         return single_open(file, dw_mci_req_show, inode->i_private);
147 }
148
149 static const struct file_operations dw_mci_req_fops = {
150         .owner          = THIS_MODULE,
151         .open           = dw_mci_req_open,
152         .read           = seq_read,
153         .llseek         = seq_lseek,
154         .release        = single_release,
155 };
156
157 static int dw_mci_regs_show(struct seq_file *s, void *v)
158 {
159         seq_printf(s, "STATUS:\t0x%08x\n", SDMMC_STATUS);
160         seq_printf(s, "RINTSTS:\t0x%08x\n", SDMMC_RINTSTS);
161         seq_printf(s, "CMD:\t0x%08x\n", SDMMC_CMD);
162         seq_printf(s, "CTRL:\t0x%08x\n", SDMMC_CTRL);
163         seq_printf(s, "INTMASK:\t0x%08x\n", SDMMC_INTMASK);
164         seq_printf(s, "CLKENA:\t0x%08x\n", SDMMC_CLKENA);
165
166         return 0;
167 }
168
169 static int dw_mci_regs_open(struct inode *inode, struct file *file)
170 {
171         return single_open(file, dw_mci_regs_show, inode->i_private);
172 }
173
174 static const struct file_operations dw_mci_regs_fops = {
175         .owner          = THIS_MODULE,
176         .open           = dw_mci_regs_open,
177         .read           = seq_read,
178         .llseek         = seq_lseek,
179         .release        = single_release,
180 };
181
182 static void dw_mci_init_debugfs(struct dw_mci_slot *slot)
183 {
184         struct mmc_host *mmc = slot->mmc;
185         struct dw_mci *host = slot->host;
186         struct dentry *root;
187         struct dentry *node;
188
189         root = mmc->debugfs_root;
190         if (!root)
191                 return;
192
193         node = debugfs_create_file("regs", S_IRUSR, root, host,
194                                    &dw_mci_regs_fops);
195         if (!node)
196                 goto err;
197
198         node = debugfs_create_file("req", S_IRUSR, root, slot,
199                                    &dw_mci_req_fops);
200         if (!node)
201                 goto err;
202
203         node = debugfs_create_u32("state", S_IRUSR, root, (u32 *)&host->state);
204         if (!node)
205                 goto err;
206
207         node = debugfs_create_x32("pending_events", S_IRUSR, root,
208                                   (u32 *)&host->pending_events);
209         if (!node)
210                 goto err;
211
212         node = debugfs_create_x32("completed_events", S_IRUSR, root,
213                                   (u32 *)&host->completed_events);
214         if (!node)
215                 goto err;
216
217         return;
218
219 err:
220         dev_err(&mmc->class_dev, "failed to initialize debugfs for slot\n");
221 }
222 #endif /* defined(CONFIG_DEBUG_FS) */
223
224 static void dw_mci_set_timeout(struct dw_mci *host)
225 {
226         /* timeout (maximum) */
227         mci_writel(host, TMOUT, 0xffffffff);
228 }
229
230 static u32 dw_mci_prepare_command(struct mmc_host *mmc, struct mmc_command *cmd)
231 {
232         struct mmc_data *data;
233         u32 cmdr;
234         cmd->error = -EINPROGRESS;
235
236         cmdr = cmd->opcode;
237
238         if (cmdr == MMC_STOP_TRANSMISSION)
239                 cmdr |= SDMMC_CMD_STOP;
240         else
241                 cmdr |= SDMMC_CMD_PRV_DAT_WAIT;
242
243         if (cmd->flags & MMC_RSP_PRESENT) {
244                 /* We expect a response, so set this bit */
245                 cmdr |= SDMMC_CMD_RESP_EXP;
246                 if (cmd->flags & MMC_RSP_136)
247                         cmdr |= SDMMC_CMD_RESP_LONG;
248         }
249
250         if (cmd->flags & MMC_RSP_CRC)
251                 cmdr |= SDMMC_CMD_RESP_CRC;
252
253         data = cmd->data;
254         if (data) {
255                 cmdr |= SDMMC_CMD_DAT_EXP;
256                 if (data->flags & MMC_DATA_STREAM)
257                         cmdr |= SDMMC_CMD_STRM_MODE;
258                 if (data->flags & MMC_DATA_WRITE)
259                         cmdr |= SDMMC_CMD_DAT_WR;
260         }
261
262         return cmdr;
263 }
264
265 static void dw_mci_start_command(struct dw_mci *host,
266                                  struct mmc_command *cmd, u32 cmd_flags)
267 {
268         host->cmd = cmd;
269         dev_vdbg(&host->pdev->dev,
270                  "start command: ARGR=0x%08x CMDR=0x%08x\n",
271                  cmd->arg, cmd_flags);
272
273         mci_writel(host, CMDARG, cmd->arg);
274         wmb();
275
276         mci_writel(host, CMD, cmd_flags | SDMMC_CMD_START);
277 }
278
279 static void send_stop_cmd(struct dw_mci *host, struct mmc_data *data)
280 {
281         dw_mci_start_command(host, data->stop, host->stop_cmdr);
282 }
283
284 /* DMA interface functions */
285 static void dw_mci_stop_dma(struct dw_mci *host)
286 {
287         if (host->use_dma) {
288                 host->dma_ops->stop(host);
289                 host->dma_ops->cleanup(host);
290         } else {
291                 /* Data transfer was stopped by the interrupt handler */
292                 set_bit(EVENT_XFER_COMPLETE, &host->pending_events);
293         }
294 }
295
296 #ifdef CONFIG_MMC_DW_IDMAC
297 static void dw_mci_dma_cleanup(struct dw_mci *host)
298 {
299         struct mmc_data *data = host->data;
300
301         if (data)
302                 dma_unmap_sg(&host->pdev->dev, data->sg, data->sg_len,
303                              ((data->flags & MMC_DATA_WRITE)
304                               ? DMA_TO_DEVICE : DMA_FROM_DEVICE));
305 }
306
307 static void dw_mci_idmac_stop_dma(struct dw_mci *host)
308 {
309         u32 temp;
310
311         /* Disable and reset the IDMAC interface */
312         temp = mci_readl(host, CTRL);
313         temp &= ~SDMMC_CTRL_USE_IDMAC;
314         temp |= SDMMC_CTRL_DMA_RESET;
315         mci_writel(host, CTRL, temp);
316
317         /* Stop the IDMAC running */
318         temp = mci_readl(host, BMOD);
319         temp &= ~(SDMMC_IDMAC_ENABLE | SDMMC_IDMAC_FB);
320         mci_writel(host, BMOD, temp);
321 }
322
323 static void dw_mci_idmac_complete_dma(struct dw_mci *host)
324 {
325         struct mmc_data *data = host->data;
326
327         dev_vdbg(&host->pdev->dev, "DMA complete\n");
328
329         host->dma_ops->cleanup(host);
330
331         /*
332          * If the card was removed, data will be NULL. No point in trying to
333          * send the stop command or waiting for NBUSY in this case.
334          */
335         if (data) {
336                 set_bit(EVENT_XFER_COMPLETE, &host->pending_events);
337                 tasklet_schedule(&host->tasklet);
338         }
339 }
340
341 static void dw_mci_translate_sglist(struct dw_mci *host, struct mmc_data *data,
342                                     unsigned int sg_len)
343 {
344         int i;
345         struct idmac_desc *desc = host->sg_cpu;
346
347         for (i = 0; i < sg_len; i++, desc++) {
348                 unsigned int length = sg_dma_len(&data->sg[i]);
349                 u32 mem_addr = sg_dma_address(&data->sg[i]);
350
351                 /* Set the OWN bit and disable interrupts for this descriptor */
352                 desc->des0 = IDMAC_DES0_OWN | IDMAC_DES0_DIC | IDMAC_DES0_CH;
353
354                 /* Buffer length */
355                 IDMAC_SET_BUFFER1_SIZE(desc, length);
356
357                 /* Physical address to DMA to/from */
358                 desc->des2 = mem_addr;
359         }
360
361         /* Set first descriptor */
362         desc = host->sg_cpu;
363         desc->des0 |= IDMAC_DES0_FD;
364
365         /* Set last descriptor */
366         desc = host->sg_cpu + (i - 1) * sizeof(struct idmac_desc);
367         desc->des0 &= ~(IDMAC_DES0_CH | IDMAC_DES0_DIC);
368         desc->des0 |= IDMAC_DES0_LD;
369
370         wmb();
371 }
372
373 static void dw_mci_idmac_start_dma(struct dw_mci *host, unsigned int sg_len)
374 {
375         u32 temp;
376
377         dw_mci_translate_sglist(host, host->data, sg_len);
378
379         /* Select IDMAC interface */
380         temp = mci_readl(host, CTRL);
381         temp |= SDMMC_CTRL_USE_IDMAC;
382         mci_writel(host, CTRL, temp);
383
384         wmb();
385
386         /* Enable the IDMAC */
387         temp = mci_readl(host, BMOD);
388         temp |= SDMMC_IDMAC_ENABLE | SDMMC_IDMAC_FB;
389         mci_writel(host, BMOD, temp);
390
391         /* Start it running */
392         mci_writel(host, PLDMND, 1);
393 }
394
395 static int dw_mci_idmac_init(struct dw_mci *host)
396 {
397         struct idmac_desc *p;
398         int i;
399
400         /* Number of descriptors in the ring buffer */
401         host->ring_size = PAGE_SIZE / sizeof(struct idmac_desc);
402
403         /* Forward link the descriptor list */
404         for (i = 0, p = host->sg_cpu; i < host->ring_size - 1; i++, p++)
405                 p->des3 = host->sg_dma + (sizeof(struct idmac_desc) * (i + 1));
406
407         /* Set the last descriptor as the end-of-ring descriptor */
408         p->des3 = host->sg_dma;
409         p->des0 = IDMAC_DES0_ER;
410
411         /* Mask out interrupts - get Tx & Rx complete only */
412         mci_writel(host, IDINTEN, SDMMC_IDMAC_INT_NI | SDMMC_IDMAC_INT_RI |
413                    SDMMC_IDMAC_INT_TI);
414
415         /* Set the descriptor base address */
416         mci_writel(host, DBADDR, host->sg_dma);
417         return 0;
418 }
419
420 static struct dw_mci_dma_ops dw_mci_idmac_ops = {
421         .init = dw_mci_idmac_init,
422         .start = dw_mci_idmac_start_dma,
423         .stop = dw_mci_idmac_stop_dma,
424         .complete = dw_mci_idmac_complete_dma,
425         .cleanup = dw_mci_dma_cleanup,
426 };
427 #endif /* CONFIG_MMC_DW_IDMAC */
428
429 static int dw_mci_submit_data_dma(struct dw_mci *host, struct mmc_data *data)
430 {
431         struct scatterlist *sg;
432         unsigned int i, direction, sg_len;
433         u32 temp;
434
435         /* If we don't have a channel, we can't do DMA */
436         if (!host->use_dma)
437                 return -ENODEV;
438
439         /*
440          * We don't do DMA on "complex" transfers, i.e. with
441          * non-word-aligned buffers or lengths. Also, we don't bother
442          * with all the DMA setup overhead for short transfers.
443          */
444         if (data->blocks * data->blksz < DW_MCI_DMA_THRESHOLD)
445                 return -EINVAL;
446         if (data->blksz & 3)
447                 return -EINVAL;
448
449         for_each_sg(data->sg, sg, data->sg_len, i) {
450                 if (sg->offset & 3 || sg->length & 3)
451                         return -EINVAL;
452         }
453
454         if (data->flags & MMC_DATA_READ)
455                 direction = DMA_FROM_DEVICE;
456         else
457                 direction = DMA_TO_DEVICE;
458
459         sg_len = dma_map_sg(&host->pdev->dev, data->sg, data->sg_len,
460                             direction);
461
462         dev_vdbg(&host->pdev->dev,
463                  "sd sg_cpu: %#lx sg_dma: %#lx sg_len: %d\n",
464                  (unsigned long)host->sg_cpu, (unsigned long)host->sg_dma,
465                  sg_len);
466
467         /* Enable the DMA interface */
468         temp = mci_readl(host, CTRL);
469         temp |= SDMMC_CTRL_DMA_ENABLE;
470         mci_writel(host, CTRL, temp);
471
472         /* Disable RX/TX IRQs, let DMA handle it */
473         temp = mci_readl(host, INTMASK);
474         temp  &= ~(SDMMC_INT_RXDR | SDMMC_INT_TXDR);
475         mci_writel(host, INTMASK, temp);
476
477         host->dma_ops->start(host, sg_len);
478
479         return 0;
480 }
481
482 static void dw_mci_submit_data(struct dw_mci *host, struct mmc_data *data)
483 {
484         u32 temp;
485
486         data->error = -EINPROGRESS;
487
488         WARN_ON(host->data);
489         host->sg = NULL;
490         host->data = data;
491
492         if (dw_mci_submit_data_dma(host, data)) {
493                 host->sg = data->sg;
494                 host->pio_offset = 0;
495                 if (data->flags & MMC_DATA_READ)
496                         host->dir_status = DW_MCI_RECV_STATUS;
497                 else
498                         host->dir_status = DW_MCI_SEND_STATUS;
499
500                 temp = mci_readl(host, INTMASK);
501                 temp |= SDMMC_INT_TXDR | SDMMC_INT_RXDR;
502                 mci_writel(host, INTMASK, temp);
503
504                 temp = mci_readl(host, CTRL);
505                 temp &= ~SDMMC_CTRL_DMA_ENABLE;
506                 mci_writel(host, CTRL, temp);
507         }
508 }
509
510 static void mci_send_cmd(struct dw_mci_slot *slot, u32 cmd, u32 arg)
511 {
512         struct dw_mci *host = slot->host;
513         unsigned long timeout = jiffies + msecs_to_jiffies(500);
514         unsigned int cmd_status = 0;
515
516         mci_writel(host, CMDARG, arg);
517         wmb();
518         mci_writel(host, CMD, SDMMC_CMD_START | cmd);
519
520         while (time_before(jiffies, timeout)) {
521                 cmd_status = mci_readl(host, CMD);
522                 if (!(cmd_status & SDMMC_CMD_START))
523                         return;
524         }
525         dev_err(&slot->mmc->class_dev,
526                 "Timeout sending command (cmd %#x arg %#x status %#x)\n",
527                 cmd, arg, cmd_status);
528 }
529
530 static void dw_mci_setup_bus(struct dw_mci_slot *slot)
531 {
532         struct dw_mci *host = slot->host;
533         u32 div;
534
535         if (slot->clock != host->current_speed) {
536                 if (host->bus_hz % slot->clock)
537                         /*
538                          * move the + 1 after the divide to prevent
539                          * over-clocking the card.
540                          */
541                         div = ((host->bus_hz / slot->clock) >> 1) + 1;
542                 else
543                         div = (host->bus_hz  / slot->clock) >> 1;
544
545                 dev_info(&slot->mmc->class_dev,
546                          "Bus speed (slot %d) = %dHz (slot req %dHz, actual %dHZ"
547                          " div = %d)\n", slot->id, host->bus_hz, slot->clock,
548                          div ? ((host->bus_hz / div) >> 1) : host->bus_hz, div);
549
550                 /* disable clock */
551                 mci_writel(host, CLKENA, 0);
552                 mci_writel(host, CLKSRC, 0);
553
554                 /* inform CIU */
555                 mci_send_cmd(slot,
556                              SDMMC_CMD_UPD_CLK | SDMMC_CMD_PRV_DAT_WAIT, 0);
557
558                 /* set clock to desired speed */
559                 mci_writel(host, CLKDIV, div);
560
561                 /* inform CIU */
562                 mci_send_cmd(slot,
563                              SDMMC_CMD_UPD_CLK | SDMMC_CMD_PRV_DAT_WAIT, 0);
564
565                 /* enable clock */
566                 mci_writel(host, CLKENA, SDMMC_CLKEN_ENABLE |
567                            SDMMC_CLKEN_LOW_PWR);
568
569                 /* inform CIU */
570                 mci_send_cmd(slot,
571                              SDMMC_CMD_UPD_CLK | SDMMC_CMD_PRV_DAT_WAIT, 0);
572
573                 host->current_speed = slot->clock;
574         }
575
576         /* Set the current slot bus width */
577         mci_writel(host, CTYPE, slot->ctype);
578 }
579
580 static void dw_mci_start_request(struct dw_mci *host,
581                                  struct dw_mci_slot *slot)
582 {
583         struct mmc_request *mrq;
584         struct mmc_command *cmd;
585         struct mmc_data *data;
586         u32 cmdflags;
587
588         mrq = slot->mrq;
589         if (host->pdata->select_slot)
590                 host->pdata->select_slot(slot->id);
591
592         /* Slot specific timing and width adjustment */
593         dw_mci_setup_bus(slot);
594
595         host->cur_slot = slot;
596         host->mrq = mrq;
597
598         host->pending_events = 0;
599         host->completed_events = 0;
600         host->data_status = 0;
601
602         data = mrq->data;
603         if (data) {
604                 dw_mci_set_timeout(host);
605                 mci_writel(host, BYTCNT, data->blksz*data->blocks);
606                 mci_writel(host, BLKSIZ, data->blksz);
607         }
608
609         cmd = mrq->cmd;
610         cmdflags = dw_mci_prepare_command(slot->mmc, cmd);
611
612         /* this is the first command, send the initialization clock */
613         if (test_and_clear_bit(DW_MMC_CARD_NEED_INIT, &slot->flags))
614                 cmdflags |= SDMMC_CMD_INIT;
615
616         if (data) {
617                 dw_mci_submit_data(host, data);
618                 wmb();
619         }
620
621         dw_mci_start_command(host, cmd, cmdflags);
622
623         if (mrq->stop)
624                 host->stop_cmdr = dw_mci_prepare_command(slot->mmc, mrq->stop);
625 }
626
627 static void dw_mci_queue_request(struct dw_mci *host, struct dw_mci_slot *slot,
628                                  struct mmc_request *mrq)
629 {
630         dev_vdbg(&slot->mmc->class_dev, "queue request: state=%d\n",
631                  host->state);
632
633         spin_lock_bh(&host->lock);
634         slot->mrq = mrq;
635
636         if (host->state == STATE_IDLE) {
637                 host->state = STATE_SENDING_CMD;
638                 dw_mci_start_request(host, slot);
639         } else {
640                 list_add_tail(&slot->queue_node, &host->queue);
641         }
642
643         spin_unlock_bh(&host->lock);
644 }
645
646 static void dw_mci_request(struct mmc_host *mmc, struct mmc_request *mrq)
647 {
648         struct dw_mci_slot *slot = mmc_priv(mmc);
649         struct dw_mci *host = slot->host;
650
651         WARN_ON(slot->mrq);
652
653         if (!test_bit(DW_MMC_CARD_PRESENT, &slot->flags)) {
654                 mrq->cmd->error = -ENOMEDIUM;
655                 mmc_request_done(mmc, mrq);
656                 return;
657         }
658
659         /* We don't support multiple blocks of weird lengths. */
660         dw_mci_queue_request(host, slot, mrq);
661 }
662
663 static void dw_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
664 {
665         struct dw_mci_slot *slot = mmc_priv(mmc);
666         u32 regs;
667
668         /* set default 1 bit mode */
669         slot->ctype = SDMMC_CTYPE_1BIT;
670
671         switch (ios->bus_width) {
672         case MMC_BUS_WIDTH_1:
673                 slot->ctype = SDMMC_CTYPE_1BIT;
674                 break;
675         case MMC_BUS_WIDTH_4:
676                 slot->ctype = SDMMC_CTYPE_4BIT;
677                 break;
678         case MMC_BUS_WIDTH_8:
679                 slot->ctype = SDMMC_CTYPE_8BIT;
680                 break;
681         }
682
683         /* DDR mode set */
684         if (ios->ddr) {
685                 regs = mci_readl(slot->host, UHS_REG);
686                 regs |= (0x1 << slot->id) << 16;
687                 mci_writel(slot->host, UHS_REG, regs);
688         }
689
690         if (ios->clock) {
691                 /*
692                  * Use mirror of ios->clock to prevent race with mmc
693                  * core ios update when finding the minimum.
694                  */
695                 slot->clock = ios->clock;
696         }
697
698         switch (ios->power_mode) {
699         case MMC_POWER_UP:
700                 set_bit(DW_MMC_CARD_NEED_INIT, &slot->flags);
701                 break;
702         default:
703                 break;
704         }
705 }
706
707 static int dw_mci_get_ro(struct mmc_host *mmc)
708 {
709         int read_only;
710         struct dw_mci_slot *slot = mmc_priv(mmc);
711         struct dw_mci_board *brd = slot->host->pdata;
712
713         /* Use platform get_ro function, else try on board write protect */
714         if (brd->get_ro)
715                 read_only = brd->get_ro(slot->id);
716         else
717                 read_only =
718                         mci_readl(slot->host, WRTPRT) & (1 << slot->id) ? 1 : 0;
719
720         dev_dbg(&mmc->class_dev, "card is %s\n",
721                 read_only ? "read-only" : "read-write");
722
723         return read_only;
724 }
725
726 static int dw_mci_get_cd(struct mmc_host *mmc)
727 {
728         int present;
729         struct dw_mci_slot *slot = mmc_priv(mmc);
730         struct dw_mci_board *brd = slot->host->pdata;
731
732         /* Use platform get_cd function, else try onboard card detect */
733         if (brd->quirks & DW_MCI_QUIRK_BROKEN_CARD_DETECTION)
734                 present = 1;
735         else if (brd->get_cd)
736                 present = !brd->get_cd(slot->id);
737         else
738                 present = (mci_readl(slot->host, CDETECT) & (1 << slot->id))
739                         == 0 ? 1 : 0;
740
741         if (present)
742                 dev_dbg(&mmc->class_dev, "card is present\n");
743         else
744                 dev_dbg(&mmc->class_dev, "card is not present\n");
745
746         return present;
747 }
748
749 static const struct mmc_host_ops dw_mci_ops = {
750         .request        = dw_mci_request,
751         .set_ios        = dw_mci_set_ios,
752         .get_ro         = dw_mci_get_ro,
753         .get_cd         = dw_mci_get_cd,
754 };
755
756 static void dw_mci_request_end(struct dw_mci *host, struct mmc_request *mrq)
757         __releases(&host->lock)
758         __acquires(&host->lock)
759 {
760         struct dw_mci_slot *slot;
761         struct mmc_host *prev_mmc = host->cur_slot->mmc;
762
763         WARN_ON(host->cmd || host->data);
764
765         host->cur_slot->mrq = NULL;
766         host->mrq = NULL;
767         if (!list_empty(&host->queue)) {
768                 slot = list_entry(host->queue.next,
769                                   struct dw_mci_slot, queue_node);
770                 list_del(&slot->queue_node);
771                 dev_vdbg(&host->pdev->dev, "list not empty: %s is next\n",
772                          mmc_hostname(slot->mmc));
773                 host->state = STATE_SENDING_CMD;
774                 dw_mci_start_request(host, slot);
775         } else {
776                 dev_vdbg(&host->pdev->dev, "list empty\n");
777                 host->state = STATE_IDLE;
778         }
779
780         spin_unlock(&host->lock);
781         mmc_request_done(prev_mmc, mrq);
782         spin_lock(&host->lock);
783 }
784
785 static void dw_mci_command_complete(struct dw_mci *host, struct mmc_command *cmd)
786 {
787         u32 status = host->cmd_status;
788
789         host->cmd_status = 0;
790
791         /* Read the response from the card (up to 16 bytes) */
792         if (cmd->flags & MMC_RSP_PRESENT) {
793                 if (cmd->flags & MMC_RSP_136) {
794                         cmd->resp[3] = mci_readl(host, RESP0);
795                         cmd->resp[2] = mci_readl(host, RESP1);
796                         cmd->resp[1] = mci_readl(host, RESP2);
797                         cmd->resp[0] = mci_readl(host, RESP3);
798                 } else {
799                         cmd->resp[0] = mci_readl(host, RESP0);
800                         cmd->resp[1] = 0;
801                         cmd->resp[2] = 0;
802                         cmd->resp[3] = 0;
803                 }
804         }
805
806         if (status & SDMMC_INT_RTO)
807                 cmd->error = -ETIMEDOUT;
808         else if ((cmd->flags & MMC_RSP_CRC) && (status & SDMMC_INT_RCRC))
809                 cmd->error = -EILSEQ;
810         else if (status & SDMMC_INT_RESP_ERR)
811                 cmd->error = -EIO;
812         else
813                 cmd->error = 0;
814
815         if (cmd->error) {
816                 /* newer ip versions need a delay between retries */
817                 if (host->quirks & DW_MCI_QUIRK_RETRY_DELAY)
818                         mdelay(20);
819
820                 if (cmd->data) {
821                         host->data = NULL;
822                         dw_mci_stop_dma(host);
823                 }
824         }
825 }
826
827 static void dw_mci_tasklet_func(unsigned long priv)
828 {
829         struct dw_mci *host = (struct dw_mci *)priv;
830         struct mmc_data *data;
831         struct mmc_command *cmd;
832         enum dw_mci_state state;
833         enum dw_mci_state prev_state;
834         u32 status;
835
836         spin_lock(&host->lock);
837
838         state = host->state;
839         data = host->data;
840
841         do {
842                 prev_state = state;
843
844                 switch (state) {
845                 case STATE_IDLE:
846                         break;
847
848                 case STATE_SENDING_CMD:
849                         if (!test_and_clear_bit(EVENT_CMD_COMPLETE,
850                                                 &host->pending_events))
851                                 break;
852
853                         cmd = host->cmd;
854                         host->cmd = NULL;
855                         set_bit(EVENT_CMD_COMPLETE, &host->completed_events);
856                         dw_mci_command_complete(host, host->mrq->cmd);
857                         if (!host->mrq->data || cmd->error) {
858                                 dw_mci_request_end(host, host->mrq);
859                                 goto unlock;
860                         }
861
862                         prev_state = state = STATE_SENDING_DATA;
863                         /* fall through */
864
865                 case STATE_SENDING_DATA:
866                         if (test_and_clear_bit(EVENT_DATA_ERROR,
867                                                &host->pending_events)) {
868                                 dw_mci_stop_dma(host);
869                                 if (data->stop)
870                                         send_stop_cmd(host, data);
871                                 state = STATE_DATA_ERROR;
872                                 break;
873                         }
874
875                         if (!test_and_clear_bit(EVENT_XFER_COMPLETE,
876                                                 &host->pending_events))
877                                 break;
878
879                         set_bit(EVENT_XFER_COMPLETE, &host->completed_events);
880                         prev_state = state = STATE_DATA_BUSY;
881                         /* fall through */
882
883                 case STATE_DATA_BUSY:
884                         if (!test_and_clear_bit(EVENT_DATA_COMPLETE,
885                                                 &host->pending_events))
886                                 break;
887
888                         host->data = NULL;
889                         set_bit(EVENT_DATA_COMPLETE, &host->completed_events);
890                         status = host->data_status;
891
892                         if (status & DW_MCI_DATA_ERROR_FLAGS) {
893                                 if (status & SDMMC_INT_DTO) {
894                                         dev_err(&host->pdev->dev,
895                                                 "data timeout error\n");
896                                         data->error = -ETIMEDOUT;
897                                 } else if (status & SDMMC_INT_DCRC) {
898                                         dev_err(&host->pdev->dev,
899                                                 "data CRC error\n");
900                                         data->error = -EILSEQ;
901                                 } else {
902                                         dev_err(&host->pdev->dev,
903                                                 "data FIFO error "
904                                                 "(status=%08x)\n",
905                                                 status);
906                                         data->error = -EIO;
907                                 }
908                         } else {
909                                 data->bytes_xfered = data->blocks * data->blksz;
910                                 data->error = 0;
911                         }
912
913                         if (!data->stop) {
914                                 dw_mci_request_end(host, host->mrq);
915                                 goto unlock;
916                         }
917
918                         prev_state = state = STATE_SENDING_STOP;
919                         if (!data->error)
920                                 send_stop_cmd(host, data);
921                         /* fall through */
922
923                 case STATE_SENDING_STOP:
924                         if (!test_and_clear_bit(EVENT_CMD_COMPLETE,
925                                                 &host->pending_events))
926                                 break;
927
928                         host->cmd = NULL;
929                         dw_mci_command_complete(host, host->mrq->stop);
930                         dw_mci_request_end(host, host->mrq);
931                         goto unlock;
932
933                 case STATE_DATA_ERROR:
934                         if (!test_and_clear_bit(EVENT_XFER_COMPLETE,
935                                                 &host->pending_events))
936                                 break;
937
938                         state = STATE_DATA_BUSY;
939                         break;
940                 }
941         } while (state != prev_state);
942
943         host->state = state;
944 unlock:
945         spin_unlock(&host->lock);
946
947 }
948
949 static void dw_mci_push_data16(struct dw_mci *host, void *buf, int cnt)
950 {
951         u16 *pdata = (u16 *)buf;
952
953         WARN_ON(cnt % 2 != 0);
954
955         cnt = cnt >> 1;
956         while (cnt > 0) {
957                 mci_writew(host, DATA, *pdata++);
958                 cnt--;
959         }
960 }
961
962 static void dw_mci_pull_data16(struct dw_mci *host, void *buf, int cnt)
963 {
964         u16 *pdata = (u16 *)buf;
965
966         WARN_ON(cnt % 2 != 0);
967
968         cnt = cnt >> 1;
969         while (cnt > 0) {
970                 *pdata++ = mci_readw(host, DATA);
971                 cnt--;
972         }
973 }
974
975 static void dw_mci_push_data32(struct dw_mci *host, void *buf, int cnt)
976 {
977         u32 *pdata = (u32 *)buf;
978
979         WARN_ON(cnt % 4 != 0);
980         WARN_ON((unsigned long)pdata & 0x3);
981
982         cnt = cnt >> 2;
983         while (cnt > 0) {
984                 mci_writel(host, DATA, *pdata++);
985                 cnt--;
986         }
987 }
988
989 static void dw_mci_pull_data32(struct dw_mci *host, void *buf, int cnt)
990 {
991         u32 *pdata = (u32 *)buf;
992
993         WARN_ON(cnt % 4 != 0);
994         WARN_ON((unsigned long)pdata & 0x3);
995
996         cnt = cnt >> 2;
997         while (cnt > 0) {
998                 *pdata++ = mci_readl(host, DATA);
999                 cnt--;
1000         }
1001 }
1002
1003 static void dw_mci_push_data64(struct dw_mci *host, void *buf, int cnt)
1004 {
1005         u64 *pdata = (u64 *)buf;
1006
1007         WARN_ON(cnt % 8 != 0);
1008
1009         cnt = cnt >> 3;
1010         while (cnt > 0) {
1011                 mci_writeq(host, DATA, *pdata++);
1012                 cnt--;
1013         }
1014 }
1015
1016 static void dw_mci_pull_data64(struct dw_mci *host, void *buf, int cnt)
1017 {
1018         u64 *pdata = (u64 *)buf;
1019
1020         WARN_ON(cnt % 8 != 0);
1021
1022         cnt = cnt >> 3;
1023         while (cnt > 0) {
1024                 *pdata++ = mci_readq(host, DATA);
1025                 cnt--;
1026         }
1027 }
1028
1029 static void dw_mci_read_data_pio(struct dw_mci *host)
1030 {
1031         struct scatterlist *sg = host->sg;
1032         void *buf = sg_virt(sg);
1033         unsigned int offset = host->pio_offset;
1034         struct mmc_data *data = host->data;
1035         int shift = host->data_shift;
1036         u32 status;
1037         unsigned int nbytes = 0, len;
1038
1039         do {
1040                 len = SDMMC_GET_FCNT(mci_readl(host, STATUS)) << shift;
1041                 if (offset + len <= sg->length) {
1042                         host->pull_data(host, (void *)(buf + offset), len);
1043
1044                         offset += len;
1045                         nbytes += len;
1046
1047                         if (offset == sg->length) {
1048                                 flush_dcache_page(sg_page(sg));
1049                                 host->sg = sg = sg_next(sg);
1050                                 if (!sg)
1051                                         goto done;
1052
1053                                 offset = 0;
1054                                 buf = sg_virt(sg);
1055                         }
1056                 } else {
1057                         unsigned int remaining = sg->length - offset;
1058                         host->pull_data(host, (void *)(buf + offset),
1059                                         remaining);
1060                         nbytes += remaining;
1061
1062                         flush_dcache_page(sg_page(sg));
1063                         host->sg = sg = sg_next(sg);
1064                         if (!sg)
1065                                 goto done;
1066
1067                         offset = len - remaining;
1068                         buf = sg_virt(sg);
1069                         host->pull_data(host, buf, offset);
1070                         nbytes += offset;
1071                 }
1072
1073                 status = mci_readl(host, MINTSTS);
1074                 mci_writel(host, RINTSTS, SDMMC_INT_RXDR);
1075                 if (status & DW_MCI_DATA_ERROR_FLAGS) {
1076                         host->data_status = status;
1077                         data->bytes_xfered += nbytes;
1078                         smp_wmb();
1079
1080                         set_bit(EVENT_DATA_ERROR, &host->pending_events);
1081
1082                         tasklet_schedule(&host->tasklet);
1083                         return;
1084                 }
1085         } while (status & SDMMC_INT_RXDR); /*if the RXDR is ready read again*/
1086         len = SDMMC_GET_FCNT(mci_readl(host, STATUS));
1087         host->pio_offset = offset;
1088         data->bytes_xfered += nbytes;
1089         return;
1090
1091 done:
1092         data->bytes_xfered += nbytes;
1093         smp_wmb();
1094         set_bit(EVENT_XFER_COMPLETE, &host->pending_events);
1095 }
1096
1097 static void dw_mci_write_data_pio(struct dw_mci *host)
1098 {
1099         struct scatterlist *sg = host->sg;
1100         void *buf = sg_virt(sg);
1101         unsigned int offset = host->pio_offset;
1102         struct mmc_data *data = host->data;
1103         int shift = host->data_shift;
1104         u32 status;
1105         unsigned int nbytes = 0, len;
1106
1107         do {
1108                 len = SDMMC_FIFO_SZ -
1109                         (SDMMC_GET_FCNT(mci_readl(host, STATUS)) << shift);
1110                 if (offset + len <= sg->length) {
1111                         host->push_data(host, (void *)(buf + offset), len);
1112
1113                         offset += len;
1114                         nbytes += len;
1115                         if (offset == sg->length) {
1116                                 host->sg = sg = sg_next(sg);
1117                                 if (!sg)
1118                                         goto done;
1119
1120                                 offset = 0;
1121                                 buf = sg_virt(sg);
1122                         }
1123                 } else {
1124                         unsigned int remaining = sg->length - offset;
1125
1126                         host->push_data(host, (void *)(buf + offset),
1127                                         remaining);
1128                         nbytes += remaining;
1129
1130                         host->sg = sg = sg_next(sg);
1131                         if (!sg)
1132                                 goto done;
1133
1134                         offset = len - remaining;
1135                         buf = sg_virt(sg);
1136                         host->push_data(host, (void *)buf, offset);
1137                         nbytes += offset;
1138                 }
1139
1140                 status = mci_readl(host, MINTSTS);
1141                 mci_writel(host, RINTSTS, SDMMC_INT_TXDR);
1142                 if (status & DW_MCI_DATA_ERROR_FLAGS) {
1143                         host->data_status = status;
1144                         data->bytes_xfered += nbytes;
1145
1146                         smp_wmb();
1147
1148                         set_bit(EVENT_DATA_ERROR, &host->pending_events);
1149
1150                         tasklet_schedule(&host->tasklet);
1151                         return;
1152                 }
1153         } while (status & SDMMC_INT_TXDR); /* if TXDR write again */
1154
1155         host->pio_offset = offset;
1156         data->bytes_xfered += nbytes;
1157
1158         return;
1159
1160 done:
1161         data->bytes_xfered += nbytes;
1162         smp_wmb();
1163         set_bit(EVENT_XFER_COMPLETE, &host->pending_events);
1164 }
1165
1166 static void dw_mci_cmd_interrupt(struct dw_mci *host, u32 status)
1167 {
1168         if (!host->cmd_status)
1169                 host->cmd_status = status;
1170
1171         smp_wmb();
1172
1173         set_bit(EVENT_CMD_COMPLETE, &host->pending_events);
1174         tasklet_schedule(&host->tasklet);
1175 }
1176
1177 static irqreturn_t dw_mci_interrupt(int irq, void *dev_id)
1178 {
1179         struct dw_mci *host = dev_id;
1180         u32 status, pending;
1181         unsigned int pass_count = 0;
1182
1183         do {
1184                 status = mci_readl(host, RINTSTS);
1185                 pending = mci_readl(host, MINTSTS); /* read-only mask reg */
1186
1187                 /*
1188                  * DTO fix - version 2.10a and below, and only if internal DMA
1189                  * is configured.
1190                  */
1191                 if (host->quirks & DW_MCI_QUIRK_IDMAC_DTO) {
1192                         if (!pending &&
1193                             ((mci_readl(host, STATUS) >> 17) & 0x1fff))
1194                                 pending |= SDMMC_INT_DATA_OVER;
1195                 }
1196
1197                 if (!pending)
1198                         break;
1199
1200                 if (pending & DW_MCI_CMD_ERROR_FLAGS) {
1201                         mci_writel(host, RINTSTS, DW_MCI_CMD_ERROR_FLAGS);
1202                         host->cmd_status = status;
1203                         smp_wmb();
1204                         set_bit(EVENT_CMD_COMPLETE, &host->pending_events);
1205                         tasklet_schedule(&host->tasklet);
1206                 }
1207
1208                 if (pending & DW_MCI_DATA_ERROR_FLAGS) {
1209                         /* if there is an error report DATA_ERROR */
1210                         mci_writel(host, RINTSTS, DW_MCI_DATA_ERROR_FLAGS);
1211                         host->data_status = status;
1212                         smp_wmb();
1213                         set_bit(EVENT_DATA_ERROR, &host->pending_events);
1214                         tasklet_schedule(&host->tasklet);
1215                 }
1216
1217                 if (pending & SDMMC_INT_DATA_OVER) {
1218                         mci_writel(host, RINTSTS, SDMMC_INT_DATA_OVER);
1219                         if (!host->data_status)
1220                                 host->data_status = status;
1221                         smp_wmb();
1222                         if (host->dir_status == DW_MCI_RECV_STATUS) {
1223                                 if (host->sg != NULL)
1224                                         dw_mci_read_data_pio(host);
1225                         }
1226                         set_bit(EVENT_DATA_COMPLETE, &host->pending_events);
1227                         tasklet_schedule(&host->tasklet);
1228                 }
1229
1230                 if (pending & SDMMC_INT_RXDR) {
1231                         mci_writel(host, RINTSTS, SDMMC_INT_RXDR);
1232                         if (host->sg)
1233                                 dw_mci_read_data_pio(host);
1234                 }
1235
1236                 if (pending & SDMMC_INT_TXDR) {
1237                         mci_writel(host, RINTSTS, SDMMC_INT_TXDR);
1238                         if (host->sg)
1239                                 dw_mci_write_data_pio(host);
1240                 }
1241
1242                 if (pending & SDMMC_INT_CMD_DONE) {
1243                         mci_writel(host, RINTSTS, SDMMC_INT_CMD_DONE);
1244                         dw_mci_cmd_interrupt(host, status);
1245                 }
1246
1247                 if (pending & SDMMC_INT_CD) {
1248                         mci_writel(host, RINTSTS, SDMMC_INT_CD);
1249                         tasklet_schedule(&host->card_tasklet);
1250                 }
1251
1252         } while (pass_count++ < 5);
1253
1254 #ifdef CONFIG_MMC_DW_IDMAC
1255         /* Handle DMA interrupts */
1256         pending = mci_readl(host, IDSTS);
1257         if (pending & (SDMMC_IDMAC_INT_TI | SDMMC_IDMAC_INT_RI)) {
1258                 mci_writel(host, IDSTS, SDMMC_IDMAC_INT_TI | SDMMC_IDMAC_INT_RI);
1259                 mci_writel(host, IDSTS, SDMMC_IDMAC_INT_NI);
1260                 set_bit(EVENT_DATA_COMPLETE, &host->pending_events);
1261                 host->dma_ops->complete(host);
1262         }
1263 #endif
1264
1265         return IRQ_HANDLED;
1266 }
1267
1268 static void dw_mci_tasklet_card(unsigned long data)
1269 {
1270         struct dw_mci *host = (struct dw_mci *)data;
1271         int i;
1272
1273         for (i = 0; i < host->num_slots; i++) {
1274                 struct dw_mci_slot *slot = host->slot[i];
1275                 struct mmc_host *mmc = slot->mmc;
1276                 struct mmc_request *mrq;
1277                 int present;
1278                 u32 ctrl;
1279
1280                 present = dw_mci_get_cd(mmc);
1281                 while (present != slot->last_detect_state) {
1282                         spin_lock(&host->lock);
1283
1284                         dev_dbg(&slot->mmc->class_dev, "card %s\n",
1285                                 present ? "inserted" : "removed");
1286
1287                         /* Card change detected */
1288                         slot->last_detect_state = present;
1289
1290                         /* Power up slot */
1291                         if (present != 0) {
1292                                 if (host->pdata->setpower)
1293                                         host->pdata->setpower(slot->id,
1294                                                               mmc->ocr_avail);
1295
1296                                 set_bit(DW_MMC_CARD_PRESENT, &slot->flags);
1297                         }
1298
1299                         /* Clean up queue if present */
1300                         mrq = slot->mrq;
1301                         if (mrq) {
1302                                 if (mrq == host->mrq) {
1303                                         host->data = NULL;
1304                                         host->cmd = NULL;
1305
1306                                         switch (host->state) {
1307                                         case STATE_IDLE:
1308                                                 break;
1309                                         case STATE_SENDING_CMD:
1310                                                 mrq->cmd->error = -ENOMEDIUM;
1311                                                 if (!mrq->data)
1312                                                         break;
1313                                                 /* fall through */
1314                                         case STATE_SENDING_DATA:
1315                                                 mrq->data->error = -ENOMEDIUM;
1316                                                 dw_mci_stop_dma(host);
1317                                                 break;
1318                                         case STATE_DATA_BUSY:
1319                                         case STATE_DATA_ERROR:
1320                                                 if (mrq->data->error == -EINPROGRESS)
1321                                                         mrq->data->error = -ENOMEDIUM;
1322                                                 if (!mrq->stop)
1323                                                         break;
1324                                                 /* fall through */
1325                                         case STATE_SENDING_STOP:
1326                                                 mrq->stop->error = -ENOMEDIUM;
1327                                                 break;
1328                                         }
1329
1330                                         dw_mci_request_end(host, mrq);
1331                                 } else {
1332                                         list_del(&slot->queue_node);
1333                                         mrq->cmd->error = -ENOMEDIUM;
1334                                         if (mrq->data)
1335                                                 mrq->data->error = -ENOMEDIUM;
1336                                         if (mrq->stop)
1337                                                 mrq->stop->error = -ENOMEDIUM;
1338
1339                                         spin_unlock(&host->lock);
1340                                         mmc_request_done(slot->mmc, mrq);
1341                                         spin_lock(&host->lock);
1342                                 }
1343                         }
1344
1345                         /* Power down slot */
1346                         if (present == 0) {
1347                                 if (host->pdata->setpower)
1348                                         host->pdata->setpower(slot->id, 0);
1349                                 clear_bit(DW_MMC_CARD_PRESENT, &slot->flags);
1350
1351                                 /*
1352                                  * Clear down the FIFO - doing so generates a
1353                                  * block interrupt, hence setting the
1354                                  * scatter-gather pointer to NULL.
1355                                  */
1356                                 host->sg = NULL;
1357
1358                                 ctrl = mci_readl(host, CTRL);
1359                                 ctrl |= SDMMC_CTRL_FIFO_RESET;
1360                                 mci_writel(host, CTRL, ctrl);
1361
1362 #ifdef CONFIG_MMC_DW_IDMAC
1363                                 ctrl = mci_readl(host, BMOD);
1364                                 ctrl |= 0x01; /* Software reset of DMA */
1365                                 mci_writel(host, BMOD, ctrl);
1366 #endif
1367
1368                         }
1369
1370                         spin_unlock(&host->lock);
1371                         present = dw_mci_get_cd(mmc);
1372                 }
1373
1374                 mmc_detect_change(slot->mmc,
1375                         msecs_to_jiffies(host->pdata->detect_delay_ms));
1376         }
1377 }
1378
1379 static int __init dw_mci_init_slot(struct dw_mci *host, unsigned int id)
1380 {
1381         struct mmc_host *mmc;
1382         struct dw_mci_slot *slot;
1383
1384         mmc = mmc_alloc_host(sizeof(struct dw_mci_slot), &host->pdev->dev);
1385         if (!mmc)
1386                 return -ENOMEM;
1387
1388         slot = mmc_priv(mmc);
1389         slot->id = id;
1390         slot->mmc = mmc;
1391         slot->host = host;
1392
1393         mmc->ops = &dw_mci_ops;
1394         mmc->f_min = DIV_ROUND_UP(host->bus_hz, 510);
1395         mmc->f_max = host->bus_hz;
1396
1397         if (host->pdata->get_ocr)
1398                 mmc->ocr_avail = host->pdata->get_ocr(id);
1399         else
1400                 mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
1401
1402         /*
1403          * Start with slot power disabled, it will be enabled when a card
1404          * is detected.
1405          */
1406         if (host->pdata->setpower)
1407                 host->pdata->setpower(id, 0);
1408
1409         if (host->pdata->caps)
1410                 mmc->caps = host->pdata->caps;
1411         else
1412                 mmc->caps = 0;
1413
1414         if (host->pdata->get_bus_wd)
1415                 if (host->pdata->get_bus_wd(slot->id) >= 4)
1416                         mmc->caps |= MMC_CAP_4_BIT_DATA;
1417
1418         if (host->pdata->quirks & DW_MCI_QUIRK_HIGHSPEED)
1419                 mmc->caps |= MMC_CAP_SD_HIGHSPEED;
1420
1421 #ifdef CONFIG_MMC_DW_IDMAC
1422         mmc->max_segs = host->ring_size;
1423         mmc->max_blk_size = 65536;
1424         mmc->max_blk_count = host->ring_size;
1425         mmc->max_seg_size = 0x1000;
1426         mmc->max_req_size = mmc->max_seg_size * mmc->max_blk_count;
1427 #else
1428         if (host->pdata->blk_settings) {
1429                 mmc->max_segs = host->pdata->blk_settings->max_segs;
1430                 mmc->max_blk_size = host->pdata->blk_settings->max_blk_size;
1431                 mmc->max_blk_count = host->pdata->blk_settings->max_blk_count;
1432                 mmc->max_req_size = host->pdata->blk_settings->max_req_size;
1433                 mmc->max_seg_size = host->pdata->blk_settings->max_seg_size;
1434         } else {
1435                 /* Useful defaults if platform data is unset. */
1436                 mmc->max_segs = 64;
1437                 mmc->max_blk_size = 65536; /* BLKSIZ is 16 bits */
1438                 mmc->max_blk_count = 512;
1439                 mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count;
1440                 mmc->max_seg_size = mmc->max_req_size;
1441         }
1442 #endif /* CONFIG_MMC_DW_IDMAC */
1443
1444         host->vmmc = regulator_get(mmc_dev(mmc), "vmmc");
1445         if (IS_ERR(host->vmmc)) {
1446                 printk(KERN_INFO "%s: no vmmc regulator found\n", mmc_hostname(mmc));
1447                 host->vmmc = NULL;
1448         } else
1449                 regulator_enable(host->vmmc);
1450
1451         if (dw_mci_get_cd(mmc))
1452                 set_bit(DW_MMC_CARD_PRESENT, &slot->flags);
1453         else
1454                 clear_bit(DW_MMC_CARD_PRESENT, &slot->flags);
1455
1456         host->slot[id] = slot;
1457         mmc_add_host(mmc);
1458
1459 #if defined(CONFIG_DEBUG_FS)
1460         dw_mci_init_debugfs(slot);
1461 #endif
1462
1463         /* Card initially undetected */
1464         slot->last_detect_state = 0;
1465
1466         /*
1467          * Card may have been plugged in prior to boot so we
1468          * need to run the detect tasklet
1469          */
1470         tasklet_schedule(&host->card_tasklet);
1471
1472         return 0;
1473 }
1474
1475 static void dw_mci_cleanup_slot(struct dw_mci_slot *slot, unsigned int id)
1476 {
1477         /* Shutdown detect IRQ */
1478         if (slot->host->pdata->exit)
1479                 slot->host->pdata->exit(id);
1480
1481         /* Debugfs stuff is cleaned up by mmc core */
1482         mmc_remove_host(slot->mmc);
1483         slot->host->slot[id] = NULL;
1484         mmc_free_host(slot->mmc);
1485 }
1486
1487 static void dw_mci_init_dma(struct dw_mci *host)
1488 {
1489         /* Alloc memory for sg translation */
1490         host->sg_cpu = dma_alloc_coherent(&host->pdev->dev, PAGE_SIZE,
1491                                           &host->sg_dma, GFP_KERNEL);
1492         if (!host->sg_cpu) {
1493                 dev_err(&host->pdev->dev, "%s: could not alloc DMA memory\n",
1494                         __func__);
1495                 goto no_dma;
1496         }
1497
1498         /* Determine which DMA interface to use */
1499 #ifdef CONFIG_MMC_DW_IDMAC
1500         host->dma_ops = &dw_mci_idmac_ops;
1501         dev_info(&host->pdev->dev, "Using internal DMA controller.\n");
1502 #endif
1503
1504         if (!host->dma_ops)
1505                 goto no_dma;
1506
1507         if (host->dma_ops->init) {
1508                 if (host->dma_ops->init(host)) {
1509                         dev_err(&host->pdev->dev, "%s: Unable to initialize "
1510                                 "DMA Controller.\n", __func__);
1511                         goto no_dma;
1512                 }
1513         } else {
1514                 dev_err(&host->pdev->dev, "DMA initialization not found.\n");
1515                 goto no_dma;
1516         }
1517
1518         host->use_dma = 1;
1519         return;
1520
1521 no_dma:
1522         dev_info(&host->pdev->dev, "Using PIO mode.\n");
1523         host->use_dma = 0;
1524         return;
1525 }
1526
1527 static bool mci_wait_reset(struct device *dev, struct dw_mci *host)
1528 {
1529         unsigned long timeout = jiffies + msecs_to_jiffies(500);
1530         unsigned int ctrl;
1531
1532         mci_writel(host, CTRL, (SDMMC_CTRL_RESET | SDMMC_CTRL_FIFO_RESET |
1533                                 SDMMC_CTRL_DMA_RESET));
1534
1535         /* wait till resets clear */
1536         do {
1537                 ctrl = mci_readl(host, CTRL);
1538                 if (!(ctrl & (SDMMC_CTRL_RESET | SDMMC_CTRL_FIFO_RESET |
1539                               SDMMC_CTRL_DMA_RESET)))
1540                         return true;
1541         } while (time_before(jiffies, timeout));
1542
1543         dev_err(dev, "Timeout resetting block (ctrl %#x)\n", ctrl);
1544
1545         return false;
1546 }
1547
1548 static int dw_mci_probe(struct platform_device *pdev)
1549 {
1550         struct dw_mci *host;
1551         struct resource *regs;
1552         struct dw_mci_board *pdata;
1553         int irq, ret, i, width;
1554         u32 fifo_size;
1555
1556         regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1557         if (!regs)
1558                 return -ENXIO;
1559
1560         irq = platform_get_irq(pdev, 0);
1561         if (irq < 0)
1562                 return irq;
1563
1564         host = kzalloc(sizeof(struct dw_mci), GFP_KERNEL);
1565         if (!host)
1566                 return -ENOMEM;
1567
1568         host->pdev = pdev;
1569         host->pdata = pdata = pdev->dev.platform_data;
1570         if (!pdata || !pdata->init) {
1571                 dev_err(&pdev->dev,
1572                         "Platform data must supply init function\n");
1573                 ret = -ENODEV;
1574                 goto err_freehost;
1575         }
1576
1577         if (!pdata->select_slot && pdata->num_slots > 1) {
1578                 dev_err(&pdev->dev,
1579                         "Platform data must supply select_slot function\n");
1580                 ret = -ENODEV;
1581                 goto err_freehost;
1582         }
1583
1584         if (!pdata->bus_hz) {
1585                 dev_err(&pdev->dev,
1586                         "Platform data must supply bus speed\n");
1587                 ret = -ENODEV;
1588                 goto err_freehost;
1589         }
1590
1591         host->bus_hz = pdata->bus_hz;
1592         host->quirks = pdata->quirks;
1593
1594         spin_lock_init(&host->lock);
1595         INIT_LIST_HEAD(&host->queue);
1596
1597         ret = -ENOMEM;
1598         host->regs = ioremap(regs->start, regs->end - regs->start + 1);
1599         if (!host->regs)
1600                 goto err_freehost;
1601
1602         host->dma_ops = pdata->dma_ops;
1603         dw_mci_init_dma(host);
1604
1605         /*
1606          * Get the host data width - this assumes that HCON has been set with
1607          * the correct values.
1608          */
1609         i = (mci_readl(host, HCON) >> 7) & 0x7;
1610         if (!i) {
1611                 host->push_data = dw_mci_push_data16;
1612                 host->pull_data = dw_mci_pull_data16;
1613                 width = 16;
1614                 host->data_shift = 1;
1615         } else if (i == 2) {
1616                 host->push_data = dw_mci_push_data64;
1617                 host->pull_data = dw_mci_pull_data64;
1618                 width = 64;
1619                 host->data_shift = 3;
1620         } else {
1621                 /* Check for a reserved value, and warn if it is */
1622                 WARN((i != 1),
1623                      "HCON reports a reserved host data width!\n"
1624                      "Defaulting to 32-bit access.\n");
1625                 host->push_data = dw_mci_push_data32;
1626                 host->pull_data = dw_mci_pull_data32;
1627                 width = 32;
1628                 host->data_shift = 2;
1629         }
1630
1631         /* Reset all blocks */
1632         if (!mci_wait_reset(&pdev->dev, host)) {
1633                 ret = -ENODEV;
1634                 goto err_dmaunmap;
1635         }
1636
1637         /* Clear the interrupts for the host controller */
1638         mci_writel(host, RINTSTS, 0xFFFFFFFF);
1639         mci_writel(host, INTMASK, 0); /* disable all mmc interrupt first */
1640
1641         /* Put in max timeout */
1642         mci_writel(host, TMOUT, 0xFFFFFFFF);
1643
1644         /*
1645          * FIFO threshold settings  RxMark  = fifo_size / 2 - 1,
1646          *                          Tx Mark = fifo_size / 2 DMA Size = 8
1647          */
1648         fifo_size = mci_readl(host, FIFOTH);
1649         fifo_size = (fifo_size >> 16) & 0x7ff;
1650         host->fifoth_val = ((0x2 << 28) | ((fifo_size/2 - 1) << 16) |
1651                         ((fifo_size/2) << 0));
1652         mci_writel(host, FIFOTH, host->fifoth_val);
1653
1654         /* disable clock to CIU */
1655         mci_writel(host, CLKENA, 0);
1656         mci_writel(host, CLKSRC, 0);
1657
1658         tasklet_init(&host->tasklet, dw_mci_tasklet_func, (unsigned long)host);
1659         tasklet_init(&host->card_tasklet,
1660                      dw_mci_tasklet_card, (unsigned long)host);
1661
1662         ret = request_irq(irq, dw_mci_interrupt, 0, "dw-mci", host);
1663         if (ret)
1664                 goto err_dmaunmap;
1665
1666         platform_set_drvdata(pdev, host);
1667
1668         if (host->pdata->num_slots)
1669                 host->num_slots = host->pdata->num_slots;
1670         else
1671                 host->num_slots = ((mci_readl(host, HCON) >> 1) & 0x1F) + 1;
1672
1673         /* We need at least one slot to succeed */
1674         for (i = 0; i < host->num_slots; i++) {
1675                 ret = dw_mci_init_slot(host, i);
1676                 if (ret) {
1677                         ret = -ENODEV;
1678                         goto err_init_slot;
1679                 }
1680         }
1681
1682         /*
1683          * Enable interrupts for command done, data over, data empty, card det,
1684          * receive ready and error such as transmit, receive timeout, crc error
1685          */
1686         mci_writel(host, RINTSTS, 0xFFFFFFFF);
1687         mci_writel(host, INTMASK, SDMMC_INT_CMD_DONE | SDMMC_INT_DATA_OVER |
1688                    SDMMC_INT_TXDR | SDMMC_INT_RXDR |
1689                    DW_MCI_ERROR_FLAGS | SDMMC_INT_CD);
1690         mci_writel(host, CTRL, SDMMC_CTRL_INT_ENABLE); /* Enable mci interrupt */
1691
1692         dev_info(&pdev->dev, "DW MMC controller at irq %d, "
1693                  "%d bit host data width\n", irq, width);
1694         if (host->quirks & DW_MCI_QUIRK_IDMAC_DTO)
1695                 dev_info(&pdev->dev, "Internal DMAC interrupt fix enabled.\n");
1696
1697         return 0;
1698
1699 err_init_slot:
1700         /* De-init any initialized slots */
1701         while (i > 0) {
1702                 if (host->slot[i])
1703                         dw_mci_cleanup_slot(host->slot[i], i);
1704                 i--;
1705         }
1706         free_irq(irq, host);
1707
1708 err_dmaunmap:
1709         if (host->use_dma && host->dma_ops->exit)
1710                 host->dma_ops->exit(host);
1711         dma_free_coherent(&host->pdev->dev, PAGE_SIZE,
1712                           host->sg_cpu, host->sg_dma);
1713         iounmap(host->regs);
1714
1715         if (host->vmmc) {
1716                 regulator_disable(host->vmmc);
1717                 regulator_put(host->vmmc);
1718         }
1719
1720
1721 err_freehost:
1722         kfree(host);
1723         return ret;
1724 }
1725
1726 static int __exit dw_mci_remove(struct platform_device *pdev)
1727 {
1728         struct dw_mci *host = platform_get_drvdata(pdev);
1729         int i;
1730
1731         mci_writel(host, RINTSTS, 0xFFFFFFFF);
1732         mci_writel(host, INTMASK, 0); /* disable all mmc interrupt first */
1733
1734         platform_set_drvdata(pdev, NULL);
1735
1736         for (i = 0; i < host->num_slots; i++) {
1737                 dev_dbg(&pdev->dev, "remove slot %d\n", i);
1738                 if (host->slot[i])
1739                         dw_mci_cleanup_slot(host->slot[i], i);
1740         }
1741
1742         /* disable clock to CIU */
1743         mci_writel(host, CLKENA, 0);
1744         mci_writel(host, CLKSRC, 0);
1745
1746         free_irq(platform_get_irq(pdev, 0), host);
1747         dma_free_coherent(&pdev->dev, PAGE_SIZE, host->sg_cpu, host->sg_dma);
1748
1749         if (host->use_dma && host->dma_ops->exit)
1750                 host->dma_ops->exit(host);
1751
1752         if (host->vmmc) {
1753                 regulator_disable(host->vmmc);
1754                 regulator_put(host->vmmc);
1755         }
1756
1757         iounmap(host->regs);
1758
1759         kfree(host);
1760         return 0;
1761 }
1762
1763 #ifdef CONFIG_PM
1764 /*
1765  * TODO: we should probably disable the clock to the card in the suspend path.
1766  */
1767 static int dw_mci_suspend(struct platform_device *pdev, pm_message_t mesg)
1768 {
1769         int i, ret;
1770         struct dw_mci *host = platform_get_drvdata(pdev);
1771
1772         for (i = 0; i < host->num_slots; i++) {
1773                 struct dw_mci_slot *slot = host->slot[i];
1774                 if (!slot)
1775                         continue;
1776                 ret = mmc_suspend_host(slot->mmc);
1777                 if (ret < 0) {
1778                         while (--i >= 0) {
1779                                 slot = host->slot[i];
1780                                 if (slot)
1781                                         mmc_resume_host(host->slot[i]->mmc);
1782                         }
1783                         return ret;
1784                 }
1785         }
1786
1787         if (host->vmmc)
1788                 regulator_disable(host->vmmc);
1789
1790         return 0;
1791 }
1792
1793 static int dw_mci_resume(struct platform_device *pdev)
1794 {
1795         int i, ret;
1796         struct dw_mci *host = platform_get_drvdata(pdev);
1797
1798         if (host->vmmc)
1799                 regulator_enable(host->vmmc);
1800
1801         if (host->dma_ops->init)
1802                 host->dma_ops->init(host);
1803
1804         if (!mci_wait_reset(&pdev->dev, host)) {
1805                 ret = -ENODEV;
1806                 return ret;
1807         }
1808
1809         /* Restore the old value at FIFOTH register */
1810         mci_writel(host, FIFOTH, host->fifoth_val);
1811
1812         mci_writel(host, RINTSTS, 0xFFFFFFFF);
1813         mci_writel(host, INTMASK, SDMMC_INT_CMD_DONE | SDMMC_INT_DATA_OVER |
1814                    SDMMC_INT_TXDR | SDMMC_INT_RXDR |
1815                    DW_MCI_ERROR_FLAGS | SDMMC_INT_CD);
1816         mci_writel(host, CTRL, SDMMC_CTRL_INT_ENABLE);
1817
1818         for (i = 0; i < host->num_slots; i++) {
1819                 struct dw_mci_slot *slot = host->slot[i];
1820                 if (!slot)
1821                         continue;
1822                 ret = mmc_resume_host(host->slot[i]->mmc);
1823                 if (ret < 0)
1824                         return ret;
1825         }
1826
1827         return 0;
1828 }
1829 #else
1830 #define dw_mci_suspend  NULL
1831 #define dw_mci_resume   NULL
1832 #endif /* CONFIG_PM */
1833
1834 static struct platform_driver dw_mci_driver = {
1835         .remove         = __exit_p(dw_mci_remove),
1836         .suspend        = dw_mci_suspend,
1837         .resume         = dw_mci_resume,
1838         .driver         = {
1839                 .name           = "dw_mmc",
1840         },
1841 };
1842
1843 static int __init dw_mci_init(void)
1844 {
1845         return platform_driver_probe(&dw_mci_driver, dw_mci_probe);
1846 }
1847
1848 static void __exit dw_mci_exit(void)
1849 {
1850         platform_driver_unregister(&dw_mci_driver);
1851 }
1852
1853 module_init(dw_mci_init);
1854 module_exit(dw_mci_exit);
1855
1856 MODULE_DESCRIPTION("DW Multimedia Card Interface driver");
1857 MODULE_AUTHOR("NXP Semiconductor VietNam");
1858 MODULE_AUTHOR("Imagination Technologies Ltd");
1859 MODULE_LICENSE("GPL v2");