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