21d7f48e1d4e67c33ff7f59a46955bc7e2e70df0
[pandora-kernel.git] / drivers / mmc / core / mmc.c
1 /*
2  *  linux/drivers/mmc/core/mmc.c
3  *
4  *  Copyright (C) 2003-2004 Russell King, All Rights Reserved.
5  *  Copyright (C) 2005-2007 Pierre Ossman, All Rights Reserved.
6  *  MMCv4 support Copyright (C) 2006 Philip Langdale, All Rights Reserved.
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  */
12
13 #include <linux/err.h>
14
15 #include <linux/mmc/host.h>
16 #include <linux/mmc/card.h>
17 #include <linux/mmc/mmc.h>
18
19 #include "core.h"
20 #include "sysfs.h"
21 #include "bus.h"
22 #include "mmc_ops.h"
23
24 static const unsigned int tran_exp[] = {
25         10000,          100000,         1000000,        10000000,
26         0,              0,              0,              0
27 };
28
29 static const unsigned char tran_mant[] = {
30         0,      10,     12,     13,     15,     20,     25,     30,
31         35,     40,     45,     50,     55,     60,     70,     80,
32 };
33
34 static const unsigned int tacc_exp[] = {
35         1,      10,     100,    1000,   10000,  100000, 1000000, 10000000,
36 };
37
38 static const unsigned int tacc_mant[] = {
39         0,      10,     12,     13,     15,     20,     25,     30,
40         35,     40,     45,     50,     55,     60,     70,     80,
41 };
42
43 #define UNSTUFF_BITS(resp,start,size)                                   \
44         ({                                                              \
45                 const int __size = size;                                \
46                 const u32 __mask = (__size < 32 ? 1 << __size : 0) - 1; \
47                 const int __off = 3 - ((start) / 32);                   \
48                 const int __shft = (start) & 31;                        \
49                 u32 __res;                                              \
50                                                                         \
51                 __res = resp[__off] >> __shft;                          \
52                 if (__size + __shft > 32)                               \
53                         __res |= resp[__off-1] << ((32 - __shft) % 32); \
54                 __res & __mask;                                         \
55         })
56
57 /*
58  * Given the decoded CSD structure, decode the raw CID to our CID structure.
59  */
60 static int mmc_decode_cid(struct mmc_card *card)
61 {
62         u32 *resp = card->raw_cid;
63
64         /*
65          * The selection of the format here is based upon published
66          * specs from sandisk and from what people have reported.
67          */
68         switch (card->csd.mmca_vsn) {
69         case 0: /* MMC v1.0 - v1.2 */
70         case 1: /* MMC v1.4 */
71                 card->cid.manfid        = UNSTUFF_BITS(resp, 104, 24);
72                 card->cid.prod_name[0]  = UNSTUFF_BITS(resp, 96, 8);
73                 card->cid.prod_name[1]  = UNSTUFF_BITS(resp, 88, 8);
74                 card->cid.prod_name[2]  = UNSTUFF_BITS(resp, 80, 8);
75                 card->cid.prod_name[3]  = UNSTUFF_BITS(resp, 72, 8);
76                 card->cid.prod_name[4]  = UNSTUFF_BITS(resp, 64, 8);
77                 card->cid.prod_name[5]  = UNSTUFF_BITS(resp, 56, 8);
78                 card->cid.prod_name[6]  = UNSTUFF_BITS(resp, 48, 8);
79                 card->cid.hwrev         = UNSTUFF_BITS(resp, 44, 4);
80                 card->cid.fwrev         = UNSTUFF_BITS(resp, 40, 4);
81                 card->cid.serial        = UNSTUFF_BITS(resp, 16, 24);
82                 card->cid.month         = UNSTUFF_BITS(resp, 12, 4);
83                 card->cid.year          = UNSTUFF_BITS(resp, 8, 4) + 1997;
84                 break;
85
86         case 2: /* MMC v2.0 - v2.2 */
87         case 3: /* MMC v3.1 - v3.3 */
88         case 4: /* MMC v4 */
89                 card->cid.manfid        = UNSTUFF_BITS(resp, 120, 8);
90                 card->cid.oemid         = UNSTUFF_BITS(resp, 104, 16);
91                 card->cid.prod_name[0]  = UNSTUFF_BITS(resp, 96, 8);
92                 card->cid.prod_name[1]  = UNSTUFF_BITS(resp, 88, 8);
93                 card->cid.prod_name[2]  = UNSTUFF_BITS(resp, 80, 8);
94                 card->cid.prod_name[3]  = UNSTUFF_BITS(resp, 72, 8);
95                 card->cid.prod_name[4]  = UNSTUFF_BITS(resp, 64, 8);
96                 card->cid.prod_name[5]  = UNSTUFF_BITS(resp, 56, 8);
97                 card->cid.serial        = UNSTUFF_BITS(resp, 16, 32);
98                 card->cid.month         = UNSTUFF_BITS(resp, 12, 4);
99                 card->cid.year          = UNSTUFF_BITS(resp, 8, 4) + 1997;
100                 break;
101
102         default:
103                 printk(KERN_ERR "%s: card has unknown MMCA version %d\n",
104                         mmc_hostname(card->host), card->csd.mmca_vsn);
105                 return -EINVAL;
106         }
107
108         return 0;
109 }
110
111 /*
112  * Given a 128-bit response, decode to our card CSD structure.
113  */
114 static int mmc_decode_csd(struct mmc_card *card)
115 {
116         struct mmc_csd *csd = &card->csd;
117         unsigned int e, m, csd_struct;
118         u32 *resp = card->raw_csd;
119
120         /*
121          * We only understand CSD structure v1.1 and v1.2.
122          * v1.2 has extra information in bits 15, 11 and 10.
123          */
124         csd_struct = UNSTUFF_BITS(resp, 126, 2);
125         if (csd_struct != 1 && csd_struct != 2) {
126                 printk(KERN_ERR "%s: unrecognised CSD structure version %d\n",
127                         mmc_hostname(card->host), csd_struct);
128                 return -EINVAL;
129         }
130
131         csd->mmca_vsn    = UNSTUFF_BITS(resp, 122, 4);
132         m = UNSTUFF_BITS(resp, 115, 4);
133         e = UNSTUFF_BITS(resp, 112, 3);
134         csd->tacc_ns     = (tacc_exp[e] * tacc_mant[m] + 9) / 10;
135         csd->tacc_clks   = UNSTUFF_BITS(resp, 104, 8) * 100;
136
137         m = UNSTUFF_BITS(resp, 99, 4);
138         e = UNSTUFF_BITS(resp, 96, 3);
139         csd->max_dtr      = tran_exp[e] * tran_mant[m];
140         csd->cmdclass     = UNSTUFF_BITS(resp, 84, 12);
141
142         e = UNSTUFF_BITS(resp, 47, 3);
143         m = UNSTUFF_BITS(resp, 62, 12);
144         csd->capacity     = (1 + m) << (e + 2);
145
146         csd->read_blkbits = UNSTUFF_BITS(resp, 80, 4);
147         csd->read_partial = UNSTUFF_BITS(resp, 79, 1);
148         csd->write_misalign = UNSTUFF_BITS(resp, 78, 1);
149         csd->read_misalign = UNSTUFF_BITS(resp, 77, 1);
150         csd->r2w_factor = UNSTUFF_BITS(resp, 26, 3);
151         csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4);
152         csd->write_partial = UNSTUFF_BITS(resp, 21, 1);
153
154         return 0;
155 }
156
157 /*
158  * Read and decode extended CSD.
159  */
160 static int mmc_read_ext_csd(struct mmc_card *card)
161 {
162         int err;
163         u8 *ext_csd;
164
165         BUG_ON(!card);
166
167         err = MMC_ERR_FAILED;
168
169         if (card->csd.mmca_vsn < CSD_SPEC_VER_4)
170                 return MMC_ERR_NONE;
171
172         /*
173          * As the ext_csd is so large and mostly unused, we don't store the
174          * raw block in mmc_card.
175          */
176         ext_csd = kmalloc(512, GFP_KERNEL);
177         if (!ext_csd) {
178                 printk(KERN_ERR "%s: could not allocate a buffer to "
179                         "receive the ext_csd. mmc v4 cards will be "
180                         "treated as v3.\n", mmc_hostname(card->host));
181                 return MMC_ERR_FAILED;
182         }
183
184         err = mmc_send_ext_csd(card, ext_csd);
185         if (err != MMC_ERR_NONE) {
186                 /*
187                  * High capacity cards should have this "magic" size
188                  * stored in their CSD.
189                  */
190                 if (card->csd.capacity == (4096 * 512)) {
191                         printk(KERN_ERR "%s: unable to read EXT_CSD "
192                                 "on a possible high capacity card. "
193                                 "Card will be ignored.\n",
194                                 mmc_hostname(card->host));
195                 } else {
196                         printk(KERN_WARNING "%s: unable to read "
197                                 "EXT_CSD, performance might "
198                                 "suffer.\n",
199                                 mmc_hostname(card->host));
200                         err = MMC_ERR_NONE;
201                 }
202                 goto out;
203         }
204
205         card->ext_csd.sectors =
206                 ext_csd[EXT_CSD_SEC_CNT + 0] << 0 |
207                 ext_csd[EXT_CSD_SEC_CNT + 1] << 8 |
208                 ext_csd[EXT_CSD_SEC_CNT + 2] << 16 |
209                 ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
210         if (card->ext_csd.sectors)
211                 mmc_card_set_blockaddr(card);
212
213         switch (ext_csd[EXT_CSD_CARD_TYPE]) {
214         case EXT_CSD_CARD_TYPE_52 | EXT_CSD_CARD_TYPE_26:
215                 card->ext_csd.hs_max_dtr = 52000000;
216                 break;
217         case EXT_CSD_CARD_TYPE_26:
218                 card->ext_csd.hs_max_dtr = 26000000;
219                 break;
220         default:
221                 /* MMC v4 spec says this cannot happen */
222                 printk(KERN_WARNING "%s: card is mmc v4 but doesn't "
223                         "support any high-speed modes.\n",
224                         mmc_hostname(card->host));
225                 goto out;
226         }
227
228 out:
229         kfree(ext_csd);
230
231         return err;
232 }
233
234 /*
235  * Handle the detection and initialisation of a card.
236  *
237  * In the case of a resume, "curcard" will contain the card
238  * we're trying to reinitialise.
239  */
240 static int mmc_init_card(struct mmc_host *host, u32 ocr,
241         struct mmc_card *oldcard)
242 {
243         struct mmc_card *card;
244         int err;
245         u32 cid[4];
246         unsigned int max_dtr;
247
248         BUG_ON(!host);
249         BUG_ON(!host->claimed);
250
251         /*
252          * Since we're changing the OCR value, we seem to
253          * need to tell some cards to go back to the idle
254          * state.  We wait 1ms to give cards time to
255          * respond.
256          */
257         mmc_go_idle(host);
258
259         /* The extra bit indicates that we support high capacity */
260         err = mmc_send_op_cond(host, ocr | (1 << 30), NULL);
261         if (err != MMC_ERR_NONE)
262                 goto err;
263
264         /*
265          * Fetch CID from card.
266          */
267         err = mmc_all_send_cid(host, cid);
268         if (err != MMC_ERR_NONE)
269                 goto err;
270
271         if (oldcard) {
272                 if (memcmp(cid, oldcard->raw_cid, sizeof(cid)) != 0)
273                         goto err;
274
275                 card = oldcard;
276         } else {
277                 /*
278                  * Allocate card structure.
279                  */
280                 card = mmc_alloc_card(host);
281                 if (IS_ERR(card))
282                         goto err;
283
284                 card->type = MMC_TYPE_MMC;
285                 card->rca = 1;
286                 memcpy(card->raw_cid, cid, sizeof(card->raw_cid));
287         }
288
289         /*
290          * Set card RCA.
291          */
292         err = mmc_set_relative_addr(card);
293         if (err != MMC_ERR_NONE)
294                 goto free_card;
295
296         mmc_set_bus_mode(host, MMC_BUSMODE_PUSHPULL);
297
298         if (!oldcard) {
299                 /*
300                  * Fetch CSD from card.
301                  */
302                 err = mmc_send_csd(card, card->raw_csd);
303                 if (err != MMC_ERR_NONE)
304                         goto free_card;
305
306                 err = mmc_decode_csd(card);
307                 if (err < 0)
308                         goto free_card;
309                 err = mmc_decode_cid(card);
310                 if (err < 0)
311                         goto free_card;
312         }
313
314         /*
315          * Select card, as all following commands rely on that.
316          */
317         err = mmc_select_card(card);
318         if (err != MMC_ERR_NONE)
319                 goto free_card;
320
321         if (!oldcard) {
322                 /*
323                  * Fetch and process extened CSD.
324                  */
325                 err = mmc_read_ext_csd(card);
326                 if (err != MMC_ERR_NONE)
327                         goto free_card;
328         }
329
330         /*
331          * Activate high speed (if supported)
332          */
333         if ((card->ext_csd.hs_max_dtr != 0) &&
334                 (host->caps & MMC_CAP_MMC_HIGHSPEED)) {
335                 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
336                         EXT_CSD_HS_TIMING, 1);
337                 if (err != MMC_ERR_NONE)
338                         goto free_card;
339
340                 mmc_card_set_highspeed(card);
341
342                 mmc_set_timing(card->host, MMC_TIMING_MMC_HS);
343         }
344
345         /*
346          * Compute bus speed.
347          */
348         max_dtr = (unsigned int)-1;
349
350         if (mmc_card_highspeed(card)) {
351                 if (max_dtr > card->ext_csd.hs_max_dtr)
352                         max_dtr = card->ext_csd.hs_max_dtr;
353         } else if (max_dtr > card->csd.max_dtr) {
354                 max_dtr = card->csd.max_dtr;
355         }
356
357         mmc_set_clock(host, max_dtr);
358
359         /*
360          * Activate wide bus (if supported).
361          */
362         if ((card->csd.mmca_vsn >= CSD_SPEC_VER_4) &&
363                 (host->caps & MMC_CAP_4_BIT_DATA)) {
364                 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
365                         EXT_CSD_BUS_WIDTH, EXT_CSD_BUS_WIDTH_4);
366                 if (err != MMC_ERR_NONE)
367                         goto free_card;
368
369                 mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4);
370         }
371
372         if (!oldcard)
373                 host->card = card;
374
375         return MMC_ERR_NONE;
376
377 free_card:
378         if (!oldcard)
379                 mmc_remove_card(card);
380 err:
381
382         return MMC_ERR_FAILED;
383 }
384
385 /*
386  * Host is being removed. Free up the current card.
387  */
388 static void mmc_remove(struct mmc_host *host)
389 {
390         BUG_ON(!host);
391         BUG_ON(!host->card);
392
393         mmc_remove_card(host->card);
394         host->card = NULL;
395 }
396
397 /*
398  * Card detection callback from host.
399  */
400 static void mmc_detect(struct mmc_host *host)
401 {
402         int err;
403
404         BUG_ON(!host);
405         BUG_ON(!host->card);
406
407         mmc_claim_host(host);
408
409         /*
410          * Just check if our card has been removed.
411          */
412         err = mmc_send_status(host->card, NULL);
413
414         mmc_release_host(host);
415
416         if (err != MMC_ERR_NONE) {
417                 mmc_remove(host);
418
419                 mmc_claim_host(host);
420                 mmc_detach_bus(host);
421                 mmc_release_host(host);
422         }
423 }
424
425 MMC_ATTR_FN(cid, "%08x%08x%08x%08x\n", card->raw_cid[0], card->raw_cid[1],
426         card->raw_cid[2], card->raw_cid[3]);
427 MMC_ATTR_FN(csd, "%08x%08x%08x%08x\n", card->raw_csd[0], card->raw_csd[1],
428         card->raw_csd[2], card->raw_csd[3]);
429 MMC_ATTR_FN(date, "%02d/%04d\n", card->cid.month, card->cid.year);
430 MMC_ATTR_FN(fwrev, "0x%x\n", card->cid.fwrev);
431 MMC_ATTR_FN(hwrev, "0x%x\n", card->cid.hwrev);
432 MMC_ATTR_FN(manfid, "0x%06x\n", card->cid.manfid);
433 MMC_ATTR_FN(name, "%s\n", card->cid.prod_name);
434 MMC_ATTR_FN(oemid, "0x%04x\n", card->cid.oemid);
435 MMC_ATTR_FN(serial, "0x%08x\n", card->cid.serial);
436
437 static struct device_attribute mmc_dev_attrs[] = {
438         MMC_ATTR_RO(cid),
439         MMC_ATTR_RO(csd),
440         MMC_ATTR_RO(date),
441         MMC_ATTR_RO(fwrev),
442         MMC_ATTR_RO(hwrev),
443         MMC_ATTR_RO(manfid),
444         MMC_ATTR_RO(name),
445         MMC_ATTR_RO(oemid),
446         MMC_ATTR_RO(serial),
447         __ATTR_NULL,
448 };
449
450 /*
451  * Adds sysfs entries as relevant.
452  */
453 static int mmc_sysfs_add(struct mmc_host *host, struct mmc_card *card)
454 {
455         int ret;
456
457         ret = mmc_add_attrs(card, mmc_dev_attrs);
458         if (ret < 0)
459                 return ret;
460
461         return 0;
462 }
463
464 /*
465  * Removes the sysfs entries added by mmc_sysfs_add().
466  */
467 static void mmc_sysfs_remove(struct mmc_host *host, struct mmc_card *card)
468 {
469         mmc_remove_attrs(card, mmc_dev_attrs);
470 }
471
472 #ifdef CONFIG_MMC_UNSAFE_RESUME
473
474 /*
475  * Suspend callback from host.
476  */
477 static void mmc_suspend(struct mmc_host *host)
478 {
479         BUG_ON(!host);
480         BUG_ON(!host->card);
481
482         mmc_claim_host(host);
483         mmc_deselect_cards(host);
484         host->card->state &= ~MMC_STATE_HIGHSPEED;
485         mmc_release_host(host);
486 }
487
488 /*
489  * Resume callback from host.
490  *
491  * This function tries to determine if the same card is still present
492  * and, if so, restore all state to it.
493  */
494 static void mmc_resume(struct mmc_host *host)
495 {
496         int err;
497
498         BUG_ON(!host);
499         BUG_ON(!host->card);
500
501         mmc_claim_host(host);
502         err = mmc_init_card(host, host->ocr, host->card);
503         mmc_release_host(host);
504
505         if (err != MMC_ERR_NONE) {
506                 mmc_remove(host);
507
508                 mmc_claim_host(host);
509                 mmc_detach_bus(host);
510                 mmc_release_host(host);
511         }
512
513 }
514
515 #else
516
517 #define mmc_suspend NULL
518 #define mmc_resume NULL
519
520 #endif
521
522 static const struct mmc_bus_ops mmc_ops = {
523         .remove = mmc_remove,
524         .detect = mmc_detect,
525         .sysfs_add = mmc_sysfs_add,
526         .sysfs_remove = mmc_sysfs_remove,
527         .suspend = mmc_suspend,
528         .resume = mmc_resume,
529 };
530
531 /*
532  * Starting point for MMC card init.
533  */
534 int mmc_attach_mmc(struct mmc_host *host, u32 ocr)
535 {
536         int err;
537
538         BUG_ON(!host);
539         BUG_ON(!host->claimed);
540
541         mmc_attach_bus(host, &mmc_ops);
542
543         /*
544          * Sanity check the voltages that the card claims to
545          * support.
546          */
547         if (ocr & 0x7F) {
548                 printk(KERN_WARNING "%s: card claims to support voltages "
549                        "below the defined range. These will be ignored.\n",
550                        mmc_hostname(host));
551                 ocr &= ~0x7F;
552         }
553
554         host->ocr = mmc_select_voltage(host, ocr);
555
556         /*
557          * Can we support the voltage of the card?
558          */
559         if (!host->ocr) {
560                 err = -EINVAL;
561                 goto err;
562         }
563
564         /*
565          * Detect and init the card.
566          */
567         err = mmc_init_card(host, host->ocr, NULL);
568         if (err != MMC_ERR_NONE)
569                 goto err;
570
571         mmc_release_host(host);
572
573         err = mmc_add_card(host->card);
574         if (err)
575                 goto remove_card;
576
577         return 0;
578
579 remove_card:
580         mmc_remove_card(host->card);
581         host->card = NULL;
582         mmc_claim_host(host);
583 err:
584         mmc_detach_bus(host);
585         mmc_release_host(host);
586
587         printk(KERN_ERR "%s: error %d whilst initialising MMC card\n",
588                 mmc_hostname(host), err);
589
590         return 0;
591 }
592