xref: /openbmc/u-boot/drivers/mmc/mmc.c (revision 5c8404af)
1 /*
2  * Copyright 2008, Freescale Semiconductor, Inc
3  * Andy Fleming
4  *
5  * Based vaguely on the Linux code
6  *
7  * See file CREDITS for list of people who contributed to this
8  * project.
9  *
10  * This program is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU General Public License as
12  * published by the Free Software Foundation; either version 2 of
13  * the License, or (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
23  * MA 02111-1307 USA
24  */
25 
26 #include <config.h>
27 #include <common.h>
28 #include <command.h>
29 #include <mmc.h>
30 #include <part.h>
31 #include <malloc.h>
32 #include <linux/list.h>
33 #include <div64.h>
34 
35 /* Set block count limit because of 16 bit register limit on some hardware*/
36 #ifndef CONFIG_SYS_MMC_MAX_BLK_COUNT
37 #define CONFIG_SYS_MMC_MAX_BLK_COUNT 65535
38 #endif
39 
40 static struct list_head mmc_devices;
41 static int cur_dev_num = -1;
42 
43 int __board_mmc_getcd(u8 *cd, struct mmc *mmc) {
44 	return -1;
45 }
46 
47 int board_mmc_getcd(u8 *cd, struct mmc *mmc)__attribute__((weak,
48 	alias("__board_mmc_getcd")));
49 
50 int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
51 {
52 #ifdef CONFIG_MMC_TRACE
53 	int ret;
54 	int i;
55 	u8 *ptr;
56 
57 	printf("CMD_SEND:%d\n", cmd->cmdidx);
58 	printf("\t\tARG\t\t\t 0x%08X\n", cmd->cmdarg);
59 	printf("\t\tFLAG\t\t\t %d\n", cmd->flags);
60 	ret = mmc->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 = &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 	return ret;
103 #else
104 	return mmc->send_cmd(mmc, cmd, data);
105 #endif
106 }
107 
108 int mmc_send_status(struct mmc *mmc, int timeout)
109 {
110 	struct mmc_cmd cmd;
111 	int err;
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 	cmd.cmdarg = 0;
119 	cmd.flags = 0;
120 
121 	do {
122 		err = mmc_send_cmd(mmc, &cmd, NULL);
123 		if (err)
124 			return err;
125 		else if (cmd.response[0] & MMC_STATUS_RDY_FOR_DATA)
126 			break;
127 
128 		udelay(1000);
129 
130 		if (cmd.response[0] & MMC_STATUS_MASK) {
131 			printf("Status Error: 0x%08X\n", cmd.response[0]);
132 			return COMM_ERR;
133 		}
134 	} while (timeout--);
135 
136 #ifdef CONFIG_MMC_TRACE
137 	status = (cmd.response[0] & MMC_STATUS_CURR_STATE) >> 9;
138 	printf("CURR STATE:%d\n", status);
139 #endif
140 	if (!timeout) {
141 		printf("Timeout waiting card ready\n");
142 		return TIMEOUT;
143 	}
144 
145 	return 0;
146 }
147 
148 int mmc_set_blocklen(struct mmc *mmc, int len)
149 {
150 	struct mmc_cmd cmd;
151 
152 	cmd.cmdidx = MMC_CMD_SET_BLOCKLEN;
153 	cmd.resp_type = MMC_RSP_R1;
154 	cmd.cmdarg = len;
155 	cmd.flags = 0;
156 
157 	return mmc_send_cmd(mmc, &cmd, NULL);
158 }
159 
160 struct mmc *find_mmc_device(int dev_num)
161 {
162 	struct mmc *m;
163 	struct list_head *entry;
164 
165 	list_for_each(entry, &mmc_devices) {
166 		m = list_entry(entry, struct mmc, link);
167 
168 		if (m->block_dev.dev == dev_num)
169 			return m;
170 	}
171 
172 	printf("MMC Device %d not found\n", dev_num);
173 
174 	return NULL;
175 }
176 
177 static ulong mmc_erase_t(struct mmc *mmc, ulong start, lbaint_t blkcnt)
178 {
179 	struct mmc_cmd cmd;
180 	ulong end;
181 	int err, start_cmd, end_cmd;
182 
183 	if (mmc->high_capacity)
184 		end = start + blkcnt - 1;
185 	else {
186 		end = (start + blkcnt - 1) * mmc->write_bl_len;
187 		start *= mmc->write_bl_len;
188 	}
189 
190 	if (IS_SD(mmc)) {
191 		start_cmd = SD_CMD_ERASE_WR_BLK_START;
192 		end_cmd = SD_CMD_ERASE_WR_BLK_END;
193 	} else {
194 		start_cmd = MMC_CMD_ERASE_GROUP_START;
195 		end_cmd = MMC_CMD_ERASE_GROUP_END;
196 	}
197 
198 	cmd.cmdidx = start_cmd;
199 	cmd.cmdarg = start;
200 	cmd.resp_type = MMC_RSP_R1;
201 	cmd.flags = 0;
202 
203 	err = mmc_send_cmd(mmc, &cmd, NULL);
204 	if (err)
205 		goto err_out;
206 
207 	cmd.cmdidx = end_cmd;
208 	cmd.cmdarg = end;
209 
210 	err = mmc_send_cmd(mmc, &cmd, NULL);
211 	if (err)
212 		goto err_out;
213 
214 	cmd.cmdidx = MMC_CMD_ERASE;
215 	cmd.cmdarg = SECURE_ERASE;
216 	cmd.resp_type = MMC_RSP_R1b;
217 
218 	err = mmc_send_cmd(mmc, &cmd, NULL);
219 	if (err)
220 		goto err_out;
221 
222 	return 0;
223 
224 err_out:
225 	puts("mmc erase failed\n");
226 	return err;
227 }
228 
229 static unsigned long
230 mmc_berase(int dev_num, unsigned long start, lbaint_t blkcnt)
231 {
232 	int err = 0;
233 	struct mmc *mmc = find_mmc_device(dev_num);
234 	lbaint_t blk = 0, blk_r = 0;
235 
236 	if (!mmc)
237 		return -1;
238 
239 	if ((start % mmc->erase_grp_size) || (blkcnt % mmc->erase_grp_size))
240 		printf("\n\nCaution! Your devices Erase group is 0x%x\n"
241 			"The erase range would be change to 0x%lx~0x%lx\n\n",
242 		       mmc->erase_grp_size, start & ~(mmc->erase_grp_size - 1),
243 		       ((start + blkcnt + mmc->erase_grp_size)
244 		       & ~(mmc->erase_grp_size - 1)) - 1);
245 
246 	while (blk < blkcnt) {
247 		blk_r = ((blkcnt - blk) > mmc->erase_grp_size) ?
248 			mmc->erase_grp_size : (blkcnt - blk);
249 		err = mmc_erase_t(mmc, start + blk, blk_r);
250 		if (err)
251 			break;
252 
253 		blk += blk_r;
254 	}
255 
256 	return blk;
257 }
258 
259 static ulong
260 mmc_write_blocks(struct mmc *mmc, ulong start, lbaint_t blkcnt, const void*src)
261 {
262 	struct mmc_cmd cmd;
263 	struct mmc_data data;
264 	int timeout = 1000;
265 
266 	if ((start + blkcnt) > mmc->block_dev.lba) {
267 		printf("MMC: block number 0x%lx exceeds max(0x%lx)\n",
268 			start + blkcnt, mmc->block_dev.lba);
269 		return 0;
270 	}
271 
272 	if (blkcnt > 1)
273 		cmd.cmdidx = MMC_CMD_WRITE_MULTIPLE_BLOCK;
274 	else
275 		cmd.cmdidx = MMC_CMD_WRITE_SINGLE_BLOCK;
276 
277 	if (mmc->high_capacity)
278 		cmd.cmdarg = start;
279 	else
280 		cmd.cmdarg = start * mmc->write_bl_len;
281 
282 	cmd.resp_type = MMC_RSP_R1;
283 	cmd.flags = 0;
284 
285 	data.src = src;
286 	data.blocks = blkcnt;
287 	data.blocksize = mmc->write_bl_len;
288 	data.flags = MMC_DATA_WRITE;
289 
290 	if (mmc_send_cmd(mmc, &cmd, &data)) {
291 		printf("mmc write failed\n");
292 		return 0;
293 	}
294 
295 	/* SPI multiblock writes terminate using a special
296 	 * token, not a STOP_TRANSMISSION request.
297 	 */
298 	if (!mmc_host_is_spi(mmc) && blkcnt > 1) {
299 		cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
300 		cmd.cmdarg = 0;
301 		cmd.resp_type = MMC_RSP_R1b;
302 		cmd.flags = 0;
303 		if (mmc_send_cmd(mmc, &cmd, NULL)) {
304 			printf("mmc fail to send stop cmd\n");
305 			return 0;
306 		}
307 
308 		/* Waiting for the ready status */
309 		mmc_send_status(mmc, timeout);
310 	}
311 
312 	return blkcnt;
313 }
314 
315 static ulong
316 mmc_bwrite(int dev_num, ulong start, lbaint_t blkcnt, const void*src)
317 {
318 	lbaint_t cur, blocks_todo = blkcnt;
319 
320 	struct mmc *mmc = find_mmc_device(dev_num);
321 	if (!mmc)
322 		return 0;
323 
324 	if (mmc_set_blocklen(mmc, mmc->write_bl_len))
325 		return 0;
326 
327 	do {
328 		cur = (blocks_todo > mmc->b_max) ?  mmc->b_max : blocks_todo;
329 		if(mmc_write_blocks(mmc, start, cur, src) != cur)
330 			return 0;
331 		blocks_todo -= cur;
332 		start += cur;
333 		src += cur * mmc->write_bl_len;
334 	} while (blocks_todo > 0);
335 
336 	return blkcnt;
337 }
338 
339 int mmc_read_blocks(struct mmc *mmc, void *dst, ulong start, lbaint_t blkcnt)
340 {
341 	struct mmc_cmd cmd;
342 	struct mmc_data data;
343 	int timeout = 1000;
344 
345 	if (blkcnt > 1)
346 		cmd.cmdidx = MMC_CMD_READ_MULTIPLE_BLOCK;
347 	else
348 		cmd.cmdidx = MMC_CMD_READ_SINGLE_BLOCK;
349 
350 	if (mmc->high_capacity)
351 		cmd.cmdarg = start;
352 	else
353 		cmd.cmdarg = start * mmc->read_bl_len;
354 
355 	cmd.resp_type = MMC_RSP_R1;
356 	cmd.flags = 0;
357 
358 	data.dest = dst;
359 	data.blocks = blkcnt;
360 	data.blocksize = mmc->read_bl_len;
361 	data.flags = MMC_DATA_READ;
362 
363 	if (mmc_send_cmd(mmc, &cmd, &data))
364 		return 0;
365 
366 	if (blkcnt > 1) {
367 		cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
368 		cmd.cmdarg = 0;
369 		cmd.resp_type = MMC_RSP_R1b;
370 		cmd.flags = 0;
371 		if (mmc_send_cmd(mmc, &cmd, NULL)) {
372 			printf("mmc fail to send stop cmd\n");
373 			return 0;
374 		}
375 
376 		/* Waiting for the ready status */
377 		mmc_send_status(mmc, timeout);
378 	}
379 
380 	return blkcnt;
381 }
382 
383 static ulong mmc_bread(int dev_num, ulong start, lbaint_t blkcnt, void *dst)
384 {
385 	lbaint_t cur, blocks_todo = blkcnt;
386 
387 	if (blkcnt == 0)
388 		return 0;
389 
390 	struct mmc *mmc = find_mmc_device(dev_num);
391 	if (!mmc)
392 		return 0;
393 
394 	if ((start + blkcnt) > mmc->block_dev.lba) {
395 		printf("MMC: block number 0x%lx exceeds max(0x%lx)\n",
396 			start + blkcnt, mmc->block_dev.lba);
397 		return 0;
398 	}
399 
400 	if (mmc_set_blocklen(mmc, mmc->read_bl_len))
401 		return 0;
402 
403 	do {
404 		cur = (blocks_todo > mmc->b_max) ?  mmc->b_max : blocks_todo;
405 		if(mmc_read_blocks(mmc, dst, start, cur) != cur)
406 			return 0;
407 		blocks_todo -= cur;
408 		start += cur;
409 		dst += cur * mmc->read_bl_len;
410 	} while (blocks_todo > 0);
411 
412 	return blkcnt;
413 }
414 
415 int mmc_go_idle(struct mmc* mmc)
416 {
417 	struct mmc_cmd cmd;
418 	int err;
419 
420 	udelay(1000);
421 
422 	cmd.cmdidx = MMC_CMD_GO_IDLE_STATE;
423 	cmd.cmdarg = 0;
424 	cmd.resp_type = MMC_RSP_NONE;
425 	cmd.flags = 0;
426 
427 	err = mmc_send_cmd(mmc, &cmd, NULL);
428 
429 	if (err)
430 		return err;
431 
432 	udelay(2000);
433 
434 	return 0;
435 }
436 
437 int
438 sd_send_op_cond(struct mmc *mmc)
439 {
440 	int timeout = 1000;
441 	int err;
442 	struct mmc_cmd cmd;
443 
444 	do {
445 		cmd.cmdidx = MMC_CMD_APP_CMD;
446 		cmd.resp_type = MMC_RSP_R1;
447 		cmd.cmdarg = 0;
448 		cmd.flags = 0;
449 
450 		err = mmc_send_cmd(mmc, &cmd, NULL);
451 
452 		if (err)
453 			return err;
454 
455 		cmd.cmdidx = SD_CMD_APP_SEND_OP_COND;
456 		cmd.resp_type = MMC_RSP_R3;
457 
458 		/*
459 		 * Most cards do not answer if some reserved bits
460 		 * in the ocr are set. However, Some controller
461 		 * can set bit 7 (reserved for low voltages), but
462 		 * how to manage low voltages SD card is not yet
463 		 * specified.
464 		 */
465 		cmd.cmdarg = mmc_host_is_spi(mmc) ? 0 :
466 			(mmc->voltages & 0xff8000);
467 
468 		if (mmc->version == SD_VERSION_2)
469 			cmd.cmdarg |= OCR_HCS;
470 
471 		err = mmc_send_cmd(mmc, &cmd, NULL);
472 
473 		if (err)
474 			return err;
475 
476 		udelay(1000);
477 	} while ((!(cmd.response[0] & OCR_BUSY)) && timeout--);
478 
479 	if (timeout <= 0)
480 		return UNUSABLE_ERR;
481 
482 	if (mmc->version != SD_VERSION_2)
483 		mmc->version = SD_VERSION_1_0;
484 
485 	if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
486 		cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
487 		cmd.resp_type = MMC_RSP_R3;
488 		cmd.cmdarg = 0;
489 		cmd.flags = 0;
490 
491 		err = mmc_send_cmd(mmc, &cmd, NULL);
492 
493 		if (err)
494 			return err;
495 	}
496 
497 	mmc->ocr = cmd.response[0];
498 
499 	mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
500 	mmc->rca = 0;
501 
502 	return 0;
503 }
504 
505 int mmc_send_op_cond(struct mmc *mmc)
506 {
507 	int timeout = 10000;
508 	struct mmc_cmd cmd;
509 	int err;
510 
511 	/* Some cards seem to need this */
512 	mmc_go_idle(mmc);
513 
514  	/* Asking to the card its capabilities */
515  	cmd.cmdidx = MMC_CMD_SEND_OP_COND;
516  	cmd.resp_type = MMC_RSP_R3;
517  	cmd.cmdarg = 0;
518  	cmd.flags = 0;
519 
520  	err = mmc_send_cmd(mmc, &cmd, NULL);
521 
522  	if (err)
523  		return err;
524 
525  	udelay(1000);
526 
527 	do {
528 		cmd.cmdidx = MMC_CMD_SEND_OP_COND;
529 		cmd.resp_type = MMC_RSP_R3;
530 		cmd.cmdarg = (mmc_host_is_spi(mmc) ? 0 :
531 				(mmc->voltages &
532 				(cmd.response[0] & OCR_VOLTAGE_MASK)) |
533 				(cmd.response[0] & OCR_ACCESS_MODE));
534 
535 		if (mmc->host_caps & MMC_MODE_HC)
536 			cmd.cmdarg |= OCR_HCS;
537 
538 		cmd.flags = 0;
539 
540 		err = mmc_send_cmd(mmc, &cmd, NULL);
541 
542 		if (err)
543 			return err;
544 
545 		udelay(1000);
546 	} while (!(cmd.response[0] & OCR_BUSY) && timeout--);
547 
548 	if (timeout <= 0)
549 		return UNUSABLE_ERR;
550 
551 	if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
552 		cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
553 		cmd.resp_type = MMC_RSP_R3;
554 		cmd.cmdarg = 0;
555 		cmd.flags = 0;
556 
557 		err = mmc_send_cmd(mmc, &cmd, NULL);
558 
559 		if (err)
560 			return err;
561 	}
562 
563 	mmc->version = MMC_VERSION_UNKNOWN;
564 	mmc->ocr = cmd.response[0];
565 
566 	mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
567 	mmc->rca = 0;
568 
569 	return 0;
570 }
571 
572 
573 int mmc_send_ext_csd(struct mmc *mmc, char *ext_csd)
574 {
575 	struct mmc_cmd cmd;
576 	struct mmc_data data;
577 	int err;
578 
579 	/* Get the Card Status Register */
580 	cmd.cmdidx = MMC_CMD_SEND_EXT_CSD;
581 	cmd.resp_type = MMC_RSP_R1;
582 	cmd.cmdarg = 0;
583 	cmd.flags = 0;
584 
585 	data.dest = ext_csd;
586 	data.blocks = 1;
587 	data.blocksize = 512;
588 	data.flags = MMC_DATA_READ;
589 
590 	err = mmc_send_cmd(mmc, &cmd, &data);
591 
592 	return err;
593 }
594 
595 
596 int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)
597 {
598 	struct mmc_cmd cmd;
599 	int timeout = 1000;
600 	int ret;
601 
602 	cmd.cmdidx = MMC_CMD_SWITCH;
603 	cmd.resp_type = MMC_RSP_R1b;
604 	cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
605 				 (index << 16) |
606 				 (value << 8);
607 	cmd.flags = 0;
608 
609 	ret = mmc_send_cmd(mmc, &cmd, NULL);
610 
611 	/* Waiting for the ready status */
612 	mmc_send_status(mmc, timeout);
613 
614 	return ret;
615 
616 }
617 
618 int mmc_change_freq(struct mmc *mmc)
619 {
620 	char ext_csd[512];
621 	char cardtype;
622 	int err;
623 
624 	mmc->card_caps = 0;
625 
626 	if (mmc_host_is_spi(mmc))
627 		return 0;
628 
629 	/* Only version 4 supports high-speed */
630 	if (mmc->version < MMC_VERSION_4)
631 		return 0;
632 
633 	mmc->card_caps |= MMC_MODE_4BIT;
634 
635 	err = mmc_send_ext_csd(mmc, ext_csd);
636 
637 	if (err)
638 		return err;
639 
640 	cardtype = ext_csd[196] & 0xf;
641 
642 	err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING, 1);
643 
644 	if (err)
645 		return err;
646 
647 	/* Now check to see that it worked */
648 	err = mmc_send_ext_csd(mmc, ext_csd);
649 
650 	if (err)
651 		return err;
652 
653 	/* No high-speed support */
654 	if (!ext_csd[185])
655 		return 0;
656 
657 	/* High Speed is set, there are two types: 52MHz and 26MHz */
658 	if (cardtype & MMC_HS_52MHZ)
659 		mmc->card_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
660 	else
661 		mmc->card_caps |= MMC_MODE_HS;
662 
663 	return 0;
664 }
665 
666 int mmc_switch_part(int dev_num, unsigned int part_num)
667 {
668 	struct mmc *mmc = find_mmc_device(dev_num);
669 
670 	if (!mmc)
671 		return -1;
672 
673 	return mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF,
674 			  (mmc->part_config & ~PART_ACCESS_MASK)
675 			  | (part_num & PART_ACCESS_MASK));
676 }
677 
678 int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)
679 {
680 	struct mmc_cmd cmd;
681 	struct mmc_data data;
682 
683 	/* Switch the frequency */
684 	cmd.cmdidx = SD_CMD_SWITCH_FUNC;
685 	cmd.resp_type = MMC_RSP_R1;
686 	cmd.cmdarg = (mode << 31) | 0xffffff;
687 	cmd.cmdarg &= ~(0xf << (group * 4));
688 	cmd.cmdarg |= value << (group * 4);
689 	cmd.flags = 0;
690 
691 	data.dest = (char *)resp;
692 	data.blocksize = 64;
693 	data.blocks = 1;
694 	data.flags = MMC_DATA_READ;
695 
696 	return mmc_send_cmd(mmc, &cmd, &data);
697 }
698 
699 
700 int sd_change_freq(struct mmc *mmc)
701 {
702 	int err;
703 	struct mmc_cmd cmd;
704 	uint scr[2];
705 	uint switch_status[16];
706 	struct mmc_data data;
707 	int timeout;
708 
709 	mmc->card_caps = 0;
710 
711 	if (mmc_host_is_spi(mmc))
712 		return 0;
713 
714 	/* Read the SCR to find out if this card supports higher speeds */
715 	cmd.cmdidx = MMC_CMD_APP_CMD;
716 	cmd.resp_type = MMC_RSP_R1;
717 	cmd.cmdarg = mmc->rca << 16;
718 	cmd.flags = 0;
719 
720 	err = mmc_send_cmd(mmc, &cmd, NULL);
721 
722 	if (err)
723 		return err;
724 
725 	cmd.cmdidx = SD_CMD_APP_SEND_SCR;
726 	cmd.resp_type = MMC_RSP_R1;
727 	cmd.cmdarg = 0;
728 	cmd.flags = 0;
729 
730 	timeout = 3;
731 
732 retry_scr:
733 	data.dest = (char *)&scr;
734 	data.blocksize = 8;
735 	data.blocks = 1;
736 	data.flags = MMC_DATA_READ;
737 
738 	err = mmc_send_cmd(mmc, &cmd, &data);
739 
740 	if (err) {
741 		if (timeout--)
742 			goto retry_scr;
743 
744 		return err;
745 	}
746 
747 	mmc->scr[0] = __be32_to_cpu(scr[0]);
748 	mmc->scr[1] = __be32_to_cpu(scr[1]);
749 
750 	switch ((mmc->scr[0] >> 24) & 0xf) {
751 		case 0:
752 			mmc->version = SD_VERSION_1_0;
753 			break;
754 		case 1:
755 			mmc->version = SD_VERSION_1_10;
756 			break;
757 		case 2:
758 			mmc->version = SD_VERSION_2;
759 			break;
760 		default:
761 			mmc->version = SD_VERSION_1_0;
762 			break;
763 	}
764 
765 	if (mmc->scr[0] & SD_DATA_4BIT)
766 		mmc->card_caps |= MMC_MODE_4BIT;
767 
768 	/* Version 1.0 doesn't support switching */
769 	if (mmc->version == SD_VERSION_1_0)
770 		return 0;
771 
772 	timeout = 4;
773 	while (timeout--) {
774 		err = sd_switch(mmc, SD_SWITCH_CHECK, 0, 1,
775 				(u8 *)&switch_status);
776 
777 		if (err)
778 			return err;
779 
780 		/* The high-speed function is busy.  Try again */
781 		if (!(__be32_to_cpu(switch_status[7]) & SD_HIGHSPEED_BUSY))
782 			break;
783 	}
784 
785 	/* If high-speed isn't supported, we return */
786 	if (!(__be32_to_cpu(switch_status[3]) & SD_HIGHSPEED_SUPPORTED))
787 		return 0;
788 
789 	err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, 1, (u8 *)&switch_status);
790 
791 	if (err)
792 		return err;
793 
794 	if ((__be32_to_cpu(switch_status[4]) & 0x0f000000) == 0x01000000)
795 		mmc->card_caps |= MMC_MODE_HS;
796 
797 	return 0;
798 }
799 
800 /* frequency bases */
801 /* divided by 10 to be nice to platforms without floating point */
802 static const int fbase[] = {
803 	10000,
804 	100000,
805 	1000000,
806 	10000000,
807 };
808 
809 /* Multiplier values for TRAN_SPEED.  Multiplied by 10 to be nice
810  * to platforms without floating point.
811  */
812 static const int multipliers[] = {
813 	0,	/* reserved */
814 	10,
815 	12,
816 	13,
817 	15,
818 	20,
819 	25,
820 	30,
821 	35,
822 	40,
823 	45,
824 	50,
825 	55,
826 	60,
827 	70,
828 	80,
829 };
830 
831 void mmc_set_ios(struct mmc *mmc)
832 {
833 	mmc->set_ios(mmc);
834 }
835 
836 void mmc_set_clock(struct mmc *mmc, uint clock)
837 {
838 	if (clock > mmc->f_max)
839 		clock = mmc->f_max;
840 
841 	if (clock < mmc->f_min)
842 		clock = mmc->f_min;
843 
844 	mmc->clock = clock;
845 
846 	mmc_set_ios(mmc);
847 }
848 
849 void mmc_set_bus_width(struct mmc *mmc, uint width)
850 {
851 	mmc->bus_width = width;
852 
853 	mmc_set_ios(mmc);
854 }
855 
856 int mmc_startup(struct mmc *mmc)
857 {
858 	int err;
859 	uint mult, freq;
860 	u64 cmult, csize, capacity;
861 	struct mmc_cmd cmd;
862 	char ext_csd[512];
863 	int timeout = 1000;
864 
865 #ifdef CONFIG_MMC_SPI_CRC_ON
866 	if (mmc_host_is_spi(mmc)) { /* enable CRC check for spi */
867 		cmd.cmdidx = MMC_CMD_SPI_CRC_ON_OFF;
868 		cmd.resp_type = MMC_RSP_R1;
869 		cmd.cmdarg = 1;
870 		cmd.flags = 0;
871 		err = mmc_send_cmd(mmc, &cmd, NULL);
872 
873 		if (err)
874 			return err;
875 	}
876 #endif
877 
878 	/* Put the Card in Identify Mode */
879 	cmd.cmdidx = mmc_host_is_spi(mmc) ? MMC_CMD_SEND_CID :
880 		MMC_CMD_ALL_SEND_CID; /* cmd not supported in spi */
881 	cmd.resp_type = MMC_RSP_R2;
882 	cmd.cmdarg = 0;
883 	cmd.flags = 0;
884 
885 	err = mmc_send_cmd(mmc, &cmd, NULL);
886 
887 	if (err)
888 		return err;
889 
890 	memcpy(mmc->cid, cmd.response, 16);
891 
892 	/*
893 	 * For MMC cards, set the Relative Address.
894 	 * For SD cards, get the Relatvie Address.
895 	 * This also puts the cards into Standby State
896 	 */
897 	if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
898 		cmd.cmdidx = SD_CMD_SEND_RELATIVE_ADDR;
899 		cmd.cmdarg = mmc->rca << 16;
900 		cmd.resp_type = MMC_RSP_R6;
901 		cmd.flags = 0;
902 
903 		err = mmc_send_cmd(mmc, &cmd, NULL);
904 
905 		if (err)
906 			return err;
907 
908 		if (IS_SD(mmc))
909 			mmc->rca = (cmd.response[0] >> 16) & 0xffff;
910 	}
911 
912 	/* Get the Card-Specific Data */
913 	cmd.cmdidx = MMC_CMD_SEND_CSD;
914 	cmd.resp_type = MMC_RSP_R2;
915 	cmd.cmdarg = mmc->rca << 16;
916 	cmd.flags = 0;
917 
918 	err = mmc_send_cmd(mmc, &cmd, NULL);
919 
920 	/* Waiting for the ready status */
921 	mmc_send_status(mmc, timeout);
922 
923 	if (err)
924 		return err;
925 
926 	mmc->csd[0] = cmd.response[0];
927 	mmc->csd[1] = cmd.response[1];
928 	mmc->csd[2] = cmd.response[2];
929 	mmc->csd[3] = cmd.response[3];
930 
931 	if (mmc->version == MMC_VERSION_UNKNOWN) {
932 		int version = (cmd.response[0] >> 26) & 0xf;
933 
934 		switch (version) {
935 			case 0:
936 				mmc->version = MMC_VERSION_1_2;
937 				break;
938 			case 1:
939 				mmc->version = MMC_VERSION_1_4;
940 				break;
941 			case 2:
942 				mmc->version = MMC_VERSION_2_2;
943 				break;
944 			case 3:
945 				mmc->version = MMC_VERSION_3;
946 				break;
947 			case 4:
948 				mmc->version = MMC_VERSION_4;
949 				break;
950 			default:
951 				mmc->version = MMC_VERSION_1_2;
952 				break;
953 		}
954 	}
955 
956 	/* divide frequency by 10, since the mults are 10x bigger */
957 	freq = fbase[(cmd.response[0] & 0x7)];
958 	mult = multipliers[((cmd.response[0] >> 3) & 0xf)];
959 
960 	mmc->tran_speed = freq * mult;
961 
962 	mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf);
963 
964 	if (IS_SD(mmc))
965 		mmc->write_bl_len = mmc->read_bl_len;
966 	else
967 		mmc->write_bl_len = 1 << ((cmd.response[3] >> 22) & 0xf);
968 
969 	if (mmc->high_capacity) {
970 		csize = (mmc->csd[1] & 0x3f) << 16
971 			| (mmc->csd[2] & 0xffff0000) >> 16;
972 		cmult = 8;
973 	} else {
974 		csize = (mmc->csd[1] & 0x3ff) << 2
975 			| (mmc->csd[2] & 0xc0000000) >> 30;
976 		cmult = (mmc->csd[2] & 0x00038000) >> 15;
977 	}
978 
979 	mmc->capacity = (csize + 1) << (cmult + 2);
980 	mmc->capacity *= mmc->read_bl_len;
981 
982 	if (mmc->read_bl_len > 512)
983 		mmc->read_bl_len = 512;
984 
985 	if (mmc->write_bl_len > 512)
986 		mmc->write_bl_len = 512;
987 
988 	/* Select the card, and put it into Transfer Mode */
989 	if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
990 		cmd.cmdidx = MMC_CMD_SELECT_CARD;
991 		cmd.resp_type = MMC_RSP_R1b;
992 		cmd.cmdarg = mmc->rca << 16;
993 		cmd.flags = 0;
994 		err = mmc_send_cmd(mmc, &cmd, NULL);
995 
996 		if (err)
997 			return err;
998 	}
999 
1000 	/*
1001 	 * For SD, its erase group is always one sector
1002 	 */
1003 	mmc->erase_grp_size = 1;
1004 	mmc->part_config = MMCPART_NOAVAILABLE;
1005 	if (!IS_SD(mmc) && (mmc->version >= MMC_VERSION_4)) {
1006 		/* check  ext_csd version and capacity */
1007 		err = mmc_send_ext_csd(mmc, ext_csd);
1008 		if (!err & (ext_csd[192] >= 2)) {
1009 			/*
1010 			 * According to the JEDEC Standard, the value of
1011 			 * ext_csd's capacity is valid if the value is more
1012 			 * than 2GB
1013 			 */
1014 			capacity = ext_csd[212] << 0 | ext_csd[213] << 8 |
1015 				   ext_csd[214] << 16 | ext_csd[215] << 24;
1016 			capacity *= 512;
1017 			if ((capacity >> 20) > 2 * 1024)
1018 				mmc->capacity = capacity;
1019 		}
1020 
1021 		/*
1022 		 * Check whether GROUP_DEF is set, if yes, read out
1023 		 * group size from ext_csd directly, or calculate
1024 		 * the group size from the csd value.
1025 		 */
1026 		if (ext_csd[175])
1027 			mmc->erase_grp_size = ext_csd[224] * 512 * 1024;
1028 		else {
1029 			int erase_gsz, erase_gmul;
1030 			erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10;
1031 			erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5;
1032 			mmc->erase_grp_size = (erase_gsz + 1)
1033 				* (erase_gmul + 1);
1034 		}
1035 
1036 		/* store the partition info of emmc */
1037 		if (ext_csd[160] & PART_SUPPORT)
1038 			mmc->part_config = ext_csd[179];
1039 	}
1040 
1041 	if (IS_SD(mmc))
1042 		err = sd_change_freq(mmc);
1043 	else
1044 		err = mmc_change_freq(mmc);
1045 
1046 	if (err)
1047 		return err;
1048 
1049 	/* Restrict card's capabilities by what the host can do */
1050 	mmc->card_caps &= mmc->host_caps;
1051 
1052 	if (IS_SD(mmc)) {
1053 		if (mmc->card_caps & MMC_MODE_4BIT) {
1054 			cmd.cmdidx = MMC_CMD_APP_CMD;
1055 			cmd.resp_type = MMC_RSP_R1;
1056 			cmd.cmdarg = mmc->rca << 16;
1057 			cmd.flags = 0;
1058 
1059 			err = mmc_send_cmd(mmc, &cmd, NULL);
1060 			if (err)
1061 				return err;
1062 
1063 			cmd.cmdidx = SD_CMD_APP_SET_BUS_WIDTH;
1064 			cmd.resp_type = MMC_RSP_R1;
1065 			cmd.cmdarg = 2;
1066 			cmd.flags = 0;
1067 			err = mmc_send_cmd(mmc, &cmd, NULL);
1068 			if (err)
1069 				return err;
1070 
1071 			mmc_set_bus_width(mmc, 4);
1072 		}
1073 
1074 		if (mmc->card_caps & MMC_MODE_HS)
1075 			mmc_set_clock(mmc, 50000000);
1076 		else
1077 			mmc_set_clock(mmc, 25000000);
1078 	} else {
1079 		if (mmc->card_caps & MMC_MODE_4BIT) {
1080 			/* Set the card to use 4 bit*/
1081 			err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1082 					EXT_CSD_BUS_WIDTH,
1083 					EXT_CSD_BUS_WIDTH_4);
1084 
1085 			if (err)
1086 				return err;
1087 
1088 			mmc_set_bus_width(mmc, 4);
1089 		} else if (mmc->card_caps & MMC_MODE_8BIT) {
1090 			/* Set the card to use 8 bit*/
1091 			err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1092 					EXT_CSD_BUS_WIDTH,
1093 					EXT_CSD_BUS_WIDTH_8);
1094 
1095 			if (err)
1096 				return err;
1097 
1098 			mmc_set_bus_width(mmc, 8);
1099 		}
1100 
1101 		if (mmc->card_caps & MMC_MODE_HS) {
1102 			if (mmc->card_caps & MMC_MODE_HS_52MHz)
1103 				mmc_set_clock(mmc, 52000000);
1104 			else
1105 				mmc_set_clock(mmc, 26000000);
1106 		} else
1107 			mmc_set_clock(mmc, 20000000);
1108 	}
1109 
1110 	/* fill in device description */
1111 	mmc->block_dev.lun = 0;
1112 	mmc->block_dev.type = 0;
1113 	mmc->block_dev.blksz = mmc->read_bl_len;
1114 	mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);
1115 	sprintf(mmc->block_dev.vendor, "Man %06x Snr %08x", mmc->cid[0] >> 8,
1116 			(mmc->cid[2] << 8) | (mmc->cid[3] >> 24));
1117 	sprintf(mmc->block_dev.product, "%c%c%c%c%c", mmc->cid[0] & 0xff,
1118 			(mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
1119 			(mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff);
1120 	sprintf(mmc->block_dev.revision, "%d.%d", mmc->cid[2] >> 28,
1121 			(mmc->cid[2] >> 24) & 0xf);
1122 	init_part(&mmc->block_dev);
1123 
1124 	return 0;
1125 }
1126 
1127 int mmc_send_if_cond(struct mmc *mmc)
1128 {
1129 	struct mmc_cmd cmd;
1130 	int err;
1131 
1132 	cmd.cmdidx = SD_CMD_SEND_IF_COND;
1133 	/* We set the bit if the host supports voltages between 2.7 and 3.6 V */
1134 	cmd.cmdarg = ((mmc->voltages & 0xff8000) != 0) << 8 | 0xaa;
1135 	cmd.resp_type = MMC_RSP_R7;
1136 	cmd.flags = 0;
1137 
1138 	err = mmc_send_cmd(mmc, &cmd, NULL);
1139 
1140 	if (err)
1141 		return err;
1142 
1143 	if ((cmd.response[0] & 0xff) != 0xaa)
1144 		return UNUSABLE_ERR;
1145 	else
1146 		mmc->version = SD_VERSION_2;
1147 
1148 	return 0;
1149 }
1150 
1151 int mmc_register(struct mmc *mmc)
1152 {
1153 	/* Setup the universal parts of the block interface just once */
1154 	mmc->block_dev.if_type = IF_TYPE_MMC;
1155 	mmc->block_dev.dev = cur_dev_num++;
1156 	mmc->block_dev.removable = 1;
1157 	mmc->block_dev.block_read = mmc_bread;
1158 	mmc->block_dev.block_write = mmc_bwrite;
1159 	mmc->block_dev.block_erase = mmc_berase;
1160 	if (!mmc->b_max)
1161 		mmc->b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
1162 
1163 	INIT_LIST_HEAD (&mmc->link);
1164 
1165 	list_add_tail (&mmc->link, &mmc_devices);
1166 
1167 	return 0;
1168 }
1169 
1170 #ifdef CONFIG_PARTITIONS
1171 block_dev_desc_t *mmc_get_dev(int dev)
1172 {
1173 	struct mmc *mmc = find_mmc_device(dev);
1174 
1175 	return mmc ? &mmc->block_dev : NULL;
1176 }
1177 #endif
1178 
1179 int mmc_init(struct mmc *mmc)
1180 {
1181 	int err;
1182 
1183 	if (mmc->has_init)
1184 		return 0;
1185 
1186 	err = mmc->init(mmc);
1187 
1188 	if (err)
1189 		return err;
1190 
1191 	mmc_set_bus_width(mmc, 1);
1192 	mmc_set_clock(mmc, 1);
1193 
1194 	/* Reset the Card */
1195 	err = mmc_go_idle(mmc);
1196 
1197 	if (err)
1198 		return err;
1199 
1200 	/* The internal partition reset to user partition(0) at every CMD0*/
1201 	mmc->part_num = 0;
1202 
1203 	/* Test for SD version 2 */
1204 	err = mmc_send_if_cond(mmc);
1205 
1206 	/* Now try to get the SD card's operating condition */
1207 	err = sd_send_op_cond(mmc);
1208 
1209 	/* If the command timed out, we check for an MMC card */
1210 	if (err == TIMEOUT) {
1211 		err = mmc_send_op_cond(mmc);
1212 
1213 		if (err) {
1214 			printf("Card did not respond to voltage select!\n");
1215 			return UNUSABLE_ERR;
1216 		}
1217 	}
1218 
1219 	err = mmc_startup(mmc);
1220 	if (err)
1221 		mmc->has_init = 0;
1222 	else
1223 		mmc->has_init = 1;
1224 	return err;
1225 }
1226 
1227 /*
1228  * CPU and board-specific MMC initializations.  Aliased function
1229  * signals caller to move on
1230  */
1231 static int __def_mmc_init(bd_t *bis)
1232 {
1233 	return -1;
1234 }
1235 
1236 int cpu_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
1237 int board_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
1238 
1239 void print_mmc_devices(char separator)
1240 {
1241 	struct mmc *m;
1242 	struct list_head *entry;
1243 
1244 	list_for_each(entry, &mmc_devices) {
1245 		m = list_entry(entry, struct mmc, link);
1246 
1247 		printf("%s: %d", m->name, m->block_dev.dev);
1248 
1249 		if (entry->next != &mmc_devices)
1250 			printf("%c ", separator);
1251 	}
1252 
1253 	printf("\n");
1254 }
1255 
1256 int get_mmc_num(void)
1257 {
1258 	return cur_dev_num;
1259 }
1260 
1261 int mmc_initialize(bd_t *bis)
1262 {
1263 	INIT_LIST_HEAD (&mmc_devices);
1264 	cur_dev_num = 0;
1265 
1266 	if (board_mmc_init(bis) < 0)
1267 		cpu_mmc_init(bis);
1268 
1269 	print_mmc_devices(',');
1270 
1271 	return 0;
1272 }
1273