]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - drivers/mmc/mmc.c
Merge branch 'u-boot-atmel/master' into 'u-boot-arm/master'
[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  * SPDX-License-Identifier:     GPL-2.0+
8  */
9
10 #include <config.h>
11 #include <common.h>
12 #include <command.h>
13 #include <mmc.h>
14 #include <part.h>
15 #include <malloc.h>
16 #include <linux/list.h>
17 #include <div64.h>
18
19 /* Set block count limit because of 16 bit register limit on some hardware*/
20 #ifndef CONFIG_SYS_MMC_MAX_BLK_COUNT
21 #define CONFIG_SYS_MMC_MAX_BLK_COUNT 65535
22 #endif
23
24 static struct list_head mmc_devices;
25 static int cur_dev_num = -1;
26
27 int __weak board_mmc_getwp(struct mmc *mmc)
28 {
29         return -1;
30 }
31
32 int mmc_getwp(struct mmc *mmc)
33 {
34         int wp;
35
36         wp = board_mmc_getwp(mmc);
37
38         if (wp < 0) {
39                 if (mmc->getwp)
40                         wp = mmc->getwp(mmc);
41                 else
42                         wp = 0;
43         }
44
45         return wp;
46 }
47
48 int __board_mmc_getcd(struct mmc *mmc) {
49         return -1;
50 }
51
52 int board_mmc_getcd(struct mmc *mmc)__attribute__((weak,
53         alias("__board_mmc_getcd")));
54
55 static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
56                         struct mmc_data *data)
57 {
58         struct mmc_data backup;
59         int ret;
60
61         memset(&backup, 0, sizeof(backup));
62
63 #ifdef CONFIG_MMC_TRACE
64         int i;
65         u8 *ptr;
66
67         printf("CMD_SEND:%d\n", cmd->cmdidx);
68         printf("\t\tARG\t\t\t 0x%08X\n", cmd->cmdarg);
69         ret = mmc->send_cmd(mmc, cmd, data);
70         switch (cmd->resp_type) {
71                 case MMC_RSP_NONE:
72                         printf("\t\tMMC_RSP_NONE\n");
73                         break;
74                 case MMC_RSP_R1:
75                         printf("\t\tMMC_RSP_R1,5,6,7 \t 0x%08X \n",
76                                 cmd->response[0]);
77                         break;
78                 case MMC_RSP_R1b:
79                         printf("\t\tMMC_RSP_R1b\t\t 0x%08X \n",
80                                 cmd->response[0]);
81                         break;
82                 case MMC_RSP_R2:
83                         printf("\t\tMMC_RSP_R2\t\t 0x%08X \n",
84                                 cmd->response[0]);
85                         printf("\t\t          \t\t 0x%08X \n",
86                                 cmd->response[1]);
87                         printf("\t\t          \t\t 0x%08X \n",
88                                 cmd->response[2]);
89                         printf("\t\t          \t\t 0x%08X \n",
90                                 cmd->response[3]);
91                         printf("\n");
92                         printf("\t\t\t\t\tDUMPING DATA\n");
93                         for (i = 0; i < 4; i++) {
94                                 int j;
95                                 printf("\t\t\t\t\t%03d - ", i*4);
96                                 ptr = (u8 *)&cmd->response[i];
97                                 ptr += 3;
98                                 for (j = 0; j < 4; j++)
99                                         printf("%02X ", *ptr--);
100                                 printf("\n");
101                         }
102                         break;
103                 case MMC_RSP_R3:
104                         printf("\t\tMMC_RSP_R3,4\t\t 0x%08X \n",
105                                 cmd->response[0]);
106                         break;
107                 default:
108                         printf("\t\tERROR MMC rsp not supported\n");
109                         break;
110         }
111 #else
112         ret = mmc->send_cmd(mmc, cmd, data);
113 #endif
114         return ret;
115 }
116
117 static int mmc_send_status(struct mmc *mmc, int timeout)
118 {
119         struct mmc_cmd cmd;
120         int err, retries = 5;
121 #ifdef CONFIG_MMC_TRACE
122         int status;
123 #endif
124
125         cmd.cmdidx = MMC_CMD_SEND_STATUS;
126         cmd.resp_type = MMC_RSP_R1;
127         if (!mmc_host_is_spi(mmc))
128                 cmd.cmdarg = mmc->rca << 16;
129
130         do {
131                 err = mmc_send_cmd(mmc, &cmd, NULL);
132                 if (!err) {
133                         if ((cmd.response[0] & MMC_STATUS_RDY_FOR_DATA) &&
134                             (cmd.response[0] & MMC_STATUS_CURR_STATE) !=
135                              MMC_STATE_PRG)
136                                 break;
137                         else if (cmd.response[0] & MMC_STATUS_MASK) {
138                                 printf("Status Error: 0x%08X\n",
139                                         cmd.response[0]);
140                                 return COMM_ERR;
141                         }
142                 } else if (--retries < 0)
143                         return err;
144
145                 udelay(1000);
146
147         } while (timeout--);
148
149 #ifdef CONFIG_MMC_TRACE
150         status = (cmd.response[0] & MMC_STATUS_CURR_STATE) >> 9;
151         printf("CURR STATE:%d\n", status);
152 #endif
153         if (timeout <= 0) {
154                 printf("Timeout waiting card ready\n");
155                 return TIMEOUT;
156         }
157
158         return 0;
159 }
160
161 static int mmc_set_blocklen(struct mmc *mmc, int len)
162 {
163         struct mmc_cmd cmd;
164
165         cmd.cmdidx = MMC_CMD_SET_BLOCKLEN;
166         cmd.resp_type = MMC_RSP_R1;
167         cmd.cmdarg = len;
168
169         return mmc_send_cmd(mmc, &cmd, NULL);
170 }
171
172 struct mmc *find_mmc_device(int dev_num)
173 {
174         struct mmc *m;
175         struct list_head *entry;
176
177         list_for_each(entry, &mmc_devices) {
178                 m = list_entry(entry, struct mmc, link);
179
180                 if (m->block_dev.dev == dev_num)
181                         return m;
182         }
183
184         printf("MMC Device %d not found\n", dev_num);
185
186         return NULL;
187 }
188
189 static ulong mmc_erase_t(struct mmc *mmc, ulong start, lbaint_t blkcnt)
190 {
191         struct mmc_cmd cmd;
192         ulong end;
193         int err, start_cmd, end_cmd;
194
195         if (mmc->high_capacity)
196                 end = start + blkcnt - 1;
197         else {
198                 end = (start + blkcnt - 1) * mmc->write_bl_len;
199                 start *= mmc->write_bl_len;
200         }
201
202         if (IS_SD(mmc)) {
203                 start_cmd = SD_CMD_ERASE_WR_BLK_START;
204                 end_cmd = SD_CMD_ERASE_WR_BLK_END;
205         } else {
206                 start_cmd = MMC_CMD_ERASE_GROUP_START;
207                 end_cmd = MMC_CMD_ERASE_GROUP_END;
208         }
209
210         cmd.cmdidx = start_cmd;
211         cmd.cmdarg = start;
212         cmd.resp_type = MMC_RSP_R1;
213
214         err = mmc_send_cmd(mmc, &cmd, NULL);
215         if (err)
216                 goto err_out;
217
218         cmd.cmdidx = end_cmd;
219         cmd.cmdarg = end;
220
221         err = mmc_send_cmd(mmc, &cmd, NULL);
222         if (err)
223                 goto err_out;
224
225         cmd.cmdidx = MMC_CMD_ERASE;
226         cmd.cmdarg = SECURE_ERASE;
227         cmd.resp_type = MMC_RSP_R1b;
228
229         err = mmc_send_cmd(mmc, &cmd, NULL);
230         if (err)
231                 goto err_out;
232
233         return 0;
234
235 err_out:
236         puts("mmc erase failed\n");
237         return err;
238 }
239
240 static unsigned long
241 mmc_berase(int dev_num, lbaint_t start, lbaint_t blkcnt)
242 {
243         int err = 0;
244         struct mmc *mmc = find_mmc_device(dev_num);
245         lbaint_t blk = 0, blk_r = 0;
246         int timeout = 1000;
247
248         if (!mmc)
249                 return -1;
250
251         if ((start % mmc->erase_grp_size) || (blkcnt % mmc->erase_grp_size))
252                 printf("\n\nCaution! Your devices Erase group is 0x%x\n"
253                        "The erase range would be change to "
254                        "0x" LBAF "~0x" LBAF "\n\n",
255                        mmc->erase_grp_size, start & ~(mmc->erase_grp_size - 1),
256                        ((start + blkcnt + mmc->erase_grp_size)
257                        & ~(mmc->erase_grp_size - 1)) - 1);
258
259         while (blk < blkcnt) {
260                 blk_r = ((blkcnt - blk) > mmc->erase_grp_size) ?
261                         mmc->erase_grp_size : (blkcnt - blk);
262                 err = mmc_erase_t(mmc, start + blk, blk_r);
263                 if (err)
264                         break;
265
266                 blk += blk_r;
267
268                 /* Waiting for the ready status */
269                 if (mmc_send_status(mmc, timeout))
270                         return 0;
271         }
272
273         return blk;
274 }
275
276 static ulong
277 mmc_write_blocks(struct mmc *mmc, lbaint_t start, lbaint_t blkcnt, const void*src)
278 {
279         struct mmc_cmd cmd;
280         struct mmc_data data;
281         int timeout = 1000;
282
283         if ((start + blkcnt) > mmc->block_dev.lba) {
284                 printf("MMC: block number 0x" LBAF " exceeds max(0x" LBAF ")\n",
285                         start + blkcnt, mmc->block_dev.lba);
286                 return 0;
287         }
288
289         if (blkcnt == 0)
290                 return 0;
291         else if (blkcnt == 1)
292                 cmd.cmdidx = MMC_CMD_WRITE_SINGLE_BLOCK;
293         else
294                 cmd.cmdidx = MMC_CMD_WRITE_MULTIPLE_BLOCK;
295
296         if (mmc->high_capacity)
297                 cmd.cmdarg = start;
298         else
299                 cmd.cmdarg = start * mmc->write_bl_len;
300
301         cmd.resp_type = MMC_RSP_R1;
302
303         data.src = src;
304         data.blocks = blkcnt;
305         data.blocksize = mmc->write_bl_len;
306         data.flags = MMC_DATA_WRITE;
307
308         if (mmc_send_cmd(mmc, &cmd, &data)) {
309                 printf("mmc write failed\n");
310                 return 0;
311         }
312
313         /* SPI multiblock writes terminate using a special
314          * token, not a STOP_TRANSMISSION request.
315          */
316         if (!mmc_host_is_spi(mmc) && blkcnt > 1) {
317                 cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
318                 cmd.cmdarg = 0;
319                 cmd.resp_type = MMC_RSP_R1b;
320                 if (mmc_send_cmd(mmc, &cmd, NULL)) {
321                         printf("mmc fail to send stop cmd\n");
322                         return 0;
323                 }
324         }
325
326         /* Waiting for the ready status */
327         if (mmc_send_status(mmc, timeout))
328                 return 0;
329
330         return blkcnt;
331 }
332
333 static ulong
334 mmc_bwrite(int dev_num, lbaint_t start, lbaint_t blkcnt, const void*src)
335 {
336         lbaint_t cur, blocks_todo = blkcnt;
337
338         struct mmc *mmc = find_mmc_device(dev_num);
339         if (!mmc)
340                 return 0;
341
342         if (mmc_set_blocklen(mmc, mmc->write_bl_len))
343                 return 0;
344
345         do {
346                 cur = (blocks_todo > mmc->b_max) ?  mmc->b_max : blocks_todo;
347                 if(mmc_write_blocks(mmc, start, cur, src) != cur)
348                         return 0;
349                 blocks_todo -= cur;
350                 start += cur;
351                 src += cur * mmc->write_bl_len;
352         } while (blocks_todo > 0);
353
354         return blkcnt;
355 }
356
357 static int mmc_read_blocks(struct mmc *mmc, void *dst, lbaint_t start,
358                            lbaint_t blkcnt)
359 {
360         struct mmc_cmd cmd;
361         struct mmc_data data;
362
363         if (blkcnt > 1)
364                 cmd.cmdidx = MMC_CMD_READ_MULTIPLE_BLOCK;
365         else
366                 cmd.cmdidx = MMC_CMD_READ_SINGLE_BLOCK;
367
368         if (mmc->high_capacity)
369                 cmd.cmdarg = start;
370         else
371                 cmd.cmdarg = start * mmc->read_bl_len;
372
373         cmd.resp_type = MMC_RSP_R1;
374
375         data.dest = dst;
376         data.blocks = blkcnt;
377         data.blocksize = mmc->read_bl_len;
378         data.flags = MMC_DATA_READ;
379
380         if (mmc_send_cmd(mmc, &cmd, &data))
381                 return 0;
382
383         if (blkcnt > 1) {
384                 cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
385                 cmd.cmdarg = 0;
386                 cmd.resp_type = MMC_RSP_R1b;
387                 if (mmc_send_cmd(mmc, &cmd, NULL)) {
388                         printf("mmc fail to send stop cmd\n");
389                         return 0;
390                 }
391         }
392
393         return blkcnt;
394 }
395
396 static ulong mmc_bread(int dev_num, lbaint_t start, lbaint_t blkcnt, void *dst)
397 {
398         lbaint_t cur, blocks_todo = blkcnt;
399
400         if (blkcnt == 0)
401                 return 0;
402
403         struct mmc *mmc = find_mmc_device(dev_num);
404         if (!mmc)
405                 return 0;
406
407         if ((start + blkcnt) > mmc->block_dev.lba) {
408                 printf("MMC: block number 0x" LBAF " exceeds max(0x" LBAF ")\n",
409                         start + blkcnt, mmc->block_dev.lba);
410                 return 0;
411         }
412
413         if (mmc_set_blocklen(mmc, mmc->read_bl_len))
414                 return 0;
415
416         do {
417                 cur = (blocks_todo > mmc->b_max) ?  mmc->b_max : blocks_todo;
418                 if(mmc_read_blocks(mmc, dst, start, cur) != cur)
419                         return 0;
420                 blocks_todo -= cur;
421                 start += cur;
422                 dst += cur * mmc->read_bl_len;
423         } while (blocks_todo > 0);
424
425         return blkcnt;
426 }
427
428 static int mmc_go_idle(struct mmc *mmc)
429 {
430         struct mmc_cmd cmd;
431         int err;
432
433         udelay(1000);
434
435         cmd.cmdidx = MMC_CMD_GO_IDLE_STATE;
436         cmd.cmdarg = 0;
437         cmd.resp_type = MMC_RSP_NONE;
438
439         err = mmc_send_cmd(mmc, &cmd, NULL);
440
441         if (err)
442                 return err;
443
444         udelay(2000);
445
446         return 0;
447 }
448
449 static int sd_send_op_cond(struct mmc *mmc)
450 {
451         int timeout = 1000;
452         int err;
453         struct mmc_cmd cmd;
454
455         do {
456                 cmd.cmdidx = MMC_CMD_APP_CMD;
457                 cmd.resp_type = MMC_RSP_R1;
458                 cmd.cmdarg = 0;
459
460                 err = mmc_send_cmd(mmc, &cmd, NULL);
461
462                 if (err)
463                         return err;
464
465                 cmd.cmdidx = SD_CMD_APP_SEND_OP_COND;
466                 cmd.resp_type = MMC_RSP_R3;
467
468                 /*
469                  * Most cards do not answer if some reserved bits
470                  * in the ocr are set. However, Some controller
471                  * can set bit 7 (reserved for low voltages), but
472                  * how to manage low voltages SD card is not yet
473                  * specified.
474                  */
475                 cmd.cmdarg = mmc_host_is_spi(mmc) ? 0 :
476                         (mmc->voltages & 0xff8000);
477
478                 if (mmc->version == SD_VERSION_2)
479                         cmd.cmdarg |= OCR_HCS;
480
481                 err = mmc_send_cmd(mmc, &cmd, NULL);
482
483                 if (err)
484                         return err;
485
486                 udelay(1000);
487         } while ((!(cmd.response[0] & OCR_BUSY)) && timeout--);
488
489         if (timeout <= 0)
490                 return UNUSABLE_ERR;
491
492         if (mmc->version != SD_VERSION_2)
493                 mmc->version = SD_VERSION_1_0;
494
495         if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
496                 cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
497                 cmd.resp_type = MMC_RSP_R3;
498                 cmd.cmdarg = 0;
499
500                 err = mmc_send_cmd(mmc, &cmd, NULL);
501
502                 if (err)
503                         return err;
504         }
505
506         mmc->ocr = cmd.response[0];
507
508         mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
509         mmc->rca = 0;
510
511         return 0;
512 }
513
514 /* We pass in the cmd since otherwise the init seems to fail */
515 static int mmc_send_op_cond_iter(struct mmc *mmc, struct mmc_cmd *cmd,
516                 int use_arg)
517 {
518         int err;
519
520         cmd->cmdidx = MMC_CMD_SEND_OP_COND;
521         cmd->resp_type = MMC_RSP_R3;
522         cmd->cmdarg = 0;
523         if (use_arg && !mmc_host_is_spi(mmc)) {
524                 cmd->cmdarg =
525                         (mmc->voltages &
526                         (mmc->op_cond_response & OCR_VOLTAGE_MASK)) |
527                         (mmc->op_cond_response & OCR_ACCESS_MODE);
528
529                 if (mmc->host_caps & MMC_MODE_HC)
530                         cmd->cmdarg |= OCR_HCS;
531         }
532         err = mmc_send_cmd(mmc, cmd, NULL);
533         if (err)
534                 return err;
535         mmc->op_cond_response = cmd->response[0];
536         return 0;
537 }
538
539 int mmc_send_op_cond(struct mmc *mmc)
540 {
541         struct mmc_cmd cmd;
542         int err, i;
543
544         /* Some cards seem to need this */
545         mmc_go_idle(mmc);
546
547         /* Asking to the card its capabilities */
548         mmc->op_cond_pending = 1;
549         for (i = 0; i < 2; i++) {
550                 err = mmc_send_op_cond_iter(mmc, &cmd, i != 0);
551                 if (err)
552                         return err;
553
554                 /* exit if not busy (flag seems to be inverted) */
555                 if (mmc->op_cond_response & OCR_BUSY)
556                         return 0;
557         }
558         return IN_PROGRESS;
559 }
560
561 int mmc_complete_op_cond(struct mmc *mmc)
562 {
563         struct mmc_cmd cmd;
564         int timeout = 1000;
565         uint start;
566         int err;
567
568         mmc->op_cond_pending = 0;
569         start = get_timer(0);
570         do {
571                 err = mmc_send_op_cond_iter(mmc, &cmd, 1);
572                 if (err)
573                         return err;
574                 if (get_timer(start) > timeout)
575                         return UNUSABLE_ERR;
576                 udelay(100);
577         } while (!(mmc->op_cond_response & OCR_BUSY));
578
579         if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
580                 cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
581                 cmd.resp_type = MMC_RSP_R3;
582                 cmd.cmdarg = 0;
583
584                 err = mmc_send_cmd(mmc, &cmd, NULL);
585
586                 if (err)
587                         return err;
588         }
589
590         mmc->version = MMC_VERSION_UNKNOWN;
591         mmc->ocr = cmd.response[0];
592
593         mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
594         mmc->rca = 0;
595
596         return 0;
597 }
598
599
600 static int mmc_send_ext_csd(struct mmc *mmc, u8 *ext_csd)
601 {
602         struct mmc_cmd cmd;
603         struct mmc_data data;
604         int err;
605
606         /* Get the Card Status Register */
607         cmd.cmdidx = MMC_CMD_SEND_EXT_CSD;
608         cmd.resp_type = MMC_RSP_R1;
609         cmd.cmdarg = 0;
610
611         data.dest = (char *)ext_csd;
612         data.blocks = 1;
613         data.blocksize = MMC_MAX_BLOCK_LEN;
614         data.flags = MMC_DATA_READ;
615
616         err = mmc_send_cmd(mmc, &cmd, &data);
617
618         return err;
619 }
620
621
622 static int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)
623 {
624         struct mmc_cmd cmd;
625         int timeout = 1000;
626         int ret;
627
628         cmd.cmdidx = MMC_CMD_SWITCH;
629         cmd.resp_type = MMC_RSP_R1b;
630         cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
631                                  (index << 16) |
632                                  (value << 8);
633
634         ret = mmc_send_cmd(mmc, &cmd, NULL);
635
636         /* Waiting for the ready status */
637         if (!ret)
638                 ret = mmc_send_status(mmc, timeout);
639
640         return ret;
641
642 }
643
644 static int mmc_change_freq(struct mmc *mmc)
645 {
646         ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
647         char cardtype;
648         int err;
649
650         mmc->card_caps = 0;
651
652         if (mmc_host_is_spi(mmc))
653                 return 0;
654
655         /* Only version 4 supports high-speed */
656         if (mmc->version < MMC_VERSION_4)
657                 return 0;
658
659         err = mmc_send_ext_csd(mmc, ext_csd);
660
661         if (err)
662                 return err;
663
664         cardtype = ext_csd[EXT_CSD_CARD_TYPE] & 0xf;
665
666         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING, 1);
667
668         if (err)
669                 return err;
670
671         /* Now check to see that it worked */
672         err = mmc_send_ext_csd(mmc, ext_csd);
673
674         if (err)
675                 return err;
676
677         /* No high-speed support */
678         if (!ext_csd[EXT_CSD_HS_TIMING])
679                 return 0;
680
681         /* High Speed is set, there are two types: 52MHz and 26MHz */
682         if (cardtype & MMC_HS_52MHZ)
683                 mmc->card_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
684         else
685                 mmc->card_caps |= MMC_MODE_HS;
686
687         return 0;
688 }
689
690 static int mmc_set_capacity(struct mmc *mmc, int part_num)
691 {
692         switch (part_num) {
693         case 0:
694                 mmc->capacity = mmc->capacity_user;
695                 break;
696         case 1:
697         case 2:
698                 mmc->capacity = mmc->capacity_boot;
699                 break;
700         case 3:
701                 mmc->capacity = mmc->capacity_rpmb;
702                 break;
703         case 4:
704         case 5:
705         case 6:
706         case 7:
707                 mmc->capacity = mmc->capacity_gp[part_num - 4];
708                 break;
709         default:
710                 return -1;
711         }
712
713         mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);
714
715         return 0;
716 }
717
718 int mmc_switch_part(int dev_num, unsigned int part_num)
719 {
720         struct mmc *mmc = find_mmc_device(dev_num);
721         int ret;
722
723         if (!mmc)
724                 return -1;
725
726         ret = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF,
727                          (mmc->part_config & ~PART_ACCESS_MASK)
728                          | (part_num & PART_ACCESS_MASK));
729         if (ret)
730                 return ret;
731
732         return mmc_set_capacity(mmc, part_num);
733 }
734
735 int mmc_getcd(struct mmc *mmc)
736 {
737         int cd;
738
739         cd = board_mmc_getcd(mmc);
740
741         if (cd < 0) {
742                 if (mmc->getcd)
743                         cd = mmc->getcd(mmc);
744                 else
745                         cd = 1;
746         }
747
748         return cd;
749 }
750
751 static int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)
752 {
753         struct mmc_cmd cmd;
754         struct mmc_data data;
755
756         /* Switch the frequency */
757         cmd.cmdidx = SD_CMD_SWITCH_FUNC;
758         cmd.resp_type = MMC_RSP_R1;
759         cmd.cmdarg = (mode << 31) | 0xffffff;
760         cmd.cmdarg &= ~(0xf << (group * 4));
761         cmd.cmdarg |= value << (group * 4);
762
763         data.dest = (char *)resp;
764         data.blocksize = 64;
765         data.blocks = 1;
766         data.flags = MMC_DATA_READ;
767
768         return mmc_send_cmd(mmc, &cmd, &data);
769 }
770
771
772 static int sd_change_freq(struct mmc *mmc)
773 {
774         int err;
775         struct mmc_cmd cmd;
776         ALLOC_CACHE_ALIGN_BUFFER(uint, scr, 2);
777         ALLOC_CACHE_ALIGN_BUFFER(uint, switch_status, 16);
778         struct mmc_data data;
779         int timeout;
780
781         mmc->card_caps = 0;
782
783         if (mmc_host_is_spi(mmc))
784                 return 0;
785
786         /* Read the SCR to find out if this card supports higher speeds */
787         cmd.cmdidx = MMC_CMD_APP_CMD;
788         cmd.resp_type = MMC_RSP_R1;
789         cmd.cmdarg = mmc->rca << 16;
790
791         err = mmc_send_cmd(mmc, &cmd, NULL);
792
793         if (err)
794                 return err;
795
796         cmd.cmdidx = SD_CMD_APP_SEND_SCR;
797         cmd.resp_type = MMC_RSP_R1;
798         cmd.cmdarg = 0;
799
800         timeout = 3;
801
802 retry_scr:
803         data.dest = (char *)scr;
804         data.blocksize = 8;
805         data.blocks = 1;
806         data.flags = MMC_DATA_READ;
807
808         err = mmc_send_cmd(mmc, &cmd, &data);
809
810         if (err) {
811                 if (timeout--)
812                         goto retry_scr;
813
814                 return err;
815         }
816
817         mmc->scr[0] = __be32_to_cpu(scr[0]);
818         mmc->scr[1] = __be32_to_cpu(scr[1]);
819
820         switch ((mmc->scr[0] >> 24) & 0xf) {
821                 case 0:
822                         mmc->version = SD_VERSION_1_0;
823                         break;
824                 case 1:
825                         mmc->version = SD_VERSION_1_10;
826                         break;
827                 case 2:
828                         mmc->version = SD_VERSION_2;
829                         if ((mmc->scr[0] >> 15) & 0x1)
830                                 mmc->version = SD_VERSION_3;
831                         break;
832                 default:
833                         mmc->version = SD_VERSION_1_0;
834                         break;
835         }
836
837         if (mmc->scr[0] & SD_DATA_4BIT)
838                 mmc->card_caps |= MMC_MODE_4BIT;
839
840         /* Version 1.0 doesn't support switching */
841         if (mmc->version == SD_VERSION_1_0)
842                 return 0;
843
844         timeout = 4;
845         while (timeout--) {
846                 err = sd_switch(mmc, SD_SWITCH_CHECK, 0, 1,
847                                 (u8 *)switch_status);
848
849                 if (err)
850                         return err;
851
852                 /* The high-speed function is busy.  Try again */
853                 if (!(__be32_to_cpu(switch_status[7]) & SD_HIGHSPEED_BUSY))
854                         break;
855         }
856
857         /* If high-speed isn't supported, we return */
858         if (!(__be32_to_cpu(switch_status[3]) & SD_HIGHSPEED_SUPPORTED))
859                 return 0;
860
861         /*
862          * If the host doesn't support SD_HIGHSPEED, do not switch card to
863          * HIGHSPEED mode even if the card support SD_HIGHSPPED.
864          * This can avoid furthur problem when the card runs in different
865          * mode between the host.
866          */
867         if (!((mmc->host_caps & MMC_MODE_HS_52MHz) &&
868                 (mmc->host_caps & MMC_MODE_HS)))
869                 return 0;
870
871         err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, 1, (u8 *)switch_status);
872
873         if (err)
874                 return err;
875
876         if ((__be32_to_cpu(switch_status[4]) & 0x0f000000) == 0x01000000)
877                 mmc->card_caps |= MMC_MODE_HS;
878
879         return 0;
880 }
881
882 /* frequency bases */
883 /* divided by 10 to be nice to platforms without floating point */
884 static const int fbase[] = {
885         10000,
886         100000,
887         1000000,
888         10000000,
889 };
890
891 /* Multiplier values for TRAN_SPEED.  Multiplied by 10 to be nice
892  * to platforms without floating point.
893  */
894 static const int multipliers[] = {
895         0,      /* reserved */
896         10,
897         12,
898         13,
899         15,
900         20,
901         25,
902         30,
903         35,
904         40,
905         45,
906         50,
907         55,
908         60,
909         70,
910         80,
911 };
912
913 static void mmc_set_ios(struct mmc *mmc)
914 {
915         mmc->set_ios(mmc);
916 }
917
918 void mmc_set_clock(struct mmc *mmc, uint clock)
919 {
920         if (clock > mmc->f_max)
921                 clock = mmc->f_max;
922
923         if (clock < mmc->f_min)
924                 clock = mmc->f_min;
925
926         mmc->clock = clock;
927
928         mmc_set_ios(mmc);
929 }
930
931 static void mmc_set_bus_width(struct mmc *mmc, uint width)
932 {
933         mmc->bus_width = width;
934
935         mmc_set_ios(mmc);
936 }
937
938 static int mmc_startup(struct mmc *mmc)
939 {
940         int err, i;
941         uint mult, freq;
942         u64 cmult, csize, capacity;
943         struct mmc_cmd cmd;
944         ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
945         ALLOC_CACHE_ALIGN_BUFFER(u8, test_csd, MMC_MAX_BLOCK_LEN);
946         int timeout = 1000;
947
948 #ifdef CONFIG_MMC_SPI_CRC_ON
949         if (mmc_host_is_spi(mmc)) { /* enable CRC check for spi */
950                 cmd.cmdidx = MMC_CMD_SPI_CRC_ON_OFF;
951                 cmd.resp_type = MMC_RSP_R1;
952                 cmd.cmdarg = 1;
953                 err = mmc_send_cmd(mmc, &cmd, NULL);
954
955                 if (err)
956                         return err;
957         }
958 #endif
959
960         /* Put the Card in Identify Mode */
961         cmd.cmdidx = mmc_host_is_spi(mmc) ? MMC_CMD_SEND_CID :
962                 MMC_CMD_ALL_SEND_CID; /* cmd not supported in spi */
963         cmd.resp_type = MMC_RSP_R2;
964         cmd.cmdarg = 0;
965
966         err = mmc_send_cmd(mmc, &cmd, NULL);
967
968         if (err)
969                 return err;
970
971         memcpy(mmc->cid, cmd.response, 16);
972
973         /*
974          * For MMC cards, set the Relative Address.
975          * For SD cards, get the Relatvie Address.
976          * This also puts the cards into Standby State
977          */
978         if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
979                 cmd.cmdidx = SD_CMD_SEND_RELATIVE_ADDR;
980                 cmd.cmdarg = mmc->rca << 16;
981                 cmd.resp_type = MMC_RSP_R6;
982
983                 err = mmc_send_cmd(mmc, &cmd, NULL);
984
985                 if (err)
986                         return err;
987
988                 if (IS_SD(mmc))
989                         mmc->rca = (cmd.response[0] >> 16) & 0xffff;
990         }
991
992         /* Get the Card-Specific Data */
993         cmd.cmdidx = MMC_CMD_SEND_CSD;
994         cmd.resp_type = MMC_RSP_R2;
995         cmd.cmdarg = mmc->rca << 16;
996
997         err = mmc_send_cmd(mmc, &cmd, NULL);
998
999         /* Waiting for the ready status */
1000         mmc_send_status(mmc, timeout);
1001
1002         if (err)
1003                 return err;
1004
1005         mmc->csd[0] = cmd.response[0];
1006         mmc->csd[1] = cmd.response[1];
1007         mmc->csd[2] = cmd.response[2];
1008         mmc->csd[3] = cmd.response[3];
1009
1010         if (mmc->version == MMC_VERSION_UNKNOWN) {
1011                 int version = (cmd.response[0] >> 26) & 0xf;
1012
1013                 switch (version) {
1014                         case 0:
1015                                 mmc->version = MMC_VERSION_1_2;
1016                                 break;
1017                         case 1:
1018                                 mmc->version = MMC_VERSION_1_4;
1019                                 break;
1020                         case 2:
1021                                 mmc->version = MMC_VERSION_2_2;
1022                                 break;
1023                         case 3:
1024                                 mmc->version = MMC_VERSION_3;
1025                                 break;
1026                         case 4:
1027                                 mmc->version = MMC_VERSION_4;
1028                                 break;
1029                         default:
1030                                 mmc->version = MMC_VERSION_1_2;
1031                                 break;
1032                 }
1033         }
1034
1035         /* divide frequency by 10, since the mults are 10x bigger */
1036         freq = fbase[(cmd.response[0] & 0x7)];
1037         mult = multipliers[((cmd.response[0] >> 3) & 0xf)];
1038
1039         mmc->tran_speed = freq * mult;
1040
1041         mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf);
1042
1043         if (IS_SD(mmc))
1044                 mmc->write_bl_len = mmc->read_bl_len;
1045         else
1046                 mmc->write_bl_len = 1 << ((cmd.response[3] >> 22) & 0xf);
1047
1048         if (mmc->high_capacity) {
1049                 csize = (mmc->csd[1] & 0x3f) << 16
1050                         | (mmc->csd[2] & 0xffff0000) >> 16;
1051                 cmult = 8;
1052         } else {
1053                 csize = (mmc->csd[1] & 0x3ff) << 2
1054                         | (mmc->csd[2] & 0xc0000000) >> 30;
1055                 cmult = (mmc->csd[2] & 0x00038000) >> 15;
1056         }
1057
1058         mmc->capacity_user = (csize + 1) << (cmult + 2);
1059         mmc->capacity_user *= mmc->read_bl_len;
1060         mmc->capacity_boot = 0;
1061         mmc->capacity_rpmb = 0;
1062         for (i = 0; i < 4; i++)
1063                 mmc->capacity_gp[i] = 0;
1064
1065         if (mmc->read_bl_len > MMC_MAX_BLOCK_LEN)
1066                 mmc->read_bl_len = MMC_MAX_BLOCK_LEN;
1067
1068         if (mmc->write_bl_len > MMC_MAX_BLOCK_LEN)
1069                 mmc->write_bl_len = MMC_MAX_BLOCK_LEN;
1070
1071         /* Select the card, and put it into Transfer Mode */
1072         if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
1073                 cmd.cmdidx = MMC_CMD_SELECT_CARD;
1074                 cmd.resp_type = MMC_RSP_R1;
1075                 cmd.cmdarg = mmc->rca << 16;
1076                 err = mmc_send_cmd(mmc, &cmd, NULL);
1077
1078                 if (err)
1079                         return err;
1080         }
1081
1082         /*
1083          * For SD, its erase group is always one sector
1084          */
1085         mmc->erase_grp_size = 1;
1086         mmc->part_config = MMCPART_NOAVAILABLE;
1087         if (!IS_SD(mmc) && (mmc->version >= MMC_VERSION_4)) {
1088                 /* check  ext_csd version and capacity */
1089                 err = mmc_send_ext_csd(mmc, ext_csd);
1090                 if (!err && (ext_csd[EXT_CSD_REV] >= 2)) {
1091                         /*
1092                          * According to the JEDEC Standard, the value of
1093                          * ext_csd's capacity is valid if the value is more
1094                          * than 2GB
1095                          */
1096                         capacity = ext_csd[EXT_CSD_SEC_CNT] << 0
1097                                         | ext_csd[EXT_CSD_SEC_CNT + 1] << 8
1098                                         | ext_csd[EXT_CSD_SEC_CNT + 2] << 16
1099                                         | ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
1100                         capacity *= MMC_MAX_BLOCK_LEN;
1101                         if ((capacity >> 20) > 2 * 1024)
1102                                 mmc->capacity_user = capacity;
1103                 }
1104
1105                 switch (ext_csd[EXT_CSD_REV]) {
1106                 case 1:
1107                         mmc->version = MMC_VERSION_4_1;
1108                         break;
1109                 case 2:
1110                         mmc->version = MMC_VERSION_4_2;
1111                         break;
1112                 case 3:
1113                         mmc->version = MMC_VERSION_4_3;
1114                         break;
1115                 case 5:
1116                         mmc->version = MMC_VERSION_4_41;
1117                         break;
1118                 case 6:
1119                         mmc->version = MMC_VERSION_4_5;
1120                         break;
1121                 }
1122
1123                 /*
1124                  * Check whether GROUP_DEF is set, if yes, read out
1125                  * group size from ext_csd directly, or calculate
1126                  * the group size from the csd value.
1127                  */
1128                 if (ext_csd[EXT_CSD_ERASE_GROUP_DEF]) {
1129                         mmc->erase_grp_size =
1130                                 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] *
1131                                         MMC_MAX_BLOCK_LEN * 1024;
1132                 } else {
1133                         int erase_gsz, erase_gmul;
1134                         erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10;
1135                         erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5;
1136                         mmc->erase_grp_size = (erase_gsz + 1)
1137                                 * (erase_gmul + 1);
1138                 }
1139
1140                 /* store the partition info of emmc */
1141                 if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) ||
1142                     ext_csd[EXT_CSD_BOOT_MULT])
1143                         mmc->part_config = ext_csd[EXT_CSD_PART_CONF];
1144
1145                 mmc->capacity_boot = ext_csd[EXT_CSD_BOOT_MULT] << 17;
1146
1147                 mmc->capacity_rpmb = ext_csd[EXT_CSD_RPMB_MULT] << 17;
1148
1149                 for (i = 0; i < 4; i++) {
1150                         int idx = EXT_CSD_GP_SIZE_MULT + i * 3;
1151                         mmc->capacity_gp[i] = (ext_csd[idx + 2] << 16) +
1152                                 (ext_csd[idx + 1] << 8) + ext_csd[idx];
1153                         mmc->capacity_gp[i] *=
1154                                 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
1155                         mmc->capacity_gp[i] *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
1156                 }
1157         }
1158
1159         err = mmc_set_capacity(mmc, mmc->part_num);
1160         if (err)
1161                 return err;
1162
1163         if (IS_SD(mmc))
1164                 err = sd_change_freq(mmc);
1165         else
1166                 err = mmc_change_freq(mmc);
1167
1168         if (err)
1169                 return err;
1170
1171         /* Restrict card's capabilities by what the host can do */
1172         mmc->card_caps &= mmc->host_caps;
1173
1174         if (IS_SD(mmc)) {
1175                 if (mmc->card_caps & MMC_MODE_4BIT) {
1176                         cmd.cmdidx = MMC_CMD_APP_CMD;
1177                         cmd.resp_type = MMC_RSP_R1;
1178                         cmd.cmdarg = mmc->rca << 16;
1179
1180                         err = mmc_send_cmd(mmc, &cmd, NULL);
1181                         if (err)
1182                                 return err;
1183
1184                         cmd.cmdidx = SD_CMD_APP_SET_BUS_WIDTH;
1185                         cmd.resp_type = MMC_RSP_R1;
1186                         cmd.cmdarg = 2;
1187                         err = mmc_send_cmd(mmc, &cmd, NULL);
1188                         if (err)
1189                                 return err;
1190
1191                         mmc_set_bus_width(mmc, 4);
1192                 }
1193
1194                 if (mmc->card_caps & MMC_MODE_HS)
1195                         mmc->tran_speed = 50000000;
1196                 else
1197                         mmc->tran_speed = 25000000;
1198         } else {
1199                 int idx;
1200
1201                 /* An array of possible bus widths in order of preference */
1202                 static unsigned ext_csd_bits[] = {
1203                         EXT_CSD_BUS_WIDTH_8,
1204                         EXT_CSD_BUS_WIDTH_4,
1205                         EXT_CSD_BUS_WIDTH_1,
1206                 };
1207
1208                 /* An array to map CSD bus widths to host cap bits */
1209                 static unsigned ext_to_hostcaps[] = {
1210                         [EXT_CSD_BUS_WIDTH_4] = MMC_MODE_4BIT,
1211                         [EXT_CSD_BUS_WIDTH_8] = MMC_MODE_8BIT,
1212                 };
1213
1214                 /* An array to map chosen bus width to an integer */
1215                 static unsigned widths[] = {
1216                         8, 4, 1,
1217                 };
1218
1219                 for (idx=0; idx < ARRAY_SIZE(ext_csd_bits); idx++) {
1220                         unsigned int extw = ext_csd_bits[idx];
1221
1222                         /*
1223                          * Check to make sure the controller supports
1224                          * this bus width, if it's more than 1
1225                          */
1226                         if (extw != EXT_CSD_BUS_WIDTH_1 &&
1227                                         !(mmc->host_caps & ext_to_hostcaps[extw]))
1228                                 continue;
1229
1230                         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1231                                         EXT_CSD_BUS_WIDTH, extw);
1232
1233                         if (err)
1234                                 continue;
1235
1236                         mmc_set_bus_width(mmc, widths[idx]);
1237
1238                         err = mmc_send_ext_csd(mmc, test_csd);
1239                         if (!err && ext_csd[EXT_CSD_PARTITIONING_SUPPORT] \
1240                                     == test_csd[EXT_CSD_PARTITIONING_SUPPORT]
1241                                  && ext_csd[EXT_CSD_ERASE_GROUP_DEF] \
1242                                     == test_csd[EXT_CSD_ERASE_GROUP_DEF] \
1243                                  && ext_csd[EXT_CSD_REV] \
1244                                     == test_csd[EXT_CSD_REV]
1245                                  && ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] \
1246                                     == test_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
1247                                  && memcmp(&ext_csd[EXT_CSD_SEC_CNT], \
1248                                         &test_csd[EXT_CSD_SEC_CNT], 4) == 0) {
1249
1250                                 mmc->card_caps |= ext_to_hostcaps[extw];
1251                                 break;
1252                         }
1253                 }
1254
1255                 if (mmc->card_caps & MMC_MODE_HS) {
1256                         if (mmc->card_caps & MMC_MODE_HS_52MHz)
1257                                 mmc->tran_speed = 52000000;
1258                         else
1259                                 mmc->tran_speed = 26000000;
1260                 }
1261         }
1262
1263         mmc_set_clock(mmc, mmc->tran_speed);
1264
1265         /* fill in device description */
1266         mmc->block_dev.lun = 0;
1267         mmc->block_dev.type = 0;
1268         mmc->block_dev.blksz = mmc->read_bl_len;
1269         mmc->block_dev.log2blksz = LOG2(mmc->block_dev.blksz);
1270         mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);
1271         sprintf(mmc->block_dev.vendor, "Man %06x Snr %04x%04x",
1272                 mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff),
1273                 (mmc->cid[3] >> 16) & 0xffff);
1274         sprintf(mmc->block_dev.product, "%c%c%c%c%c%c", mmc->cid[0] & 0xff,
1275                 (mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
1276                 (mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff,
1277                 (mmc->cid[2] >> 24) & 0xff);
1278         sprintf(mmc->block_dev.revision, "%d.%d", (mmc->cid[2] >> 20) & 0xf,
1279                 (mmc->cid[2] >> 16) & 0xf);
1280 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBDISK_SUPPORT)
1281         init_part(&mmc->block_dev);
1282 #endif
1283
1284         return 0;
1285 }
1286
1287 static int mmc_send_if_cond(struct mmc *mmc)
1288 {
1289         struct mmc_cmd cmd;
1290         int err;
1291
1292         cmd.cmdidx = SD_CMD_SEND_IF_COND;
1293         /* We set the bit if the host supports voltages between 2.7 and 3.6 V */
1294         cmd.cmdarg = ((mmc->voltages & 0xff8000) != 0) << 8 | 0xaa;
1295         cmd.resp_type = MMC_RSP_R7;
1296
1297         err = mmc_send_cmd(mmc, &cmd, NULL);
1298
1299         if (err)
1300                 return err;
1301
1302         if ((cmd.response[0] & 0xff) != 0xaa)
1303                 return UNUSABLE_ERR;
1304         else
1305                 mmc->version = SD_VERSION_2;
1306
1307         return 0;
1308 }
1309
1310 int mmc_register(struct mmc *mmc)
1311 {
1312         /* Setup the universal parts of the block interface just once */
1313         mmc->block_dev.if_type = IF_TYPE_MMC;
1314         mmc->block_dev.dev = cur_dev_num++;
1315         mmc->block_dev.removable = 1;
1316         mmc->block_dev.block_read = mmc_bread;
1317         mmc->block_dev.block_write = mmc_bwrite;
1318         mmc->block_dev.block_erase = mmc_berase;
1319         if (!mmc->b_max)
1320                 mmc->b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
1321
1322         INIT_LIST_HEAD (&mmc->link);
1323
1324         list_add_tail (&mmc->link, &mmc_devices);
1325
1326         return 0;
1327 }
1328
1329 #ifdef CONFIG_PARTITIONS
1330 block_dev_desc_t *mmc_get_dev(int dev)
1331 {
1332         struct mmc *mmc = find_mmc_device(dev);
1333         if (!mmc || mmc_init(mmc))
1334                 return NULL;
1335
1336         return &mmc->block_dev;
1337 }
1338 #endif
1339
1340 int mmc_start_init(struct mmc *mmc)
1341 {
1342         int err;
1343
1344         if (mmc_getcd(mmc) == 0) {
1345                 mmc->has_init = 0;
1346                 printf("MMC: no card present\n");
1347                 return NO_CARD_ERR;
1348         }
1349
1350         if (mmc->has_init)
1351                 return 0;
1352
1353         err = mmc->init(mmc);
1354
1355         if (err)
1356                 return err;
1357
1358         mmc_set_bus_width(mmc, 1);
1359         mmc_set_clock(mmc, 1);
1360
1361         /* Reset the Card */
1362         err = mmc_go_idle(mmc);
1363
1364         if (err)
1365                 return err;
1366
1367         /* The internal partition reset to user partition(0) at every CMD0*/
1368         mmc->part_num = 0;
1369
1370         /* Test for SD version 2 */
1371         err = mmc_send_if_cond(mmc);
1372
1373         /* Now try to get the SD card's operating condition */
1374         err = sd_send_op_cond(mmc);
1375
1376         /* If the command timed out, we check for an MMC card */
1377         if (err == TIMEOUT) {
1378                 err = mmc_send_op_cond(mmc);
1379
1380                 if (err && err != IN_PROGRESS) {
1381                         printf("Card did not respond to voltage select!\n");
1382                         return UNUSABLE_ERR;
1383                 }
1384         }
1385
1386         if (err == IN_PROGRESS)
1387                 mmc->init_in_progress = 1;
1388
1389         return err;
1390 }
1391
1392 static int mmc_complete_init(struct mmc *mmc)
1393 {
1394         int err = 0;
1395
1396         if (mmc->op_cond_pending)
1397                 err = mmc_complete_op_cond(mmc);
1398
1399         if (!err)
1400                 err = mmc_startup(mmc);
1401         if (err)
1402                 mmc->has_init = 0;
1403         else
1404                 mmc->has_init = 1;
1405         mmc->init_in_progress = 0;
1406         return err;
1407 }
1408
1409 int mmc_init(struct mmc *mmc)
1410 {
1411         int err = IN_PROGRESS;
1412         unsigned start = get_timer(0);
1413
1414         if (mmc->has_init)
1415                 return 0;
1416         if (!mmc->init_in_progress)
1417                 err = mmc_start_init(mmc);
1418
1419         if (!err || err == IN_PROGRESS)
1420                 err = mmc_complete_init(mmc);
1421         debug("%s: %d, time %lu\n", __func__, err, get_timer(start));
1422         return err;
1423 }
1424
1425 /*
1426  * CPU and board-specific MMC initializations.  Aliased function
1427  * signals caller to move on
1428  */
1429 static int __def_mmc_init(bd_t *bis)
1430 {
1431         return -1;
1432 }
1433
1434 int cpu_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
1435 int board_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
1436
1437 void print_mmc_devices(char separator)
1438 {
1439         struct mmc *m;
1440         struct list_head *entry;
1441
1442         list_for_each(entry, &mmc_devices) {
1443                 m = list_entry(entry, struct mmc, link);
1444
1445                 printf("%s: %d", m->name, m->block_dev.dev);
1446
1447                 if (entry->next != &mmc_devices)
1448                         printf("%c ", separator);
1449         }
1450
1451         printf("\n");
1452 }
1453
1454 int get_mmc_num(void)
1455 {
1456         return cur_dev_num;
1457 }
1458
1459 void mmc_set_preinit(struct mmc *mmc, int preinit)
1460 {
1461         mmc->preinit = preinit;
1462 }
1463
1464 static void do_preinit(void)
1465 {
1466         struct mmc *m;
1467         struct list_head *entry;
1468
1469         list_for_each(entry, &mmc_devices) {
1470                 m = list_entry(entry, struct mmc, link);
1471
1472                 if (m->preinit)
1473                         mmc_start_init(m);
1474         }
1475 }
1476
1477
1478 int mmc_initialize(bd_t *bis)
1479 {
1480         INIT_LIST_HEAD (&mmc_devices);
1481         cur_dev_num = 0;
1482
1483         if (board_mmc_init(bis) < 0)
1484                 cpu_mmc_init(bis);
1485
1486 #ifndef CONFIG_SPL_BUILD
1487         print_mmc_devices(',');
1488 #endif
1489
1490         do_preinit();
1491         return 0;
1492 }
1493
1494 #ifdef CONFIG_SUPPORT_EMMC_BOOT
1495 /*
1496  * This function changes the size of boot partition and the size of rpmb
1497  * partition present on EMMC devices.
1498  *
1499  * Input Parameters:
1500  * struct *mmc: pointer for the mmc device strcuture
1501  * bootsize: size of boot partition
1502  * rpmbsize: size of rpmb partition
1503  *
1504  * Returns 0 on success.
1505  */
1506
1507 int mmc_boot_partition_size_change(struct mmc *mmc, unsigned long bootsize,
1508                                 unsigned long rpmbsize)
1509 {
1510         int err;
1511         struct mmc_cmd cmd;
1512
1513         /* Only use this command for raw EMMC moviNAND. Enter backdoor mode */
1514         cmd.cmdidx = MMC_CMD_RES_MAN;
1515         cmd.resp_type = MMC_RSP_R1b;
1516         cmd.cmdarg = MMC_CMD62_ARG1;
1517
1518         err = mmc_send_cmd(mmc, &cmd, NULL);
1519         if (err) {
1520                 debug("mmc_boot_partition_size_change: Error1 = %d\n", err);
1521                 return err;
1522         }
1523
1524         /* Boot partition changing mode */
1525         cmd.cmdidx = MMC_CMD_RES_MAN;
1526         cmd.resp_type = MMC_RSP_R1b;
1527         cmd.cmdarg = MMC_CMD62_ARG2;
1528
1529         err = mmc_send_cmd(mmc, &cmd, NULL);
1530         if (err) {
1531                 debug("mmc_boot_partition_size_change: Error2 = %d\n", err);
1532                 return err;
1533         }
1534         /* boot partition size is multiple of 128KB */
1535         bootsize = (bootsize * 1024) / 128;
1536
1537         /* Arg: boot partition size */
1538         cmd.cmdidx = MMC_CMD_RES_MAN;
1539         cmd.resp_type = MMC_RSP_R1b;
1540         cmd.cmdarg = bootsize;
1541
1542         err = mmc_send_cmd(mmc, &cmd, NULL);
1543         if (err) {
1544                 debug("mmc_boot_partition_size_change: Error3 = %d\n", err);
1545                 return err;
1546         }
1547         /* RPMB partition size is multiple of 128KB */
1548         rpmbsize = (rpmbsize * 1024) / 128;
1549         /* Arg: RPMB partition size */
1550         cmd.cmdidx = MMC_CMD_RES_MAN;
1551         cmd.resp_type = MMC_RSP_R1b;
1552         cmd.cmdarg = rpmbsize;
1553
1554         err = mmc_send_cmd(mmc, &cmd, NULL);
1555         if (err) {
1556                 debug("mmc_boot_partition_size_change: Error4 = %d\n", err);
1557                 return err;
1558         }
1559         return 0;
1560 }
1561
1562 /*
1563  * This function shall form and send the commands to open / close the
1564  * boot partition specified by user.
1565  *
1566  * Input Parameters:
1567  * ack: 0x0 - No boot acknowledge sent (default)
1568  *      0x1 - Boot acknowledge sent during boot operation
1569  * part_num: User selects boot data that will be sent to master
1570  *      0x0 - Device not boot enabled (default)
1571  *      0x1 - Boot partition 1 enabled for boot
1572  *      0x2 - Boot partition 2 enabled for boot
1573  * access: User selects partitions to access
1574  *      0x0 : No access to boot partition (default)
1575  *      0x1 : R/W boot partition 1
1576  *      0x2 : R/W boot partition 2
1577  *      0x3 : R/W Replay Protected Memory Block (RPMB)
1578  *
1579  * Returns 0 on success.
1580  */
1581 int mmc_boot_part_access(struct mmc *mmc, u8 ack, u8 part_num, u8 access)
1582 {
1583         int err;
1584         struct mmc_cmd cmd;
1585
1586         /* Boot ack enable, boot partition enable , boot partition access */
1587         cmd.cmdidx = MMC_CMD_SWITCH;
1588         cmd.resp_type = MMC_RSP_R1b;
1589
1590         cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
1591                         (EXT_CSD_PART_CONF << 16) |
1592                         ((EXT_CSD_BOOT_ACK(ack) |
1593                         EXT_CSD_BOOT_PART_NUM(part_num) |
1594                         EXT_CSD_PARTITION_ACCESS(access)) << 8);
1595
1596         err = mmc_send_cmd(mmc, &cmd, NULL);
1597         if (err) {
1598                 if (access) {
1599                         debug("mmc boot partition#%d open fail:Error1 = %d\n",
1600                               part_num, err);
1601                 } else {
1602                         debug("mmc boot partition#%d close fail:Error = %d\n",
1603                               part_num, err);
1604                 }
1605                 return err;
1606         }
1607
1608         if (access) {
1609                 /* 4bit transfer mode at booting time. */
1610                 cmd.cmdidx = MMC_CMD_SWITCH;
1611                 cmd.resp_type = MMC_RSP_R1b;
1612
1613                 cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
1614                                 (EXT_CSD_BOOT_BUS_WIDTH << 16) |
1615                                 ((1 << 0) << 8);
1616
1617                 err = mmc_send_cmd(mmc, &cmd, NULL);
1618                 if (err) {
1619                         debug("mmc boot partition#%d open fail:Error2 = %d\n",
1620                               part_num, err);
1621                         return err;
1622                 }
1623         }
1624         return 0;
1625 }
1626 #endif