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