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