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