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