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