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