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