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