]> git.sur5r.net Git - u-boot/blob - drivers/mmc/mmc.c
powerpc:t4240: MAC9 and MAC10 should not be identified as 1G interface in some case
[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 static struct list_head mmc_devices;
25 static int cur_dev_num = -1;
26
27 __weak int board_mmc_getwp(struct mmc *mmc)
28 {
29         return -1;
30 }
31
32 int mmc_getwp(struct mmc *mmc)
33 {
34         int wp;
35
36         wp = board_mmc_getwp(mmc);
37
38         if (wp < 0) {
39                 if (mmc->cfg->ops->getwp)
40                         wp = mmc->cfg->ops->getwp(mmc);
41                 else
42                         wp = 0;
43         }
44
45         return wp;
46 }
47
48 __weak int board_mmc_getcd(struct mmc *mmc)
49 {
50         return -1;
51 }
52
53 int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
54 {
55         int ret;
56
57 #ifdef CONFIG_MMC_TRACE
58         int i;
59         u8 *ptr;
60
61         printf("CMD_SEND:%d\n", cmd->cmdidx);
62         printf("\t\tARG\t\t\t 0x%08X\n", cmd->cmdarg);
63         ret = mmc->cfg->ops->send_cmd(mmc, cmd, data);
64         if (ret) {
65                 printf("\t\tRET\t\t\t %d\n", ret);
66         } else {
67                 switch (cmd->resp_type) {
68                 case MMC_RSP_NONE:
69                         printf("\t\tMMC_RSP_NONE\n");
70                         break;
71                 case MMC_RSP_R1:
72                         printf("\t\tMMC_RSP_R1,5,6,7 \t 0x%08X \n",
73                                 cmd->response[0]);
74                         break;
75                 case MMC_RSP_R1b:
76                         printf("\t\tMMC_RSP_R1b\t\t 0x%08X \n",
77                                 cmd->response[0]);
78                         break;
79                 case MMC_RSP_R2:
80                         printf("\t\tMMC_RSP_R2\t\t 0x%08X \n",
81                                 cmd->response[0]);
82                         printf("\t\t          \t\t 0x%08X \n",
83                                 cmd->response[1]);
84                         printf("\t\t          \t\t 0x%08X \n",
85                                 cmd->response[2]);
86                         printf("\t\t          \t\t 0x%08X \n",
87                                 cmd->response[3]);
88                         printf("\n");
89                         printf("\t\t\t\t\tDUMPING DATA\n");
90                         for (i = 0; i < 4; i++) {
91                                 int j;
92                                 printf("\t\t\t\t\t%03d - ", i*4);
93                                 ptr = (u8 *)&cmd->response[i];
94                                 ptr += 3;
95                                 for (j = 0; j < 4; j++)
96                                         printf("%02X ", *ptr--);
97                                 printf("\n");
98                         }
99                         break;
100                 case MMC_RSP_R3:
101                         printf("\t\tMMC_RSP_R3,4\t\t 0x%08X \n",
102                                 cmd->response[0]);
103                         break;
104                 default:
105                         printf("\t\tERROR MMC rsp not supported\n");
106                         break;
107                 }
108         }
109 #else
110         ret = mmc->cfg->ops->send_cmd(mmc, cmd, data);
111 #endif
112         return ret;
113 }
114
115 int mmc_send_status(struct mmc *mmc, int timeout)
116 {
117         struct mmc_cmd cmd;
118         int err, retries = 5;
119 #ifdef CONFIG_MMC_TRACE
120         int status;
121 #endif
122
123         cmd.cmdidx = MMC_CMD_SEND_STATUS;
124         cmd.resp_type = MMC_RSP_R1;
125         if (!mmc_host_is_spi(mmc))
126                 cmd.cmdarg = mmc->rca << 16;
127
128         while (1) {
129                 err = mmc_send_cmd(mmc, &cmd, NULL);
130                 if (!err) {
131                         if ((cmd.response[0] & MMC_STATUS_RDY_FOR_DATA) &&
132                             (cmd.response[0] & MMC_STATUS_CURR_STATE) !=
133                              MMC_STATE_PRG)
134                                 break;
135                         else if (cmd.response[0] & MMC_STATUS_MASK) {
136 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
137                                 printf("Status Error: 0x%08X\n",
138                                         cmd.response[0]);
139 #endif
140                                 return COMM_ERR;
141                         }
142                 } else if (--retries < 0)
143                         return err;
144
145                 if (timeout-- <= 0)
146                         break;
147
148                 udelay(1000);
149         }
150
151 #ifdef CONFIG_MMC_TRACE
152         status = (cmd.response[0] & MMC_STATUS_CURR_STATE) >> 9;
153         printf("CURR STATE:%d\n", status);
154 #endif
155         if (timeout <= 0) {
156 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
157                 printf("Timeout waiting card ready\n");
158 #endif
159                 return TIMEOUT;
160         }
161         if (cmd.response[0] & MMC_STATUS_SWITCH_ERROR)
162                 return SWITCH_ERR;
163
164         return 0;
165 }
166
167 int mmc_set_blocklen(struct mmc *mmc, int len)
168 {
169         struct mmc_cmd cmd;
170
171         if (mmc->ddr_mode)
172                 return 0;
173
174         cmd.cmdidx = MMC_CMD_SET_BLOCKLEN;
175         cmd.resp_type = MMC_RSP_R1;
176         cmd.cmdarg = len;
177
178         return mmc_send_cmd(mmc, &cmd, NULL);
179 }
180
181 struct mmc *find_mmc_device(int dev_num)
182 {
183         struct mmc *m;
184         struct list_head *entry;
185
186         list_for_each(entry, &mmc_devices) {
187                 m = list_entry(entry, struct mmc, link);
188
189                 if (m->block_dev.devnum == dev_num)
190                         return m;
191         }
192
193 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
194         printf("MMC Device %d not found\n", dev_num);
195 #endif
196
197         return NULL;
198 }
199
200 static int mmc_read_blocks(struct mmc *mmc, void *dst, lbaint_t start,
201                            lbaint_t blkcnt)
202 {
203         struct mmc_cmd cmd;
204         struct mmc_data data;
205
206         if (blkcnt > 1)
207                 cmd.cmdidx = MMC_CMD_READ_MULTIPLE_BLOCK;
208         else
209                 cmd.cmdidx = MMC_CMD_READ_SINGLE_BLOCK;
210
211         if (mmc->high_capacity)
212                 cmd.cmdarg = start;
213         else
214                 cmd.cmdarg = start * mmc->read_bl_len;
215
216         cmd.resp_type = MMC_RSP_R1;
217
218         data.dest = dst;
219         data.blocks = blkcnt;
220         data.blocksize = mmc->read_bl_len;
221         data.flags = MMC_DATA_READ;
222
223         if (mmc_send_cmd(mmc, &cmd, &data))
224                 return 0;
225
226         if (blkcnt > 1) {
227                 cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
228                 cmd.cmdarg = 0;
229                 cmd.resp_type = MMC_RSP_R1b;
230                 if (mmc_send_cmd(mmc, &cmd, NULL)) {
231 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
232                         printf("mmc fail to send stop cmd\n");
233 #endif
234                         return 0;
235                 }
236         }
237
238         return blkcnt;
239 }
240
241 static ulong mmc_bread(struct blk_desc *block_dev, lbaint_t start,
242                        lbaint_t blkcnt, void *dst)
243 {
244         int dev_num = block_dev->devnum;
245         int err;
246         lbaint_t cur, blocks_todo = blkcnt;
247
248         if (blkcnt == 0)
249                 return 0;
250
251         struct mmc *mmc = find_mmc_device(dev_num);
252         if (!mmc)
253                 return 0;
254
255         err = mmc_select_hwpart(dev_num, block_dev->hwpart);
256         if (err < 0)
257                 return 0;
258
259         if ((start + blkcnt) > mmc->block_dev.lba) {
260 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
261                 printf("MMC: block number 0x" LBAF " exceeds max(0x" LBAF ")\n",
262                         start + blkcnt, mmc->block_dev.lba);
263 #endif
264                 return 0;
265         }
266
267         if (mmc_set_blocklen(mmc, mmc->read_bl_len)) {
268                 debug("%s: Failed to set blocklen\n", __func__);
269                 return 0;
270         }
271
272         do {
273                 cur = (blocks_todo > mmc->cfg->b_max) ?
274                         mmc->cfg->b_max : blocks_todo;
275                 if (mmc_read_blocks(mmc, dst, start, cur) != cur) {
276                         debug("%s: Failed to read blocks\n", __func__);
277                         return 0;
278                 }
279                 blocks_todo -= cur;
280                 start += cur;
281                 dst += cur * mmc->read_bl_len;
282         } while (blocks_todo > 0);
283
284         return blkcnt;
285 }
286
287 static int mmc_go_idle(struct mmc *mmc)
288 {
289         struct mmc_cmd cmd;
290         int err;
291
292         udelay(1000);
293
294         cmd.cmdidx = MMC_CMD_GO_IDLE_STATE;
295         cmd.cmdarg = 0;
296         cmd.resp_type = MMC_RSP_NONE;
297
298         err = mmc_send_cmd(mmc, &cmd, NULL);
299
300         if (err)
301                 return err;
302
303         udelay(2000);
304
305         return 0;
306 }
307
308 static int sd_send_op_cond(struct mmc *mmc)
309 {
310         int timeout = 1000;
311         int err;
312         struct mmc_cmd cmd;
313
314         while (1) {
315                 cmd.cmdidx = MMC_CMD_APP_CMD;
316                 cmd.resp_type = MMC_RSP_R1;
317                 cmd.cmdarg = 0;
318
319                 err = mmc_send_cmd(mmc, &cmd, NULL);
320
321                 if (err)
322                         return err;
323
324                 cmd.cmdidx = SD_CMD_APP_SEND_OP_COND;
325                 cmd.resp_type = MMC_RSP_R3;
326
327                 /*
328                  * Most cards do not answer if some reserved bits
329                  * in the ocr are set. However, Some controller
330                  * can set bit 7 (reserved for low voltages), but
331                  * how to manage low voltages SD card is not yet
332                  * specified.
333                  */
334                 cmd.cmdarg = mmc_host_is_spi(mmc) ? 0 :
335                         (mmc->cfg->voltages & 0xff8000);
336
337                 if (mmc->version == SD_VERSION_2)
338                         cmd.cmdarg |= OCR_HCS;
339
340                 err = mmc_send_cmd(mmc, &cmd, NULL);
341
342                 if (err)
343                         return err;
344
345                 if (cmd.response[0] & OCR_BUSY)
346                         break;
347
348                 if (timeout-- <= 0)
349                         return UNUSABLE_ERR;
350
351                 udelay(1000);
352         }
353
354         if (mmc->version != SD_VERSION_2)
355                 mmc->version = SD_VERSION_1_0;
356
357         if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
358                 cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
359                 cmd.resp_type = MMC_RSP_R3;
360                 cmd.cmdarg = 0;
361
362                 err = mmc_send_cmd(mmc, &cmd, NULL);
363
364                 if (err)
365                         return err;
366         }
367
368         mmc->ocr = cmd.response[0];
369
370         mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
371         mmc->rca = 0;
372
373         return 0;
374 }
375
376 static int mmc_send_op_cond_iter(struct mmc *mmc, int use_arg)
377 {
378         struct mmc_cmd cmd;
379         int err;
380
381         cmd.cmdidx = MMC_CMD_SEND_OP_COND;
382         cmd.resp_type = MMC_RSP_R3;
383         cmd.cmdarg = 0;
384         if (use_arg && !mmc_host_is_spi(mmc))
385                 cmd.cmdarg = OCR_HCS |
386                         (mmc->cfg->voltages &
387                         (mmc->ocr & OCR_VOLTAGE_MASK)) |
388                         (mmc->ocr & OCR_ACCESS_MODE);
389
390         err = mmc_send_cmd(mmc, &cmd, NULL);
391         if (err)
392                 return err;
393         mmc->ocr = cmd.response[0];
394         return 0;
395 }
396
397 static int mmc_send_op_cond(struct mmc *mmc)
398 {
399         int err, i;
400
401         /* Some cards seem to need this */
402         mmc_go_idle(mmc);
403
404         /* Asking to the card its capabilities */
405         for (i = 0; i < 2; i++) {
406                 err = mmc_send_op_cond_iter(mmc, i != 0);
407                 if (err)
408                         return err;
409
410                 /* exit if not busy (flag seems to be inverted) */
411                 if (mmc->ocr & OCR_BUSY)
412                         break;
413         }
414         mmc->op_cond_pending = 1;
415         return 0;
416 }
417
418 static int mmc_complete_op_cond(struct mmc *mmc)
419 {
420         struct mmc_cmd cmd;
421         int timeout = 1000;
422         uint start;
423         int err;
424
425         mmc->op_cond_pending = 0;
426         if (!(mmc->ocr & OCR_BUSY)) {
427                 start = get_timer(0);
428                 while (1) {
429                         err = mmc_send_op_cond_iter(mmc, 1);
430                         if (err)
431                                 return err;
432                         if (mmc->ocr & OCR_BUSY)
433                                 break;
434                         if (get_timer(start) > timeout)
435                                 return UNUSABLE_ERR;
436                         udelay(100);
437                 }
438         }
439
440         if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
441                 cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
442                 cmd.resp_type = MMC_RSP_R3;
443                 cmd.cmdarg = 0;
444
445                 err = mmc_send_cmd(mmc, &cmd, NULL);
446
447                 if (err)
448                         return err;
449
450                 mmc->ocr = cmd.response[0];
451         }
452
453         mmc->version = MMC_VERSION_UNKNOWN;
454
455         mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
456         mmc->rca = 1;
457
458         return 0;
459 }
460
461
462 static int mmc_send_ext_csd(struct mmc *mmc, u8 *ext_csd)
463 {
464         struct mmc_cmd cmd;
465         struct mmc_data data;
466         int err;
467
468         /* Get the Card Status Register */
469         cmd.cmdidx = MMC_CMD_SEND_EXT_CSD;
470         cmd.resp_type = MMC_RSP_R1;
471         cmd.cmdarg = 0;
472
473         data.dest = (char *)ext_csd;
474         data.blocks = 1;
475         data.blocksize = MMC_MAX_BLOCK_LEN;
476         data.flags = MMC_DATA_READ;
477
478         err = mmc_send_cmd(mmc, &cmd, &data);
479
480         return err;
481 }
482
483
484 static int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)
485 {
486         struct mmc_cmd cmd;
487         int timeout = 1000;
488         int ret;
489
490         cmd.cmdidx = MMC_CMD_SWITCH;
491         cmd.resp_type = MMC_RSP_R1b;
492         cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
493                                  (index << 16) |
494                                  (value << 8);
495
496         ret = mmc_send_cmd(mmc, &cmd, NULL);
497
498         /* Waiting for the ready status */
499         if (!ret)
500                 ret = mmc_send_status(mmc, timeout);
501
502         return ret;
503
504 }
505
506 static int mmc_change_freq(struct mmc *mmc)
507 {
508         ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
509         char cardtype;
510         int err;
511
512         mmc->card_caps = 0;
513
514         if (mmc_host_is_spi(mmc))
515                 return 0;
516
517         /* Only version 4 supports high-speed */
518         if (mmc->version < MMC_VERSION_4)
519                 return 0;
520
521         mmc->card_caps |= MMC_MODE_4BIT | MMC_MODE_8BIT;
522
523         err = mmc_send_ext_csd(mmc, ext_csd);
524
525         if (err)
526                 return err;
527
528         cardtype = ext_csd[EXT_CSD_CARD_TYPE] & 0xf;
529
530         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING, 1);
531
532         if (err)
533                 return err == SWITCH_ERR ? 0 : err;
534
535         /* Now check to see that it worked */
536         err = mmc_send_ext_csd(mmc, ext_csd);
537
538         if (err)
539                 return err;
540
541         /* No high-speed support */
542         if (!ext_csd[EXT_CSD_HS_TIMING])
543                 return 0;
544
545         /* High Speed is set, there are two types: 52MHz and 26MHz */
546         if (cardtype & EXT_CSD_CARD_TYPE_52) {
547                 if (cardtype & EXT_CSD_CARD_TYPE_DDR_1_8V)
548                         mmc->card_caps |= MMC_MODE_DDR_52MHz;
549                 mmc->card_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
550         } else {
551                 mmc->card_caps |= MMC_MODE_HS;
552         }
553
554         return 0;
555 }
556
557 static int mmc_set_capacity(struct mmc *mmc, int part_num)
558 {
559         switch (part_num) {
560         case 0:
561                 mmc->capacity = mmc->capacity_user;
562                 break;
563         case 1:
564         case 2:
565                 mmc->capacity = mmc->capacity_boot;
566                 break;
567         case 3:
568                 mmc->capacity = mmc->capacity_rpmb;
569                 break;
570         case 4:
571         case 5:
572         case 6:
573         case 7:
574                 mmc->capacity = mmc->capacity_gp[part_num - 4];
575                 break;
576         default:
577                 return -1;
578         }
579
580         mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);
581
582         return 0;
583 }
584
585 int mmc_select_hwpart(int dev_num, int hwpart)
586 {
587         struct mmc *mmc = find_mmc_device(dev_num);
588         int ret;
589
590         if (!mmc)
591                 return -ENODEV;
592
593         if (mmc->block_dev.hwpart == hwpart)
594                 return 0;
595
596         if (mmc->part_config == MMCPART_NOAVAILABLE) {
597                 printf("Card doesn't support part_switch\n");
598                 return -EMEDIUMTYPE;
599         }
600
601         ret = mmc_switch_part(dev_num, hwpart);
602         if (ret)
603                 return ret;
604
605         return 0;
606 }
607
608
609 int mmc_switch_part(int dev_num, unsigned int part_num)
610 {
611         struct mmc *mmc = find_mmc_device(dev_num);
612         int ret;
613
614         if (!mmc)
615                 return -1;
616
617         ret = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF,
618                          (mmc->part_config & ~PART_ACCESS_MASK)
619                          | (part_num & PART_ACCESS_MASK));
620
621         /*
622          * Set the capacity if the switch succeeded or was intended
623          * to return to representing the raw device.
624          */
625         if ((ret == 0) || ((ret == -ENODEV) && (part_num == 0))) {
626                 ret = mmc_set_capacity(mmc, part_num);
627                 mmc->block_dev.hwpart = part_num;
628         }
629
630         return ret;
631 }
632
633 int mmc_hwpart_config(struct mmc *mmc,
634                       const struct mmc_hwpart_conf *conf,
635                       enum mmc_hwpart_conf_mode mode)
636 {
637         u8 part_attrs = 0;
638         u32 enh_size_mult;
639         u32 enh_start_addr;
640         u32 gp_size_mult[4];
641         u32 max_enh_size_mult;
642         u32 tot_enh_size_mult = 0;
643         u8 wr_rel_set;
644         int i, pidx, err;
645         ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
646
647         if (mode < MMC_HWPART_CONF_CHECK || mode > MMC_HWPART_CONF_COMPLETE)
648                 return -EINVAL;
649
650         if (IS_SD(mmc) || (mmc->version < MMC_VERSION_4_41)) {
651                 printf("eMMC >= 4.4 required for enhanced user data area\n");
652                 return -EMEDIUMTYPE;
653         }
654
655         if (!(mmc->part_support & PART_SUPPORT)) {
656                 printf("Card does not support partitioning\n");
657                 return -EMEDIUMTYPE;
658         }
659
660         if (!mmc->hc_wp_grp_size) {
661                 printf("Card does not define HC WP group size\n");
662                 return -EMEDIUMTYPE;
663         }
664
665         /* check partition alignment and total enhanced size */
666         if (conf->user.enh_size) {
667                 if (conf->user.enh_size % mmc->hc_wp_grp_size ||
668                     conf->user.enh_start % mmc->hc_wp_grp_size) {
669                         printf("User data enhanced area not HC WP group "
670                                "size aligned\n");
671                         return -EINVAL;
672                 }
673                 part_attrs |= EXT_CSD_ENH_USR;
674                 enh_size_mult = conf->user.enh_size / mmc->hc_wp_grp_size;
675                 if (mmc->high_capacity) {
676                         enh_start_addr = conf->user.enh_start;
677                 } else {
678                         enh_start_addr = (conf->user.enh_start << 9);
679                 }
680         } else {
681                 enh_size_mult = 0;
682                 enh_start_addr = 0;
683         }
684         tot_enh_size_mult += enh_size_mult;
685
686         for (pidx = 0; pidx < 4; pidx++) {
687                 if (conf->gp_part[pidx].size % mmc->hc_wp_grp_size) {
688                         printf("GP%i partition not HC WP group size "
689                                "aligned\n", pidx+1);
690                         return -EINVAL;
691                 }
692                 gp_size_mult[pidx] = conf->gp_part[pidx].size / mmc->hc_wp_grp_size;
693                 if (conf->gp_part[pidx].size && conf->gp_part[pidx].enhanced) {
694                         part_attrs |= EXT_CSD_ENH_GP(pidx);
695                         tot_enh_size_mult += gp_size_mult[pidx];
696                 }
697         }
698
699         if (part_attrs && ! (mmc->part_support & ENHNCD_SUPPORT)) {
700                 printf("Card does not support enhanced attribute\n");
701                 return -EMEDIUMTYPE;
702         }
703
704         err = mmc_send_ext_csd(mmc, ext_csd);
705         if (err)
706                 return err;
707
708         max_enh_size_mult =
709                 (ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT+2] << 16) +
710                 (ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT+1] << 8) +
711                 ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT];
712         if (tot_enh_size_mult > max_enh_size_mult) {
713                 printf("Total enhanced size exceeds maximum (%u > %u)\n",
714                        tot_enh_size_mult, max_enh_size_mult);
715                 return -EMEDIUMTYPE;
716         }
717
718         /* The default value of EXT_CSD_WR_REL_SET is device
719          * dependent, the values can only be changed if the
720          * EXT_CSD_HS_CTRL_REL bit is set. The values can be
721          * changed only once and before partitioning is completed. */
722         wr_rel_set = ext_csd[EXT_CSD_WR_REL_SET];
723         if (conf->user.wr_rel_change) {
724                 if (conf->user.wr_rel_set)
725                         wr_rel_set |= EXT_CSD_WR_DATA_REL_USR;
726                 else
727                         wr_rel_set &= ~EXT_CSD_WR_DATA_REL_USR;
728         }
729         for (pidx = 0; pidx < 4; pidx++) {
730                 if (conf->gp_part[pidx].wr_rel_change) {
731                         if (conf->gp_part[pidx].wr_rel_set)
732                                 wr_rel_set |= EXT_CSD_WR_DATA_REL_GP(pidx);
733                         else
734                                 wr_rel_set &= ~EXT_CSD_WR_DATA_REL_GP(pidx);
735                 }
736         }
737
738         if (wr_rel_set != ext_csd[EXT_CSD_WR_REL_SET] &&
739             !(ext_csd[EXT_CSD_WR_REL_PARAM] & EXT_CSD_HS_CTRL_REL)) {
740                 puts("Card does not support host controlled partition write "
741                      "reliability settings\n");
742                 return -EMEDIUMTYPE;
743         }
744
745         if (ext_csd[EXT_CSD_PARTITION_SETTING] &
746             EXT_CSD_PARTITION_SETTING_COMPLETED) {
747                 printf("Card already partitioned\n");
748                 return -EPERM;
749         }
750
751         if (mode == MMC_HWPART_CONF_CHECK)
752                 return 0;
753
754         /* Partitioning requires high-capacity size definitions */
755         if (!(ext_csd[EXT_CSD_ERASE_GROUP_DEF] & 0x01)) {
756                 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
757                                  EXT_CSD_ERASE_GROUP_DEF, 1);
758
759                 if (err)
760                         return err;
761
762                 ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1;
763
764                 /* update erase group size to be high-capacity */
765                 mmc->erase_grp_size =
766                         ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 1024;
767
768         }
769
770         /* all OK, write the configuration */
771         for (i = 0; i < 4; i++) {
772                 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
773                                  EXT_CSD_ENH_START_ADDR+i,
774                                  (enh_start_addr >> (i*8)) & 0xFF);
775                 if (err)
776                         return err;
777         }
778         for (i = 0; i < 3; i++) {
779                 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
780                                  EXT_CSD_ENH_SIZE_MULT+i,
781                                  (enh_size_mult >> (i*8)) & 0xFF);
782                 if (err)
783                         return err;
784         }
785         for (pidx = 0; pidx < 4; pidx++) {
786                 for (i = 0; i < 3; i++) {
787                         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
788                                          EXT_CSD_GP_SIZE_MULT+pidx*3+i,
789                                          (gp_size_mult[pidx] >> (i*8)) & 0xFF);
790                         if (err)
791                                 return err;
792                 }
793         }
794         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
795                          EXT_CSD_PARTITIONS_ATTRIBUTE, part_attrs);
796         if (err)
797                 return err;
798
799         if (mode == MMC_HWPART_CONF_SET)
800                 return 0;
801
802         /* The WR_REL_SET is a write-once register but shall be
803          * written before setting PART_SETTING_COMPLETED. As it is
804          * write-once we can only write it when completing the
805          * partitioning. */
806         if (wr_rel_set != ext_csd[EXT_CSD_WR_REL_SET]) {
807                 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
808                                  EXT_CSD_WR_REL_SET, wr_rel_set);
809                 if (err)
810                         return err;
811         }
812
813         /* Setting PART_SETTING_COMPLETED confirms the partition
814          * configuration but it only becomes effective after power
815          * cycle, so we do not adjust the partition related settings
816          * in the mmc struct. */
817
818         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
819                          EXT_CSD_PARTITION_SETTING,
820                          EXT_CSD_PARTITION_SETTING_COMPLETED);
821         if (err)
822                 return err;
823
824         return 0;
825 }
826
827 int mmc_getcd(struct mmc *mmc)
828 {
829         int cd;
830
831         cd = board_mmc_getcd(mmc);
832
833         if (cd < 0) {
834                 if (mmc->cfg->ops->getcd)
835                         cd = mmc->cfg->ops->getcd(mmc);
836                 else
837                         cd = 1;
838         }
839
840         return cd;
841 }
842
843 static int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)
844 {
845         struct mmc_cmd cmd;
846         struct mmc_data data;
847
848         /* Switch the frequency */
849         cmd.cmdidx = SD_CMD_SWITCH_FUNC;
850         cmd.resp_type = MMC_RSP_R1;
851         cmd.cmdarg = (mode << 31) | 0xffffff;
852         cmd.cmdarg &= ~(0xf << (group * 4));
853         cmd.cmdarg |= value << (group * 4);
854
855         data.dest = (char *)resp;
856         data.blocksize = 64;
857         data.blocks = 1;
858         data.flags = MMC_DATA_READ;
859
860         return mmc_send_cmd(mmc, &cmd, &data);
861 }
862
863
864 static int sd_change_freq(struct mmc *mmc)
865 {
866         int err;
867         struct mmc_cmd cmd;
868         ALLOC_CACHE_ALIGN_BUFFER(uint, scr, 2);
869         ALLOC_CACHE_ALIGN_BUFFER(uint, switch_status, 16);
870         struct mmc_data data;
871         int timeout;
872
873         mmc->card_caps = 0;
874
875         if (mmc_host_is_spi(mmc))
876                 return 0;
877
878         /* Read the SCR to find out if this card supports higher speeds */
879         cmd.cmdidx = MMC_CMD_APP_CMD;
880         cmd.resp_type = MMC_RSP_R1;
881         cmd.cmdarg = mmc->rca << 16;
882
883         err = mmc_send_cmd(mmc, &cmd, NULL);
884
885         if (err)
886                 return err;
887
888         cmd.cmdidx = SD_CMD_APP_SEND_SCR;
889         cmd.resp_type = MMC_RSP_R1;
890         cmd.cmdarg = 0;
891
892         timeout = 3;
893
894 retry_scr:
895         data.dest = (char *)scr;
896         data.blocksize = 8;
897         data.blocks = 1;
898         data.flags = MMC_DATA_READ;
899
900         err = mmc_send_cmd(mmc, &cmd, &data);
901
902         if (err) {
903                 if (timeout--)
904                         goto retry_scr;
905
906                 return err;
907         }
908
909         mmc->scr[0] = __be32_to_cpu(scr[0]);
910         mmc->scr[1] = __be32_to_cpu(scr[1]);
911
912         switch ((mmc->scr[0] >> 24) & 0xf) {
913         case 0:
914                 mmc->version = SD_VERSION_1_0;
915                 break;
916         case 1:
917                 mmc->version = SD_VERSION_1_10;
918                 break;
919         case 2:
920                 mmc->version = SD_VERSION_2;
921                 if ((mmc->scr[0] >> 15) & 0x1)
922                         mmc->version = SD_VERSION_3;
923                 break;
924         default:
925                 mmc->version = SD_VERSION_1_0;
926                 break;
927         }
928
929         if (mmc->scr[0] & SD_DATA_4BIT)
930                 mmc->card_caps |= MMC_MODE_4BIT;
931
932         /* Version 1.0 doesn't support switching */
933         if (mmc->version == SD_VERSION_1_0)
934                 return 0;
935
936         timeout = 4;
937         while (timeout--) {
938                 err = sd_switch(mmc, SD_SWITCH_CHECK, 0, 1,
939                                 (u8 *)switch_status);
940
941                 if (err)
942                         return err;
943
944                 /* The high-speed function is busy.  Try again */
945                 if (!(__be32_to_cpu(switch_status[7]) & SD_HIGHSPEED_BUSY))
946                         break;
947         }
948
949         /* If high-speed isn't supported, we return */
950         if (!(__be32_to_cpu(switch_status[3]) & SD_HIGHSPEED_SUPPORTED))
951                 return 0;
952
953         /*
954          * If the host doesn't support SD_HIGHSPEED, do not switch card to
955          * HIGHSPEED mode even if the card support SD_HIGHSPPED.
956          * This can avoid furthur problem when the card runs in different
957          * mode between the host.
958          */
959         if (!((mmc->cfg->host_caps & MMC_MODE_HS_52MHz) &&
960                 (mmc->cfg->host_caps & MMC_MODE_HS)))
961                 return 0;
962
963         err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, 1, (u8 *)switch_status);
964
965         if (err)
966                 return err;
967
968         if ((__be32_to_cpu(switch_status[4]) & 0x0f000000) == 0x01000000)
969                 mmc->card_caps |= MMC_MODE_HS;
970
971         return 0;
972 }
973
974 /* frequency bases */
975 /* divided by 10 to be nice to platforms without floating point */
976 static const int fbase[] = {
977         10000,
978         100000,
979         1000000,
980         10000000,
981 };
982
983 /* Multiplier values for TRAN_SPEED.  Multiplied by 10 to be nice
984  * to platforms without floating point.
985  */
986 static const int multipliers[] = {
987         0,      /* reserved */
988         10,
989         12,
990         13,
991         15,
992         20,
993         25,
994         30,
995         35,
996         40,
997         45,
998         50,
999         55,
1000         60,
1001         70,
1002         80,
1003 };
1004
1005 static void mmc_set_ios(struct mmc *mmc)
1006 {
1007         if (mmc->cfg->ops->set_ios)
1008                 mmc->cfg->ops->set_ios(mmc);
1009 }
1010
1011 void mmc_set_clock(struct mmc *mmc, uint clock)
1012 {
1013         if (clock > mmc->cfg->f_max)
1014                 clock = mmc->cfg->f_max;
1015
1016         if (clock < mmc->cfg->f_min)
1017                 clock = mmc->cfg->f_min;
1018
1019         mmc->clock = clock;
1020
1021         mmc_set_ios(mmc);
1022 }
1023
1024 static void mmc_set_bus_width(struct mmc *mmc, uint width)
1025 {
1026         mmc->bus_width = width;
1027
1028         mmc_set_ios(mmc);
1029 }
1030
1031 static int mmc_startup(struct mmc *mmc)
1032 {
1033         int err, i;
1034         uint mult, freq;
1035         u64 cmult, csize, capacity;
1036         struct mmc_cmd cmd;
1037         ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
1038         ALLOC_CACHE_ALIGN_BUFFER(u8, test_csd, MMC_MAX_BLOCK_LEN);
1039         int timeout = 1000;
1040         bool has_parts = false;
1041         bool part_completed;
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->block_dev.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         mmc->block_dev.lun = 0;
1479         mmc->block_dev.hwpart = 0;
1480         mmc->block_dev.type = 0;
1481         mmc->block_dev.blksz = mmc->read_bl_len;
1482         mmc->block_dev.log2blksz = LOG2(mmc->block_dev.blksz);
1483         mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);
1484 #if !defined(CONFIG_SPL_BUILD) || \
1485                 (defined(CONFIG_SPL_LIBCOMMON_SUPPORT) && \
1486                 !defined(CONFIG_USE_TINY_PRINTF))
1487         sprintf(mmc->block_dev.vendor, "Man %06x Snr %04x%04x",
1488                 mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff),
1489                 (mmc->cid[3] >> 16) & 0xffff);
1490         sprintf(mmc->block_dev.product, "%c%c%c%c%c%c", mmc->cid[0] & 0xff,
1491                 (mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
1492                 (mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff,
1493                 (mmc->cid[2] >> 24) & 0xff);
1494         sprintf(mmc->block_dev.revision, "%d.%d", (mmc->cid[2] >> 20) & 0xf,
1495                 (mmc->cid[2] >> 16) & 0xf);
1496 #else
1497         mmc->block_dev.vendor[0] = 0;
1498         mmc->block_dev.product[0] = 0;
1499         mmc->block_dev.revision[0] = 0;
1500 #endif
1501 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBDISK_SUPPORT)
1502         part_init(&mmc->block_dev);
1503 #endif
1504
1505         return 0;
1506 }
1507
1508 static int mmc_send_if_cond(struct mmc *mmc)
1509 {
1510         struct mmc_cmd cmd;
1511         int err;
1512
1513         cmd.cmdidx = SD_CMD_SEND_IF_COND;
1514         /* We set the bit if the host supports voltages between 2.7 and 3.6 V */
1515         cmd.cmdarg = ((mmc->cfg->voltages & 0xff8000) != 0) << 8 | 0xaa;
1516         cmd.resp_type = MMC_RSP_R7;
1517
1518         err = mmc_send_cmd(mmc, &cmd, NULL);
1519
1520         if (err)
1521                 return err;
1522
1523         if ((cmd.response[0] & 0xff) != 0xaa)
1524                 return UNUSABLE_ERR;
1525         else
1526                 mmc->version = SD_VERSION_2;
1527
1528         return 0;
1529 }
1530
1531 /* not used any more */
1532 int __deprecated mmc_register(struct mmc *mmc)
1533 {
1534 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1535         printf("%s is deprecated! use mmc_create() instead.\n", __func__);
1536 #endif
1537         return -1;
1538 }
1539
1540 struct mmc *mmc_create(const struct mmc_config *cfg, void *priv)
1541 {
1542         struct mmc *mmc;
1543
1544         /* quick validation */
1545         if (cfg == NULL || cfg->ops == NULL || cfg->ops->send_cmd == NULL ||
1546                         cfg->f_min == 0 || cfg->f_max == 0 || cfg->b_max == 0)
1547                 return NULL;
1548
1549         mmc = calloc(1, sizeof(*mmc));
1550         if (mmc == NULL)
1551                 return NULL;
1552
1553         mmc->cfg = cfg;
1554         mmc->priv = priv;
1555
1556         /* the following chunk was mmc_register() */
1557
1558         /* Setup dsr related values */
1559         mmc->dsr_imp = 0;
1560         mmc->dsr = 0xffffffff;
1561         /* Setup the universal parts of the block interface just once */
1562         mmc->block_dev.if_type = IF_TYPE_MMC;
1563         mmc->block_dev.devnum = cur_dev_num++;
1564         mmc->block_dev.removable = 1;
1565         mmc->block_dev.block_read = mmc_bread;
1566         mmc->block_dev.block_write = mmc_bwrite;
1567         mmc->block_dev.block_erase = mmc_berase;
1568
1569         /* setup initial part type */
1570         mmc->block_dev.part_type = mmc->cfg->part_type;
1571
1572         INIT_LIST_HEAD(&mmc->link);
1573
1574         list_add_tail(&mmc->link, &mmc_devices);
1575
1576         return mmc;
1577 }
1578
1579 void mmc_destroy(struct mmc *mmc)
1580 {
1581         /* only freeing memory for now */
1582         free(mmc);
1583 }
1584
1585 #ifdef CONFIG_PARTITIONS
1586 struct blk_desc *mmc_get_dev(int dev)
1587 {
1588         struct mmc *mmc = find_mmc_device(dev);
1589         if (!mmc || mmc_init(mmc))
1590                 return NULL;
1591
1592         return &mmc->block_dev;
1593 }
1594 #endif
1595
1596 /* board-specific MMC power initializations. */
1597 __weak void board_mmc_power_init(void)
1598 {
1599 }
1600
1601 int mmc_start_init(struct mmc *mmc)
1602 {
1603         int err;
1604
1605         /* we pretend there's no card when init is NULL */
1606         if (mmc_getcd(mmc) == 0 || mmc->cfg->ops->init == NULL) {
1607                 mmc->has_init = 0;
1608 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1609                 printf("MMC: no card present\n");
1610 #endif
1611                 return NO_CARD_ERR;
1612         }
1613
1614         if (mmc->has_init)
1615                 return 0;
1616
1617 #ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT
1618         mmc_adapter_card_type_ident();
1619 #endif
1620         board_mmc_power_init();
1621
1622         /* made sure it's not NULL earlier */
1623         err = mmc->cfg->ops->init(mmc);
1624
1625         if (err)
1626                 return err;
1627
1628         mmc->ddr_mode = 0;
1629         mmc_set_bus_width(mmc, 1);
1630         mmc_set_clock(mmc, 1);
1631
1632         /* Reset the Card */
1633         err = mmc_go_idle(mmc);
1634
1635         if (err)
1636                 return err;
1637
1638         /* The internal partition reset to user partition(0) at every CMD0*/
1639         mmc->block_dev.hwpart = 0;
1640
1641         /* Test for SD version 2 */
1642         err = mmc_send_if_cond(mmc);
1643
1644         /* Now try to get the SD card's operating condition */
1645         err = sd_send_op_cond(mmc);
1646
1647         /* If the command timed out, we check for an MMC card */
1648         if (err == TIMEOUT) {
1649                 err = mmc_send_op_cond(mmc);
1650
1651                 if (err) {
1652 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1653                         printf("Card did not respond to voltage select!\n");
1654 #endif
1655                         return UNUSABLE_ERR;
1656                 }
1657         }
1658
1659         if (!err)
1660                 mmc->init_in_progress = 1;
1661
1662         return err;
1663 }
1664
1665 static int mmc_complete_init(struct mmc *mmc)
1666 {
1667         int err = 0;
1668
1669         mmc->init_in_progress = 0;
1670         if (mmc->op_cond_pending)
1671                 err = mmc_complete_op_cond(mmc);
1672
1673         if (!err)
1674                 err = mmc_startup(mmc);
1675         if (err)
1676                 mmc->has_init = 0;
1677         else
1678                 mmc->has_init = 1;
1679         return err;
1680 }
1681
1682 int mmc_init(struct mmc *mmc)
1683 {
1684         int err = 0;
1685         unsigned start;
1686
1687         if (mmc->has_init)
1688                 return 0;
1689
1690         start = get_timer(0);
1691
1692         if (!mmc->init_in_progress)
1693                 err = mmc_start_init(mmc);
1694
1695         if (!err)
1696                 err = mmc_complete_init(mmc);
1697         debug("%s: %d, time %lu\n", __func__, err, get_timer(start));
1698         return err;
1699 }
1700
1701 int mmc_set_dsr(struct mmc *mmc, u16 val)
1702 {
1703         mmc->dsr = val;
1704         return 0;
1705 }
1706
1707 /* CPU-specific MMC initializations */
1708 __weak int cpu_mmc_init(bd_t *bis)
1709 {
1710         return -1;
1711 }
1712
1713 /* board-specific MMC initializations. */
1714 __weak int board_mmc_init(bd_t *bis)
1715 {
1716         return -1;
1717 }
1718
1719 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1720
1721 void print_mmc_devices(char separator)
1722 {
1723         struct mmc *m;
1724         struct list_head *entry;
1725         char *mmc_type;
1726
1727         list_for_each(entry, &mmc_devices) {
1728                 m = list_entry(entry, struct mmc, link);
1729
1730                 if (m->has_init)
1731                         mmc_type = IS_SD(m) ? "SD" : "eMMC";
1732                 else
1733                         mmc_type = NULL;
1734
1735                 printf("%s: %d", m->cfg->name, m->block_dev.devnum);
1736                 if (mmc_type)
1737                         printf(" (%s)", mmc_type);
1738
1739                 if (entry->next != &mmc_devices) {
1740                         printf("%c", separator);
1741                         if (separator != '\n')
1742                                 puts (" ");
1743                 }
1744         }
1745
1746         printf("\n");
1747 }
1748
1749 #else
1750 void print_mmc_devices(char separator) { }
1751 #endif
1752
1753 int get_mmc_num(void)
1754 {
1755         return cur_dev_num;
1756 }
1757
1758 void mmc_set_preinit(struct mmc *mmc, int preinit)
1759 {
1760         mmc->preinit = preinit;
1761 }
1762
1763 static void do_preinit(void)
1764 {
1765         struct mmc *m;
1766         struct list_head *entry;
1767
1768         list_for_each(entry, &mmc_devices) {
1769                 m = list_entry(entry, struct mmc, link);
1770
1771 #ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT
1772                 mmc_set_preinit(m, 1);
1773 #endif
1774                 if (m->preinit)
1775                         mmc_start_init(m);
1776         }
1777 }
1778
1779 #if defined(CONFIG_DM_MMC) && defined(CONFIG_SPL_BUILD)
1780 static int mmc_probe(bd_t *bis)
1781 {
1782         return 0;
1783 }
1784 #elif defined(CONFIG_DM_MMC)
1785 static int mmc_probe(bd_t *bis)
1786 {
1787         int ret, i;
1788         struct uclass *uc;
1789         struct udevice *dev;
1790
1791         ret = uclass_get(UCLASS_MMC, &uc);
1792         if (ret)
1793                 return ret;
1794
1795         /*
1796          * Try to add them in sequence order. Really with driver model we
1797          * should allow holes, but the current MMC list does not allow that.
1798          * So if we request 0, 1, 3 we will get 0, 1, 2.
1799          */
1800         for (i = 0; ; i++) {
1801                 ret = uclass_get_device_by_seq(UCLASS_MMC, i, &dev);
1802                 if (ret == -ENODEV)
1803                         break;
1804         }
1805         uclass_foreach_dev(dev, uc) {
1806                 ret = device_probe(dev);
1807                 if (ret)
1808                         printf("%s - probe failed: %d\n", dev->name, ret);
1809         }
1810
1811         return 0;
1812 }
1813 #else
1814 static int mmc_probe(bd_t *bis)
1815 {
1816         if (board_mmc_init(bis) < 0)
1817                 cpu_mmc_init(bis);
1818
1819         return 0;
1820 }
1821 #endif
1822
1823 int mmc_initialize(bd_t *bis)
1824 {
1825         static int initialized = 0;
1826         int ret;
1827         if (initialized)        /* Avoid initializing mmc multiple times */
1828                 return 0;
1829         initialized = 1;
1830
1831         INIT_LIST_HEAD (&mmc_devices);
1832         cur_dev_num = 0;
1833
1834         ret = mmc_probe(bis);
1835         if (ret)
1836                 return ret;
1837
1838 #ifndef CONFIG_SPL_BUILD
1839         print_mmc_devices(',');
1840 #endif
1841
1842         do_preinit();
1843         return 0;
1844 }
1845
1846 #ifdef CONFIG_SUPPORT_EMMC_BOOT
1847 /*
1848  * This function changes the size of boot partition and the size of rpmb
1849  * partition present on EMMC devices.
1850  *
1851  * Input Parameters:
1852  * struct *mmc: pointer for the mmc device strcuture
1853  * bootsize: size of boot partition
1854  * rpmbsize: size of rpmb partition
1855  *
1856  * Returns 0 on success.
1857  */
1858
1859 int mmc_boot_partition_size_change(struct mmc *mmc, unsigned long bootsize,
1860                                 unsigned long rpmbsize)
1861 {
1862         int err;
1863         struct mmc_cmd cmd;
1864
1865         /* Only use this command for raw EMMC moviNAND. Enter backdoor mode */
1866         cmd.cmdidx = MMC_CMD_RES_MAN;
1867         cmd.resp_type = MMC_RSP_R1b;
1868         cmd.cmdarg = MMC_CMD62_ARG1;
1869
1870         err = mmc_send_cmd(mmc, &cmd, NULL);
1871         if (err) {
1872                 debug("mmc_boot_partition_size_change: Error1 = %d\n", err);
1873                 return err;
1874         }
1875
1876         /* Boot partition changing mode */
1877         cmd.cmdidx = MMC_CMD_RES_MAN;
1878         cmd.resp_type = MMC_RSP_R1b;
1879         cmd.cmdarg = MMC_CMD62_ARG2;
1880
1881         err = mmc_send_cmd(mmc, &cmd, NULL);
1882         if (err) {
1883                 debug("mmc_boot_partition_size_change: Error2 = %d\n", err);
1884                 return err;
1885         }
1886         /* boot partition size is multiple of 128KB */
1887         bootsize = (bootsize * 1024) / 128;
1888
1889         /* Arg: boot partition size */
1890         cmd.cmdidx = MMC_CMD_RES_MAN;
1891         cmd.resp_type = MMC_RSP_R1b;
1892         cmd.cmdarg = bootsize;
1893
1894         err = mmc_send_cmd(mmc, &cmd, NULL);
1895         if (err) {
1896                 debug("mmc_boot_partition_size_change: Error3 = %d\n", err);
1897                 return err;
1898         }
1899         /* RPMB partition size is multiple of 128KB */
1900         rpmbsize = (rpmbsize * 1024) / 128;
1901         /* Arg: RPMB partition size */
1902         cmd.cmdidx = MMC_CMD_RES_MAN;
1903         cmd.resp_type = MMC_RSP_R1b;
1904         cmd.cmdarg = rpmbsize;
1905
1906         err = mmc_send_cmd(mmc, &cmd, NULL);
1907         if (err) {
1908                 debug("mmc_boot_partition_size_change: Error4 = %d\n", err);
1909                 return err;
1910         }
1911         return 0;
1912 }
1913
1914 /*
1915  * Modify EXT_CSD[177] which is BOOT_BUS_WIDTH
1916  * based on the passed in values for BOOT_BUS_WIDTH, RESET_BOOT_BUS_WIDTH
1917  * and BOOT_MODE.
1918  *
1919  * Returns 0 on success.
1920  */
1921 int mmc_set_boot_bus_width(struct mmc *mmc, u8 width, u8 reset, u8 mode)
1922 {
1923         int err;
1924
1925         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BOOT_BUS_WIDTH,
1926                          EXT_CSD_BOOT_BUS_WIDTH_MODE(mode) |
1927                          EXT_CSD_BOOT_BUS_WIDTH_RESET(reset) |
1928                          EXT_CSD_BOOT_BUS_WIDTH_WIDTH(width));
1929
1930         if (err)
1931                 return err;
1932         return 0;
1933 }
1934
1935 /*
1936  * Modify EXT_CSD[179] which is PARTITION_CONFIG (formerly BOOT_CONFIG)
1937  * based on the passed in values for BOOT_ACK, BOOT_PARTITION_ENABLE and
1938  * PARTITION_ACCESS.
1939  *
1940  * Returns 0 on success.
1941  */
1942 int mmc_set_part_conf(struct mmc *mmc, u8 ack, u8 part_num, u8 access)
1943 {
1944         int err;
1945
1946         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF,
1947                          EXT_CSD_BOOT_ACK(ack) |
1948                          EXT_CSD_BOOT_PART_NUM(part_num) |
1949                          EXT_CSD_PARTITION_ACCESS(access));
1950
1951         if (err)
1952                 return err;
1953         return 0;
1954 }
1955
1956 /*
1957  * Modify EXT_CSD[162] which is RST_n_FUNCTION based on the given value
1958  * for enable.  Note that this is a write-once field for non-zero values.
1959  *
1960  * Returns 0 on success.
1961  */
1962 int mmc_set_rst_n_function(struct mmc *mmc, u8 enable)
1963 {
1964         return mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_RST_N_FUNCTION,
1965                           enable);
1966 }
1967 #endif