dm: mmc: Implement the select_hwpart() method
[oweals/u-boot.git] / drivers / mmc / mmc.c
1 /*
2  * Copyright 2008, Freescale Semiconductor, Inc
3  * Andy Fleming
4  *
5  * Based vaguely on the Linux code
6  *
7  * SPDX-License-Identifier:     GPL-2.0+
8  */
9
10 #include <config.h>
11 #include <common.h>
12 #include <command.h>
13 #include <dm.h>
14 #include <dm/device-internal.h>
15 #include <errno.h>
16 #include <mmc.h>
17 #include <part.h>
18 #include <malloc.h>
19 #include <memalign.h>
20 #include <linux/list.h>
21 #include <div64.h>
22 #include "mmc_private.h"
23
24 static struct list_head mmc_devices;
25 static int cur_dev_num = -1;
26
27 __weak int board_mmc_getwp(struct mmc *mmc)
28 {
29         return -1;
30 }
31
32 int mmc_getwp(struct mmc *mmc)
33 {
34         int wp;
35
36         wp = board_mmc_getwp(mmc);
37
38         if (wp < 0) {
39                 if (mmc->cfg->ops->getwp)
40                         wp = mmc->cfg->ops->getwp(mmc);
41                 else
42                         wp = 0;
43         }
44
45         return wp;
46 }
47
48 __weak int board_mmc_getcd(struct mmc *mmc)
49 {
50         return -1;
51 }
52
53 int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
54 {
55         int ret;
56
57 #ifdef CONFIG_MMC_TRACE
58         int i;
59         u8 *ptr;
60
61         printf("CMD_SEND:%d\n", cmd->cmdidx);
62         printf("\t\tARG\t\t\t 0x%08X\n", cmd->cmdarg);
63         ret = mmc->cfg->ops->send_cmd(mmc, cmd, data);
64         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_switch_part(int dev_num, unsigned int part_num)
586 {
587         struct mmc *mmc = find_mmc_device(dev_num);
588         int ret;
589
590         if (!mmc)
591                 return -1;
592
593         ret = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF,
594                          (mmc->part_config & ~PART_ACCESS_MASK)
595                          | (part_num & PART_ACCESS_MASK));
596
597         /*
598          * Set the capacity if the switch succeeded or was intended
599          * to return to representing the raw device.
600          */
601         if ((ret == 0) || ((ret == -ENODEV) && (part_num == 0))) {
602                 ret = mmc_set_capacity(mmc, part_num);
603                 mmc->block_dev.hwpart = part_num;
604         }
605
606         return ret;
607 }
608
609 static int mmc_select_hwpartp(struct blk_desc *desc, int hwpart)
610 {
611         struct mmc *mmc = find_mmc_device(desc->devnum);
612         int ret;
613
614         if (!mmc)
615                 return -ENODEV;
616
617         if (mmc->block_dev.hwpart == hwpart)
618                 return 0;
619
620         if (mmc->part_config == MMCPART_NOAVAILABLE)
621                 return -EMEDIUMTYPE;
622
623         ret = mmc_switch_part(desc->devnum, hwpart);
624         if (ret)
625                 return ret;
626
627         return 0;
628 }
629
630 int mmc_select_hwpart(int dev_num, int hwpart)
631 {
632         struct mmc *mmc = find_mmc_device(dev_num);
633         int ret;
634
635         if (!mmc)
636                 return -ENODEV;
637
638         if (mmc->block_dev.hwpart == hwpart)
639                 return 0;
640
641         if (mmc->part_config == MMCPART_NOAVAILABLE)
642                 return -EMEDIUMTYPE;
643
644         ret = mmc_switch_part(dev_num, hwpart);
645         if (ret)
646                 return ret;
647
648         return 0;
649 }
650
651 int mmc_hwpart_config(struct mmc *mmc,
652                       const struct mmc_hwpart_conf *conf,
653                       enum mmc_hwpart_conf_mode mode)
654 {
655         u8 part_attrs = 0;
656         u32 enh_size_mult;
657         u32 enh_start_addr;
658         u32 gp_size_mult[4];
659         u32 max_enh_size_mult;
660         u32 tot_enh_size_mult = 0;
661         u8 wr_rel_set;
662         int i, pidx, err;
663         ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
664
665         if (mode < MMC_HWPART_CONF_CHECK || mode > MMC_HWPART_CONF_COMPLETE)
666                 return -EINVAL;
667
668         if (IS_SD(mmc) || (mmc->version < MMC_VERSION_4_41)) {
669                 printf("eMMC >= 4.4 required for enhanced user data area\n");
670                 return -EMEDIUMTYPE;
671         }
672
673         if (!(mmc->part_support & PART_SUPPORT)) {
674                 printf("Card does not support partitioning\n");
675                 return -EMEDIUMTYPE;
676         }
677
678         if (!mmc->hc_wp_grp_size) {
679                 printf("Card does not define HC WP group size\n");
680                 return -EMEDIUMTYPE;
681         }
682
683         /* check partition alignment and total enhanced size */
684         if (conf->user.enh_size) {
685                 if (conf->user.enh_size % mmc->hc_wp_grp_size ||
686                     conf->user.enh_start % mmc->hc_wp_grp_size) {
687                         printf("User data enhanced area not HC WP group "
688                                "size aligned\n");
689                         return -EINVAL;
690                 }
691                 part_attrs |= EXT_CSD_ENH_USR;
692                 enh_size_mult = conf->user.enh_size / mmc->hc_wp_grp_size;
693                 if (mmc->high_capacity) {
694                         enh_start_addr = conf->user.enh_start;
695                 } else {
696                         enh_start_addr = (conf->user.enh_start << 9);
697                 }
698         } else {
699                 enh_size_mult = 0;
700                 enh_start_addr = 0;
701         }
702         tot_enh_size_mult += enh_size_mult;
703
704         for (pidx = 0; pidx < 4; pidx++) {
705                 if (conf->gp_part[pidx].size % mmc->hc_wp_grp_size) {
706                         printf("GP%i partition not HC WP group size "
707                                "aligned\n", pidx+1);
708                         return -EINVAL;
709                 }
710                 gp_size_mult[pidx] = conf->gp_part[pidx].size / mmc->hc_wp_grp_size;
711                 if (conf->gp_part[pidx].size && conf->gp_part[pidx].enhanced) {
712                         part_attrs |= EXT_CSD_ENH_GP(pidx);
713                         tot_enh_size_mult += gp_size_mult[pidx];
714                 }
715         }
716
717         if (part_attrs && ! (mmc->part_support & ENHNCD_SUPPORT)) {
718                 printf("Card does not support enhanced attribute\n");
719                 return -EMEDIUMTYPE;
720         }
721
722         err = mmc_send_ext_csd(mmc, ext_csd);
723         if (err)
724                 return err;
725
726         max_enh_size_mult =
727                 (ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT+2] << 16) +
728                 (ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT+1] << 8) +
729                 ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT];
730         if (tot_enh_size_mult > max_enh_size_mult) {
731                 printf("Total enhanced size exceeds maximum (%u > %u)\n",
732                        tot_enh_size_mult, max_enh_size_mult);
733                 return -EMEDIUMTYPE;
734         }
735
736         /* The default value of EXT_CSD_WR_REL_SET is device
737          * dependent, the values can only be changed if the
738          * EXT_CSD_HS_CTRL_REL bit is set. The values can be
739          * changed only once and before partitioning is completed. */
740         wr_rel_set = ext_csd[EXT_CSD_WR_REL_SET];
741         if (conf->user.wr_rel_change) {
742                 if (conf->user.wr_rel_set)
743                         wr_rel_set |= EXT_CSD_WR_DATA_REL_USR;
744                 else
745                         wr_rel_set &= ~EXT_CSD_WR_DATA_REL_USR;
746         }
747         for (pidx = 0; pidx < 4; pidx++) {
748                 if (conf->gp_part[pidx].wr_rel_change) {
749                         if (conf->gp_part[pidx].wr_rel_set)
750                                 wr_rel_set |= EXT_CSD_WR_DATA_REL_GP(pidx);
751                         else
752                                 wr_rel_set &= ~EXT_CSD_WR_DATA_REL_GP(pidx);
753                 }
754         }
755
756         if (wr_rel_set != ext_csd[EXT_CSD_WR_REL_SET] &&
757             !(ext_csd[EXT_CSD_WR_REL_PARAM] & EXT_CSD_HS_CTRL_REL)) {
758                 puts("Card does not support host controlled partition write "
759                      "reliability settings\n");
760                 return -EMEDIUMTYPE;
761         }
762
763         if (ext_csd[EXT_CSD_PARTITION_SETTING] &
764             EXT_CSD_PARTITION_SETTING_COMPLETED) {
765                 printf("Card already partitioned\n");
766                 return -EPERM;
767         }
768
769         if (mode == MMC_HWPART_CONF_CHECK)
770                 return 0;
771
772         /* Partitioning requires high-capacity size definitions */
773         if (!(ext_csd[EXT_CSD_ERASE_GROUP_DEF] & 0x01)) {
774                 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
775                                  EXT_CSD_ERASE_GROUP_DEF, 1);
776
777                 if (err)
778                         return err;
779
780                 ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1;
781
782                 /* update erase group size to be high-capacity */
783                 mmc->erase_grp_size =
784                         ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 1024;
785
786         }
787
788         /* all OK, write the configuration */
789         for (i = 0; i < 4; i++) {
790                 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
791                                  EXT_CSD_ENH_START_ADDR+i,
792                                  (enh_start_addr >> (i*8)) & 0xFF);
793                 if (err)
794                         return err;
795         }
796         for (i = 0; i < 3; i++) {
797                 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
798                                  EXT_CSD_ENH_SIZE_MULT+i,
799                                  (enh_size_mult >> (i*8)) & 0xFF);
800                 if (err)
801                         return err;
802         }
803         for (pidx = 0; pidx < 4; pidx++) {
804                 for (i = 0; i < 3; i++) {
805                         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
806                                          EXT_CSD_GP_SIZE_MULT+pidx*3+i,
807                                          (gp_size_mult[pidx] >> (i*8)) & 0xFF);
808                         if (err)
809                                 return err;
810                 }
811         }
812         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
813                          EXT_CSD_PARTITIONS_ATTRIBUTE, part_attrs);
814         if (err)
815                 return err;
816
817         if (mode == MMC_HWPART_CONF_SET)
818                 return 0;
819
820         /* The WR_REL_SET is a write-once register but shall be
821          * written before setting PART_SETTING_COMPLETED. As it is
822          * write-once we can only write it when completing the
823          * partitioning. */
824         if (wr_rel_set != ext_csd[EXT_CSD_WR_REL_SET]) {
825                 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
826                                  EXT_CSD_WR_REL_SET, wr_rel_set);
827                 if (err)
828                         return err;
829         }
830
831         /* Setting PART_SETTING_COMPLETED confirms the partition
832          * configuration but it only becomes effective after power
833          * cycle, so we do not adjust the partition related settings
834          * in the mmc struct. */
835
836         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
837                          EXT_CSD_PARTITION_SETTING,
838                          EXT_CSD_PARTITION_SETTING_COMPLETED);
839         if (err)
840                 return err;
841
842         return 0;
843 }
844
845 int mmc_getcd(struct mmc *mmc)
846 {
847         int cd;
848
849         cd = board_mmc_getcd(mmc);
850
851         if (cd < 0) {
852                 if (mmc->cfg->ops->getcd)
853                         cd = mmc->cfg->ops->getcd(mmc);
854                 else
855                         cd = 1;
856         }
857
858         return cd;
859 }
860
861 static int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)
862 {
863         struct mmc_cmd cmd;
864         struct mmc_data data;
865
866         /* Switch the frequency */
867         cmd.cmdidx = SD_CMD_SWITCH_FUNC;
868         cmd.resp_type = MMC_RSP_R1;
869         cmd.cmdarg = (mode << 31) | 0xffffff;
870         cmd.cmdarg &= ~(0xf << (group * 4));
871         cmd.cmdarg |= value << (group * 4);
872
873         data.dest = (char *)resp;
874         data.blocksize = 64;
875         data.blocks = 1;
876         data.flags = MMC_DATA_READ;
877
878         return mmc_send_cmd(mmc, &cmd, &data);
879 }
880
881
882 static int sd_change_freq(struct mmc *mmc)
883 {
884         int err;
885         struct mmc_cmd cmd;
886         ALLOC_CACHE_ALIGN_BUFFER(uint, scr, 2);
887         ALLOC_CACHE_ALIGN_BUFFER(uint, switch_status, 16);
888         struct mmc_data data;
889         int timeout;
890
891         mmc->card_caps = 0;
892
893         if (mmc_host_is_spi(mmc))
894                 return 0;
895
896         /* Read the SCR to find out if this card supports higher speeds */
897         cmd.cmdidx = MMC_CMD_APP_CMD;
898         cmd.resp_type = MMC_RSP_R1;
899         cmd.cmdarg = mmc->rca << 16;
900
901         err = mmc_send_cmd(mmc, &cmd, NULL);
902
903         if (err)
904                 return err;
905
906         cmd.cmdidx = SD_CMD_APP_SEND_SCR;
907         cmd.resp_type = MMC_RSP_R1;
908         cmd.cmdarg = 0;
909
910         timeout = 3;
911
912 retry_scr:
913         data.dest = (char *)scr;
914         data.blocksize = 8;
915         data.blocks = 1;
916         data.flags = MMC_DATA_READ;
917
918         err = mmc_send_cmd(mmc, &cmd, &data);
919
920         if (err) {
921                 if (timeout--)
922                         goto retry_scr;
923
924                 return err;
925         }
926
927         mmc->scr[0] = __be32_to_cpu(scr[0]);
928         mmc->scr[1] = __be32_to_cpu(scr[1]);
929
930         switch ((mmc->scr[0] >> 24) & 0xf) {
931         case 0:
932                 mmc->version = SD_VERSION_1_0;
933                 break;
934         case 1:
935                 mmc->version = SD_VERSION_1_10;
936                 break;
937         case 2:
938                 mmc->version = SD_VERSION_2;
939                 if ((mmc->scr[0] >> 15) & 0x1)
940                         mmc->version = SD_VERSION_3;
941                 break;
942         default:
943                 mmc->version = SD_VERSION_1_0;
944                 break;
945         }
946
947         if (mmc->scr[0] & SD_DATA_4BIT)
948                 mmc->card_caps |= MMC_MODE_4BIT;
949
950         /* Version 1.0 doesn't support switching */
951         if (mmc->version == SD_VERSION_1_0)
952                 return 0;
953
954         timeout = 4;
955         while (timeout--) {
956                 err = sd_switch(mmc, SD_SWITCH_CHECK, 0, 1,
957                                 (u8 *)switch_status);
958
959                 if (err)
960                         return err;
961
962                 /* The high-speed function is busy.  Try again */
963                 if (!(__be32_to_cpu(switch_status[7]) & SD_HIGHSPEED_BUSY))
964                         break;
965         }
966
967         /* If high-speed isn't supported, we return */
968         if (!(__be32_to_cpu(switch_status[3]) & SD_HIGHSPEED_SUPPORTED))
969                 return 0;
970
971         /*
972          * If the host doesn't support SD_HIGHSPEED, do not switch card to
973          * HIGHSPEED mode even if the card support SD_HIGHSPPED.
974          * This can avoid furthur problem when the card runs in different
975          * mode between the host.
976          */
977         if (!((mmc->cfg->host_caps & MMC_MODE_HS_52MHz) &&
978                 (mmc->cfg->host_caps & MMC_MODE_HS)))
979                 return 0;
980
981         err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, 1, (u8 *)switch_status);
982
983         if (err)
984                 return err;
985
986         if ((__be32_to_cpu(switch_status[4]) & 0x0f000000) == 0x01000000)
987                 mmc->card_caps |= MMC_MODE_HS;
988
989         return 0;
990 }
991
992 /* frequency bases */
993 /* divided by 10 to be nice to platforms without floating point */
994 static const int fbase[] = {
995         10000,
996         100000,
997         1000000,
998         10000000,
999 };
1000
1001 /* Multiplier values for TRAN_SPEED.  Multiplied by 10 to be nice
1002  * to platforms without floating point.
1003  */
1004 static const int multipliers[] = {
1005         0,      /* reserved */
1006         10,
1007         12,
1008         13,
1009         15,
1010         20,
1011         25,
1012         30,
1013         35,
1014         40,
1015         45,
1016         50,
1017         55,
1018         60,
1019         70,
1020         80,
1021 };
1022
1023 static void mmc_set_ios(struct mmc *mmc)
1024 {
1025         if (mmc->cfg->ops->set_ios)
1026                 mmc->cfg->ops->set_ios(mmc);
1027 }
1028
1029 void mmc_set_clock(struct mmc *mmc, uint clock)
1030 {
1031         if (clock > mmc->cfg->f_max)
1032                 clock = mmc->cfg->f_max;
1033
1034         if (clock < mmc->cfg->f_min)
1035                 clock = mmc->cfg->f_min;
1036
1037         mmc->clock = clock;
1038
1039         mmc_set_ios(mmc);
1040 }
1041
1042 static void mmc_set_bus_width(struct mmc *mmc, uint width)
1043 {
1044         mmc->bus_width = width;
1045
1046         mmc_set_ios(mmc);
1047 }
1048
1049 static int mmc_startup(struct mmc *mmc)
1050 {
1051         int err, i;
1052         uint mult, freq;
1053         u64 cmult, csize, capacity;
1054         struct mmc_cmd cmd;
1055         ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
1056         ALLOC_CACHE_ALIGN_BUFFER(u8, test_csd, MMC_MAX_BLOCK_LEN);
1057         int timeout = 1000;
1058         bool has_parts = false;
1059         bool part_completed;
1060
1061 #ifdef CONFIG_MMC_SPI_CRC_ON
1062         if (mmc_host_is_spi(mmc)) { /* enable CRC check for spi */
1063                 cmd.cmdidx = MMC_CMD_SPI_CRC_ON_OFF;
1064                 cmd.resp_type = MMC_RSP_R1;
1065                 cmd.cmdarg = 1;
1066                 err = mmc_send_cmd(mmc, &cmd, NULL);
1067
1068                 if (err)
1069                         return err;
1070         }
1071 #endif
1072
1073         /* Put the Card in Identify Mode */
1074         cmd.cmdidx = mmc_host_is_spi(mmc) ? MMC_CMD_SEND_CID :
1075                 MMC_CMD_ALL_SEND_CID; /* cmd not supported in spi */
1076         cmd.resp_type = MMC_RSP_R2;
1077         cmd.cmdarg = 0;
1078
1079         err = mmc_send_cmd(mmc, &cmd, NULL);
1080
1081         if (err)
1082                 return err;
1083
1084         memcpy(mmc->cid, cmd.response, 16);
1085
1086         /*
1087          * For MMC cards, set the Relative Address.
1088          * For SD cards, get the Relatvie Address.
1089          * This also puts the cards into Standby State
1090          */
1091         if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
1092                 cmd.cmdidx = SD_CMD_SEND_RELATIVE_ADDR;
1093                 cmd.cmdarg = mmc->rca << 16;
1094                 cmd.resp_type = MMC_RSP_R6;
1095
1096                 err = mmc_send_cmd(mmc, &cmd, NULL);
1097
1098                 if (err)
1099                         return err;
1100
1101                 if (IS_SD(mmc))
1102                         mmc->rca = (cmd.response[0] >> 16) & 0xffff;
1103         }
1104
1105         /* Get the Card-Specific Data */
1106         cmd.cmdidx = MMC_CMD_SEND_CSD;
1107         cmd.resp_type = MMC_RSP_R2;
1108         cmd.cmdarg = mmc->rca << 16;
1109
1110         err = mmc_send_cmd(mmc, &cmd, NULL);
1111
1112         /* Waiting for the ready status */
1113         mmc_send_status(mmc, timeout);
1114
1115         if (err)
1116                 return err;
1117
1118         mmc->csd[0] = cmd.response[0];
1119         mmc->csd[1] = cmd.response[1];
1120         mmc->csd[2] = cmd.response[2];
1121         mmc->csd[3] = cmd.response[3];
1122
1123         if (mmc->version == MMC_VERSION_UNKNOWN) {
1124                 int version = (cmd.response[0] >> 26) & 0xf;
1125
1126                 switch (version) {
1127                 case 0:
1128                         mmc->version = MMC_VERSION_1_2;
1129                         break;
1130                 case 1:
1131                         mmc->version = MMC_VERSION_1_4;
1132                         break;
1133                 case 2:
1134                         mmc->version = MMC_VERSION_2_2;
1135                         break;
1136                 case 3:
1137                         mmc->version = MMC_VERSION_3;
1138                         break;
1139                 case 4:
1140                         mmc->version = MMC_VERSION_4;
1141                         break;
1142                 default:
1143                         mmc->version = MMC_VERSION_1_2;
1144                         break;
1145                 }
1146         }
1147
1148         /* divide frequency by 10, since the mults are 10x bigger */
1149         freq = fbase[(cmd.response[0] & 0x7)];
1150         mult = multipliers[((cmd.response[0] >> 3) & 0xf)];
1151
1152         mmc->tran_speed = freq * mult;
1153
1154         mmc->dsr_imp = ((cmd.response[1] >> 12) & 0x1);
1155         mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf);
1156
1157         if (IS_SD(mmc))
1158                 mmc->write_bl_len = mmc->read_bl_len;
1159         else
1160                 mmc->write_bl_len = 1 << ((cmd.response[3] >> 22) & 0xf);
1161
1162         if (mmc->high_capacity) {
1163                 csize = (mmc->csd[1] & 0x3f) << 16
1164                         | (mmc->csd[2] & 0xffff0000) >> 16;
1165                 cmult = 8;
1166         } else {
1167                 csize = (mmc->csd[1] & 0x3ff) << 2
1168                         | (mmc->csd[2] & 0xc0000000) >> 30;
1169                 cmult = (mmc->csd[2] & 0x00038000) >> 15;
1170         }
1171
1172         mmc->capacity_user = (csize + 1) << (cmult + 2);
1173         mmc->capacity_user *= mmc->read_bl_len;
1174         mmc->capacity_boot = 0;
1175         mmc->capacity_rpmb = 0;
1176         for (i = 0; i < 4; i++)
1177                 mmc->capacity_gp[i] = 0;
1178
1179         if (mmc->read_bl_len > MMC_MAX_BLOCK_LEN)
1180                 mmc->read_bl_len = MMC_MAX_BLOCK_LEN;
1181
1182         if (mmc->write_bl_len > MMC_MAX_BLOCK_LEN)
1183                 mmc->write_bl_len = MMC_MAX_BLOCK_LEN;
1184
1185         if ((mmc->dsr_imp) && (0xffffffff != mmc->dsr)) {
1186                 cmd.cmdidx = MMC_CMD_SET_DSR;
1187                 cmd.cmdarg = (mmc->dsr & 0xffff) << 16;
1188                 cmd.resp_type = MMC_RSP_NONE;
1189                 if (mmc_send_cmd(mmc, &cmd, NULL))
1190                         printf("MMC: SET_DSR failed\n");
1191         }
1192
1193         /* Select the card, and put it into Transfer Mode */
1194         if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
1195                 cmd.cmdidx = MMC_CMD_SELECT_CARD;
1196                 cmd.resp_type = MMC_RSP_R1;
1197                 cmd.cmdarg = mmc->rca << 16;
1198                 err = mmc_send_cmd(mmc, &cmd, NULL);
1199
1200                 if (err)
1201                         return err;
1202         }
1203
1204         /*
1205          * For SD, its erase group is always one sector
1206          */
1207         mmc->erase_grp_size = 1;
1208         mmc->part_config = MMCPART_NOAVAILABLE;
1209         if (!IS_SD(mmc) && (mmc->version >= MMC_VERSION_4)) {
1210                 /* check  ext_csd version and capacity */
1211                 err = mmc_send_ext_csd(mmc, ext_csd);
1212                 if (err)
1213                         return err;
1214                 if (ext_csd[EXT_CSD_REV] >= 2) {
1215                         /*
1216                          * According to the JEDEC Standard, the value of
1217                          * ext_csd's capacity is valid if the value is more
1218                          * than 2GB
1219                          */
1220                         capacity = ext_csd[EXT_CSD_SEC_CNT] << 0
1221                                         | ext_csd[EXT_CSD_SEC_CNT + 1] << 8
1222                                         | ext_csd[EXT_CSD_SEC_CNT + 2] << 16
1223                                         | ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
1224                         capacity *= MMC_MAX_BLOCK_LEN;
1225                         if ((capacity >> 20) > 2 * 1024)
1226                                 mmc->capacity_user = capacity;
1227                 }
1228
1229                 switch (ext_csd[EXT_CSD_REV]) {
1230                 case 1:
1231                         mmc->version = MMC_VERSION_4_1;
1232                         break;
1233                 case 2:
1234                         mmc->version = MMC_VERSION_4_2;
1235                         break;
1236                 case 3:
1237                         mmc->version = MMC_VERSION_4_3;
1238                         break;
1239                 case 5:
1240                         mmc->version = MMC_VERSION_4_41;
1241                         break;
1242                 case 6:
1243                         mmc->version = MMC_VERSION_4_5;
1244                         break;
1245                 case 7:
1246                         mmc->version = MMC_VERSION_5_0;
1247                         break;
1248                 }
1249
1250                 /* The partition data may be non-zero but it is only
1251                  * effective if PARTITION_SETTING_COMPLETED is set in
1252                  * EXT_CSD, so ignore any data if this bit is not set,
1253                  * except for enabling the high-capacity group size
1254                  * definition (see below). */
1255                 part_completed = !!(ext_csd[EXT_CSD_PARTITION_SETTING] &
1256                                     EXT_CSD_PARTITION_SETTING_COMPLETED);
1257
1258                 /* store the partition info of emmc */
1259                 mmc->part_support = ext_csd[EXT_CSD_PARTITIONING_SUPPORT];
1260                 if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) ||
1261                     ext_csd[EXT_CSD_BOOT_MULT])
1262                         mmc->part_config = ext_csd[EXT_CSD_PART_CONF];
1263                 if (part_completed &&
1264                     (ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & ENHNCD_SUPPORT))
1265                         mmc->part_attr = ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE];
1266
1267                 mmc->capacity_boot = ext_csd[EXT_CSD_BOOT_MULT] << 17;
1268
1269                 mmc->capacity_rpmb = ext_csd[EXT_CSD_RPMB_MULT] << 17;
1270
1271                 for (i = 0; i < 4; i++) {
1272                         int idx = EXT_CSD_GP_SIZE_MULT + i * 3;
1273                         uint mult = (ext_csd[idx + 2] << 16) +
1274                                 (ext_csd[idx + 1] << 8) + ext_csd[idx];
1275                         if (mult)
1276                                 has_parts = true;
1277                         if (!part_completed)
1278                                 continue;
1279                         mmc->capacity_gp[i] = mult;
1280                         mmc->capacity_gp[i] *=
1281                                 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
1282                         mmc->capacity_gp[i] *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
1283                         mmc->capacity_gp[i] <<= 19;
1284                 }
1285
1286                 if (part_completed) {
1287                         mmc->enh_user_size =
1288                                 (ext_csd[EXT_CSD_ENH_SIZE_MULT+2] << 16) +
1289                                 (ext_csd[EXT_CSD_ENH_SIZE_MULT+1] << 8) +
1290                                 ext_csd[EXT_CSD_ENH_SIZE_MULT];
1291                         mmc->enh_user_size *= ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
1292                         mmc->enh_user_size *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
1293                         mmc->enh_user_size <<= 19;
1294                         mmc->enh_user_start =
1295                                 (ext_csd[EXT_CSD_ENH_START_ADDR+3] << 24) +
1296                                 (ext_csd[EXT_CSD_ENH_START_ADDR+2] << 16) +
1297                                 (ext_csd[EXT_CSD_ENH_START_ADDR+1] << 8) +
1298                                 ext_csd[EXT_CSD_ENH_START_ADDR];
1299                         if (mmc->high_capacity)
1300                                 mmc->enh_user_start <<= 9;
1301                 }
1302
1303                 /*
1304                  * Host needs to enable ERASE_GRP_DEF bit if device is
1305                  * partitioned. This bit will be lost every time after a reset
1306                  * or power off. This will affect erase size.
1307                  */
1308                 if (part_completed)
1309                         has_parts = true;
1310                 if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) &&
1311                     (ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE] & PART_ENH_ATTRIB))
1312                         has_parts = true;
1313                 if (has_parts) {
1314                         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1315                                 EXT_CSD_ERASE_GROUP_DEF, 1);
1316
1317                         if (err)
1318                                 return err;
1319                         else
1320                                 ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1;
1321                 }
1322
1323                 if (ext_csd[EXT_CSD_ERASE_GROUP_DEF] & 0x01) {
1324                         /* Read out group size from ext_csd */
1325                         mmc->erase_grp_size =
1326                                 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 1024;
1327                         /*
1328                          * if high capacity and partition setting completed
1329                          * SEC_COUNT is valid even if it is smaller than 2 GiB
1330                          * JEDEC Standard JESD84-B45, 6.2.4
1331                          */
1332                         if (mmc->high_capacity && part_completed) {
1333                                 capacity = (ext_csd[EXT_CSD_SEC_CNT]) |
1334                                         (ext_csd[EXT_CSD_SEC_CNT + 1] << 8) |
1335                                         (ext_csd[EXT_CSD_SEC_CNT + 2] << 16) |
1336                                         (ext_csd[EXT_CSD_SEC_CNT + 3] << 24);
1337                                 capacity *= MMC_MAX_BLOCK_LEN;
1338                                 mmc->capacity_user = capacity;
1339                         }
1340                 } else {
1341                         /* Calculate the group size from the csd value. */
1342                         int erase_gsz, erase_gmul;
1343                         erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10;
1344                         erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5;
1345                         mmc->erase_grp_size = (erase_gsz + 1)
1346                                 * (erase_gmul + 1);
1347                 }
1348
1349                 mmc->hc_wp_grp_size = 1024
1350                         * ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
1351                         * ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
1352
1353                 mmc->wr_rel_set = ext_csd[EXT_CSD_WR_REL_SET];
1354         }
1355
1356         err = mmc_set_capacity(mmc, mmc->block_dev.hwpart);
1357         if (err)
1358                 return err;
1359
1360         if (IS_SD(mmc))
1361                 err = sd_change_freq(mmc);
1362         else
1363                 err = mmc_change_freq(mmc);
1364
1365         if (err)
1366                 return err;
1367
1368         /* Restrict card's capabilities by what the host can do */
1369         mmc->card_caps &= mmc->cfg->host_caps;
1370
1371         if (IS_SD(mmc)) {
1372                 if (mmc->card_caps & MMC_MODE_4BIT) {
1373                         cmd.cmdidx = MMC_CMD_APP_CMD;
1374                         cmd.resp_type = MMC_RSP_R1;
1375                         cmd.cmdarg = mmc->rca << 16;
1376
1377                         err = mmc_send_cmd(mmc, &cmd, NULL);
1378                         if (err)
1379                                 return err;
1380
1381                         cmd.cmdidx = SD_CMD_APP_SET_BUS_WIDTH;
1382                         cmd.resp_type = MMC_RSP_R1;
1383                         cmd.cmdarg = 2;
1384                         err = mmc_send_cmd(mmc, &cmd, NULL);
1385                         if (err)
1386                                 return err;
1387
1388                         mmc_set_bus_width(mmc, 4);
1389                 }
1390
1391                 if (mmc->card_caps & MMC_MODE_HS)
1392                         mmc->tran_speed = 50000000;
1393                 else
1394                         mmc->tran_speed = 25000000;
1395         } else if (mmc->version >= MMC_VERSION_4) {
1396                 /* Only version 4 of MMC supports wider bus widths */
1397                 int idx;
1398
1399                 /* An array of possible bus widths in order of preference */
1400                 static unsigned ext_csd_bits[] = {
1401                         EXT_CSD_DDR_BUS_WIDTH_8,
1402                         EXT_CSD_DDR_BUS_WIDTH_4,
1403                         EXT_CSD_BUS_WIDTH_8,
1404                         EXT_CSD_BUS_WIDTH_4,
1405                         EXT_CSD_BUS_WIDTH_1,
1406                 };
1407
1408                 /* An array to map CSD bus widths to host cap bits */
1409                 static unsigned ext_to_hostcaps[] = {
1410                         [EXT_CSD_DDR_BUS_WIDTH_4] =
1411                                 MMC_MODE_DDR_52MHz | MMC_MODE_4BIT,
1412                         [EXT_CSD_DDR_BUS_WIDTH_8] =
1413                                 MMC_MODE_DDR_52MHz | MMC_MODE_8BIT,
1414                         [EXT_CSD_BUS_WIDTH_4] = MMC_MODE_4BIT,
1415                         [EXT_CSD_BUS_WIDTH_8] = MMC_MODE_8BIT,
1416                 };
1417
1418                 /* An array to map chosen bus width to an integer */
1419                 static unsigned widths[] = {
1420                         8, 4, 8, 4, 1,
1421                 };
1422
1423                 for (idx=0; idx < ARRAY_SIZE(ext_csd_bits); idx++) {
1424                         unsigned int extw = ext_csd_bits[idx];
1425                         unsigned int caps = ext_to_hostcaps[extw];
1426
1427                         /*
1428                          * If the bus width is still not changed,
1429                          * don't try to set the default again.
1430                          * Otherwise, recover from switch attempts
1431                          * by switching to 1-bit bus width.
1432                          */
1433                         if (extw == EXT_CSD_BUS_WIDTH_1 &&
1434                                         mmc->bus_width == 1) {
1435                                 err = 0;
1436                                 break;
1437                         }
1438
1439                         /*
1440                          * Check to make sure the card and controller support
1441                          * these capabilities
1442                          */
1443                         if ((mmc->card_caps & caps) != caps)
1444                                 continue;
1445
1446                         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1447                                         EXT_CSD_BUS_WIDTH, extw);
1448
1449                         if (err)
1450                                 continue;
1451
1452                         mmc->ddr_mode = (caps & MMC_MODE_DDR_52MHz) ? 1 : 0;
1453                         mmc_set_bus_width(mmc, widths[idx]);
1454
1455                         err = mmc_send_ext_csd(mmc, test_csd);
1456
1457                         if (err)
1458                                 continue;
1459
1460                         /* Only compare read only fields */
1461                         if (ext_csd[EXT_CSD_PARTITIONING_SUPPORT]
1462                                 == test_csd[EXT_CSD_PARTITIONING_SUPPORT] &&
1463                             ext_csd[EXT_CSD_HC_WP_GRP_SIZE]
1464                                 == test_csd[EXT_CSD_HC_WP_GRP_SIZE] &&
1465                             ext_csd[EXT_CSD_REV]
1466                                 == test_csd[EXT_CSD_REV] &&
1467                             ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
1468                                 == test_csd[EXT_CSD_HC_ERASE_GRP_SIZE] &&
1469                             memcmp(&ext_csd[EXT_CSD_SEC_CNT],
1470                                    &test_csd[EXT_CSD_SEC_CNT], 4) == 0)
1471                                 break;
1472                         else
1473                                 err = SWITCH_ERR;
1474                 }
1475
1476                 if (err)
1477                         return err;
1478
1479                 if (mmc->card_caps & MMC_MODE_HS) {
1480                         if (mmc->card_caps & MMC_MODE_HS_52MHz)
1481                                 mmc->tran_speed = 52000000;
1482                         else
1483                                 mmc->tran_speed = 26000000;
1484                 }
1485         }
1486
1487         mmc_set_clock(mmc, mmc->tran_speed);
1488
1489         /* Fix the block length for DDR mode */
1490         if (mmc->ddr_mode) {
1491                 mmc->read_bl_len = MMC_MAX_BLOCK_LEN;
1492                 mmc->write_bl_len = MMC_MAX_BLOCK_LEN;
1493         }
1494
1495         /* fill in device description */
1496         mmc->block_dev.lun = 0;
1497         mmc->block_dev.hwpart = 0;
1498         mmc->block_dev.type = 0;
1499         mmc->block_dev.blksz = mmc->read_bl_len;
1500         mmc->block_dev.log2blksz = LOG2(mmc->block_dev.blksz);
1501         mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);
1502 #if !defined(CONFIG_SPL_BUILD) || \
1503                 (defined(CONFIG_SPL_LIBCOMMON_SUPPORT) && \
1504                 !defined(CONFIG_USE_TINY_PRINTF))
1505         sprintf(mmc->block_dev.vendor, "Man %06x Snr %04x%04x",
1506                 mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff),
1507                 (mmc->cid[3] >> 16) & 0xffff);
1508         sprintf(mmc->block_dev.product, "%c%c%c%c%c%c", mmc->cid[0] & 0xff,
1509                 (mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
1510                 (mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff,
1511                 (mmc->cid[2] >> 24) & 0xff);
1512         sprintf(mmc->block_dev.revision, "%d.%d", (mmc->cid[2] >> 20) & 0xf,
1513                 (mmc->cid[2] >> 16) & 0xf);
1514 #else
1515         mmc->block_dev.vendor[0] = 0;
1516         mmc->block_dev.product[0] = 0;
1517         mmc->block_dev.revision[0] = 0;
1518 #endif
1519 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBDISK_SUPPORT)
1520         part_init(&mmc->block_dev);
1521 #endif
1522
1523         return 0;
1524 }
1525
1526 static int mmc_send_if_cond(struct mmc *mmc)
1527 {
1528         struct mmc_cmd cmd;
1529         int err;
1530
1531         cmd.cmdidx = SD_CMD_SEND_IF_COND;
1532         /* We set the bit if the host supports voltages between 2.7 and 3.6 V */
1533         cmd.cmdarg = ((mmc->cfg->voltages & 0xff8000) != 0) << 8 | 0xaa;
1534         cmd.resp_type = MMC_RSP_R7;
1535
1536         err = mmc_send_cmd(mmc, &cmd, NULL);
1537
1538         if (err)
1539                 return err;
1540
1541         if ((cmd.response[0] & 0xff) != 0xaa)
1542                 return UNUSABLE_ERR;
1543         else
1544                 mmc->version = SD_VERSION_2;
1545
1546         return 0;
1547 }
1548
1549 /* not used any more */
1550 int __deprecated mmc_register(struct mmc *mmc)
1551 {
1552 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1553         printf("%s is deprecated! use mmc_create() instead.\n", __func__);
1554 #endif
1555         return -1;
1556 }
1557
1558 struct mmc *mmc_create(const struct mmc_config *cfg, void *priv)
1559 {
1560         struct mmc *mmc;
1561
1562         /* quick validation */
1563         if (cfg == NULL || cfg->ops == NULL || cfg->ops->send_cmd == NULL ||
1564                         cfg->f_min == 0 || cfg->f_max == 0 || cfg->b_max == 0)
1565                 return NULL;
1566
1567         mmc = calloc(1, sizeof(*mmc));
1568         if (mmc == NULL)
1569                 return NULL;
1570
1571         mmc->cfg = cfg;
1572         mmc->priv = priv;
1573
1574         /* the following chunk was mmc_register() */
1575
1576         /* Setup dsr related values */
1577         mmc->dsr_imp = 0;
1578         mmc->dsr = 0xffffffff;
1579         /* Setup the universal parts of the block interface just once */
1580         mmc->block_dev.if_type = IF_TYPE_MMC;
1581         mmc->block_dev.devnum = cur_dev_num++;
1582         mmc->block_dev.removable = 1;
1583         mmc->block_dev.block_read = mmc_bread;
1584         mmc->block_dev.block_write = mmc_bwrite;
1585         mmc->block_dev.block_erase = mmc_berase;
1586
1587         /* setup initial part type */
1588         mmc->block_dev.part_type = mmc->cfg->part_type;
1589
1590         INIT_LIST_HEAD(&mmc->link);
1591
1592         list_add_tail(&mmc->link, &mmc_devices);
1593
1594         return mmc;
1595 }
1596
1597 void mmc_destroy(struct mmc *mmc)
1598 {
1599         /* only freeing memory for now */
1600         free(mmc);
1601 }
1602
1603 static int mmc_get_dev(int dev, struct blk_desc **descp)
1604 {
1605         struct mmc *mmc = find_mmc_device(dev);
1606         int ret;
1607
1608         if (!mmc)
1609                 return -ENODEV;
1610         ret = mmc_init(mmc);
1611         if (ret)
1612                 return ret;
1613
1614         *descp = &mmc->block_dev;
1615
1616         return 0;
1617 }
1618
1619 /* board-specific MMC power initializations. */
1620 __weak void board_mmc_power_init(void)
1621 {
1622 }
1623
1624 int mmc_start_init(struct mmc *mmc)
1625 {
1626         int err;
1627
1628         /* we pretend there's no card when init is NULL */
1629         if (mmc_getcd(mmc) == 0 || mmc->cfg->ops->init == NULL) {
1630                 mmc->has_init = 0;
1631 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1632                 printf("MMC: no card present\n");
1633 #endif
1634                 return NO_CARD_ERR;
1635         }
1636
1637         if (mmc->has_init)
1638                 return 0;
1639
1640 #ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT
1641         mmc_adapter_card_type_ident();
1642 #endif
1643         board_mmc_power_init();
1644
1645         /* made sure it's not NULL earlier */
1646         err = mmc->cfg->ops->init(mmc);
1647
1648         if (err)
1649                 return err;
1650
1651         mmc->ddr_mode = 0;
1652         mmc_set_bus_width(mmc, 1);
1653         mmc_set_clock(mmc, 1);
1654
1655         /* Reset the Card */
1656         err = mmc_go_idle(mmc);
1657
1658         if (err)
1659                 return err;
1660
1661         /* The internal partition reset to user partition(0) at every CMD0*/
1662         mmc->block_dev.hwpart = 0;
1663
1664         /* Test for SD version 2 */
1665         err = mmc_send_if_cond(mmc);
1666
1667         /* Now try to get the SD card's operating condition */
1668         err = sd_send_op_cond(mmc);
1669
1670         /* If the command timed out, we check for an MMC card */
1671         if (err == TIMEOUT) {
1672                 err = mmc_send_op_cond(mmc);
1673
1674                 if (err) {
1675 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1676                         printf("Card did not respond to voltage select!\n");
1677 #endif
1678                         return UNUSABLE_ERR;
1679                 }
1680         }
1681
1682         if (!err)
1683                 mmc->init_in_progress = 1;
1684
1685         return err;
1686 }
1687
1688 static int mmc_complete_init(struct mmc *mmc)
1689 {
1690         int err = 0;
1691
1692         mmc->init_in_progress = 0;
1693         if (mmc->op_cond_pending)
1694                 err = mmc_complete_op_cond(mmc);
1695
1696         if (!err)
1697                 err = mmc_startup(mmc);
1698         if (err)
1699                 mmc->has_init = 0;
1700         else
1701                 mmc->has_init = 1;
1702         return err;
1703 }
1704
1705 int mmc_init(struct mmc *mmc)
1706 {
1707         int err = 0;
1708         unsigned start;
1709
1710         if (mmc->has_init)
1711                 return 0;
1712
1713         start = get_timer(0);
1714
1715         if (!mmc->init_in_progress)
1716                 err = mmc_start_init(mmc);
1717
1718         if (!err)
1719                 err = mmc_complete_init(mmc);
1720         debug("%s: %d, time %lu\n", __func__, err, get_timer(start));
1721         return err;
1722 }
1723
1724 int mmc_set_dsr(struct mmc *mmc, u16 val)
1725 {
1726         mmc->dsr = val;
1727         return 0;
1728 }
1729
1730 /* CPU-specific MMC initializations */
1731 __weak int cpu_mmc_init(bd_t *bis)
1732 {
1733         return -1;
1734 }
1735
1736 /* board-specific MMC initializations. */
1737 __weak int board_mmc_init(bd_t *bis)
1738 {
1739         return -1;
1740 }
1741
1742 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1743
1744 void print_mmc_devices(char separator)
1745 {
1746         struct mmc *m;
1747         struct list_head *entry;
1748         char *mmc_type;
1749
1750         list_for_each(entry, &mmc_devices) {
1751                 m = list_entry(entry, struct mmc, link);
1752
1753                 if (m->has_init)
1754                         mmc_type = IS_SD(m) ? "SD" : "eMMC";
1755                 else
1756                         mmc_type = NULL;
1757
1758                 printf("%s: %d", m->cfg->name, m->block_dev.devnum);
1759                 if (mmc_type)
1760                         printf(" (%s)", mmc_type);
1761
1762                 if (entry->next != &mmc_devices) {
1763                         printf("%c", separator);
1764                         if (separator != '\n')
1765                                 puts (" ");
1766                 }
1767         }
1768
1769         printf("\n");
1770 }
1771
1772 #else
1773 void print_mmc_devices(char separator) { }
1774 #endif
1775
1776 int get_mmc_num(void)
1777 {
1778         return cur_dev_num;
1779 }
1780
1781 void mmc_set_preinit(struct mmc *mmc, int preinit)
1782 {
1783         mmc->preinit = preinit;
1784 }
1785
1786 static void do_preinit(void)
1787 {
1788         struct mmc *m;
1789         struct list_head *entry;
1790
1791         list_for_each(entry, &mmc_devices) {
1792                 m = list_entry(entry, struct mmc, link);
1793
1794 #ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT
1795                 mmc_set_preinit(m, 1);
1796 #endif
1797                 if (m->preinit)
1798                         mmc_start_init(m);
1799         }
1800 }
1801
1802 #if defined(CONFIG_DM_MMC) && defined(CONFIG_SPL_BUILD)
1803 static int mmc_probe(bd_t *bis)
1804 {
1805         return 0;
1806 }
1807 #elif defined(CONFIG_DM_MMC)
1808 static int mmc_probe(bd_t *bis)
1809 {
1810         int ret, i;
1811         struct uclass *uc;
1812         struct udevice *dev;
1813
1814         ret = uclass_get(UCLASS_MMC, &uc);
1815         if (ret)
1816                 return ret;
1817
1818         /*
1819          * Try to add them in sequence order. Really with driver model we
1820          * should allow holes, but the current MMC list does not allow that.
1821          * So if we request 0, 1, 3 we will get 0, 1, 2.
1822          */
1823         for (i = 0; ; i++) {
1824                 ret = uclass_get_device_by_seq(UCLASS_MMC, i, &dev);
1825                 if (ret == -ENODEV)
1826                         break;
1827         }
1828         uclass_foreach_dev(dev, uc) {
1829                 ret = device_probe(dev);
1830                 if (ret)
1831                         printf("%s - probe failed: %d\n", dev->name, ret);
1832         }
1833
1834         return 0;
1835 }
1836 #else
1837 static int mmc_probe(bd_t *bis)
1838 {
1839         if (board_mmc_init(bis) < 0)
1840                 cpu_mmc_init(bis);
1841
1842         return 0;
1843 }
1844 #endif
1845
1846 int mmc_initialize(bd_t *bis)
1847 {
1848         static int initialized = 0;
1849         int ret;
1850         if (initialized)        /* Avoid initializing mmc multiple times */
1851                 return 0;
1852         initialized = 1;
1853
1854         INIT_LIST_HEAD (&mmc_devices);
1855         cur_dev_num = 0;
1856
1857         ret = mmc_probe(bis);
1858         if (ret)
1859                 return ret;
1860
1861 #ifndef CONFIG_SPL_BUILD
1862         print_mmc_devices(',');
1863 #endif
1864
1865         do_preinit();
1866         return 0;
1867 }
1868
1869 #ifdef CONFIG_SUPPORT_EMMC_BOOT
1870 /*
1871  * This function changes the size of boot partition and the size of rpmb
1872  * partition present on EMMC devices.
1873  *
1874  * Input Parameters:
1875  * struct *mmc: pointer for the mmc device strcuture
1876  * bootsize: size of boot partition
1877  * rpmbsize: size of rpmb partition
1878  *
1879  * Returns 0 on success.
1880  */
1881
1882 int mmc_boot_partition_size_change(struct mmc *mmc, unsigned long bootsize,
1883                                 unsigned long rpmbsize)
1884 {
1885         int err;
1886         struct mmc_cmd cmd;
1887
1888         /* Only use this command for raw EMMC moviNAND. Enter backdoor mode */
1889         cmd.cmdidx = MMC_CMD_RES_MAN;
1890         cmd.resp_type = MMC_RSP_R1b;
1891         cmd.cmdarg = MMC_CMD62_ARG1;
1892
1893         err = mmc_send_cmd(mmc, &cmd, NULL);
1894         if (err) {
1895                 debug("mmc_boot_partition_size_change: Error1 = %d\n", err);
1896                 return err;
1897         }
1898
1899         /* Boot partition changing mode */
1900         cmd.cmdidx = MMC_CMD_RES_MAN;
1901         cmd.resp_type = MMC_RSP_R1b;
1902         cmd.cmdarg = MMC_CMD62_ARG2;
1903
1904         err = mmc_send_cmd(mmc, &cmd, NULL);
1905         if (err) {
1906                 debug("mmc_boot_partition_size_change: Error2 = %d\n", err);
1907                 return err;
1908         }
1909         /* boot partition size is multiple of 128KB */
1910         bootsize = (bootsize * 1024) / 128;
1911
1912         /* Arg: boot partition size */
1913         cmd.cmdidx = MMC_CMD_RES_MAN;
1914         cmd.resp_type = MMC_RSP_R1b;
1915         cmd.cmdarg = bootsize;
1916
1917         err = mmc_send_cmd(mmc, &cmd, NULL);
1918         if (err) {
1919                 debug("mmc_boot_partition_size_change: Error3 = %d\n", err);
1920                 return err;
1921         }
1922         /* RPMB partition size is multiple of 128KB */
1923         rpmbsize = (rpmbsize * 1024) / 128;
1924         /* Arg: RPMB partition size */
1925         cmd.cmdidx = MMC_CMD_RES_MAN;
1926         cmd.resp_type = MMC_RSP_R1b;
1927         cmd.cmdarg = rpmbsize;
1928
1929         err = mmc_send_cmd(mmc, &cmd, NULL);
1930         if (err) {
1931                 debug("mmc_boot_partition_size_change: Error4 = %d\n", err);
1932                 return err;
1933         }
1934         return 0;
1935 }
1936
1937 /*
1938  * Modify EXT_CSD[177] which is BOOT_BUS_WIDTH
1939  * based on the passed in values for BOOT_BUS_WIDTH, RESET_BOOT_BUS_WIDTH
1940  * and BOOT_MODE.
1941  *
1942  * Returns 0 on success.
1943  */
1944 int mmc_set_boot_bus_width(struct mmc *mmc, u8 width, u8 reset, u8 mode)
1945 {
1946         int err;
1947
1948         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BOOT_BUS_WIDTH,
1949                          EXT_CSD_BOOT_BUS_WIDTH_MODE(mode) |
1950                          EXT_CSD_BOOT_BUS_WIDTH_RESET(reset) |
1951                          EXT_CSD_BOOT_BUS_WIDTH_WIDTH(width));
1952
1953         if (err)
1954                 return err;
1955         return 0;
1956 }
1957
1958 /*
1959  * Modify EXT_CSD[179] which is PARTITION_CONFIG (formerly BOOT_CONFIG)
1960  * based on the passed in values for BOOT_ACK, BOOT_PARTITION_ENABLE and
1961  * PARTITION_ACCESS.
1962  *
1963  * Returns 0 on success.
1964  */
1965 int mmc_set_part_conf(struct mmc *mmc, u8 ack, u8 part_num, u8 access)
1966 {
1967         int err;
1968
1969         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF,
1970                          EXT_CSD_BOOT_ACK(ack) |
1971                          EXT_CSD_BOOT_PART_NUM(part_num) |
1972                          EXT_CSD_PARTITION_ACCESS(access));
1973
1974         if (err)
1975                 return err;
1976         return 0;
1977 }
1978
1979 /*
1980  * Modify EXT_CSD[162] which is RST_n_FUNCTION based on the given value
1981  * for enable.  Note that this is a write-once field for non-zero values.
1982  *
1983  * Returns 0 on success.
1984  */
1985 int mmc_set_rst_n_function(struct mmc *mmc, u8 enable)
1986 {
1987         return mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_RST_N_FUNCTION,
1988                           enable);
1989 }
1990 #endif
1991
1992 U_BOOT_LEGACY_BLK(mmc) = {
1993         .if_typename    = "mmc",
1994         .if_type        = IF_TYPE_MMC,
1995         .max_devs       = -1,
1996         .get_dev        = mmc_get_dev,
1997         .select_hwpart  = mmc_select_hwpartp,
1998 };