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