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