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