xref: /rk3399_rockchip-uboot/drivers/mmc/mmc.c (revision 9cf199ebcff13f8d98b31ab48e3bcce37ed8925d)
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 = MMC_MODE_4BIT | MMC_MODE_8BIT;
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 	err = mmc_send_ext_csd(mmc, ext_csd);
499 
500 	if (err)
501 		return err;
502 
503 	cardtype = ext_csd[EXT_CSD_CARD_TYPE] & 0xf;
504 
505 	err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING, 1);
506 
507 	if (err)
508 		return err == SWITCH_ERR ? 0 : err;
509 
510 	/* Now check to see that it worked */
511 	err = mmc_send_ext_csd(mmc, ext_csd);
512 
513 	if (err)
514 		return err;
515 
516 	/* No high-speed support */
517 	if (!ext_csd[EXT_CSD_HS_TIMING])
518 		return 0;
519 
520 	/* High Speed is set, there are two types: 52MHz and 26MHz */
521 	if (cardtype & EXT_CSD_CARD_TYPE_52) {
522 		if (cardtype & EXT_CSD_CARD_TYPE_DDR_1_8V)
523 			mmc->card_caps |= MMC_MODE_DDR_52MHz;
524 		mmc->card_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
525 	} else {
526 		mmc->card_caps |= MMC_MODE_HS;
527 	}
528 
529 	return 0;
530 }
531 
532 static int mmc_set_capacity(struct mmc *mmc, int part_num)
533 {
534 	switch (part_num) {
535 	case 0:
536 		mmc->capacity = mmc->capacity_user;
537 		break;
538 	case 1:
539 	case 2:
540 		mmc->capacity = mmc->capacity_boot;
541 		break;
542 	case 3:
543 		mmc->capacity = mmc->capacity_rpmb;
544 		break;
545 	case 4:
546 	case 5:
547 	case 6:
548 	case 7:
549 		mmc->capacity = mmc->capacity_gp[part_num - 4];
550 		break;
551 	default:
552 		return -1;
553 	}
554 
555 	mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);
556 
557 	return 0;
558 }
559 
560 int mmc_select_hwpart(int dev_num, int hwpart)
561 {
562 	struct mmc *mmc = find_mmc_device(dev_num);
563 	int ret;
564 
565 	if (!mmc)
566 		return -ENODEV;
567 
568 	if (mmc->part_num == hwpart)
569 		return 0;
570 
571 	if (mmc->part_config == MMCPART_NOAVAILABLE) {
572 		printf("Card doesn't support part_switch\n");
573 		return -EMEDIUMTYPE;
574 	}
575 
576 	ret = mmc_switch_part(dev_num, hwpart);
577 	if (ret)
578 		return ret;
579 
580 	mmc->part_num = hwpart;
581 
582 	return 0;
583 }
584 
585 
586 int mmc_switch_part(int dev_num, unsigned int part_num)
587 {
588 	struct mmc *mmc = find_mmc_device(dev_num);
589 	int ret;
590 
591 	if (!mmc)
592 		return -1;
593 
594 	ret = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF,
595 			 (mmc->part_config & ~PART_ACCESS_MASK)
596 			 | (part_num & PART_ACCESS_MASK));
597 
598 	/*
599 	 * Set the capacity if the switch succeeded or was intended
600 	 * to return to representing the raw device.
601 	 */
602 	if ((ret == 0) || ((ret == -ENODEV) && (part_num == 0)))
603 		ret = mmc_set_capacity(mmc, part_num);
604 
605 	return ret;
606 }
607 
608 int mmc_getcd(struct mmc *mmc)
609 {
610 	int cd;
611 
612 	cd = board_mmc_getcd(mmc);
613 
614 	if (cd < 0) {
615 		if (mmc->cfg->ops->getcd)
616 			cd = mmc->cfg->ops->getcd(mmc);
617 		else
618 			cd = 1;
619 	}
620 
621 	return cd;
622 }
623 
624 static int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)
625 {
626 	struct mmc_cmd cmd;
627 	struct mmc_data data;
628 
629 	/* Switch the frequency */
630 	cmd.cmdidx = SD_CMD_SWITCH_FUNC;
631 	cmd.resp_type = MMC_RSP_R1;
632 	cmd.cmdarg = (mode << 31) | 0xffffff;
633 	cmd.cmdarg &= ~(0xf << (group * 4));
634 	cmd.cmdarg |= value << (group * 4);
635 
636 	data.dest = (char *)resp;
637 	data.blocksize = 64;
638 	data.blocks = 1;
639 	data.flags = MMC_DATA_READ;
640 
641 	return mmc_send_cmd(mmc, &cmd, &data);
642 }
643 
644 
645 static int sd_change_freq(struct mmc *mmc)
646 {
647 	int err;
648 	struct mmc_cmd cmd;
649 	ALLOC_CACHE_ALIGN_BUFFER(uint, scr, 2);
650 	ALLOC_CACHE_ALIGN_BUFFER(uint, switch_status, 16);
651 	struct mmc_data data;
652 	int timeout;
653 
654 	mmc->card_caps = 0;
655 
656 	if (mmc_host_is_spi(mmc))
657 		return 0;
658 
659 	/* Read the SCR to find out if this card supports higher speeds */
660 	cmd.cmdidx = MMC_CMD_APP_CMD;
661 	cmd.resp_type = MMC_RSP_R1;
662 	cmd.cmdarg = mmc->rca << 16;
663 
664 	err = mmc_send_cmd(mmc, &cmd, NULL);
665 
666 	if (err)
667 		return err;
668 
669 	cmd.cmdidx = SD_CMD_APP_SEND_SCR;
670 	cmd.resp_type = MMC_RSP_R1;
671 	cmd.cmdarg = 0;
672 
673 	timeout = 3;
674 
675 retry_scr:
676 	data.dest = (char *)scr;
677 	data.blocksize = 8;
678 	data.blocks = 1;
679 	data.flags = MMC_DATA_READ;
680 
681 	err = mmc_send_cmd(mmc, &cmd, &data);
682 
683 	if (err) {
684 		if (timeout--)
685 			goto retry_scr;
686 
687 		return err;
688 	}
689 
690 	mmc->scr[0] = __be32_to_cpu(scr[0]);
691 	mmc->scr[1] = __be32_to_cpu(scr[1]);
692 
693 	switch ((mmc->scr[0] >> 24) & 0xf) {
694 		case 0:
695 			mmc->version = SD_VERSION_1_0;
696 			break;
697 		case 1:
698 			mmc->version = SD_VERSION_1_10;
699 			break;
700 		case 2:
701 			mmc->version = SD_VERSION_2;
702 			if ((mmc->scr[0] >> 15) & 0x1)
703 				mmc->version = SD_VERSION_3;
704 			break;
705 		default:
706 			mmc->version = SD_VERSION_1_0;
707 			break;
708 	}
709 
710 	if (mmc->scr[0] & SD_DATA_4BIT)
711 		mmc->card_caps |= MMC_MODE_4BIT;
712 
713 	/* Version 1.0 doesn't support switching */
714 	if (mmc->version == SD_VERSION_1_0)
715 		return 0;
716 
717 	timeout = 4;
718 	while (timeout--) {
719 		err = sd_switch(mmc, SD_SWITCH_CHECK, 0, 1,
720 				(u8 *)switch_status);
721 
722 		if (err)
723 			return err;
724 
725 		/* The high-speed function is busy.  Try again */
726 		if (!(__be32_to_cpu(switch_status[7]) & SD_HIGHSPEED_BUSY))
727 			break;
728 	}
729 
730 	/* If high-speed isn't supported, we return */
731 	if (!(__be32_to_cpu(switch_status[3]) & SD_HIGHSPEED_SUPPORTED))
732 		return 0;
733 
734 	/*
735 	 * If the host doesn't support SD_HIGHSPEED, do not switch card to
736 	 * HIGHSPEED mode even if the card support SD_HIGHSPPED.
737 	 * This can avoid furthur problem when the card runs in different
738 	 * mode between the host.
739 	 */
740 	if (!((mmc->cfg->host_caps & MMC_MODE_HS_52MHz) &&
741 		(mmc->cfg->host_caps & MMC_MODE_HS)))
742 		return 0;
743 
744 	err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, 1, (u8 *)switch_status);
745 
746 	if (err)
747 		return err;
748 
749 	if ((__be32_to_cpu(switch_status[4]) & 0x0f000000) == 0x01000000)
750 		mmc->card_caps |= MMC_MODE_HS;
751 
752 	return 0;
753 }
754 
755 /* frequency bases */
756 /* divided by 10 to be nice to platforms without floating point */
757 static const int fbase[] = {
758 	10000,
759 	100000,
760 	1000000,
761 	10000000,
762 };
763 
764 /* Multiplier values for TRAN_SPEED.  Multiplied by 10 to be nice
765  * to platforms without floating point.
766  */
767 static const int multipliers[] = {
768 	0,	/* reserved */
769 	10,
770 	12,
771 	13,
772 	15,
773 	20,
774 	25,
775 	30,
776 	35,
777 	40,
778 	45,
779 	50,
780 	55,
781 	60,
782 	70,
783 	80,
784 };
785 
786 static void mmc_set_ios(struct mmc *mmc)
787 {
788 	if (mmc->cfg->ops->set_ios)
789 		mmc->cfg->ops->set_ios(mmc);
790 }
791 
792 void mmc_set_clock(struct mmc *mmc, uint clock)
793 {
794 	if (clock > mmc->cfg->f_max)
795 		clock = mmc->cfg->f_max;
796 
797 	if (clock < mmc->cfg->f_min)
798 		clock = mmc->cfg->f_min;
799 
800 	mmc->clock = clock;
801 
802 	mmc_set_ios(mmc);
803 }
804 
805 static void mmc_set_bus_width(struct mmc *mmc, uint width)
806 {
807 	mmc->bus_width = width;
808 
809 	mmc_set_ios(mmc);
810 }
811 
812 static int mmc_startup(struct mmc *mmc)
813 {
814 	int err, i;
815 	uint mult, freq;
816 	u64 cmult, csize, capacity;
817 	struct mmc_cmd cmd;
818 	ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
819 	ALLOC_CACHE_ALIGN_BUFFER(u8, test_csd, MMC_MAX_BLOCK_LEN);
820 	int timeout = 1000;
821 	bool has_parts = false;
822 	bool part_completed;
823 
824 #ifdef CONFIG_MMC_SPI_CRC_ON
825 	if (mmc_host_is_spi(mmc)) { /* enable CRC check for spi */
826 		cmd.cmdidx = MMC_CMD_SPI_CRC_ON_OFF;
827 		cmd.resp_type = MMC_RSP_R1;
828 		cmd.cmdarg = 1;
829 		err = mmc_send_cmd(mmc, &cmd, NULL);
830 
831 		if (err)
832 			return err;
833 	}
834 #endif
835 
836 	/* Put the Card in Identify Mode */
837 	cmd.cmdidx = mmc_host_is_spi(mmc) ? MMC_CMD_SEND_CID :
838 		MMC_CMD_ALL_SEND_CID; /* cmd not supported in spi */
839 	cmd.resp_type = MMC_RSP_R2;
840 	cmd.cmdarg = 0;
841 
842 	err = mmc_send_cmd(mmc, &cmd, NULL);
843 
844 	if (err)
845 		return err;
846 
847 	memcpy(mmc->cid, cmd.response, 16);
848 
849 	/*
850 	 * For MMC cards, set the Relative Address.
851 	 * For SD cards, get the Relatvie Address.
852 	 * This also puts the cards into Standby State
853 	 */
854 	if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
855 		cmd.cmdidx = SD_CMD_SEND_RELATIVE_ADDR;
856 		cmd.cmdarg = mmc->rca << 16;
857 		cmd.resp_type = MMC_RSP_R6;
858 
859 		err = mmc_send_cmd(mmc, &cmd, NULL);
860 
861 		if (err)
862 			return err;
863 
864 		if (IS_SD(mmc))
865 			mmc->rca = (cmd.response[0] >> 16) & 0xffff;
866 	}
867 
868 	/* Get the Card-Specific Data */
869 	cmd.cmdidx = MMC_CMD_SEND_CSD;
870 	cmd.resp_type = MMC_RSP_R2;
871 	cmd.cmdarg = mmc->rca << 16;
872 
873 	err = mmc_send_cmd(mmc, &cmd, NULL);
874 
875 	/* Waiting for the ready status */
876 	mmc_send_status(mmc, timeout);
877 
878 	if (err)
879 		return err;
880 
881 	mmc->csd[0] = cmd.response[0];
882 	mmc->csd[1] = cmd.response[1];
883 	mmc->csd[2] = cmd.response[2];
884 	mmc->csd[3] = cmd.response[3];
885 
886 	if (mmc->version == MMC_VERSION_UNKNOWN) {
887 		int version = (cmd.response[0] >> 26) & 0xf;
888 
889 		switch (version) {
890 			case 0:
891 				mmc->version = MMC_VERSION_1_2;
892 				break;
893 			case 1:
894 				mmc->version = MMC_VERSION_1_4;
895 				break;
896 			case 2:
897 				mmc->version = MMC_VERSION_2_2;
898 				break;
899 			case 3:
900 				mmc->version = MMC_VERSION_3;
901 				break;
902 			case 4:
903 				mmc->version = MMC_VERSION_4;
904 				break;
905 			default:
906 				mmc->version = MMC_VERSION_1_2;
907 				break;
908 		}
909 	}
910 
911 	/* divide frequency by 10, since the mults are 10x bigger */
912 	freq = fbase[(cmd.response[0] & 0x7)];
913 	mult = multipliers[((cmd.response[0] >> 3) & 0xf)];
914 
915 	mmc->tran_speed = freq * mult;
916 
917 	mmc->dsr_imp = ((cmd.response[1] >> 12) & 0x1);
918 	mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf);
919 
920 	if (IS_SD(mmc))
921 		mmc->write_bl_len = mmc->read_bl_len;
922 	else
923 		mmc->write_bl_len = 1 << ((cmd.response[3] >> 22) & 0xf);
924 
925 	if (mmc->high_capacity) {
926 		csize = (mmc->csd[1] & 0x3f) << 16
927 			| (mmc->csd[2] & 0xffff0000) >> 16;
928 		cmult = 8;
929 	} else {
930 		csize = (mmc->csd[1] & 0x3ff) << 2
931 			| (mmc->csd[2] & 0xc0000000) >> 30;
932 		cmult = (mmc->csd[2] & 0x00038000) >> 15;
933 	}
934 
935 	mmc->capacity_user = (csize + 1) << (cmult + 2);
936 	mmc->capacity_user *= mmc->read_bl_len;
937 	mmc->capacity_boot = 0;
938 	mmc->capacity_rpmb = 0;
939 	for (i = 0; i < 4; i++)
940 		mmc->capacity_gp[i] = 0;
941 
942 	if (mmc->read_bl_len > MMC_MAX_BLOCK_LEN)
943 		mmc->read_bl_len = MMC_MAX_BLOCK_LEN;
944 
945 	if (mmc->write_bl_len > MMC_MAX_BLOCK_LEN)
946 		mmc->write_bl_len = MMC_MAX_BLOCK_LEN;
947 
948 	if ((mmc->dsr_imp) && (0xffffffff != mmc->dsr)) {
949 		cmd.cmdidx = MMC_CMD_SET_DSR;
950 		cmd.cmdarg = (mmc->dsr & 0xffff) << 16;
951 		cmd.resp_type = MMC_RSP_NONE;
952 		if (mmc_send_cmd(mmc, &cmd, NULL))
953 			printf("MMC: SET_DSR failed\n");
954 	}
955 
956 	/* Select the card, and put it into Transfer Mode */
957 	if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
958 		cmd.cmdidx = MMC_CMD_SELECT_CARD;
959 		cmd.resp_type = MMC_RSP_R1;
960 		cmd.cmdarg = mmc->rca << 16;
961 		err = mmc_send_cmd(mmc, &cmd, NULL);
962 
963 		if (err)
964 			return err;
965 	}
966 
967 	/*
968 	 * For SD, its erase group is always one sector
969 	 */
970 	mmc->erase_grp_size = 1;
971 	mmc->part_config = MMCPART_NOAVAILABLE;
972 	if (!IS_SD(mmc) && (mmc->version >= MMC_VERSION_4)) {
973 		/* check  ext_csd version and capacity */
974 		err = mmc_send_ext_csd(mmc, ext_csd);
975 		if (err)
976 			return err;
977 		if (ext_csd[EXT_CSD_REV] >= 2) {
978 			/*
979 			 * According to the JEDEC Standard, the value of
980 			 * ext_csd's capacity is valid if the value is more
981 			 * than 2GB
982 			 */
983 			capacity = ext_csd[EXT_CSD_SEC_CNT] << 0
984 					| ext_csd[EXT_CSD_SEC_CNT + 1] << 8
985 					| ext_csd[EXT_CSD_SEC_CNT + 2] << 16
986 					| ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
987 			capacity *= MMC_MAX_BLOCK_LEN;
988 			if ((capacity >> 20) > 2 * 1024)
989 				mmc->capacity_user = capacity;
990 		}
991 
992 		switch (ext_csd[EXT_CSD_REV]) {
993 		case 1:
994 			mmc->version = MMC_VERSION_4_1;
995 			break;
996 		case 2:
997 			mmc->version = MMC_VERSION_4_2;
998 			break;
999 		case 3:
1000 			mmc->version = MMC_VERSION_4_3;
1001 			break;
1002 		case 5:
1003 			mmc->version = MMC_VERSION_4_41;
1004 			break;
1005 		case 6:
1006 			mmc->version = MMC_VERSION_4_5;
1007 			break;
1008 		case 7:
1009 			mmc->version = MMC_VERSION_5_0;
1010 			break;
1011 		}
1012 
1013 		/* The partition data may be non-zero but it is only
1014 		 * effective if PARTITION_SETTING_COMPLETED is set in
1015 		 * EXT_CSD, so ignore any data if this bit is not set,
1016 		 * except for enabling the high-capacity group size
1017 		 * definition (see below). */
1018 		part_completed = !!(ext_csd[EXT_CSD_PARTITION_SETTING] &
1019 				    EXT_CSD_PARTITION_SETTING_COMPLETED);
1020 
1021 		/* store the partition info of emmc */
1022 		mmc->part_support = ext_csd[EXT_CSD_PARTITIONING_SUPPORT];
1023 		if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) ||
1024 		    ext_csd[EXT_CSD_BOOT_MULT])
1025 			mmc->part_config = ext_csd[EXT_CSD_PART_CONF];
1026 		if (part_completed &&
1027 		    (ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & ENHNCD_SUPPORT))
1028 			mmc->part_attr = ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE];
1029 
1030 		mmc->capacity_boot = ext_csd[EXT_CSD_BOOT_MULT] << 17;
1031 
1032 		mmc->capacity_rpmb = ext_csd[EXT_CSD_RPMB_MULT] << 17;
1033 
1034 		for (i = 0; i < 4; i++) {
1035 			int idx = EXT_CSD_GP_SIZE_MULT + i * 3;
1036 			uint mult = (ext_csd[idx + 2] << 16) +
1037 				(ext_csd[idx + 1] << 8) + ext_csd[idx];
1038 			if (mult)
1039 				has_parts = true;
1040 			if (!part_completed)
1041 				continue;
1042 			mmc->capacity_gp[i] = mult;
1043 			mmc->capacity_gp[i] *=
1044 				ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
1045 			mmc->capacity_gp[i] *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
1046 			mmc->capacity_gp[i] <<= 19;
1047 		}
1048 
1049 		if (part_completed) {
1050 			mmc->enh_user_size =
1051 				(ext_csd[EXT_CSD_ENH_SIZE_MULT+2] << 16) +
1052 				(ext_csd[EXT_CSD_ENH_SIZE_MULT+1] << 8) +
1053 				ext_csd[EXT_CSD_ENH_SIZE_MULT];
1054 			mmc->enh_user_size *= ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
1055 			mmc->enh_user_size *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
1056 			mmc->enh_user_size <<= 19;
1057 			mmc->enh_user_start =
1058 				(ext_csd[EXT_CSD_ENH_START_ADDR+3] << 24) +
1059 				(ext_csd[EXT_CSD_ENH_START_ADDR+2] << 16) +
1060 				(ext_csd[EXT_CSD_ENH_START_ADDR+1] << 8) +
1061 				ext_csd[EXT_CSD_ENH_START_ADDR];
1062 			if (mmc->high_capacity)
1063 				mmc->enh_user_start <<= 9;
1064 		}
1065 
1066 		/*
1067 		 * Host needs to enable ERASE_GRP_DEF bit if device is
1068 		 * partitioned. This bit will be lost every time after a reset
1069 		 * or power off. This will affect erase size.
1070 		 */
1071 		if (part_completed)
1072 			has_parts = true;
1073 		if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) &&
1074 		    (ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE] & PART_ENH_ATTRIB))
1075 			has_parts = true;
1076 		if (has_parts) {
1077 			err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1078 				EXT_CSD_ERASE_GROUP_DEF, 1);
1079 
1080 			if (err)
1081 				return err;
1082 			else
1083 				ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1;
1084 		}
1085 
1086 		if (ext_csd[EXT_CSD_ERASE_GROUP_DEF] & 0x01) {
1087 			/* Read out group size from ext_csd */
1088 			mmc->erase_grp_size =
1089 				ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 1024;
1090 			/*
1091 			 * if high capacity and partition setting completed
1092 			 * SEC_COUNT is valid even if it is smaller than 2 GiB
1093 			 * JEDEC Standard JESD84-B45, 6.2.4
1094 			 */
1095 			if (mmc->high_capacity && part_completed) {
1096 				capacity = (ext_csd[EXT_CSD_SEC_CNT]) |
1097 					(ext_csd[EXT_CSD_SEC_CNT + 1] << 8) |
1098 					(ext_csd[EXT_CSD_SEC_CNT + 2] << 16) |
1099 					(ext_csd[EXT_CSD_SEC_CNT + 3] << 24);
1100 				capacity *= MMC_MAX_BLOCK_LEN;
1101 				mmc->capacity_user = capacity;
1102 			}
1103 		} else {
1104 			/* Calculate the group size from the csd value. */
1105 			int erase_gsz, erase_gmul;
1106 			erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10;
1107 			erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5;
1108 			mmc->erase_grp_size = (erase_gsz + 1)
1109 				* (erase_gmul + 1);
1110 		}
1111 
1112 		mmc->hc_wp_grp_size = 1024
1113 			* ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
1114 			* ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
1115 	}
1116 
1117 	err = mmc_set_capacity(mmc, mmc->part_num);
1118 	if (err)
1119 		return err;
1120 
1121 	if (IS_SD(mmc))
1122 		err = sd_change_freq(mmc);
1123 	else
1124 		err = mmc_change_freq(mmc);
1125 
1126 	if (err)
1127 		return err;
1128 
1129 	/* Restrict card's capabilities by what the host can do */
1130 	mmc->card_caps &= mmc->cfg->host_caps;
1131 
1132 	if (IS_SD(mmc)) {
1133 		if (mmc->card_caps & MMC_MODE_4BIT) {
1134 			cmd.cmdidx = MMC_CMD_APP_CMD;
1135 			cmd.resp_type = MMC_RSP_R1;
1136 			cmd.cmdarg = mmc->rca << 16;
1137 
1138 			err = mmc_send_cmd(mmc, &cmd, NULL);
1139 			if (err)
1140 				return err;
1141 
1142 			cmd.cmdidx = SD_CMD_APP_SET_BUS_WIDTH;
1143 			cmd.resp_type = MMC_RSP_R1;
1144 			cmd.cmdarg = 2;
1145 			err = mmc_send_cmd(mmc, &cmd, NULL);
1146 			if (err)
1147 				return err;
1148 
1149 			mmc_set_bus_width(mmc, 4);
1150 		}
1151 
1152 		if (mmc->card_caps & MMC_MODE_HS)
1153 			mmc->tran_speed = 50000000;
1154 		else
1155 			mmc->tran_speed = 25000000;
1156 	} else {
1157 		int idx;
1158 
1159 		/* An array of possible bus widths in order of preference */
1160 		static unsigned ext_csd_bits[] = {
1161 			EXT_CSD_DDR_BUS_WIDTH_8,
1162 			EXT_CSD_DDR_BUS_WIDTH_4,
1163 			EXT_CSD_BUS_WIDTH_8,
1164 			EXT_CSD_BUS_WIDTH_4,
1165 			EXT_CSD_BUS_WIDTH_1,
1166 		};
1167 
1168 		/* An array to map CSD bus widths to host cap bits */
1169 		static unsigned ext_to_hostcaps[] = {
1170 			[EXT_CSD_DDR_BUS_WIDTH_4] =
1171 				MMC_MODE_DDR_52MHz | MMC_MODE_4BIT,
1172 			[EXT_CSD_DDR_BUS_WIDTH_8] =
1173 				MMC_MODE_DDR_52MHz | MMC_MODE_8BIT,
1174 			[EXT_CSD_BUS_WIDTH_4] = MMC_MODE_4BIT,
1175 			[EXT_CSD_BUS_WIDTH_8] = MMC_MODE_8BIT,
1176 		};
1177 
1178 		/* An array to map chosen bus width to an integer */
1179 		static unsigned widths[] = {
1180 			8, 4, 8, 4, 1,
1181 		};
1182 
1183 		for (idx=0; idx < ARRAY_SIZE(ext_csd_bits); idx++) {
1184 			unsigned int extw = ext_csd_bits[idx];
1185 			unsigned int caps = ext_to_hostcaps[extw];
1186 
1187 			/*
1188 			 * Check to make sure the card and controller support
1189 			 * these capabilities
1190 			 */
1191 			if ((mmc->card_caps & caps) != caps)
1192 				continue;
1193 
1194 			err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1195 					EXT_CSD_BUS_WIDTH, extw);
1196 
1197 			if (err)
1198 				continue;
1199 
1200 			mmc->ddr_mode = (caps & MMC_MODE_DDR_52MHz) ? 1 : 0;
1201 			mmc_set_bus_width(mmc, widths[idx]);
1202 
1203 			err = mmc_send_ext_csd(mmc, test_csd);
1204 
1205 			if (err)
1206 				continue;
1207 
1208 			/* Only compare read only fields */
1209 			if (ext_csd[EXT_CSD_PARTITIONING_SUPPORT]
1210 				== test_csd[EXT_CSD_PARTITIONING_SUPPORT] &&
1211 			    ext_csd[EXT_CSD_HC_WP_GRP_SIZE]
1212 				== test_csd[EXT_CSD_HC_WP_GRP_SIZE] &&
1213 			    ext_csd[EXT_CSD_REV]
1214 				== test_csd[EXT_CSD_REV] &&
1215 			    ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
1216 				== test_csd[EXT_CSD_HC_ERASE_GRP_SIZE] &&
1217 			    memcmp(&ext_csd[EXT_CSD_SEC_CNT],
1218 				   &test_csd[EXT_CSD_SEC_CNT], 4) == 0)
1219 				break;
1220 			else
1221 				err = SWITCH_ERR;
1222 		}
1223 
1224 		if (err)
1225 			return err;
1226 
1227 		if (mmc->card_caps & MMC_MODE_HS) {
1228 			if (mmc->card_caps & MMC_MODE_HS_52MHz)
1229 				mmc->tran_speed = 52000000;
1230 			else
1231 				mmc->tran_speed = 26000000;
1232 		}
1233 	}
1234 
1235 	mmc_set_clock(mmc, mmc->tran_speed);
1236 
1237 	/* Fix the block length for DDR mode */
1238 	if (mmc->ddr_mode) {
1239 		mmc->read_bl_len = MMC_MAX_BLOCK_LEN;
1240 		mmc->write_bl_len = MMC_MAX_BLOCK_LEN;
1241 	}
1242 
1243 	/* fill in device description */
1244 	mmc->block_dev.lun = 0;
1245 	mmc->block_dev.type = 0;
1246 	mmc->block_dev.blksz = mmc->read_bl_len;
1247 	mmc->block_dev.log2blksz = LOG2(mmc->block_dev.blksz);
1248 	mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);
1249 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1250 	sprintf(mmc->block_dev.vendor, "Man %06x Snr %04x%04x",
1251 		mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff),
1252 		(mmc->cid[3] >> 16) & 0xffff);
1253 	sprintf(mmc->block_dev.product, "%c%c%c%c%c%c", mmc->cid[0] & 0xff,
1254 		(mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
1255 		(mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff,
1256 		(mmc->cid[2] >> 24) & 0xff);
1257 	sprintf(mmc->block_dev.revision, "%d.%d", (mmc->cid[2] >> 20) & 0xf,
1258 		(mmc->cid[2] >> 16) & 0xf);
1259 #else
1260 	mmc->block_dev.vendor[0] = 0;
1261 	mmc->block_dev.product[0] = 0;
1262 	mmc->block_dev.revision[0] = 0;
1263 #endif
1264 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBDISK_SUPPORT)
1265 	init_part(&mmc->block_dev);
1266 #endif
1267 
1268 	return 0;
1269 }
1270 
1271 static int mmc_send_if_cond(struct mmc *mmc)
1272 {
1273 	struct mmc_cmd cmd;
1274 	int err;
1275 
1276 	cmd.cmdidx = SD_CMD_SEND_IF_COND;
1277 	/* We set the bit if the host supports voltages between 2.7 and 3.6 V */
1278 	cmd.cmdarg = ((mmc->cfg->voltages & 0xff8000) != 0) << 8 | 0xaa;
1279 	cmd.resp_type = MMC_RSP_R7;
1280 
1281 	err = mmc_send_cmd(mmc, &cmd, NULL);
1282 
1283 	if (err)
1284 		return err;
1285 
1286 	if ((cmd.response[0] & 0xff) != 0xaa)
1287 		return UNUSABLE_ERR;
1288 	else
1289 		mmc->version = SD_VERSION_2;
1290 
1291 	return 0;
1292 }
1293 
1294 /* not used any more */
1295 int __deprecated mmc_register(struct mmc *mmc)
1296 {
1297 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1298 	printf("%s is deprecated! use mmc_create() instead.\n", __func__);
1299 #endif
1300 	return -1;
1301 }
1302 
1303 struct mmc *mmc_create(const struct mmc_config *cfg, void *priv)
1304 {
1305 	struct mmc *mmc;
1306 
1307 	/* quick validation */
1308 	if (cfg == NULL || cfg->ops == NULL || cfg->ops->send_cmd == NULL ||
1309 			cfg->f_min == 0 || cfg->f_max == 0 || cfg->b_max == 0)
1310 		return NULL;
1311 
1312 	mmc = calloc(1, sizeof(*mmc));
1313 	if (mmc == NULL)
1314 		return NULL;
1315 
1316 	mmc->cfg = cfg;
1317 	mmc->priv = priv;
1318 
1319 	/* the following chunk was mmc_register() */
1320 
1321 	/* Setup dsr related values */
1322 	mmc->dsr_imp = 0;
1323 	mmc->dsr = 0xffffffff;
1324 	/* Setup the universal parts of the block interface just once */
1325 	mmc->block_dev.if_type = IF_TYPE_MMC;
1326 	mmc->block_dev.dev = cur_dev_num++;
1327 	mmc->block_dev.removable = 1;
1328 	mmc->block_dev.block_read = mmc_bread;
1329 	mmc->block_dev.block_write = mmc_bwrite;
1330 	mmc->block_dev.block_erase = mmc_berase;
1331 
1332 	/* setup initial part type */
1333 	mmc->block_dev.part_type = mmc->cfg->part_type;
1334 
1335 	INIT_LIST_HEAD(&mmc->link);
1336 
1337 	list_add_tail(&mmc->link, &mmc_devices);
1338 
1339 	return mmc;
1340 }
1341 
1342 void mmc_destroy(struct mmc *mmc)
1343 {
1344 	/* only freeing memory for now */
1345 	free(mmc);
1346 }
1347 
1348 #ifdef CONFIG_PARTITIONS
1349 block_dev_desc_t *mmc_get_dev(int dev)
1350 {
1351 	struct mmc *mmc = find_mmc_device(dev);
1352 	if (!mmc || mmc_init(mmc))
1353 		return NULL;
1354 
1355 	return &mmc->block_dev;
1356 }
1357 #endif
1358 
1359 /* board-specific MMC power initializations. */
1360 __weak void board_mmc_power_init(void)
1361 {
1362 }
1363 
1364 int mmc_start_init(struct mmc *mmc)
1365 {
1366 	int err;
1367 
1368 	/* we pretend there's no card when init is NULL */
1369 	if (mmc_getcd(mmc) == 0 || mmc->cfg->ops->init == NULL) {
1370 		mmc->has_init = 0;
1371 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1372 		printf("MMC: no card present\n");
1373 #endif
1374 		return NO_CARD_ERR;
1375 	}
1376 
1377 	if (mmc->has_init)
1378 		return 0;
1379 
1380 	board_mmc_power_init();
1381 
1382 	/* made sure it's not NULL earlier */
1383 	err = mmc->cfg->ops->init(mmc);
1384 
1385 	if (err)
1386 		return err;
1387 
1388 	mmc->ddr_mode = 0;
1389 	mmc_set_bus_width(mmc, 1);
1390 	mmc_set_clock(mmc, 1);
1391 
1392 	/* Reset the Card */
1393 	err = mmc_go_idle(mmc);
1394 
1395 	if (err)
1396 		return err;
1397 
1398 	/* The internal partition reset to user partition(0) at every CMD0*/
1399 	mmc->part_num = 0;
1400 
1401 	/* Test for SD version 2 */
1402 	err = mmc_send_if_cond(mmc);
1403 
1404 	/* Now try to get the SD card's operating condition */
1405 	err = sd_send_op_cond(mmc);
1406 
1407 	/* If the command timed out, we check for an MMC card */
1408 	if (err == TIMEOUT) {
1409 		err = mmc_send_op_cond(mmc);
1410 
1411 		if (err && err != IN_PROGRESS) {
1412 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1413 			printf("Card did not respond to voltage select!\n");
1414 #endif
1415 			return UNUSABLE_ERR;
1416 		}
1417 	}
1418 
1419 	if (err == IN_PROGRESS)
1420 		mmc->init_in_progress = 1;
1421 
1422 	return err;
1423 }
1424 
1425 static int mmc_complete_init(struct mmc *mmc)
1426 {
1427 	int err = 0;
1428 
1429 	if (mmc->op_cond_pending)
1430 		err = mmc_complete_op_cond(mmc);
1431 
1432 	if (!err)
1433 		err = mmc_startup(mmc);
1434 	if (err)
1435 		mmc->has_init = 0;
1436 	else
1437 		mmc->has_init = 1;
1438 	mmc->init_in_progress = 0;
1439 	return err;
1440 }
1441 
1442 int mmc_init(struct mmc *mmc)
1443 {
1444 	int err = IN_PROGRESS;
1445 	unsigned start;
1446 
1447 	if (mmc->has_init)
1448 		return 0;
1449 
1450 	start = get_timer(0);
1451 
1452 	if (!mmc->init_in_progress)
1453 		err = mmc_start_init(mmc);
1454 
1455 	if (!err || err == IN_PROGRESS)
1456 		err = mmc_complete_init(mmc);
1457 	debug("%s: %d, time %lu\n", __func__, err, get_timer(start));
1458 	return err;
1459 }
1460 
1461 int mmc_set_dsr(struct mmc *mmc, u16 val)
1462 {
1463 	mmc->dsr = val;
1464 	return 0;
1465 }
1466 
1467 /* CPU-specific MMC initializations */
1468 __weak int cpu_mmc_init(bd_t *bis)
1469 {
1470 	return -1;
1471 }
1472 
1473 /* board-specific MMC initializations. */
1474 __weak int board_mmc_init(bd_t *bis)
1475 {
1476 	return -1;
1477 }
1478 
1479 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1480 
1481 void print_mmc_devices(char separator)
1482 {
1483 	struct mmc *m;
1484 	struct list_head *entry;
1485 
1486 	list_for_each(entry, &mmc_devices) {
1487 		m = list_entry(entry, struct mmc, link);
1488 
1489 		printf("%s: %d", m->cfg->name, m->block_dev.dev);
1490 
1491 		if (entry->next != &mmc_devices) {
1492 			printf("%c", separator);
1493 			if (separator != '\n')
1494 				puts (" ");
1495 		}
1496 	}
1497 
1498 	printf("\n");
1499 }
1500 
1501 #else
1502 void print_mmc_devices(char separator) { }
1503 #endif
1504 
1505 int get_mmc_num(void)
1506 {
1507 	return cur_dev_num;
1508 }
1509 
1510 void mmc_set_preinit(struct mmc *mmc, int preinit)
1511 {
1512 	mmc->preinit = preinit;
1513 }
1514 
1515 static void do_preinit(void)
1516 {
1517 	struct mmc *m;
1518 	struct list_head *entry;
1519 
1520 	list_for_each(entry, &mmc_devices) {
1521 		m = list_entry(entry, struct mmc, link);
1522 
1523 		if (m->preinit)
1524 			mmc_start_init(m);
1525 	}
1526 }
1527 
1528 
1529 int mmc_initialize(bd_t *bis)
1530 {
1531 	INIT_LIST_HEAD (&mmc_devices);
1532 	cur_dev_num = 0;
1533 
1534 	if (board_mmc_init(bis) < 0)
1535 		cpu_mmc_init(bis);
1536 
1537 #ifndef CONFIG_SPL_BUILD
1538 	print_mmc_devices(',');
1539 #endif
1540 
1541 	do_preinit();
1542 	return 0;
1543 }
1544 
1545 #ifdef CONFIG_SUPPORT_EMMC_BOOT
1546 /*
1547  * This function changes the size of boot partition and the size of rpmb
1548  * partition present on EMMC devices.
1549  *
1550  * Input Parameters:
1551  * struct *mmc: pointer for the mmc device strcuture
1552  * bootsize: size of boot partition
1553  * rpmbsize: size of rpmb partition
1554  *
1555  * Returns 0 on success.
1556  */
1557 
1558 int mmc_boot_partition_size_change(struct mmc *mmc, unsigned long bootsize,
1559 				unsigned long rpmbsize)
1560 {
1561 	int err;
1562 	struct mmc_cmd cmd;
1563 
1564 	/* Only use this command for raw EMMC moviNAND. Enter backdoor mode */
1565 	cmd.cmdidx = MMC_CMD_RES_MAN;
1566 	cmd.resp_type = MMC_RSP_R1b;
1567 	cmd.cmdarg = MMC_CMD62_ARG1;
1568 
1569 	err = mmc_send_cmd(mmc, &cmd, NULL);
1570 	if (err) {
1571 		debug("mmc_boot_partition_size_change: Error1 = %d\n", err);
1572 		return err;
1573 	}
1574 
1575 	/* Boot partition changing mode */
1576 	cmd.cmdidx = MMC_CMD_RES_MAN;
1577 	cmd.resp_type = MMC_RSP_R1b;
1578 	cmd.cmdarg = MMC_CMD62_ARG2;
1579 
1580 	err = mmc_send_cmd(mmc, &cmd, NULL);
1581 	if (err) {
1582 		debug("mmc_boot_partition_size_change: Error2 = %d\n", err);
1583 		return err;
1584 	}
1585 	/* boot partition size is multiple of 128KB */
1586 	bootsize = (bootsize * 1024) / 128;
1587 
1588 	/* Arg: boot partition size */
1589 	cmd.cmdidx = MMC_CMD_RES_MAN;
1590 	cmd.resp_type = MMC_RSP_R1b;
1591 	cmd.cmdarg = bootsize;
1592 
1593 	err = mmc_send_cmd(mmc, &cmd, NULL);
1594 	if (err) {
1595 		debug("mmc_boot_partition_size_change: Error3 = %d\n", err);
1596 		return err;
1597 	}
1598 	/* RPMB partition size is multiple of 128KB */
1599 	rpmbsize = (rpmbsize * 1024) / 128;
1600 	/* Arg: RPMB partition size */
1601 	cmd.cmdidx = MMC_CMD_RES_MAN;
1602 	cmd.resp_type = MMC_RSP_R1b;
1603 	cmd.cmdarg = rpmbsize;
1604 
1605 	err = mmc_send_cmd(mmc, &cmd, NULL);
1606 	if (err) {
1607 		debug("mmc_boot_partition_size_change: Error4 = %d\n", err);
1608 		return err;
1609 	}
1610 	return 0;
1611 }
1612 
1613 /*
1614  * Modify EXT_CSD[177] which is BOOT_BUS_WIDTH
1615  * based on the passed in values for BOOT_BUS_WIDTH, RESET_BOOT_BUS_WIDTH
1616  * and BOOT_MODE.
1617  *
1618  * Returns 0 on success.
1619  */
1620 int mmc_set_boot_bus_width(struct mmc *mmc, u8 width, u8 reset, u8 mode)
1621 {
1622 	int err;
1623 
1624 	err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BOOT_BUS_WIDTH,
1625 			 EXT_CSD_BOOT_BUS_WIDTH_MODE(mode) |
1626 			 EXT_CSD_BOOT_BUS_WIDTH_RESET(reset) |
1627 			 EXT_CSD_BOOT_BUS_WIDTH_WIDTH(width));
1628 
1629 	if (err)
1630 		return err;
1631 	return 0;
1632 }
1633 
1634 /*
1635  * Modify EXT_CSD[179] which is PARTITION_CONFIG (formerly BOOT_CONFIG)
1636  * based on the passed in values for BOOT_ACK, BOOT_PARTITION_ENABLE and
1637  * PARTITION_ACCESS.
1638  *
1639  * Returns 0 on success.
1640  */
1641 int mmc_set_part_conf(struct mmc *mmc, u8 ack, u8 part_num, u8 access)
1642 {
1643 	int err;
1644 
1645 	err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF,
1646 			 EXT_CSD_BOOT_ACK(ack) |
1647 			 EXT_CSD_BOOT_PART_NUM(part_num) |
1648 			 EXT_CSD_PARTITION_ACCESS(access));
1649 
1650 	if (err)
1651 		return err;
1652 	return 0;
1653 }
1654 
1655 /*
1656  * Modify EXT_CSD[162] which is RST_n_FUNCTION based on the given value
1657  * for enable.  Note that this is a write-once field for non-zero values.
1658  *
1659  * Returns 0 on success.
1660  */
1661 int mmc_set_rst_n_function(struct mmc *mmc, u8 enable)
1662 {
1663 	return mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_RST_N_FUNCTION,
1664 			  enable);
1665 }
1666 #endif
1667