mmc: SEND_OP_COND considers card capabilities (voltage)
[oweals/u-boot.git] / drivers / mmc / mmc.c
1 /*
2  * Copyright 2008, Freescale Semiconductor, Inc
3  * Andy Fleming
4  *
5  * Based vaguely on the Linux code
6  *
7  * See file CREDITS for list of people who contributed to this
8  * project.
9  *
10  * This program is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU General Public License as
12  * published by the Free Software Foundation; either version 2 of
13  * the License, or (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
23  * MA 02111-1307 USA
24  */
25
26 #include <config.h>
27 #include <common.h>
28 #include <command.h>
29 #include <mmc.h>
30 #include <part.h>
31 #include <malloc.h>
32 #include <linux/list.h>
33 #include <div64.h>
34
35 /* Set block count limit because of 16 bit register limit on some hardware*/
36 #ifndef CONFIG_SYS_MMC_MAX_BLK_COUNT
37 #define CONFIG_SYS_MMC_MAX_BLK_COUNT 65535
38 #endif
39
40 static struct list_head mmc_devices;
41 static int cur_dev_num = -1;
42
43 int __board_mmc_getcd(u8 *cd, struct mmc *mmc) {
44         return -1;
45 }
46
47 int board_mmc_getcd(u8 *cd, struct mmc *mmc)__attribute__((weak,
48         alias("__board_mmc_getcd")));
49
50 int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
51 {
52         return mmc->send_cmd(mmc, cmd, data);
53 }
54
55 int mmc_send_status(struct mmc *mmc, int timeout)
56 {
57         struct mmc_cmd cmd;
58         int err;
59 #ifdef CONFIG_MMC_TRACE
60         int status;
61 #endif
62
63         cmd.cmdidx = MMC_CMD_SEND_STATUS;
64         cmd.resp_type = MMC_RSP_R1;
65         cmd.cmdarg = 0;
66         cmd.flags = 0;
67
68         do {
69                 err = mmc_send_cmd(mmc, &cmd, NULL);
70                 if (err)
71                         return err;
72                 else if (cmd.response[0] & MMC_STATUS_RDY_FOR_DATA)
73                         break;
74
75                 udelay(1000);
76
77                 if (cmd.response[0] & MMC_STATUS_MASK) {
78                         printf("Status Error: 0x%08X\n", cmd.response[0]);
79                         return COMM_ERR;
80                 }
81         } while (timeout--);
82
83         if (!timeout) {
84                 printf("Timeout waiting card ready\n");
85                 return TIMEOUT;
86         }
87
88         return 0;
89 }
90
91 int mmc_set_blocklen(struct mmc *mmc, int len)
92 {
93         struct mmc_cmd cmd;
94
95         cmd.cmdidx = MMC_CMD_SET_BLOCKLEN;
96         cmd.resp_type = MMC_RSP_R1;
97         cmd.cmdarg = len;
98         cmd.flags = 0;
99
100         return mmc_send_cmd(mmc, &cmd, NULL);
101 }
102
103 struct mmc *find_mmc_device(int dev_num)
104 {
105         struct mmc *m;
106         struct list_head *entry;
107
108         list_for_each(entry, &mmc_devices) {
109                 m = list_entry(entry, struct mmc, link);
110
111                 if (m->block_dev.dev == dev_num)
112                         return m;
113         }
114
115         printf("MMC Device %d not found\n", dev_num);
116
117         return NULL;
118 }
119
120 static ulong
121 mmc_write_blocks(struct mmc *mmc, ulong start, lbaint_t blkcnt, const void*src)
122 {
123         struct mmc_cmd cmd;
124         struct mmc_data data;
125         int timeout = 1000;
126
127         if ((start + blkcnt) > mmc->block_dev.lba) {
128                 printf("MMC: block number 0x%lx exceeds max(0x%lx)\n",
129                         start + blkcnt, mmc->block_dev.lba);
130                 return 0;
131         }
132
133         if (blkcnt > 1)
134                 cmd.cmdidx = MMC_CMD_WRITE_MULTIPLE_BLOCK;
135         else
136                 cmd.cmdidx = MMC_CMD_WRITE_SINGLE_BLOCK;
137
138         if (mmc->high_capacity)
139                 cmd.cmdarg = start;
140         else
141                 cmd.cmdarg = start * mmc->write_bl_len;
142
143         cmd.resp_type = MMC_RSP_R1;
144         cmd.flags = 0;
145
146         data.src = src;
147         data.blocks = blkcnt;
148         data.blocksize = mmc->write_bl_len;
149         data.flags = MMC_DATA_WRITE;
150
151         if (mmc_send_cmd(mmc, &cmd, &data)) {
152                 printf("mmc write failed\n");
153                 return 0;
154         }
155
156         /* SPI multiblock writes terminate using a special
157          * token, not a STOP_TRANSMISSION request.
158          */
159         if (!mmc_host_is_spi(mmc) && blkcnt > 1) {
160                 cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
161                 cmd.cmdarg = 0;
162                 cmd.resp_type = MMC_RSP_R1b;
163                 cmd.flags = 0;
164                 if (mmc_send_cmd(mmc, &cmd, NULL)) {
165                         printf("mmc fail to send stop cmd\n");
166                         return 0;
167                 }
168
169                 /* Waiting for the ready status */
170                 mmc_send_status(mmc, timeout);
171         }
172
173         return blkcnt;
174 }
175
176 static ulong
177 mmc_bwrite(int dev_num, ulong start, lbaint_t blkcnt, const void*src)
178 {
179         lbaint_t cur, blocks_todo = blkcnt;
180
181         struct mmc *mmc = find_mmc_device(dev_num);
182         if (!mmc)
183                 return 0;
184
185         if (mmc_set_blocklen(mmc, mmc->write_bl_len))
186                 return 0;
187
188         do {
189                 cur = (blocks_todo > CONFIG_SYS_MMC_MAX_BLK_COUNT) ?
190                        CONFIG_SYS_MMC_MAX_BLK_COUNT : blocks_todo;
191                 if(mmc_write_blocks(mmc, start, cur, src) != cur)
192                         return 0;
193                 blocks_todo -= cur;
194                 start += cur;
195                 src += cur * mmc->write_bl_len;
196         } while (blocks_todo > 0);
197
198         return blkcnt;
199 }
200
201 int mmc_read_blocks(struct mmc *mmc, void *dst, ulong start, lbaint_t blkcnt)
202 {
203         struct mmc_cmd cmd;
204         struct mmc_data data;
205         int timeout = 1000;
206
207         if (blkcnt > 1)
208                 cmd.cmdidx = MMC_CMD_READ_MULTIPLE_BLOCK;
209         else
210                 cmd.cmdidx = MMC_CMD_READ_SINGLE_BLOCK;
211
212         if (mmc->high_capacity)
213                 cmd.cmdarg = start;
214         else
215                 cmd.cmdarg = start * mmc->read_bl_len;
216
217         cmd.resp_type = MMC_RSP_R1;
218         cmd.flags = 0;
219
220         data.dest = dst;
221         data.blocks = blkcnt;
222         data.blocksize = mmc->read_bl_len;
223         data.flags = MMC_DATA_READ;
224
225         if (mmc_send_cmd(mmc, &cmd, &data))
226                 return 0;
227
228         if (blkcnt > 1) {
229                 cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
230                 cmd.cmdarg = 0;
231                 cmd.resp_type = MMC_RSP_R1b;
232                 cmd.flags = 0;
233                 if (mmc_send_cmd(mmc, &cmd, NULL)) {
234                         printf("mmc fail to send stop cmd\n");
235                         return 0;
236                 }
237
238                 /* Waiting for the ready status */
239                 mmc_send_status(mmc, timeout);
240         }
241
242         return blkcnt;
243 }
244
245 static ulong mmc_bread(int dev_num, ulong start, lbaint_t blkcnt, void *dst)
246 {
247         lbaint_t cur, blocks_todo = blkcnt;
248
249         if (blkcnt == 0)
250                 return 0;
251
252         struct mmc *mmc = find_mmc_device(dev_num);
253         if (!mmc)
254                 return 0;
255
256         if ((start + blkcnt) > mmc->block_dev.lba) {
257                 printf("MMC: block number 0x%lx exceeds max(0x%lx)\n",
258                         start + blkcnt, mmc->block_dev.lba);
259                 return 0;
260         }
261
262         if (mmc_set_blocklen(mmc, mmc->read_bl_len))
263                 return 0;
264
265         do {
266                 cur = (blocks_todo > CONFIG_SYS_MMC_MAX_BLK_COUNT) ?
267                        CONFIG_SYS_MMC_MAX_BLK_COUNT : blocks_todo;
268                 if(mmc_read_blocks(mmc, dst, start, cur) != cur)
269                         return 0;
270                 blocks_todo -= cur;
271                 start += cur;
272                 dst += cur * mmc->read_bl_len;
273         } while (blocks_todo > 0);
274
275         return blkcnt;
276 }
277
278 int mmc_go_idle(struct mmc* mmc)
279 {
280         struct mmc_cmd cmd;
281         int err;
282
283         udelay(1000);
284
285         cmd.cmdidx = MMC_CMD_GO_IDLE_STATE;
286         cmd.cmdarg = 0;
287         cmd.resp_type = MMC_RSP_NONE;
288         cmd.flags = 0;
289
290         err = mmc_send_cmd(mmc, &cmd, NULL);
291
292         if (err)
293                 return err;
294
295         udelay(2000);
296
297         return 0;
298 }
299
300 int
301 sd_send_op_cond(struct mmc *mmc)
302 {
303         int timeout = 1000;
304         int err;
305         struct mmc_cmd cmd;
306
307         do {
308                 cmd.cmdidx = MMC_CMD_APP_CMD;
309                 cmd.resp_type = MMC_RSP_R1;
310                 cmd.cmdarg = 0;
311                 cmd.flags = 0;
312
313                 err = mmc_send_cmd(mmc, &cmd, NULL);
314
315                 if (err)
316                         return err;
317
318                 cmd.cmdidx = SD_CMD_APP_SEND_OP_COND;
319                 cmd.resp_type = MMC_RSP_R3;
320
321                 /*
322                  * Most cards do not answer if some reserved bits
323                  * in the ocr are set. However, Some controller
324                  * can set bit 7 (reserved for low voltages), but
325                  * how to manage low voltages SD card is not yet
326                  * specified.
327                  */
328                 cmd.cmdarg = mmc_host_is_spi(mmc) ? 0 :
329                         (mmc->voltages & 0xff8000);
330
331                 if (mmc->version == SD_VERSION_2)
332                         cmd.cmdarg |= OCR_HCS;
333
334                 err = mmc_send_cmd(mmc, &cmd, NULL);
335
336                 if (err)
337                         return err;
338
339                 udelay(1000);
340         } while ((!(cmd.response[0] & OCR_BUSY)) && timeout--);
341
342         if (timeout <= 0)
343                 return UNUSABLE_ERR;
344
345         if (mmc->version != SD_VERSION_2)
346                 mmc->version = SD_VERSION_1_0;
347
348         if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
349                 cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
350                 cmd.resp_type = MMC_RSP_R3;
351                 cmd.cmdarg = 0;
352                 cmd.flags = 0;
353
354                 err = mmc_send_cmd(mmc, &cmd, NULL);
355
356                 if (err)
357                         return err;
358         }
359
360         mmc->ocr = cmd.response[0];
361
362         mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
363         mmc->rca = 0;
364
365         return 0;
366 }
367
368 int mmc_send_op_cond(struct mmc *mmc)
369 {
370         int timeout = 10000;
371         struct mmc_cmd cmd;
372         int err;
373
374         /* Some cards seem to need this */
375         mmc_go_idle(mmc);
376
377         /* Asking to the card its capabilities */
378         cmd.cmdidx = MMC_CMD_SEND_OP_COND;
379         cmd.resp_type = MMC_RSP_R3;
380         cmd.cmdarg = 0;
381         cmd.flags = 0;
382  
383         err = mmc_send_cmd(mmc, &cmd, NULL);
384  
385         if (err)
386                 return err;
387  
388         udelay(1000);
389  
390         do {
391                 cmd.cmdidx = MMC_CMD_SEND_OP_COND;
392                 cmd.resp_type = MMC_RSP_R3;
393                 cmd.cmdarg = (mmc_host_is_spi(mmc) ? 0 :
394                                 (mmc->voltages &
395                                 (cmd.response[0] & OCR_VOLTAGE_MASK)) |
396                                 (cmd.response[0] & OCR_ACCESS_MODE));
397                 cmd.flags = 0;
398
399                 err = mmc_send_cmd(mmc, &cmd, NULL);
400
401                 if (err)
402                         return err;
403
404                 udelay(1000);
405         } while (!(cmd.response[0] & OCR_BUSY) && timeout--);
406
407         if (timeout <= 0)
408                 return UNUSABLE_ERR;
409
410         if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
411                 cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
412                 cmd.resp_type = MMC_RSP_R3;
413                 cmd.cmdarg = 0;
414                 cmd.flags = 0;
415
416                 err = mmc_send_cmd(mmc, &cmd, NULL);
417
418                 if (err)
419                         return err;
420         }
421
422         mmc->version = MMC_VERSION_UNKNOWN;
423         mmc->ocr = cmd.response[0];
424
425         mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
426         mmc->rca = 0;
427
428         return 0;
429 }
430
431
432 int mmc_send_ext_csd(struct mmc *mmc, char *ext_csd)
433 {
434         struct mmc_cmd cmd;
435         struct mmc_data data;
436         int err;
437
438         /* Get the Card Status Register */
439         cmd.cmdidx = MMC_CMD_SEND_EXT_CSD;
440         cmd.resp_type = MMC_RSP_R1;
441         cmd.cmdarg = 0;
442         cmd.flags = 0;
443
444         data.dest = ext_csd;
445         data.blocks = 1;
446         data.blocksize = 512;
447         data.flags = MMC_DATA_READ;
448
449         err = mmc_send_cmd(mmc, &cmd, &data);
450
451         return err;
452 }
453
454
455 int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)
456 {
457         struct mmc_cmd cmd;
458         int timeout = 1000;
459         int ret;
460
461         cmd.cmdidx = MMC_CMD_SWITCH;
462         cmd.resp_type = MMC_RSP_R1b;
463         cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
464                                  (index << 16) |
465                                  (value << 8);
466         cmd.flags = 0;
467
468         ret = mmc_send_cmd(mmc, &cmd, NULL);
469
470         /* Waiting for the ready status */
471         mmc_send_status(mmc, timeout);
472
473         return ret;
474
475 }
476
477 int mmc_change_freq(struct mmc *mmc)
478 {
479         char ext_csd[512];
480         char cardtype;
481         int err;
482
483         mmc->card_caps = 0;
484
485         if (mmc_host_is_spi(mmc))
486                 return 0;
487
488         /* Only version 4 supports high-speed */
489         if (mmc->version < MMC_VERSION_4)
490                 return 0;
491
492         mmc->card_caps |= MMC_MODE_4BIT;
493
494         err = mmc_send_ext_csd(mmc, ext_csd);
495
496         if (err)
497                 return err;
498
499         if (ext_csd[212] || ext_csd[213] || ext_csd[214] || ext_csd[215])
500                 mmc->high_capacity = 1;
501
502         cardtype = ext_csd[196] & 0xf;
503
504         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING, 1);
505
506         if (err)
507                 return err;
508
509         /* Now check to see that it worked */
510         err = mmc_send_ext_csd(mmc, ext_csd);
511
512         if (err)
513                 return err;
514
515         /* No high-speed support */
516         if (!ext_csd[185])
517                 return 0;
518
519         /* High Speed is set, there are two types: 52MHz and 26MHz */
520         if (cardtype & MMC_HS_52MHZ)
521                 mmc->card_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
522         else
523                 mmc->card_caps |= MMC_MODE_HS;
524
525         return 0;
526 }
527
528 int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)
529 {
530         struct mmc_cmd cmd;
531         struct mmc_data data;
532
533         /* Switch the frequency */
534         cmd.cmdidx = SD_CMD_SWITCH_FUNC;
535         cmd.resp_type = MMC_RSP_R1;
536         cmd.cmdarg = (mode << 31) | 0xffffff;
537         cmd.cmdarg &= ~(0xf << (group * 4));
538         cmd.cmdarg |= value << (group * 4);
539         cmd.flags = 0;
540
541         data.dest = (char *)resp;
542         data.blocksize = 64;
543         data.blocks = 1;
544         data.flags = MMC_DATA_READ;
545
546         return mmc_send_cmd(mmc, &cmd, &data);
547 }
548
549
550 int sd_change_freq(struct mmc *mmc)
551 {
552         int err;
553         struct mmc_cmd cmd;
554         uint scr[2];
555         uint switch_status[16];
556         struct mmc_data data;
557         int timeout;
558
559         mmc->card_caps = 0;
560
561         if (mmc_host_is_spi(mmc))
562                 return 0;
563
564         /* Read the SCR to find out if this card supports higher speeds */
565         cmd.cmdidx = MMC_CMD_APP_CMD;
566         cmd.resp_type = MMC_RSP_R1;
567         cmd.cmdarg = mmc->rca << 16;
568         cmd.flags = 0;
569
570         err = mmc_send_cmd(mmc, &cmd, NULL);
571
572         if (err)
573                 return err;
574
575         cmd.cmdidx = SD_CMD_APP_SEND_SCR;
576         cmd.resp_type = MMC_RSP_R1;
577         cmd.cmdarg = 0;
578         cmd.flags = 0;
579
580         timeout = 3;
581
582 retry_scr:
583         data.dest = (char *)&scr;
584         data.blocksize = 8;
585         data.blocks = 1;
586         data.flags = MMC_DATA_READ;
587
588         err = mmc_send_cmd(mmc, &cmd, &data);
589
590         if (err) {
591                 if (timeout--)
592                         goto retry_scr;
593
594                 return err;
595         }
596
597         mmc->scr[0] = __be32_to_cpu(scr[0]);
598         mmc->scr[1] = __be32_to_cpu(scr[1]);
599
600         switch ((mmc->scr[0] >> 24) & 0xf) {
601                 case 0:
602                         mmc->version = SD_VERSION_1_0;
603                         break;
604                 case 1:
605                         mmc->version = SD_VERSION_1_10;
606                         break;
607                 case 2:
608                         mmc->version = SD_VERSION_2;
609                         break;
610                 default:
611                         mmc->version = SD_VERSION_1_0;
612                         break;
613         }
614
615         if (mmc->scr[0] & SD_DATA_4BIT)
616                 mmc->card_caps |= MMC_MODE_4BIT;
617
618         /* Version 1.0 doesn't support switching */
619         if (mmc->version == SD_VERSION_1_0)
620                 return 0;
621
622         timeout = 4;
623         while (timeout--) {
624                 err = sd_switch(mmc, SD_SWITCH_CHECK, 0, 1,
625                                 (u8 *)&switch_status);
626
627                 if (err)
628                         return err;
629
630                 /* The high-speed function is busy.  Try again */
631                 if (!(__be32_to_cpu(switch_status[7]) & SD_HIGHSPEED_BUSY))
632                         break;
633         }
634
635         /* If high-speed isn't supported, we return */
636         if (!(__be32_to_cpu(switch_status[3]) & SD_HIGHSPEED_SUPPORTED))
637                 return 0;
638
639         err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, 1, (u8 *)&switch_status);
640
641         if (err)
642                 return err;
643
644         if ((__be32_to_cpu(switch_status[4]) & 0x0f000000) == 0x01000000)
645                 mmc->card_caps |= MMC_MODE_HS;
646
647         return 0;
648 }
649
650 /* frequency bases */
651 /* divided by 10 to be nice to platforms without floating point */
652 static const int fbase[] = {
653         10000,
654         100000,
655         1000000,
656         10000000,
657 };
658
659 /* Multiplier values for TRAN_SPEED.  Multiplied by 10 to be nice
660  * to platforms without floating point.
661  */
662 static const int multipliers[] = {
663         0,      /* reserved */
664         10,
665         12,
666         13,
667         15,
668         20,
669         25,
670         30,
671         35,
672         40,
673         45,
674         50,
675         55,
676         60,
677         70,
678         80,
679 };
680
681 void mmc_set_ios(struct mmc *mmc)
682 {
683         mmc->set_ios(mmc);
684 }
685
686 void mmc_set_clock(struct mmc *mmc, uint clock)
687 {
688         if (clock > mmc->f_max)
689                 clock = mmc->f_max;
690
691         if (clock < mmc->f_min)
692                 clock = mmc->f_min;
693
694         mmc->clock = clock;
695
696         mmc_set_ios(mmc);
697 }
698
699 void mmc_set_bus_width(struct mmc *mmc, uint width)
700 {
701         mmc->bus_width = width;
702
703         mmc_set_ios(mmc);
704 }
705
706 int mmc_startup(struct mmc *mmc)
707 {
708         int err;
709         uint mult, freq;
710         u64 cmult, csize;
711         struct mmc_cmd cmd;
712         char ext_csd[512];
713         int timeout = 1000;
714
715 #ifdef CONFIG_MMC_SPI_CRC_ON
716         if (mmc_host_is_spi(mmc)) { /* enable CRC check for spi */
717                 cmd.cmdidx = MMC_CMD_SPI_CRC_ON_OFF;
718                 cmd.resp_type = MMC_RSP_R1;
719                 cmd.cmdarg = 1;
720                 cmd.flags = 0;
721                 err = mmc_send_cmd(mmc, &cmd, NULL);
722
723                 if (err)
724                         return err;
725         }
726 #endif
727
728         /* Put the Card in Identify Mode */
729         cmd.cmdidx = mmc_host_is_spi(mmc) ? MMC_CMD_SEND_CID :
730                 MMC_CMD_ALL_SEND_CID; /* cmd not supported in spi */
731         cmd.resp_type = MMC_RSP_R2;
732         cmd.cmdarg = 0;
733         cmd.flags = 0;
734
735         err = mmc_send_cmd(mmc, &cmd, NULL);
736
737         if (err)
738                 return err;
739
740         memcpy(mmc->cid, cmd.response, 16);
741
742         /*
743          * For MMC cards, set the Relative Address.
744          * For SD cards, get the Relatvie Address.
745          * This also puts the cards into Standby State
746          */
747         if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
748                 cmd.cmdidx = SD_CMD_SEND_RELATIVE_ADDR;
749                 cmd.cmdarg = mmc->rca << 16;
750                 cmd.resp_type = MMC_RSP_R6;
751                 cmd.flags = 0;
752
753                 err = mmc_send_cmd(mmc, &cmd, NULL);
754
755                 if (err)
756                         return err;
757
758                 if (IS_SD(mmc))
759                         mmc->rca = (cmd.response[0] >> 16) & 0xffff;
760         }
761
762         /* Get the Card-Specific Data */
763         cmd.cmdidx = MMC_CMD_SEND_CSD;
764         cmd.resp_type = MMC_RSP_R2;
765         cmd.cmdarg = mmc->rca << 16;
766         cmd.flags = 0;
767
768         err = mmc_send_cmd(mmc, &cmd, NULL);
769
770         /* Waiting for the ready status */
771         mmc_send_status(mmc, timeout);
772
773         if (err)
774                 return err;
775
776         mmc->csd[0] = cmd.response[0];
777         mmc->csd[1] = cmd.response[1];
778         mmc->csd[2] = cmd.response[2];
779         mmc->csd[3] = cmd.response[3];
780
781         if (mmc->version == MMC_VERSION_UNKNOWN) {
782                 int version = (cmd.response[0] >> 26) & 0xf;
783
784                 switch (version) {
785                         case 0:
786                                 mmc->version = MMC_VERSION_1_2;
787                                 break;
788                         case 1:
789                                 mmc->version = MMC_VERSION_1_4;
790                                 break;
791                         case 2:
792                                 mmc->version = MMC_VERSION_2_2;
793                                 break;
794                         case 3:
795                                 mmc->version = MMC_VERSION_3;
796                                 break;
797                         case 4:
798                                 mmc->version = MMC_VERSION_4;
799                                 break;
800                         default:
801                                 mmc->version = MMC_VERSION_1_2;
802                                 break;
803                 }
804         }
805
806         /* divide frequency by 10, since the mults are 10x bigger */
807         freq = fbase[(cmd.response[0] & 0x7)];
808         mult = multipliers[((cmd.response[0] >> 3) & 0xf)];
809
810         mmc->tran_speed = freq * mult;
811
812         mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf);
813
814         if (IS_SD(mmc))
815                 mmc->write_bl_len = mmc->read_bl_len;
816         else
817                 mmc->write_bl_len = 1 << ((cmd.response[3] >> 22) & 0xf);
818
819         if (mmc->high_capacity) {
820                 csize = (mmc->csd[1] & 0x3f) << 16
821                         | (mmc->csd[2] & 0xffff0000) >> 16;
822                 cmult = 8;
823         } else {
824                 csize = (mmc->csd[1] & 0x3ff) << 2
825                         | (mmc->csd[2] & 0xc0000000) >> 30;
826                 cmult = (mmc->csd[2] & 0x00038000) >> 15;
827         }
828
829         mmc->capacity = (csize + 1) << (cmult + 2);
830         mmc->capacity *= mmc->read_bl_len;
831
832         if (mmc->read_bl_len > 512)
833                 mmc->read_bl_len = 512;
834
835         if (mmc->write_bl_len > 512)
836                 mmc->write_bl_len = 512;
837
838         /* Select the card, and put it into Transfer Mode */
839         if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
840                 cmd.cmdidx = MMC_CMD_SELECT_CARD;
841                 cmd.resp_type = MMC_RSP_R1b;
842                 cmd.cmdarg = mmc->rca << 16;
843                 cmd.flags = 0;
844                 err = mmc_send_cmd(mmc, &cmd, NULL);
845
846                 if (err)
847                         return err;
848         }
849
850         if (!IS_SD(mmc) && (mmc->version >= MMC_VERSION_4)) {
851                 /* check  ext_csd version and capacity */
852                 err = mmc_send_ext_csd(mmc, ext_csd);
853                 if (!err & (ext_csd[192] >= 2)) {
854                         mmc->capacity = ext_csd[212] << 0 | ext_csd[213] << 8 |
855                                         ext_csd[214] << 16 | ext_csd[215] << 24;
856                         mmc->capacity *= 512;
857                 }
858         }
859
860         if (IS_SD(mmc))
861                 err = sd_change_freq(mmc);
862         else
863                 err = mmc_change_freq(mmc);
864
865         if (err)
866                 return err;
867
868         /* Restrict card's capabilities by what the host can do */
869         mmc->card_caps &= mmc->host_caps;
870
871         if (IS_SD(mmc)) {
872                 if (mmc->card_caps & MMC_MODE_4BIT) {
873                         cmd.cmdidx = MMC_CMD_APP_CMD;
874                         cmd.resp_type = MMC_RSP_R1;
875                         cmd.cmdarg = mmc->rca << 16;
876                         cmd.flags = 0;
877
878                         err = mmc_send_cmd(mmc, &cmd, NULL);
879                         if (err)
880                                 return err;
881
882                         cmd.cmdidx = SD_CMD_APP_SET_BUS_WIDTH;
883                         cmd.resp_type = MMC_RSP_R1;
884                         cmd.cmdarg = 2;
885                         cmd.flags = 0;
886                         err = mmc_send_cmd(mmc, &cmd, NULL);
887                         if (err)
888                                 return err;
889
890                         mmc_set_bus_width(mmc, 4);
891                 }
892
893                 if (mmc->card_caps & MMC_MODE_HS)
894                         mmc_set_clock(mmc, 50000000);
895                 else
896                         mmc_set_clock(mmc, 25000000);
897         } else {
898                 if (mmc->card_caps & MMC_MODE_4BIT) {
899                         /* Set the card to use 4 bit*/
900                         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
901                                         EXT_CSD_BUS_WIDTH,
902                                         EXT_CSD_BUS_WIDTH_4);
903
904                         if (err)
905                                 return err;
906
907                         mmc_set_bus_width(mmc, 4);
908                 } else if (mmc->card_caps & MMC_MODE_8BIT) {
909                         /* Set the card to use 8 bit*/
910                         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
911                                         EXT_CSD_BUS_WIDTH,
912                                         EXT_CSD_BUS_WIDTH_8);
913
914                         if (err)
915                                 return err;
916
917                         mmc_set_bus_width(mmc, 8);
918                 }
919
920                 if (mmc->card_caps & MMC_MODE_HS) {
921                         if (mmc->card_caps & MMC_MODE_HS_52MHz)
922                                 mmc_set_clock(mmc, 52000000);
923                         else
924                                 mmc_set_clock(mmc, 26000000);
925                 } else
926                         mmc_set_clock(mmc, 20000000);
927         }
928
929         /* fill in device description */
930         mmc->block_dev.lun = 0;
931         mmc->block_dev.type = 0;
932         mmc->block_dev.blksz = mmc->read_bl_len;
933         mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);
934         sprintf(mmc->block_dev.vendor, "Man %06x Snr %08x", mmc->cid[0] >> 8,
935                         (mmc->cid[2] << 8) | (mmc->cid[3] >> 24));
936         sprintf(mmc->block_dev.product, "%c%c%c%c%c", mmc->cid[0] & 0xff,
937                         (mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
938                         (mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff);
939         sprintf(mmc->block_dev.revision, "%d.%d", mmc->cid[2] >> 28,
940                         (mmc->cid[2] >> 24) & 0xf);
941         init_part(&mmc->block_dev);
942
943         return 0;
944 }
945
946 int mmc_send_if_cond(struct mmc *mmc)
947 {
948         struct mmc_cmd cmd;
949         int err;
950
951         cmd.cmdidx = SD_CMD_SEND_IF_COND;
952         /* We set the bit if the host supports voltages between 2.7 and 3.6 V */
953         cmd.cmdarg = ((mmc->voltages & 0xff8000) != 0) << 8 | 0xaa;
954         cmd.resp_type = MMC_RSP_R7;
955         cmd.flags = 0;
956
957         err = mmc_send_cmd(mmc, &cmd, NULL);
958
959         if (err)
960                 return err;
961
962         if ((cmd.response[0] & 0xff) != 0xaa)
963                 return UNUSABLE_ERR;
964         else
965                 mmc->version = SD_VERSION_2;
966
967         return 0;
968 }
969
970 int mmc_register(struct mmc *mmc)
971 {
972         /* Setup the universal parts of the block interface just once */
973         mmc->block_dev.if_type = IF_TYPE_MMC;
974         mmc->block_dev.dev = cur_dev_num++;
975         mmc->block_dev.removable = 1;
976         mmc->block_dev.block_read = mmc_bread;
977         mmc->block_dev.block_write = mmc_bwrite;
978
979         INIT_LIST_HEAD (&mmc->link);
980
981         list_add_tail (&mmc->link, &mmc_devices);
982
983         return 0;
984 }
985
986 block_dev_desc_t *mmc_get_dev(int dev)
987 {
988         struct mmc *mmc = find_mmc_device(dev);
989
990         return mmc ? &mmc->block_dev : NULL;
991 }
992
993 int mmc_init(struct mmc *mmc)
994 {
995         int err;
996
997         err = mmc->init(mmc);
998
999         if (err)
1000                 return err;
1001
1002         mmc_set_bus_width(mmc, 1);
1003         mmc_set_clock(mmc, 1);
1004
1005         /* Reset the Card */
1006         err = mmc_go_idle(mmc);
1007
1008         if (err)
1009                 return err;
1010
1011         /* Test for SD version 2 */
1012         err = mmc_send_if_cond(mmc);
1013
1014         /* Now try to get the SD card's operating condition */
1015         err = sd_send_op_cond(mmc);
1016
1017         /* If the command timed out, we check for an MMC card */
1018         if (err == TIMEOUT) {
1019                 err = mmc_send_op_cond(mmc);
1020
1021                 if (err) {
1022                         printf("Card did not respond to voltage select!\n");
1023                         return UNUSABLE_ERR;
1024                 }
1025         }
1026
1027         return mmc_startup(mmc);
1028 }
1029
1030 /*
1031  * CPU and board-specific MMC initializations.  Aliased function
1032  * signals caller to move on
1033  */
1034 static int __def_mmc_init(bd_t *bis)
1035 {
1036         return -1;
1037 }
1038
1039 int cpu_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
1040 int board_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
1041
1042 void print_mmc_devices(char separator)
1043 {
1044         struct mmc *m;
1045         struct list_head *entry;
1046
1047         list_for_each(entry, &mmc_devices) {
1048                 m = list_entry(entry, struct mmc, link);
1049
1050                 printf("%s: %d", m->name, m->block_dev.dev);
1051
1052                 if (entry->next != &mmc_devices)
1053                         printf("%c ", separator);
1054         }
1055
1056         printf("\n");
1057 }
1058
1059 int mmc_initialize(bd_t *bis)
1060 {
1061         INIT_LIST_HEAD (&mmc_devices);
1062         cur_dev_num = 0;
1063
1064         if (board_mmc_init(bis) < 0)
1065                 cpu_mmc_init(bis);
1066
1067         print_mmc_devices(',');
1068
1069         return 0;
1070 }