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