xref: /openbmc/u-boot/drivers/mmc/mmc.c (revision a79854a9)
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 		 * Host needs to enable ERASE_GRP_DEF bit if device is
964 		 * partitioned. This bit will be lost every time after a reset
965 		 * or power off. This will affect erase size.
966 		 */
967 		if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) &&
968 		    (ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE] & PART_ENH_ATTRIB)) {
969 			err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
970 				EXT_CSD_ERASE_GROUP_DEF, 1);
971 
972 			if (err)
973 				return err;
974 
975 			/* Read out group size from ext_csd */
976 			mmc->erase_grp_size =
977 				ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] *
978 					MMC_MAX_BLOCK_LEN * 1024;
979 		} else {
980 			/* Calculate the group size from the csd value. */
981 			int erase_gsz, erase_gmul;
982 			erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10;
983 			erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5;
984 			mmc->erase_grp_size = (erase_gsz + 1)
985 				* (erase_gmul + 1);
986 		}
987 
988 		/* store the partition info of emmc */
989 		if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) ||
990 		    ext_csd[EXT_CSD_BOOT_MULT])
991 			mmc->part_config = ext_csd[EXT_CSD_PART_CONF];
992 
993 		mmc->capacity_boot = ext_csd[EXT_CSD_BOOT_MULT] << 17;
994 
995 		mmc->capacity_rpmb = ext_csd[EXT_CSD_RPMB_MULT] << 17;
996 
997 		for (i = 0; i < 4; i++) {
998 			int idx = EXT_CSD_GP_SIZE_MULT + i * 3;
999 			mmc->capacity_gp[i] = (ext_csd[idx + 2] << 16) +
1000 				(ext_csd[idx + 1] << 8) + ext_csd[idx];
1001 			mmc->capacity_gp[i] *=
1002 				ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
1003 			mmc->capacity_gp[i] *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
1004 		}
1005 	}
1006 
1007 	err = mmc_set_capacity(mmc, mmc->part_num);
1008 	if (err)
1009 		return err;
1010 
1011 	if (IS_SD(mmc))
1012 		err = sd_change_freq(mmc);
1013 	else
1014 		err = mmc_change_freq(mmc);
1015 
1016 	if (err)
1017 		return err;
1018 
1019 	/* Restrict card's capabilities by what the host can do */
1020 	mmc->card_caps &= mmc->host_caps;
1021 
1022 	if (IS_SD(mmc)) {
1023 		if (mmc->card_caps & MMC_MODE_4BIT) {
1024 			cmd.cmdidx = MMC_CMD_APP_CMD;
1025 			cmd.resp_type = MMC_RSP_R1;
1026 			cmd.cmdarg = mmc->rca << 16;
1027 
1028 			err = mmc_send_cmd(mmc, &cmd, NULL);
1029 			if (err)
1030 				return err;
1031 
1032 			cmd.cmdidx = SD_CMD_APP_SET_BUS_WIDTH;
1033 			cmd.resp_type = MMC_RSP_R1;
1034 			cmd.cmdarg = 2;
1035 			err = mmc_send_cmd(mmc, &cmd, NULL);
1036 			if (err)
1037 				return err;
1038 
1039 			mmc_set_bus_width(mmc, 4);
1040 		}
1041 
1042 		if (mmc->card_caps & MMC_MODE_HS)
1043 			mmc->tran_speed = 50000000;
1044 		else
1045 			mmc->tran_speed = 25000000;
1046 	} else {
1047 		int idx;
1048 
1049 		/* An array of possible bus widths in order of preference */
1050 		static unsigned ext_csd_bits[] = {
1051 			EXT_CSD_BUS_WIDTH_8,
1052 			EXT_CSD_BUS_WIDTH_4,
1053 			EXT_CSD_BUS_WIDTH_1,
1054 		};
1055 
1056 		/* An array to map CSD bus widths to host cap bits */
1057 		static unsigned ext_to_hostcaps[] = {
1058 			[EXT_CSD_BUS_WIDTH_4] = MMC_MODE_4BIT,
1059 			[EXT_CSD_BUS_WIDTH_8] = MMC_MODE_8BIT,
1060 		};
1061 
1062 		/* An array to map chosen bus width to an integer */
1063 		static unsigned widths[] = {
1064 			8, 4, 1,
1065 		};
1066 
1067 		for (idx=0; idx < ARRAY_SIZE(ext_csd_bits); idx++) {
1068 			unsigned int extw = ext_csd_bits[idx];
1069 
1070 			/*
1071 			 * Check to make sure the controller supports
1072 			 * this bus width, if it's more than 1
1073 			 */
1074 			if (extw != EXT_CSD_BUS_WIDTH_1 &&
1075 					!(mmc->host_caps & ext_to_hostcaps[extw]))
1076 				continue;
1077 
1078 			err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1079 					EXT_CSD_BUS_WIDTH, extw);
1080 
1081 			if (err)
1082 				continue;
1083 
1084 			mmc_set_bus_width(mmc, widths[idx]);
1085 
1086 			err = mmc_send_ext_csd(mmc, test_csd);
1087 			if (!err && ext_csd[EXT_CSD_PARTITIONING_SUPPORT] \
1088 				    == test_csd[EXT_CSD_PARTITIONING_SUPPORT]
1089 				 && ext_csd[EXT_CSD_ERASE_GROUP_DEF] \
1090 				    == test_csd[EXT_CSD_ERASE_GROUP_DEF] \
1091 				 && ext_csd[EXT_CSD_REV] \
1092 				    == test_csd[EXT_CSD_REV]
1093 				 && ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] \
1094 				    == test_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
1095 				 && memcmp(&ext_csd[EXT_CSD_SEC_CNT], \
1096 					&test_csd[EXT_CSD_SEC_CNT], 4) == 0) {
1097 
1098 				mmc->card_caps |= ext_to_hostcaps[extw];
1099 				break;
1100 			}
1101 		}
1102 
1103 		if (mmc->card_caps & MMC_MODE_HS) {
1104 			if (mmc->card_caps & MMC_MODE_HS_52MHz)
1105 				mmc->tran_speed = 52000000;
1106 			else
1107 				mmc->tran_speed = 26000000;
1108 		}
1109 	}
1110 
1111 	mmc_set_clock(mmc, mmc->tran_speed);
1112 
1113 	/* fill in device description */
1114 	mmc->block_dev.lun = 0;
1115 	mmc->block_dev.type = 0;
1116 	mmc->block_dev.blksz = mmc->read_bl_len;
1117 	mmc->block_dev.log2blksz = LOG2(mmc->block_dev.blksz);
1118 	mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);
1119 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1120 	sprintf(mmc->block_dev.vendor, "Man %06x Snr %04x%04x",
1121 		mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff),
1122 		(mmc->cid[3] >> 16) & 0xffff);
1123 	sprintf(mmc->block_dev.product, "%c%c%c%c%c%c", mmc->cid[0] & 0xff,
1124 		(mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
1125 		(mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff,
1126 		(mmc->cid[2] >> 24) & 0xff);
1127 	sprintf(mmc->block_dev.revision, "%d.%d", (mmc->cid[2] >> 20) & 0xf,
1128 		(mmc->cid[2] >> 16) & 0xf);
1129 #else
1130 	mmc->block_dev.vendor[0] = 0;
1131 	mmc->block_dev.product[0] = 0;
1132 	mmc->block_dev.revision[0] = 0;
1133 #endif
1134 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBDISK_SUPPORT)
1135 	init_part(&mmc->block_dev);
1136 #endif
1137 
1138 	return 0;
1139 }
1140 
1141 static int mmc_send_if_cond(struct mmc *mmc)
1142 {
1143 	struct mmc_cmd cmd;
1144 	int err;
1145 
1146 	cmd.cmdidx = SD_CMD_SEND_IF_COND;
1147 	/* We set the bit if the host supports voltages between 2.7 and 3.6 V */
1148 	cmd.cmdarg = ((mmc->voltages & 0xff8000) != 0) << 8 | 0xaa;
1149 	cmd.resp_type = MMC_RSP_R7;
1150 
1151 	err = mmc_send_cmd(mmc, &cmd, NULL);
1152 
1153 	if (err)
1154 		return err;
1155 
1156 	if ((cmd.response[0] & 0xff) != 0xaa)
1157 		return UNUSABLE_ERR;
1158 	else
1159 		mmc->version = SD_VERSION_2;
1160 
1161 	return 0;
1162 }
1163 
1164 int mmc_register(struct mmc *mmc)
1165 {
1166 	/* Setup the universal parts of the block interface just once */
1167 	mmc->block_dev.if_type = IF_TYPE_MMC;
1168 	mmc->block_dev.dev = cur_dev_num++;
1169 	mmc->block_dev.removable = 1;
1170 	mmc->block_dev.block_read = mmc_bread;
1171 	mmc->block_dev.block_write = mmc_bwrite;
1172 	mmc->block_dev.block_erase = mmc_berase;
1173 	if (!mmc->b_max)
1174 		mmc->b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
1175 
1176 	INIT_LIST_HEAD (&mmc->link);
1177 
1178 	list_add_tail (&mmc->link, &mmc_devices);
1179 
1180 	return 0;
1181 }
1182 
1183 #ifdef CONFIG_PARTITIONS
1184 block_dev_desc_t *mmc_get_dev(int dev)
1185 {
1186 	struct mmc *mmc = find_mmc_device(dev);
1187 	if (!mmc || mmc_init(mmc))
1188 		return NULL;
1189 
1190 	return &mmc->block_dev;
1191 }
1192 #endif
1193 
1194 int mmc_start_init(struct mmc *mmc)
1195 {
1196 	int err;
1197 
1198 	if (mmc_getcd(mmc) == 0) {
1199 		mmc->has_init = 0;
1200 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1201 		printf("MMC: no card present\n");
1202 #endif
1203 		return NO_CARD_ERR;
1204 	}
1205 
1206 	if (mmc->has_init)
1207 		return 0;
1208 
1209 	err = mmc->init(mmc);
1210 
1211 	if (err)
1212 		return err;
1213 
1214 	mmc_set_bus_width(mmc, 1);
1215 	mmc_set_clock(mmc, 1);
1216 
1217 	/* Reset the Card */
1218 	err = mmc_go_idle(mmc);
1219 
1220 	if (err)
1221 		return err;
1222 
1223 	/* The internal partition reset to user partition(0) at every CMD0*/
1224 	mmc->part_num = 0;
1225 
1226 	/* Test for SD version 2 */
1227 	err = mmc_send_if_cond(mmc);
1228 
1229 	/* Now try to get the SD card's operating condition */
1230 	err = sd_send_op_cond(mmc);
1231 
1232 	/* If the command timed out, we check for an MMC card */
1233 	if (err == TIMEOUT) {
1234 		err = mmc_send_op_cond(mmc);
1235 
1236 		if (err && err != IN_PROGRESS) {
1237 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1238 			printf("Card did not respond to voltage select!\n");
1239 #endif
1240 			return UNUSABLE_ERR;
1241 		}
1242 	}
1243 
1244 	if (err == IN_PROGRESS)
1245 		mmc->init_in_progress = 1;
1246 
1247 	return err;
1248 }
1249 
1250 static int mmc_complete_init(struct mmc *mmc)
1251 {
1252 	int err = 0;
1253 
1254 	if (mmc->op_cond_pending)
1255 		err = mmc_complete_op_cond(mmc);
1256 
1257 	if (!err)
1258 		err = mmc_startup(mmc);
1259 	if (err)
1260 		mmc->has_init = 0;
1261 	else
1262 		mmc->has_init = 1;
1263 	mmc->init_in_progress = 0;
1264 	return err;
1265 }
1266 
1267 int mmc_init(struct mmc *mmc)
1268 {
1269 	int err = IN_PROGRESS;
1270 	unsigned start = get_timer(0);
1271 
1272 	if (mmc->has_init)
1273 		return 0;
1274 	if (!mmc->init_in_progress)
1275 		err = mmc_start_init(mmc);
1276 
1277 	if (!err || err == IN_PROGRESS)
1278 		err = mmc_complete_init(mmc);
1279 	debug("%s: %d, time %lu\n", __func__, err, get_timer(start));
1280 	return err;
1281 }
1282 
1283 /*
1284  * CPU and board-specific MMC initializations.  Aliased function
1285  * signals caller to move on
1286  */
1287 static int __def_mmc_init(bd_t *bis)
1288 {
1289 	return -1;
1290 }
1291 
1292 int cpu_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
1293 int board_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
1294 
1295 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
1296 
1297 void print_mmc_devices(char separator)
1298 {
1299 	struct mmc *m;
1300 	struct list_head *entry;
1301 
1302 	list_for_each(entry, &mmc_devices) {
1303 		m = list_entry(entry, struct mmc, link);
1304 
1305 		printf("%s: %d", m->name, m->block_dev.dev);
1306 
1307 		if (entry->next != &mmc_devices)
1308 			printf("%c ", separator);
1309 	}
1310 
1311 	printf("\n");
1312 }
1313 
1314 #else
1315 void print_mmc_devices(char separator) { }
1316 #endif
1317 
1318 int get_mmc_num(void)
1319 {
1320 	return cur_dev_num;
1321 }
1322 
1323 void mmc_set_preinit(struct mmc *mmc, int preinit)
1324 {
1325 	mmc->preinit = preinit;
1326 }
1327 
1328 static void do_preinit(void)
1329 {
1330 	struct mmc *m;
1331 	struct list_head *entry;
1332 
1333 	list_for_each(entry, &mmc_devices) {
1334 		m = list_entry(entry, struct mmc, link);
1335 
1336 		if (m->preinit)
1337 			mmc_start_init(m);
1338 	}
1339 }
1340 
1341 
1342 int mmc_initialize(bd_t *bis)
1343 {
1344 	INIT_LIST_HEAD (&mmc_devices);
1345 	cur_dev_num = 0;
1346 
1347 	if (board_mmc_init(bis) < 0)
1348 		cpu_mmc_init(bis);
1349 
1350 #ifndef CONFIG_SPL_BUILD
1351 	print_mmc_devices(',');
1352 #endif
1353 
1354 	do_preinit();
1355 	return 0;
1356 }
1357 
1358 #ifdef CONFIG_SUPPORT_EMMC_BOOT
1359 /*
1360  * This function changes the size of boot partition and the size of rpmb
1361  * partition present on EMMC devices.
1362  *
1363  * Input Parameters:
1364  * struct *mmc: pointer for the mmc device strcuture
1365  * bootsize: size of boot partition
1366  * rpmbsize: size of rpmb partition
1367  *
1368  * Returns 0 on success.
1369  */
1370 
1371 int mmc_boot_partition_size_change(struct mmc *mmc, unsigned long bootsize,
1372 				unsigned long rpmbsize)
1373 {
1374 	int err;
1375 	struct mmc_cmd cmd;
1376 
1377 	/* Only use this command for raw EMMC moviNAND. Enter backdoor mode */
1378 	cmd.cmdidx = MMC_CMD_RES_MAN;
1379 	cmd.resp_type = MMC_RSP_R1b;
1380 	cmd.cmdarg = MMC_CMD62_ARG1;
1381 
1382 	err = mmc_send_cmd(mmc, &cmd, NULL);
1383 	if (err) {
1384 		debug("mmc_boot_partition_size_change: Error1 = %d\n", err);
1385 		return err;
1386 	}
1387 
1388 	/* Boot partition changing mode */
1389 	cmd.cmdidx = MMC_CMD_RES_MAN;
1390 	cmd.resp_type = MMC_RSP_R1b;
1391 	cmd.cmdarg = MMC_CMD62_ARG2;
1392 
1393 	err = mmc_send_cmd(mmc, &cmd, NULL);
1394 	if (err) {
1395 		debug("mmc_boot_partition_size_change: Error2 = %d\n", err);
1396 		return err;
1397 	}
1398 	/* boot partition size is multiple of 128KB */
1399 	bootsize = (bootsize * 1024) / 128;
1400 
1401 	/* Arg: boot partition size */
1402 	cmd.cmdidx = MMC_CMD_RES_MAN;
1403 	cmd.resp_type = MMC_RSP_R1b;
1404 	cmd.cmdarg = bootsize;
1405 
1406 	err = mmc_send_cmd(mmc, &cmd, NULL);
1407 	if (err) {
1408 		debug("mmc_boot_partition_size_change: Error3 = %d\n", err);
1409 		return err;
1410 	}
1411 	/* RPMB partition size is multiple of 128KB */
1412 	rpmbsize = (rpmbsize * 1024) / 128;
1413 	/* Arg: RPMB partition size */
1414 	cmd.cmdidx = MMC_CMD_RES_MAN;
1415 	cmd.resp_type = MMC_RSP_R1b;
1416 	cmd.cmdarg = rpmbsize;
1417 
1418 	err = mmc_send_cmd(mmc, &cmd, NULL);
1419 	if (err) {
1420 		debug("mmc_boot_partition_size_change: Error4 = %d\n", err);
1421 		return err;
1422 	}
1423 	return 0;
1424 }
1425 
1426 /*
1427  * This function shall form and send the commands to open / close the
1428  * boot partition specified by user.
1429  *
1430  * Input Parameters:
1431  * ack: 0x0 - No boot acknowledge sent (default)
1432  *	0x1 - Boot acknowledge sent during boot operation
1433  * part_num: User selects boot data that will be sent to master
1434  *	0x0 - Device not boot enabled (default)
1435  *	0x1 - Boot partition 1 enabled for boot
1436  *	0x2 - Boot partition 2 enabled for boot
1437  * access: User selects partitions to access
1438  *	0x0 : No access to boot partition (default)
1439  *	0x1 : R/W boot partition 1
1440  *	0x2 : R/W boot partition 2
1441  *	0x3 : R/W Replay Protected Memory Block (RPMB)
1442  *
1443  * Returns 0 on success.
1444  */
1445 int mmc_boot_part_access(struct mmc *mmc, u8 ack, u8 part_num, u8 access)
1446 {
1447 	int err;
1448 	struct mmc_cmd cmd;
1449 
1450 	/* Boot ack enable, boot partition enable , boot partition access */
1451 	cmd.cmdidx = MMC_CMD_SWITCH;
1452 	cmd.resp_type = MMC_RSP_R1b;
1453 
1454 	cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
1455 			(EXT_CSD_PART_CONF << 16) |
1456 			((EXT_CSD_BOOT_ACK(ack) |
1457 			EXT_CSD_BOOT_PART_NUM(part_num) |
1458 			EXT_CSD_PARTITION_ACCESS(access)) << 8);
1459 
1460 	err = mmc_send_cmd(mmc, &cmd, NULL);
1461 	if (err) {
1462 		if (access) {
1463 			debug("mmc boot partition#%d open fail:Error1 = %d\n",
1464 			      part_num, err);
1465 		} else {
1466 			debug("mmc boot partition#%d close fail:Error = %d\n",
1467 			      part_num, err);
1468 		}
1469 		return err;
1470 	}
1471 
1472 	if (access) {
1473 		/* 4bit transfer mode at booting time. */
1474 		cmd.cmdidx = MMC_CMD_SWITCH;
1475 		cmd.resp_type = MMC_RSP_R1b;
1476 
1477 		cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
1478 				(EXT_CSD_BOOT_BUS_WIDTH << 16) |
1479 				((1 << 0) << 8);
1480 
1481 		err = mmc_send_cmd(mmc, &cmd, NULL);
1482 		if (err) {
1483 			debug("mmc boot partition#%d open fail:Error2 = %d\n",
1484 			      part_num, err);
1485 			return err;
1486 		}
1487 	}
1488 	return 0;
1489 }
1490 #endif
1491