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