xref: /openbmc/u-boot/drivers/mmc/mmc.c (revision 00f792e0df9ae942427e44595a0f4379582accee)
1 /*
2  * Copyright 2008, Freescale Semiconductor, Inc
3  * Andy Fleming
4  *
5  * Based vaguely on the Linux code
6  *
7  * See file CREDITS for list of people who contributed to this
8  * project.
9  *
10  * This program is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU General Public License as
12  * published by the Free Software Foundation; either version 2 of
13  * the License, or (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
23  * MA 02111-1307 USA
24  */
25 
26 #include <config.h>
27 #include <common.h>
28 #include <command.h>
29 #include <mmc.h>
30 #include <part.h>
31 #include <malloc.h>
32 #include <linux/list.h>
33 #include <div64.h>
34 
35 /* Set block count limit because of 16 bit register limit on some hardware*/
36 #ifndef CONFIG_SYS_MMC_MAX_BLK_COUNT
37 #define CONFIG_SYS_MMC_MAX_BLK_COUNT 65535
38 #endif
39 
40 static struct list_head mmc_devices;
41 static int cur_dev_num = -1;
42 
43 int __weak board_mmc_getwp(struct mmc *mmc)
44 {
45 	return -1;
46 }
47 
48 int mmc_getwp(struct mmc *mmc)
49 {
50 	int wp;
51 
52 	wp = board_mmc_getwp(mmc);
53 
54 	if (wp < 0) {
55 		if (mmc->getwp)
56 			wp = mmc->getwp(mmc);
57 		else
58 			wp = 0;
59 	}
60 
61 	return wp;
62 }
63 
64 int __board_mmc_getcd(struct mmc *mmc) {
65 	return -1;
66 }
67 
68 int board_mmc_getcd(struct mmc *mmc)__attribute__((weak,
69 	alias("__board_mmc_getcd")));
70 
71 static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
72 			struct mmc_data *data)
73 {
74 	struct mmc_data backup;
75 	int ret;
76 
77 	memset(&backup, 0, sizeof(backup));
78 
79 #ifdef CONFIG_MMC_TRACE
80 	int i;
81 	u8 *ptr;
82 
83 	printf("CMD_SEND:%d\n", cmd->cmdidx);
84 	printf("\t\tARG\t\t\t 0x%08X\n", cmd->cmdarg);
85 	ret = mmc->send_cmd(mmc, cmd, data);
86 	switch (cmd->resp_type) {
87 		case MMC_RSP_NONE:
88 			printf("\t\tMMC_RSP_NONE\n");
89 			break;
90 		case MMC_RSP_R1:
91 			printf("\t\tMMC_RSP_R1,5,6,7 \t 0x%08X \n",
92 				cmd->response[0]);
93 			break;
94 		case MMC_RSP_R1b:
95 			printf("\t\tMMC_RSP_R1b\t\t 0x%08X \n",
96 				cmd->response[0]);
97 			break;
98 		case MMC_RSP_R2:
99 			printf("\t\tMMC_RSP_R2\t\t 0x%08X \n",
100 				cmd->response[0]);
101 			printf("\t\t          \t\t 0x%08X \n",
102 				cmd->response[1]);
103 			printf("\t\t          \t\t 0x%08X \n",
104 				cmd->response[2]);
105 			printf("\t\t          \t\t 0x%08X \n",
106 				cmd->response[3]);
107 			printf("\n");
108 			printf("\t\t\t\t\tDUMPING DATA\n");
109 			for (i = 0; i < 4; i++) {
110 				int j;
111 				printf("\t\t\t\t\t%03d - ", i*4);
112 				ptr = (u8 *)&cmd->response[i];
113 				ptr += 3;
114 				for (j = 0; j < 4; j++)
115 					printf("%02X ", *ptr--);
116 				printf("\n");
117 			}
118 			break;
119 		case MMC_RSP_R3:
120 			printf("\t\tMMC_RSP_R3,4\t\t 0x%08X \n",
121 				cmd->response[0]);
122 			break;
123 		default:
124 			printf("\t\tERROR MMC rsp not supported\n");
125 			break;
126 	}
127 #else
128 	ret = mmc->send_cmd(mmc, cmd, data);
129 #endif
130 	return ret;
131 }
132 
133 static int mmc_send_status(struct mmc *mmc, int timeout)
134 {
135 	struct mmc_cmd cmd;
136 	int err, retries = 5;
137 #ifdef CONFIG_MMC_TRACE
138 	int status;
139 #endif
140 
141 	cmd.cmdidx = MMC_CMD_SEND_STATUS;
142 	cmd.resp_type = MMC_RSP_R1;
143 	if (!mmc_host_is_spi(mmc))
144 		cmd.cmdarg = mmc->rca << 16;
145 
146 	do {
147 		err = mmc_send_cmd(mmc, &cmd, NULL);
148 		if (!err) {
149 			if ((cmd.response[0] & MMC_STATUS_RDY_FOR_DATA) &&
150 			    (cmd.response[0] & MMC_STATUS_CURR_STATE) !=
151 			     MMC_STATE_PRG)
152 				break;
153 			else if (cmd.response[0] & MMC_STATUS_MASK) {
154 				printf("Status Error: 0x%08X\n",
155 					cmd.response[0]);
156 				return COMM_ERR;
157 			}
158 		} else if (--retries < 0)
159 			return err;
160 
161 		udelay(1000);
162 
163 	} while (timeout--);
164 
165 #ifdef CONFIG_MMC_TRACE
166 	status = (cmd.response[0] & MMC_STATUS_CURR_STATE) >> 9;
167 	printf("CURR STATE:%d\n", status);
168 #endif
169 	if (timeout <= 0) {
170 		printf("Timeout waiting card ready\n");
171 		return TIMEOUT;
172 	}
173 
174 	return 0;
175 }
176 
177 static int mmc_set_blocklen(struct mmc *mmc, int len)
178 {
179 	struct mmc_cmd cmd;
180 
181 	cmd.cmdidx = MMC_CMD_SET_BLOCKLEN;
182 	cmd.resp_type = MMC_RSP_R1;
183 	cmd.cmdarg = len;
184 
185 	return mmc_send_cmd(mmc, &cmd, NULL);
186 }
187 
188 struct mmc *find_mmc_device(int dev_num)
189 {
190 	struct mmc *m;
191 	struct list_head *entry;
192 
193 	list_for_each(entry, &mmc_devices) {
194 		m = list_entry(entry, struct mmc, link);
195 
196 		if (m->block_dev.dev == dev_num)
197 			return m;
198 	}
199 
200 	printf("MMC Device %d not found\n", dev_num);
201 
202 	return NULL;
203 }
204 
205 static ulong mmc_erase_t(struct mmc *mmc, ulong start, lbaint_t blkcnt)
206 {
207 	struct mmc_cmd cmd;
208 	ulong end;
209 	int err, start_cmd, end_cmd;
210 
211 	if (mmc->high_capacity)
212 		end = start + blkcnt - 1;
213 	else {
214 		end = (start + blkcnt - 1) * mmc->write_bl_len;
215 		start *= mmc->write_bl_len;
216 	}
217 
218 	if (IS_SD(mmc)) {
219 		start_cmd = SD_CMD_ERASE_WR_BLK_START;
220 		end_cmd = SD_CMD_ERASE_WR_BLK_END;
221 	} else {
222 		start_cmd = MMC_CMD_ERASE_GROUP_START;
223 		end_cmd = MMC_CMD_ERASE_GROUP_END;
224 	}
225 
226 	cmd.cmdidx = start_cmd;
227 	cmd.cmdarg = start;
228 	cmd.resp_type = MMC_RSP_R1;
229 
230 	err = mmc_send_cmd(mmc, &cmd, NULL);
231 	if (err)
232 		goto err_out;
233 
234 	cmd.cmdidx = end_cmd;
235 	cmd.cmdarg = end;
236 
237 	err = mmc_send_cmd(mmc, &cmd, NULL);
238 	if (err)
239 		goto err_out;
240 
241 	cmd.cmdidx = MMC_CMD_ERASE;
242 	cmd.cmdarg = SECURE_ERASE;
243 	cmd.resp_type = MMC_RSP_R1b;
244 
245 	err = mmc_send_cmd(mmc, &cmd, NULL);
246 	if (err)
247 		goto err_out;
248 
249 	return 0;
250 
251 err_out:
252 	puts("mmc erase failed\n");
253 	return err;
254 }
255 
256 static unsigned long
257 mmc_berase(int dev_num, lbaint_t start, lbaint_t blkcnt)
258 {
259 	int err = 0;
260 	struct mmc *mmc = find_mmc_device(dev_num);
261 	lbaint_t blk = 0, blk_r = 0;
262 	int timeout = 1000;
263 
264 	if (!mmc)
265 		return -1;
266 
267 	if ((start % mmc->erase_grp_size) || (blkcnt % mmc->erase_grp_size))
268 		printf("\n\nCaution! Your devices Erase group is 0x%x\n"
269 		       "The erase range would be change to "
270 		       "0x" LBAF "~0x" LBAF "\n\n",
271 		       mmc->erase_grp_size, start & ~(mmc->erase_grp_size - 1),
272 		       ((start + blkcnt + mmc->erase_grp_size)
273 		       & ~(mmc->erase_grp_size - 1)) - 1);
274 
275 	while (blk < blkcnt) {
276 		blk_r = ((blkcnt - blk) > mmc->erase_grp_size) ?
277 			mmc->erase_grp_size : (blkcnt - blk);
278 		err = mmc_erase_t(mmc, start + blk, blk_r);
279 		if (err)
280 			break;
281 
282 		blk += blk_r;
283 
284 		/* Waiting for the ready status */
285 		if (mmc_send_status(mmc, timeout))
286 			return 0;
287 	}
288 
289 	return blk;
290 }
291 
292 static ulong
293 mmc_write_blocks(struct mmc *mmc, lbaint_t start, lbaint_t blkcnt, const void*src)
294 {
295 	struct mmc_cmd cmd;
296 	struct mmc_data data;
297 	int timeout = 1000;
298 
299 	if ((start + blkcnt) > mmc->block_dev.lba) {
300 		printf("MMC: block number 0x" LBAF " exceeds max(0x" LBAF ")\n",
301 			start + blkcnt, mmc->block_dev.lba);
302 		return 0;
303 	}
304 
305 	if (blkcnt == 0)
306 		return 0;
307 	else if (blkcnt == 1)
308 		cmd.cmdidx = MMC_CMD_WRITE_SINGLE_BLOCK;
309 	else
310 		cmd.cmdidx = MMC_CMD_WRITE_MULTIPLE_BLOCK;
311 
312 	if (mmc->high_capacity)
313 		cmd.cmdarg = start;
314 	else
315 		cmd.cmdarg = start * mmc->write_bl_len;
316 
317 	cmd.resp_type = MMC_RSP_R1;
318 
319 	data.src = src;
320 	data.blocks = blkcnt;
321 	data.blocksize = mmc->write_bl_len;
322 	data.flags = MMC_DATA_WRITE;
323 
324 	if (mmc_send_cmd(mmc, &cmd, &data)) {
325 		printf("mmc write failed\n");
326 		return 0;
327 	}
328 
329 	/* SPI multiblock writes terminate using a special
330 	 * token, not a STOP_TRANSMISSION request.
331 	 */
332 	if (!mmc_host_is_spi(mmc) && blkcnt > 1) {
333 		cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
334 		cmd.cmdarg = 0;
335 		cmd.resp_type = MMC_RSP_R1b;
336 		if (mmc_send_cmd(mmc, &cmd, NULL)) {
337 			printf("mmc fail to send stop cmd\n");
338 			return 0;
339 		}
340 	}
341 
342 	/* Waiting for the ready status */
343 	if (mmc_send_status(mmc, timeout))
344 		return 0;
345 
346 	return blkcnt;
347 }
348 
349 static ulong
350 mmc_bwrite(int dev_num, lbaint_t start, lbaint_t blkcnt, const void*src)
351 {
352 	lbaint_t cur, blocks_todo = blkcnt;
353 
354 	struct mmc *mmc = find_mmc_device(dev_num);
355 	if (!mmc)
356 		return 0;
357 
358 	if (mmc_set_blocklen(mmc, mmc->write_bl_len))
359 		return 0;
360 
361 	do {
362 		cur = (blocks_todo > mmc->b_max) ?  mmc->b_max : blocks_todo;
363 		if(mmc_write_blocks(mmc, start, cur, src) != cur)
364 			return 0;
365 		blocks_todo -= cur;
366 		start += cur;
367 		src += cur * mmc->write_bl_len;
368 	} while (blocks_todo > 0);
369 
370 	return blkcnt;
371 }
372 
373 static int mmc_read_blocks(struct mmc *mmc, void *dst, lbaint_t start,
374 			   lbaint_t blkcnt)
375 {
376 	struct mmc_cmd cmd;
377 	struct mmc_data data;
378 
379 	if (blkcnt > 1)
380 		cmd.cmdidx = MMC_CMD_READ_MULTIPLE_BLOCK;
381 	else
382 		cmd.cmdidx = MMC_CMD_READ_SINGLE_BLOCK;
383 
384 	if (mmc->high_capacity)
385 		cmd.cmdarg = start;
386 	else
387 		cmd.cmdarg = start * mmc->read_bl_len;
388 
389 	cmd.resp_type = MMC_RSP_R1;
390 
391 	data.dest = dst;
392 	data.blocks = blkcnt;
393 	data.blocksize = mmc->read_bl_len;
394 	data.flags = MMC_DATA_READ;
395 
396 	if (mmc_send_cmd(mmc, &cmd, &data))
397 		return 0;
398 
399 	if (blkcnt > 1) {
400 		cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
401 		cmd.cmdarg = 0;
402 		cmd.resp_type = MMC_RSP_R1b;
403 		if (mmc_send_cmd(mmc, &cmd, NULL)) {
404 			printf("mmc fail to send stop cmd\n");
405 			return 0;
406 		}
407 	}
408 
409 	return blkcnt;
410 }
411 
412 static ulong mmc_bread(int dev_num, lbaint_t start, lbaint_t blkcnt, void *dst)
413 {
414 	lbaint_t cur, blocks_todo = blkcnt;
415 
416 	if (blkcnt == 0)
417 		return 0;
418 
419 	struct mmc *mmc = find_mmc_device(dev_num);
420 	if (!mmc)
421 		return 0;
422 
423 	if ((start + blkcnt) > mmc->block_dev.lba) {
424 		printf("MMC: block number 0x" LBAF " exceeds max(0x" LBAF ")\n",
425 			start + blkcnt, mmc->block_dev.lba);
426 		return 0;
427 	}
428 
429 	if (mmc_set_blocklen(mmc, mmc->read_bl_len))
430 		return 0;
431 
432 	do {
433 		cur = (blocks_todo > mmc->b_max) ?  mmc->b_max : blocks_todo;
434 		if(mmc_read_blocks(mmc, dst, start, cur) != cur)
435 			return 0;
436 		blocks_todo -= cur;
437 		start += cur;
438 		dst += cur * mmc->read_bl_len;
439 	} while (blocks_todo > 0);
440 
441 	return blkcnt;
442 }
443 
444 static int mmc_go_idle(struct mmc *mmc)
445 {
446 	struct mmc_cmd cmd;
447 	int err;
448 
449 	udelay(1000);
450 
451 	cmd.cmdidx = MMC_CMD_GO_IDLE_STATE;
452 	cmd.cmdarg = 0;
453 	cmd.resp_type = MMC_RSP_NONE;
454 
455 	err = mmc_send_cmd(mmc, &cmd, NULL);
456 
457 	if (err)
458 		return err;
459 
460 	udelay(2000);
461 
462 	return 0;
463 }
464 
465 static int sd_send_op_cond(struct mmc *mmc)
466 {
467 	int timeout = 1000;
468 	int err;
469 	struct mmc_cmd cmd;
470 
471 	do {
472 		cmd.cmdidx = MMC_CMD_APP_CMD;
473 		cmd.resp_type = MMC_RSP_R1;
474 		cmd.cmdarg = 0;
475 
476 		err = mmc_send_cmd(mmc, &cmd, NULL);
477 
478 		if (err)
479 			return err;
480 
481 		cmd.cmdidx = SD_CMD_APP_SEND_OP_COND;
482 		cmd.resp_type = MMC_RSP_R3;
483 
484 		/*
485 		 * Most cards do not answer if some reserved bits
486 		 * in the ocr are set. However, Some controller
487 		 * can set bit 7 (reserved for low voltages), but
488 		 * how to manage low voltages SD card is not yet
489 		 * specified.
490 		 */
491 		cmd.cmdarg = mmc_host_is_spi(mmc) ? 0 :
492 			(mmc->voltages & 0xff8000);
493 
494 		if (mmc->version == SD_VERSION_2)
495 			cmd.cmdarg |= OCR_HCS;
496 
497 		err = mmc_send_cmd(mmc, &cmd, NULL);
498 
499 		if (err)
500 			return err;
501 
502 		udelay(1000);
503 	} while ((!(cmd.response[0] & OCR_BUSY)) && timeout--);
504 
505 	if (timeout <= 0)
506 		return UNUSABLE_ERR;
507 
508 	if (mmc->version != SD_VERSION_2)
509 		mmc->version = SD_VERSION_1_0;
510 
511 	if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
512 		cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
513 		cmd.resp_type = MMC_RSP_R3;
514 		cmd.cmdarg = 0;
515 
516 		err = mmc_send_cmd(mmc, &cmd, NULL);
517 
518 		if (err)
519 			return err;
520 	}
521 
522 	mmc->ocr = cmd.response[0];
523 
524 	mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
525 	mmc->rca = 0;
526 
527 	return 0;
528 }
529 
530 /* We pass in the cmd since otherwise the init seems to fail */
531 static int mmc_send_op_cond_iter(struct mmc *mmc, struct mmc_cmd *cmd,
532 		int use_arg)
533 {
534 	int err;
535 
536 	cmd->cmdidx = MMC_CMD_SEND_OP_COND;
537 	cmd->resp_type = MMC_RSP_R3;
538 	cmd->cmdarg = 0;
539 	if (use_arg && !mmc_host_is_spi(mmc)) {
540 		cmd->cmdarg =
541 			(mmc->voltages &
542 			(mmc->op_cond_response & OCR_VOLTAGE_MASK)) |
543 			(mmc->op_cond_response & OCR_ACCESS_MODE);
544 
545 		if (mmc->host_caps & MMC_MODE_HC)
546 			cmd->cmdarg |= OCR_HCS;
547 	}
548 	err = mmc_send_cmd(mmc, cmd, NULL);
549 	if (err)
550 		return err;
551 	mmc->op_cond_response = cmd->response[0];
552 	return 0;
553 }
554 
555 int mmc_send_op_cond(struct mmc *mmc)
556 {
557 	struct mmc_cmd cmd;
558 	int err, i;
559 
560 	/* Some cards seem to need this */
561 	mmc_go_idle(mmc);
562 
563  	/* Asking to the card its capabilities */
564 	mmc->op_cond_pending = 1;
565 	for (i = 0; i < 2; i++) {
566 		err = mmc_send_op_cond_iter(mmc, &cmd, i != 0);
567 		if (err)
568 			return err;
569 
570 		/* exit if not busy (flag seems to be inverted) */
571 		if (mmc->op_cond_response & OCR_BUSY)
572 			return 0;
573 	}
574 	return IN_PROGRESS;
575 }
576 
577 int mmc_complete_op_cond(struct mmc *mmc)
578 {
579 	struct mmc_cmd cmd;
580 	int timeout = 1000;
581 	uint start;
582 	int err;
583 
584 	mmc->op_cond_pending = 0;
585 	start = get_timer(0);
586 	do {
587 		err = mmc_send_op_cond_iter(mmc, &cmd, 1);
588 		if (err)
589 			return err;
590 		if (get_timer(start) > timeout)
591 			return UNUSABLE_ERR;
592 		udelay(100);
593 	} while (!(mmc->op_cond_response & OCR_BUSY));
594 
595 	if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
596 		cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
597 		cmd.resp_type = MMC_RSP_R3;
598 		cmd.cmdarg = 0;
599 
600 		err = mmc_send_cmd(mmc, &cmd, NULL);
601 
602 		if (err)
603 			return err;
604 	}
605 
606 	mmc->version = MMC_VERSION_UNKNOWN;
607 	mmc->ocr = cmd.response[0];
608 
609 	mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
610 	mmc->rca = 0;
611 
612 	return 0;
613 }
614 
615 
616 static int mmc_send_ext_csd(struct mmc *mmc, u8 *ext_csd)
617 {
618 	struct mmc_cmd cmd;
619 	struct mmc_data data;
620 	int err;
621 
622 	/* Get the Card Status Register */
623 	cmd.cmdidx = MMC_CMD_SEND_EXT_CSD;
624 	cmd.resp_type = MMC_RSP_R1;
625 	cmd.cmdarg = 0;
626 
627 	data.dest = (char *)ext_csd;
628 	data.blocks = 1;
629 	data.blocksize = MMC_MAX_BLOCK_LEN;
630 	data.flags = MMC_DATA_READ;
631 
632 	err = mmc_send_cmd(mmc, &cmd, &data);
633 
634 	return err;
635 }
636 
637 
638 static int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)
639 {
640 	struct mmc_cmd cmd;
641 	int timeout = 1000;
642 	int ret;
643 
644 	cmd.cmdidx = MMC_CMD_SWITCH;
645 	cmd.resp_type = MMC_RSP_R1b;
646 	cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
647 				 (index << 16) |
648 				 (value << 8);
649 
650 	ret = mmc_send_cmd(mmc, &cmd, NULL);
651 
652 	/* Waiting for the ready status */
653 	if (!ret)
654 		ret = mmc_send_status(mmc, timeout);
655 
656 	return ret;
657 
658 }
659 
660 static int mmc_change_freq(struct mmc *mmc)
661 {
662 	ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
663 	char cardtype;
664 	int err;
665 
666 	mmc->card_caps = 0;
667 
668 	if (mmc_host_is_spi(mmc))
669 		return 0;
670 
671 	/* Only version 4 supports high-speed */
672 	if (mmc->version < MMC_VERSION_4)
673 		return 0;
674 
675 	err = mmc_send_ext_csd(mmc, ext_csd);
676 
677 	if (err)
678 		return err;
679 
680 	cardtype = ext_csd[EXT_CSD_CARD_TYPE] & 0xf;
681 
682 	err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING, 1);
683 
684 	if (err)
685 		return err;
686 
687 	/* Now check to see that it worked */
688 	err = mmc_send_ext_csd(mmc, ext_csd);
689 
690 	if (err)
691 		return err;
692 
693 	/* No high-speed support */
694 	if (!ext_csd[EXT_CSD_HS_TIMING])
695 		return 0;
696 
697 	/* High Speed is set, there are two types: 52MHz and 26MHz */
698 	if (cardtype & MMC_HS_52MHZ)
699 		mmc->card_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
700 	else
701 		mmc->card_caps |= MMC_MODE_HS;
702 
703 	return 0;
704 }
705 
706 static int mmc_set_capacity(struct mmc *mmc, int part_num)
707 {
708 	switch (part_num) {
709 	case 0:
710 		mmc->capacity = mmc->capacity_user;
711 		break;
712 	case 1:
713 	case 2:
714 		mmc->capacity = mmc->capacity_boot;
715 		break;
716 	case 3:
717 		mmc->capacity = mmc->capacity_rpmb;
718 		break;
719 	case 4:
720 	case 5:
721 	case 6:
722 	case 7:
723 		mmc->capacity = mmc->capacity_gp[part_num - 4];
724 		break;
725 	default:
726 		return -1;
727 	}
728 
729 	mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);
730 
731 	return 0;
732 }
733 
734 int mmc_switch_part(int dev_num, unsigned int part_num)
735 {
736 	struct mmc *mmc = find_mmc_device(dev_num);
737 	int ret;
738 
739 	if (!mmc)
740 		return -1;
741 
742 	ret = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF,
743 			 (mmc->part_config & ~PART_ACCESS_MASK)
744 			 | (part_num & PART_ACCESS_MASK));
745 	if (ret)
746 		return ret;
747 
748 	return mmc_set_capacity(mmc, part_num);
749 }
750 
751 int mmc_getcd(struct mmc *mmc)
752 {
753 	int cd;
754 
755 	cd = board_mmc_getcd(mmc);
756 
757 	if (cd < 0) {
758 		if (mmc->getcd)
759 			cd = mmc->getcd(mmc);
760 		else
761 			cd = 1;
762 	}
763 
764 	return cd;
765 }
766 
767 static int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)
768 {
769 	struct mmc_cmd cmd;
770 	struct mmc_data data;
771 
772 	/* Switch the frequency */
773 	cmd.cmdidx = SD_CMD_SWITCH_FUNC;
774 	cmd.resp_type = MMC_RSP_R1;
775 	cmd.cmdarg = (mode << 31) | 0xffffff;
776 	cmd.cmdarg &= ~(0xf << (group * 4));
777 	cmd.cmdarg |= value << (group * 4);
778 
779 	data.dest = (char *)resp;
780 	data.blocksize = 64;
781 	data.blocks = 1;
782 	data.flags = MMC_DATA_READ;
783 
784 	return mmc_send_cmd(mmc, &cmd, &data);
785 }
786 
787 
788 static int sd_change_freq(struct mmc *mmc)
789 {
790 	int err;
791 	struct mmc_cmd cmd;
792 	ALLOC_CACHE_ALIGN_BUFFER(uint, scr, 2);
793 	ALLOC_CACHE_ALIGN_BUFFER(uint, switch_status, 16);
794 	struct mmc_data data;
795 	int timeout;
796 
797 	mmc->card_caps = 0;
798 
799 	if (mmc_host_is_spi(mmc))
800 		return 0;
801 
802 	/* Read the SCR to find out if this card supports higher speeds */
803 	cmd.cmdidx = MMC_CMD_APP_CMD;
804 	cmd.resp_type = MMC_RSP_R1;
805 	cmd.cmdarg = mmc->rca << 16;
806 
807 	err = mmc_send_cmd(mmc, &cmd, NULL);
808 
809 	if (err)
810 		return err;
811 
812 	cmd.cmdidx = SD_CMD_APP_SEND_SCR;
813 	cmd.resp_type = MMC_RSP_R1;
814 	cmd.cmdarg = 0;
815 
816 	timeout = 3;
817 
818 retry_scr:
819 	data.dest = (char *)scr;
820 	data.blocksize = 8;
821 	data.blocks = 1;
822 	data.flags = MMC_DATA_READ;
823 
824 	err = mmc_send_cmd(mmc, &cmd, &data);
825 
826 	if (err) {
827 		if (timeout--)
828 			goto retry_scr;
829 
830 		return err;
831 	}
832 
833 	mmc->scr[0] = __be32_to_cpu(scr[0]);
834 	mmc->scr[1] = __be32_to_cpu(scr[1]);
835 
836 	switch ((mmc->scr[0] >> 24) & 0xf) {
837 		case 0:
838 			mmc->version = SD_VERSION_1_0;
839 			break;
840 		case 1:
841 			mmc->version = SD_VERSION_1_10;
842 			break;
843 		case 2:
844 			mmc->version = SD_VERSION_2;
845 			if ((mmc->scr[0] >> 15) & 0x1)
846 				mmc->version = SD_VERSION_3;
847 			break;
848 		default:
849 			mmc->version = SD_VERSION_1_0;
850 			break;
851 	}
852 
853 	if (mmc->scr[0] & SD_DATA_4BIT)
854 		mmc->card_caps |= MMC_MODE_4BIT;
855 
856 	/* Version 1.0 doesn't support switching */
857 	if (mmc->version == SD_VERSION_1_0)
858 		return 0;
859 
860 	timeout = 4;
861 	while (timeout--) {
862 		err = sd_switch(mmc, SD_SWITCH_CHECK, 0, 1,
863 				(u8 *)switch_status);
864 
865 		if (err)
866 			return err;
867 
868 		/* The high-speed function is busy.  Try again */
869 		if (!(__be32_to_cpu(switch_status[7]) & SD_HIGHSPEED_BUSY))
870 			break;
871 	}
872 
873 	/* If high-speed isn't supported, we return */
874 	if (!(__be32_to_cpu(switch_status[3]) & SD_HIGHSPEED_SUPPORTED))
875 		return 0;
876 
877 	/*
878 	 * If the host doesn't support SD_HIGHSPEED, do not switch card to
879 	 * HIGHSPEED mode even if the card support SD_HIGHSPPED.
880 	 * This can avoid furthur problem when the card runs in different
881 	 * mode between the host.
882 	 */
883 	if (!((mmc->host_caps & MMC_MODE_HS_52MHz) &&
884 		(mmc->host_caps & MMC_MODE_HS)))
885 		return 0;
886 
887 	err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, 1, (u8 *)switch_status);
888 
889 	if (err)
890 		return err;
891 
892 	if ((__be32_to_cpu(switch_status[4]) & 0x0f000000) == 0x01000000)
893 		mmc->card_caps |= MMC_MODE_HS;
894 
895 	return 0;
896 }
897 
898 /* frequency bases */
899 /* divided by 10 to be nice to platforms without floating point */
900 static const int fbase[] = {
901 	10000,
902 	100000,
903 	1000000,
904 	10000000,
905 };
906 
907 /* Multiplier values for TRAN_SPEED.  Multiplied by 10 to be nice
908  * to platforms without floating point.
909  */
910 static const int multipliers[] = {
911 	0,	/* reserved */
912 	10,
913 	12,
914 	13,
915 	15,
916 	20,
917 	25,
918 	30,
919 	35,
920 	40,
921 	45,
922 	50,
923 	55,
924 	60,
925 	70,
926 	80,
927 };
928 
929 static void mmc_set_ios(struct mmc *mmc)
930 {
931 	mmc->set_ios(mmc);
932 }
933 
934 void mmc_set_clock(struct mmc *mmc, uint clock)
935 {
936 	if (clock > mmc->f_max)
937 		clock = mmc->f_max;
938 
939 	if (clock < mmc->f_min)
940 		clock = mmc->f_min;
941 
942 	mmc->clock = clock;
943 
944 	mmc_set_ios(mmc);
945 }
946 
947 static void mmc_set_bus_width(struct mmc *mmc, uint width)
948 {
949 	mmc->bus_width = width;
950 
951 	mmc_set_ios(mmc);
952 }
953 
954 static int mmc_startup(struct mmc *mmc)
955 {
956 	int err, i;
957 	uint mult, freq;
958 	u64 cmult, csize, capacity;
959 	struct mmc_cmd cmd;
960 	ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
961 	ALLOC_CACHE_ALIGN_BUFFER(u8, test_csd, MMC_MAX_BLOCK_LEN);
962 	int timeout = 1000;
963 
964 #ifdef CONFIG_MMC_SPI_CRC_ON
965 	if (mmc_host_is_spi(mmc)) { /* enable CRC check for spi */
966 		cmd.cmdidx = MMC_CMD_SPI_CRC_ON_OFF;
967 		cmd.resp_type = MMC_RSP_R1;
968 		cmd.cmdarg = 1;
969 		err = mmc_send_cmd(mmc, &cmd, NULL);
970 
971 		if (err)
972 			return err;
973 	}
974 #endif
975 
976 	/* Put the Card in Identify Mode */
977 	cmd.cmdidx = mmc_host_is_spi(mmc) ? MMC_CMD_SEND_CID :
978 		MMC_CMD_ALL_SEND_CID; /* cmd not supported in spi */
979 	cmd.resp_type = MMC_RSP_R2;
980 	cmd.cmdarg = 0;
981 
982 	err = mmc_send_cmd(mmc, &cmd, NULL);
983 
984 	if (err)
985 		return err;
986 
987 	memcpy(mmc->cid, cmd.response, 16);
988 
989 	/*
990 	 * For MMC cards, set the Relative Address.
991 	 * For SD cards, get the Relatvie Address.
992 	 * This also puts the cards into Standby State
993 	 */
994 	if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
995 		cmd.cmdidx = SD_CMD_SEND_RELATIVE_ADDR;
996 		cmd.cmdarg = mmc->rca << 16;
997 		cmd.resp_type = MMC_RSP_R6;
998 
999 		err = mmc_send_cmd(mmc, &cmd, NULL);
1000 
1001 		if (err)
1002 			return err;
1003 
1004 		if (IS_SD(mmc))
1005 			mmc->rca = (cmd.response[0] >> 16) & 0xffff;
1006 	}
1007 
1008 	/* Get the Card-Specific Data */
1009 	cmd.cmdidx = MMC_CMD_SEND_CSD;
1010 	cmd.resp_type = MMC_RSP_R2;
1011 	cmd.cmdarg = mmc->rca << 16;
1012 
1013 	err = mmc_send_cmd(mmc, &cmd, NULL);
1014 
1015 	/* Waiting for the ready status */
1016 	mmc_send_status(mmc, timeout);
1017 
1018 	if (err)
1019 		return err;
1020 
1021 	mmc->csd[0] = cmd.response[0];
1022 	mmc->csd[1] = cmd.response[1];
1023 	mmc->csd[2] = cmd.response[2];
1024 	mmc->csd[3] = cmd.response[3];
1025 
1026 	if (mmc->version == MMC_VERSION_UNKNOWN) {
1027 		int version = (cmd.response[0] >> 26) & 0xf;
1028 
1029 		switch (version) {
1030 			case 0:
1031 				mmc->version = MMC_VERSION_1_2;
1032 				break;
1033 			case 1:
1034 				mmc->version = MMC_VERSION_1_4;
1035 				break;
1036 			case 2:
1037 				mmc->version = MMC_VERSION_2_2;
1038 				break;
1039 			case 3:
1040 				mmc->version = MMC_VERSION_3;
1041 				break;
1042 			case 4:
1043 				mmc->version = MMC_VERSION_4;
1044 				break;
1045 			default:
1046 				mmc->version = MMC_VERSION_1_2;
1047 				break;
1048 		}
1049 	}
1050 
1051 	/* divide frequency by 10, since the mults are 10x bigger */
1052 	freq = fbase[(cmd.response[0] & 0x7)];
1053 	mult = multipliers[((cmd.response[0] >> 3) & 0xf)];
1054 
1055 	mmc->tran_speed = freq * mult;
1056 
1057 	mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf);
1058 
1059 	if (IS_SD(mmc))
1060 		mmc->write_bl_len = mmc->read_bl_len;
1061 	else
1062 		mmc->write_bl_len = 1 << ((cmd.response[3] >> 22) & 0xf);
1063 
1064 	if (mmc->high_capacity) {
1065 		csize = (mmc->csd[1] & 0x3f) << 16
1066 			| (mmc->csd[2] & 0xffff0000) >> 16;
1067 		cmult = 8;
1068 	} else {
1069 		csize = (mmc->csd[1] & 0x3ff) << 2
1070 			| (mmc->csd[2] & 0xc0000000) >> 30;
1071 		cmult = (mmc->csd[2] & 0x00038000) >> 15;
1072 	}
1073 
1074 	mmc->capacity_user = (csize + 1) << (cmult + 2);
1075 	mmc->capacity_user *= mmc->read_bl_len;
1076 	mmc->capacity_boot = 0;
1077 	mmc->capacity_rpmb = 0;
1078 	for (i = 0; i < 4; i++)
1079 		mmc->capacity_gp[i] = 0;
1080 
1081 	if (mmc->read_bl_len > MMC_MAX_BLOCK_LEN)
1082 		mmc->read_bl_len = MMC_MAX_BLOCK_LEN;
1083 
1084 	if (mmc->write_bl_len > MMC_MAX_BLOCK_LEN)
1085 		mmc->write_bl_len = MMC_MAX_BLOCK_LEN;
1086 
1087 	/* Select the card, and put it into Transfer Mode */
1088 	if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
1089 		cmd.cmdidx = MMC_CMD_SELECT_CARD;
1090 		cmd.resp_type = MMC_RSP_R1;
1091 		cmd.cmdarg = mmc->rca << 16;
1092 		err = mmc_send_cmd(mmc, &cmd, NULL);
1093 
1094 		if (err)
1095 			return err;
1096 	}
1097 
1098 	/*
1099 	 * For SD, its erase group is always one sector
1100 	 */
1101 	mmc->erase_grp_size = 1;
1102 	mmc->part_config = MMCPART_NOAVAILABLE;
1103 	if (!IS_SD(mmc) && (mmc->version >= MMC_VERSION_4)) {
1104 		/* check  ext_csd version and capacity */
1105 		err = mmc_send_ext_csd(mmc, ext_csd);
1106 		if (!err && (ext_csd[EXT_CSD_REV] >= 2)) {
1107 			/*
1108 			 * According to the JEDEC Standard, the value of
1109 			 * ext_csd's capacity is valid if the value is more
1110 			 * than 2GB
1111 			 */
1112 			capacity = ext_csd[EXT_CSD_SEC_CNT] << 0
1113 					| ext_csd[EXT_CSD_SEC_CNT + 1] << 8
1114 					| ext_csd[EXT_CSD_SEC_CNT + 2] << 16
1115 					| ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
1116 			capacity *= MMC_MAX_BLOCK_LEN;
1117 			if ((capacity >> 20) > 2 * 1024)
1118 				mmc->capacity_user = capacity;
1119 		}
1120 
1121 		switch (ext_csd[EXT_CSD_REV]) {
1122 		case 1:
1123 			mmc->version = MMC_VERSION_4_1;
1124 			break;
1125 		case 2:
1126 			mmc->version = MMC_VERSION_4_2;
1127 			break;
1128 		case 3:
1129 			mmc->version = MMC_VERSION_4_3;
1130 			break;
1131 		case 5:
1132 			mmc->version = MMC_VERSION_4_41;
1133 			break;
1134 		case 6:
1135 			mmc->version = MMC_VERSION_4_5;
1136 			break;
1137 		}
1138 
1139 		/*
1140 		 * Check whether GROUP_DEF is set, if yes, read out
1141 		 * group size from ext_csd directly, or calculate
1142 		 * the group size from the csd value.
1143 		 */
1144 		if (ext_csd[EXT_CSD_ERASE_GROUP_DEF]) {
1145 			mmc->erase_grp_size =
1146 				ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] *
1147 					MMC_MAX_BLOCK_LEN * 1024;
1148 		} else {
1149 			int erase_gsz, erase_gmul;
1150 			erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10;
1151 			erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5;
1152 			mmc->erase_grp_size = (erase_gsz + 1)
1153 				* (erase_gmul + 1);
1154 		}
1155 
1156 		/* store the partition info of emmc */
1157 		if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) ||
1158 		    ext_csd[EXT_CSD_BOOT_MULT])
1159 			mmc->part_config = ext_csd[EXT_CSD_PART_CONF];
1160 
1161 		mmc->capacity_boot = ext_csd[EXT_CSD_BOOT_MULT] << 17;
1162 
1163 		mmc->capacity_rpmb = ext_csd[EXT_CSD_RPMB_MULT] << 17;
1164 
1165 		for (i = 0; i < 4; i++) {
1166 			int idx = EXT_CSD_GP_SIZE_MULT + i * 3;
1167 			mmc->capacity_gp[i] = (ext_csd[idx + 2] << 16) +
1168 				(ext_csd[idx + 1] << 8) + ext_csd[idx];
1169 			mmc->capacity_gp[i] *=
1170 				ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
1171 			mmc->capacity_gp[i] *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
1172 		}
1173 	}
1174 
1175 	err = mmc_set_capacity(mmc, mmc->part_num);
1176 	if (err)
1177 		return err;
1178 
1179 	if (IS_SD(mmc))
1180 		err = sd_change_freq(mmc);
1181 	else
1182 		err = mmc_change_freq(mmc);
1183 
1184 	if (err)
1185 		return err;
1186 
1187 	/* Restrict card's capabilities by what the host can do */
1188 	mmc->card_caps &= mmc->host_caps;
1189 
1190 	if (IS_SD(mmc)) {
1191 		if (mmc->card_caps & MMC_MODE_4BIT) {
1192 			cmd.cmdidx = MMC_CMD_APP_CMD;
1193 			cmd.resp_type = MMC_RSP_R1;
1194 			cmd.cmdarg = mmc->rca << 16;
1195 
1196 			err = mmc_send_cmd(mmc, &cmd, NULL);
1197 			if (err)
1198 				return err;
1199 
1200 			cmd.cmdidx = SD_CMD_APP_SET_BUS_WIDTH;
1201 			cmd.resp_type = MMC_RSP_R1;
1202 			cmd.cmdarg = 2;
1203 			err = mmc_send_cmd(mmc, &cmd, NULL);
1204 			if (err)
1205 				return err;
1206 
1207 			mmc_set_bus_width(mmc, 4);
1208 		}
1209 
1210 		if (mmc->card_caps & MMC_MODE_HS)
1211 			mmc->tran_speed = 50000000;
1212 		else
1213 			mmc->tran_speed = 25000000;
1214 	} else {
1215 		int idx;
1216 
1217 		/* An array of possible bus widths in order of preference */
1218 		static unsigned ext_csd_bits[] = {
1219 			EXT_CSD_BUS_WIDTH_8,
1220 			EXT_CSD_BUS_WIDTH_4,
1221 			EXT_CSD_BUS_WIDTH_1,
1222 		};
1223 
1224 		/* An array to map CSD bus widths to host cap bits */
1225 		static unsigned ext_to_hostcaps[] = {
1226 			[EXT_CSD_BUS_WIDTH_4] = MMC_MODE_4BIT,
1227 			[EXT_CSD_BUS_WIDTH_8] = MMC_MODE_8BIT,
1228 		};
1229 
1230 		/* An array to map chosen bus width to an integer */
1231 		static unsigned widths[] = {
1232 			8, 4, 1,
1233 		};
1234 
1235 		for (idx=0; idx < ARRAY_SIZE(ext_csd_bits); idx++) {
1236 			unsigned int extw = ext_csd_bits[idx];
1237 
1238 			/*
1239 			 * Check to make sure the controller supports
1240 			 * this bus width, if it's more than 1
1241 			 */
1242 			if (extw != EXT_CSD_BUS_WIDTH_1 &&
1243 					!(mmc->host_caps & ext_to_hostcaps[extw]))
1244 				continue;
1245 
1246 			err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1247 					EXT_CSD_BUS_WIDTH, extw);
1248 
1249 			if (err)
1250 				continue;
1251 
1252 			mmc_set_bus_width(mmc, widths[idx]);
1253 
1254 			err = mmc_send_ext_csd(mmc, test_csd);
1255 			if (!err && ext_csd[EXT_CSD_PARTITIONING_SUPPORT] \
1256 				    == test_csd[EXT_CSD_PARTITIONING_SUPPORT]
1257 				 && ext_csd[EXT_CSD_ERASE_GROUP_DEF] \
1258 				    == test_csd[EXT_CSD_ERASE_GROUP_DEF] \
1259 				 && ext_csd[EXT_CSD_REV] \
1260 				    == test_csd[EXT_CSD_REV]
1261 				 && ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] \
1262 				    == test_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
1263 				 && memcmp(&ext_csd[EXT_CSD_SEC_CNT], \
1264 					&test_csd[EXT_CSD_SEC_CNT], 4) == 0) {
1265 
1266 				mmc->card_caps |= ext_to_hostcaps[extw];
1267 				break;
1268 			}
1269 		}
1270 
1271 		if (mmc->card_caps & MMC_MODE_HS) {
1272 			if (mmc->card_caps & MMC_MODE_HS_52MHz)
1273 				mmc->tran_speed = 52000000;
1274 			else
1275 				mmc->tran_speed = 26000000;
1276 		}
1277 	}
1278 
1279 	mmc_set_clock(mmc, mmc->tran_speed);
1280 
1281 	/* fill in device description */
1282 	mmc->block_dev.lun = 0;
1283 	mmc->block_dev.type = 0;
1284 	mmc->block_dev.blksz = mmc->read_bl_len;
1285 	mmc->block_dev.log2blksz = LOG2(mmc->block_dev.blksz);
1286 	mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);
1287 	sprintf(mmc->block_dev.vendor, "Man %06x Snr %04x%04x",
1288 		mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff),
1289 		(mmc->cid[3] >> 16) & 0xffff);
1290 	sprintf(mmc->block_dev.product, "%c%c%c%c%c%c", mmc->cid[0] & 0xff,
1291 		(mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
1292 		(mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff,
1293 		(mmc->cid[2] >> 24) & 0xff);
1294 	sprintf(mmc->block_dev.revision, "%d.%d", (mmc->cid[2] >> 20) & 0xf,
1295 		(mmc->cid[2] >> 16) & 0xf);
1296 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBDISK_SUPPORT)
1297 	init_part(&mmc->block_dev);
1298 #endif
1299 
1300 	return 0;
1301 }
1302 
1303 static int mmc_send_if_cond(struct mmc *mmc)
1304 {
1305 	struct mmc_cmd cmd;
1306 	int err;
1307 
1308 	cmd.cmdidx = SD_CMD_SEND_IF_COND;
1309 	/* We set the bit if the host supports voltages between 2.7 and 3.6 V */
1310 	cmd.cmdarg = ((mmc->voltages & 0xff8000) != 0) << 8 | 0xaa;
1311 	cmd.resp_type = MMC_RSP_R7;
1312 
1313 	err = mmc_send_cmd(mmc, &cmd, NULL);
1314 
1315 	if (err)
1316 		return err;
1317 
1318 	if ((cmd.response[0] & 0xff) != 0xaa)
1319 		return UNUSABLE_ERR;
1320 	else
1321 		mmc->version = SD_VERSION_2;
1322 
1323 	return 0;
1324 }
1325 
1326 int mmc_register(struct mmc *mmc)
1327 {
1328 	/* Setup the universal parts of the block interface just once */
1329 	mmc->block_dev.if_type = IF_TYPE_MMC;
1330 	mmc->block_dev.dev = cur_dev_num++;
1331 	mmc->block_dev.removable = 1;
1332 	mmc->block_dev.block_read = mmc_bread;
1333 	mmc->block_dev.block_write = mmc_bwrite;
1334 	mmc->block_dev.block_erase = mmc_berase;
1335 	if (!mmc->b_max)
1336 		mmc->b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
1337 
1338 	INIT_LIST_HEAD (&mmc->link);
1339 
1340 	list_add_tail (&mmc->link, &mmc_devices);
1341 
1342 	return 0;
1343 }
1344 
1345 #ifdef CONFIG_PARTITIONS
1346 block_dev_desc_t *mmc_get_dev(int dev)
1347 {
1348 	struct mmc *mmc = find_mmc_device(dev);
1349 	if (!mmc || mmc_init(mmc))
1350 		return NULL;
1351 
1352 	return &mmc->block_dev;
1353 }
1354 #endif
1355 
1356 int mmc_start_init(struct mmc *mmc)
1357 {
1358 	int err;
1359 
1360 	if (mmc_getcd(mmc) == 0) {
1361 		mmc->has_init = 0;
1362 		printf("MMC: no card present\n");
1363 		return NO_CARD_ERR;
1364 	}
1365 
1366 	if (mmc->has_init)
1367 		return 0;
1368 
1369 	err = mmc->init(mmc);
1370 
1371 	if (err)
1372 		return err;
1373 
1374 	mmc_set_bus_width(mmc, 1);
1375 	mmc_set_clock(mmc, 1);
1376 
1377 	/* Reset the Card */
1378 	err = mmc_go_idle(mmc);
1379 
1380 	if (err)
1381 		return err;
1382 
1383 	/* The internal partition reset to user partition(0) at every CMD0*/
1384 	mmc->part_num = 0;
1385 
1386 	/* Test for SD version 2 */
1387 	err = mmc_send_if_cond(mmc);
1388 
1389 	/* Now try to get the SD card's operating condition */
1390 	err = sd_send_op_cond(mmc);
1391 
1392 	/* If the command timed out, we check for an MMC card */
1393 	if (err == TIMEOUT) {
1394 		err = mmc_send_op_cond(mmc);
1395 
1396 		if (err && err != IN_PROGRESS) {
1397 			printf("Card did not respond to voltage select!\n");
1398 			return UNUSABLE_ERR;
1399 		}
1400 	}
1401 
1402 	if (err == IN_PROGRESS)
1403 		mmc->init_in_progress = 1;
1404 
1405 	return err;
1406 }
1407 
1408 static int mmc_complete_init(struct mmc *mmc)
1409 {
1410 	int err = 0;
1411 
1412 	if (mmc->op_cond_pending)
1413 		err = mmc_complete_op_cond(mmc);
1414 
1415 	if (!err)
1416 		err = mmc_startup(mmc);
1417 	if (err)
1418 		mmc->has_init = 0;
1419 	else
1420 		mmc->has_init = 1;
1421 	mmc->init_in_progress = 0;
1422 	return err;
1423 }
1424 
1425 int mmc_init(struct mmc *mmc)
1426 {
1427 	int err = IN_PROGRESS;
1428 	unsigned start = get_timer(0);
1429 
1430 	if (mmc->has_init)
1431 		return 0;
1432 	if (!mmc->init_in_progress)
1433 		err = mmc_start_init(mmc);
1434 
1435 	if (!err || err == IN_PROGRESS)
1436 		err = mmc_complete_init(mmc);
1437 	debug("%s: %d, time %lu\n", __func__, err, get_timer(start));
1438 	return err;
1439 }
1440 
1441 /*
1442  * CPU and board-specific MMC initializations.  Aliased function
1443  * signals caller to move on
1444  */
1445 static int __def_mmc_init(bd_t *bis)
1446 {
1447 	return -1;
1448 }
1449 
1450 int cpu_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
1451 int board_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
1452 
1453 void print_mmc_devices(char separator)
1454 {
1455 	struct mmc *m;
1456 	struct list_head *entry;
1457 
1458 	list_for_each(entry, &mmc_devices) {
1459 		m = list_entry(entry, struct mmc, link);
1460 
1461 		printf("%s: %d", m->name, m->block_dev.dev);
1462 
1463 		if (entry->next != &mmc_devices)
1464 			printf("%c ", separator);
1465 	}
1466 
1467 	printf("\n");
1468 }
1469 
1470 int get_mmc_num(void)
1471 {
1472 	return cur_dev_num;
1473 }
1474 
1475 void mmc_set_preinit(struct mmc *mmc, int preinit)
1476 {
1477 	mmc->preinit = preinit;
1478 }
1479 
1480 static void do_preinit(void)
1481 {
1482 	struct mmc *m;
1483 	struct list_head *entry;
1484 
1485 	list_for_each(entry, &mmc_devices) {
1486 		m = list_entry(entry, struct mmc, link);
1487 
1488 		if (m->preinit)
1489 			mmc_start_init(m);
1490 	}
1491 }
1492 
1493 
1494 int mmc_initialize(bd_t *bis)
1495 {
1496 	INIT_LIST_HEAD (&mmc_devices);
1497 	cur_dev_num = 0;
1498 
1499 	if (board_mmc_init(bis) < 0)
1500 		cpu_mmc_init(bis);
1501 
1502 	print_mmc_devices(',');
1503 
1504 	do_preinit();
1505 	return 0;
1506 }
1507 
1508 #ifdef CONFIG_SUPPORT_EMMC_BOOT
1509 /*
1510  * This function changes the size of boot partition and the size of rpmb
1511  * partition present on EMMC devices.
1512  *
1513  * Input Parameters:
1514  * struct *mmc: pointer for the mmc device strcuture
1515  * bootsize: size of boot partition
1516  * rpmbsize: size of rpmb partition
1517  *
1518  * Returns 0 on success.
1519  */
1520 
1521 int mmc_boot_partition_size_change(struct mmc *mmc, unsigned long bootsize,
1522 				unsigned long rpmbsize)
1523 {
1524 	int err;
1525 	struct mmc_cmd cmd;
1526 
1527 	/* Only use this command for raw EMMC moviNAND. Enter backdoor mode */
1528 	cmd.cmdidx = MMC_CMD_RES_MAN;
1529 	cmd.resp_type = MMC_RSP_R1b;
1530 	cmd.cmdarg = MMC_CMD62_ARG1;
1531 
1532 	err = mmc_send_cmd(mmc, &cmd, NULL);
1533 	if (err) {
1534 		debug("mmc_boot_partition_size_change: Error1 = %d\n", err);
1535 		return err;
1536 	}
1537 
1538 	/* Boot partition changing mode */
1539 	cmd.cmdidx = MMC_CMD_RES_MAN;
1540 	cmd.resp_type = MMC_RSP_R1b;
1541 	cmd.cmdarg = MMC_CMD62_ARG2;
1542 
1543 	err = mmc_send_cmd(mmc, &cmd, NULL);
1544 	if (err) {
1545 		debug("mmc_boot_partition_size_change: Error2 = %d\n", err);
1546 		return err;
1547 	}
1548 	/* boot partition size is multiple of 128KB */
1549 	bootsize = (bootsize * 1024) / 128;
1550 
1551 	/* Arg: boot partition size */
1552 	cmd.cmdidx = MMC_CMD_RES_MAN;
1553 	cmd.resp_type = MMC_RSP_R1b;
1554 	cmd.cmdarg = bootsize;
1555 
1556 	err = mmc_send_cmd(mmc, &cmd, NULL);
1557 	if (err) {
1558 		debug("mmc_boot_partition_size_change: Error3 = %d\n", err);
1559 		return err;
1560 	}
1561 	/* RPMB partition size is multiple of 128KB */
1562 	rpmbsize = (rpmbsize * 1024) / 128;
1563 	/* Arg: RPMB partition size */
1564 	cmd.cmdidx = MMC_CMD_RES_MAN;
1565 	cmd.resp_type = MMC_RSP_R1b;
1566 	cmd.cmdarg = rpmbsize;
1567 
1568 	err = mmc_send_cmd(mmc, &cmd, NULL);
1569 	if (err) {
1570 		debug("mmc_boot_partition_size_change: Error4 = %d\n", err);
1571 		return err;
1572 	}
1573 	return 0;
1574 }
1575 
1576 /*
1577  * This function shall form and send the commands to open / close the
1578  * boot partition specified by user.
1579  *
1580  * Input Parameters:
1581  * ack: 0x0 - No boot acknowledge sent (default)
1582  *	0x1 - Boot acknowledge sent during boot operation
1583  * part_num: User selects boot data that will be sent to master
1584  *	0x0 - Device not boot enabled (default)
1585  *	0x1 - Boot partition 1 enabled for boot
1586  *	0x2 - Boot partition 2 enabled for boot
1587  * access: User selects partitions to access
1588  *	0x0 : No access to boot partition (default)
1589  *	0x1 : R/W boot partition 1
1590  *	0x2 : R/W boot partition 2
1591  *	0x3 : R/W Replay Protected Memory Block (RPMB)
1592  *
1593  * Returns 0 on success.
1594  */
1595 int mmc_boot_part_access(struct mmc *mmc, u8 ack, u8 part_num, u8 access)
1596 {
1597 	int err;
1598 	struct mmc_cmd cmd;
1599 
1600 	/* Boot ack enable, boot partition enable , boot partition access */
1601 	cmd.cmdidx = MMC_CMD_SWITCH;
1602 	cmd.resp_type = MMC_RSP_R1b;
1603 
1604 	cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
1605 			(EXT_CSD_PART_CONF << 16) |
1606 			((EXT_CSD_BOOT_ACK(ack) |
1607 			EXT_CSD_BOOT_PART_NUM(part_num) |
1608 			EXT_CSD_PARTITION_ACCESS(access)) << 8);
1609 
1610 	err = mmc_send_cmd(mmc, &cmd, NULL);
1611 	if (err) {
1612 		if (access) {
1613 			debug("mmc boot partition#%d open fail:Error1 = %d\n",
1614 			      part_num, err);
1615 		} else {
1616 			debug("mmc boot partition#%d close fail:Error = %d\n",
1617 			      part_num, err);
1618 		}
1619 		return err;
1620 	}
1621 
1622 	if (access) {
1623 		/* 4bit transfer mode at booting time. */
1624 		cmd.cmdidx = MMC_CMD_SWITCH;
1625 		cmd.resp_type = MMC_RSP_R1b;
1626 
1627 		cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
1628 				(EXT_CSD_BOOT_BUS_WIDTH << 16) |
1629 				((1 << 0) << 8);
1630 
1631 		err = mmc_send_cmd(mmc, &cmd, NULL);
1632 		if (err) {
1633 			debug("mmc boot partition#%d open fail:Error2 = %d\n",
1634 			      part_num, err);
1635 			return err;
1636 		}
1637 	}
1638 	return 0;
1639 }
1640 #endif
1641