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