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