Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[linux-2.6-block.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/seq_file.h>
26 #include <linux/slab.h>
27 #include <linux/stat.h>
28 #include <linux/delay.h>
29 #include <linux/irq.h>
30 #include <linux/mmc/host.h>
31 #include <linux/mmc/mmc.h>
32 #include <linux/mmc/sdio.h>
33 #include <linux/mmc/dw_mmc.h>
34 #include <linux/bitops.h>
35 #include <linux/regulator/consumer.h>
36 #include <linux/workqueue.h>
37 #include <linux/of.h>
38 #include <linux/of_gpio.h>
39 #include <linux/mmc/slot-gpio.h>
40
41 #include "dw_mmc.h"
42
43 /* Common flag combinations */
44 #define DW_MCI_DATA_ERROR_FLAGS (SDMMC_INT_DRTO | SDMMC_INT_DCRC | \
45                                  SDMMC_INT_HTO | SDMMC_INT_SBE  | \
46                                  SDMMC_INT_EBE)
47 #define DW_MCI_CMD_ERROR_FLAGS  (SDMMC_INT_RTO | SDMMC_INT_RCRC | \
48                                  SDMMC_INT_RESP_ERR)
49 #define DW_MCI_ERROR_FLAGS      (DW_MCI_DATA_ERROR_FLAGS | \
50                                  DW_MCI_CMD_ERROR_FLAGS  | SDMMC_INT_HLE)
51 #define DW_MCI_SEND_STATUS      1
52 #define DW_MCI_RECV_STATUS      2
53 #define DW_MCI_DMA_THRESHOLD    16
54
55 #define DW_MCI_FREQ_MAX 200000000       /* unit: HZ */
56 #define DW_MCI_FREQ_MIN 400000          /* unit: HZ */
57
58 #ifdef CONFIG_MMC_DW_IDMAC
59 #define IDMAC_INT_CLR           (SDMMC_IDMAC_INT_AI | SDMMC_IDMAC_INT_NI | \
60                                  SDMMC_IDMAC_INT_CES | SDMMC_IDMAC_INT_DU | \
61                                  SDMMC_IDMAC_INT_FBE | SDMMC_IDMAC_INT_RI | \
62                                  SDMMC_IDMAC_INT_TI)
63
64 struct idmac_desc {
65         u32             des0;   /* Control Descriptor */
66 #define IDMAC_DES0_DIC  BIT(1)
67 #define IDMAC_DES0_LD   BIT(2)
68 #define IDMAC_DES0_FD   BIT(3)
69 #define IDMAC_DES0_CH   BIT(4)
70 #define IDMAC_DES0_ER   BIT(5)
71 #define IDMAC_DES0_CES  BIT(30)
72 #define IDMAC_DES0_OWN  BIT(31)
73
74         u32             des1;   /* Buffer sizes */
75 #define IDMAC_SET_BUFFER1_SIZE(d, s) \
76         ((d)->des1 = ((d)->des1 & 0x03ffe000) | ((s) & 0x1fff))
77
78         u32             des2;   /* buffer 1 physical address */
79
80         u32             des3;   /* buffer 2 physical address */
81 };
82 #endif /* CONFIG_MMC_DW_IDMAC */
83
84 static const u8 tuning_blk_pattern_4bit[] = {
85         0xff, 0x0f, 0xff, 0x00, 0xff, 0xcc, 0xc3, 0xcc,
86         0xc3, 0x3c, 0xcc, 0xff, 0xfe, 0xff, 0xfe, 0xef,
87         0xff, 0xdf, 0xff, 0xdd, 0xff, 0xfb, 0xff, 0xfb,
88         0xbf, 0xff, 0x7f, 0xff, 0x77, 0xf7, 0xbd, 0xef,
89         0xff, 0xf0, 0xff, 0xf0, 0x0f, 0xfc, 0xcc, 0x3c,
90         0xcc, 0x33, 0xcc, 0xcf, 0xff, 0xef, 0xff, 0xee,
91         0xff, 0xfd, 0xff, 0xfd, 0xdf, 0xff, 0xbf, 0xff,
92         0xbb, 0xff, 0xf7, 0xff, 0xf7, 0x7f, 0x7b, 0xde,
93 };
94
95 static const u8 tuning_blk_pattern_8bit[] = {
96         0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00,
97         0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc, 0xcc,
98         0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff, 0xff,
99         0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee, 0xff,
100         0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd, 0xdd,
101         0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xbb,
102         0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0xff,
103         0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee, 0xff,
104         0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00,
105         0x00, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc,
106         0xcc, 0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff,
107         0xff, 0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee,
108         0xff, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd,
109         0xdd, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff,
110         0xbb, 0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff,
111         0xff, 0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee,
112 };
113
114 static bool dw_mci_reset(struct dw_mci *host);
115
116 #if defined(CONFIG_DEBUG_FS)
117 static int dw_mci_req_show(struct seq_file *s, void *v)
118 {
119         struct dw_mci_slot *slot = s->private;
120         struct mmc_request *mrq;
121         struct mmc_command *cmd;
122         struct mmc_command *stop;
123         struct mmc_data *data;
124
125         /* Make sure we get a consistent snapshot */
126         spin_lock_bh(&slot->host->lock);
127         mrq = slot->mrq;
128
129         if (mrq) {
130                 cmd = mrq->cmd;
131                 data = mrq->data;
132                 stop = mrq->stop;
133
134                 if (cmd)
135                         seq_printf(s,
136                                    "CMD%u(0x%x) flg %x rsp %x %x %x %x err %d\n",
137                                    cmd->opcode, cmd->arg, cmd->flags,
138                                    cmd->resp[0], cmd->resp[1], cmd->resp[2],
139                                    cmd->resp[2], cmd->error);
140                 if (data)
141                         seq_printf(s, "DATA %u / %u * %u flg %x err %d\n",
142                                    data->bytes_xfered, data->blocks,
143                                    data->blksz, data->flags, data->error);
144                 if (stop)
145                         seq_printf(s,
146                                    "CMD%u(0x%x) flg %x rsp %x %x %x %x err %d\n",
147                                    stop->opcode, stop->arg, stop->flags,
148                                    stop->resp[0], stop->resp[1], stop->resp[2],
149                                    stop->resp[2], stop->error);
150         }
151
152         spin_unlock_bh(&slot->host->lock);
153
154         return 0;
155 }
156
157 static int dw_mci_req_open(struct inode *inode, struct file *file)
158 {
159         return single_open(file, dw_mci_req_show, inode->i_private);
160 }
161
162 static const struct file_operations dw_mci_req_fops = {
163         .owner          = THIS_MODULE,
164         .open           = dw_mci_req_open,
165         .read           = seq_read,
166         .llseek         = seq_lseek,
167         .release        = single_release,
168 };
169
170 static int dw_mci_regs_show(struct seq_file *s, void *v)
171 {
172         seq_printf(s, "STATUS:\t0x%08x\n", SDMMC_STATUS);
173         seq_printf(s, "RINTSTS:\t0x%08x\n", SDMMC_RINTSTS);
174         seq_printf(s, "CMD:\t0x%08x\n", SDMMC_CMD);
175         seq_printf(s, "CTRL:\t0x%08x\n", SDMMC_CTRL);
176         seq_printf(s, "INTMASK:\t0x%08x\n", SDMMC_INTMASK);
177         seq_printf(s, "CLKENA:\t0x%08x\n", SDMMC_CLKENA);
178
179         return 0;
180 }
181
182 static int dw_mci_regs_open(struct inode *inode, struct file *file)
183 {
184         return single_open(file, dw_mci_regs_show, inode->i_private);
185 }
186
187 static const struct file_operations dw_mci_regs_fops = {
188         .owner          = THIS_MODULE,
189         .open           = dw_mci_regs_open,
190         .read           = seq_read,
191         .llseek         = seq_lseek,
192         .release        = single_release,
193 };
194
195 static void dw_mci_init_debugfs(struct dw_mci_slot *slot)
196 {
197         struct mmc_host *mmc = slot->mmc;
198         struct dw_mci *host = slot->host;
199         struct dentry *root;
200         struct dentry *node;
201
202         root = mmc->debugfs_root;
203         if (!root)
204                 return;
205
206         node = debugfs_create_file("regs", S_IRUSR, root, host,
207                                    &dw_mci_regs_fops);
208         if (!node)
209                 goto err;
210
211         node = debugfs_create_file("req", S_IRUSR, root, slot,
212                                    &dw_mci_req_fops);
213         if (!node)
214                 goto err;
215
216         node = debugfs_create_u32("state", S_IRUSR, root, (u32 *)&host->state);
217         if (!node)
218                 goto err;
219
220         node = debugfs_create_x32("pending_events", S_IRUSR, root,
221                                   (u32 *)&host->pending_events);
222         if (!node)
223                 goto err;
224
225         node = debugfs_create_x32("completed_events", S_IRUSR, root,
226                                   (u32 *)&host->completed_events);
227         if (!node)
228                 goto err;
229
230         return;
231
232 err:
233         dev_err(&mmc->class_dev, "failed to initialize debugfs for slot\n");
234 }
235 #endif /* defined(CONFIG_DEBUG_FS) */
236
237 static u32 dw_mci_prepare_command(struct mmc_host *mmc, struct mmc_command *cmd)
238 {
239         struct mmc_data *data;
240         struct dw_mci_slot *slot = mmc_priv(mmc);
241         const struct dw_mci_drv_data *drv_data = slot->host->drv_data;
242         u32 cmdr;
243         cmd->error = -EINPROGRESS;
244
245         cmdr = cmd->opcode;
246
247         if (cmd->opcode == MMC_STOP_TRANSMISSION ||
248             cmd->opcode == MMC_GO_IDLE_STATE ||
249             cmd->opcode == MMC_GO_INACTIVE_STATE ||
250             (cmd->opcode == SD_IO_RW_DIRECT &&
251              ((cmd->arg >> 9) & 0x1FFFF) == SDIO_CCCR_ABORT))
252                 cmdr |= SDMMC_CMD_STOP;
253         else if (cmd->opcode != MMC_SEND_STATUS && cmd->data)
254                 cmdr |= SDMMC_CMD_PRV_DAT_WAIT;
255
256         if (cmd->flags & MMC_RSP_PRESENT) {
257                 /* We expect a response, so set this bit */
258                 cmdr |= SDMMC_CMD_RESP_EXP;
259                 if (cmd->flags & MMC_RSP_136)
260                         cmdr |= SDMMC_CMD_RESP_LONG;
261         }
262
263         if (cmd->flags & MMC_RSP_CRC)
264                 cmdr |= SDMMC_CMD_RESP_CRC;
265
266         data = cmd->data;
267         if (data) {
268                 cmdr |= SDMMC_CMD_DAT_EXP;
269                 if (data->flags & MMC_DATA_STREAM)
270                         cmdr |= SDMMC_CMD_STRM_MODE;
271                 if (data->flags & MMC_DATA_WRITE)
272                         cmdr |= SDMMC_CMD_DAT_WR;
273         }
274
275         if (drv_data && drv_data->prepare_command)
276                 drv_data->prepare_command(slot->host, &cmdr);
277
278         return cmdr;
279 }
280
281 static u32 dw_mci_prep_stop_abort(struct dw_mci *host, struct mmc_command *cmd)
282 {
283         struct mmc_command *stop;
284         u32 cmdr;
285
286         if (!cmd->data)
287                 return 0;
288
289         stop = &host->stop_abort;
290         cmdr = cmd->opcode;
291         memset(stop, 0, sizeof(struct mmc_command));
292
293         if (cmdr == MMC_READ_SINGLE_BLOCK ||
294             cmdr == MMC_READ_MULTIPLE_BLOCK ||
295             cmdr == MMC_WRITE_BLOCK ||
296             cmdr == MMC_WRITE_MULTIPLE_BLOCK) {
297                 stop->opcode = MMC_STOP_TRANSMISSION;
298                 stop->arg = 0;
299                 stop->flags = MMC_RSP_R1B | MMC_CMD_AC;
300         } else if (cmdr == SD_IO_RW_EXTENDED) {
301                 stop->opcode = SD_IO_RW_DIRECT;
302                 stop->arg |= (1 << 31) | (0 << 28) | (SDIO_CCCR_ABORT << 9) |
303                              ((cmd->arg >> 28) & 0x7);
304                 stop->flags = MMC_RSP_SPI_R5 | MMC_RSP_R5 | MMC_CMD_AC;
305         } else {
306                 return 0;
307         }
308
309         cmdr = stop->opcode | SDMMC_CMD_STOP |
310                 SDMMC_CMD_RESP_CRC | SDMMC_CMD_RESP_EXP;
311
312         return cmdr;
313 }
314
315 static void dw_mci_start_command(struct dw_mci *host,
316                                  struct mmc_command *cmd, u32 cmd_flags)
317 {
318         host->cmd = cmd;
319         dev_vdbg(host->dev,
320                  "start command: ARGR=0x%08x CMDR=0x%08x\n",
321                  cmd->arg, cmd_flags);
322
323         mci_writel(host, CMDARG, cmd->arg);
324         wmb();
325
326         mci_writel(host, CMD, cmd_flags | SDMMC_CMD_START);
327 }
328
329 static inline void send_stop_abort(struct dw_mci *host, struct mmc_data *data)
330 {
331         struct mmc_command *stop = data->stop ? data->stop : &host->stop_abort;
332         dw_mci_start_command(host, stop, host->stop_cmdr);
333 }
334
335 /* DMA interface functions */
336 static void dw_mci_stop_dma(struct dw_mci *host)
337 {
338         if (host->using_dma) {
339                 host->dma_ops->stop(host);
340                 host->dma_ops->cleanup(host);
341         }
342
343         /* Data transfer was stopped by the interrupt handler */
344         set_bit(EVENT_XFER_COMPLETE, &host->pending_events);
345 }
346
347 static int dw_mci_get_dma_dir(struct mmc_data *data)
348 {
349         if (data->flags & MMC_DATA_WRITE)
350                 return DMA_TO_DEVICE;
351         else
352                 return DMA_FROM_DEVICE;
353 }
354
355 #ifdef CONFIG_MMC_DW_IDMAC
356 static void dw_mci_dma_cleanup(struct dw_mci *host)
357 {
358         struct mmc_data *data = host->data;
359
360         if (data)
361                 if (!data->host_cookie)
362                         dma_unmap_sg(host->dev,
363                                      data->sg,
364                                      data->sg_len,
365                                      dw_mci_get_dma_dir(data));
366 }
367
368 static void dw_mci_idmac_reset(struct dw_mci *host)
369 {
370         u32 bmod = mci_readl(host, BMOD);
371         /* Software reset of DMA */
372         bmod |= SDMMC_IDMAC_SWRESET;
373         mci_writel(host, BMOD, bmod);
374 }
375
376 static void dw_mci_idmac_stop_dma(struct dw_mci *host)
377 {
378         u32 temp;
379
380         /* Disable and reset the IDMAC interface */
381         temp = mci_readl(host, CTRL);
382         temp &= ~SDMMC_CTRL_USE_IDMAC;
383         temp |= SDMMC_CTRL_DMA_RESET;
384         mci_writel(host, CTRL, temp);
385
386         /* Stop the IDMAC running */
387         temp = mci_readl(host, BMOD);
388         temp &= ~(SDMMC_IDMAC_ENABLE | SDMMC_IDMAC_FB);
389         temp |= SDMMC_IDMAC_SWRESET;
390         mci_writel(host, BMOD, temp);
391 }
392
393 static void dw_mci_idmac_complete_dma(struct dw_mci *host)
394 {
395         struct mmc_data *data = host->data;
396
397         dev_vdbg(host->dev, "DMA complete\n");
398
399         host->dma_ops->cleanup(host);
400
401         /*
402          * If the card was removed, data will be NULL. No point in trying to
403          * send the stop command or waiting for NBUSY in this case.
404          */
405         if (data) {
406                 set_bit(EVENT_XFER_COMPLETE, &host->pending_events);
407                 tasklet_schedule(&host->tasklet);
408         }
409 }
410
411 static void dw_mci_translate_sglist(struct dw_mci *host, struct mmc_data *data,
412                                     unsigned int sg_len)
413 {
414         int i;
415         struct idmac_desc *desc = host->sg_cpu;
416
417         for (i = 0; i < sg_len; i++, desc++) {
418                 unsigned int length = sg_dma_len(&data->sg[i]);
419                 u32 mem_addr = sg_dma_address(&data->sg[i]);
420
421                 /* Set the OWN bit and disable interrupts for this descriptor */
422                 desc->des0 = IDMAC_DES0_OWN | IDMAC_DES0_DIC | IDMAC_DES0_CH;
423
424                 /* Buffer length */
425                 IDMAC_SET_BUFFER1_SIZE(desc, length);
426
427                 /* Physical address to DMA to/from */
428                 desc->des2 = mem_addr;
429         }
430
431         /* Set first descriptor */
432         desc = host->sg_cpu;
433         desc->des0 |= IDMAC_DES0_FD;
434
435         /* Set last descriptor */
436         desc = host->sg_cpu + (i - 1) * sizeof(struct idmac_desc);
437         desc->des0 &= ~(IDMAC_DES0_CH | IDMAC_DES0_DIC);
438         desc->des0 |= IDMAC_DES0_LD;
439
440         wmb();
441 }
442
443 static void dw_mci_idmac_start_dma(struct dw_mci *host, unsigned int sg_len)
444 {
445         u32 temp;
446
447         dw_mci_translate_sglist(host, host->data, sg_len);
448
449         /* Select IDMAC interface */
450         temp = mci_readl(host, CTRL);
451         temp |= SDMMC_CTRL_USE_IDMAC;
452         mci_writel(host, CTRL, temp);
453
454         wmb();
455
456         /* Enable the IDMAC */
457         temp = mci_readl(host, BMOD);
458         temp |= SDMMC_IDMAC_ENABLE | SDMMC_IDMAC_FB;
459         mci_writel(host, BMOD, temp);
460
461         /* Start it running */
462         mci_writel(host, PLDMND, 1);
463 }
464
465 static int dw_mci_idmac_init(struct dw_mci *host)
466 {
467         struct idmac_desc *p;
468         int i;
469
470         /* Number of descriptors in the ring buffer */
471         host->ring_size = PAGE_SIZE / sizeof(struct idmac_desc);
472
473         /* Forward link the descriptor list */
474         for (i = 0, p = host->sg_cpu; i < host->ring_size - 1; i++, p++)
475                 p->des3 = host->sg_dma + (sizeof(struct idmac_desc) * (i + 1));
476
477         /* Set the last descriptor as the end-of-ring descriptor */
478         p->des3 = host->sg_dma;
479         p->des0 = IDMAC_DES0_ER;
480
481         dw_mci_idmac_reset(host);
482
483         /* Mask out interrupts - get Tx & Rx complete only */
484         mci_writel(host, IDSTS, IDMAC_INT_CLR);
485         mci_writel(host, IDINTEN, SDMMC_IDMAC_INT_NI | SDMMC_IDMAC_INT_RI |
486                    SDMMC_IDMAC_INT_TI);
487
488         /* Set the descriptor base address */
489         mci_writel(host, DBADDR, host->sg_dma);
490         return 0;
491 }
492
493 static const struct dw_mci_dma_ops dw_mci_idmac_ops = {
494         .init = dw_mci_idmac_init,
495         .start = dw_mci_idmac_start_dma,
496         .stop = dw_mci_idmac_stop_dma,
497         .complete = dw_mci_idmac_complete_dma,
498         .cleanup = dw_mci_dma_cleanup,
499 };
500 #endif /* CONFIG_MMC_DW_IDMAC */
501
502 static int dw_mci_pre_dma_transfer(struct dw_mci *host,
503                                    struct mmc_data *data,
504                                    bool next)
505 {
506         struct scatterlist *sg;
507         unsigned int i, sg_len;
508
509         if (!next && data->host_cookie)
510                 return data->host_cookie;
511
512         /*
513          * We don't do DMA on "complex" transfers, i.e. with
514          * non-word-aligned buffers or lengths. Also, we don't bother
515          * with all the DMA setup overhead for short transfers.
516          */
517         if (data->blocks * data->blksz < DW_MCI_DMA_THRESHOLD)
518                 return -EINVAL;
519
520         if (data->blksz & 3)
521                 return -EINVAL;
522
523         for_each_sg(data->sg, sg, data->sg_len, i) {
524                 if (sg->offset & 3 || sg->length & 3)
525                         return -EINVAL;
526         }
527
528         sg_len = dma_map_sg(host->dev,
529                             data->sg,
530                             data->sg_len,
531                             dw_mci_get_dma_dir(data));
532         if (sg_len == 0)
533                 return -EINVAL;
534
535         if (next)
536                 data->host_cookie = sg_len;
537
538         return sg_len;
539 }
540
541 static void dw_mci_pre_req(struct mmc_host *mmc,
542                            struct mmc_request *mrq,
543                            bool is_first_req)
544 {
545         struct dw_mci_slot *slot = mmc_priv(mmc);
546         struct mmc_data *data = mrq->data;
547
548         if (!slot->host->use_dma || !data)
549                 return;
550
551         if (data->host_cookie) {
552                 data->host_cookie = 0;
553                 return;
554         }
555
556         if (dw_mci_pre_dma_transfer(slot->host, mrq->data, 1) < 0)
557                 data->host_cookie = 0;
558 }
559
560 static void dw_mci_post_req(struct mmc_host *mmc,
561                             struct mmc_request *mrq,
562                             int err)
563 {
564         struct dw_mci_slot *slot = mmc_priv(mmc);
565         struct mmc_data *data = mrq->data;
566
567         if (!slot->host->use_dma || !data)
568                 return;
569
570         if (data->host_cookie)
571                 dma_unmap_sg(slot->host->dev,
572                              data->sg,
573                              data->sg_len,
574                              dw_mci_get_dma_dir(data));
575         data->host_cookie = 0;
576 }
577
578 static void dw_mci_adjust_fifoth(struct dw_mci *host, struct mmc_data *data)
579 {
580 #ifdef CONFIG_MMC_DW_IDMAC
581         unsigned int blksz = data->blksz;
582         const u32 mszs[] = {1, 4, 8, 16, 32, 64, 128, 256};
583         u32 fifo_width = 1 << host->data_shift;
584         u32 blksz_depth = blksz / fifo_width, fifoth_val;
585         u32 msize = 0, rx_wmark = 1, tx_wmark, tx_wmark_invers;
586         int idx = (sizeof(mszs) / sizeof(mszs[0])) - 1;
587
588         tx_wmark = (host->fifo_depth) / 2;
589         tx_wmark_invers = host->fifo_depth - tx_wmark;
590
591         /*
592          * MSIZE is '1',
593          * if blksz is not a multiple of the FIFO width
594          */
595         if (blksz % fifo_width) {
596                 msize = 0;
597                 rx_wmark = 1;
598                 goto done;
599         }
600
601         do {
602                 if (!((blksz_depth % mszs[idx]) ||
603                      (tx_wmark_invers % mszs[idx]))) {
604                         msize = idx;
605                         rx_wmark = mszs[idx] - 1;
606                         break;
607                 }
608         } while (--idx > 0);
609         /*
610          * If idx is '0', it won't be tried
611          * Thus, initial values are uesed
612          */
613 done:
614         fifoth_val = SDMMC_SET_FIFOTH(msize, rx_wmark, tx_wmark);
615         mci_writel(host, FIFOTH, fifoth_val);
616 #endif
617 }
618
619 static void dw_mci_ctrl_rd_thld(struct dw_mci *host, struct mmc_data *data)
620 {
621         unsigned int blksz = data->blksz;
622         u32 blksz_depth, fifo_depth;
623         u16 thld_size;
624
625         WARN_ON(!(data->flags & MMC_DATA_READ));
626
627         if (host->timing != MMC_TIMING_MMC_HS200 &&
628             host->timing != MMC_TIMING_UHS_SDR104)
629                 goto disable;
630
631         blksz_depth = blksz / (1 << host->data_shift);
632         fifo_depth = host->fifo_depth;
633
634         if (blksz_depth > fifo_depth)
635                 goto disable;
636
637         /*
638          * If (blksz_depth) >= (fifo_depth >> 1), should be 'thld_size <= blksz'
639          * If (blksz_depth) <  (fifo_depth >> 1), should be thld_size = blksz
640          * Currently just choose blksz.
641          */
642         thld_size = blksz;
643         mci_writel(host, CDTHRCTL, SDMMC_SET_RD_THLD(thld_size, 1));
644         return;
645
646 disable:
647         mci_writel(host, CDTHRCTL, SDMMC_SET_RD_THLD(0, 0));
648 }
649
650 static int dw_mci_submit_data_dma(struct dw_mci *host, struct mmc_data *data)
651 {
652         int sg_len;
653         u32 temp;
654
655         host->using_dma = 0;
656
657         /* If we don't have a channel, we can't do DMA */
658         if (!host->use_dma)
659                 return -ENODEV;
660
661         sg_len = dw_mci_pre_dma_transfer(host, data, 0);
662         if (sg_len < 0) {
663                 host->dma_ops->stop(host);
664                 return sg_len;
665         }
666
667         host->using_dma = 1;
668
669         dev_vdbg(host->dev,
670                  "sd sg_cpu: %#lx sg_dma: %#lx sg_len: %d\n",
671                  (unsigned long)host->sg_cpu, (unsigned long)host->sg_dma,
672                  sg_len);
673
674         /*
675          * Decide the MSIZE and RX/TX Watermark.
676          * If current block size is same with previous size,
677          * no need to update fifoth.
678          */
679         if (host->prev_blksz != data->blksz)
680                 dw_mci_adjust_fifoth(host, data);
681
682         /* Enable the DMA interface */
683         temp = mci_readl(host, CTRL);
684         temp |= SDMMC_CTRL_DMA_ENABLE;
685         mci_writel(host, CTRL, temp);
686
687         /* Disable RX/TX IRQs, let DMA handle it */
688         temp = mci_readl(host, INTMASK);
689         temp  &= ~(SDMMC_INT_RXDR | SDMMC_INT_TXDR);
690         mci_writel(host, INTMASK, temp);
691
692         host->dma_ops->start(host, sg_len);
693
694         return 0;
695 }
696
697 static void dw_mci_submit_data(struct dw_mci *host, struct mmc_data *data)
698 {
699         u32 temp;
700
701         data->error = -EINPROGRESS;
702
703         WARN_ON(host->data);
704         host->sg = NULL;
705         host->data = data;
706
707         if (data->flags & MMC_DATA_READ) {
708                 host->dir_status = DW_MCI_RECV_STATUS;
709                 dw_mci_ctrl_rd_thld(host, data);
710         } else {
711                 host->dir_status = DW_MCI_SEND_STATUS;
712         }
713
714         if (dw_mci_submit_data_dma(host, data)) {
715                 int flags = SG_MITER_ATOMIC;
716                 if (host->data->flags & MMC_DATA_READ)
717                         flags |= SG_MITER_TO_SG;
718                 else
719                         flags |= SG_MITER_FROM_SG;
720
721                 sg_miter_start(&host->sg_miter, data->sg, data->sg_len, flags);
722                 host->sg = data->sg;
723                 host->part_buf_start = 0;
724                 host->part_buf_count = 0;
725
726                 mci_writel(host, RINTSTS, SDMMC_INT_TXDR | SDMMC_INT_RXDR);
727                 temp = mci_readl(host, INTMASK);
728                 temp |= SDMMC_INT_TXDR | SDMMC_INT_RXDR;
729                 mci_writel(host, INTMASK, temp);
730
731                 temp = mci_readl(host, CTRL);
732                 temp &= ~SDMMC_CTRL_DMA_ENABLE;
733                 mci_writel(host, CTRL, temp);
734
735                 /*
736                  * Use the initial fifoth_val for PIO mode.
737                  * If next issued data may be transfered by DMA mode,
738                  * prev_blksz should be invalidated.
739                  */
740                 mci_writel(host, FIFOTH, host->fifoth_val);
741                 host->prev_blksz = 0;
742         } else {
743                 /*
744                  * Keep the current block size.
745                  * It will be used to decide whether to update
746                  * fifoth register next time.
747                  */
748                 host->prev_blksz = data->blksz;
749         }
750 }
751
752 static void mci_send_cmd(struct dw_mci_slot *slot, u32 cmd, u32 arg)
753 {
754         struct dw_mci *host = slot->host;
755         unsigned long timeout = jiffies + msecs_to_jiffies(500);
756         unsigned int cmd_status = 0;
757
758         mci_writel(host, CMDARG, arg);
759         wmb();
760         mci_writel(host, CMD, SDMMC_CMD_START | cmd);
761
762         while (time_before(jiffies, timeout)) {
763                 cmd_status = mci_readl(host, CMD);
764                 if (!(cmd_status & SDMMC_CMD_START))
765                         return;
766         }
767         dev_err(&slot->mmc->class_dev,
768                 "Timeout sending command (cmd %#x arg %#x status %#x)\n",
769                 cmd, arg, cmd_status);
770 }
771
772 static void dw_mci_setup_bus(struct dw_mci_slot *slot, bool force_clkinit)
773 {
774         struct dw_mci *host = slot->host;
775         unsigned int clock = slot->clock;
776         u32 div;
777         u32 clk_en_a;
778
779         if (!clock) {
780                 mci_writel(host, CLKENA, 0);
781                 mci_send_cmd(slot,
782                              SDMMC_CMD_UPD_CLK | SDMMC_CMD_PRV_DAT_WAIT, 0);
783         } else if (clock != host->current_speed || force_clkinit) {
784                 div = host->bus_hz / clock;
785                 if (host->bus_hz % clock && host->bus_hz > clock)
786                         /*
787                          * move the + 1 after the divide to prevent
788                          * over-clocking the card.
789                          */
790                         div += 1;
791
792                 div = (host->bus_hz != clock) ? DIV_ROUND_UP(div, 2) : 0;
793
794                 if ((clock << div) != slot->__clk_old || force_clkinit)
795                         dev_info(&slot->mmc->class_dev,
796                                  "Bus speed (slot %d) = %dHz (slot req %dHz, actual %dHZ div = %d)\n",
797                                  slot->id, host->bus_hz, clock,
798                                  div ? ((host->bus_hz / div) >> 1) :
799                                  host->bus_hz, div);
800
801                 /* disable clock */
802                 mci_writel(host, CLKENA, 0);
803                 mci_writel(host, CLKSRC, 0);
804
805                 /* inform CIU */
806                 mci_send_cmd(slot,
807                              SDMMC_CMD_UPD_CLK | SDMMC_CMD_PRV_DAT_WAIT, 0);
808
809                 /* set clock to desired speed */
810                 mci_writel(host, CLKDIV, div);
811
812                 /* inform CIU */
813                 mci_send_cmd(slot,
814                              SDMMC_CMD_UPD_CLK | SDMMC_CMD_PRV_DAT_WAIT, 0);
815
816                 /* enable clock; only low power if no SDIO */
817                 clk_en_a = SDMMC_CLKEN_ENABLE << slot->id;
818                 if (!(mci_readl(host, INTMASK) & SDMMC_INT_SDIO(slot->id)))
819                         clk_en_a |= SDMMC_CLKEN_LOW_PWR << slot->id;
820                 mci_writel(host, CLKENA, clk_en_a);
821
822                 /* inform CIU */
823                 mci_send_cmd(slot,
824                              SDMMC_CMD_UPD_CLK | SDMMC_CMD_PRV_DAT_WAIT, 0);
825
826                 /* keep the clock with reflecting clock dividor */
827                 slot->__clk_old = clock << div;
828         }
829
830         host->current_speed = clock;
831
832         /* Set the current slot bus width */
833         mci_writel(host, CTYPE, (slot->ctype << slot->id));
834 }
835
836 static void __dw_mci_start_request(struct dw_mci *host,
837                                    struct dw_mci_slot *slot,
838                                    struct mmc_command *cmd)
839 {
840         struct mmc_request *mrq;
841         struct mmc_data *data;
842         u32 cmdflags;
843
844         mrq = slot->mrq;
845
846         host->cur_slot = slot;
847         host->mrq = mrq;
848
849         host->pending_events = 0;
850         host->completed_events = 0;
851         host->cmd_status = 0;
852         host->data_status = 0;
853         host->dir_status = 0;
854
855         data = cmd->data;
856         if (data) {
857                 mci_writel(host, TMOUT, 0xFFFFFFFF);
858                 mci_writel(host, BYTCNT, data->blksz*data->blocks);
859                 mci_writel(host, BLKSIZ, data->blksz);
860         }
861
862         cmdflags = dw_mci_prepare_command(slot->mmc, cmd);
863
864         /* this is the first command, send the initialization clock */
865         if (test_and_clear_bit(DW_MMC_CARD_NEED_INIT, &slot->flags))
866                 cmdflags |= SDMMC_CMD_INIT;
867
868         if (data) {
869                 dw_mci_submit_data(host, data);
870                 wmb();
871         }
872
873         dw_mci_start_command(host, cmd, cmdflags);
874
875         if (mrq->stop)
876                 host->stop_cmdr = dw_mci_prepare_command(slot->mmc, mrq->stop);
877         else
878                 host->stop_cmdr = dw_mci_prep_stop_abort(host, cmd);
879 }
880
881 static void dw_mci_start_request(struct dw_mci *host,
882                                  struct dw_mci_slot *slot)
883 {
884         struct mmc_request *mrq = slot->mrq;
885         struct mmc_command *cmd;
886
887         cmd = mrq->sbc ? mrq->sbc : mrq->cmd;
888         __dw_mci_start_request(host, slot, cmd);
889 }
890
891 /* must be called with host->lock held */
892 static void dw_mci_queue_request(struct dw_mci *host, struct dw_mci_slot *slot,
893                                  struct mmc_request *mrq)
894 {
895         dev_vdbg(&slot->mmc->class_dev, "queue request: state=%d\n",
896                  host->state);
897
898         slot->mrq = mrq;
899
900         if (host->state == STATE_IDLE) {
901                 host->state = STATE_SENDING_CMD;
902                 dw_mci_start_request(host, slot);
903         } else {
904                 list_add_tail(&slot->queue_node, &host->queue);
905         }
906 }
907
908 static void dw_mci_request(struct mmc_host *mmc, struct mmc_request *mrq)
909 {
910         struct dw_mci_slot *slot = mmc_priv(mmc);
911         struct dw_mci *host = slot->host;
912
913         WARN_ON(slot->mrq);
914
915         /*
916          * The check for card presence and queueing of the request must be
917          * atomic, otherwise the card could be removed in between and the
918          * request wouldn't fail until another card was inserted.
919          */
920         spin_lock_bh(&host->lock);
921
922         if (!test_bit(DW_MMC_CARD_PRESENT, &slot->flags)) {
923                 spin_unlock_bh(&host->lock);
924                 mrq->cmd->error = -ENOMEDIUM;
925                 mmc_request_done(mmc, mrq);
926                 return;
927         }
928
929         dw_mci_queue_request(host, slot, mrq);
930
931         spin_unlock_bh(&host->lock);
932 }
933
934 static void dw_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
935 {
936         struct dw_mci_slot *slot = mmc_priv(mmc);
937         const struct dw_mci_drv_data *drv_data = slot->host->drv_data;
938         u32 regs;
939
940         switch (ios->bus_width) {
941         case MMC_BUS_WIDTH_4:
942                 slot->ctype = SDMMC_CTYPE_4BIT;
943                 break;
944         case MMC_BUS_WIDTH_8:
945                 slot->ctype = SDMMC_CTYPE_8BIT;
946                 break;
947         default:
948                 /* set default 1 bit mode */
949                 slot->ctype = SDMMC_CTYPE_1BIT;
950         }
951
952         regs = mci_readl(slot->host, UHS_REG);
953
954         /* DDR mode set */
955         if (ios->timing == MMC_TIMING_MMC_DDR52)
956                 regs |= ((0x1 << slot->id) << 16);
957         else
958                 regs &= ~((0x1 << slot->id) << 16);
959
960         mci_writel(slot->host, UHS_REG, regs);
961         slot->host->timing = ios->timing;
962
963         /*
964          * Use mirror of ios->clock to prevent race with mmc
965          * core ios update when finding the minimum.
966          */
967         slot->clock = ios->clock;
968
969         if (drv_data && drv_data->set_ios)
970                 drv_data->set_ios(slot->host, ios);
971
972         /* Slot specific timing and width adjustment */
973         dw_mci_setup_bus(slot, false);
974
975         switch (ios->power_mode) {
976         case MMC_POWER_UP:
977                 set_bit(DW_MMC_CARD_NEED_INIT, &slot->flags);
978                 regs = mci_readl(slot->host, PWREN);
979                 regs |= (1 << slot->id);
980                 mci_writel(slot->host, PWREN, regs);
981                 break;
982         case MMC_POWER_OFF:
983                 regs = mci_readl(slot->host, PWREN);
984                 regs &= ~(1 << slot->id);
985                 mci_writel(slot->host, PWREN, regs);
986                 break;
987         default:
988                 break;
989         }
990 }
991
992 static int dw_mci_get_ro(struct mmc_host *mmc)
993 {
994         int read_only;
995         struct dw_mci_slot *slot = mmc_priv(mmc);
996         int gpio_ro = mmc_gpio_get_ro(mmc);
997
998         /* Use platform get_ro function, else try on board write protect */
999         if ((slot->quirks & DW_MCI_SLOT_QUIRK_NO_WRITE_PROTECT) ||
1000                         (slot->host->quirks & DW_MCI_QUIRK_NO_WRITE_PROTECT))
1001                 read_only = 0;
1002         else if (!IS_ERR_VALUE(gpio_ro))
1003                 read_only = gpio_ro;
1004         else
1005                 read_only =
1006                         mci_readl(slot->host, WRTPRT) & (1 << slot->id) ? 1 : 0;
1007
1008         dev_dbg(&mmc->class_dev, "card is %s\n",
1009                 read_only ? "read-only" : "read-write");
1010
1011         return read_only;
1012 }
1013
1014 static int dw_mci_get_cd(struct mmc_host *mmc)
1015 {
1016         int present;
1017         struct dw_mci_slot *slot = mmc_priv(mmc);
1018         struct dw_mci_board *brd = slot->host->pdata;
1019         struct dw_mci *host = slot->host;
1020         int gpio_cd = mmc_gpio_get_cd(mmc);
1021
1022         /* Use platform get_cd function, else try onboard card detect */
1023         if (brd->quirks & DW_MCI_QUIRK_BROKEN_CARD_DETECTION)
1024                 present = 1;
1025         else if (!IS_ERR_VALUE(gpio_cd))
1026                 present = gpio_cd;
1027         else
1028                 present = (mci_readl(slot->host, CDETECT) & (1 << slot->id))
1029                         == 0 ? 1 : 0;
1030
1031         spin_lock_bh(&host->lock);
1032         if (present) {
1033                 set_bit(DW_MMC_CARD_PRESENT, &slot->flags);
1034                 dev_dbg(&mmc->class_dev, "card is present\n");
1035         } else {
1036                 clear_bit(DW_MMC_CARD_PRESENT, &slot->flags);
1037                 dev_dbg(&mmc->class_dev, "card is not present\n");
1038         }
1039         spin_unlock_bh(&host->lock);
1040
1041         return present;
1042 }
1043
1044 /*
1045  * Disable lower power mode.
1046  *
1047  * Low power mode will stop the card clock when idle.  According to the
1048  * description of the CLKENA register we should disable low power mode
1049  * for SDIO cards if we need SDIO interrupts to work.
1050  *
1051  * This function is fast if low power mode is already disabled.
1052  */
1053 static void dw_mci_disable_low_power(struct dw_mci_slot *slot)
1054 {
1055         struct dw_mci *host = slot->host;
1056         u32 clk_en_a;
1057         const u32 clken_low_pwr = SDMMC_CLKEN_LOW_PWR << slot->id;
1058
1059         clk_en_a = mci_readl(host, CLKENA);
1060
1061         if (clk_en_a & clken_low_pwr) {
1062                 mci_writel(host, CLKENA, clk_en_a & ~clken_low_pwr);
1063                 mci_send_cmd(slot, SDMMC_CMD_UPD_CLK |
1064                              SDMMC_CMD_PRV_DAT_WAIT, 0);
1065         }
1066 }
1067
1068 static void dw_mci_enable_sdio_irq(struct mmc_host *mmc, int enb)
1069 {
1070         struct dw_mci_slot *slot = mmc_priv(mmc);
1071         struct dw_mci *host = slot->host;
1072         u32 int_mask;
1073
1074         /* Enable/disable Slot Specific SDIO interrupt */
1075         int_mask = mci_readl(host, INTMASK);
1076         if (enb) {
1077                 /*
1078                  * Turn off low power mode if it was enabled.  This is a bit of
1079                  * a heavy operation and we disable / enable IRQs a lot, so
1080                  * we'll leave low power mode disabled and it will get
1081                  * re-enabled again in dw_mci_setup_bus().
1082                  */
1083                 dw_mci_disable_low_power(slot);
1084
1085                 mci_writel(host, INTMASK,
1086                            (int_mask | SDMMC_INT_SDIO(slot->id)));
1087         } else {
1088                 mci_writel(host, INTMASK,
1089                            (int_mask & ~SDMMC_INT_SDIO(slot->id)));
1090         }
1091 }
1092
1093 static int dw_mci_execute_tuning(struct mmc_host *mmc, u32 opcode)
1094 {
1095         struct dw_mci_slot *slot = mmc_priv(mmc);
1096         struct dw_mci *host = slot->host;
1097         const struct dw_mci_drv_data *drv_data = host->drv_data;
1098         struct dw_mci_tuning_data tuning_data;
1099         int err = -ENOSYS;
1100
1101         if (opcode == MMC_SEND_TUNING_BLOCK_HS200) {
1102                 if (mmc->ios.bus_width == MMC_BUS_WIDTH_8) {
1103                         tuning_data.blk_pattern = tuning_blk_pattern_8bit;
1104                         tuning_data.blksz = sizeof(tuning_blk_pattern_8bit);
1105                 } else if (mmc->ios.bus_width == MMC_BUS_WIDTH_4) {
1106                         tuning_data.blk_pattern = tuning_blk_pattern_4bit;
1107                         tuning_data.blksz = sizeof(tuning_blk_pattern_4bit);
1108                 } else {
1109                         return -EINVAL;
1110                 }
1111         } else if (opcode == MMC_SEND_TUNING_BLOCK) {
1112                 tuning_data.blk_pattern = tuning_blk_pattern_4bit;
1113                 tuning_data.blksz = sizeof(tuning_blk_pattern_4bit);
1114         } else {
1115                 dev_err(host->dev,
1116                         "Undefined command(%d) for tuning\n", opcode);
1117                 return -EINVAL;
1118         }
1119
1120         if (drv_data && drv_data->execute_tuning)
1121                 err = drv_data->execute_tuning(slot, opcode, &tuning_data);
1122         return err;
1123 }
1124
1125 static const struct mmc_host_ops dw_mci_ops = {
1126         .request                = dw_mci_request,
1127         .pre_req                = dw_mci_pre_req,
1128         .post_req               = dw_mci_post_req,
1129         .set_ios                = dw_mci_set_ios,
1130         .get_ro                 = dw_mci_get_ro,
1131         .get_cd                 = dw_mci_get_cd,
1132         .enable_sdio_irq        = dw_mci_enable_sdio_irq,
1133         .execute_tuning         = dw_mci_execute_tuning,
1134 };
1135
1136 static void dw_mci_request_end(struct dw_mci *host, struct mmc_request *mrq)
1137         __releases(&host->lock)
1138         __acquires(&host->lock)
1139 {
1140         struct dw_mci_slot *slot;
1141         struct mmc_host *prev_mmc = host->cur_slot->mmc;
1142
1143         WARN_ON(host->cmd || host->data);
1144
1145         host->cur_slot->mrq = NULL;
1146         host->mrq = NULL;
1147         if (!list_empty(&host->queue)) {
1148                 slot = list_entry(host->queue.next,
1149                                   struct dw_mci_slot, queue_node);
1150                 list_del(&slot->queue_node);
1151                 dev_vdbg(host->dev, "list not empty: %s is next\n",
1152                          mmc_hostname(slot->mmc));
1153                 host->state = STATE_SENDING_CMD;
1154                 dw_mci_start_request(host, slot);
1155         } else {
1156                 dev_vdbg(host->dev, "list empty\n");
1157                 host->state = STATE_IDLE;
1158         }
1159
1160         spin_unlock(&host->lock);
1161         mmc_request_done(prev_mmc, mrq);
1162         spin_lock(&host->lock);
1163 }
1164
1165 static int dw_mci_command_complete(struct dw_mci *host, struct mmc_command *cmd)
1166 {
1167         u32 status = host->cmd_status;
1168
1169         host->cmd_status = 0;
1170
1171         /* Read the response from the card (up to 16 bytes) */
1172         if (cmd->flags & MMC_RSP_PRESENT) {
1173                 if (cmd->flags & MMC_RSP_136) {
1174                         cmd->resp[3] = mci_readl(host, RESP0);
1175                         cmd->resp[2] = mci_readl(host, RESP1);
1176                         cmd->resp[1] = mci_readl(host, RESP2);
1177                         cmd->resp[0] = mci_readl(host, RESP3);
1178                 } else {
1179                         cmd->resp[0] = mci_readl(host, RESP0);
1180                         cmd->resp[1] = 0;
1181                         cmd->resp[2] = 0;
1182                         cmd->resp[3] = 0;
1183                 }
1184         }
1185
1186         if (status & SDMMC_INT_RTO)
1187                 cmd->error = -ETIMEDOUT;
1188         else if ((cmd->flags & MMC_RSP_CRC) && (status & SDMMC_INT_RCRC))
1189                 cmd->error = -EILSEQ;
1190         else if (status & SDMMC_INT_RESP_ERR)
1191                 cmd->error = -EIO;
1192         else
1193                 cmd->error = 0;
1194
1195         if (cmd->error) {
1196                 /* newer ip versions need a delay between retries */
1197                 if (host->quirks & DW_MCI_QUIRK_RETRY_DELAY)
1198                         mdelay(20);
1199         }
1200
1201         return cmd->error;
1202 }
1203
1204 static int dw_mci_data_complete(struct dw_mci *host, struct mmc_data *data)
1205 {
1206         u32 status = host->data_status;
1207
1208         if (status & DW_MCI_DATA_ERROR_FLAGS) {
1209                 if (status & SDMMC_INT_DRTO) {
1210                         data->error = -ETIMEDOUT;
1211                 } else if (status & SDMMC_INT_DCRC) {
1212                         data->error = -EILSEQ;
1213                 } else if (status & SDMMC_INT_EBE) {
1214                         if (host->dir_status ==
1215                                 DW_MCI_SEND_STATUS) {
1216                                 /*
1217                                  * No data CRC status was returned.
1218                                  * The number of bytes transferred
1219                                  * will be exaggerated in PIO mode.
1220                                  */
1221                                 data->bytes_xfered = 0;
1222                                 data->error = -ETIMEDOUT;
1223                         } else if (host->dir_status ==
1224                                         DW_MCI_RECV_STATUS) {
1225                                 data->error = -EIO;
1226                         }
1227                 } else {
1228                         /* SDMMC_INT_SBE is included */
1229                         data->error = -EIO;
1230                 }
1231
1232                 dev_dbg(host->dev, "data error, status 0x%08x\n", status);
1233
1234                 /*
1235                  * After an error, there may be data lingering
1236                  * in the FIFO
1237                  */
1238                 dw_mci_reset(host);
1239         } else {
1240                 data->bytes_xfered = data->blocks * data->blksz;
1241                 data->error = 0;
1242         }
1243
1244         return data->error;
1245 }
1246
1247 static void dw_mci_tasklet_func(unsigned long priv)
1248 {
1249         struct dw_mci *host = (struct dw_mci *)priv;
1250         struct mmc_data *data;
1251         struct mmc_command *cmd;
1252         struct mmc_request *mrq;
1253         enum dw_mci_state state;
1254         enum dw_mci_state prev_state;
1255         unsigned int err;
1256
1257         spin_lock(&host->lock);
1258
1259         state = host->state;
1260         data = host->data;
1261         mrq = host->mrq;
1262
1263         do {
1264                 prev_state = state;
1265
1266                 switch (state) {
1267                 case STATE_IDLE:
1268                         break;
1269
1270                 case STATE_SENDING_CMD:
1271                         if (!test_and_clear_bit(EVENT_CMD_COMPLETE,
1272                                                 &host->pending_events))
1273                                 break;
1274
1275                         cmd = host->cmd;
1276                         host->cmd = NULL;
1277                         set_bit(EVENT_CMD_COMPLETE, &host->completed_events);
1278                         err = dw_mci_command_complete(host, cmd);
1279                         if (cmd == mrq->sbc && !err) {
1280                                 prev_state = state = STATE_SENDING_CMD;
1281                                 __dw_mci_start_request(host, host->cur_slot,
1282                                                        mrq->cmd);
1283                                 goto unlock;
1284                         }
1285
1286                         if (cmd->data && err) {
1287                                 dw_mci_stop_dma(host);
1288                                 send_stop_abort(host, data);
1289                                 state = STATE_SENDING_STOP;
1290                                 break;
1291                         }
1292
1293                         if (!cmd->data || err) {
1294                                 dw_mci_request_end(host, mrq);
1295                                 goto unlock;
1296                         }
1297
1298                         prev_state = state = STATE_SENDING_DATA;
1299                         /* fall through */
1300
1301                 case STATE_SENDING_DATA:
1302                         if (test_and_clear_bit(EVENT_DATA_ERROR,
1303                                                &host->pending_events)) {
1304                                 dw_mci_stop_dma(host);
1305                                 send_stop_abort(host, data);
1306                                 state = STATE_DATA_ERROR;
1307                                 break;
1308                         }
1309
1310                         if (!test_and_clear_bit(EVENT_XFER_COMPLETE,
1311                                                 &host->pending_events))
1312                                 break;
1313
1314                         set_bit(EVENT_XFER_COMPLETE, &host->completed_events);
1315                         prev_state = state = STATE_DATA_BUSY;
1316                         /* fall through */
1317
1318                 case STATE_DATA_BUSY:
1319                         if (!test_and_clear_bit(EVENT_DATA_COMPLETE,
1320                                                 &host->pending_events))
1321                                 break;
1322
1323                         host->data = NULL;
1324                         set_bit(EVENT_DATA_COMPLETE, &host->completed_events);
1325                         err = dw_mci_data_complete(host, data);
1326
1327                         if (!err) {
1328                                 if (!data->stop || mrq->sbc) {
1329                                         if (mrq->sbc && data->stop)
1330                                                 data->stop->error = 0;
1331                                         dw_mci_request_end(host, mrq);
1332                                         goto unlock;
1333                                 }
1334
1335                                 /* stop command for open-ended transfer*/
1336                                 if (data->stop)
1337                                         send_stop_abort(host, data);
1338                         }
1339
1340                         /*
1341                          * If err has non-zero,
1342                          * stop-abort command has been already issued.
1343                          */
1344                         prev_state = state = STATE_SENDING_STOP;
1345
1346                         /* fall through */
1347
1348                 case STATE_SENDING_STOP:
1349                         if (!test_and_clear_bit(EVENT_CMD_COMPLETE,
1350                                                 &host->pending_events))
1351                                 break;
1352
1353                         /* CMD error in data command */
1354                         if (mrq->cmd->error && mrq->data)
1355                                 dw_mci_reset(host);
1356
1357                         host->cmd = NULL;
1358                         host->data = NULL;
1359
1360                         if (mrq->stop)
1361                                 dw_mci_command_complete(host, mrq->stop);
1362                         else
1363                                 host->cmd_status = 0;
1364
1365                         dw_mci_request_end(host, mrq);
1366                         goto unlock;
1367
1368                 case STATE_DATA_ERROR:
1369                         if (!test_and_clear_bit(EVENT_XFER_COMPLETE,
1370                                                 &host->pending_events))
1371                                 break;
1372
1373                         state = STATE_DATA_BUSY;
1374                         break;
1375                 }
1376         } while (state != prev_state);
1377
1378         host->state = state;
1379 unlock:
1380         spin_unlock(&host->lock);
1381
1382 }
1383
1384 /* push final bytes to part_buf, only use during push */
1385 static void dw_mci_set_part_bytes(struct dw_mci *host, void *buf, int cnt)
1386 {
1387         memcpy((void *)&host->part_buf, buf, cnt);
1388         host->part_buf_count = cnt;
1389 }
1390
1391 /* append bytes to part_buf, only use during push */
1392 static int dw_mci_push_part_bytes(struct dw_mci *host, void *buf, int cnt)
1393 {
1394         cnt = min(cnt, (1 << host->data_shift) - host->part_buf_count);
1395         memcpy((void *)&host->part_buf + host->part_buf_count, buf, cnt);
1396         host->part_buf_count += cnt;
1397         return cnt;
1398 }
1399
1400 /* pull first bytes from part_buf, only use during pull */
1401 static int dw_mci_pull_part_bytes(struct dw_mci *host, void *buf, int cnt)
1402 {
1403         cnt = min(cnt, (int)host->part_buf_count);
1404         if (cnt) {
1405                 memcpy(buf, (void *)&host->part_buf + host->part_buf_start,
1406                        cnt);
1407                 host->part_buf_count -= cnt;
1408                 host->part_buf_start += cnt;
1409         }
1410         return cnt;
1411 }
1412
1413 /* pull final bytes from the part_buf, assuming it's just been filled */
1414 static void dw_mci_pull_final_bytes(struct dw_mci *host, void *buf, int cnt)
1415 {
1416         memcpy(buf, &host->part_buf, cnt);
1417         host->part_buf_start = cnt;
1418         host->part_buf_count = (1 << host->data_shift) - cnt;
1419 }
1420
1421 static void dw_mci_push_data16(struct dw_mci *host, void *buf, int cnt)
1422 {
1423         struct mmc_data *data = host->data;
1424         int init_cnt = cnt;
1425
1426         /* try and push anything in the part_buf */
1427         if (unlikely(host->part_buf_count)) {
1428                 int len = dw_mci_push_part_bytes(host, buf, cnt);
1429                 buf += len;
1430                 cnt -= len;
1431                 if (host->part_buf_count == 2) {
1432                         mci_writew(host, DATA(host->data_offset),
1433                                         host->part_buf16);
1434                         host->part_buf_count = 0;
1435                 }
1436         }
1437 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
1438         if (unlikely((unsigned long)buf & 0x1)) {
1439                 while (cnt >= 2) {
1440                         u16 aligned_buf[64];
1441                         int len = min(cnt & -2, (int)sizeof(aligned_buf));
1442                         int items = len >> 1;
1443                         int i;
1444                         /* memcpy from input buffer into aligned buffer */
1445                         memcpy(aligned_buf, buf, len);
1446                         buf += len;
1447                         cnt -= len;
1448                         /* push data from aligned buffer into fifo */
1449                         for (i = 0; i < items; ++i)
1450                                 mci_writew(host, DATA(host->data_offset),
1451                                                 aligned_buf[i]);
1452                 }
1453         } else
1454 #endif
1455         {
1456                 u16 *pdata = buf;
1457                 for (; cnt >= 2; cnt -= 2)
1458                         mci_writew(host, DATA(host->data_offset), *pdata++);
1459                 buf = pdata;
1460         }
1461         /* put anything remaining in the part_buf */
1462         if (cnt) {
1463                 dw_mci_set_part_bytes(host, buf, cnt);
1464                  /* Push data if we have reached the expected data length */
1465                 if ((data->bytes_xfered + init_cnt) ==
1466                     (data->blksz * data->blocks))
1467                         mci_writew(host, DATA(host->data_offset),
1468                                    host->part_buf16);
1469         }
1470 }
1471
1472 static void dw_mci_pull_data16(struct dw_mci *host, void *buf, int cnt)
1473 {
1474 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
1475         if (unlikely((unsigned long)buf & 0x1)) {
1476                 while (cnt >= 2) {
1477                         /* pull data from fifo into aligned buffer */
1478                         u16 aligned_buf[64];
1479                         int len = min(cnt & -2, (int)sizeof(aligned_buf));
1480                         int items = len >> 1;
1481                         int i;
1482                         for (i = 0; i < items; ++i)
1483                                 aligned_buf[i] = mci_readw(host,
1484                                                 DATA(host->data_offset));
1485                         /* memcpy from aligned buffer into output buffer */
1486                         memcpy(buf, aligned_buf, len);
1487                         buf += len;
1488                         cnt -= len;
1489                 }
1490         } else
1491 #endif
1492         {
1493                 u16 *pdata = buf;
1494                 for (; cnt >= 2; cnt -= 2)
1495                         *pdata++ = mci_readw(host, DATA(host->data_offset));
1496                 buf = pdata;
1497         }
1498         if (cnt) {
1499                 host->part_buf16 = mci_readw(host, DATA(host->data_offset));
1500                 dw_mci_pull_final_bytes(host, buf, cnt);
1501         }
1502 }
1503
1504 static void dw_mci_push_data32(struct dw_mci *host, void *buf, int cnt)
1505 {
1506         struct mmc_data *data = host->data;
1507         int init_cnt = cnt;
1508
1509         /* try and push anything in the part_buf */
1510         if (unlikely(host->part_buf_count)) {
1511                 int len = dw_mci_push_part_bytes(host, buf, cnt);
1512                 buf += len;
1513                 cnt -= len;
1514                 if (host->part_buf_count == 4) {
1515                         mci_writel(host, DATA(host->data_offset),
1516                                         host->part_buf32);
1517                         host->part_buf_count = 0;
1518                 }
1519         }
1520 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
1521         if (unlikely((unsigned long)buf & 0x3)) {
1522                 while (cnt >= 4) {
1523                         u32 aligned_buf[32];
1524                         int len = min(cnt & -4, (int)sizeof(aligned_buf));
1525                         int items = len >> 2;
1526                         int i;
1527                         /* memcpy from input buffer into aligned buffer */
1528                         memcpy(aligned_buf, buf, len);
1529                         buf += len;
1530                         cnt -= len;
1531                         /* push data from aligned buffer into fifo */
1532                         for (i = 0; i < items; ++i)
1533                                 mci_writel(host, DATA(host->data_offset),
1534                                                 aligned_buf[i]);
1535                 }
1536         } else
1537 #endif
1538         {
1539                 u32 *pdata = buf;
1540                 for (; cnt >= 4; cnt -= 4)
1541                         mci_writel(host, DATA(host->data_offset), *pdata++);
1542                 buf = pdata;
1543         }
1544         /* put anything remaining in the part_buf */
1545         if (cnt) {
1546                 dw_mci_set_part_bytes(host, buf, cnt);
1547                  /* Push data if we have reached the expected data length */
1548                 if ((data->bytes_xfered + init_cnt) ==
1549                     (data->blksz * data->blocks))
1550                         mci_writel(host, DATA(host->data_offset),
1551                                    host->part_buf32);
1552         }
1553 }
1554
1555 static void dw_mci_pull_data32(struct dw_mci *host, void *buf, int cnt)
1556 {
1557 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
1558         if (unlikely((unsigned long)buf & 0x3)) {
1559                 while (cnt >= 4) {
1560                         /* pull data from fifo into aligned buffer */
1561                         u32 aligned_buf[32];
1562                         int len = min(cnt & -4, (int)sizeof(aligned_buf));
1563                         int items = len >> 2;
1564                         int i;
1565                         for (i = 0; i < items; ++i)
1566                                 aligned_buf[i] = mci_readl(host,
1567                                                 DATA(host->data_offset));
1568                         /* memcpy from aligned buffer into output buffer */
1569                         memcpy(buf, aligned_buf, len);
1570                         buf += len;
1571                         cnt -= len;
1572                 }
1573         } else
1574 #endif
1575         {
1576                 u32 *pdata = buf;
1577                 for (; cnt >= 4; cnt -= 4)
1578                         *pdata++ = mci_readl(host, DATA(host->data_offset));
1579                 buf = pdata;
1580         }
1581         if (cnt) {
1582                 host->part_buf32 = mci_readl(host, DATA(host->data_offset));
1583                 dw_mci_pull_final_bytes(host, buf, cnt);
1584         }
1585 }
1586
1587 static void dw_mci_push_data64(struct dw_mci *host, void *buf, int cnt)
1588 {
1589         struct mmc_data *data = host->data;
1590         int init_cnt = cnt;
1591
1592         /* try and push anything in the part_buf */
1593         if (unlikely(host->part_buf_count)) {
1594                 int len = dw_mci_push_part_bytes(host, buf, cnt);
1595                 buf += len;
1596                 cnt -= len;
1597
1598                 if (host->part_buf_count == 8) {
1599                         mci_writeq(host, DATA(host->data_offset),
1600                                         host->part_buf);
1601                         host->part_buf_count = 0;
1602                 }
1603         }
1604 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
1605         if (unlikely((unsigned long)buf & 0x7)) {
1606                 while (cnt >= 8) {
1607                         u64 aligned_buf[16];
1608                         int len = min(cnt & -8, (int)sizeof(aligned_buf));
1609                         int items = len >> 3;
1610                         int i;
1611                         /* memcpy from input buffer into aligned buffer */
1612                         memcpy(aligned_buf, buf, len);
1613                         buf += len;
1614                         cnt -= len;
1615                         /* push data from aligned buffer into fifo */
1616                         for (i = 0; i < items; ++i)
1617                                 mci_writeq(host, DATA(host->data_offset),
1618                                                 aligned_buf[i]);
1619                 }
1620         } else
1621 #endif
1622         {
1623                 u64 *pdata = buf;
1624                 for (; cnt >= 8; cnt -= 8)
1625                         mci_writeq(host, DATA(host->data_offset), *pdata++);
1626                 buf = pdata;
1627         }
1628         /* put anything remaining in the part_buf */
1629         if (cnt) {
1630                 dw_mci_set_part_bytes(host, buf, cnt);
1631                 /* Push data if we have reached the expected data length */
1632                 if ((data->bytes_xfered + init_cnt) ==
1633                     (data->blksz * data->blocks))
1634                         mci_writeq(host, DATA(host->data_offset),
1635                                    host->part_buf);
1636         }
1637 }
1638
1639 static void dw_mci_pull_data64(struct dw_mci *host, void *buf, int cnt)
1640 {
1641 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
1642         if (unlikely((unsigned long)buf & 0x7)) {
1643                 while (cnt >= 8) {
1644                         /* pull data from fifo into aligned buffer */
1645                         u64 aligned_buf[16];
1646                         int len = min(cnt & -8, (int)sizeof(aligned_buf));
1647                         int items = len >> 3;
1648                         int i;
1649                         for (i = 0; i < items; ++i)
1650                                 aligned_buf[i] = mci_readq(host,
1651                                                 DATA(host->data_offset));
1652                         /* memcpy from aligned buffer into output buffer */
1653                         memcpy(buf, aligned_buf, len);
1654                         buf += len;
1655                         cnt -= len;
1656                 }
1657         } else
1658 #endif
1659         {
1660                 u64 *pdata = buf;
1661                 for (; cnt >= 8; cnt -= 8)
1662                         *pdata++ = mci_readq(host, DATA(host->data_offset));
1663                 buf = pdata;
1664         }
1665         if (cnt) {
1666                 host->part_buf = mci_readq(host, DATA(host->data_offset));
1667                 dw_mci_pull_final_bytes(host, buf, cnt);
1668         }
1669 }
1670
1671 static void dw_mci_pull_data(struct dw_mci *host, void *buf, int cnt)
1672 {
1673         int len;
1674
1675         /* get remaining partial bytes */
1676         len = dw_mci_pull_part_bytes(host, buf, cnt);
1677         if (unlikely(len == cnt))
1678                 return;
1679         buf += len;
1680         cnt -= len;
1681
1682         /* get the rest of the data */
1683         host->pull_data(host, buf, cnt);
1684 }
1685
1686 static void dw_mci_read_data_pio(struct dw_mci *host, bool dto)
1687 {
1688         struct sg_mapping_iter *sg_miter = &host->sg_miter;
1689         void *buf;
1690         unsigned int offset;
1691         struct mmc_data *data = host->data;
1692         int shift = host->data_shift;
1693         u32 status;
1694         unsigned int len;
1695         unsigned int remain, fcnt;
1696
1697         do {
1698                 if (!sg_miter_next(sg_miter))
1699                         goto done;
1700
1701                 host->sg = sg_miter->piter.sg;
1702                 buf = sg_miter->addr;
1703                 remain = sg_miter->length;
1704                 offset = 0;
1705
1706                 do {
1707                         fcnt = (SDMMC_GET_FCNT(mci_readl(host, STATUS))
1708                                         << shift) + host->part_buf_count;
1709                         len = min(remain, fcnt);
1710                         if (!len)
1711                                 break;
1712                         dw_mci_pull_data(host, (void *)(buf + offset), len);
1713                         data->bytes_xfered += len;
1714                         offset += len;
1715                         remain -= len;
1716                 } while (remain);
1717
1718                 sg_miter->consumed = offset;
1719                 status = mci_readl(host, MINTSTS);
1720                 mci_writel(host, RINTSTS, SDMMC_INT_RXDR);
1721         /* if the RXDR is ready read again */
1722         } while ((status & SDMMC_INT_RXDR) ||
1723                  (dto && SDMMC_GET_FCNT(mci_readl(host, STATUS))));
1724
1725         if (!remain) {
1726                 if (!sg_miter_next(sg_miter))
1727                         goto done;
1728                 sg_miter->consumed = 0;
1729         }
1730         sg_miter_stop(sg_miter);
1731         return;
1732
1733 done:
1734         sg_miter_stop(sg_miter);
1735         host->sg = NULL;
1736         smp_wmb();
1737         set_bit(EVENT_XFER_COMPLETE, &host->pending_events);
1738 }
1739
1740 static void dw_mci_write_data_pio(struct dw_mci *host)
1741 {
1742         struct sg_mapping_iter *sg_miter = &host->sg_miter;
1743         void *buf;
1744         unsigned int offset;
1745         struct mmc_data *data = host->data;
1746         int shift = host->data_shift;
1747         u32 status;
1748         unsigned int len;
1749         unsigned int fifo_depth = host->fifo_depth;
1750         unsigned int remain, fcnt;
1751
1752         do {
1753                 if (!sg_miter_next(sg_miter))
1754                         goto done;
1755
1756                 host->sg = sg_miter->piter.sg;
1757                 buf = sg_miter->addr;
1758                 remain = sg_miter->length;
1759                 offset = 0;
1760
1761                 do {
1762                         fcnt = ((fifo_depth -
1763                                  SDMMC_GET_FCNT(mci_readl(host, STATUS)))
1764                                         << shift) - host->part_buf_count;
1765                         len = min(remain, fcnt);
1766                         if (!len)
1767                                 break;
1768                         host->push_data(host, (void *)(buf + offset), len);
1769                         data->bytes_xfered += len;
1770                         offset += len;
1771                         remain -= len;
1772                 } while (remain);
1773
1774                 sg_miter->consumed = offset;
1775                 status = mci_readl(host, MINTSTS);
1776                 mci_writel(host, RINTSTS, SDMMC_INT_TXDR);
1777         } while (status & SDMMC_INT_TXDR); /* if TXDR write again */
1778
1779         if (!remain) {
1780                 if (!sg_miter_next(sg_miter))
1781                         goto done;
1782                 sg_miter->consumed = 0;
1783         }
1784         sg_miter_stop(sg_miter);
1785         return;
1786
1787 done:
1788         sg_miter_stop(sg_miter);
1789         host->sg = NULL;
1790         smp_wmb();
1791         set_bit(EVENT_XFER_COMPLETE, &host->pending_events);
1792 }
1793
1794 static void dw_mci_cmd_interrupt(struct dw_mci *host, u32 status)
1795 {
1796         if (!host->cmd_status)
1797                 host->cmd_status = status;
1798
1799         smp_wmb();
1800
1801         set_bit(EVENT_CMD_COMPLETE, &host->pending_events);
1802         tasklet_schedule(&host->tasklet);
1803 }
1804
1805 static irqreturn_t dw_mci_interrupt(int irq, void *dev_id)
1806 {
1807         struct dw_mci *host = dev_id;
1808         u32 pending;
1809         int i;
1810
1811         pending = mci_readl(host, MINTSTS); /* read-only mask reg */
1812
1813         /*
1814          * DTO fix - version 2.10a and below, and only if internal DMA
1815          * is configured.
1816          */
1817         if (host->quirks & DW_MCI_QUIRK_IDMAC_DTO) {
1818                 if (!pending &&
1819                     ((mci_readl(host, STATUS) >> 17) & 0x1fff))
1820                         pending |= SDMMC_INT_DATA_OVER;
1821         }
1822
1823         if (pending) {
1824                 if (pending & DW_MCI_CMD_ERROR_FLAGS) {
1825                         mci_writel(host, RINTSTS, DW_MCI_CMD_ERROR_FLAGS);
1826                         host->cmd_status = pending;
1827                         smp_wmb();
1828                         set_bit(EVENT_CMD_COMPLETE, &host->pending_events);
1829                 }
1830
1831                 if (pending & DW_MCI_DATA_ERROR_FLAGS) {
1832                         /* if there is an error report DATA_ERROR */
1833                         mci_writel(host, RINTSTS, DW_MCI_DATA_ERROR_FLAGS);
1834                         host->data_status = pending;
1835                         smp_wmb();
1836                         set_bit(EVENT_DATA_ERROR, &host->pending_events);
1837                         tasklet_schedule(&host->tasklet);
1838                 }
1839
1840                 if (pending & SDMMC_INT_DATA_OVER) {
1841                         mci_writel(host, RINTSTS, SDMMC_INT_DATA_OVER);
1842                         if (!host->data_status)
1843                                 host->data_status = pending;
1844                         smp_wmb();
1845                         if (host->dir_status == DW_MCI_RECV_STATUS) {
1846                                 if (host->sg != NULL)
1847                                         dw_mci_read_data_pio(host, true);
1848                         }
1849                         set_bit(EVENT_DATA_COMPLETE, &host->pending_events);
1850                         tasklet_schedule(&host->tasklet);
1851                 }
1852
1853                 if (pending & SDMMC_INT_RXDR) {
1854                         mci_writel(host, RINTSTS, SDMMC_INT_RXDR);
1855                         if (host->dir_status == DW_MCI_RECV_STATUS && host->sg)
1856                                 dw_mci_read_data_pio(host, false);
1857                 }
1858
1859                 if (pending & SDMMC_INT_TXDR) {
1860                         mci_writel(host, RINTSTS, SDMMC_INT_TXDR);
1861                         if (host->dir_status == DW_MCI_SEND_STATUS && host->sg)
1862                                 dw_mci_write_data_pio(host);
1863                 }
1864
1865                 if (pending & SDMMC_INT_CMD_DONE) {
1866                         mci_writel(host, RINTSTS, SDMMC_INT_CMD_DONE);
1867                         dw_mci_cmd_interrupt(host, pending);
1868                 }
1869
1870                 if (pending & SDMMC_INT_CD) {
1871                         mci_writel(host, RINTSTS, SDMMC_INT_CD);
1872                         queue_work(host->card_workqueue, &host->card_work);
1873                 }
1874
1875                 /* Handle SDIO Interrupts */
1876                 for (i = 0; i < host->num_slots; i++) {
1877                         struct dw_mci_slot *slot = host->slot[i];
1878                         if (pending & SDMMC_INT_SDIO(i)) {
1879                                 mci_writel(host, RINTSTS, SDMMC_INT_SDIO(i));
1880                                 mmc_signal_sdio_irq(slot->mmc);
1881                         }
1882                 }
1883
1884         }
1885
1886 #ifdef CONFIG_MMC_DW_IDMAC
1887         /* Handle DMA interrupts */
1888         pending = mci_readl(host, IDSTS);
1889         if (pending & (SDMMC_IDMAC_INT_TI | SDMMC_IDMAC_INT_RI)) {
1890                 mci_writel(host, IDSTS, SDMMC_IDMAC_INT_TI | SDMMC_IDMAC_INT_RI);
1891                 mci_writel(host, IDSTS, SDMMC_IDMAC_INT_NI);
1892                 host->dma_ops->complete(host);
1893         }
1894 #endif
1895
1896         return IRQ_HANDLED;
1897 }
1898
1899 static void dw_mci_work_routine_card(struct work_struct *work)
1900 {
1901         struct dw_mci *host = container_of(work, struct dw_mci, card_work);
1902         int i;
1903
1904         for (i = 0; i < host->num_slots; i++) {
1905                 struct dw_mci_slot *slot = host->slot[i];
1906                 struct mmc_host *mmc = slot->mmc;
1907                 struct mmc_request *mrq;
1908                 int present;
1909
1910                 present = dw_mci_get_cd(mmc);
1911                 while (present != slot->last_detect_state) {
1912                         dev_dbg(&slot->mmc->class_dev, "card %s\n",
1913                                 present ? "inserted" : "removed");
1914
1915                         spin_lock_bh(&host->lock);
1916
1917                         /* Card change detected */
1918                         slot->last_detect_state = present;
1919
1920                         /* Clean up queue if present */
1921                         mrq = slot->mrq;
1922                         if (mrq) {
1923                                 if (mrq == host->mrq) {
1924                                         host->data = NULL;
1925                                         host->cmd = NULL;
1926
1927                                         switch (host->state) {
1928                                         case STATE_IDLE:
1929                                                 break;
1930                                         case STATE_SENDING_CMD:
1931                                                 mrq->cmd->error = -ENOMEDIUM;
1932                                                 if (!mrq->data)
1933                                                         break;
1934                                                 /* fall through */
1935                                         case STATE_SENDING_DATA:
1936                                                 mrq->data->error = -ENOMEDIUM;
1937                                                 dw_mci_stop_dma(host);
1938                                                 break;
1939                                         case STATE_DATA_BUSY:
1940                                         case STATE_DATA_ERROR:
1941                                                 if (mrq->data->error == -EINPROGRESS)
1942                                                         mrq->data->error = -ENOMEDIUM;
1943                                                 /* fall through */
1944                                         case STATE_SENDING_STOP:
1945                                                 if (mrq->stop)
1946                                                         mrq->stop->error = -ENOMEDIUM;
1947                                                 break;
1948                                         }
1949
1950                                         dw_mci_request_end(host, mrq);
1951                                 } else {
1952                                         list_del(&slot->queue_node);
1953                                         mrq->cmd->error = -ENOMEDIUM;
1954                                         if (mrq->data)
1955                                                 mrq->data->error = -ENOMEDIUM;
1956                                         if (mrq->stop)
1957                                                 mrq->stop->error = -ENOMEDIUM;
1958
1959                                         spin_unlock(&host->lock);
1960                                         mmc_request_done(slot->mmc, mrq);
1961                                         spin_lock(&host->lock);
1962                                 }
1963                         }
1964
1965                         /* Power down slot */
1966                         if (present == 0)
1967                                 dw_mci_reset(host);
1968
1969                         spin_unlock_bh(&host->lock);
1970
1971                         present = dw_mci_get_cd(mmc);
1972                 }
1973
1974                 mmc_detect_change(slot->mmc,
1975                         msecs_to_jiffies(host->pdata->detect_delay_ms));
1976         }
1977 }
1978
1979 #ifdef CONFIG_OF
1980 /* given a slot id, find out the device node representing that slot */
1981 static struct device_node *dw_mci_of_find_slot_node(struct device *dev, u8 slot)
1982 {
1983         struct device_node *np;
1984         const __be32 *addr;
1985         int len;
1986
1987         if (!dev || !dev->of_node)
1988                 return NULL;
1989
1990         for_each_child_of_node(dev->of_node, np) {
1991                 addr = of_get_property(np, "reg", &len);
1992                 if (!addr || (len < sizeof(int)))
1993                         continue;
1994                 if (be32_to_cpup(addr) == slot)
1995                         return np;
1996         }
1997         return NULL;
1998 }
1999
2000 static struct dw_mci_of_slot_quirks {
2001         char *quirk;
2002         int id;
2003 } of_slot_quirks[] = {
2004         {
2005                 .quirk  = "disable-wp",
2006                 .id     = DW_MCI_SLOT_QUIRK_NO_WRITE_PROTECT,
2007         },
2008 };
2009
2010 static int dw_mci_of_get_slot_quirks(struct device *dev, u8 slot)
2011 {
2012         struct device_node *np = dw_mci_of_find_slot_node(dev, slot);
2013         int quirks = 0;
2014         int idx;
2015
2016         /* get quirks */
2017         for (idx = 0; idx < ARRAY_SIZE(of_slot_quirks); idx++)
2018                 if (of_get_property(np, of_slot_quirks[idx].quirk, NULL)) {
2019                         dev_warn(dev, "Slot quirk %s is deprecated\n",
2020                                         of_slot_quirks[idx].quirk);
2021                         quirks |= of_slot_quirks[idx].id;
2022                 }
2023
2024         return quirks;
2025 }
2026 #else /* CONFIG_OF */
2027 static int dw_mci_of_get_slot_quirks(struct device *dev, u8 slot)
2028 {
2029         return 0;
2030 }
2031 static struct device_node *dw_mci_of_find_slot_node(struct device *dev, u8 slot)
2032 {
2033         return NULL;
2034 }
2035 #endif /* CONFIG_OF */
2036
2037 static int dw_mci_init_slot(struct dw_mci *host, unsigned int id)
2038 {
2039         struct mmc_host *mmc;
2040         struct dw_mci_slot *slot;
2041         const struct dw_mci_drv_data *drv_data = host->drv_data;
2042         int ctrl_id, ret;
2043         u32 freq[2];
2044
2045         mmc = mmc_alloc_host(sizeof(struct dw_mci_slot), host->dev);
2046         if (!mmc)
2047                 return -ENOMEM;
2048
2049         slot = mmc_priv(mmc);
2050         slot->id = id;
2051         slot->mmc = mmc;
2052         slot->host = host;
2053         host->slot[id] = slot;
2054
2055         slot->quirks = dw_mci_of_get_slot_quirks(host->dev, slot->id);
2056
2057         mmc->ops = &dw_mci_ops;
2058         if (of_property_read_u32_array(host->dev->of_node,
2059                                        "clock-freq-min-max", freq, 2)) {
2060                 mmc->f_min = DW_MCI_FREQ_MIN;
2061                 mmc->f_max = DW_MCI_FREQ_MAX;
2062         } else {
2063                 mmc->f_min = freq[0];
2064                 mmc->f_max = freq[1];
2065         }
2066
2067         mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
2068
2069         if (host->pdata->caps)
2070                 mmc->caps = host->pdata->caps;
2071
2072         if (host->pdata->pm_caps)
2073                 mmc->pm_caps = host->pdata->pm_caps;
2074
2075         if (host->dev->of_node) {
2076                 ctrl_id = of_alias_get_id(host->dev->of_node, "mshc");
2077                 if (ctrl_id < 0)
2078                         ctrl_id = 0;
2079         } else {
2080                 ctrl_id = to_platform_device(host->dev)->id;
2081         }
2082         if (drv_data && drv_data->caps)
2083                 mmc->caps |= drv_data->caps[ctrl_id];
2084
2085         if (host->pdata->caps2)
2086                 mmc->caps2 = host->pdata->caps2;
2087
2088         mmc_of_parse(mmc);
2089
2090         if (host->pdata->blk_settings) {
2091                 mmc->max_segs = host->pdata->blk_settings->max_segs;
2092                 mmc->max_blk_size = host->pdata->blk_settings->max_blk_size;
2093                 mmc->max_blk_count = host->pdata->blk_settings->max_blk_count;
2094                 mmc->max_req_size = host->pdata->blk_settings->max_req_size;
2095                 mmc->max_seg_size = host->pdata->blk_settings->max_seg_size;
2096         } else {
2097                 /* Useful defaults if platform data is unset. */
2098 #ifdef CONFIG_MMC_DW_IDMAC
2099                 mmc->max_segs = host->ring_size;
2100                 mmc->max_blk_size = 65536;
2101                 mmc->max_blk_count = host->ring_size;
2102                 mmc->max_seg_size = 0x1000;
2103                 mmc->max_req_size = mmc->max_seg_size * mmc->max_blk_count;
2104 #else
2105                 mmc->max_segs = 64;
2106                 mmc->max_blk_size = 65536; /* BLKSIZ is 16 bits */
2107                 mmc->max_blk_count = 512;
2108                 mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count;
2109                 mmc->max_seg_size = mmc->max_req_size;
2110 #endif /* CONFIG_MMC_DW_IDMAC */
2111         }
2112
2113         if (dw_mci_get_cd(mmc))
2114                 set_bit(DW_MMC_CARD_PRESENT, &slot->flags);
2115         else
2116                 clear_bit(DW_MMC_CARD_PRESENT, &slot->flags);
2117
2118         ret = mmc_add_host(mmc);
2119         if (ret)
2120                 goto err_setup_bus;
2121
2122 #if defined(CONFIG_DEBUG_FS)
2123         dw_mci_init_debugfs(slot);
2124 #endif
2125
2126         /* Card initially undetected */
2127         slot->last_detect_state = 0;
2128
2129         return 0;
2130
2131 err_setup_bus:
2132         mmc_free_host(mmc);
2133         return -EINVAL;
2134 }
2135
2136 static void dw_mci_cleanup_slot(struct dw_mci_slot *slot, unsigned int id)
2137 {
2138         /* Debugfs stuff is cleaned up by mmc core */
2139         mmc_remove_host(slot->mmc);
2140         slot->host->slot[id] = NULL;
2141         mmc_free_host(slot->mmc);
2142 }
2143
2144 static void dw_mci_init_dma(struct dw_mci *host)
2145 {
2146         /* Alloc memory for sg translation */
2147         host->sg_cpu = dmam_alloc_coherent(host->dev, PAGE_SIZE,
2148                                           &host->sg_dma, GFP_KERNEL);
2149         if (!host->sg_cpu) {
2150                 dev_err(host->dev, "%s: could not alloc DMA memory\n",
2151                         __func__);
2152                 goto no_dma;
2153         }
2154
2155         /* Determine which DMA interface to use */
2156 #ifdef CONFIG_MMC_DW_IDMAC
2157         host->dma_ops = &dw_mci_idmac_ops;
2158         dev_info(host->dev, "Using internal DMA controller.\n");
2159 #endif
2160
2161         if (!host->dma_ops)
2162                 goto no_dma;
2163
2164         if (host->dma_ops->init && host->dma_ops->start &&
2165             host->dma_ops->stop && host->dma_ops->cleanup) {
2166                 if (host->dma_ops->init(host)) {
2167                         dev_err(host->dev, "%s: Unable to initialize "
2168                                 "DMA Controller.\n", __func__);
2169                         goto no_dma;
2170                 }
2171         } else {
2172                 dev_err(host->dev, "DMA initialization not found.\n");
2173                 goto no_dma;
2174         }
2175
2176         host->use_dma = 1;
2177         return;
2178
2179 no_dma:
2180         dev_info(host->dev, "Using PIO mode.\n");
2181         host->use_dma = 0;
2182         return;
2183 }
2184
2185 static bool dw_mci_ctrl_reset(struct dw_mci *host, u32 reset)
2186 {
2187         unsigned long timeout = jiffies + msecs_to_jiffies(500);
2188         u32 ctrl;
2189
2190         ctrl = mci_readl(host, CTRL);
2191         ctrl |= reset;
2192         mci_writel(host, CTRL, ctrl);
2193
2194         /* wait till resets clear */
2195         do {
2196                 ctrl = mci_readl(host, CTRL);
2197                 if (!(ctrl & reset))
2198                         return true;
2199         } while (time_before(jiffies, timeout));
2200
2201         dev_err(host->dev,
2202                 "Timeout resetting block (ctrl reset %#x)\n",
2203                 ctrl & reset);
2204
2205         return false;
2206 }
2207
2208 static bool dw_mci_reset(struct dw_mci *host)
2209 {
2210         u32 flags = SDMMC_CTRL_RESET | SDMMC_CTRL_FIFO_RESET;
2211         bool ret = false;
2212
2213         /*
2214          * Reseting generates a block interrupt, hence setting
2215          * the scatter-gather pointer to NULL.
2216          */
2217         if (host->sg) {
2218                 sg_miter_stop(&host->sg_miter);
2219                 host->sg = NULL;
2220         }
2221
2222         if (host->use_dma)
2223                 flags |= SDMMC_CTRL_DMA_RESET;
2224
2225         if (dw_mci_ctrl_reset(host, flags)) {
2226                 /*
2227                  * In all cases we clear the RAWINTS register to clear any
2228                  * interrupts.
2229                  */
2230                 mci_writel(host, RINTSTS, 0xFFFFFFFF);
2231
2232                 /* if using dma we wait for dma_req to clear */
2233                 if (host->use_dma) {
2234                         unsigned long timeout = jiffies + msecs_to_jiffies(500);
2235                         u32 status;
2236                         do {
2237                                 status = mci_readl(host, STATUS);
2238                                 if (!(status & SDMMC_STATUS_DMA_REQ))
2239                                         break;
2240                                 cpu_relax();
2241                         } while (time_before(jiffies, timeout));
2242
2243                         if (status & SDMMC_STATUS_DMA_REQ) {
2244                                 dev_err(host->dev,
2245                                         "%s: Timeout waiting for dma_req to "
2246                                         "clear during reset\n", __func__);
2247                                 goto ciu_out;
2248                         }
2249
2250                         /* when using DMA next we reset the fifo again */
2251                         if (!dw_mci_ctrl_reset(host, SDMMC_CTRL_FIFO_RESET))
2252                                 goto ciu_out;
2253                 }
2254         } else {
2255                 /* if the controller reset bit did clear, then set clock regs */
2256                 if (!(mci_readl(host, CTRL) & SDMMC_CTRL_RESET)) {
2257                         dev_err(host->dev, "%s: fifo/dma reset bits didn't "
2258                                 "clear but ciu was reset, doing clock update\n",
2259                                 __func__);
2260                         goto ciu_out;
2261                 }
2262         }
2263
2264 #if IS_ENABLED(CONFIG_MMC_DW_IDMAC)
2265         /* It is also recommended that we reset and reprogram idmac */
2266         dw_mci_idmac_reset(host);
2267 #endif
2268
2269         ret = true;
2270
2271 ciu_out:
2272         /* After a CTRL reset we need to have CIU set clock registers  */
2273         mci_send_cmd(host->cur_slot, SDMMC_CMD_UPD_CLK, 0);
2274
2275         return ret;
2276 }
2277
2278 #ifdef CONFIG_OF
2279 static struct dw_mci_of_quirks {
2280         char *quirk;
2281         int id;
2282 } of_quirks[] = {
2283         {
2284                 .quirk  = "broken-cd",
2285                 .id     = DW_MCI_QUIRK_BROKEN_CARD_DETECTION,
2286         }, {
2287                 .quirk  = "disable-wp",
2288                 .id     = DW_MCI_QUIRK_NO_WRITE_PROTECT,
2289         },
2290 };
2291
2292 static struct dw_mci_board *dw_mci_parse_dt(struct dw_mci *host)
2293 {
2294         struct dw_mci_board *pdata;
2295         struct device *dev = host->dev;
2296         struct device_node *np = dev->of_node;
2297         const struct dw_mci_drv_data *drv_data = host->drv_data;
2298         int idx, ret;
2299         u32 clock_frequency;
2300
2301         pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
2302         if (!pdata) {
2303                 dev_err(dev, "could not allocate memory for pdata\n");
2304                 return ERR_PTR(-ENOMEM);
2305         }
2306
2307         /* find out number of slots supported */
2308         if (of_property_read_u32(dev->of_node, "num-slots",
2309                                 &pdata->num_slots)) {
2310                 dev_info(dev, "num-slots property not found, "
2311                                 "assuming 1 slot is available\n");
2312                 pdata->num_slots = 1;
2313         }
2314
2315         /* get quirks */
2316         for (idx = 0; idx < ARRAY_SIZE(of_quirks); idx++)
2317                 if (of_get_property(np, of_quirks[idx].quirk, NULL))
2318                         pdata->quirks |= of_quirks[idx].id;
2319
2320         if (of_property_read_u32(np, "fifo-depth", &pdata->fifo_depth))
2321                 dev_info(dev, "fifo-depth property not found, using "
2322                                 "value of FIFOTH register as default\n");
2323
2324         of_property_read_u32(np, "card-detect-delay", &pdata->detect_delay_ms);
2325
2326         if (!of_property_read_u32(np, "clock-frequency", &clock_frequency))
2327                 pdata->bus_hz = clock_frequency;
2328
2329         if (drv_data && drv_data->parse_dt) {
2330                 ret = drv_data->parse_dt(host);
2331                 if (ret)
2332                         return ERR_PTR(ret);
2333         }
2334
2335         if (of_find_property(np, "supports-highspeed", NULL))
2336                 pdata->caps |= MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED;
2337
2338         return pdata;
2339 }
2340
2341 #else /* CONFIG_OF */
2342 static struct dw_mci_board *dw_mci_parse_dt(struct dw_mci *host)
2343 {
2344         return ERR_PTR(-EINVAL);
2345 }
2346 #endif /* CONFIG_OF */
2347
2348 int dw_mci_probe(struct dw_mci *host)
2349 {
2350         const struct dw_mci_drv_data *drv_data = host->drv_data;
2351         int width, i, ret = 0;
2352         u32 fifo_size;
2353         int init_slots = 0;
2354
2355         if (!host->pdata) {
2356                 host->pdata = dw_mci_parse_dt(host);
2357                 if (IS_ERR(host->pdata)) {
2358                         dev_err(host->dev, "platform data not available\n");
2359                         return -EINVAL;
2360                 }
2361         }
2362
2363         if (host->pdata->num_slots > 1) {
2364                 dev_err(host->dev,
2365                         "Platform data must supply num_slots.\n");
2366                 return -ENODEV;
2367         }
2368
2369         host->biu_clk = devm_clk_get(host->dev, "biu");
2370         if (IS_ERR(host->biu_clk)) {
2371                 dev_dbg(host->dev, "biu clock not available\n");
2372         } else {
2373                 ret = clk_prepare_enable(host->biu_clk);
2374                 if (ret) {
2375                         dev_err(host->dev, "failed to enable biu clock\n");
2376                         return ret;
2377                 }
2378         }
2379
2380         host->ciu_clk = devm_clk_get(host->dev, "ciu");
2381         if (IS_ERR(host->ciu_clk)) {
2382                 dev_dbg(host->dev, "ciu clock not available\n");
2383                 host->bus_hz = host->pdata->bus_hz;
2384         } else {
2385                 ret = clk_prepare_enable(host->ciu_clk);
2386                 if (ret) {
2387                         dev_err(host->dev, "failed to enable ciu clock\n");
2388                         goto err_clk_biu;
2389                 }
2390
2391                 if (host->pdata->bus_hz) {
2392                         ret = clk_set_rate(host->ciu_clk, host->pdata->bus_hz);
2393                         if (ret)
2394                                 dev_warn(host->dev,
2395                                          "Unable to set bus rate to %uHz\n",
2396                                          host->pdata->bus_hz);
2397                 }
2398                 host->bus_hz = clk_get_rate(host->ciu_clk);
2399         }
2400
2401         if (!host->bus_hz) {
2402                 dev_err(host->dev,
2403                         "Platform data must supply bus speed\n");
2404                 ret = -ENODEV;
2405                 goto err_clk_ciu;
2406         }
2407
2408         if (drv_data && drv_data->init) {
2409                 ret = drv_data->init(host);
2410                 if (ret) {
2411                         dev_err(host->dev,
2412                                 "implementation specific init failed\n");
2413                         goto err_clk_ciu;
2414                 }
2415         }
2416
2417         if (drv_data && drv_data->setup_clock) {
2418                 ret = drv_data->setup_clock(host);
2419                 if (ret) {
2420                         dev_err(host->dev,
2421                                 "implementation specific clock setup failed\n");
2422                         goto err_clk_ciu;
2423                 }
2424         }
2425
2426         host->vmmc = devm_regulator_get_optional(host->dev, "vmmc");
2427         if (IS_ERR(host->vmmc)) {
2428                 ret = PTR_ERR(host->vmmc);
2429                 if (ret == -EPROBE_DEFER)
2430                         goto err_clk_ciu;
2431
2432                 dev_info(host->dev, "no vmmc regulator found: %d\n", ret);
2433                 host->vmmc = NULL;
2434         } else {
2435                 ret = regulator_enable(host->vmmc);
2436                 if (ret) {
2437                         if (ret != -EPROBE_DEFER)
2438                                 dev_err(host->dev,
2439                                         "regulator_enable fail: %d\n", ret);
2440                         goto err_clk_ciu;
2441                 }
2442         }
2443
2444         host->quirks = host->pdata->quirks;
2445
2446         spin_lock_init(&host->lock);
2447         INIT_LIST_HEAD(&host->queue);
2448
2449         /*
2450          * Get the host data width - this assumes that HCON has been set with
2451          * the correct values.
2452          */
2453         i = (mci_readl(host, HCON) >> 7) & 0x7;
2454         if (!i) {
2455                 host->push_data = dw_mci_push_data16;
2456                 host->pull_data = dw_mci_pull_data16;
2457                 width = 16;
2458                 host->data_shift = 1;
2459         } else if (i == 2) {
2460                 host->push_data = dw_mci_push_data64;
2461                 host->pull_data = dw_mci_pull_data64;
2462                 width = 64;
2463                 host->data_shift = 3;
2464         } else {
2465                 /* Check for a reserved value, and warn if it is */
2466                 WARN((i != 1),
2467                      "HCON reports a reserved host data width!\n"
2468                      "Defaulting to 32-bit access.\n");
2469                 host->push_data = dw_mci_push_data32;
2470                 host->pull_data = dw_mci_pull_data32;
2471                 width = 32;
2472                 host->data_shift = 2;
2473         }
2474
2475         /* Reset all blocks */
2476         if (!dw_mci_ctrl_reset(host, SDMMC_CTRL_ALL_RESET_FLAGS))
2477                 return -ENODEV;
2478
2479         host->dma_ops = host->pdata->dma_ops;
2480         dw_mci_init_dma(host);
2481
2482         /* Clear the interrupts for the host controller */
2483         mci_writel(host, RINTSTS, 0xFFFFFFFF);
2484         mci_writel(host, INTMASK, 0); /* disable all mmc interrupt first */
2485
2486         /* Put in max timeout */
2487         mci_writel(host, TMOUT, 0xFFFFFFFF);
2488
2489         /*
2490          * FIFO threshold settings  RxMark  = fifo_size / 2 - 1,
2491          *                          Tx Mark = fifo_size / 2 DMA Size = 8
2492          */
2493         if (!host->pdata->fifo_depth) {
2494                 /*
2495                  * Power-on value of RX_WMark is FIFO_DEPTH-1, but this may
2496                  * have been overwritten by the bootloader, just like we're
2497                  * about to do, so if you know the value for your hardware, you
2498                  * should put it in the platform data.
2499                  */
2500                 fifo_size = mci_readl(host, FIFOTH);
2501                 fifo_size = 1 + ((fifo_size >> 16) & 0xfff);
2502         } else {
2503                 fifo_size = host->pdata->fifo_depth;
2504         }
2505         host->fifo_depth = fifo_size;
2506         host->fifoth_val =
2507                 SDMMC_SET_FIFOTH(0x2, fifo_size / 2 - 1, fifo_size / 2);
2508         mci_writel(host, FIFOTH, host->fifoth_val);
2509
2510         /* disable clock to CIU */
2511         mci_writel(host, CLKENA, 0);
2512         mci_writel(host, CLKSRC, 0);
2513
2514         /*
2515          * In 2.40a spec, Data offset is changed.
2516          * Need to check the version-id and set data-offset for DATA register.
2517          */
2518         host->verid = SDMMC_GET_VERID(mci_readl(host, VERID));
2519         dev_info(host->dev, "Version ID is %04x\n", host->verid);
2520
2521         if (host->verid < DW_MMC_240A)
2522                 host->data_offset = DATA_OFFSET;
2523         else
2524                 host->data_offset = DATA_240A_OFFSET;
2525
2526         tasklet_init(&host->tasklet, dw_mci_tasklet_func, (unsigned long)host);
2527         host->card_workqueue = alloc_workqueue("dw-mci-card",
2528                         WQ_MEM_RECLAIM, 1);
2529         if (!host->card_workqueue) {
2530                 ret = -ENOMEM;
2531                 goto err_dmaunmap;
2532         }
2533         INIT_WORK(&host->card_work, dw_mci_work_routine_card);
2534         ret = devm_request_irq(host->dev, host->irq, dw_mci_interrupt,
2535                                host->irq_flags, "dw-mci", host);
2536         if (ret)
2537                 goto err_workqueue;
2538
2539         if (host->pdata->num_slots)
2540                 host->num_slots = host->pdata->num_slots;
2541         else
2542                 host->num_slots = ((mci_readl(host, HCON) >> 1) & 0x1F) + 1;
2543
2544         /*
2545          * Enable interrupts for command done, data over, data empty, card det,
2546          * receive ready and error such as transmit, receive timeout, crc error
2547          */
2548         mci_writel(host, RINTSTS, 0xFFFFFFFF);
2549         mci_writel(host, INTMASK, SDMMC_INT_CMD_DONE | SDMMC_INT_DATA_OVER |
2550                    SDMMC_INT_TXDR | SDMMC_INT_RXDR |
2551                    DW_MCI_ERROR_FLAGS | SDMMC_INT_CD);
2552         mci_writel(host, CTRL, SDMMC_CTRL_INT_ENABLE); /* Enable mci interrupt */
2553
2554         dev_info(host->dev, "DW MMC controller at irq %d, "
2555                  "%d bit host data width, "
2556                  "%u deep fifo\n",
2557                  host->irq, width, fifo_size);
2558
2559         /* We need at least one slot to succeed */
2560         for (i = 0; i < host->num_slots; i++) {
2561                 ret = dw_mci_init_slot(host, i);
2562                 if (ret)
2563                         dev_dbg(host->dev, "slot %d init failed\n", i);
2564                 else
2565                         init_slots++;
2566         }
2567
2568         if (init_slots) {
2569                 dev_info(host->dev, "%d slots initialized\n", init_slots);
2570         } else {
2571                 dev_dbg(host->dev, "attempted to initialize %d slots, "
2572                                         "but failed on all\n", host->num_slots);
2573                 goto err_workqueue;
2574         }
2575
2576         if (host->quirks & DW_MCI_QUIRK_IDMAC_DTO)
2577                 dev_info(host->dev, "Internal DMAC interrupt fix enabled.\n");
2578
2579         return 0;
2580
2581 err_workqueue:
2582         destroy_workqueue(host->card_workqueue);
2583
2584 err_dmaunmap:
2585         if (host->use_dma && host->dma_ops->exit)
2586                 host->dma_ops->exit(host);
2587         if (host->vmmc)
2588                 regulator_disable(host->vmmc);
2589
2590 err_clk_ciu:
2591         if (!IS_ERR(host->ciu_clk))
2592                 clk_disable_unprepare(host->ciu_clk);
2593
2594 err_clk_biu:
2595         if (!IS_ERR(host->biu_clk))
2596                 clk_disable_unprepare(host->biu_clk);
2597
2598         return ret;
2599 }
2600 EXPORT_SYMBOL(dw_mci_probe);
2601
2602 void dw_mci_remove(struct dw_mci *host)
2603 {
2604         int i;
2605
2606         mci_writel(host, RINTSTS, 0xFFFFFFFF);
2607         mci_writel(host, INTMASK, 0); /* disable all mmc interrupt first */
2608
2609         for (i = 0; i < host->num_slots; i++) {
2610                 dev_dbg(host->dev, "remove slot %d\n", i);
2611                 if (host->slot[i])
2612                         dw_mci_cleanup_slot(host->slot[i], i);
2613         }
2614
2615         /* disable clock to CIU */
2616         mci_writel(host, CLKENA, 0);
2617         mci_writel(host, CLKSRC, 0);
2618
2619         destroy_workqueue(host->card_workqueue);
2620
2621         if (host->use_dma && host->dma_ops->exit)
2622                 host->dma_ops->exit(host);
2623
2624         if (host->vmmc)
2625                 regulator_disable(host->vmmc);
2626
2627         if (!IS_ERR(host->ciu_clk))
2628                 clk_disable_unprepare(host->ciu_clk);
2629
2630         if (!IS_ERR(host->biu_clk))
2631                 clk_disable_unprepare(host->biu_clk);
2632 }
2633 EXPORT_SYMBOL(dw_mci_remove);
2634
2635
2636
2637 #ifdef CONFIG_PM_SLEEP
2638 /*
2639  * TODO: we should probably disable the clock to the card in the suspend path.
2640  */
2641 int dw_mci_suspend(struct dw_mci *host)
2642 {
2643         if (host->vmmc)
2644                 regulator_disable(host->vmmc);
2645
2646         return 0;
2647 }
2648 EXPORT_SYMBOL(dw_mci_suspend);
2649
2650 int dw_mci_resume(struct dw_mci *host)
2651 {
2652         int i, ret;
2653
2654         if (host->vmmc) {
2655                 ret = regulator_enable(host->vmmc);
2656                 if (ret) {
2657                         dev_err(host->dev,
2658                                 "failed to enable regulator: %d\n", ret);
2659                         return ret;
2660                 }
2661         }
2662
2663         if (!dw_mci_ctrl_reset(host, SDMMC_CTRL_ALL_RESET_FLAGS)) {
2664                 ret = -ENODEV;
2665                 return ret;
2666         }
2667
2668         if (host->use_dma && host->dma_ops->init)
2669                 host->dma_ops->init(host);
2670
2671         /*
2672          * Restore the initial value at FIFOTH register
2673          * And Invalidate the prev_blksz with zero
2674          */
2675         mci_writel(host, FIFOTH, host->fifoth_val);
2676         host->prev_blksz = 0;
2677
2678         /* Put in max timeout */
2679         mci_writel(host, TMOUT, 0xFFFFFFFF);
2680
2681         mci_writel(host, RINTSTS, 0xFFFFFFFF);
2682         mci_writel(host, INTMASK, SDMMC_INT_CMD_DONE | SDMMC_INT_DATA_OVER |
2683                    SDMMC_INT_TXDR | SDMMC_INT_RXDR |
2684                    DW_MCI_ERROR_FLAGS | SDMMC_INT_CD);
2685         mci_writel(host, CTRL, SDMMC_CTRL_INT_ENABLE);
2686
2687         for (i = 0; i < host->num_slots; i++) {
2688                 struct dw_mci_slot *slot = host->slot[i];
2689                 if (!slot)
2690                         continue;
2691                 if (slot->mmc->pm_flags & MMC_PM_KEEP_POWER) {
2692                         dw_mci_set_ios(slot->mmc, &slot->mmc->ios);
2693                         dw_mci_setup_bus(slot, true);
2694                 }
2695         }
2696         return 0;
2697 }
2698 EXPORT_SYMBOL(dw_mci_resume);
2699 #endif /* CONFIG_PM_SLEEP */
2700
2701 static int __init dw_mci_init(void)
2702 {
2703         pr_info("Synopsys Designware Multimedia Card Interface Driver\n");
2704         return 0;
2705 }
2706
2707 static void __exit dw_mci_exit(void)
2708 {
2709 }
2710
2711 module_init(dw_mci_init);
2712 module_exit(dw_mci_exit);
2713
2714 MODULE_DESCRIPTION("DW Multimedia Card Interface driver");
2715 MODULE_AUTHOR("NXP Semiconductor VietNam");
2716 MODULE_AUTHOR("Imagination Technologies Ltd");
2717 MODULE_LICENSE("GPL v2");