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