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