xref: /openbmc/u-boot/drivers/mmc/mmc.c (revision f9727161)
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->getwp)
41 			wp = mmc->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->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->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 = 0;
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->getcd)
582 			cd = mmc->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 	mmc->set_ios(mmc);
755 }
756 
757 void mmc_set_clock(struct mmc *mmc, uint clock)
758 {
759 	if (clock > mmc->f_max)
760 		clock = mmc->f_max;
761 
762 	if (clock < mmc->f_min)
763 		clock = mmc->f_min;
764 
765 	mmc->clock = clock;
766 
767 	mmc_set_ios(mmc);
768 }
769 
770 static void mmc_set_bus_width(struct mmc *mmc, uint width)
771 {
772 	mmc->bus_width = width;
773 
774 	mmc_set_ios(mmc);
775 }
776 
777 static int mmc_startup(struct mmc *mmc)
778 {
779 	int err, i;
780 	uint mult, freq;
781 	u64 cmult, csize, capacity;
782 	struct mmc_cmd cmd;
783 	ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
784 	ALLOC_CACHE_ALIGN_BUFFER(u8, test_csd, MMC_MAX_BLOCK_LEN);
785 	int timeout = 1000;
786 
787 #ifdef CONFIG_MMC_SPI_CRC_ON
788 	if (mmc_host_is_spi(mmc)) { /* enable CRC check for spi */
789 		cmd.cmdidx = MMC_CMD_SPI_CRC_ON_OFF;
790 		cmd.resp_type = MMC_RSP_R1;
791 		cmd.cmdarg = 1;
792 		err = mmc_send_cmd(mmc, &cmd, NULL);
793 
794 		if (err)
795 			return err;
796 	}
797 #endif
798 
799 	/* Put the Card in Identify Mode */
800 	cmd.cmdidx = mmc_host_is_spi(mmc) ? MMC_CMD_SEND_CID :
801 		MMC_CMD_ALL_SEND_CID; /* cmd not supported in spi */
802 	cmd.resp_type = MMC_RSP_R2;
803 	cmd.cmdarg = 0;
804 
805 	err = mmc_send_cmd(mmc, &cmd, NULL);
806 
807 	if (err)
808 		return err;
809 
810 	memcpy(mmc->cid, cmd.response, 16);
811 
812 	/*
813 	 * For MMC cards, set the Relative Address.
814 	 * For SD cards, get the Relatvie Address.
815 	 * This also puts the cards into Standby State
816 	 */
817 	if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
818 		cmd.cmdidx = SD_CMD_SEND_RELATIVE_ADDR;
819 		cmd.cmdarg = mmc->rca << 16;
820 		cmd.resp_type = MMC_RSP_R6;
821 
822 		err = mmc_send_cmd(mmc, &cmd, NULL);
823 
824 		if (err)
825 			return err;
826 
827 		if (IS_SD(mmc))
828 			mmc->rca = (cmd.response[0] >> 16) & 0xffff;
829 	}
830 
831 	/* Get the Card-Specific Data */
832 	cmd.cmdidx = MMC_CMD_SEND_CSD;
833 	cmd.resp_type = MMC_RSP_R2;
834 	cmd.cmdarg = mmc->rca << 16;
835 
836 	err = mmc_send_cmd(mmc, &cmd, NULL);
837 
838 	/* Waiting for the ready status */
839 	mmc_send_status(mmc, timeout);
840 
841 	if (err)
842 		return err;
843 
844 	mmc->csd[0] = cmd.response[0];
845 	mmc->csd[1] = cmd.response[1];
846 	mmc->csd[2] = cmd.response[2];
847 	mmc->csd[3] = cmd.response[3];
848 
849 	if (mmc->version == MMC_VERSION_UNKNOWN) {
850 		int version = (cmd.response[0] >> 26) & 0xf;
851 
852 		switch (version) {
853 			case 0:
854 				mmc->version = MMC_VERSION_1_2;
855 				break;
856 			case 1:
857 				mmc->version = MMC_VERSION_1_4;
858 				break;
859 			case 2:
860 				mmc->version = MMC_VERSION_2_2;
861 				break;
862 			case 3:
863 				mmc->version = MMC_VERSION_3;
864 				break;
865 			case 4:
866 				mmc->version = MMC_VERSION_4;
867 				break;
868 			default:
869 				mmc->version = MMC_VERSION_1_2;
870 				break;
871 		}
872 	}
873 
874 	/* divide frequency by 10, since the mults are 10x bigger */
875 	freq = fbase[(cmd.response[0] & 0x7)];
876 	mult = multipliers[((cmd.response[0] >> 3) & 0xf)];
877 
878 	mmc->tran_speed = freq * mult;
879 
880 	mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf);
881 
882 	if (IS_SD(mmc))
883 		mmc->write_bl_len = mmc->read_bl_len;
884 	else
885 		mmc->write_bl_len = 1 << ((cmd.response[3] >> 22) & 0xf);
886 
887 	if (mmc->high_capacity) {
888 		csize = (mmc->csd[1] & 0x3f) << 16
889 			| (mmc->csd[2] & 0xffff0000) >> 16;
890 		cmult = 8;
891 	} else {
892 		csize = (mmc->csd[1] & 0x3ff) << 2
893 			| (mmc->csd[2] & 0xc0000000) >> 30;
894 		cmult = (mmc->csd[2] & 0x00038000) >> 15;
895 	}
896 
897 	mmc->capacity_user = (csize + 1) << (cmult + 2);
898 	mmc->capacity_user *= mmc->read_bl_len;
899 	mmc->capacity_boot = 0;
900 	mmc->capacity_rpmb = 0;
901 	for (i = 0; i < 4; i++)
902 		mmc->capacity_gp[i] = 0;
903 
904 	if (mmc->read_bl_len > MMC_MAX_BLOCK_LEN)
905 		mmc->read_bl_len = MMC_MAX_BLOCK_LEN;
906 
907 	if (mmc->write_bl_len > MMC_MAX_BLOCK_LEN)
908 		mmc->write_bl_len = MMC_MAX_BLOCK_LEN;
909 
910 	/* Select the card, and put it into Transfer Mode */
911 	if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
912 		cmd.cmdidx = MMC_CMD_SELECT_CARD;
913 		cmd.resp_type = MMC_RSP_R1;
914 		cmd.cmdarg = mmc->rca << 16;
915 		err = mmc_send_cmd(mmc, &cmd, NULL);
916 
917 		if (err)
918 			return err;
919 	}
920 
921 	/*
922 	 * For SD, its erase group is always one sector
923 	 */
924 	mmc->erase_grp_size = 1;
925 	mmc->part_config = MMCPART_NOAVAILABLE;
926 	if (!IS_SD(mmc) && (mmc->version >= MMC_VERSION_4)) {
927 		/* check  ext_csd version and capacity */
928 		err = mmc_send_ext_csd(mmc, ext_csd);
929 		if (!err && (ext_csd[EXT_CSD_REV] >= 2)) {
930 			/*
931 			 * According to the JEDEC Standard, the value of
932 			 * ext_csd's capacity is valid if the value is more
933 			 * than 2GB
934 			 */
935 			capacity = ext_csd[EXT_CSD_SEC_CNT] << 0
936 					| ext_csd[EXT_CSD_SEC_CNT + 1] << 8
937 					| ext_csd[EXT_CSD_SEC_CNT + 2] << 16
938 					| ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
939 			capacity *= MMC_MAX_BLOCK_LEN;
940 			if ((capacity >> 20) > 2 * 1024)
941 				mmc->capacity_user = capacity;
942 		}
943 
944 		switch (ext_csd[EXT_CSD_REV]) {
945 		case 1:
946 			mmc->version = MMC_VERSION_4_1;
947 			break;
948 		case 2:
949 			mmc->version = MMC_VERSION_4_2;
950 			break;
951 		case 3:
952 			mmc->version = MMC_VERSION_4_3;
953 			break;
954 		case 5:
955 			mmc->version = MMC_VERSION_4_41;
956 			break;
957 		case 6:
958 			mmc->version = MMC_VERSION_4_5;
959 			break;
960 		}
961 
962 		/*
963 		 * Check whether GROUP_DEF is set, if yes, read out
964 		 * group size from ext_csd directly, or calculate
965 		 * the group size from the csd value.
966 		 */
967 		if (ext_csd[EXT_CSD_ERASE_GROUP_DEF]) {
968 			mmc->erase_grp_size =
969 				ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] *
970 					MMC_MAX_BLOCK_LEN * 1024;
971 		} else {
972 			int erase_gsz, erase_gmul;
973 			erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10;
974 			erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5;
975 			mmc->erase_grp_size = (erase_gsz + 1)
976 				* (erase_gmul + 1);
977 		}
978 
979 		/* store the partition info of emmc */
980 		if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) ||
981 		    ext_csd[EXT_CSD_BOOT_MULT])
982 			mmc->part_config = ext_csd[EXT_CSD_PART_CONF];
983 
984 		mmc->capacity_boot = ext_csd[EXT_CSD_BOOT_MULT] << 17;
985 
986 		mmc->capacity_rpmb = ext_csd[EXT_CSD_RPMB_MULT] << 17;
987 
988 		for (i = 0; i < 4; i++) {
989 			int idx = EXT_CSD_GP_SIZE_MULT + i * 3;
990 			mmc->capacity_gp[i] = (ext_csd[idx + 2] << 16) +
991 				(ext_csd[idx + 1] << 8) + ext_csd[idx];
992 			mmc->capacity_gp[i] *=
993 				ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
994 			mmc->capacity_gp[i] *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
995 		}
996 	}
997 
998 	err = mmc_set_capacity(mmc, mmc->part_num);
999 	if (err)
1000 		return err;
1001 
1002 	if (IS_SD(mmc))
1003 		err = sd_change_freq(mmc);
1004 	else
1005 		err = mmc_change_freq(mmc);
1006 
1007 	if (err)
1008 		return err;
1009 
1010 	/* Restrict card's capabilities by what the host can do */
1011 	mmc->card_caps &= mmc->host_caps;
1012 
1013 	if (IS_SD(mmc)) {
1014 		if (mmc->card_caps & MMC_MODE_4BIT) {
1015 			cmd.cmdidx = MMC_CMD_APP_CMD;
1016 			cmd.resp_type = MMC_RSP_R1;
1017 			cmd.cmdarg = mmc->rca << 16;
1018 
1019 			err = mmc_send_cmd(mmc, &cmd, NULL);
1020 			if (err)
1021 				return err;
1022 
1023 			cmd.cmdidx = SD_CMD_APP_SET_BUS_WIDTH;
1024 			cmd.resp_type = MMC_RSP_R1;
1025 			cmd.cmdarg = 2;
1026 			err = mmc_send_cmd(mmc, &cmd, NULL);
1027 			if (err)
1028 				return err;
1029 
1030 			mmc_set_bus_width(mmc, 4);
1031 		}
1032 
1033 		if (mmc->card_caps & MMC_MODE_HS)
1034 			mmc->tran_speed = 50000000;
1035 		else
1036 			mmc->tran_speed = 25000000;
1037 	} else {
1038 		int idx;
1039 
1040 		/* An array of possible bus widths in order of preference */
1041 		static unsigned ext_csd_bits[] = {
1042 			EXT_CSD_BUS_WIDTH_8,
1043 			EXT_CSD_BUS_WIDTH_4,
1044 			EXT_CSD_BUS_WIDTH_1,
1045 		};
1046 
1047 		/* An array to map CSD bus widths to host cap bits */
1048 		static unsigned ext_to_hostcaps[] = {
1049 			[EXT_CSD_BUS_WIDTH_4] = MMC_MODE_4BIT,
1050 			[EXT_CSD_BUS_WIDTH_8] = MMC_MODE_8BIT,
1051 		};
1052 
1053 		/* An array to map chosen bus width to an integer */
1054 		static unsigned widths[] = {
1055 			8, 4, 1,
1056 		};
1057 
1058 		for (idx=0; idx < ARRAY_SIZE(ext_csd_bits); idx++) {
1059 			unsigned int extw = ext_csd_bits[idx];
1060 
1061 			/*
1062 			 * Check to make sure the controller supports
1063 			 * this bus width, if it's more than 1
1064 			 */
1065 			if (extw != EXT_CSD_BUS_WIDTH_1 &&
1066 					!(mmc->host_caps & ext_to_hostcaps[extw]))
1067 				continue;
1068 
1069 			err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1070 					EXT_CSD_BUS_WIDTH, extw);
1071 
1072 			if (err)
1073 				continue;
1074 
1075 			mmc_set_bus_width(mmc, widths[idx]);
1076 
1077 			err = mmc_send_ext_csd(mmc, test_csd);
1078 			if (!err && ext_csd[EXT_CSD_PARTITIONING_SUPPORT] \
1079 				    == test_csd[EXT_CSD_PARTITIONING_SUPPORT]
1080 				 && ext_csd[EXT_CSD_ERASE_GROUP_DEF] \
1081 				    == test_csd[EXT_CSD_ERASE_GROUP_DEF] \
1082 				 && ext_csd[EXT_CSD_REV] \
1083 				    == test_csd[EXT_CSD_REV]
1084 				 && ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] \
1085 				    == test_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
1086 				 && memcmp(&ext_csd[EXT_CSD_SEC_CNT], \
1087 					&test_csd[EXT_CSD_SEC_CNT], 4) == 0) {
1088 
1089 				mmc->card_caps |= ext_to_hostcaps[extw];
1090 				break;
1091 			}
1092 		}
1093 
1094 		if (mmc->card_caps & MMC_MODE_HS) {
1095 			if (mmc->card_caps & MMC_MODE_HS_52MHz)
1096 				mmc->tran_speed = 52000000;
1097 			else
1098 				mmc->tran_speed = 26000000;
1099 		}
1100 	}
1101 
1102 	mmc_set_clock(mmc, mmc->tran_speed);
1103 
1104 	/* fill in device description */
1105 	mmc->block_dev.lun = 0;
1106 	mmc->block_dev.type = 0;
1107 	mmc->block_dev.blksz = mmc->read_bl_len;
1108 	mmc->block_dev.log2blksz = LOG2(mmc->block_dev.blksz);
1109 	mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);
1110 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1111 	sprintf(mmc->block_dev.vendor, "Man %06x Snr %04x%04x",
1112 		mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff),
1113 		(mmc->cid[3] >> 16) & 0xffff);
1114 	sprintf(mmc->block_dev.product, "%c%c%c%c%c%c", mmc->cid[0] & 0xff,
1115 		(mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
1116 		(mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff,
1117 		(mmc->cid[2] >> 24) & 0xff);
1118 	sprintf(mmc->block_dev.revision, "%d.%d", (mmc->cid[2] >> 20) & 0xf,
1119 		(mmc->cid[2] >> 16) & 0xf);
1120 #else
1121 	mmc->block_dev.vendor[0] = 0;
1122 	mmc->block_dev.product[0] = 0;
1123 	mmc->block_dev.revision[0] = 0;
1124 #endif
1125 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBDISK_SUPPORT)
1126 	init_part(&mmc->block_dev);
1127 #endif
1128 
1129 	return 0;
1130 }
1131 
1132 static int mmc_send_if_cond(struct mmc *mmc)
1133 {
1134 	struct mmc_cmd cmd;
1135 	int err;
1136 
1137 	cmd.cmdidx = SD_CMD_SEND_IF_COND;
1138 	/* We set the bit if the host supports voltages between 2.7 and 3.6 V */
1139 	cmd.cmdarg = ((mmc->voltages & 0xff8000) != 0) << 8 | 0xaa;
1140 	cmd.resp_type = MMC_RSP_R7;
1141 
1142 	err = mmc_send_cmd(mmc, &cmd, NULL);
1143 
1144 	if (err)
1145 		return err;
1146 
1147 	if ((cmd.response[0] & 0xff) != 0xaa)
1148 		return UNUSABLE_ERR;
1149 	else
1150 		mmc->version = SD_VERSION_2;
1151 
1152 	return 0;
1153 }
1154 
1155 int mmc_register(struct mmc *mmc)
1156 {
1157 	/* Setup the universal parts of the block interface just once */
1158 	mmc->block_dev.if_type = IF_TYPE_MMC;
1159 	mmc->block_dev.dev = cur_dev_num++;
1160 	mmc->block_dev.removable = 1;
1161 	mmc->block_dev.block_read = mmc_bread;
1162 	mmc->block_dev.block_write = mmc_bwrite;
1163 	mmc->block_dev.block_erase = mmc_berase;
1164 	if (!mmc->b_max)
1165 		mmc->b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
1166 
1167 	INIT_LIST_HEAD (&mmc->link);
1168 
1169 	list_add_tail (&mmc->link, &mmc_devices);
1170 
1171 	return 0;
1172 }
1173 
1174 #ifdef CONFIG_PARTITIONS
1175 block_dev_desc_t *mmc_get_dev(int dev)
1176 {
1177 	struct mmc *mmc = find_mmc_device(dev);
1178 	if (!mmc || mmc_init(mmc))
1179 		return NULL;
1180 
1181 	return &mmc->block_dev;
1182 }
1183 #endif
1184 
1185 int mmc_start_init(struct mmc *mmc)
1186 {
1187 	int err;
1188 
1189 	if (mmc_getcd(mmc) == 0) {
1190 		mmc->has_init = 0;
1191 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1192 		printf("MMC: no card present\n");
1193 #endif
1194 		return NO_CARD_ERR;
1195 	}
1196 
1197 	if (mmc->has_init)
1198 		return 0;
1199 
1200 	err = mmc->init(mmc);
1201 
1202 	if (err)
1203 		return err;
1204 
1205 	mmc_set_bus_width(mmc, 1);
1206 	mmc_set_clock(mmc, 1);
1207 
1208 	/* Reset the Card */
1209 	err = mmc_go_idle(mmc);
1210 
1211 	if (err)
1212 		return err;
1213 
1214 	/* The internal partition reset to user partition(0) at every CMD0*/
1215 	mmc->part_num = 0;
1216 
1217 	/* Test for SD version 2 */
1218 	err = mmc_send_if_cond(mmc);
1219 
1220 	/* Now try to get the SD card's operating condition */
1221 	err = sd_send_op_cond(mmc);
1222 
1223 	/* If the command timed out, we check for an MMC card */
1224 	if (err == TIMEOUT) {
1225 		err = mmc_send_op_cond(mmc);
1226 
1227 		if (err && err != IN_PROGRESS) {
1228 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1229 			printf("Card did not respond to voltage select!\n");
1230 #endif
1231 			return UNUSABLE_ERR;
1232 		}
1233 	}
1234 
1235 	if (err == IN_PROGRESS)
1236 		mmc->init_in_progress = 1;
1237 
1238 	return err;
1239 }
1240 
1241 static int mmc_complete_init(struct mmc *mmc)
1242 {
1243 	int err = 0;
1244 
1245 	if (mmc->op_cond_pending)
1246 		err = mmc_complete_op_cond(mmc);
1247 
1248 	if (!err)
1249 		err = mmc_startup(mmc);
1250 	if (err)
1251 		mmc->has_init = 0;
1252 	else
1253 		mmc->has_init = 1;
1254 	mmc->init_in_progress = 0;
1255 	return err;
1256 }
1257 
1258 int mmc_init(struct mmc *mmc)
1259 {
1260 	int err = IN_PROGRESS;
1261 	unsigned start = get_timer(0);
1262 
1263 	if (mmc->has_init)
1264 		return 0;
1265 	if (!mmc->init_in_progress)
1266 		err = mmc_start_init(mmc);
1267 
1268 	if (!err || err == IN_PROGRESS)
1269 		err = mmc_complete_init(mmc);
1270 	debug("%s: %d, time %lu\n", __func__, err, get_timer(start));
1271 	return err;
1272 }
1273 
1274 /*
1275  * CPU and board-specific MMC initializations.  Aliased function
1276  * signals caller to move on
1277  */
1278 static int __def_mmc_init(bd_t *bis)
1279 {
1280 	return -1;
1281 }
1282 
1283 int cpu_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
1284 int board_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
1285 
1286 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1287 
1288 void print_mmc_devices(char separator)
1289 {
1290 	struct mmc *m;
1291 	struct list_head *entry;
1292 
1293 	list_for_each(entry, &mmc_devices) {
1294 		m = list_entry(entry, struct mmc, link);
1295 
1296 		printf("%s: %d", m->name, m->block_dev.dev);
1297 
1298 		if (entry->next != &mmc_devices)
1299 			printf("%c ", separator);
1300 	}
1301 
1302 	printf("\n");
1303 }
1304 
1305 #else
1306 void print_mmc_devices(char separator) { }
1307 #endif
1308 
1309 int get_mmc_num(void)
1310 {
1311 	return cur_dev_num;
1312 }
1313 
1314 void mmc_set_preinit(struct mmc *mmc, int preinit)
1315 {
1316 	mmc->preinit = preinit;
1317 }
1318 
1319 static void do_preinit(void)
1320 {
1321 	struct mmc *m;
1322 	struct list_head *entry;
1323 
1324 	list_for_each(entry, &mmc_devices) {
1325 		m = list_entry(entry, struct mmc, link);
1326 
1327 		if (m->preinit)
1328 			mmc_start_init(m);
1329 	}
1330 }
1331 
1332 
1333 int mmc_initialize(bd_t *bis)
1334 {
1335 	INIT_LIST_HEAD (&mmc_devices);
1336 	cur_dev_num = 0;
1337 
1338 	if (board_mmc_init(bis) < 0)
1339 		cpu_mmc_init(bis);
1340 
1341 #ifndef CONFIG_SPL_BUILD
1342 	print_mmc_devices(',');
1343 #endif
1344 
1345 	do_preinit();
1346 	return 0;
1347 }
1348 
1349 #ifdef CONFIG_SUPPORT_EMMC_BOOT
1350 /*
1351  * This function changes the size of boot partition and the size of rpmb
1352  * partition present on EMMC devices.
1353  *
1354  * Input Parameters:
1355  * struct *mmc: pointer for the mmc device strcuture
1356  * bootsize: size of boot partition
1357  * rpmbsize: size of rpmb partition
1358  *
1359  * Returns 0 on success.
1360  */
1361 
1362 int mmc_boot_partition_size_change(struct mmc *mmc, unsigned long bootsize,
1363 				unsigned long rpmbsize)
1364 {
1365 	int err;
1366 	struct mmc_cmd cmd;
1367 
1368 	/* Only use this command for raw EMMC moviNAND. Enter backdoor mode */
1369 	cmd.cmdidx = MMC_CMD_RES_MAN;
1370 	cmd.resp_type = MMC_RSP_R1b;
1371 	cmd.cmdarg = MMC_CMD62_ARG1;
1372 
1373 	err = mmc_send_cmd(mmc, &cmd, NULL);
1374 	if (err) {
1375 		debug("mmc_boot_partition_size_change: Error1 = %d\n", err);
1376 		return err;
1377 	}
1378 
1379 	/* Boot partition changing mode */
1380 	cmd.cmdidx = MMC_CMD_RES_MAN;
1381 	cmd.resp_type = MMC_RSP_R1b;
1382 	cmd.cmdarg = MMC_CMD62_ARG2;
1383 
1384 	err = mmc_send_cmd(mmc, &cmd, NULL);
1385 	if (err) {
1386 		debug("mmc_boot_partition_size_change: Error2 = %d\n", err);
1387 		return err;
1388 	}
1389 	/* boot partition size is multiple of 128KB */
1390 	bootsize = (bootsize * 1024) / 128;
1391 
1392 	/* Arg: boot partition size */
1393 	cmd.cmdidx = MMC_CMD_RES_MAN;
1394 	cmd.resp_type = MMC_RSP_R1b;
1395 	cmd.cmdarg = bootsize;
1396 
1397 	err = mmc_send_cmd(mmc, &cmd, NULL);
1398 	if (err) {
1399 		debug("mmc_boot_partition_size_change: Error3 = %d\n", err);
1400 		return err;
1401 	}
1402 	/* RPMB partition size is multiple of 128KB */
1403 	rpmbsize = (rpmbsize * 1024) / 128;
1404 	/* Arg: RPMB partition size */
1405 	cmd.cmdidx = MMC_CMD_RES_MAN;
1406 	cmd.resp_type = MMC_RSP_R1b;
1407 	cmd.cmdarg = rpmbsize;
1408 
1409 	err = mmc_send_cmd(mmc, &cmd, NULL);
1410 	if (err) {
1411 		debug("mmc_boot_partition_size_change: Error4 = %d\n", err);
1412 		return err;
1413 	}
1414 	return 0;
1415 }
1416 
1417 /*
1418  * This function shall form and send the commands to open / close the
1419  * boot partition specified by user.
1420  *
1421  * Input Parameters:
1422  * ack: 0x0 - No boot acknowledge sent (default)
1423  *	0x1 - Boot acknowledge sent during boot operation
1424  * part_num: User selects boot data that will be sent to master
1425  *	0x0 - Device not boot enabled (default)
1426  *	0x1 - Boot partition 1 enabled for boot
1427  *	0x2 - Boot partition 2 enabled for boot
1428  * access: User selects partitions to access
1429  *	0x0 : No access to boot partition (default)
1430  *	0x1 : R/W boot partition 1
1431  *	0x2 : R/W boot partition 2
1432  *	0x3 : R/W Replay Protected Memory Block (RPMB)
1433  *
1434  * Returns 0 on success.
1435  */
1436 int mmc_boot_part_access(struct mmc *mmc, u8 ack, u8 part_num, u8 access)
1437 {
1438 	int err;
1439 	struct mmc_cmd cmd;
1440 
1441 	/* Boot ack enable, boot partition enable , boot partition access */
1442 	cmd.cmdidx = MMC_CMD_SWITCH;
1443 	cmd.resp_type = MMC_RSP_R1b;
1444 
1445 	cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
1446 			(EXT_CSD_PART_CONF << 16) |
1447 			((EXT_CSD_BOOT_ACK(ack) |
1448 			EXT_CSD_BOOT_PART_NUM(part_num) |
1449 			EXT_CSD_PARTITION_ACCESS(access)) << 8);
1450 
1451 	err = mmc_send_cmd(mmc, &cmd, NULL);
1452 	if (err) {
1453 		if (access) {
1454 			debug("mmc boot partition#%d open fail:Error1 = %d\n",
1455 			      part_num, err);
1456 		} else {
1457 			debug("mmc boot partition#%d close fail:Error = %d\n",
1458 			      part_num, err);
1459 		}
1460 		return err;
1461 	}
1462 
1463 	if (access) {
1464 		/* 4bit transfer mode at booting time. */
1465 		cmd.cmdidx = MMC_CMD_SWITCH;
1466 		cmd.resp_type = MMC_RSP_R1b;
1467 
1468 		cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
1469 				(EXT_CSD_BOOT_BUS_WIDTH << 16) |
1470 				((1 << 0) << 8);
1471 
1472 		err = mmc_send_cmd(mmc, &cmd, NULL);
1473 		if (err) {
1474 			debug("mmc boot partition#%d open fail:Error2 = %d\n",
1475 			      part_num, err);
1476 			return err;
1477 		}
1478 	}
1479 	return 0;
1480 }
1481 #endif
1482