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