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