]> git.ipfire.org Git - people/ms/u-boot.git/blob - drivers/mmc/mmc.c
mmc: Properly determine maximum supported bus width
[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 <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(struct mmc *mmc) {
44 return -1;
45 }
46
47 int board_mmc_getcd(struct mmc *mmc)__attribute__((weak,
48 alias("__board_mmc_getcd")));
49
50 static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
51 struct mmc_data *data)
52 {
53 struct mmc_data backup;
54 int ret;
55
56 memset(&backup, 0, sizeof(backup));
57
58 #ifdef CONFIG_MMC_TRACE
59 int i;
60 u8 *ptr;
61
62 printf("CMD_SEND:%d\n", cmd->cmdidx);
63 printf("\t\tARG\t\t\t 0x%08X\n", cmd->cmdarg);
64 ret = mmc->send_cmd(mmc, cmd, data);
65 switch (cmd->resp_type) {
66 case MMC_RSP_NONE:
67 printf("\t\tMMC_RSP_NONE\n");
68 break;
69 case MMC_RSP_R1:
70 printf("\t\tMMC_RSP_R1,5,6,7 \t 0x%08X \n",
71 cmd->response[0]);
72 break;
73 case MMC_RSP_R1b:
74 printf("\t\tMMC_RSP_R1b\t\t 0x%08X \n",
75 cmd->response[0]);
76 break;
77 case MMC_RSP_R2:
78 printf("\t\tMMC_RSP_R2\t\t 0x%08X \n",
79 cmd->response[0]);
80 printf("\t\t \t\t 0x%08X \n",
81 cmd->response[1]);
82 printf("\t\t \t\t 0x%08X \n",
83 cmd->response[2]);
84 printf("\t\t \t\t 0x%08X \n",
85 cmd->response[3]);
86 printf("\n");
87 printf("\t\t\t\t\tDUMPING DATA\n");
88 for (i = 0; i < 4; i++) {
89 int j;
90 printf("\t\t\t\t\t%03d - ", i*4);
91 ptr = (u8 *)&cmd->response[i];
92 ptr += 3;
93 for (j = 0; j < 4; j++)
94 printf("%02X ", *ptr--);
95 printf("\n");
96 }
97 break;
98 case MMC_RSP_R3:
99 printf("\t\tMMC_RSP_R3,4\t\t 0x%08X \n",
100 cmd->response[0]);
101 break;
102 default:
103 printf("\t\tERROR MMC rsp not supported\n");
104 break;
105 }
106 #else
107 ret = mmc->send_cmd(mmc, cmd, data);
108 #endif
109 return ret;
110 }
111
112 static int mmc_send_status(struct mmc *mmc, int timeout)
113 {
114 struct mmc_cmd cmd;
115 int err, retries = 5;
116 #ifdef CONFIG_MMC_TRACE
117 int status;
118 #endif
119
120 cmd.cmdidx = MMC_CMD_SEND_STATUS;
121 cmd.resp_type = MMC_RSP_R1;
122 if (!mmc_host_is_spi(mmc))
123 cmd.cmdarg = mmc->rca << 16;
124
125 do {
126 err = mmc_send_cmd(mmc, &cmd, NULL);
127 if (!err) {
128 if ((cmd.response[0] & MMC_STATUS_RDY_FOR_DATA) &&
129 (cmd.response[0] & MMC_STATUS_CURR_STATE) !=
130 MMC_STATE_PRG)
131 break;
132 else if (cmd.response[0] & MMC_STATUS_MASK) {
133 printf("Status Error: 0x%08X\n",
134 cmd.response[0]);
135 return COMM_ERR;
136 }
137 } else if (--retries < 0)
138 return err;
139
140 udelay(1000);
141
142 } while (timeout--);
143
144 #ifdef CONFIG_MMC_TRACE
145 status = (cmd.response[0] & MMC_STATUS_CURR_STATE) >> 9;
146 printf("CURR STATE:%d\n", status);
147 #endif
148 if (timeout <= 0) {
149 printf("Timeout waiting card ready\n");
150 return TIMEOUT;
151 }
152
153 return 0;
154 }
155
156 static int mmc_set_blocklen(struct mmc *mmc, int len)
157 {
158 struct mmc_cmd cmd;
159
160 cmd.cmdidx = MMC_CMD_SET_BLOCKLEN;
161 cmd.resp_type = MMC_RSP_R1;
162 cmd.cmdarg = len;
163
164 return mmc_send_cmd(mmc, &cmd, NULL);
165 }
166
167 struct mmc *find_mmc_device(int dev_num)
168 {
169 struct mmc *m;
170 struct list_head *entry;
171
172 list_for_each(entry, &mmc_devices) {
173 m = list_entry(entry, struct mmc, link);
174
175 if (m->block_dev.dev == dev_num)
176 return m;
177 }
178
179 printf("MMC Device %d not found\n", dev_num);
180
181 return NULL;
182 }
183
184 static ulong mmc_erase_t(struct mmc *mmc, ulong start, lbaint_t blkcnt)
185 {
186 struct mmc_cmd cmd;
187 ulong end;
188 int err, start_cmd, end_cmd;
189
190 if (mmc->high_capacity)
191 end = start + blkcnt - 1;
192 else {
193 end = (start + blkcnt - 1) * mmc->write_bl_len;
194 start *= mmc->write_bl_len;
195 }
196
197 if (IS_SD(mmc)) {
198 start_cmd = SD_CMD_ERASE_WR_BLK_START;
199 end_cmd = SD_CMD_ERASE_WR_BLK_END;
200 } else {
201 start_cmd = MMC_CMD_ERASE_GROUP_START;
202 end_cmd = MMC_CMD_ERASE_GROUP_END;
203 }
204
205 cmd.cmdidx = start_cmd;
206 cmd.cmdarg = start;
207 cmd.resp_type = MMC_RSP_R1;
208
209 err = mmc_send_cmd(mmc, &cmd, NULL);
210 if (err)
211 goto err_out;
212
213 cmd.cmdidx = end_cmd;
214 cmd.cmdarg = end;
215
216 err = mmc_send_cmd(mmc, &cmd, NULL);
217 if (err)
218 goto err_out;
219
220 cmd.cmdidx = MMC_CMD_ERASE;
221 cmd.cmdarg = SECURE_ERASE;
222 cmd.resp_type = MMC_RSP_R1b;
223
224 err = mmc_send_cmd(mmc, &cmd, NULL);
225 if (err)
226 goto err_out;
227
228 return 0;
229
230 err_out:
231 puts("mmc erase failed\n");
232 return err;
233 }
234
235 static unsigned long
236 mmc_berase(int dev_num, unsigned long start, lbaint_t blkcnt)
237 {
238 int err = 0;
239 struct mmc *mmc = find_mmc_device(dev_num);
240 lbaint_t blk = 0, blk_r = 0;
241 int timeout = 1000;
242
243 if (!mmc)
244 return -1;
245
246 if ((start % mmc->erase_grp_size) || (blkcnt % mmc->erase_grp_size))
247 printf("\n\nCaution! Your devices Erase group is 0x%x\n"
248 "The erase range would be change to 0x%lx~0x%lx\n\n",
249 mmc->erase_grp_size, start & ~(mmc->erase_grp_size - 1),
250 ((start + blkcnt + mmc->erase_grp_size)
251 & ~(mmc->erase_grp_size - 1)) - 1);
252
253 while (blk < blkcnt) {
254 blk_r = ((blkcnt - blk) > mmc->erase_grp_size) ?
255 mmc->erase_grp_size : (blkcnt - blk);
256 err = mmc_erase_t(mmc, start + blk, blk_r);
257 if (err)
258 break;
259
260 blk += blk_r;
261
262 /* Waiting for the ready status */
263 if (mmc_send_status(mmc, timeout))
264 return 0;
265 }
266
267 return blk;
268 }
269
270 static ulong
271 mmc_write_blocks(struct mmc *mmc, ulong start, lbaint_t blkcnt, const void*src)
272 {
273 struct mmc_cmd cmd;
274 struct mmc_data data;
275 int timeout = 1000;
276
277 if ((start + blkcnt) > mmc->block_dev.lba) {
278 printf("MMC: block number 0x%lx exceeds max(0x%lx)\n",
279 start + blkcnt, mmc->block_dev.lba);
280 return 0;
281 }
282
283 if (blkcnt > 1)
284 cmd.cmdidx = MMC_CMD_WRITE_MULTIPLE_BLOCK;
285 else
286 cmd.cmdidx = MMC_CMD_WRITE_SINGLE_BLOCK;
287
288 if (mmc->high_capacity)
289 cmd.cmdarg = start;
290 else
291 cmd.cmdarg = start * mmc->write_bl_len;
292
293 cmd.resp_type = MMC_RSP_R1;
294
295 data.src = src;
296 data.blocks = blkcnt;
297 data.blocksize = mmc->write_bl_len;
298 data.flags = MMC_DATA_WRITE;
299
300 if (mmc_send_cmd(mmc, &cmd, &data)) {
301 printf("mmc write failed\n");
302 return 0;
303 }
304
305 /* SPI multiblock writes terminate using a special
306 * token, not a STOP_TRANSMISSION request.
307 */
308 if (!mmc_host_is_spi(mmc) && blkcnt > 1) {
309 cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
310 cmd.cmdarg = 0;
311 cmd.resp_type = MMC_RSP_R1b;
312 if (mmc_send_cmd(mmc, &cmd, NULL)) {
313 printf("mmc fail to send stop cmd\n");
314 return 0;
315 }
316 }
317
318 /* Waiting for the ready status */
319 if (mmc_send_status(mmc, timeout))
320 return 0;
321
322 return blkcnt;
323 }
324
325 static ulong
326 mmc_bwrite(int dev_num, ulong start, lbaint_t blkcnt, const void*src)
327 {
328 lbaint_t cur, blocks_todo = blkcnt;
329
330 struct mmc *mmc = find_mmc_device(dev_num);
331 if (!mmc)
332 return 0;
333
334 if (mmc_set_blocklen(mmc, mmc->write_bl_len))
335 return 0;
336
337 do {
338 cur = (blocks_todo > mmc->b_max) ? mmc->b_max : blocks_todo;
339 if(mmc_write_blocks(mmc, start, cur, src) != cur)
340 return 0;
341 blocks_todo -= cur;
342 start += cur;
343 src += cur * mmc->write_bl_len;
344 } while (blocks_todo > 0);
345
346 return blkcnt;
347 }
348
349 static int mmc_read_blocks(struct mmc *mmc, void *dst, ulong start,
350 lbaint_t blkcnt)
351 {
352 struct mmc_cmd cmd;
353 struct mmc_data data;
354
355 if (blkcnt > 1)
356 cmd.cmdidx = MMC_CMD_READ_MULTIPLE_BLOCK;
357 else
358 cmd.cmdidx = MMC_CMD_READ_SINGLE_BLOCK;
359
360 if (mmc->high_capacity)
361 cmd.cmdarg = start;
362 else
363 cmd.cmdarg = start * mmc->read_bl_len;
364
365 cmd.resp_type = MMC_RSP_R1;
366
367 data.dest = dst;
368 data.blocks = blkcnt;
369 data.blocksize = mmc->read_bl_len;
370 data.flags = MMC_DATA_READ;
371
372 if (mmc_send_cmd(mmc, &cmd, &data))
373 return 0;
374
375 if (blkcnt > 1) {
376 cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
377 cmd.cmdarg = 0;
378 cmd.resp_type = MMC_RSP_R1b;
379 if (mmc_send_cmd(mmc, &cmd, NULL)) {
380 printf("mmc fail to send stop cmd\n");
381 return 0;
382 }
383 }
384
385 return blkcnt;
386 }
387
388 static ulong mmc_bread(int dev_num, ulong start, lbaint_t blkcnt, void *dst)
389 {
390 lbaint_t cur, blocks_todo = blkcnt;
391
392 if (blkcnt == 0)
393 return 0;
394
395 struct mmc *mmc = find_mmc_device(dev_num);
396 if (!mmc)
397 return 0;
398
399 if ((start + blkcnt) > mmc->block_dev.lba) {
400 printf("MMC: block number 0x%lx exceeds max(0x%lx)\n",
401 start + blkcnt, mmc->block_dev.lba);
402 return 0;
403 }
404
405 if (mmc_set_blocklen(mmc, mmc->read_bl_len))
406 return 0;
407
408 do {
409 cur = (blocks_todo > mmc->b_max) ? mmc->b_max : blocks_todo;
410 if(mmc_read_blocks(mmc, dst, start, cur) != cur)
411 return 0;
412 blocks_todo -= cur;
413 start += cur;
414 dst += cur * mmc->read_bl_len;
415 } while (blocks_todo > 0);
416
417 return blkcnt;
418 }
419
420 static int mmc_go_idle(struct mmc *mmc)
421 {
422 struct mmc_cmd cmd;
423 int err;
424
425 udelay(1000);
426
427 cmd.cmdidx = MMC_CMD_GO_IDLE_STATE;
428 cmd.cmdarg = 0;
429 cmd.resp_type = MMC_RSP_NONE;
430
431 err = mmc_send_cmd(mmc, &cmd, NULL);
432
433 if (err)
434 return err;
435
436 udelay(2000);
437
438 return 0;
439 }
440
441 static int sd_send_op_cond(struct mmc *mmc)
442 {
443 int timeout = 1000;
444 int err;
445 struct mmc_cmd cmd;
446
447 do {
448 cmd.cmdidx = MMC_CMD_APP_CMD;
449 cmd.resp_type = MMC_RSP_R1;
450 cmd.cmdarg = 0;
451
452 err = mmc_send_cmd(mmc, &cmd, NULL);
453
454 if (err)
455 return err;
456
457 cmd.cmdidx = SD_CMD_APP_SEND_OP_COND;
458 cmd.resp_type = MMC_RSP_R3;
459
460 /*
461 * Most cards do not answer if some reserved bits
462 * in the ocr are set. However, Some controller
463 * can set bit 7 (reserved for low voltages), but
464 * how to manage low voltages SD card is not yet
465 * specified.
466 */
467 cmd.cmdarg = mmc_host_is_spi(mmc) ? 0 :
468 (mmc->voltages & 0xff8000);
469
470 if (mmc->version == SD_VERSION_2)
471 cmd.cmdarg |= OCR_HCS;
472
473 err = mmc_send_cmd(mmc, &cmd, NULL);
474
475 if (err)
476 return err;
477
478 udelay(1000);
479 } while ((!(cmd.response[0] & OCR_BUSY)) && timeout--);
480
481 if (timeout <= 0)
482 return UNUSABLE_ERR;
483
484 if (mmc->version != SD_VERSION_2)
485 mmc->version = SD_VERSION_1_0;
486
487 if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
488 cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
489 cmd.resp_type = MMC_RSP_R3;
490 cmd.cmdarg = 0;
491
492 err = mmc_send_cmd(mmc, &cmd, NULL);
493
494 if (err)
495 return err;
496 }
497
498 mmc->ocr = cmd.response[0];
499
500 mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
501 mmc->rca = 0;
502
503 return 0;
504 }
505
506 static int mmc_send_op_cond(struct mmc *mmc)
507 {
508 int timeout = 10000;
509 struct mmc_cmd cmd;
510 int err;
511
512 /* Some cards seem to need this */
513 mmc_go_idle(mmc);
514
515 /* Asking to the card its capabilities */
516 cmd.cmdidx = MMC_CMD_SEND_OP_COND;
517 cmd.resp_type = MMC_RSP_R3;
518 cmd.cmdarg = 0;
519
520 err = mmc_send_cmd(mmc, &cmd, NULL);
521
522 if (err)
523 return err;
524
525 udelay(1000);
526
527 do {
528 cmd.cmdidx = MMC_CMD_SEND_OP_COND;
529 cmd.resp_type = MMC_RSP_R3;
530 cmd.cmdarg = (mmc_host_is_spi(mmc) ? 0 :
531 (mmc->voltages &
532 (cmd.response[0] & OCR_VOLTAGE_MASK)) |
533 (cmd.response[0] & OCR_ACCESS_MODE));
534
535 if (mmc->host_caps & MMC_MODE_HC)
536 cmd.cmdarg |= OCR_HCS;
537
538 err = mmc_send_cmd(mmc, &cmd, NULL);
539
540 if (err)
541 return err;
542
543 udelay(1000);
544 } while (!(cmd.response[0] & OCR_BUSY) && timeout--);
545
546 if (timeout <= 0)
547 return UNUSABLE_ERR;
548
549 if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
550 cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
551 cmd.resp_type = MMC_RSP_R3;
552 cmd.cmdarg = 0;
553
554 err = mmc_send_cmd(mmc, &cmd, NULL);
555
556 if (err)
557 return err;
558 }
559
560 mmc->version = MMC_VERSION_UNKNOWN;
561 mmc->ocr = cmd.response[0];
562
563 mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
564 mmc->rca = 0;
565
566 return 0;
567 }
568
569
570 static int mmc_send_ext_csd(struct mmc *mmc, u8 *ext_csd)
571 {
572 struct mmc_cmd cmd;
573 struct mmc_data data;
574 int err;
575
576 /* Get the Card Status Register */
577 cmd.cmdidx = MMC_CMD_SEND_EXT_CSD;
578 cmd.resp_type = MMC_RSP_R1;
579 cmd.cmdarg = 0;
580
581 data.dest = (char *)ext_csd;
582 data.blocks = 1;
583 data.blocksize = 512;
584 data.flags = MMC_DATA_READ;
585
586 err = mmc_send_cmd(mmc, &cmd, &data);
587
588 return err;
589 }
590
591
592 static int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)
593 {
594 struct mmc_cmd cmd;
595 int timeout = 1000;
596 int ret;
597
598 cmd.cmdidx = MMC_CMD_SWITCH;
599 cmd.resp_type = MMC_RSP_R1b;
600 cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
601 (index << 16) |
602 (value << 8);
603
604 ret = mmc_send_cmd(mmc, &cmd, NULL);
605
606 /* Waiting for the ready status */
607 if (!ret)
608 ret = mmc_send_status(mmc, timeout);
609
610 return ret;
611
612 }
613
614 static int mmc_change_freq(struct mmc *mmc)
615 {
616 ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, 512);
617 char cardtype;
618 int err;
619
620 mmc->card_caps = 0;
621
622 if (mmc_host_is_spi(mmc))
623 return 0;
624
625 /* Only version 4 supports high-speed */
626 if (mmc->version < MMC_VERSION_4)
627 return 0;
628
629 err = mmc_send_ext_csd(mmc, ext_csd);
630
631 if (err)
632 return err;
633
634 cardtype = ext_csd[EXT_CSD_CARD_TYPE] & 0xf;
635
636 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING, 1);
637
638 if (err)
639 return err;
640
641 /* Now check to see that it worked */
642 err = mmc_send_ext_csd(mmc, ext_csd);
643
644 if (err)
645 return err;
646
647 /* No high-speed support */
648 if (!ext_csd[EXT_CSD_HS_TIMING])
649 return 0;
650
651 /* High Speed is set, there are two types: 52MHz and 26MHz */
652 if (cardtype & MMC_HS_52MHZ)
653 mmc->card_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
654 else
655 mmc->card_caps |= MMC_MODE_HS;
656
657 return 0;
658 }
659
660 int mmc_switch_part(int dev_num, unsigned int part_num)
661 {
662 struct mmc *mmc = find_mmc_device(dev_num);
663
664 if (!mmc)
665 return -1;
666
667 return mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF,
668 (mmc->part_config & ~PART_ACCESS_MASK)
669 | (part_num & PART_ACCESS_MASK));
670 }
671
672 int mmc_getcd(struct mmc *mmc)
673 {
674 int cd;
675
676 cd = board_mmc_getcd(mmc);
677
678 if ((cd < 0) && mmc->getcd)
679 cd = mmc->getcd(mmc);
680
681 return cd;
682 }
683
684 static int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)
685 {
686 struct mmc_cmd cmd;
687 struct mmc_data data;
688
689 /* Switch the frequency */
690 cmd.cmdidx = SD_CMD_SWITCH_FUNC;
691 cmd.resp_type = MMC_RSP_R1;
692 cmd.cmdarg = (mode << 31) | 0xffffff;
693 cmd.cmdarg &= ~(0xf << (group * 4));
694 cmd.cmdarg |= value << (group * 4);
695
696 data.dest = (char *)resp;
697 data.blocksize = 64;
698 data.blocks = 1;
699 data.flags = MMC_DATA_READ;
700
701 return mmc_send_cmd(mmc, &cmd, &data);
702 }
703
704
705 static int sd_change_freq(struct mmc *mmc)
706 {
707 int err;
708 struct mmc_cmd cmd;
709 ALLOC_CACHE_ALIGN_BUFFER(uint, scr, 2);
710 ALLOC_CACHE_ALIGN_BUFFER(uint, switch_status, 16);
711 struct mmc_data data;
712 int timeout;
713
714 mmc->card_caps = 0;
715
716 if (mmc_host_is_spi(mmc))
717 return 0;
718
719 /* Read the SCR to find out if this card supports higher speeds */
720 cmd.cmdidx = MMC_CMD_APP_CMD;
721 cmd.resp_type = MMC_RSP_R1;
722 cmd.cmdarg = mmc->rca << 16;
723
724 err = mmc_send_cmd(mmc, &cmd, NULL);
725
726 if (err)
727 return err;
728
729 cmd.cmdidx = SD_CMD_APP_SEND_SCR;
730 cmd.resp_type = MMC_RSP_R1;
731 cmd.cmdarg = 0;
732
733 timeout = 3;
734
735 retry_scr:
736 data.dest = (char *)scr;
737 data.blocksize = 8;
738 data.blocks = 1;
739 data.flags = MMC_DATA_READ;
740
741 err = mmc_send_cmd(mmc, &cmd, &data);
742
743 if (err) {
744 if (timeout--)
745 goto retry_scr;
746
747 return err;
748 }
749
750 mmc->scr[0] = __be32_to_cpu(scr[0]);
751 mmc->scr[1] = __be32_to_cpu(scr[1]);
752
753 switch ((mmc->scr[0] >> 24) & 0xf) {
754 case 0:
755 mmc->version = SD_VERSION_1_0;
756 break;
757 case 1:
758 mmc->version = SD_VERSION_1_10;
759 break;
760 case 2:
761 mmc->version = SD_VERSION_2;
762 break;
763 default:
764 mmc->version = SD_VERSION_1_0;
765 break;
766 }
767
768 if (mmc->scr[0] & SD_DATA_4BIT)
769 mmc->card_caps |= MMC_MODE_4BIT;
770
771 /* Version 1.0 doesn't support switching */
772 if (mmc->version == SD_VERSION_1_0)
773 return 0;
774
775 timeout = 4;
776 while (timeout--) {
777 err = sd_switch(mmc, SD_SWITCH_CHECK, 0, 1,
778 (u8 *)switch_status);
779
780 if (err)
781 return err;
782
783 /* The high-speed function is busy. Try again */
784 if (!(__be32_to_cpu(switch_status[7]) & SD_HIGHSPEED_BUSY))
785 break;
786 }
787
788 /* If high-speed isn't supported, we return */
789 if (!(__be32_to_cpu(switch_status[3]) & SD_HIGHSPEED_SUPPORTED))
790 return 0;
791
792 /*
793 * If the host doesn't support SD_HIGHSPEED, do not switch card to
794 * HIGHSPEED mode even if the card support SD_HIGHSPPED.
795 * This can avoid furthur problem when the card runs in different
796 * mode between the host.
797 */
798 if (!((mmc->host_caps & MMC_MODE_HS_52MHz) &&
799 (mmc->host_caps & MMC_MODE_HS)))
800 return 0;
801
802 err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, 1, (u8 *)switch_status);
803
804 if (err)
805 return err;
806
807 if ((__be32_to_cpu(switch_status[4]) & 0x0f000000) == 0x01000000)
808 mmc->card_caps |= MMC_MODE_HS;
809
810 return 0;
811 }
812
813 /* frequency bases */
814 /* divided by 10 to be nice to platforms without floating point */
815 static const int fbase[] = {
816 10000,
817 100000,
818 1000000,
819 10000000,
820 };
821
822 /* Multiplier values for TRAN_SPEED. Multiplied by 10 to be nice
823 * to platforms without floating point.
824 */
825 static const int multipliers[] = {
826 0, /* reserved */
827 10,
828 12,
829 13,
830 15,
831 20,
832 25,
833 30,
834 35,
835 40,
836 45,
837 50,
838 55,
839 60,
840 70,
841 80,
842 };
843
844 static void mmc_set_ios(struct mmc *mmc)
845 {
846 mmc->set_ios(mmc);
847 }
848
849 void mmc_set_clock(struct mmc *mmc, uint clock)
850 {
851 if (clock > mmc->f_max)
852 clock = mmc->f_max;
853
854 if (clock < mmc->f_min)
855 clock = mmc->f_min;
856
857 mmc->clock = clock;
858
859 mmc_set_ios(mmc);
860 }
861
862 static void mmc_set_bus_width(struct mmc *mmc, uint width)
863 {
864 mmc->bus_width = width;
865
866 mmc_set_ios(mmc);
867 }
868
869 static int mmc_startup(struct mmc *mmc)
870 {
871 int err;
872 uint mult, freq;
873 u64 cmult, csize, capacity;
874 struct mmc_cmd cmd;
875 ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, 512);
876 ALLOC_CACHE_ALIGN_BUFFER(u8, test_csd, 512);
877 int timeout = 1000;
878
879 #ifdef CONFIG_MMC_SPI_CRC_ON
880 if (mmc_host_is_spi(mmc)) { /* enable CRC check for spi */
881 cmd.cmdidx = MMC_CMD_SPI_CRC_ON_OFF;
882 cmd.resp_type = MMC_RSP_R1;
883 cmd.cmdarg = 1;
884 err = mmc_send_cmd(mmc, &cmd, NULL);
885
886 if (err)
887 return err;
888 }
889 #endif
890
891 /* Put the Card in Identify Mode */
892 cmd.cmdidx = mmc_host_is_spi(mmc) ? MMC_CMD_SEND_CID :
893 MMC_CMD_ALL_SEND_CID; /* cmd not supported in spi */
894 cmd.resp_type = MMC_RSP_R2;
895 cmd.cmdarg = 0;
896
897 err = mmc_send_cmd(mmc, &cmd, NULL);
898
899 if (err)
900 return err;
901
902 memcpy(mmc->cid, cmd.response, 16);
903
904 /*
905 * For MMC cards, set the Relative Address.
906 * For SD cards, get the Relatvie Address.
907 * This also puts the cards into Standby State
908 */
909 if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
910 cmd.cmdidx = SD_CMD_SEND_RELATIVE_ADDR;
911 cmd.cmdarg = mmc->rca << 16;
912 cmd.resp_type = MMC_RSP_R6;
913
914 err = mmc_send_cmd(mmc, &cmd, NULL);
915
916 if (err)
917 return err;
918
919 if (IS_SD(mmc))
920 mmc->rca = (cmd.response[0] >> 16) & 0xffff;
921 }
922
923 /* Get the Card-Specific Data */
924 cmd.cmdidx = MMC_CMD_SEND_CSD;
925 cmd.resp_type = MMC_RSP_R2;
926 cmd.cmdarg = mmc->rca << 16;
927
928 err = mmc_send_cmd(mmc, &cmd, NULL);
929
930 /* Waiting for the ready status */
931 mmc_send_status(mmc, timeout);
932
933 if (err)
934 return err;
935
936 mmc->csd[0] = cmd.response[0];
937 mmc->csd[1] = cmd.response[1];
938 mmc->csd[2] = cmd.response[2];
939 mmc->csd[3] = cmd.response[3];
940
941 if (mmc->version == MMC_VERSION_UNKNOWN) {
942 int version = (cmd.response[0] >> 26) & 0xf;
943
944 switch (version) {
945 case 0:
946 mmc->version = MMC_VERSION_1_2;
947 break;
948 case 1:
949 mmc->version = MMC_VERSION_1_4;
950 break;
951 case 2:
952 mmc->version = MMC_VERSION_2_2;
953 break;
954 case 3:
955 mmc->version = MMC_VERSION_3;
956 break;
957 case 4:
958 mmc->version = MMC_VERSION_4;
959 break;
960 default:
961 mmc->version = MMC_VERSION_1_2;
962 break;
963 }
964 }
965
966 /* divide frequency by 10, since the mults are 10x bigger */
967 freq = fbase[(cmd.response[0] & 0x7)];
968 mult = multipliers[((cmd.response[0] >> 3) & 0xf)];
969
970 mmc->tran_speed = freq * mult;
971
972 mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf);
973
974 if (IS_SD(mmc))
975 mmc->write_bl_len = mmc->read_bl_len;
976 else
977 mmc->write_bl_len = 1 << ((cmd.response[3] >> 22) & 0xf);
978
979 if (mmc->high_capacity) {
980 csize = (mmc->csd[1] & 0x3f) << 16
981 | (mmc->csd[2] & 0xffff0000) >> 16;
982 cmult = 8;
983 } else {
984 csize = (mmc->csd[1] & 0x3ff) << 2
985 | (mmc->csd[2] & 0xc0000000) >> 30;
986 cmult = (mmc->csd[2] & 0x00038000) >> 15;
987 }
988
989 mmc->capacity = (csize + 1) << (cmult + 2);
990 mmc->capacity *= mmc->read_bl_len;
991
992 if (mmc->read_bl_len > 512)
993 mmc->read_bl_len = 512;
994
995 if (mmc->write_bl_len > 512)
996 mmc->write_bl_len = 512;
997
998 /* Select the card, and put it into Transfer Mode */
999 if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
1000 cmd.cmdidx = MMC_CMD_SELECT_CARD;
1001 cmd.resp_type = MMC_RSP_R1;
1002 cmd.cmdarg = mmc->rca << 16;
1003 err = mmc_send_cmd(mmc, &cmd, NULL);
1004
1005 if (err)
1006 return err;
1007 }
1008
1009 /*
1010 * For SD, its erase group is always one sector
1011 */
1012 mmc->erase_grp_size = 1;
1013 mmc->part_config = MMCPART_NOAVAILABLE;
1014 if (!IS_SD(mmc) && (mmc->version >= MMC_VERSION_4)) {
1015 /* check ext_csd version and capacity */
1016 err = mmc_send_ext_csd(mmc, ext_csd);
1017 if (!err && (ext_csd[EXT_CSD_REV] >= 2)) {
1018 /*
1019 * According to the JEDEC Standard, the value of
1020 * ext_csd's capacity is valid if the value is more
1021 * than 2GB
1022 */
1023 capacity = ext_csd[EXT_CSD_SEC_CNT] << 0
1024 | ext_csd[EXT_CSD_SEC_CNT + 1] << 8
1025 | ext_csd[EXT_CSD_SEC_CNT + 2] << 16
1026 | ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
1027 capacity *= 512;
1028 if ((capacity >> 20) > 2 * 1024)
1029 mmc->capacity = capacity;
1030 }
1031
1032 /*
1033 * Check whether GROUP_DEF is set, if yes, read out
1034 * group size from ext_csd directly, or calculate
1035 * the group size from the csd value.
1036 */
1037 if (ext_csd[EXT_CSD_ERASE_GROUP_DEF])
1038 mmc->erase_grp_size =
1039 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 512 * 1024;
1040 else {
1041 int erase_gsz, erase_gmul;
1042 erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10;
1043 erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5;
1044 mmc->erase_grp_size = (erase_gsz + 1)
1045 * (erase_gmul + 1);
1046 }
1047
1048 /* store the partition info of emmc */
1049 if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) ||
1050 ext_csd[EXT_CSD_BOOT_MULT])
1051 mmc->part_config = ext_csd[EXT_CSD_PART_CONF];
1052 }
1053
1054 if (IS_SD(mmc))
1055 err = sd_change_freq(mmc);
1056 else
1057 err = mmc_change_freq(mmc);
1058
1059 if (err)
1060 return err;
1061
1062 /* Restrict card's capabilities by what the host can do */
1063 mmc->card_caps &= mmc->host_caps;
1064
1065 if (IS_SD(mmc)) {
1066 if (mmc->card_caps & MMC_MODE_4BIT) {
1067 cmd.cmdidx = MMC_CMD_APP_CMD;
1068 cmd.resp_type = MMC_RSP_R1;
1069 cmd.cmdarg = mmc->rca << 16;
1070
1071 err = mmc_send_cmd(mmc, &cmd, NULL);
1072 if (err)
1073 return err;
1074
1075 cmd.cmdidx = SD_CMD_APP_SET_BUS_WIDTH;
1076 cmd.resp_type = MMC_RSP_R1;
1077 cmd.cmdarg = 2;
1078 err = mmc_send_cmd(mmc, &cmd, NULL);
1079 if (err)
1080 return err;
1081
1082 mmc_set_bus_width(mmc, 4);
1083 }
1084
1085 if (mmc->card_caps & MMC_MODE_HS)
1086 mmc->tran_speed = 50000000;
1087 else
1088 mmc->tran_speed = 25000000;
1089 } else {
1090 int idx;
1091
1092 /* An array of possible bus widths in order of preference */
1093 static unsigned ext_csd_bits[] = {
1094 EXT_CSD_BUS_WIDTH_8,
1095 EXT_CSD_BUS_WIDTH_4,
1096 EXT_CSD_BUS_WIDTH_1,
1097 };
1098
1099 /* An array to map CSD bus widths to host cap bits */
1100 static unsigned ext_to_hostcaps[] = {
1101 [EXT_CSD_BUS_WIDTH_4] = MMC_MODE_4BIT,
1102 [EXT_CSD_BUS_WIDTH_8] = MMC_MODE_8BIT,
1103 };
1104
1105 /* An array to map chosen bus width to an integer */
1106 static unsigned widths[] = {
1107 8, 4, 1,
1108 };
1109
1110 for (idx=0; idx < ARRAY_SIZE(ext_csd_bits); idx++) {
1111 unsigned int extw = ext_csd_bits[idx];
1112
1113 /*
1114 * Check to make sure the controller supports
1115 * this bus width, if it's more than 1
1116 */
1117 if (extw != EXT_CSD_BUS_WIDTH_1 &&
1118 !(mmc->host_caps & ext_to_hostcaps[extw]))
1119 continue;
1120
1121 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1122 EXT_CSD_BUS_WIDTH, extw);
1123
1124 if (err)
1125 continue;
1126
1127 mmc_set_bus_width(mmc, widths[idx]);
1128
1129 err = mmc_send_ext_csd(mmc, test_csd);
1130 if (!err && ext_csd[EXT_CSD_PARTITIONING_SUPPORT] \
1131 == test_csd[EXT_CSD_PARTITIONING_SUPPORT]
1132 && ext_csd[EXT_CSD_ERASE_GROUP_DEF] \
1133 == test_csd[EXT_CSD_ERASE_GROUP_DEF] \
1134 && ext_csd[EXT_CSD_REV] \
1135 == test_csd[EXT_CSD_REV]
1136 && ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] \
1137 == test_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
1138 && memcmp(&ext_csd[EXT_CSD_SEC_CNT], \
1139 &test_csd[EXT_CSD_SEC_CNT], 4) == 0) {
1140
1141 mmc->card_caps |= ext_to_hostcaps[extw];
1142 break;
1143 }
1144 }
1145
1146 if (mmc->card_caps & MMC_MODE_HS) {
1147 if (mmc->card_caps & MMC_MODE_HS_52MHz)
1148 mmc->tran_speed = 52000000;
1149 else
1150 mmc->tran_speed = 26000000;
1151 }
1152 }
1153
1154 mmc_set_clock(mmc, mmc->tran_speed);
1155
1156 /* fill in device description */
1157 mmc->block_dev.lun = 0;
1158 mmc->block_dev.type = 0;
1159 mmc->block_dev.blksz = mmc->read_bl_len;
1160 mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);
1161 sprintf(mmc->block_dev.vendor, "Man %06x Snr %04x%04x",
1162 mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff),
1163 (mmc->cid[3] >> 16) & 0xffff);
1164 sprintf(mmc->block_dev.product, "%c%c%c%c%c%c", mmc->cid[0] & 0xff,
1165 (mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
1166 (mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff,
1167 (mmc->cid[2] >> 24) & 0xff);
1168 sprintf(mmc->block_dev.revision, "%d.%d", (mmc->cid[2] >> 20) & 0xf,
1169 (mmc->cid[2] >> 16) & 0xf);
1170 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBDISK_SUPPORT)
1171 init_part(&mmc->block_dev);
1172 #endif
1173
1174 return 0;
1175 }
1176
1177 static int mmc_send_if_cond(struct mmc *mmc)
1178 {
1179 struct mmc_cmd cmd;
1180 int err;
1181
1182 cmd.cmdidx = SD_CMD_SEND_IF_COND;
1183 /* We set the bit if the host supports voltages between 2.7 and 3.6 V */
1184 cmd.cmdarg = ((mmc->voltages & 0xff8000) != 0) << 8 | 0xaa;
1185 cmd.resp_type = MMC_RSP_R7;
1186
1187 err = mmc_send_cmd(mmc, &cmd, NULL);
1188
1189 if (err)
1190 return err;
1191
1192 if ((cmd.response[0] & 0xff) != 0xaa)
1193 return UNUSABLE_ERR;
1194 else
1195 mmc->version = SD_VERSION_2;
1196
1197 return 0;
1198 }
1199
1200 int mmc_register(struct mmc *mmc)
1201 {
1202 /* Setup the universal parts of the block interface just once */
1203 mmc->block_dev.if_type = IF_TYPE_MMC;
1204 mmc->block_dev.dev = cur_dev_num++;
1205 mmc->block_dev.removable = 1;
1206 mmc->block_dev.block_read = mmc_bread;
1207 mmc->block_dev.block_write = mmc_bwrite;
1208 mmc->block_dev.block_erase = mmc_berase;
1209 if (!mmc->b_max)
1210 mmc->b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
1211
1212 INIT_LIST_HEAD (&mmc->link);
1213
1214 list_add_tail (&mmc->link, &mmc_devices);
1215
1216 return 0;
1217 }
1218
1219 #ifdef CONFIG_PARTITIONS
1220 block_dev_desc_t *mmc_get_dev(int dev)
1221 {
1222 struct mmc *mmc = find_mmc_device(dev);
1223 if (!mmc || mmc_init(mmc))
1224 return NULL;
1225
1226 return &mmc->block_dev;
1227 }
1228 #endif
1229
1230 int mmc_init(struct mmc *mmc)
1231 {
1232 int err;
1233
1234 if (mmc_getcd(mmc) == 0) {
1235 mmc->has_init = 0;
1236 printf("MMC: no card present\n");
1237 return NO_CARD_ERR;
1238 }
1239
1240 if (mmc->has_init)
1241 return 0;
1242
1243 err = mmc->init(mmc);
1244
1245 if (err)
1246 return err;
1247
1248 mmc_set_bus_width(mmc, 1);
1249 mmc_set_clock(mmc, 1);
1250
1251 /* Reset the Card */
1252 err = mmc_go_idle(mmc);
1253
1254 if (err)
1255 return err;
1256
1257 /* The internal partition reset to user partition(0) at every CMD0*/
1258 mmc->part_num = 0;
1259
1260 /* Test for SD version 2 */
1261 err = mmc_send_if_cond(mmc);
1262
1263 /* Now try to get the SD card's operating condition */
1264 err = sd_send_op_cond(mmc);
1265
1266 /* If the command timed out, we check for an MMC card */
1267 if (err == TIMEOUT) {
1268 err = mmc_send_op_cond(mmc);
1269
1270 if (err) {
1271 printf("Card did not respond to voltage select!\n");
1272 return UNUSABLE_ERR;
1273 }
1274 }
1275
1276 err = mmc_startup(mmc);
1277 if (err)
1278 mmc->has_init = 0;
1279 else
1280 mmc->has_init = 1;
1281 return err;
1282 }
1283
1284 /*
1285 * CPU and board-specific MMC initializations. Aliased function
1286 * signals caller to move on
1287 */
1288 static int __def_mmc_init(bd_t *bis)
1289 {
1290 return -1;
1291 }
1292
1293 int cpu_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
1294 int board_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
1295
1296 void print_mmc_devices(char separator)
1297 {
1298 struct mmc *m;
1299 struct list_head *entry;
1300
1301 list_for_each(entry, &mmc_devices) {
1302 m = list_entry(entry, struct mmc, link);
1303
1304 printf("%s: %d", m->name, m->block_dev.dev);
1305
1306 if (entry->next != &mmc_devices)
1307 printf("%c ", separator);
1308 }
1309
1310 printf("\n");
1311 }
1312
1313 int get_mmc_num(void)
1314 {
1315 return cur_dev_num;
1316 }
1317
1318 int mmc_initialize(bd_t *bis)
1319 {
1320 INIT_LIST_HEAD (&mmc_devices);
1321 cur_dev_num = 0;
1322
1323 if (board_mmc_init(bis) < 0)
1324 cpu_mmc_init(bis);
1325
1326 print_mmc_devices(',');
1327
1328 return 0;
1329 }