Merge master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
[pandora-kernel.git] / drivers / mmc / host / sdhci.c
1 /*
2  *  linux/drivers/mmc/host/sdhci.c - Secure Digital Host Controller Interface driver
3  *
4  *  Copyright (C) 2005-2007 Pierre Ossman, All Rights Reserved.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or (at
9  * your option) any later version.
10  */
11
12 #include <linux/delay.h>
13 #include <linux/highmem.h>
14 #include <linux/pci.h>
15 #include <linux/dma-mapping.h>
16
17 #include <linux/mmc/host.h>
18
19 #include <asm/scatterlist.h>
20
21 #include "sdhci.h"
22
23 #define DRIVER_NAME "sdhci"
24
25 #define DBG(f, x...) \
26         pr_debug(DRIVER_NAME " [%s()]: " f, __func__,## x)
27
28 static unsigned int debug_quirks = 0;
29
30 #define SDHCI_QUIRK_CLOCK_BEFORE_RESET                  (1<<0)
31 #define SDHCI_QUIRK_FORCE_DMA                           (1<<1)
32 /* Controller doesn't like some resets when there is no card inserted. */
33 #define SDHCI_QUIRK_NO_CARD_NO_RESET                    (1<<2)
34 #define SDHCI_QUIRK_SINGLE_POWER_WRITE                  (1<<3)
35 #define SDHCI_QUIRK_RESET_CMD_DATA_ON_IOS               (1<<4)
36 #define SDHCI_QUIRK_BROKEN_DMA                          (1<<5)
37
38 static const struct pci_device_id pci_ids[] __devinitdata = {
39         {
40                 .vendor         = PCI_VENDOR_ID_RICOH,
41                 .device         = PCI_DEVICE_ID_RICOH_R5C822,
42                 .subvendor      = PCI_VENDOR_ID_IBM,
43                 .subdevice      = PCI_ANY_ID,
44                 .driver_data    = SDHCI_QUIRK_CLOCK_BEFORE_RESET |
45                                   SDHCI_QUIRK_FORCE_DMA,
46         },
47
48         {
49                 .vendor         = PCI_VENDOR_ID_RICOH,
50                 .device         = PCI_DEVICE_ID_RICOH_R5C822,
51                 .subvendor      = PCI_ANY_ID,
52                 .subdevice      = PCI_ANY_ID,
53                 .driver_data    = SDHCI_QUIRK_FORCE_DMA |
54                                   SDHCI_QUIRK_NO_CARD_NO_RESET,
55         },
56
57         {
58                 .vendor         = PCI_VENDOR_ID_TI,
59                 .device         = PCI_DEVICE_ID_TI_XX21_XX11_SD,
60                 .subvendor      = PCI_ANY_ID,
61                 .subdevice      = PCI_ANY_ID,
62                 .driver_data    = SDHCI_QUIRK_FORCE_DMA,
63         },
64
65         {
66                 .vendor         = PCI_VENDOR_ID_ENE,
67                 .device         = PCI_DEVICE_ID_ENE_CB712_SD,
68                 .subvendor      = PCI_ANY_ID,
69                 .subdevice      = PCI_ANY_ID,
70                 .driver_data    = SDHCI_QUIRK_SINGLE_POWER_WRITE |
71                                   SDHCI_QUIRK_BROKEN_DMA,
72         },
73
74         {
75                 .vendor         = PCI_VENDOR_ID_ENE,
76                 .device         = PCI_DEVICE_ID_ENE_CB712_SD_2,
77                 .subvendor      = PCI_ANY_ID,
78                 .subdevice      = PCI_ANY_ID,
79                 .driver_data    = SDHCI_QUIRK_SINGLE_POWER_WRITE |
80                                   SDHCI_QUIRK_BROKEN_DMA,
81         },
82
83         {
84                 .vendor         = PCI_VENDOR_ID_ENE,
85                 .device         = PCI_DEVICE_ID_ENE_CB714_SD,
86                 .subvendor      = PCI_ANY_ID,
87                 .subdevice      = PCI_ANY_ID,
88                 .driver_data    = SDHCI_QUIRK_SINGLE_POWER_WRITE |
89                                   SDHCI_QUIRK_RESET_CMD_DATA_ON_IOS,
90         },
91
92         {
93                 .vendor         = PCI_VENDOR_ID_ENE,
94                 .device         = PCI_DEVICE_ID_ENE_CB714_SD_2,
95                 .subvendor      = PCI_ANY_ID,
96                 .subdevice      = PCI_ANY_ID,
97                 .driver_data    = SDHCI_QUIRK_SINGLE_POWER_WRITE |
98                                   SDHCI_QUIRK_RESET_CMD_DATA_ON_IOS,
99         },
100
101         {       /* Generic SD host controller */
102                 PCI_DEVICE_CLASS((PCI_CLASS_SYSTEM_SDHCI << 8), 0xFFFF00)
103         },
104
105         { /* end: all zeroes */ },
106 };
107
108 MODULE_DEVICE_TABLE(pci, pci_ids);
109
110 static void sdhci_prepare_data(struct sdhci_host *, struct mmc_data *);
111 static void sdhci_finish_data(struct sdhci_host *);
112
113 static void sdhci_send_command(struct sdhci_host *, struct mmc_command *);
114 static void sdhci_finish_command(struct sdhci_host *);
115
116 static void sdhci_dumpregs(struct sdhci_host *host)
117 {
118         printk(KERN_DEBUG DRIVER_NAME ": ============== REGISTER DUMP ==============\n");
119
120         printk(KERN_DEBUG DRIVER_NAME ": Sys addr: 0x%08x | Version:  0x%08x\n",
121                 readl(host->ioaddr + SDHCI_DMA_ADDRESS),
122                 readw(host->ioaddr + SDHCI_HOST_VERSION));
123         printk(KERN_DEBUG DRIVER_NAME ": Blk size: 0x%08x | Blk cnt:  0x%08x\n",
124                 readw(host->ioaddr + SDHCI_BLOCK_SIZE),
125                 readw(host->ioaddr + SDHCI_BLOCK_COUNT));
126         printk(KERN_DEBUG DRIVER_NAME ": Argument: 0x%08x | Trn mode: 0x%08x\n",
127                 readl(host->ioaddr + SDHCI_ARGUMENT),
128                 readw(host->ioaddr + SDHCI_TRANSFER_MODE));
129         printk(KERN_DEBUG DRIVER_NAME ": Present:  0x%08x | Host ctl: 0x%08x\n",
130                 readl(host->ioaddr + SDHCI_PRESENT_STATE),
131                 readb(host->ioaddr + SDHCI_HOST_CONTROL));
132         printk(KERN_DEBUG DRIVER_NAME ": Power:    0x%08x | Blk gap:  0x%08x\n",
133                 readb(host->ioaddr + SDHCI_POWER_CONTROL),
134                 readb(host->ioaddr + SDHCI_BLOCK_GAP_CONTROL));
135         printk(KERN_DEBUG DRIVER_NAME ": Wake-up:  0x%08x | Clock:    0x%08x\n",
136                 readb(host->ioaddr + SDHCI_WAKE_UP_CONTROL),
137                 readw(host->ioaddr + SDHCI_CLOCK_CONTROL));
138         printk(KERN_DEBUG DRIVER_NAME ": Timeout:  0x%08x | Int stat: 0x%08x\n",
139                 readb(host->ioaddr + SDHCI_TIMEOUT_CONTROL),
140                 readl(host->ioaddr + SDHCI_INT_STATUS));
141         printk(KERN_DEBUG DRIVER_NAME ": Int enab: 0x%08x | Sig enab: 0x%08x\n",
142                 readl(host->ioaddr + SDHCI_INT_ENABLE),
143                 readl(host->ioaddr + SDHCI_SIGNAL_ENABLE));
144         printk(KERN_DEBUG DRIVER_NAME ": AC12 err: 0x%08x | Slot int: 0x%08x\n",
145                 readw(host->ioaddr + SDHCI_ACMD12_ERR),
146                 readw(host->ioaddr + SDHCI_SLOT_INT_STATUS));
147         printk(KERN_DEBUG DRIVER_NAME ": Caps:     0x%08x | Max curr: 0x%08x\n",
148                 readl(host->ioaddr + SDHCI_CAPABILITIES),
149                 readl(host->ioaddr + SDHCI_MAX_CURRENT));
150
151         printk(KERN_DEBUG DRIVER_NAME ": ===========================================\n");
152 }
153
154 /*****************************************************************************\
155  *                                                                           *
156  * Low level functions                                                       *
157  *                                                                           *
158 \*****************************************************************************/
159
160 static void sdhci_reset(struct sdhci_host *host, u8 mask)
161 {
162         unsigned long timeout;
163
164         if (host->chip->quirks & SDHCI_QUIRK_NO_CARD_NO_RESET) {
165                 if (!(readl(host->ioaddr + SDHCI_PRESENT_STATE) &
166                         SDHCI_CARD_PRESENT))
167                         return;
168         }
169
170         writeb(mask, host->ioaddr + SDHCI_SOFTWARE_RESET);
171
172         if (mask & SDHCI_RESET_ALL)
173                 host->clock = 0;
174
175         /* Wait max 100 ms */
176         timeout = 100;
177
178         /* hw clears the bit when it's done */
179         while (readb(host->ioaddr + SDHCI_SOFTWARE_RESET) & mask) {
180                 if (timeout == 0) {
181                         printk(KERN_ERR "%s: Reset 0x%x never completed.\n",
182                                 mmc_hostname(host->mmc), (int)mask);
183                         sdhci_dumpregs(host);
184                         return;
185                 }
186                 timeout--;
187                 mdelay(1);
188         }
189 }
190
191 static void sdhci_init(struct sdhci_host *host)
192 {
193         u32 intmask;
194
195         sdhci_reset(host, SDHCI_RESET_ALL);
196
197         intmask = SDHCI_INT_BUS_POWER | SDHCI_INT_DATA_END_BIT |
198                 SDHCI_INT_DATA_CRC | SDHCI_INT_DATA_TIMEOUT | SDHCI_INT_INDEX |
199                 SDHCI_INT_END_BIT | SDHCI_INT_CRC | SDHCI_INT_TIMEOUT |
200                 SDHCI_INT_CARD_REMOVE | SDHCI_INT_CARD_INSERT |
201                 SDHCI_INT_DATA_AVAIL | SDHCI_INT_SPACE_AVAIL |
202                 SDHCI_INT_DMA_END | SDHCI_INT_DATA_END | SDHCI_INT_RESPONSE;
203
204         writel(intmask, host->ioaddr + SDHCI_INT_ENABLE);
205         writel(intmask, host->ioaddr + SDHCI_SIGNAL_ENABLE);
206 }
207
208 static void sdhci_activate_led(struct sdhci_host *host)
209 {
210         u8 ctrl;
211
212         ctrl = readb(host->ioaddr + SDHCI_HOST_CONTROL);
213         ctrl |= SDHCI_CTRL_LED;
214         writeb(ctrl, host->ioaddr + SDHCI_HOST_CONTROL);
215 }
216
217 static void sdhci_deactivate_led(struct sdhci_host *host)
218 {
219         u8 ctrl;
220
221         ctrl = readb(host->ioaddr + SDHCI_HOST_CONTROL);
222         ctrl &= ~SDHCI_CTRL_LED;
223         writeb(ctrl, host->ioaddr + SDHCI_HOST_CONTROL);
224 }
225
226 /*****************************************************************************\
227  *                                                                           *
228  * Core functions                                                            *
229  *                                                                           *
230 \*****************************************************************************/
231
232 static inline char* sdhci_sg_to_buffer(struct sdhci_host* host)
233 {
234         return page_address(host->cur_sg->page) + host->cur_sg->offset;
235 }
236
237 static inline int sdhci_next_sg(struct sdhci_host* host)
238 {
239         /*
240          * Skip to next SG entry.
241          */
242         host->cur_sg++;
243         host->num_sg--;
244
245         /*
246          * Any entries left?
247          */
248         if (host->num_sg > 0) {
249                 host->offset = 0;
250                 host->remain = host->cur_sg->length;
251         }
252
253         return host->num_sg;
254 }
255
256 static void sdhci_read_block_pio(struct sdhci_host *host)
257 {
258         int blksize, chunk_remain;
259         u32 data;
260         char *buffer;
261         int size;
262
263         DBG("PIO reading\n");
264
265         blksize = host->data->blksz;
266         chunk_remain = 0;
267         data = 0;
268
269         buffer = sdhci_sg_to_buffer(host) + host->offset;
270
271         while (blksize) {
272                 if (chunk_remain == 0) {
273                         data = readl(host->ioaddr + SDHCI_BUFFER);
274                         chunk_remain = min(blksize, 4);
275                 }
276
277                 size = min(host->remain, chunk_remain);
278
279                 chunk_remain -= size;
280                 blksize -= size;
281                 host->offset += size;
282                 host->remain -= size;
283
284                 while (size) {
285                         *buffer = data & 0xFF;
286                         buffer++;
287                         data >>= 8;
288                         size--;
289                 }
290
291                 if (host->remain == 0) {
292                         if (sdhci_next_sg(host) == 0) {
293                                 BUG_ON(blksize != 0);
294                                 return;
295                         }
296                         buffer = sdhci_sg_to_buffer(host);
297                 }
298         }
299 }
300
301 static void sdhci_write_block_pio(struct sdhci_host *host)
302 {
303         int blksize, chunk_remain;
304         u32 data;
305         char *buffer;
306         int bytes, size;
307
308         DBG("PIO writing\n");
309
310         blksize = host->data->blksz;
311         chunk_remain = 4;
312         data = 0;
313
314         bytes = 0;
315         buffer = sdhci_sg_to_buffer(host) + host->offset;
316
317         while (blksize) {
318                 size = min(host->remain, chunk_remain);
319
320                 chunk_remain -= size;
321                 blksize -= size;
322                 host->offset += size;
323                 host->remain -= size;
324
325                 while (size) {
326                         data >>= 8;
327                         data |= (u32)*buffer << 24;
328                         buffer++;
329                         size--;
330                 }
331
332                 if (chunk_remain == 0) {
333                         writel(data, host->ioaddr + SDHCI_BUFFER);
334                         chunk_remain = min(blksize, 4);
335                 }
336
337                 if (host->remain == 0) {
338                         if (sdhci_next_sg(host) == 0) {
339                                 BUG_ON(blksize != 0);
340                                 return;
341                         }
342                         buffer = sdhci_sg_to_buffer(host);
343                 }
344         }
345 }
346
347 static void sdhci_transfer_pio(struct sdhci_host *host)
348 {
349         u32 mask;
350
351         BUG_ON(!host->data);
352
353         if (host->num_sg == 0)
354                 return;
355
356         if (host->data->flags & MMC_DATA_READ)
357                 mask = SDHCI_DATA_AVAILABLE;
358         else
359                 mask = SDHCI_SPACE_AVAILABLE;
360
361         while (readl(host->ioaddr + SDHCI_PRESENT_STATE) & mask) {
362                 if (host->data->flags & MMC_DATA_READ)
363                         sdhci_read_block_pio(host);
364                 else
365                         sdhci_write_block_pio(host);
366
367                 if (host->num_sg == 0)
368                         break;
369         }
370
371         DBG("PIO transfer complete.\n");
372 }
373
374 static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_data *data)
375 {
376         u8 count;
377         unsigned target_timeout, current_timeout;
378
379         WARN_ON(host->data);
380
381         if (data == NULL)
382                 return;
383
384         /* Sanity checks */
385         BUG_ON(data->blksz * data->blocks > 524288);
386         BUG_ON(data->blksz > host->mmc->max_blk_size);
387         BUG_ON(data->blocks > 65535);
388
389         host->data = data;
390         host->data_early = 0;
391
392         /* timeout in us */
393         target_timeout = data->timeout_ns / 1000 +
394                 data->timeout_clks / host->clock;
395
396         /*
397          * Figure out needed cycles.
398          * We do this in steps in order to fit inside a 32 bit int.
399          * The first step is the minimum timeout, which will have a
400          * minimum resolution of 6 bits:
401          * (1) 2^13*1000 > 2^22,
402          * (2) host->timeout_clk < 2^16
403          *     =>
404          *     (1) / (2) > 2^6
405          */
406         count = 0;
407         current_timeout = (1 << 13) * 1000 / host->timeout_clk;
408         while (current_timeout < target_timeout) {
409                 count++;
410                 current_timeout <<= 1;
411                 if (count >= 0xF)
412                         break;
413         }
414
415         if (count >= 0xF) {
416                 printk(KERN_WARNING "%s: Too large timeout requested!\n",
417                         mmc_hostname(host->mmc));
418                 count = 0xE;
419         }
420
421         writeb(count, host->ioaddr + SDHCI_TIMEOUT_CONTROL);
422
423         if (host->flags & SDHCI_USE_DMA) {
424                 int count;
425
426                 count = pci_map_sg(host->chip->pdev, data->sg, data->sg_len,
427                         (data->flags & MMC_DATA_READ)?PCI_DMA_FROMDEVICE:PCI_DMA_TODEVICE);
428                 BUG_ON(count != 1);
429
430                 writel(sg_dma_address(data->sg), host->ioaddr + SDHCI_DMA_ADDRESS);
431         } else {
432                 host->cur_sg = data->sg;
433                 host->num_sg = data->sg_len;
434
435                 host->offset = 0;
436                 host->remain = host->cur_sg->length;
437         }
438
439         /* We do not handle DMA boundaries, so set it to max (512 KiB) */
440         writew(SDHCI_MAKE_BLKSZ(7, data->blksz),
441                 host->ioaddr + SDHCI_BLOCK_SIZE);
442         writew(data->blocks, host->ioaddr + SDHCI_BLOCK_COUNT);
443 }
444
445 static void sdhci_set_transfer_mode(struct sdhci_host *host,
446         struct mmc_data *data)
447 {
448         u16 mode;
449
450         if (data == NULL)
451                 return;
452
453         WARN_ON(!host->data);
454
455         mode = SDHCI_TRNS_BLK_CNT_EN;
456         if (data->blocks > 1)
457                 mode |= SDHCI_TRNS_MULTI;
458         if (data->flags & MMC_DATA_READ)
459                 mode |= SDHCI_TRNS_READ;
460         if (host->flags & SDHCI_USE_DMA)
461                 mode |= SDHCI_TRNS_DMA;
462
463         writew(mode, host->ioaddr + SDHCI_TRANSFER_MODE);
464 }
465
466 static void sdhci_finish_data(struct sdhci_host *host)
467 {
468         struct mmc_data *data;
469         u16 blocks;
470
471         BUG_ON(!host->data);
472
473         data = host->data;
474         host->data = NULL;
475
476         if (host->flags & SDHCI_USE_DMA) {
477                 pci_unmap_sg(host->chip->pdev, data->sg, data->sg_len,
478                         (data->flags & MMC_DATA_READ)?PCI_DMA_FROMDEVICE:PCI_DMA_TODEVICE);
479         }
480
481         /*
482          * Controller doesn't count down when in single block mode.
483          */
484         if (data->blocks == 1)
485                 blocks = (data->error == 0) ? 0 : 1;
486         else
487                 blocks = readw(host->ioaddr + SDHCI_BLOCK_COUNT);
488         data->bytes_xfered = data->blksz * (data->blocks - blocks);
489
490         if (!data->error && blocks) {
491                 printk(KERN_ERR "%s: Controller signalled completion even "
492                         "though there were blocks left.\n",
493                         mmc_hostname(host->mmc));
494                 data->error = -EIO;
495         }
496
497         if (data->stop) {
498                 /*
499                  * The controller needs a reset of internal state machines
500                  * upon error conditions.
501                  */
502                 if (data->error) {
503                         sdhci_reset(host, SDHCI_RESET_CMD);
504                         sdhci_reset(host, SDHCI_RESET_DATA);
505                 }
506
507                 sdhci_send_command(host, data->stop);
508         } else
509                 tasklet_schedule(&host->finish_tasklet);
510 }
511
512 static void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd)
513 {
514         int flags;
515         u32 mask;
516         unsigned long timeout;
517
518         WARN_ON(host->cmd);
519
520         /* Wait max 10 ms */
521         timeout = 10;
522
523         mask = SDHCI_CMD_INHIBIT;
524         if ((cmd->data != NULL) || (cmd->flags & MMC_RSP_BUSY))
525                 mask |= SDHCI_DATA_INHIBIT;
526
527         /* We shouldn't wait for data inihibit for stop commands, even
528            though they might use busy signaling */
529         if (host->mrq->data && (cmd == host->mrq->data->stop))
530                 mask &= ~SDHCI_DATA_INHIBIT;
531
532         while (readl(host->ioaddr + SDHCI_PRESENT_STATE) & mask) {
533                 if (timeout == 0) {
534                         printk(KERN_ERR "%s: Controller never released "
535                                 "inhibit bit(s).\n", mmc_hostname(host->mmc));
536                         sdhci_dumpregs(host);
537                         cmd->error = -EIO;
538                         tasklet_schedule(&host->finish_tasklet);
539                         return;
540                 }
541                 timeout--;
542                 mdelay(1);
543         }
544
545         mod_timer(&host->timer, jiffies + 10 * HZ);
546
547         host->cmd = cmd;
548
549         sdhci_prepare_data(host, cmd->data);
550
551         writel(cmd->arg, host->ioaddr + SDHCI_ARGUMENT);
552
553         sdhci_set_transfer_mode(host, cmd->data);
554
555         if ((cmd->flags & MMC_RSP_136) && (cmd->flags & MMC_RSP_BUSY)) {
556                 printk(KERN_ERR "%s: Unsupported response type!\n",
557                         mmc_hostname(host->mmc));
558                 cmd->error = -EINVAL;
559                 tasklet_schedule(&host->finish_tasklet);
560                 return;
561         }
562
563         if (!(cmd->flags & MMC_RSP_PRESENT))
564                 flags = SDHCI_CMD_RESP_NONE;
565         else if (cmd->flags & MMC_RSP_136)
566                 flags = SDHCI_CMD_RESP_LONG;
567         else if (cmd->flags & MMC_RSP_BUSY)
568                 flags = SDHCI_CMD_RESP_SHORT_BUSY;
569         else
570                 flags = SDHCI_CMD_RESP_SHORT;
571
572         if (cmd->flags & MMC_RSP_CRC)
573                 flags |= SDHCI_CMD_CRC;
574         if (cmd->flags & MMC_RSP_OPCODE)
575                 flags |= SDHCI_CMD_INDEX;
576         if (cmd->data)
577                 flags |= SDHCI_CMD_DATA;
578
579         writew(SDHCI_MAKE_CMD(cmd->opcode, flags),
580                 host->ioaddr + SDHCI_COMMAND);
581 }
582
583 static void sdhci_finish_command(struct sdhci_host *host)
584 {
585         int i;
586
587         BUG_ON(host->cmd == NULL);
588
589         if (host->cmd->flags & MMC_RSP_PRESENT) {
590                 if (host->cmd->flags & MMC_RSP_136) {
591                         /* CRC is stripped so we need to do some shifting. */
592                         for (i = 0;i < 4;i++) {
593                                 host->cmd->resp[i] = readl(host->ioaddr +
594                                         SDHCI_RESPONSE + (3-i)*4) << 8;
595                                 if (i != 3)
596                                         host->cmd->resp[i] |=
597                                                 readb(host->ioaddr +
598                                                 SDHCI_RESPONSE + (3-i)*4-1);
599                         }
600                 } else {
601                         host->cmd->resp[0] = readl(host->ioaddr + SDHCI_RESPONSE);
602                 }
603         }
604
605         host->cmd->error = 0;
606
607         if (host->data && host->data_early)
608                 sdhci_finish_data(host);
609
610         if (!host->cmd->data)
611                 tasklet_schedule(&host->finish_tasklet);
612
613         host->cmd = NULL;
614 }
615
616 static void sdhci_set_clock(struct sdhci_host *host, unsigned int clock)
617 {
618         int div;
619         u16 clk;
620         unsigned long timeout;
621
622         if (clock == host->clock)
623                 return;
624
625         writew(0, host->ioaddr + SDHCI_CLOCK_CONTROL);
626
627         if (clock == 0)
628                 goto out;
629
630         for (div = 1;div < 256;div *= 2) {
631                 if ((host->max_clk / div) <= clock)
632                         break;
633         }
634         div >>= 1;
635
636         clk = div << SDHCI_DIVIDER_SHIFT;
637         clk |= SDHCI_CLOCK_INT_EN;
638         writew(clk, host->ioaddr + SDHCI_CLOCK_CONTROL);
639
640         /* Wait max 10 ms */
641         timeout = 10;
642         while (!((clk = readw(host->ioaddr + SDHCI_CLOCK_CONTROL))
643                 & SDHCI_CLOCK_INT_STABLE)) {
644                 if (timeout == 0) {
645                         printk(KERN_ERR "%s: Internal clock never "
646                                 "stabilised.\n", mmc_hostname(host->mmc));
647                         sdhci_dumpregs(host);
648                         return;
649                 }
650                 timeout--;
651                 mdelay(1);
652         }
653
654         clk |= SDHCI_CLOCK_CARD_EN;
655         writew(clk, host->ioaddr + SDHCI_CLOCK_CONTROL);
656
657 out:
658         host->clock = clock;
659 }
660
661 static void sdhci_set_power(struct sdhci_host *host, unsigned short power)
662 {
663         u8 pwr;
664
665         if (host->power == power)
666                 return;
667
668         if (power == (unsigned short)-1) {
669                 writeb(0, host->ioaddr + SDHCI_POWER_CONTROL);
670                 goto out;
671         }
672
673         /*
674          * Spec says that we should clear the power reg before setting
675          * a new value. Some controllers don't seem to like this though.
676          */
677         if (!(host->chip->quirks & SDHCI_QUIRK_SINGLE_POWER_WRITE))
678                 writeb(0, host->ioaddr + SDHCI_POWER_CONTROL);
679
680         pwr = SDHCI_POWER_ON;
681
682         switch (1 << power) {
683         case MMC_VDD_165_195:
684                 pwr |= SDHCI_POWER_180;
685                 break;
686         case MMC_VDD_29_30:
687         case MMC_VDD_30_31:
688                 pwr |= SDHCI_POWER_300;
689                 break;
690         case MMC_VDD_32_33:
691         case MMC_VDD_33_34:
692                 pwr |= SDHCI_POWER_330;
693                 break;
694         default:
695                 BUG();
696         }
697
698         writeb(pwr, host->ioaddr + SDHCI_POWER_CONTROL);
699
700 out:
701         host->power = power;
702 }
703
704 /*****************************************************************************\
705  *                                                                           *
706  * MMC callbacks                                                             *
707  *                                                                           *
708 \*****************************************************************************/
709
710 static void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq)
711 {
712         struct sdhci_host *host;
713         unsigned long flags;
714
715         host = mmc_priv(mmc);
716
717         spin_lock_irqsave(&host->lock, flags);
718
719         WARN_ON(host->mrq != NULL);
720
721         sdhci_activate_led(host);
722
723         host->mrq = mrq;
724
725         if (!(readl(host->ioaddr + SDHCI_PRESENT_STATE) & SDHCI_CARD_PRESENT)) {
726                 host->mrq->cmd->error = -ENOMEDIUM;
727                 tasklet_schedule(&host->finish_tasklet);
728         } else
729                 sdhci_send_command(host, mrq->cmd);
730
731         mmiowb();
732         spin_unlock_irqrestore(&host->lock, flags);
733 }
734
735 static void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
736 {
737         struct sdhci_host *host;
738         unsigned long flags;
739         u8 ctrl;
740
741         host = mmc_priv(mmc);
742
743         spin_lock_irqsave(&host->lock, flags);
744
745         /*
746          * Reset the chip on each power off.
747          * Should clear out any weird states.
748          */
749         if (ios->power_mode == MMC_POWER_OFF) {
750                 writel(0, host->ioaddr + SDHCI_SIGNAL_ENABLE);
751                 sdhci_init(host);
752         }
753
754         sdhci_set_clock(host, ios->clock);
755
756         if (ios->power_mode == MMC_POWER_OFF)
757                 sdhci_set_power(host, -1);
758         else
759                 sdhci_set_power(host, ios->vdd);
760
761         ctrl = readb(host->ioaddr + SDHCI_HOST_CONTROL);
762
763         if (ios->bus_width == MMC_BUS_WIDTH_4)
764                 ctrl |= SDHCI_CTRL_4BITBUS;
765         else
766                 ctrl &= ~SDHCI_CTRL_4BITBUS;
767
768         if (ios->timing == MMC_TIMING_SD_HS)
769                 ctrl |= SDHCI_CTRL_HISPD;
770         else
771                 ctrl &= ~SDHCI_CTRL_HISPD;
772
773         writeb(ctrl, host->ioaddr + SDHCI_HOST_CONTROL);
774
775         /*
776          * Some (ENE) controllers go apeshit on some ios operation,
777          * signalling timeout and CRC errors even on CMD0. Resetting
778          * it on each ios seems to solve the problem.
779          */
780         if(host->chip->quirks & SDHCI_QUIRK_RESET_CMD_DATA_ON_IOS)
781                 sdhci_reset(host, SDHCI_RESET_CMD | SDHCI_RESET_DATA);
782
783         mmiowb();
784         spin_unlock_irqrestore(&host->lock, flags);
785 }
786
787 static int sdhci_get_ro(struct mmc_host *mmc)
788 {
789         struct sdhci_host *host;
790         unsigned long flags;
791         int present;
792
793         host = mmc_priv(mmc);
794
795         spin_lock_irqsave(&host->lock, flags);
796
797         present = readl(host->ioaddr + SDHCI_PRESENT_STATE);
798
799         spin_unlock_irqrestore(&host->lock, flags);
800
801         return !(present & SDHCI_WRITE_PROTECT);
802 }
803
804 static void sdhci_enable_sdio_irq(struct mmc_host *mmc, int enable)
805 {
806         struct sdhci_host *host;
807         unsigned long flags;
808         u32 ier;
809
810         host = mmc_priv(mmc);
811
812         spin_lock_irqsave(&host->lock, flags);
813
814         ier = readl(host->ioaddr + SDHCI_INT_ENABLE);
815
816         ier &= ~SDHCI_INT_CARD_INT;
817         if (enable)
818                 ier |= SDHCI_INT_CARD_INT;
819
820         writel(ier, host->ioaddr + SDHCI_INT_ENABLE);
821         writel(ier, host->ioaddr + SDHCI_SIGNAL_ENABLE);
822
823         mmiowb();
824
825         spin_unlock_irqrestore(&host->lock, flags);
826 }
827
828 static const struct mmc_host_ops sdhci_ops = {
829         .request        = sdhci_request,
830         .set_ios        = sdhci_set_ios,
831         .get_ro         = sdhci_get_ro,
832         .enable_sdio_irq = sdhci_enable_sdio_irq,
833 };
834
835 /*****************************************************************************\
836  *                                                                           *
837  * Tasklets                                                                  *
838  *                                                                           *
839 \*****************************************************************************/
840
841 static void sdhci_tasklet_card(unsigned long param)
842 {
843         struct sdhci_host *host;
844         unsigned long flags;
845
846         host = (struct sdhci_host*)param;
847
848         spin_lock_irqsave(&host->lock, flags);
849
850         if (!(readl(host->ioaddr + SDHCI_PRESENT_STATE) & SDHCI_CARD_PRESENT)) {
851                 if (host->mrq) {
852                         printk(KERN_ERR "%s: Card removed during transfer!\n",
853                                 mmc_hostname(host->mmc));
854                         printk(KERN_ERR "%s: Resetting controller.\n",
855                                 mmc_hostname(host->mmc));
856
857                         sdhci_reset(host, SDHCI_RESET_CMD);
858                         sdhci_reset(host, SDHCI_RESET_DATA);
859
860                         host->mrq->cmd->error = -ENOMEDIUM;
861                         tasklet_schedule(&host->finish_tasklet);
862                 }
863         }
864
865         spin_unlock_irqrestore(&host->lock, flags);
866
867         mmc_detect_change(host->mmc, msecs_to_jiffies(500));
868 }
869
870 static void sdhci_tasklet_finish(unsigned long param)
871 {
872         struct sdhci_host *host;
873         unsigned long flags;
874         struct mmc_request *mrq;
875
876         host = (struct sdhci_host*)param;
877
878         spin_lock_irqsave(&host->lock, flags);
879
880         del_timer(&host->timer);
881
882         mrq = host->mrq;
883
884         /*
885          * The controller needs a reset of internal state machines
886          * upon error conditions.
887          */
888         if (mrq->cmd->error ||
889                 (mrq->data && (mrq->data->error ||
890                 (mrq->data->stop && mrq->data->stop->error)))) {
891
892                 /* Some controllers need this kick or reset won't work here */
893                 if (host->chip->quirks & SDHCI_QUIRK_CLOCK_BEFORE_RESET) {
894                         unsigned int clock;
895
896                         /* This is to force an update */
897                         clock = host->clock;
898                         host->clock = 0;
899                         sdhci_set_clock(host, clock);
900                 }
901
902                 /* Spec says we should do both at the same time, but Ricoh
903                    controllers do not like that. */
904                 sdhci_reset(host, SDHCI_RESET_CMD);
905                 sdhci_reset(host, SDHCI_RESET_DATA);
906         }
907
908         host->mrq = NULL;
909         host->cmd = NULL;
910         host->data = NULL;
911
912         sdhci_deactivate_led(host);
913
914         mmiowb();
915         spin_unlock_irqrestore(&host->lock, flags);
916
917         mmc_request_done(host->mmc, mrq);
918 }
919
920 static void sdhci_timeout_timer(unsigned long data)
921 {
922         struct sdhci_host *host;
923         unsigned long flags;
924
925         host = (struct sdhci_host*)data;
926
927         spin_lock_irqsave(&host->lock, flags);
928
929         if (host->mrq) {
930                 printk(KERN_ERR "%s: Timeout waiting for hardware "
931                         "interrupt.\n", mmc_hostname(host->mmc));
932                 sdhci_dumpregs(host);
933
934                 if (host->data) {
935                         host->data->error = -ETIMEDOUT;
936                         sdhci_finish_data(host);
937                 } else {
938                         if (host->cmd)
939                                 host->cmd->error = -ETIMEDOUT;
940                         else
941                                 host->mrq->cmd->error = -ETIMEDOUT;
942
943                         tasklet_schedule(&host->finish_tasklet);
944                 }
945         }
946
947         mmiowb();
948         spin_unlock_irqrestore(&host->lock, flags);
949 }
950
951 /*****************************************************************************\
952  *                                                                           *
953  * Interrupt handling                                                        *
954  *                                                                           *
955 \*****************************************************************************/
956
957 static void sdhci_cmd_irq(struct sdhci_host *host, u32 intmask)
958 {
959         BUG_ON(intmask == 0);
960
961         if (!host->cmd) {
962                 printk(KERN_ERR "%s: Got command interrupt 0x%08x even "
963                         "though no command operation was in progress.\n",
964                         mmc_hostname(host->mmc), (unsigned)intmask);
965                 sdhci_dumpregs(host);
966                 return;
967         }
968
969         if (intmask & SDHCI_INT_TIMEOUT)
970                 host->cmd->error = -ETIMEDOUT;
971         else if (intmask & (SDHCI_INT_CRC | SDHCI_INT_END_BIT |
972                         SDHCI_INT_INDEX))
973                 host->cmd->error = -EILSEQ;
974
975         if (host->cmd->error)
976                 tasklet_schedule(&host->finish_tasklet);
977         else if (intmask & SDHCI_INT_RESPONSE)
978                 sdhci_finish_command(host);
979 }
980
981 static void sdhci_data_irq(struct sdhci_host *host, u32 intmask)
982 {
983         BUG_ON(intmask == 0);
984
985         if (!host->data) {
986                 /*
987                  * A data end interrupt is sent together with the response
988                  * for the stop command.
989                  */
990                 if (intmask & SDHCI_INT_DATA_END)
991                         return;
992
993                 printk(KERN_ERR "%s: Got data interrupt 0x%08x even "
994                         "though no data operation was in progress.\n",
995                         mmc_hostname(host->mmc), (unsigned)intmask);
996                 sdhci_dumpregs(host);
997
998                 return;
999         }
1000
1001         if (intmask & SDHCI_INT_DATA_TIMEOUT)
1002                 host->data->error = -ETIMEDOUT;
1003         else if (intmask & (SDHCI_INT_DATA_CRC | SDHCI_INT_DATA_END_BIT))
1004                 host->data->error = -EILSEQ;
1005
1006         if (host->data->error)
1007                 sdhci_finish_data(host);
1008         else {
1009                 if (intmask & (SDHCI_INT_DATA_AVAIL | SDHCI_INT_SPACE_AVAIL))
1010                         sdhci_transfer_pio(host);
1011
1012                 /*
1013                  * We currently don't do anything fancy with DMA
1014                  * boundaries, but as we can't disable the feature
1015                  * we need to at least restart the transfer.
1016                  */
1017                 if (intmask & SDHCI_INT_DMA_END)
1018                         writel(readl(host->ioaddr + SDHCI_DMA_ADDRESS),
1019                                 host->ioaddr + SDHCI_DMA_ADDRESS);
1020
1021                 if (intmask & SDHCI_INT_DATA_END) {
1022                         if (host->cmd) {
1023                                 /*
1024                                  * Data managed to finish before the
1025                                  * command completed. Make sure we do
1026                                  * things in the proper order.
1027                                  */
1028                                 host->data_early = 1;
1029                         } else {
1030                                 sdhci_finish_data(host);
1031                         }
1032                 }
1033         }
1034 }
1035
1036 static irqreturn_t sdhci_irq(int irq, void *dev_id)
1037 {
1038         irqreturn_t result;
1039         struct sdhci_host* host = dev_id;
1040         u32 intmask;
1041         int cardint = 0;
1042
1043         spin_lock(&host->lock);
1044
1045         intmask = readl(host->ioaddr + SDHCI_INT_STATUS);
1046
1047         if (!intmask || intmask == 0xffffffff) {
1048                 result = IRQ_NONE;
1049                 goto out;
1050         }
1051
1052         DBG("*** %s got interrupt: 0x%08x\n", host->slot_descr, intmask);
1053
1054         if (intmask & (SDHCI_INT_CARD_INSERT | SDHCI_INT_CARD_REMOVE)) {
1055                 writel(intmask & (SDHCI_INT_CARD_INSERT | SDHCI_INT_CARD_REMOVE),
1056                         host->ioaddr + SDHCI_INT_STATUS);
1057                 tasklet_schedule(&host->card_tasklet);
1058         }
1059
1060         intmask &= ~(SDHCI_INT_CARD_INSERT | SDHCI_INT_CARD_REMOVE);
1061
1062         if (intmask & SDHCI_INT_CMD_MASK) {
1063                 writel(intmask & SDHCI_INT_CMD_MASK,
1064                         host->ioaddr + SDHCI_INT_STATUS);
1065                 sdhci_cmd_irq(host, intmask & SDHCI_INT_CMD_MASK);
1066         }
1067
1068         if (intmask & SDHCI_INT_DATA_MASK) {
1069                 writel(intmask & SDHCI_INT_DATA_MASK,
1070                         host->ioaddr + SDHCI_INT_STATUS);
1071                 sdhci_data_irq(host, intmask & SDHCI_INT_DATA_MASK);
1072         }
1073
1074         intmask &= ~(SDHCI_INT_CMD_MASK | SDHCI_INT_DATA_MASK);
1075
1076         intmask &= ~SDHCI_INT_ERROR;
1077
1078         if (intmask & SDHCI_INT_BUS_POWER) {
1079                 printk(KERN_ERR "%s: Card is consuming too much power!\n",
1080                         mmc_hostname(host->mmc));
1081                 writel(SDHCI_INT_BUS_POWER, host->ioaddr + SDHCI_INT_STATUS);
1082         }
1083
1084         intmask &= ~SDHCI_INT_BUS_POWER;
1085
1086         if (intmask & SDHCI_INT_CARD_INT)
1087                 cardint = 1;
1088
1089         intmask &= ~SDHCI_INT_CARD_INT;
1090
1091         if (intmask) {
1092                 printk(KERN_ERR "%s: Unexpected interrupt 0x%08x.\n",
1093                         mmc_hostname(host->mmc), intmask);
1094                 sdhci_dumpregs(host);
1095
1096                 writel(intmask, host->ioaddr + SDHCI_INT_STATUS);
1097         }
1098
1099         result = IRQ_HANDLED;
1100
1101         mmiowb();
1102 out:
1103         spin_unlock(&host->lock);
1104
1105         /*
1106          * We have to delay this as it calls back into the driver.
1107          */
1108         if (cardint)
1109                 mmc_signal_sdio_irq(host->mmc);
1110
1111         return result;
1112 }
1113
1114 /*****************************************************************************\
1115  *                                                                           *
1116  * Suspend/resume                                                            *
1117  *                                                                           *
1118 \*****************************************************************************/
1119
1120 #ifdef CONFIG_PM
1121
1122 static int sdhci_suspend (struct pci_dev *pdev, pm_message_t state)
1123 {
1124         struct sdhci_chip *chip;
1125         int i, ret;
1126
1127         chip = pci_get_drvdata(pdev);
1128         if (!chip)
1129                 return 0;
1130
1131         DBG("Suspending...\n");
1132
1133         for (i = 0;i < chip->num_slots;i++) {
1134                 if (!chip->hosts[i])
1135                         continue;
1136                 ret = mmc_suspend_host(chip->hosts[i]->mmc, state);
1137                 if (ret) {
1138                         for (i--;i >= 0;i--)
1139                                 mmc_resume_host(chip->hosts[i]->mmc);
1140                         return ret;
1141                 }
1142         }
1143
1144         pci_save_state(pdev);
1145         pci_enable_wake(pdev, pci_choose_state(pdev, state), 0);
1146
1147         for (i = 0;i < chip->num_slots;i++) {
1148                 if (!chip->hosts[i])
1149                         continue;
1150                 free_irq(chip->hosts[i]->irq, chip->hosts[i]);
1151         }
1152
1153         pci_disable_device(pdev);
1154         pci_set_power_state(pdev, pci_choose_state(pdev, state));
1155
1156         return 0;
1157 }
1158
1159 static int sdhci_resume (struct pci_dev *pdev)
1160 {
1161         struct sdhci_chip *chip;
1162         int i, ret;
1163
1164         chip = pci_get_drvdata(pdev);
1165         if (!chip)
1166                 return 0;
1167
1168         DBG("Resuming...\n");
1169
1170         pci_set_power_state(pdev, PCI_D0);
1171         pci_restore_state(pdev);
1172         ret = pci_enable_device(pdev);
1173         if (ret)
1174                 return ret;
1175
1176         for (i = 0;i < chip->num_slots;i++) {
1177                 if (!chip->hosts[i])
1178                         continue;
1179                 if (chip->hosts[i]->flags & SDHCI_USE_DMA)
1180                         pci_set_master(pdev);
1181                 ret = request_irq(chip->hosts[i]->irq, sdhci_irq,
1182                         IRQF_SHARED, chip->hosts[i]->slot_descr,
1183                         chip->hosts[i]);
1184                 if (ret)
1185                         return ret;
1186                 sdhci_init(chip->hosts[i]);
1187                 mmiowb();
1188                 ret = mmc_resume_host(chip->hosts[i]->mmc);
1189                 if (ret)
1190                         return ret;
1191         }
1192
1193         return 0;
1194 }
1195
1196 #else /* CONFIG_PM */
1197
1198 #define sdhci_suspend NULL
1199 #define sdhci_resume NULL
1200
1201 #endif /* CONFIG_PM */
1202
1203 /*****************************************************************************\
1204  *                                                                           *
1205  * Device probing/removal                                                    *
1206  *                                                                           *
1207 \*****************************************************************************/
1208
1209 static int __devinit sdhci_probe_slot(struct pci_dev *pdev, int slot)
1210 {
1211         int ret;
1212         unsigned int version;
1213         struct sdhci_chip *chip;
1214         struct mmc_host *mmc;
1215         struct sdhci_host *host;
1216
1217         u8 first_bar;
1218         unsigned int caps;
1219
1220         chip = pci_get_drvdata(pdev);
1221         BUG_ON(!chip);
1222
1223         ret = pci_read_config_byte(pdev, PCI_SLOT_INFO, &first_bar);
1224         if (ret)
1225                 return ret;
1226
1227         first_bar &= PCI_SLOT_INFO_FIRST_BAR_MASK;
1228
1229         if (first_bar > 5) {
1230                 printk(KERN_ERR DRIVER_NAME ": Invalid first BAR. Aborting.\n");
1231                 return -ENODEV;
1232         }
1233
1234         if (!(pci_resource_flags(pdev, first_bar + slot) & IORESOURCE_MEM)) {
1235                 printk(KERN_ERR DRIVER_NAME ": BAR is not iomem. Aborting.\n");
1236                 return -ENODEV;
1237         }
1238
1239         if (pci_resource_len(pdev, first_bar + slot) != 0x100) {
1240                 printk(KERN_ERR DRIVER_NAME ": Invalid iomem size. "
1241                         "You may experience problems.\n");
1242         }
1243
1244         if ((pdev->class & 0x0000FF) == PCI_SDHCI_IFVENDOR) {
1245                 printk(KERN_ERR DRIVER_NAME ": Vendor specific interface. Aborting.\n");
1246                 return -ENODEV;
1247         }
1248
1249         if ((pdev->class & 0x0000FF) > PCI_SDHCI_IFVENDOR) {
1250                 printk(KERN_ERR DRIVER_NAME ": Unknown interface. Aborting.\n");
1251                 return -ENODEV;
1252         }
1253
1254         mmc = mmc_alloc_host(sizeof(struct sdhci_host), &pdev->dev);
1255         if (!mmc)
1256                 return -ENOMEM;
1257
1258         host = mmc_priv(mmc);
1259         host->mmc = mmc;
1260
1261         host->chip = chip;
1262         chip->hosts[slot] = host;
1263
1264         host->bar = first_bar + slot;
1265
1266         host->addr = pci_resource_start(pdev, host->bar);
1267         host->irq = pdev->irq;
1268
1269         DBG("slot %d at 0x%08lx, irq %d\n", slot, host->addr, host->irq);
1270
1271         snprintf(host->slot_descr, 20, "sdhci:slot%d", slot);
1272
1273         ret = pci_request_region(pdev, host->bar, host->slot_descr);
1274         if (ret)
1275                 goto free;
1276
1277         host->ioaddr = ioremap_nocache(host->addr,
1278                 pci_resource_len(pdev, host->bar));
1279         if (!host->ioaddr) {
1280                 ret = -ENOMEM;
1281                 goto release;
1282         }
1283
1284         sdhci_reset(host, SDHCI_RESET_ALL);
1285
1286         version = readw(host->ioaddr + SDHCI_HOST_VERSION);
1287         version = (version & SDHCI_SPEC_VER_MASK) >> SDHCI_SPEC_VER_SHIFT;
1288         if (version != 0) {
1289                 printk(KERN_ERR "%s: Unknown controller version (%d). "
1290                         "You may experience problems.\n", host->slot_descr,
1291                         version);
1292         }
1293
1294         caps = readl(host->ioaddr + SDHCI_CAPABILITIES);
1295
1296         if (chip->quirks & SDHCI_QUIRK_FORCE_DMA)
1297                 host->flags |= SDHCI_USE_DMA;
1298         else if (!(caps & SDHCI_CAN_DO_DMA))
1299                 DBG("Controller doesn't have DMA capability\n");
1300         else
1301                 host->flags |= SDHCI_USE_DMA;
1302
1303         if ((chip->quirks & SDHCI_QUIRK_BROKEN_DMA) &&
1304                 (host->flags & SDHCI_USE_DMA)) {
1305                 DBG("Disabling DMA as it is marked broken");
1306                 host->flags &= ~SDHCI_USE_DMA;
1307         }
1308
1309         if (((pdev->class & 0x0000FF) != PCI_SDHCI_IFDMA) &&
1310                 (host->flags & SDHCI_USE_DMA)) {
1311                 printk(KERN_WARNING "%s: Will use DMA "
1312                         "mode even though HW doesn't fully "
1313                         "claim to support it.\n", host->slot_descr);
1314         }
1315
1316         if (host->flags & SDHCI_USE_DMA) {
1317                 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) {
1318                         printk(KERN_WARNING "%s: No suitable DMA available. "
1319                                 "Falling back to PIO.\n", host->slot_descr);
1320                         host->flags &= ~SDHCI_USE_DMA;
1321                 }
1322         }
1323
1324         if (host->flags & SDHCI_USE_DMA)
1325                 pci_set_master(pdev);
1326         else /* XXX: Hack to get MMC layer to avoid highmem */
1327                 pdev->dma_mask = 0;
1328
1329         host->max_clk =
1330                 (caps & SDHCI_CLOCK_BASE_MASK) >> SDHCI_CLOCK_BASE_SHIFT;
1331         if (host->max_clk == 0) {
1332                 printk(KERN_ERR "%s: Hardware doesn't specify base clock "
1333                         "frequency.\n", host->slot_descr);
1334                 ret = -ENODEV;
1335                 goto unmap;
1336         }
1337         host->max_clk *= 1000000;
1338
1339         host->timeout_clk =
1340                 (caps & SDHCI_TIMEOUT_CLK_MASK) >> SDHCI_TIMEOUT_CLK_SHIFT;
1341         if (host->timeout_clk == 0) {
1342                 printk(KERN_ERR "%s: Hardware doesn't specify timeout clock "
1343                         "frequency.\n", host->slot_descr);
1344                 ret = -ENODEV;
1345                 goto unmap;
1346         }
1347         if (caps & SDHCI_TIMEOUT_CLK_UNIT)
1348                 host->timeout_clk *= 1000;
1349
1350         /*
1351          * Set host parameters.
1352          */
1353         mmc->ops = &sdhci_ops;
1354         mmc->f_min = host->max_clk / 256;
1355         mmc->f_max = host->max_clk;
1356         mmc->caps = MMC_CAP_4_BIT_DATA | MMC_CAP_MULTIWRITE | MMC_CAP_SDIO_IRQ;
1357
1358         if (caps & SDHCI_CAN_DO_HISPD)
1359                 mmc->caps |= MMC_CAP_SD_HIGHSPEED;
1360
1361         mmc->ocr_avail = 0;
1362         if (caps & SDHCI_CAN_VDD_330)
1363                 mmc->ocr_avail |= MMC_VDD_32_33|MMC_VDD_33_34;
1364         if (caps & SDHCI_CAN_VDD_300)
1365                 mmc->ocr_avail |= MMC_VDD_29_30|MMC_VDD_30_31;
1366         if (caps & SDHCI_CAN_VDD_180)
1367                 mmc->ocr_avail |= MMC_VDD_165_195;
1368
1369         if (mmc->ocr_avail == 0) {
1370                 printk(KERN_ERR "%s: Hardware doesn't report any "
1371                         "support voltages.\n", host->slot_descr);
1372                 ret = -ENODEV;
1373                 goto unmap;
1374         }
1375
1376         spin_lock_init(&host->lock);
1377
1378         /*
1379          * Maximum number of segments. Hardware cannot do scatter lists.
1380          */
1381         if (host->flags & SDHCI_USE_DMA)
1382                 mmc->max_hw_segs = 1;
1383         else
1384                 mmc->max_hw_segs = 16;
1385         mmc->max_phys_segs = 16;
1386
1387         /*
1388          * Maximum number of sectors in one transfer. Limited by DMA boundary
1389          * size (512KiB).
1390          */
1391         mmc->max_req_size = 524288;
1392
1393         /*
1394          * Maximum segment size. Could be one segment with the maximum number
1395          * of bytes.
1396          */
1397         mmc->max_seg_size = mmc->max_req_size;
1398
1399         /*
1400          * Maximum block size. This varies from controller to controller and
1401          * is specified in the capabilities register.
1402          */
1403         mmc->max_blk_size = (caps & SDHCI_MAX_BLOCK_MASK) >> SDHCI_MAX_BLOCK_SHIFT;
1404         if (mmc->max_blk_size >= 3) {
1405                 printk(KERN_WARNING "%s: Invalid maximum block size, assuming 512\n",
1406                         host->slot_descr);
1407                 mmc->max_blk_size = 512;
1408         } else
1409                 mmc->max_blk_size = 512 << mmc->max_blk_size;
1410
1411         /*
1412          * Maximum block count.
1413          */
1414         mmc->max_blk_count = 65535;
1415
1416         /*
1417          * Init tasklets.
1418          */
1419         tasklet_init(&host->card_tasklet,
1420                 sdhci_tasklet_card, (unsigned long)host);
1421         tasklet_init(&host->finish_tasklet,
1422                 sdhci_tasklet_finish, (unsigned long)host);
1423
1424         setup_timer(&host->timer, sdhci_timeout_timer, (unsigned long)host);
1425
1426         ret = request_irq(host->irq, sdhci_irq, IRQF_SHARED,
1427                 host->slot_descr, host);
1428         if (ret)
1429                 goto untasklet;
1430
1431         sdhci_init(host);
1432
1433 #ifdef CONFIG_MMC_DEBUG
1434         sdhci_dumpregs(host);
1435 #endif
1436
1437         mmiowb();
1438
1439         mmc_add_host(mmc);
1440
1441         printk(KERN_INFO "%s: SDHCI at 0x%08lx irq %d %s\n", mmc_hostname(mmc),
1442                 host->addr, host->irq,
1443                 (host->flags & SDHCI_USE_DMA)?"DMA":"PIO");
1444
1445         return 0;
1446
1447 untasklet:
1448         tasklet_kill(&host->card_tasklet);
1449         tasklet_kill(&host->finish_tasklet);
1450 unmap:
1451         iounmap(host->ioaddr);
1452 release:
1453         pci_release_region(pdev, host->bar);
1454 free:
1455         mmc_free_host(mmc);
1456
1457         return ret;
1458 }
1459
1460 static void sdhci_remove_slot(struct pci_dev *pdev, int slot)
1461 {
1462         struct sdhci_chip *chip;
1463         struct mmc_host *mmc;
1464         struct sdhci_host *host;
1465
1466         chip = pci_get_drvdata(pdev);
1467         host = chip->hosts[slot];
1468         mmc = host->mmc;
1469
1470         chip->hosts[slot] = NULL;
1471
1472         mmc_remove_host(mmc);
1473
1474         sdhci_reset(host, SDHCI_RESET_ALL);
1475
1476         free_irq(host->irq, host);
1477
1478         del_timer_sync(&host->timer);
1479
1480         tasklet_kill(&host->card_tasklet);
1481         tasklet_kill(&host->finish_tasklet);
1482
1483         iounmap(host->ioaddr);
1484
1485         pci_release_region(pdev, host->bar);
1486
1487         mmc_free_host(mmc);
1488 }
1489
1490 static int __devinit sdhci_probe(struct pci_dev *pdev,
1491         const struct pci_device_id *ent)
1492 {
1493         int ret, i;
1494         u8 slots, rev;
1495         struct sdhci_chip *chip;
1496
1497         BUG_ON(pdev == NULL);
1498         BUG_ON(ent == NULL);
1499
1500         pci_read_config_byte(pdev, PCI_CLASS_REVISION, &rev);
1501
1502         printk(KERN_INFO DRIVER_NAME
1503                 ": SDHCI controller found at %s [%04x:%04x] (rev %x)\n",
1504                 pci_name(pdev), (int)pdev->vendor, (int)pdev->device,
1505                 (int)rev);
1506
1507         ret = pci_read_config_byte(pdev, PCI_SLOT_INFO, &slots);
1508         if (ret)
1509                 return ret;
1510
1511         slots = PCI_SLOT_INFO_SLOTS(slots) + 1;
1512         DBG("found %d slot(s)\n", slots);
1513         if (slots == 0)
1514                 return -ENODEV;
1515
1516         ret = pci_enable_device(pdev);
1517         if (ret)
1518                 return ret;
1519
1520         chip = kzalloc(sizeof(struct sdhci_chip) +
1521                 sizeof(struct sdhci_host*) * slots, GFP_KERNEL);
1522         if (!chip) {
1523                 ret = -ENOMEM;
1524                 goto err;
1525         }
1526
1527         chip->pdev = pdev;
1528         chip->quirks = ent->driver_data;
1529
1530         if (debug_quirks)
1531                 chip->quirks = debug_quirks;
1532
1533         chip->num_slots = slots;
1534         pci_set_drvdata(pdev, chip);
1535
1536         for (i = 0;i < slots;i++) {
1537                 ret = sdhci_probe_slot(pdev, i);
1538                 if (ret) {
1539                         for (i--;i >= 0;i--)
1540                                 sdhci_remove_slot(pdev, i);
1541                         goto free;
1542                 }
1543         }
1544
1545         return 0;
1546
1547 free:
1548         pci_set_drvdata(pdev, NULL);
1549         kfree(chip);
1550
1551 err:
1552         pci_disable_device(pdev);
1553         return ret;
1554 }
1555
1556 static void __devexit sdhci_remove(struct pci_dev *pdev)
1557 {
1558         int i;
1559         struct sdhci_chip *chip;
1560
1561         chip = pci_get_drvdata(pdev);
1562
1563         if (chip) {
1564                 for (i = 0;i < chip->num_slots;i++)
1565                         sdhci_remove_slot(pdev, i);
1566
1567                 pci_set_drvdata(pdev, NULL);
1568
1569                 kfree(chip);
1570         }
1571
1572         pci_disable_device(pdev);
1573 }
1574
1575 static struct pci_driver sdhci_driver = {
1576         .name =         DRIVER_NAME,
1577         .id_table =     pci_ids,
1578         .probe =        sdhci_probe,
1579         .remove =       __devexit_p(sdhci_remove),
1580         .suspend =      sdhci_suspend,
1581         .resume =       sdhci_resume,
1582 };
1583
1584 /*****************************************************************************\
1585  *                                                                           *
1586  * Driver init/exit                                                          *
1587  *                                                                           *
1588 \*****************************************************************************/
1589
1590 static int __init sdhci_drv_init(void)
1591 {
1592         printk(KERN_INFO DRIVER_NAME
1593                 ": Secure Digital Host Controller Interface driver\n");
1594         printk(KERN_INFO DRIVER_NAME ": Copyright(c) Pierre Ossman\n");
1595
1596         return pci_register_driver(&sdhci_driver);
1597 }
1598
1599 static void __exit sdhci_drv_exit(void)
1600 {
1601         DBG("Exiting\n");
1602
1603         pci_unregister_driver(&sdhci_driver);
1604 }
1605
1606 module_init(sdhci_drv_init);
1607 module_exit(sdhci_drv_exit);
1608
1609 module_param(debug_quirks, uint, 0444);
1610
1611 MODULE_AUTHOR("Pierre Ossman <drzeus@drzeus.cx>");
1612 MODULE_DESCRIPTION("Secure Digital Host Controller Interface driver");
1613 MODULE_LICENSE("GPL");
1614
1615 MODULE_PARM_DESC(debug_quirks, "Force certain quirks.");