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