]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - drivers/mmc/mmc.c
Merge branch 'master' of git://git.denx.de/u-boot into resolve
[karo-tx-uboot.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 }