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