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