]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - drivers/mmc/mmc.c
Merge git://git.denx.de/u-boot-nand-flash
[karo-tx-uboot.git] / drivers / mmc / mmc.c
1 /*
2  * Copyright 2008, Freescale Semiconductor, Inc
3  * Andy Fleming
4  *
5  * Based vaguely on the Linux code
6  *
7  * SPDX-License-Identifier:     GPL-2.0+
8  */
9
10 #include <config.h>
11 #include <common.h>
12 #include <command.h>
13 #include <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                 case 8:
1231                         mmc->version = MMC_VERSION_5_1;
1232                         break;
1233                 }
1234
1235                 /* The partition data may be non-zero but it is only
1236                  * effective if PARTITION_SETTING_COMPLETED is set in
1237                  * EXT_CSD, so ignore any data if this bit is not set,
1238                  * except for enabling the high-capacity group size
1239                  * definition (see below). */
1240                 part_completed = !!(ext_csd[EXT_CSD_PARTITION_SETTING] &
1241                                     EXT_CSD_PARTITION_SETTING_COMPLETED);
1242
1243                 /* store the partition info of emmc */
1244                 mmc->part_support = ext_csd[EXT_CSD_PARTITIONING_SUPPORT];
1245                 if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) ||
1246                     ext_csd[EXT_CSD_BOOT_MULT])
1247                         mmc->part_config = ext_csd[EXT_CSD_PART_CONF];
1248                 if (part_completed &&
1249                     (ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & ENHNCD_SUPPORT))
1250                         mmc->part_attr = ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE];
1251
1252                 mmc->capacity_boot = ext_csd[EXT_CSD_BOOT_MULT] << 17;
1253
1254                 mmc->capacity_rpmb = ext_csd[EXT_CSD_RPMB_MULT] << 17;
1255
1256                 for (i = 0; i < 4; i++) {
1257                         int idx = EXT_CSD_GP_SIZE_MULT + i * 3;
1258                         uint mult = (ext_csd[idx + 2] << 16) +
1259                                 (ext_csd[idx + 1] << 8) + ext_csd[idx];
1260                         if (mult)
1261                                 has_parts = true;
1262                         if (!part_completed)
1263                                 continue;
1264                         mmc->capacity_gp[i] = mult;
1265                         mmc->capacity_gp[i] *=
1266                                 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
1267                         mmc->capacity_gp[i] *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
1268                         mmc->capacity_gp[i] <<= 19;
1269                 }
1270
1271                 if (part_completed) {
1272                         mmc->enh_user_size =
1273                                 (ext_csd[EXT_CSD_ENH_SIZE_MULT+2] << 16) +
1274                                 (ext_csd[EXT_CSD_ENH_SIZE_MULT+1] << 8) +
1275                                 ext_csd[EXT_CSD_ENH_SIZE_MULT];
1276                         mmc->enh_user_size *= ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
1277                         mmc->enh_user_size *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
1278                         mmc->enh_user_size <<= 19;
1279                         mmc->enh_user_start =
1280                                 (ext_csd[EXT_CSD_ENH_START_ADDR+3] << 24) +
1281                                 (ext_csd[EXT_CSD_ENH_START_ADDR+2] << 16) +
1282                                 (ext_csd[EXT_CSD_ENH_START_ADDR+1] << 8) +
1283                                 ext_csd[EXT_CSD_ENH_START_ADDR];
1284                         if (mmc->high_capacity)
1285                                 mmc->enh_user_start <<= 9;
1286                 }
1287
1288                 /*
1289                  * Host needs to enable ERASE_GRP_DEF bit if device is
1290                  * partitioned. This bit will be lost every time after a reset
1291                  * or power off. This will affect erase size.
1292                  */
1293                 if (part_completed)
1294                         has_parts = true;
1295                 if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) &&
1296                     (ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE] & PART_ENH_ATTRIB))
1297                         has_parts = true;
1298                 if (has_parts) {
1299                         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1300                                 EXT_CSD_ERASE_GROUP_DEF, 1);
1301
1302                         if (err)
1303                                 return err;
1304                         else
1305                                 ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1;
1306                 }
1307
1308                 if (ext_csd[EXT_CSD_ERASE_GROUP_DEF] & 0x01) {
1309                         /* Read out group size from ext_csd */
1310                         mmc->erase_grp_size =
1311                                 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 1024;
1312                         /*
1313                          * if high capacity and partition setting completed
1314                          * SEC_COUNT is valid even if it is smaller than 2 GiB
1315                          * JEDEC Standard JESD84-B45, 6.2.4
1316                          */
1317                         if (mmc->high_capacity && part_completed) {
1318                                 capacity = (ext_csd[EXT_CSD_SEC_CNT]) |
1319                                         (ext_csd[EXT_CSD_SEC_CNT + 1] << 8) |
1320                                         (ext_csd[EXT_CSD_SEC_CNT + 2] << 16) |
1321                                         (ext_csd[EXT_CSD_SEC_CNT + 3] << 24);
1322                                 capacity *= MMC_MAX_BLOCK_LEN;
1323                                 mmc->capacity_user = capacity;
1324                         }
1325                 } else {
1326                         /* Calculate the group size from the csd value. */
1327                         int erase_gsz, erase_gmul;
1328                         erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10;
1329                         erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5;
1330                         mmc->erase_grp_size = (erase_gsz + 1)
1331                                 * (erase_gmul + 1);
1332                 }
1333
1334                 mmc->hc_wp_grp_size = 1024
1335                         * ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
1336                         * ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
1337
1338                 mmc->wr_rel_set = ext_csd[EXT_CSD_WR_REL_SET];
1339         }
1340
1341         err = mmc_set_capacity(mmc, mmc_get_blk_desc(mmc)->hwpart);
1342         if (err)
1343                 return err;
1344
1345         if (IS_SD(mmc))
1346                 err = sd_change_freq(mmc);
1347         else
1348                 err = mmc_change_freq(mmc);
1349
1350         if (err)
1351                 return err;
1352
1353         /* Restrict card's capabilities by what the host can do */
1354         mmc->card_caps &= mmc->cfg->host_caps;
1355
1356         if (IS_SD(mmc)) {
1357                 if (mmc->card_caps & MMC_MODE_4BIT) {
1358                         cmd.cmdidx = MMC_CMD_APP_CMD;
1359                         cmd.resp_type = MMC_RSP_R1;
1360                         cmd.cmdarg = mmc->rca << 16;
1361
1362                         err = mmc_send_cmd(mmc, &cmd, NULL);
1363                         if (err)
1364                                 return err;
1365
1366                         cmd.cmdidx = SD_CMD_APP_SET_BUS_WIDTH;
1367                         cmd.resp_type = MMC_RSP_R1;
1368                         cmd.cmdarg = 2;
1369                         err = mmc_send_cmd(mmc, &cmd, NULL);
1370                         if (err)
1371                                 return err;
1372
1373                         mmc_set_bus_width(mmc, 4);
1374                 }
1375
1376                 if (mmc->card_caps & MMC_MODE_HS)
1377                         mmc->tran_speed = 50000000;
1378                 else
1379                         mmc->tran_speed = 25000000;
1380         } else if (mmc->version >= MMC_VERSION_4) {
1381                 /* Only version 4 of MMC supports wider bus widths */
1382                 int idx;
1383
1384                 /* An array of possible bus widths in order of preference */
1385                 static unsigned ext_csd_bits[] = {
1386                         EXT_CSD_DDR_BUS_WIDTH_8,
1387                         EXT_CSD_DDR_BUS_WIDTH_4,
1388                         EXT_CSD_BUS_WIDTH_8,
1389                         EXT_CSD_BUS_WIDTH_4,
1390                         EXT_CSD_BUS_WIDTH_1,
1391                 };
1392
1393                 /* An array to map CSD bus widths to host cap bits */
1394                 static unsigned ext_to_hostcaps[] = {
1395                         [EXT_CSD_DDR_BUS_WIDTH_4] =
1396                                 MMC_MODE_DDR_52MHz | MMC_MODE_4BIT,
1397                         [EXT_CSD_DDR_BUS_WIDTH_8] =
1398                                 MMC_MODE_DDR_52MHz | MMC_MODE_8BIT,
1399                         [EXT_CSD_BUS_WIDTH_4] = MMC_MODE_4BIT,
1400                         [EXT_CSD_BUS_WIDTH_8] = MMC_MODE_8BIT,
1401                 };
1402
1403                 /* An array to map chosen bus width to an integer */
1404                 static unsigned widths[] = {
1405                         8, 4, 8, 4, 1,
1406                 };
1407
1408                 for (idx=0; idx < ARRAY_SIZE(ext_csd_bits); idx++) {
1409                         unsigned int extw = ext_csd_bits[idx];
1410                         unsigned int caps = ext_to_hostcaps[extw];
1411
1412                         /*
1413                          * If the bus width is still not changed,
1414                          * don't try to set the default again.
1415                          * Otherwise, recover from switch attempts
1416                          * by switching to 1-bit bus width.
1417                          */
1418                         if (extw == EXT_CSD_BUS_WIDTH_1 &&
1419                                         mmc->bus_width == 1) {
1420                                 err = 0;
1421                                 break;
1422                         }
1423
1424                         /*
1425                          * Check to make sure the card and controller support
1426                          * these capabilities
1427                          */
1428                         if ((mmc->card_caps & caps) != caps)
1429                                 continue;
1430
1431                         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1432                                         EXT_CSD_BUS_WIDTH, extw);
1433
1434                         if (err)
1435                                 continue;
1436
1437                         mmc->ddr_mode = (caps & MMC_MODE_DDR_52MHz) ? 1 : 0;
1438                         mmc_set_bus_width(mmc, widths[idx]);
1439
1440                         err = mmc_send_ext_csd(mmc, test_csd);
1441
1442                         if (err)
1443                                 continue;
1444
1445                         /* Only compare read only fields */
1446                         if (ext_csd[EXT_CSD_PARTITIONING_SUPPORT]
1447                                 == test_csd[EXT_CSD_PARTITIONING_SUPPORT] &&
1448                             ext_csd[EXT_CSD_HC_WP_GRP_SIZE]
1449                                 == test_csd[EXT_CSD_HC_WP_GRP_SIZE] &&
1450                             ext_csd[EXT_CSD_REV]
1451                                 == test_csd[EXT_CSD_REV] &&
1452                             ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
1453                                 == test_csd[EXT_CSD_HC_ERASE_GRP_SIZE] &&
1454                             memcmp(&ext_csd[EXT_CSD_SEC_CNT],
1455                                    &test_csd[EXT_CSD_SEC_CNT], 4) == 0)
1456                                 break;
1457                         else
1458                                 err = SWITCH_ERR;
1459                 }
1460
1461                 if (err)
1462                         return err;
1463
1464                 if (mmc->card_caps & MMC_MODE_HS) {
1465                         if (mmc->card_caps & MMC_MODE_HS_52MHz)
1466                                 mmc->tran_speed = 52000000;
1467                         else
1468                                 mmc->tran_speed = 26000000;
1469                 }
1470         }
1471
1472         mmc_set_clock(mmc, mmc->tran_speed);
1473
1474         /* Fix the block length for DDR mode */
1475         if (mmc->ddr_mode) {
1476                 mmc->read_bl_len = MMC_MAX_BLOCK_LEN;
1477                 mmc->write_bl_len = MMC_MAX_BLOCK_LEN;
1478         }
1479
1480         /* fill in device description */
1481         bdesc = mmc_get_blk_desc(mmc);
1482         bdesc->lun = 0;
1483         bdesc->hwpart = 0;
1484         bdesc->type = 0;
1485         bdesc->blksz = mmc->read_bl_len;
1486         bdesc->log2blksz = LOG2(bdesc->blksz);
1487         bdesc->lba = lldiv(mmc->capacity, mmc->read_bl_len);
1488 #if !defined(CONFIG_SPL_BUILD) || \
1489                 (defined(CONFIG_SPL_LIBCOMMON_SUPPORT) && \
1490                 !defined(CONFIG_USE_TINY_PRINTF))
1491         sprintf(bdesc->vendor, "Man %06x Snr %04x%04x",
1492                 mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff),
1493                 (mmc->cid[3] >> 16) & 0xffff);
1494         sprintf(bdesc->product, "%c%c%c%c%c%c", mmc->cid[0] & 0xff,
1495                 (mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
1496                 (mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff,
1497                 (mmc->cid[2] >> 24) & 0xff);
1498         sprintf(bdesc->revision, "%d.%d", (mmc->cid[2] >> 20) & 0xf,
1499                 (mmc->cid[2] >> 16) & 0xf);
1500 #else
1501         bdesc->vendor[0] = 0;
1502         bdesc->product[0] = 0;
1503         bdesc->revision[0] = 0;
1504 #endif
1505 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBDISK_SUPPORT)
1506         part_init(bdesc);
1507 #endif
1508
1509         return 0;
1510 }
1511
1512 static int mmc_send_if_cond(struct mmc *mmc)
1513 {
1514         struct mmc_cmd cmd;
1515         int err;
1516
1517         cmd.cmdidx = SD_CMD_SEND_IF_COND;
1518         /* We set the bit if the host supports voltages between 2.7 and 3.6 V */
1519         cmd.cmdarg = ((mmc->cfg->voltages & 0xff8000) != 0) << 8 | 0xaa;
1520         cmd.resp_type = MMC_RSP_R7;
1521
1522         err = mmc_send_cmd(mmc, &cmd, NULL);
1523
1524         if (err)
1525                 return err;
1526
1527         if ((cmd.response[0] & 0xff) != 0xaa)
1528                 return UNUSABLE_ERR;
1529         else
1530                 mmc->version = SD_VERSION_2;
1531
1532         return 0;
1533 }
1534
1535 #ifdef CONFIG_BLK
1536 int mmc_bind(struct udevice *dev, struct mmc *mmc, const struct mmc_config *cfg)
1537 {
1538         struct blk_desc *bdesc;
1539         struct udevice *bdev;
1540         int ret;
1541
1542         ret = blk_create_devicef(dev, "mmc_blk", "blk", IF_TYPE_MMC, -1, 512,
1543                                  0, &bdev);
1544         if (ret) {
1545                 debug("Cannot create block device\n");
1546                 return ret;
1547         }
1548         bdesc = dev_get_uclass_platdata(bdev);
1549         mmc->cfg = cfg;
1550         mmc->priv = dev;
1551
1552         /* the following chunk was from mmc_register() */
1553
1554         /* Setup dsr related values */
1555         mmc->dsr_imp = 0;
1556         mmc->dsr = 0xffffffff;
1557         /* Setup the universal parts of the block interface just once */
1558         bdesc->removable = 1;
1559
1560         /* setup initial part type */
1561         bdesc->part_type = cfg->part_type;
1562         mmc->dev = dev;
1563
1564         return 0;
1565 }
1566
1567 int mmc_unbind(struct udevice *dev)
1568 {
1569         struct udevice *bdev;
1570
1571         device_find_first_child(dev, &bdev);
1572         if (bdev) {
1573                 device_remove(bdev);
1574                 device_unbind(bdev);
1575         }
1576
1577         return 0;
1578 }
1579
1580 #else
1581 struct mmc *mmc_create(const struct mmc_config *cfg, void *priv)
1582 {
1583         struct blk_desc *bdesc;
1584         struct mmc *mmc;
1585
1586         /* quick validation */
1587         if (cfg == NULL || cfg->ops == NULL || cfg->ops->send_cmd == NULL ||
1588                         cfg->f_min == 0 || cfg->f_max == 0 || cfg->b_max == 0)
1589                 return NULL;
1590
1591         mmc = calloc(1, sizeof(*mmc));
1592         if (mmc == NULL)
1593                 return NULL;
1594
1595         mmc->cfg = cfg;
1596         mmc->priv = priv;
1597
1598         /* the following chunk was mmc_register() */
1599
1600         /* Setup dsr related values */
1601         mmc->dsr_imp = 0;
1602         mmc->dsr = 0xffffffff;
1603         /* Setup the universal parts of the block interface just once */
1604         bdesc = mmc_get_blk_desc(mmc);
1605         bdesc->if_type = IF_TYPE_MMC;
1606         bdesc->removable = 1;
1607         bdesc->devnum = mmc_get_next_devnum();
1608         bdesc->block_read = mmc_bread;
1609         bdesc->block_write = mmc_bwrite;
1610         bdesc->block_erase = mmc_berase;
1611
1612         /* setup initial part type */
1613         bdesc->part_type = mmc->cfg->part_type;
1614         mmc_list_add(mmc);
1615
1616         return mmc;
1617 }
1618
1619 void mmc_destroy(struct mmc *mmc)
1620 {
1621         /* only freeing memory for now */
1622         free(mmc);
1623 }
1624 #endif
1625
1626 #ifndef CONFIG_BLK
1627 static int mmc_get_dev(int dev, struct blk_desc **descp)
1628 {
1629         struct mmc *mmc = find_mmc_device(dev);
1630         int ret;
1631
1632         if (!mmc)
1633                 return -ENODEV;
1634         ret = mmc_init(mmc);
1635         if (ret)
1636                 return ret;
1637
1638         *descp = &mmc->block_dev;
1639
1640         return 0;
1641 }
1642 #endif
1643
1644 /* board-specific MMC power initializations. */
1645 __weak void board_mmc_power_init(void)
1646 {
1647 }
1648
1649 int mmc_start_init(struct mmc *mmc)
1650 {
1651         int err;
1652
1653         /* we pretend there's no card when init is NULL */
1654         if (mmc_getcd(mmc) == 0 || mmc->cfg->ops->init == NULL) {
1655                 mmc->has_init = 0;
1656 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1657                 printf("MMC: no card present\n");
1658 #endif
1659                 return NO_CARD_ERR;
1660         }
1661
1662         if (mmc->has_init)
1663                 return 0;
1664
1665 #ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT
1666         mmc_adapter_card_type_ident();
1667 #endif
1668         board_mmc_power_init();
1669
1670         /* made sure it's not NULL earlier */
1671         err = mmc->cfg->ops->init(mmc);
1672
1673         if (err)
1674                 return err;
1675
1676         mmc->ddr_mode = 0;
1677         mmc_set_bus_width(mmc, 1);
1678         mmc_set_clock(mmc, 1);
1679
1680         /* Reset the Card */
1681         err = mmc_go_idle(mmc);
1682
1683         if (err)
1684                 return err;
1685
1686         /* The internal partition reset to user partition(0) at every CMD0*/
1687         mmc_get_blk_desc(mmc)->hwpart = 0;
1688
1689         /* Test for SD version 2 */
1690         err = mmc_send_if_cond(mmc);
1691
1692         /* Now try to get the SD card's operating condition */
1693         err = sd_send_op_cond(mmc);
1694
1695         /* If the command timed out, we check for an MMC card */
1696         if (err == TIMEOUT) {
1697                 err = mmc_send_op_cond(mmc);
1698
1699                 if (err) {
1700 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1701                         printf("Card did not respond to voltage select!\n");
1702 #endif
1703                         return UNUSABLE_ERR;
1704                 }
1705         }
1706
1707         if (!err)
1708                 mmc->init_in_progress = 1;
1709
1710         return err;
1711 }
1712
1713 static int mmc_complete_init(struct mmc *mmc)
1714 {
1715         int err = 0;
1716
1717         mmc->init_in_progress = 0;
1718         if (mmc->op_cond_pending)
1719                 err = mmc_complete_op_cond(mmc);
1720
1721         if (!err)
1722                 err = mmc_startup(mmc);
1723         if (err)
1724                 mmc->has_init = 0;
1725         else
1726                 mmc->has_init = 1;
1727         return err;
1728 }
1729
1730 int mmc_init(struct mmc *mmc)
1731 {
1732         int err = 0;
1733         unsigned start;
1734 #ifdef CONFIG_DM_MMC
1735         struct mmc_uclass_priv *upriv = dev_get_uclass_priv(mmc->dev);
1736
1737         upriv->mmc = mmc;
1738 #endif
1739         if (mmc->has_init)
1740                 return 0;
1741
1742         start = get_timer(0);
1743
1744         if (!mmc->init_in_progress)
1745                 err = mmc_start_init(mmc);
1746
1747         if (!err)
1748                 err = mmc_complete_init(mmc);
1749         debug("%s: %d, time %lu\n", __func__, err, get_timer(start));
1750         return err;
1751 }
1752
1753 int mmc_set_dsr(struct mmc *mmc, u16 val)
1754 {
1755         mmc->dsr = val;
1756         return 0;
1757 }
1758
1759 /* CPU-specific MMC initializations */
1760 __weak int cpu_mmc_init(bd_t *bis)
1761 {
1762         return -1;
1763 }
1764
1765 /* board-specific MMC initializations. */
1766 __weak int board_mmc_init(bd_t *bis)
1767 {
1768         return -1;
1769 }
1770
1771 void mmc_set_preinit(struct mmc *mmc, int preinit)
1772 {
1773         mmc->preinit = preinit;
1774 }
1775
1776 #if defined(CONFIG_DM_MMC) && defined(CONFIG_SPL_BUILD)
1777 static int mmc_probe(bd_t *bis)
1778 {
1779         return 0;
1780 }
1781 #elif defined(CONFIG_DM_MMC)
1782 static int mmc_probe(bd_t *bis)
1783 {
1784         int ret, i;
1785         struct uclass *uc;
1786         struct udevice *dev;
1787
1788         ret = uclass_get(UCLASS_MMC, &uc);
1789         if (ret)
1790                 return ret;
1791
1792         /*
1793          * Try to add them in sequence order. Really with driver model we
1794          * should allow holes, but the current MMC list does not allow that.
1795          * So if we request 0, 1, 3 we will get 0, 1, 2.
1796          */
1797         for (i = 0; ; i++) {
1798                 ret = uclass_get_device_by_seq(UCLASS_MMC, i, &dev);
1799                 if (ret == -ENODEV)
1800                         break;
1801         }
1802         uclass_foreach_dev(dev, uc) {
1803                 ret = device_probe(dev);
1804                 if (ret)
1805                         printf("%s - probe failed: %d\n", dev->name, ret);
1806         }
1807
1808         return 0;
1809 }
1810 #else
1811 static int mmc_probe(bd_t *bis)
1812 {
1813         if (board_mmc_init(bis) < 0)
1814                 cpu_mmc_init(bis);
1815
1816         return 0;
1817 }
1818 #endif
1819
1820 int mmc_initialize(bd_t *bis)
1821 {
1822         static int initialized = 0;
1823         int ret;
1824         if (initialized)        /* Avoid initializing mmc multiple times */
1825                 return 0;
1826         initialized = 1;
1827
1828 #ifndef CONFIG_BLK
1829         mmc_list_init();
1830 #endif
1831         ret = mmc_probe(bis);
1832         if (ret)
1833                 return ret;
1834
1835 #ifndef CONFIG_SPL_BUILD
1836         print_mmc_devices(',');
1837 #endif
1838
1839         mmc_do_preinit();
1840         return 0;
1841 }
1842
1843 #ifdef CONFIG_SUPPORT_EMMC_BOOT
1844 /*
1845  * This function changes the size of boot partition and the size of rpmb
1846  * partition present on EMMC devices.
1847  *
1848  * Input Parameters:
1849  * struct *mmc: pointer for the mmc device strcuture
1850  * bootsize: size of boot partition
1851  * rpmbsize: size of rpmb partition
1852  *
1853  * Returns 0 on success.
1854  */
1855
1856 int mmc_boot_partition_size_change(struct mmc *mmc, unsigned long bootsize,
1857                                 unsigned long rpmbsize)
1858 {
1859         int err;
1860         struct mmc_cmd cmd;
1861
1862         /* Only use this command for raw EMMC moviNAND. Enter backdoor mode */
1863         cmd.cmdidx = MMC_CMD_RES_MAN;
1864         cmd.resp_type = MMC_RSP_R1b;
1865         cmd.cmdarg = MMC_CMD62_ARG1;
1866
1867         err = mmc_send_cmd(mmc, &cmd, NULL);
1868         if (err) {
1869                 debug("mmc_boot_partition_size_change: Error1 = %d\n", err);
1870                 return err;
1871         }
1872
1873         /* Boot partition changing mode */
1874         cmd.cmdidx = MMC_CMD_RES_MAN;
1875         cmd.resp_type = MMC_RSP_R1b;
1876         cmd.cmdarg = MMC_CMD62_ARG2;
1877
1878         err = mmc_send_cmd(mmc, &cmd, NULL);
1879         if (err) {
1880                 debug("mmc_boot_partition_size_change: Error2 = %d\n", err);
1881                 return err;
1882         }
1883         /* boot partition size is multiple of 128KB */
1884         bootsize = (bootsize * 1024) / 128;
1885
1886         /* Arg: boot partition size */
1887         cmd.cmdidx = MMC_CMD_RES_MAN;
1888         cmd.resp_type = MMC_RSP_R1b;
1889         cmd.cmdarg = bootsize;
1890
1891         err = mmc_send_cmd(mmc, &cmd, NULL);
1892         if (err) {
1893                 debug("mmc_boot_partition_size_change: Error3 = %d\n", err);
1894                 return err;
1895         }
1896         /* RPMB partition size is multiple of 128KB */
1897         rpmbsize = (rpmbsize * 1024) / 128;
1898         /* Arg: RPMB partition size */
1899         cmd.cmdidx = MMC_CMD_RES_MAN;
1900         cmd.resp_type = MMC_RSP_R1b;
1901         cmd.cmdarg = rpmbsize;
1902
1903         err = mmc_send_cmd(mmc, &cmd, NULL);
1904         if (err) {
1905                 debug("mmc_boot_partition_size_change: Error4 = %d\n", err);
1906                 return err;
1907         }
1908         return 0;
1909 }
1910
1911 /*
1912  * Modify EXT_CSD[177] which is BOOT_BUS_WIDTH
1913  * based on the passed in values for BOOT_BUS_WIDTH, RESET_BOOT_BUS_WIDTH
1914  * and BOOT_MODE.
1915  *
1916  * Returns 0 on success.
1917  */
1918 int mmc_set_boot_bus_width(struct mmc *mmc, u8 width, u8 reset, u8 mode)
1919 {
1920         int err;
1921
1922         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BOOT_BUS_WIDTH,
1923                          EXT_CSD_BOOT_BUS_WIDTH_MODE(mode) |
1924                          EXT_CSD_BOOT_BUS_WIDTH_RESET(reset) |
1925                          EXT_CSD_BOOT_BUS_WIDTH_WIDTH(width));
1926
1927         if (err)
1928                 return err;
1929         return 0;
1930 }
1931
1932 /*
1933  * Modify EXT_CSD[179] which is PARTITION_CONFIG (formerly BOOT_CONFIG)
1934  * based on the passed in values for BOOT_ACK, BOOT_PARTITION_ENABLE and
1935  * PARTITION_ACCESS.
1936  *
1937  * Returns 0 on success.
1938  */
1939 int mmc_set_part_conf(struct mmc *mmc, u8 ack, u8 part_num, u8 access)
1940 {
1941         int err;
1942
1943         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF,
1944                          EXT_CSD_BOOT_ACK(ack) |
1945                          EXT_CSD_BOOT_PART_NUM(part_num) |
1946                          EXT_CSD_PARTITION_ACCESS(access));
1947
1948         if (err)
1949                 return err;
1950         return 0;
1951 }
1952
1953 /*
1954  * Modify EXT_CSD[162] which is RST_n_FUNCTION based on the given value
1955  * for enable.  Note that this is a write-once field for non-zero values.
1956  *
1957  * Returns 0 on success.
1958  */
1959 int mmc_set_rst_n_function(struct mmc *mmc, u8 enable)
1960 {
1961         return mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_RST_N_FUNCTION,
1962                           enable);
1963 }
1964 #endif
1965
1966 #ifdef CONFIG_BLK
1967 static const struct blk_ops mmc_blk_ops = {
1968         .read   = mmc_bread,
1969         .write  = mmc_bwrite,
1970         .select_hwpart  = mmc_select_hwpart,
1971 };
1972
1973 U_BOOT_DRIVER(mmc_blk) = {
1974         .name           = "mmc_blk",
1975         .id             = UCLASS_BLK,
1976         .ops            = &mmc_blk_ops,
1977 };
1978 #else
1979 U_BOOT_LEGACY_BLK(mmc) = {
1980         .if_typename    = "mmc",
1981         .if_type        = IF_TYPE_MMC,
1982         .max_devs       = -1,
1983         .get_dev        = mmc_get_dev,
1984         .select_hwpart  = mmc_select_hwpartp,
1985 };
1986 #endif