xref: /openbmc/u-boot/drivers/mmc/mmc.c (revision ab769f227f79bedae7840f99b6c0c4d66aafc78e)
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 <mmc.h>
14 #include <part.h>
15 #include <malloc.h>
16 #include <linux/list.h>
17 #include <div64.h>
18 #include "mmc_private.h"
19 
20 /* Set block count limit because of 16 bit register limit on some hardware*/
21 #ifndef CONFIG_SYS_MMC_MAX_BLK_COUNT
22 #define CONFIG_SYS_MMC_MAX_BLK_COUNT 65535
23 #endif
24 
25 static struct list_head mmc_devices;
26 static int cur_dev_num = -1;
27 
28 int __weak board_mmc_getwp(struct mmc *mmc)
29 {
30 	return -1;
31 }
32 
33 int mmc_getwp(struct mmc *mmc)
34 {
35 	int wp;
36 
37 	wp = board_mmc_getwp(mmc);
38 
39 	if (wp < 0) {
40 		if (mmc->ops->getwp)
41 			wp = mmc->ops->getwp(mmc);
42 		else
43 			wp = 0;
44 	}
45 
46 	return wp;
47 }
48 
49 int __board_mmc_getcd(struct mmc *mmc) {
50 	return -1;
51 }
52 
53 int board_mmc_getcd(struct mmc *mmc)__attribute__((weak,
54 	alias("__board_mmc_getcd")));
55 
56 int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
57 {
58 	int ret;
59 
60 #ifdef CONFIG_MMC_TRACE
61 	int i;
62 	u8 *ptr;
63 
64 	printf("CMD_SEND:%d\n", cmd->cmdidx);
65 	printf("\t\tARG\t\t\t 0x%08X\n", cmd->cmdarg);
66 	ret = mmc->ops->send_cmd(mmc, cmd, data);
67 	switch (cmd->resp_type) {
68 		case MMC_RSP_NONE:
69 			printf("\t\tMMC_RSP_NONE\n");
70 			break;
71 		case MMC_RSP_R1:
72 			printf("\t\tMMC_RSP_R1,5,6,7 \t 0x%08X \n",
73 				cmd->response[0]);
74 			break;
75 		case MMC_RSP_R1b:
76 			printf("\t\tMMC_RSP_R1b\t\t 0x%08X \n",
77 				cmd->response[0]);
78 			break;
79 		case MMC_RSP_R2:
80 			printf("\t\tMMC_RSP_R2\t\t 0x%08X \n",
81 				cmd->response[0]);
82 			printf("\t\t          \t\t 0x%08X \n",
83 				cmd->response[1]);
84 			printf("\t\t          \t\t 0x%08X \n",
85 				cmd->response[2]);
86 			printf("\t\t          \t\t 0x%08X \n",
87 				cmd->response[3]);
88 			printf("\n");
89 			printf("\t\t\t\t\tDUMPING DATA\n");
90 			for (i = 0; i < 4; i++) {
91 				int j;
92 				printf("\t\t\t\t\t%03d - ", i*4);
93 				ptr = (u8 *)&cmd->response[i];
94 				ptr += 3;
95 				for (j = 0; j < 4; j++)
96 					printf("%02X ", *ptr--);
97 				printf("\n");
98 			}
99 			break;
100 		case MMC_RSP_R3:
101 			printf("\t\tMMC_RSP_R3,4\t\t 0x%08X \n",
102 				cmd->response[0]);
103 			break;
104 		default:
105 			printf("\t\tERROR MMC rsp not supported\n");
106 			break;
107 	}
108 #else
109 	ret = mmc->ops->send_cmd(mmc, cmd, data);
110 #endif
111 	return ret;
112 }
113 
114 int mmc_send_status(struct mmc *mmc, int timeout)
115 {
116 	struct mmc_cmd cmd;
117 	int err, retries = 5;
118 #ifdef CONFIG_MMC_TRACE
119 	int status;
120 #endif
121 
122 	cmd.cmdidx = MMC_CMD_SEND_STATUS;
123 	cmd.resp_type = MMC_RSP_R1;
124 	if (!mmc_host_is_spi(mmc))
125 		cmd.cmdarg = mmc->rca << 16;
126 
127 	do {
128 		err = mmc_send_cmd(mmc, &cmd, NULL);
129 		if (!err) {
130 			if ((cmd.response[0] & MMC_STATUS_RDY_FOR_DATA) &&
131 			    (cmd.response[0] & MMC_STATUS_CURR_STATE) !=
132 			     MMC_STATE_PRG)
133 				break;
134 			else if (cmd.response[0] & MMC_STATUS_MASK) {
135 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
136 				printf("Status Error: 0x%08X\n",
137 					cmd.response[0]);
138 #endif
139 				return COMM_ERR;
140 			}
141 		} else if (--retries < 0)
142 			return err;
143 
144 		udelay(1000);
145 
146 	} while (timeout--);
147 
148 #ifdef CONFIG_MMC_TRACE
149 	status = (cmd.response[0] & MMC_STATUS_CURR_STATE) >> 9;
150 	printf("CURR STATE:%d\n", status);
151 #endif
152 	if (timeout <= 0) {
153 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
154 		printf("Timeout waiting card ready\n");
155 #endif
156 		return TIMEOUT;
157 	}
158 
159 	return 0;
160 }
161 
162 int mmc_set_blocklen(struct mmc *mmc, int len)
163 {
164 	struct mmc_cmd cmd;
165 
166 	cmd.cmdidx = MMC_CMD_SET_BLOCKLEN;
167 	cmd.resp_type = MMC_RSP_R1;
168 	cmd.cmdarg = len;
169 
170 	return mmc_send_cmd(mmc, &cmd, NULL);
171 }
172 
173 struct mmc *find_mmc_device(int dev_num)
174 {
175 	struct mmc *m;
176 	struct list_head *entry;
177 
178 	list_for_each(entry, &mmc_devices) {
179 		m = list_entry(entry, struct mmc, link);
180 
181 		if (m->block_dev.dev == dev_num)
182 			return m;
183 	}
184 
185 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
186 	printf("MMC Device %d not found\n", dev_num);
187 #endif
188 
189 	return NULL;
190 }
191 
192 static int mmc_read_blocks(struct mmc *mmc, void *dst, lbaint_t start,
193 			   lbaint_t blkcnt)
194 {
195 	struct mmc_cmd cmd;
196 	struct mmc_data data;
197 
198 	if (blkcnt > 1)
199 		cmd.cmdidx = MMC_CMD_READ_MULTIPLE_BLOCK;
200 	else
201 		cmd.cmdidx = MMC_CMD_READ_SINGLE_BLOCK;
202 
203 	if (mmc->high_capacity)
204 		cmd.cmdarg = start;
205 	else
206 		cmd.cmdarg = start * mmc->read_bl_len;
207 
208 	cmd.resp_type = MMC_RSP_R1;
209 
210 	data.dest = dst;
211 	data.blocks = blkcnt;
212 	data.blocksize = mmc->read_bl_len;
213 	data.flags = MMC_DATA_READ;
214 
215 	if (mmc_send_cmd(mmc, &cmd, &data))
216 		return 0;
217 
218 	if (blkcnt > 1) {
219 		cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
220 		cmd.cmdarg = 0;
221 		cmd.resp_type = MMC_RSP_R1b;
222 		if (mmc_send_cmd(mmc, &cmd, NULL)) {
223 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
224 			printf("mmc fail to send stop cmd\n");
225 #endif
226 			return 0;
227 		}
228 	}
229 
230 	return blkcnt;
231 }
232 
233 static ulong mmc_bread(int dev_num, lbaint_t start, lbaint_t blkcnt, void *dst)
234 {
235 	lbaint_t cur, blocks_todo = blkcnt;
236 
237 	if (blkcnt == 0)
238 		return 0;
239 
240 	struct mmc *mmc = find_mmc_device(dev_num);
241 	if (!mmc)
242 		return 0;
243 
244 	if ((start + blkcnt) > mmc->block_dev.lba) {
245 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
246 		printf("MMC: block number 0x" LBAF " exceeds max(0x" LBAF ")\n",
247 			start + blkcnt, mmc->block_dev.lba);
248 #endif
249 		return 0;
250 	}
251 
252 	if (mmc_set_blocklen(mmc, mmc->read_bl_len))
253 		return 0;
254 
255 	do {
256 		cur = (blocks_todo > mmc->b_max) ?  mmc->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->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->voltages &
365 			(mmc->op_cond_response & OCR_VOLTAGE_MASK)) |
366 			(mmc->op_cond_response & OCR_ACCESS_MODE);
367 
368 		if (mmc->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 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 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 	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;
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 & MMC_HS_52MHZ)
522 		mmc->card_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
523 	else
524 		mmc->card_caps |= MMC_MODE_HS;
525 
526 	return 0;
527 }
528 
529 static int mmc_set_capacity(struct mmc *mmc, int part_num)
530 {
531 	switch (part_num) {
532 	case 0:
533 		mmc->capacity = mmc->capacity_user;
534 		break;
535 	case 1:
536 	case 2:
537 		mmc->capacity = mmc->capacity_boot;
538 		break;
539 	case 3:
540 		mmc->capacity = mmc->capacity_rpmb;
541 		break;
542 	case 4:
543 	case 5:
544 	case 6:
545 	case 7:
546 		mmc->capacity = mmc->capacity_gp[part_num - 4];
547 		break;
548 	default:
549 		return -1;
550 	}
551 
552 	mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);
553 
554 	return 0;
555 }
556 
557 int mmc_switch_part(int dev_num, unsigned int part_num)
558 {
559 	struct mmc *mmc = find_mmc_device(dev_num);
560 	int ret;
561 
562 	if (!mmc)
563 		return -1;
564 
565 	ret = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF,
566 			 (mmc->part_config & ~PART_ACCESS_MASK)
567 			 | (part_num & PART_ACCESS_MASK));
568 	if (ret)
569 		return ret;
570 
571 	return mmc_set_capacity(mmc, part_num);
572 }
573 
574 int mmc_getcd(struct mmc *mmc)
575 {
576 	int cd;
577 
578 	cd = board_mmc_getcd(mmc);
579 
580 	if (cd < 0) {
581 		if (mmc->ops->getcd)
582 			cd = mmc->ops->getcd(mmc);
583 		else
584 			cd = 1;
585 	}
586 
587 	return cd;
588 }
589 
590 static int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)
591 {
592 	struct mmc_cmd cmd;
593 	struct mmc_data data;
594 
595 	/* Switch the frequency */
596 	cmd.cmdidx = SD_CMD_SWITCH_FUNC;
597 	cmd.resp_type = MMC_RSP_R1;
598 	cmd.cmdarg = (mode << 31) | 0xffffff;
599 	cmd.cmdarg &= ~(0xf << (group * 4));
600 	cmd.cmdarg |= value << (group * 4);
601 
602 	data.dest = (char *)resp;
603 	data.blocksize = 64;
604 	data.blocks = 1;
605 	data.flags = MMC_DATA_READ;
606 
607 	return mmc_send_cmd(mmc, &cmd, &data);
608 }
609 
610 
611 static int sd_change_freq(struct mmc *mmc)
612 {
613 	int err;
614 	struct mmc_cmd cmd;
615 	ALLOC_CACHE_ALIGN_BUFFER(uint, scr, 2);
616 	ALLOC_CACHE_ALIGN_BUFFER(uint, switch_status, 16);
617 	struct mmc_data data;
618 	int timeout;
619 
620 	mmc->card_caps = 0;
621 
622 	if (mmc_host_is_spi(mmc))
623 		return 0;
624 
625 	/* Read the SCR to find out if this card supports higher speeds */
626 	cmd.cmdidx = MMC_CMD_APP_CMD;
627 	cmd.resp_type = MMC_RSP_R1;
628 	cmd.cmdarg = mmc->rca << 16;
629 
630 	err = mmc_send_cmd(mmc, &cmd, NULL);
631 
632 	if (err)
633 		return err;
634 
635 	cmd.cmdidx = SD_CMD_APP_SEND_SCR;
636 	cmd.resp_type = MMC_RSP_R1;
637 	cmd.cmdarg = 0;
638 
639 	timeout = 3;
640 
641 retry_scr:
642 	data.dest = (char *)scr;
643 	data.blocksize = 8;
644 	data.blocks = 1;
645 	data.flags = MMC_DATA_READ;
646 
647 	err = mmc_send_cmd(mmc, &cmd, &data);
648 
649 	if (err) {
650 		if (timeout--)
651 			goto retry_scr;
652 
653 		return err;
654 	}
655 
656 	mmc->scr[0] = __be32_to_cpu(scr[0]);
657 	mmc->scr[1] = __be32_to_cpu(scr[1]);
658 
659 	switch ((mmc->scr[0] >> 24) & 0xf) {
660 		case 0:
661 			mmc->version = SD_VERSION_1_0;
662 			break;
663 		case 1:
664 			mmc->version = SD_VERSION_1_10;
665 			break;
666 		case 2:
667 			mmc->version = SD_VERSION_2;
668 			if ((mmc->scr[0] >> 15) & 0x1)
669 				mmc->version = SD_VERSION_3;
670 			break;
671 		default:
672 			mmc->version = SD_VERSION_1_0;
673 			break;
674 	}
675 
676 	if (mmc->scr[0] & SD_DATA_4BIT)
677 		mmc->card_caps |= MMC_MODE_4BIT;
678 
679 	/* Version 1.0 doesn't support switching */
680 	if (mmc->version == SD_VERSION_1_0)
681 		return 0;
682 
683 	timeout = 4;
684 	while (timeout--) {
685 		err = sd_switch(mmc, SD_SWITCH_CHECK, 0, 1,
686 				(u8 *)switch_status);
687 
688 		if (err)
689 			return err;
690 
691 		/* The high-speed function is busy.  Try again */
692 		if (!(__be32_to_cpu(switch_status[7]) & SD_HIGHSPEED_BUSY))
693 			break;
694 	}
695 
696 	/* If high-speed isn't supported, we return */
697 	if (!(__be32_to_cpu(switch_status[3]) & SD_HIGHSPEED_SUPPORTED))
698 		return 0;
699 
700 	/*
701 	 * If the host doesn't support SD_HIGHSPEED, do not switch card to
702 	 * HIGHSPEED mode even if the card support SD_HIGHSPPED.
703 	 * This can avoid furthur problem when the card runs in different
704 	 * mode between the host.
705 	 */
706 	if (!((mmc->host_caps & MMC_MODE_HS_52MHz) &&
707 		(mmc->host_caps & MMC_MODE_HS)))
708 		return 0;
709 
710 	err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, 1, (u8 *)switch_status);
711 
712 	if (err)
713 		return err;
714 
715 	if ((__be32_to_cpu(switch_status[4]) & 0x0f000000) == 0x01000000)
716 		mmc->card_caps |= MMC_MODE_HS;
717 
718 	return 0;
719 }
720 
721 /* frequency bases */
722 /* divided by 10 to be nice to platforms without floating point */
723 static const int fbase[] = {
724 	10000,
725 	100000,
726 	1000000,
727 	10000000,
728 };
729 
730 /* Multiplier values for TRAN_SPEED.  Multiplied by 10 to be nice
731  * to platforms without floating point.
732  */
733 static const int multipliers[] = {
734 	0,	/* reserved */
735 	10,
736 	12,
737 	13,
738 	15,
739 	20,
740 	25,
741 	30,
742 	35,
743 	40,
744 	45,
745 	50,
746 	55,
747 	60,
748 	70,
749 	80,
750 };
751 
752 static void mmc_set_ios(struct mmc *mmc)
753 {
754 	if (mmc->ops->set_ios)
755 		mmc->ops->set_ios(mmc);
756 }
757 
758 void mmc_set_clock(struct mmc *mmc, uint clock)
759 {
760 	if (clock > mmc->f_max)
761 		clock = mmc->f_max;
762 
763 	if (clock < mmc->f_min)
764 		clock = mmc->f_min;
765 
766 	mmc->clock = clock;
767 
768 	mmc_set_ios(mmc);
769 }
770 
771 static void mmc_set_bus_width(struct mmc *mmc, uint width)
772 {
773 	mmc->bus_width = width;
774 
775 	mmc_set_ios(mmc);
776 }
777 
778 static int mmc_startup(struct mmc *mmc)
779 {
780 	int err, i;
781 	uint mult, freq;
782 	u64 cmult, csize, capacity;
783 	struct mmc_cmd cmd;
784 	ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
785 	ALLOC_CACHE_ALIGN_BUFFER(u8, test_csd, MMC_MAX_BLOCK_LEN);
786 	int timeout = 1000;
787 
788 #ifdef CONFIG_MMC_SPI_CRC_ON
789 	if (mmc_host_is_spi(mmc)) { /* enable CRC check for spi */
790 		cmd.cmdidx = MMC_CMD_SPI_CRC_ON_OFF;
791 		cmd.resp_type = MMC_RSP_R1;
792 		cmd.cmdarg = 1;
793 		err = mmc_send_cmd(mmc, &cmd, NULL);
794 
795 		if (err)
796 			return err;
797 	}
798 #endif
799 
800 	/* Put the Card in Identify Mode */
801 	cmd.cmdidx = mmc_host_is_spi(mmc) ? MMC_CMD_SEND_CID :
802 		MMC_CMD_ALL_SEND_CID; /* cmd not supported in spi */
803 	cmd.resp_type = MMC_RSP_R2;
804 	cmd.cmdarg = 0;
805 
806 	err = mmc_send_cmd(mmc, &cmd, NULL);
807 
808 	if (err)
809 		return err;
810 
811 	memcpy(mmc->cid, cmd.response, 16);
812 
813 	/*
814 	 * For MMC cards, set the Relative Address.
815 	 * For SD cards, get the Relatvie Address.
816 	 * This also puts the cards into Standby State
817 	 */
818 	if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
819 		cmd.cmdidx = SD_CMD_SEND_RELATIVE_ADDR;
820 		cmd.cmdarg = mmc->rca << 16;
821 		cmd.resp_type = MMC_RSP_R6;
822 
823 		err = mmc_send_cmd(mmc, &cmd, NULL);
824 
825 		if (err)
826 			return err;
827 
828 		if (IS_SD(mmc))
829 			mmc->rca = (cmd.response[0] >> 16) & 0xffff;
830 	}
831 
832 	/* Get the Card-Specific Data */
833 	cmd.cmdidx = MMC_CMD_SEND_CSD;
834 	cmd.resp_type = MMC_RSP_R2;
835 	cmd.cmdarg = mmc->rca << 16;
836 
837 	err = mmc_send_cmd(mmc, &cmd, NULL);
838 
839 	/* Waiting for the ready status */
840 	mmc_send_status(mmc, timeout);
841 
842 	if (err)
843 		return err;
844 
845 	mmc->csd[0] = cmd.response[0];
846 	mmc->csd[1] = cmd.response[1];
847 	mmc->csd[2] = cmd.response[2];
848 	mmc->csd[3] = cmd.response[3];
849 
850 	if (mmc->version == MMC_VERSION_UNKNOWN) {
851 		int version = (cmd.response[0] >> 26) & 0xf;
852 
853 		switch (version) {
854 			case 0:
855 				mmc->version = MMC_VERSION_1_2;
856 				break;
857 			case 1:
858 				mmc->version = MMC_VERSION_1_4;
859 				break;
860 			case 2:
861 				mmc->version = MMC_VERSION_2_2;
862 				break;
863 			case 3:
864 				mmc->version = MMC_VERSION_3;
865 				break;
866 			case 4:
867 				mmc->version = MMC_VERSION_4;
868 				break;
869 			default:
870 				mmc->version = MMC_VERSION_1_2;
871 				break;
872 		}
873 	}
874 
875 	/* divide frequency by 10, since the mults are 10x bigger */
876 	freq = fbase[(cmd.response[0] & 0x7)];
877 	mult = multipliers[((cmd.response[0] >> 3) & 0xf)];
878 
879 	mmc->tran_speed = freq * mult;
880 
881 	mmc->dsr_imp = ((cmd.response[1] >> 12) & 0x1);
882 	mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf);
883 
884 	if (IS_SD(mmc))
885 		mmc->write_bl_len = mmc->read_bl_len;
886 	else
887 		mmc->write_bl_len = 1 << ((cmd.response[3] >> 22) & 0xf);
888 
889 	if (mmc->high_capacity) {
890 		csize = (mmc->csd[1] & 0x3f) << 16
891 			| (mmc->csd[2] & 0xffff0000) >> 16;
892 		cmult = 8;
893 	} else {
894 		csize = (mmc->csd[1] & 0x3ff) << 2
895 			| (mmc->csd[2] & 0xc0000000) >> 30;
896 		cmult = (mmc->csd[2] & 0x00038000) >> 15;
897 	}
898 
899 	mmc->capacity_user = (csize + 1) << (cmult + 2);
900 	mmc->capacity_user *= mmc->read_bl_len;
901 	mmc->capacity_boot = 0;
902 	mmc->capacity_rpmb = 0;
903 	for (i = 0; i < 4; i++)
904 		mmc->capacity_gp[i] = 0;
905 
906 	if (mmc->read_bl_len > MMC_MAX_BLOCK_LEN)
907 		mmc->read_bl_len = MMC_MAX_BLOCK_LEN;
908 
909 	if (mmc->write_bl_len > MMC_MAX_BLOCK_LEN)
910 		mmc->write_bl_len = MMC_MAX_BLOCK_LEN;
911 
912 	if ((mmc->dsr_imp) && (0xffffffff != mmc->dsr)) {
913 		cmd.cmdidx = MMC_CMD_SET_DSR;
914 		cmd.cmdarg = (mmc->dsr & 0xffff) << 16;
915 		cmd.resp_type = MMC_RSP_NONE;
916 		if (mmc_send_cmd(mmc, &cmd, NULL))
917 			printf("MMC: SET_DSR failed\n");
918 	}
919 
920 	/* Select the card, and put it into Transfer Mode */
921 	if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
922 		cmd.cmdidx = MMC_CMD_SELECT_CARD;
923 		cmd.resp_type = MMC_RSP_R1;
924 		cmd.cmdarg = mmc->rca << 16;
925 		err = mmc_send_cmd(mmc, &cmd, NULL);
926 
927 		if (err)
928 			return err;
929 	}
930 
931 	/*
932 	 * For SD, its erase group is always one sector
933 	 */
934 	mmc->erase_grp_size = 1;
935 	mmc->part_config = MMCPART_NOAVAILABLE;
936 	if (!IS_SD(mmc) && (mmc->version >= MMC_VERSION_4)) {
937 		/* check  ext_csd version and capacity */
938 		err = mmc_send_ext_csd(mmc, ext_csd);
939 		if (!err && (ext_csd[EXT_CSD_REV] >= 2)) {
940 			/*
941 			 * According to the JEDEC Standard, the value of
942 			 * ext_csd's capacity is valid if the value is more
943 			 * than 2GB
944 			 */
945 			capacity = ext_csd[EXT_CSD_SEC_CNT] << 0
946 					| ext_csd[EXT_CSD_SEC_CNT + 1] << 8
947 					| ext_csd[EXT_CSD_SEC_CNT + 2] << 16
948 					| ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
949 			capacity *= MMC_MAX_BLOCK_LEN;
950 			if ((capacity >> 20) > 2 * 1024)
951 				mmc->capacity_user = capacity;
952 		}
953 
954 		switch (ext_csd[EXT_CSD_REV]) {
955 		case 1:
956 			mmc->version = MMC_VERSION_4_1;
957 			break;
958 		case 2:
959 			mmc->version = MMC_VERSION_4_2;
960 			break;
961 		case 3:
962 			mmc->version = MMC_VERSION_4_3;
963 			break;
964 		case 5:
965 			mmc->version = MMC_VERSION_4_41;
966 			break;
967 		case 6:
968 			mmc->version = MMC_VERSION_4_5;
969 			break;
970 		}
971 
972 		/*
973 		 * Host needs to enable ERASE_GRP_DEF bit if device is
974 		 * partitioned. This bit will be lost every time after a reset
975 		 * or power off. This will affect erase size.
976 		 */
977 		if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) &&
978 		    (ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE] & PART_ENH_ATTRIB)) {
979 			err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
980 				EXT_CSD_ERASE_GROUP_DEF, 1);
981 
982 			if (err)
983 				return err;
984 
985 			/* Read out group size from ext_csd */
986 			mmc->erase_grp_size =
987 				ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] *
988 					MMC_MAX_BLOCK_LEN * 1024;
989 		} else {
990 			/* Calculate the group size from the csd value. */
991 			int erase_gsz, erase_gmul;
992 			erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10;
993 			erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5;
994 			mmc->erase_grp_size = (erase_gsz + 1)
995 				* (erase_gmul + 1);
996 		}
997 
998 		/* store the partition info of emmc */
999 		if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) ||
1000 		    ext_csd[EXT_CSD_BOOT_MULT])
1001 			mmc->part_config = ext_csd[EXT_CSD_PART_CONF];
1002 
1003 		mmc->capacity_boot = ext_csd[EXT_CSD_BOOT_MULT] << 17;
1004 
1005 		mmc->capacity_rpmb = ext_csd[EXT_CSD_RPMB_MULT] << 17;
1006 
1007 		for (i = 0; i < 4; i++) {
1008 			int idx = EXT_CSD_GP_SIZE_MULT + i * 3;
1009 			mmc->capacity_gp[i] = (ext_csd[idx + 2] << 16) +
1010 				(ext_csd[idx + 1] << 8) + ext_csd[idx];
1011 			mmc->capacity_gp[i] *=
1012 				ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
1013 			mmc->capacity_gp[i] *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
1014 		}
1015 	}
1016 
1017 	err = mmc_set_capacity(mmc, mmc->part_num);
1018 	if (err)
1019 		return err;
1020 
1021 	if (IS_SD(mmc))
1022 		err = sd_change_freq(mmc);
1023 	else
1024 		err = mmc_change_freq(mmc);
1025 
1026 	if (err)
1027 		return err;
1028 
1029 	/* Restrict card's capabilities by what the host can do */
1030 	mmc->card_caps &= mmc->host_caps;
1031 
1032 	if (IS_SD(mmc)) {
1033 		if (mmc->card_caps & MMC_MODE_4BIT) {
1034 			cmd.cmdidx = MMC_CMD_APP_CMD;
1035 			cmd.resp_type = MMC_RSP_R1;
1036 			cmd.cmdarg = mmc->rca << 16;
1037 
1038 			err = mmc_send_cmd(mmc, &cmd, NULL);
1039 			if (err)
1040 				return err;
1041 
1042 			cmd.cmdidx = SD_CMD_APP_SET_BUS_WIDTH;
1043 			cmd.resp_type = MMC_RSP_R1;
1044 			cmd.cmdarg = 2;
1045 			err = mmc_send_cmd(mmc, &cmd, NULL);
1046 			if (err)
1047 				return err;
1048 
1049 			mmc_set_bus_width(mmc, 4);
1050 		}
1051 
1052 		if (mmc->card_caps & MMC_MODE_HS)
1053 			mmc->tran_speed = 50000000;
1054 		else
1055 			mmc->tran_speed = 25000000;
1056 	} else {
1057 		int idx;
1058 
1059 		/* An array of possible bus widths in order of preference */
1060 		static unsigned ext_csd_bits[] = {
1061 			EXT_CSD_BUS_WIDTH_8,
1062 			EXT_CSD_BUS_WIDTH_4,
1063 			EXT_CSD_BUS_WIDTH_1,
1064 		};
1065 
1066 		/* An array to map CSD bus widths to host cap bits */
1067 		static unsigned ext_to_hostcaps[] = {
1068 			[EXT_CSD_BUS_WIDTH_4] = MMC_MODE_4BIT,
1069 			[EXT_CSD_BUS_WIDTH_8] = MMC_MODE_8BIT,
1070 		};
1071 
1072 		/* An array to map chosen bus width to an integer */
1073 		static unsigned widths[] = {
1074 			8, 4, 1,
1075 		};
1076 
1077 		for (idx=0; idx < ARRAY_SIZE(ext_csd_bits); idx++) {
1078 			unsigned int extw = ext_csd_bits[idx];
1079 
1080 			/*
1081 			 * Check to make sure the controller supports
1082 			 * this bus width, if it's more than 1
1083 			 */
1084 			if (extw != EXT_CSD_BUS_WIDTH_1 &&
1085 					!(mmc->host_caps & ext_to_hostcaps[extw]))
1086 				continue;
1087 
1088 			err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1089 					EXT_CSD_BUS_WIDTH, extw);
1090 
1091 			if (err)
1092 				continue;
1093 
1094 			mmc_set_bus_width(mmc, widths[idx]);
1095 
1096 			err = mmc_send_ext_csd(mmc, test_csd);
1097 			if (!err && ext_csd[EXT_CSD_PARTITIONING_SUPPORT] \
1098 				    == test_csd[EXT_CSD_PARTITIONING_SUPPORT]
1099 				 && ext_csd[EXT_CSD_ERASE_GROUP_DEF] \
1100 				    == test_csd[EXT_CSD_ERASE_GROUP_DEF] \
1101 				 && ext_csd[EXT_CSD_REV] \
1102 				    == test_csd[EXT_CSD_REV]
1103 				 && ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] \
1104 				    == test_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
1105 				 && memcmp(&ext_csd[EXT_CSD_SEC_CNT], \
1106 					&test_csd[EXT_CSD_SEC_CNT], 4) == 0) {
1107 
1108 				mmc->card_caps |= ext_to_hostcaps[extw];
1109 				break;
1110 			}
1111 		}
1112 
1113 		if (mmc->card_caps & MMC_MODE_HS) {
1114 			if (mmc->card_caps & MMC_MODE_HS_52MHz)
1115 				mmc->tran_speed = 52000000;
1116 			else
1117 				mmc->tran_speed = 26000000;
1118 		}
1119 	}
1120 
1121 	mmc_set_clock(mmc, mmc->tran_speed);
1122 
1123 	/* fill in device description */
1124 	mmc->block_dev.lun = 0;
1125 	mmc->block_dev.type = 0;
1126 	mmc->block_dev.blksz = mmc->read_bl_len;
1127 	mmc->block_dev.log2blksz = LOG2(mmc->block_dev.blksz);
1128 	mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);
1129 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1130 	sprintf(mmc->block_dev.vendor, "Man %06x Snr %04x%04x",
1131 		mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff),
1132 		(mmc->cid[3] >> 16) & 0xffff);
1133 	sprintf(mmc->block_dev.product, "%c%c%c%c%c%c", mmc->cid[0] & 0xff,
1134 		(mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
1135 		(mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff,
1136 		(mmc->cid[2] >> 24) & 0xff);
1137 	sprintf(mmc->block_dev.revision, "%d.%d", (mmc->cid[2] >> 20) & 0xf,
1138 		(mmc->cid[2] >> 16) & 0xf);
1139 #else
1140 	mmc->block_dev.vendor[0] = 0;
1141 	mmc->block_dev.product[0] = 0;
1142 	mmc->block_dev.revision[0] = 0;
1143 #endif
1144 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBDISK_SUPPORT)
1145 	init_part(&mmc->block_dev);
1146 #endif
1147 
1148 	return 0;
1149 }
1150 
1151 static int mmc_send_if_cond(struct mmc *mmc)
1152 {
1153 	struct mmc_cmd cmd;
1154 	int err;
1155 
1156 	cmd.cmdidx = SD_CMD_SEND_IF_COND;
1157 	/* We set the bit if the host supports voltages between 2.7 and 3.6 V */
1158 	cmd.cmdarg = ((mmc->voltages & 0xff8000) != 0) << 8 | 0xaa;
1159 	cmd.resp_type = MMC_RSP_R7;
1160 
1161 	err = mmc_send_cmd(mmc, &cmd, NULL);
1162 
1163 	if (err)
1164 		return err;
1165 
1166 	if ((cmd.response[0] & 0xff) != 0xaa)
1167 		return UNUSABLE_ERR;
1168 	else
1169 		mmc->version = SD_VERSION_2;
1170 
1171 	return 0;
1172 }
1173 
1174 int mmc_register(struct mmc *mmc)
1175 {
1176 	/* Setup dsr related values */
1177 	mmc->dsr_imp = 0;
1178 	mmc->dsr = 0xffffffff;
1179 	/* Setup the universal parts of the block interface just once */
1180 	mmc->block_dev.if_type = IF_TYPE_MMC;
1181 	mmc->block_dev.dev = cur_dev_num++;
1182 	mmc->block_dev.removable = 1;
1183 	mmc->block_dev.block_read = mmc_bread;
1184 	mmc->block_dev.block_write = mmc_bwrite;
1185 	mmc->block_dev.block_erase = mmc_berase;
1186 	if (!mmc->b_max)
1187 		mmc->b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
1188 
1189 	INIT_LIST_HEAD (&mmc->link);
1190 
1191 	list_add_tail (&mmc->link, &mmc_devices);
1192 
1193 	return 0;
1194 }
1195 
1196 #ifdef CONFIG_PARTITIONS
1197 block_dev_desc_t *mmc_get_dev(int dev)
1198 {
1199 	struct mmc *mmc = find_mmc_device(dev);
1200 	if (!mmc || mmc_init(mmc))
1201 		return NULL;
1202 
1203 	return &mmc->block_dev;
1204 }
1205 #endif
1206 
1207 int mmc_start_init(struct mmc *mmc)
1208 {
1209 	int err;
1210 
1211 	/* we pretend there's no card when init is NULL */
1212 	if (mmc_getcd(mmc) == 0 || mmc->ops->init == NULL) {
1213 		mmc->has_init = 0;
1214 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1215 		printf("MMC: no card present\n");
1216 #endif
1217 		return NO_CARD_ERR;
1218 	}
1219 
1220 	if (mmc->has_init)
1221 		return 0;
1222 
1223 	/* made sure it's not NULL earlier */
1224 	err = mmc->ops->init(mmc);
1225 
1226 	if (err)
1227 		return err;
1228 
1229 	mmc_set_bus_width(mmc, 1);
1230 	mmc_set_clock(mmc, 1);
1231 
1232 	/* Reset the Card */
1233 	err = mmc_go_idle(mmc);
1234 
1235 	if (err)
1236 		return err;
1237 
1238 	/* The internal partition reset to user partition(0) at every CMD0*/
1239 	mmc->part_num = 0;
1240 
1241 	/* Test for SD version 2 */
1242 	err = mmc_send_if_cond(mmc);
1243 
1244 	/* Now try to get the SD card's operating condition */
1245 	err = sd_send_op_cond(mmc);
1246 
1247 	/* If the command timed out, we check for an MMC card */
1248 	if (err == TIMEOUT) {
1249 		err = mmc_send_op_cond(mmc);
1250 
1251 		if (err && err != IN_PROGRESS) {
1252 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1253 			printf("Card did not respond to voltage select!\n");
1254 #endif
1255 			return UNUSABLE_ERR;
1256 		}
1257 	}
1258 
1259 	if (err == IN_PROGRESS)
1260 		mmc->init_in_progress = 1;
1261 
1262 	return err;
1263 }
1264 
1265 static int mmc_complete_init(struct mmc *mmc)
1266 {
1267 	int err = 0;
1268 
1269 	if (mmc->op_cond_pending)
1270 		err = mmc_complete_op_cond(mmc);
1271 
1272 	if (!err)
1273 		err = mmc_startup(mmc);
1274 	if (err)
1275 		mmc->has_init = 0;
1276 	else
1277 		mmc->has_init = 1;
1278 	mmc->init_in_progress = 0;
1279 	return err;
1280 }
1281 
1282 int mmc_init(struct mmc *mmc)
1283 {
1284 	int err = IN_PROGRESS;
1285 	unsigned start = get_timer(0);
1286 
1287 	if (mmc->has_init)
1288 		return 0;
1289 	if (!mmc->init_in_progress)
1290 		err = mmc_start_init(mmc);
1291 
1292 	if (!err || err == IN_PROGRESS)
1293 		err = mmc_complete_init(mmc);
1294 	debug("%s: %d, time %lu\n", __func__, err, get_timer(start));
1295 	return err;
1296 }
1297 
1298 int mmc_set_dsr(struct mmc *mmc, u16 val)
1299 {
1300 	mmc->dsr = val;
1301 	return 0;
1302 }
1303 
1304 /*
1305  * CPU and board-specific MMC initializations.  Aliased function
1306  * signals caller to move on
1307  */
1308 static int __def_mmc_init(bd_t *bis)
1309 {
1310 	return -1;
1311 }
1312 
1313 int cpu_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
1314 int board_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
1315 
1316 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1317 
1318 void print_mmc_devices(char separator)
1319 {
1320 	struct mmc *m;
1321 	struct list_head *entry;
1322 
1323 	list_for_each(entry, &mmc_devices) {
1324 		m = list_entry(entry, struct mmc, link);
1325 
1326 		printf("%s: %d", m->name, m->block_dev.dev);
1327 
1328 		if (entry->next != &mmc_devices)
1329 			printf("%c ", separator);
1330 	}
1331 
1332 	printf("\n");
1333 }
1334 
1335 #else
1336 void print_mmc_devices(char separator) { }
1337 #endif
1338 
1339 int get_mmc_num(void)
1340 {
1341 	return cur_dev_num;
1342 }
1343 
1344 void mmc_set_preinit(struct mmc *mmc, int preinit)
1345 {
1346 	mmc->preinit = preinit;
1347 }
1348 
1349 static void do_preinit(void)
1350 {
1351 	struct mmc *m;
1352 	struct list_head *entry;
1353 
1354 	list_for_each(entry, &mmc_devices) {
1355 		m = list_entry(entry, struct mmc, link);
1356 
1357 		if (m->preinit)
1358 			mmc_start_init(m);
1359 	}
1360 }
1361 
1362 
1363 int mmc_initialize(bd_t *bis)
1364 {
1365 	INIT_LIST_HEAD (&mmc_devices);
1366 	cur_dev_num = 0;
1367 
1368 	if (board_mmc_init(bis) < 0)
1369 		cpu_mmc_init(bis);
1370 
1371 #ifndef CONFIG_SPL_BUILD
1372 	print_mmc_devices(',');
1373 #endif
1374 
1375 	do_preinit();
1376 	return 0;
1377 }
1378 
1379 #ifdef CONFIG_SUPPORT_EMMC_BOOT
1380 /*
1381  * This function changes the size of boot partition and the size of rpmb
1382  * partition present on EMMC devices.
1383  *
1384  * Input Parameters:
1385  * struct *mmc: pointer for the mmc device strcuture
1386  * bootsize: size of boot partition
1387  * rpmbsize: size of rpmb partition
1388  *
1389  * Returns 0 on success.
1390  */
1391 
1392 int mmc_boot_partition_size_change(struct mmc *mmc, unsigned long bootsize,
1393 				unsigned long rpmbsize)
1394 {
1395 	int err;
1396 	struct mmc_cmd cmd;
1397 
1398 	/* Only use this command for raw EMMC moviNAND. Enter backdoor mode */
1399 	cmd.cmdidx = MMC_CMD_RES_MAN;
1400 	cmd.resp_type = MMC_RSP_R1b;
1401 	cmd.cmdarg = MMC_CMD62_ARG1;
1402 
1403 	err = mmc_send_cmd(mmc, &cmd, NULL);
1404 	if (err) {
1405 		debug("mmc_boot_partition_size_change: Error1 = %d\n", err);
1406 		return err;
1407 	}
1408 
1409 	/* Boot partition changing mode */
1410 	cmd.cmdidx = MMC_CMD_RES_MAN;
1411 	cmd.resp_type = MMC_RSP_R1b;
1412 	cmd.cmdarg = MMC_CMD62_ARG2;
1413 
1414 	err = mmc_send_cmd(mmc, &cmd, NULL);
1415 	if (err) {
1416 		debug("mmc_boot_partition_size_change: Error2 = %d\n", err);
1417 		return err;
1418 	}
1419 	/* boot partition size is multiple of 128KB */
1420 	bootsize = (bootsize * 1024) / 128;
1421 
1422 	/* Arg: boot partition size */
1423 	cmd.cmdidx = MMC_CMD_RES_MAN;
1424 	cmd.resp_type = MMC_RSP_R1b;
1425 	cmd.cmdarg = bootsize;
1426 
1427 	err = mmc_send_cmd(mmc, &cmd, NULL);
1428 	if (err) {
1429 		debug("mmc_boot_partition_size_change: Error3 = %d\n", err);
1430 		return err;
1431 	}
1432 	/* RPMB partition size is multiple of 128KB */
1433 	rpmbsize = (rpmbsize * 1024) / 128;
1434 	/* Arg: RPMB partition size */
1435 	cmd.cmdidx = MMC_CMD_RES_MAN;
1436 	cmd.resp_type = MMC_RSP_R1b;
1437 	cmd.cmdarg = rpmbsize;
1438 
1439 	err = mmc_send_cmd(mmc, &cmd, NULL);
1440 	if (err) {
1441 		debug("mmc_boot_partition_size_change: Error4 = %d\n", err);
1442 		return err;
1443 	}
1444 	return 0;
1445 }
1446 
1447 /*
1448  * Modify EXT_CSD[177] which is BOOT_BUS_WIDTH
1449  * based on the passed in values for BOOT_BUS_WIDTH, RESET_BOOT_BUS_WIDTH
1450  * and BOOT_MODE.
1451  *
1452  * Returns 0 on success.
1453  */
1454 int mmc_set_boot_bus_width(struct mmc *mmc, u8 width, u8 reset, u8 mode)
1455 {
1456 	int err;
1457 
1458 	err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BOOT_BUS_WIDTH,
1459 			 EXT_CSD_BOOT_BUS_WIDTH_MODE(mode) |
1460 			 EXT_CSD_BOOT_BUS_WIDTH_RESET(reset) |
1461 			 EXT_CSD_BOOT_BUS_WIDTH_WIDTH(width));
1462 
1463 	if (err)
1464 		return err;
1465 	return 0;
1466 }
1467 
1468 /*
1469  * Modify EXT_CSD[179] which is PARTITION_CONFIG (formerly BOOT_CONFIG)
1470  * based on the passed in values for BOOT_ACK, BOOT_PARTITION_ENABLE and
1471  * PARTITION_ACCESS.
1472  *
1473  * Returns 0 on success.
1474  */
1475 int mmc_set_part_conf(struct mmc *mmc, u8 ack, u8 part_num, u8 access)
1476 {
1477 	int err;
1478 
1479 	err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF,
1480 			 EXT_CSD_BOOT_ACK(ack) |
1481 			 EXT_CSD_BOOT_PART_NUM(part_num) |
1482 			 EXT_CSD_PARTITION_ACCESS(access));
1483 
1484 	if (err)
1485 		return err;
1486 	return 0;
1487 }
1488 #endif
1489