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