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