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