xref: /openbmc/u-boot/drivers/mmc/mmc.c (revision efc05ae1)
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 <mmc.h>
34 #include <div64.h>
35 
36 static struct list_head mmc_devices;
37 static int cur_dev_num = -1;
38 
39 int __board_mmc_getcd(u8 *cd, struct mmc *mmc) {
40 	return -1;
41 }
42 
43 int board_mmc_getcd(u8 *cd, struct mmc *mmc)__attribute__((weak,
44 	alias("__board_mmc_getcd")));
45 
46 int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
47 {
48 	return mmc->send_cmd(mmc, cmd, data);
49 }
50 
51 int mmc_set_blocklen(struct mmc *mmc, int len)
52 {
53 	struct mmc_cmd cmd;
54 
55 	cmd.cmdidx = MMC_CMD_SET_BLOCKLEN;
56 	cmd.resp_type = MMC_RSP_R1;
57 	cmd.cmdarg = len;
58 	cmd.flags = 0;
59 
60 	return mmc_send_cmd(mmc, &cmd, NULL);
61 }
62 
63 struct mmc *find_mmc_device(int dev_num)
64 {
65 	struct mmc *m;
66 	struct list_head *entry;
67 
68 	list_for_each(entry, &mmc_devices) {
69 		m = list_entry(entry, struct mmc, link);
70 
71 		if (m->block_dev.dev == dev_num)
72 			return m;
73 	}
74 
75 	printf("MMC Device %d not found\n", dev_num);
76 
77 	return NULL;
78 }
79 
80 static ulong
81 mmc_write_blocks(struct mmc *mmc, ulong start, lbaint_t blkcnt, const void*src)
82 {
83 	struct mmc_cmd cmd;
84 	struct mmc_data data;
85 
86 	if ((start + blkcnt) > mmc->block_dev.lba) {
87 		printf("MMC: block number 0x%lx exceeds max(0x%lx)\n",
88 			start + blkcnt, mmc->block_dev.lba);
89 		return 0;
90 	}
91 
92 	if (blkcnt > 1)
93 		cmd.cmdidx = MMC_CMD_WRITE_MULTIPLE_BLOCK;
94 	else
95 		cmd.cmdidx = MMC_CMD_WRITE_SINGLE_BLOCK;
96 
97 	if (mmc->high_capacity)
98 		cmd.cmdarg = start;
99 	else
100 		cmd.cmdarg = start * mmc->write_bl_len;
101 
102 	cmd.resp_type = MMC_RSP_R1;
103 	cmd.flags = 0;
104 
105 	data.src = src;
106 	data.blocks = blkcnt;
107 	data.blocksize = mmc->write_bl_len;
108 	data.flags = MMC_DATA_WRITE;
109 
110 	if (mmc_send_cmd(mmc, &cmd, &data)) {
111 		printf("mmc write failed\n");
112 		return 0;
113 	}
114 
115 	if (blkcnt > 1) {
116 		cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
117 		cmd.cmdarg = 0;
118 		cmd.resp_type = MMC_RSP_R1b;
119 		cmd.flags = 0;
120 		if (mmc_send_cmd(mmc, &cmd, NULL)) {
121 			printf("mmc fail to send stop cmd\n");
122 			return 0;
123 		}
124 	}
125 
126 	return blkcnt;
127 }
128 
129 static ulong
130 mmc_bwrite(int dev_num, ulong start, lbaint_t blkcnt, const void*src)
131 {
132 	lbaint_t cur, blocks_todo = blkcnt;
133 
134 	struct mmc *mmc = find_mmc_device(dev_num);
135 	if (!mmc)
136 		return 0;
137 
138 	if (mmc_set_blocklen(mmc, mmc->write_bl_len))
139 		return 0;
140 
141 	do {
142 		/*
143 		 * The 65535 constraint comes from some hardware has
144 		 * only 16 bit width block number counter
145 		 */
146 		cur = (blocks_todo > 65535) ? 65535 : blocks_todo;
147 		if(mmc_write_blocks(mmc, start, cur, src) != cur)
148 			return 0;
149 		blocks_todo -= cur;
150 		start += cur;
151 		src += cur * mmc->write_bl_len;
152 	} while (blocks_todo > 0);
153 
154 	return blkcnt;
155 }
156 
157 int mmc_read_blocks(struct mmc *mmc, void *dst, ulong start, lbaint_t blkcnt)
158 {
159 	struct mmc_cmd cmd;
160 	struct mmc_data data;
161 
162 	if (blkcnt > 1)
163 		cmd.cmdidx = MMC_CMD_READ_MULTIPLE_BLOCK;
164 	else
165 		cmd.cmdidx = MMC_CMD_READ_SINGLE_BLOCK;
166 
167 	if (mmc->high_capacity)
168 		cmd.cmdarg = start;
169 	else
170 		cmd.cmdarg = start * mmc->read_bl_len;
171 
172 	cmd.resp_type = MMC_RSP_R1;
173 	cmd.flags = 0;
174 
175 	data.dest = dst;
176 	data.blocks = blkcnt;
177 	data.blocksize = mmc->read_bl_len;
178 	data.flags = MMC_DATA_READ;
179 
180 	if (mmc_send_cmd(mmc, &cmd, &data))
181 		return 0;
182 
183 	if (blkcnt > 1) {
184 		cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
185 		cmd.cmdarg = 0;
186 		cmd.resp_type = MMC_RSP_R1b;
187 		cmd.flags = 0;
188 		if (mmc_send_cmd(mmc, &cmd, NULL)) {
189 			printf("mmc fail to send stop cmd\n");
190 			return 0;
191 		}
192 	}
193 
194 	return blkcnt;
195 }
196 
197 static ulong mmc_bread(int dev_num, ulong start, lbaint_t blkcnt, void *dst)
198 {
199 	lbaint_t cur, blocks_todo = blkcnt;
200 
201 	if (blkcnt == 0)
202 		return 0;
203 
204 	struct mmc *mmc = find_mmc_device(dev_num);
205 	if (!mmc)
206 		return 0;
207 
208 	if ((start + blkcnt) > mmc->block_dev.lba) {
209 		printf("MMC: block number 0x%lx exceeds max(0x%lx)\n",
210 			start + blkcnt, mmc->block_dev.lba);
211 		return 0;
212 	}
213 
214 	if (mmc_set_blocklen(mmc, mmc->read_bl_len))
215 		return 0;
216 
217 	do {
218 		/*
219 		 * The 65535 constraint comes from some hardware has
220 		 * only 16 bit width block number counter
221 		 */
222 		cur = (blocks_todo > 65535) ? 65535 : blocks_todo;
223 		if(mmc_read_blocks(mmc, dst, start, cur) != cur)
224 			return 0;
225 		blocks_todo -= cur;
226 		start += cur;
227 		dst += cur * mmc->read_bl_len;
228 	} while (blocks_todo > 0);
229 
230 	return blkcnt;
231 }
232 
233 int mmc_go_idle(struct mmc* mmc)
234 {
235 	struct mmc_cmd cmd;
236 	int err;
237 
238 	udelay(1000);
239 
240 	cmd.cmdidx = MMC_CMD_GO_IDLE_STATE;
241 	cmd.cmdarg = 0;
242 	cmd.resp_type = MMC_RSP_NONE;
243 	cmd.flags = 0;
244 
245 	err = mmc_send_cmd(mmc, &cmd, NULL);
246 
247 	if (err)
248 		return err;
249 
250 	udelay(2000);
251 
252 	return 0;
253 }
254 
255 int
256 sd_send_op_cond(struct mmc *mmc)
257 {
258 	int timeout = 1000;
259 	int err;
260 	struct mmc_cmd cmd;
261 
262 	do {
263 		cmd.cmdidx = MMC_CMD_APP_CMD;
264 		cmd.resp_type = MMC_RSP_R1;
265 		cmd.cmdarg = 0;
266 		cmd.flags = 0;
267 
268 		err = mmc_send_cmd(mmc, &cmd, NULL);
269 
270 		if (err)
271 			return err;
272 
273 		cmd.cmdidx = SD_CMD_APP_SEND_OP_COND;
274 		cmd.resp_type = MMC_RSP_R3;
275 
276 		/*
277 		 * Most cards do not answer if some reserved bits
278 		 * in the ocr are set. However, Some controller
279 		 * can set bit 7 (reserved for low voltages), but
280 		 * how to manage low voltages SD card is not yet
281 		 * specified.
282 		 */
283 		cmd.cmdarg = mmc->voltages & 0xff8000;
284 
285 		if (mmc->version == SD_VERSION_2)
286 			cmd.cmdarg |= OCR_HCS;
287 
288 		err = mmc_send_cmd(mmc, &cmd, NULL);
289 
290 		if (err)
291 			return err;
292 
293 		udelay(1000);
294 	} while ((!(cmd.response[0] & OCR_BUSY)) && timeout--);
295 
296 	if (timeout <= 0)
297 		return UNUSABLE_ERR;
298 
299 	if (mmc->version != SD_VERSION_2)
300 		mmc->version = SD_VERSION_1_0;
301 
302 	mmc->ocr = cmd.response[0];
303 
304 	mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
305 	mmc->rca = 0;
306 
307 	return 0;
308 }
309 
310 int mmc_send_op_cond(struct mmc *mmc)
311 {
312 	int timeout = 1000;
313 	struct mmc_cmd cmd;
314 	int err;
315 
316 	/* Some cards seem to need this */
317 	mmc_go_idle(mmc);
318 
319 	do {
320 		cmd.cmdidx = MMC_CMD_SEND_OP_COND;
321 		cmd.resp_type = MMC_RSP_R3;
322 		cmd.cmdarg = OCR_HCS | mmc->voltages;
323 		cmd.flags = 0;
324 
325 		err = mmc_send_cmd(mmc, &cmd, NULL);
326 
327 		if (err)
328 			return err;
329 
330 		udelay(1000);
331 	} while (!(cmd.response[0] & OCR_BUSY) && timeout--);
332 
333 	if (timeout <= 0)
334 		return UNUSABLE_ERR;
335 
336 	mmc->version = MMC_VERSION_UNKNOWN;
337 	mmc->ocr = cmd.response[0];
338 
339 	mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
340 	mmc->rca = 0;
341 
342 	return 0;
343 }
344 
345 
346 int mmc_send_ext_csd(struct mmc *mmc, char *ext_csd)
347 {
348 	struct mmc_cmd cmd;
349 	struct mmc_data data;
350 	int err;
351 
352 	/* Get the Card Status Register */
353 	cmd.cmdidx = MMC_CMD_SEND_EXT_CSD;
354 	cmd.resp_type = MMC_RSP_R1;
355 	cmd.cmdarg = 0;
356 	cmd.flags = 0;
357 
358 	data.dest = ext_csd;
359 	data.blocks = 1;
360 	data.blocksize = 512;
361 	data.flags = MMC_DATA_READ;
362 
363 	err = mmc_send_cmd(mmc, &cmd, &data);
364 
365 	return err;
366 }
367 
368 
369 int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)
370 {
371 	struct mmc_cmd cmd;
372 
373 	cmd.cmdidx = MMC_CMD_SWITCH;
374 	cmd.resp_type = MMC_RSP_R1b;
375 	cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
376 		(index << 16) |
377 		(value << 8);
378 	cmd.flags = 0;
379 
380 	return mmc_send_cmd(mmc, &cmd, NULL);
381 }
382 
383 int mmc_change_freq(struct mmc *mmc)
384 {
385 	char ext_csd[512];
386 	char cardtype;
387 	int err;
388 
389 	mmc->card_caps = 0;
390 
391 	/* Only version 4 supports high-speed */
392 	if (mmc->version < MMC_VERSION_4)
393 		return 0;
394 
395 	mmc->card_caps |= MMC_MODE_4BIT;
396 
397 	err = mmc_send_ext_csd(mmc, ext_csd);
398 
399 	if (err)
400 		return err;
401 
402 	if (ext_csd[212] || ext_csd[213] || ext_csd[214] || ext_csd[215])
403 		mmc->high_capacity = 1;
404 
405 	cardtype = ext_csd[196] & 0xf;
406 
407 	err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING, 1);
408 
409 	if (err)
410 		return err;
411 
412 	/* Now check to see that it worked */
413 	err = mmc_send_ext_csd(mmc, ext_csd);
414 
415 	if (err)
416 		return err;
417 
418 	/* No high-speed support */
419 	if (!ext_csd[185])
420 		return 0;
421 
422 	/* High Speed is set, there are two types: 52MHz and 26MHz */
423 	if (cardtype & MMC_HS_52MHZ)
424 		mmc->card_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
425 	else
426 		mmc->card_caps |= MMC_MODE_HS;
427 
428 	return 0;
429 }
430 
431 int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)
432 {
433 	struct mmc_cmd cmd;
434 	struct mmc_data data;
435 
436 	/* Switch the frequency */
437 	cmd.cmdidx = SD_CMD_SWITCH_FUNC;
438 	cmd.resp_type = MMC_RSP_R1;
439 	cmd.cmdarg = (mode << 31) | 0xffffff;
440 	cmd.cmdarg &= ~(0xf << (group * 4));
441 	cmd.cmdarg |= value << (group * 4);
442 	cmd.flags = 0;
443 
444 	data.dest = (char *)resp;
445 	data.blocksize = 64;
446 	data.blocks = 1;
447 	data.flags = MMC_DATA_READ;
448 
449 	return mmc_send_cmd(mmc, &cmd, &data);
450 }
451 
452 
453 int sd_change_freq(struct mmc *mmc)
454 {
455 	int err;
456 	struct mmc_cmd cmd;
457 	uint scr[2];
458 	uint switch_status[16];
459 	struct mmc_data data;
460 	int timeout;
461 
462 	mmc->card_caps = 0;
463 
464 	/* Read the SCR to find out if this card supports higher speeds */
465 	cmd.cmdidx = MMC_CMD_APP_CMD;
466 	cmd.resp_type = MMC_RSP_R1;
467 	cmd.cmdarg = mmc->rca << 16;
468 	cmd.flags = 0;
469 
470 	err = mmc_send_cmd(mmc, &cmd, NULL);
471 
472 	if (err)
473 		return err;
474 
475 	cmd.cmdidx = SD_CMD_APP_SEND_SCR;
476 	cmd.resp_type = MMC_RSP_R1;
477 	cmd.cmdarg = 0;
478 	cmd.flags = 0;
479 
480 	timeout = 3;
481 
482 retry_scr:
483 	data.dest = (char *)&scr;
484 	data.blocksize = 8;
485 	data.blocks = 1;
486 	data.flags = MMC_DATA_READ;
487 
488 	err = mmc_send_cmd(mmc, &cmd, &data);
489 
490 	if (err) {
491 		if (timeout--)
492 			goto retry_scr;
493 
494 		return err;
495 	}
496 
497 	mmc->scr[0] = __be32_to_cpu(scr[0]);
498 	mmc->scr[1] = __be32_to_cpu(scr[1]);
499 
500 	switch ((mmc->scr[0] >> 24) & 0xf) {
501 		case 0:
502 			mmc->version = SD_VERSION_1_0;
503 			break;
504 		case 1:
505 			mmc->version = SD_VERSION_1_10;
506 			break;
507 		case 2:
508 			mmc->version = SD_VERSION_2;
509 			break;
510 		default:
511 			mmc->version = SD_VERSION_1_0;
512 			break;
513 	}
514 
515 	/* Version 1.0 doesn't support switching */
516 	if (mmc->version == SD_VERSION_1_0)
517 		return 0;
518 
519 	timeout = 4;
520 	while (timeout--) {
521 		err = sd_switch(mmc, SD_SWITCH_CHECK, 0, 1,
522 				(u8 *)&switch_status);
523 
524 		if (err)
525 			return err;
526 
527 		/* The high-speed function is busy.  Try again */
528 		if (!(__be32_to_cpu(switch_status[7]) & SD_HIGHSPEED_BUSY))
529 			break;
530 	}
531 
532 	if (mmc->scr[0] & SD_DATA_4BIT)
533 		mmc->card_caps |= MMC_MODE_4BIT;
534 
535 	/* If high-speed isn't supported, we return */
536 	if (!(__be32_to_cpu(switch_status[3]) & SD_HIGHSPEED_SUPPORTED))
537 		return 0;
538 
539 	err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, 1, (u8 *)&switch_status);
540 
541 	if (err)
542 		return err;
543 
544 	if ((__be32_to_cpu(switch_status[4]) & 0x0f000000) == 0x01000000)
545 		mmc->card_caps |= MMC_MODE_HS;
546 
547 	return 0;
548 }
549 
550 /* frequency bases */
551 /* divided by 10 to be nice to platforms without floating point */
552 int fbase[] = {
553 	10000,
554 	100000,
555 	1000000,
556 	10000000,
557 };
558 
559 /* Multiplier values for TRAN_SPEED.  Multiplied by 10 to be nice
560  * to platforms without floating point.
561  */
562 int multipliers[] = {
563 	0,	/* reserved */
564 	10,
565 	12,
566 	13,
567 	15,
568 	20,
569 	25,
570 	30,
571 	35,
572 	40,
573 	45,
574 	50,
575 	55,
576 	60,
577 	70,
578 	80,
579 };
580 
581 void mmc_set_ios(struct mmc *mmc)
582 {
583 	mmc->set_ios(mmc);
584 }
585 
586 void mmc_set_clock(struct mmc *mmc, uint clock)
587 {
588 	if (clock > mmc->f_max)
589 		clock = mmc->f_max;
590 
591 	if (clock < mmc->f_min)
592 		clock = mmc->f_min;
593 
594 	mmc->clock = clock;
595 
596 	mmc_set_ios(mmc);
597 }
598 
599 void mmc_set_bus_width(struct mmc *mmc, uint width)
600 {
601 	mmc->bus_width = width;
602 
603 	mmc_set_ios(mmc);
604 }
605 
606 int mmc_startup(struct mmc *mmc)
607 {
608 	int err;
609 	uint mult, freq;
610 	u64 cmult, csize;
611 	struct mmc_cmd cmd;
612 	char ext_csd[512];
613 
614 	/* Put the Card in Identify Mode */
615 	cmd.cmdidx = MMC_CMD_ALL_SEND_CID;
616 	cmd.resp_type = MMC_RSP_R2;
617 	cmd.cmdarg = 0;
618 	cmd.flags = 0;
619 
620 	err = mmc_send_cmd(mmc, &cmd, NULL);
621 
622 	if (err)
623 		return err;
624 
625 	memcpy(mmc->cid, cmd.response, 16);
626 
627 	/*
628 	 * For MMC cards, set the Relative Address.
629 	 * For SD cards, get the Relatvie Address.
630 	 * This also puts the cards into Standby State
631 	 */
632 	cmd.cmdidx = SD_CMD_SEND_RELATIVE_ADDR;
633 	cmd.cmdarg = mmc->rca << 16;
634 	cmd.resp_type = MMC_RSP_R6;
635 	cmd.flags = 0;
636 
637 	err = mmc_send_cmd(mmc, &cmd, NULL);
638 
639 	if (err)
640 		return err;
641 
642 	if (IS_SD(mmc))
643 		mmc->rca = (cmd.response[0] >> 16) & 0xffff;
644 
645 	/* Get the Card-Specific Data */
646 	cmd.cmdidx = MMC_CMD_SEND_CSD;
647 	cmd.resp_type = MMC_RSP_R2;
648 	cmd.cmdarg = mmc->rca << 16;
649 	cmd.flags = 0;
650 
651 	err = mmc_send_cmd(mmc, &cmd, NULL);
652 
653 	if (err)
654 		return err;
655 
656 	mmc->csd[0] = cmd.response[0];
657 	mmc->csd[1] = cmd.response[1];
658 	mmc->csd[2] = cmd.response[2];
659 	mmc->csd[3] = cmd.response[3];
660 
661 	if (mmc->version == MMC_VERSION_UNKNOWN) {
662 		int version = (cmd.response[0] >> 26) & 0xf;
663 
664 		switch (version) {
665 			case 0:
666 				mmc->version = MMC_VERSION_1_2;
667 				break;
668 			case 1:
669 				mmc->version = MMC_VERSION_1_4;
670 				break;
671 			case 2:
672 				mmc->version = MMC_VERSION_2_2;
673 				break;
674 			case 3:
675 				mmc->version = MMC_VERSION_3;
676 				break;
677 			case 4:
678 				mmc->version = MMC_VERSION_4;
679 				break;
680 			default:
681 				mmc->version = MMC_VERSION_1_2;
682 				break;
683 		}
684 	}
685 
686 	/* divide frequency by 10, since the mults are 10x bigger */
687 	freq = fbase[(cmd.response[0] & 0x7)];
688 	mult = multipliers[((cmd.response[0] >> 3) & 0xf)];
689 
690 	mmc->tran_speed = freq * mult;
691 
692 	mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf);
693 
694 	if (IS_SD(mmc))
695 		mmc->write_bl_len = mmc->read_bl_len;
696 	else
697 		mmc->write_bl_len = 1 << ((cmd.response[3] >> 22) & 0xf);
698 
699 	if (mmc->high_capacity) {
700 		csize = (mmc->csd[1] & 0x3f) << 16
701 			| (mmc->csd[2] & 0xffff0000) >> 16;
702 		cmult = 8;
703 	} else {
704 		csize = (mmc->csd[1] & 0x3ff) << 2
705 			| (mmc->csd[2] & 0xc0000000) >> 30;
706 		cmult = (mmc->csd[2] & 0x00038000) >> 15;
707 	}
708 
709 	mmc->capacity = (csize + 1) << (cmult + 2);
710 	mmc->capacity *= mmc->read_bl_len;
711 
712 	if (mmc->read_bl_len > 512)
713 		mmc->read_bl_len = 512;
714 
715 	if (mmc->write_bl_len > 512)
716 		mmc->write_bl_len = 512;
717 
718 	/* Select the card, and put it into Transfer Mode */
719 	cmd.cmdidx = MMC_CMD_SELECT_CARD;
720 	cmd.resp_type = MMC_RSP_R1b;
721 	cmd.cmdarg = mmc->rca << 16;
722 	cmd.flags = 0;
723 	err = mmc_send_cmd(mmc, &cmd, NULL);
724 
725 	if (err)
726 		return err;
727 
728 	if (!IS_SD(mmc) && (mmc->version >= MMC_VERSION_4)) {
729 		/* check  ext_csd version and capacity */
730 		err = mmc_send_ext_csd(mmc, ext_csd);
731 		if (!err & (ext_csd[192] >= 2)) {
732 			mmc->capacity = ext_csd[212] << 0 | ext_csd[213] << 8 |
733 					ext_csd[214] << 16 | ext_csd[215] << 24;
734 			mmc->capacity *= 512;
735 		}
736 	}
737 
738 	if (IS_SD(mmc))
739 		err = sd_change_freq(mmc);
740 	else
741 		err = mmc_change_freq(mmc);
742 
743 	if (err)
744 		return err;
745 
746 	/* Restrict card's capabilities by what the host can do */
747 	mmc->card_caps &= mmc->host_caps;
748 
749 	if (IS_SD(mmc)) {
750 		if (mmc->card_caps & MMC_MODE_4BIT) {
751 			cmd.cmdidx = MMC_CMD_APP_CMD;
752 			cmd.resp_type = MMC_RSP_R1;
753 			cmd.cmdarg = mmc->rca << 16;
754 			cmd.flags = 0;
755 
756 			err = mmc_send_cmd(mmc, &cmd, NULL);
757 			if (err)
758 				return err;
759 
760 			cmd.cmdidx = SD_CMD_APP_SET_BUS_WIDTH;
761 			cmd.resp_type = MMC_RSP_R1;
762 			cmd.cmdarg = 2;
763 			cmd.flags = 0;
764 			err = mmc_send_cmd(mmc, &cmd, NULL);
765 			if (err)
766 				return err;
767 
768 			mmc_set_bus_width(mmc, 4);
769 		}
770 
771 		if (mmc->card_caps & MMC_MODE_HS)
772 			mmc_set_clock(mmc, 50000000);
773 		else
774 			mmc_set_clock(mmc, 25000000);
775 	} else {
776 		if (mmc->card_caps & MMC_MODE_4BIT) {
777 			/* Set the card to use 4 bit*/
778 			err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
779 					EXT_CSD_BUS_WIDTH,
780 					EXT_CSD_BUS_WIDTH_4);
781 
782 			if (err)
783 				return err;
784 
785 			mmc_set_bus_width(mmc, 4);
786 		} else if (mmc->card_caps & MMC_MODE_8BIT) {
787 			/* Set the card to use 8 bit*/
788 			err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
789 					EXT_CSD_BUS_WIDTH,
790 					EXT_CSD_BUS_WIDTH_8);
791 
792 			if (err)
793 				return err;
794 
795 			mmc_set_bus_width(mmc, 8);
796 		}
797 
798 		if (mmc->card_caps & MMC_MODE_HS) {
799 			if (mmc->card_caps & MMC_MODE_HS_52MHz)
800 				mmc_set_clock(mmc, 52000000);
801 			else
802 				mmc_set_clock(mmc, 26000000);
803 		} else
804 			mmc_set_clock(mmc, 20000000);
805 	}
806 
807 	/* fill in device description */
808 	mmc->block_dev.lun = 0;
809 	mmc->block_dev.type = 0;
810 	mmc->block_dev.blksz = mmc->read_bl_len;
811 	mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);
812 	sprintf(mmc->block_dev.vendor, "Man %06x Snr %08x", mmc->cid[0] >> 8,
813 			(mmc->cid[2] << 8) | (mmc->cid[3] >> 24));
814 	sprintf(mmc->block_dev.product, "%c%c%c%c%c", mmc->cid[0] & 0xff,
815 			(mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
816 			(mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff);
817 	sprintf(mmc->block_dev.revision, "%d.%d", mmc->cid[2] >> 28,
818 			(mmc->cid[2] >> 24) & 0xf);
819 	init_part(&mmc->block_dev);
820 
821 	return 0;
822 }
823 
824 int mmc_send_if_cond(struct mmc *mmc)
825 {
826 	struct mmc_cmd cmd;
827 	int err;
828 
829 	cmd.cmdidx = SD_CMD_SEND_IF_COND;
830 	/* We set the bit if the host supports voltages between 2.7 and 3.6 V */
831 	cmd.cmdarg = ((mmc->voltages & 0xff8000) != 0) << 8 | 0xaa;
832 	cmd.resp_type = MMC_RSP_R7;
833 	cmd.flags = 0;
834 
835 	err = mmc_send_cmd(mmc, &cmd, NULL);
836 
837 	if (err)
838 		return err;
839 
840 	if ((cmd.response[0] & 0xff) != 0xaa)
841 		return UNUSABLE_ERR;
842 	else
843 		mmc->version = SD_VERSION_2;
844 
845 	return 0;
846 }
847 
848 int mmc_register(struct mmc *mmc)
849 {
850 	/* Setup the universal parts of the block interface just once */
851 	mmc->block_dev.if_type = IF_TYPE_MMC;
852 	mmc->block_dev.dev = cur_dev_num++;
853 	mmc->block_dev.removable = 1;
854 	mmc->block_dev.block_read = mmc_bread;
855 	mmc->block_dev.block_write = mmc_bwrite;
856 
857 	INIT_LIST_HEAD (&mmc->link);
858 
859 	list_add_tail (&mmc->link, &mmc_devices);
860 
861 	return 0;
862 }
863 
864 block_dev_desc_t *mmc_get_dev(int dev)
865 {
866 	struct mmc *mmc = find_mmc_device(dev);
867 
868 	return mmc ? &mmc->block_dev : NULL;
869 }
870 
871 int mmc_init(struct mmc *mmc)
872 {
873 	int err;
874 
875 	err = mmc->init(mmc);
876 
877 	if (err)
878 		return err;
879 
880 	mmc_set_bus_width(mmc, 1);
881 	mmc_set_clock(mmc, 1);
882 
883 	/* Reset the Card */
884 	err = mmc_go_idle(mmc);
885 
886 	if (err)
887 		return err;
888 
889 	/* Test for SD version 2 */
890 	err = mmc_send_if_cond(mmc);
891 
892 	/* Now try to get the SD card's operating condition */
893 	err = sd_send_op_cond(mmc);
894 
895 	/* If the command timed out, we check for an MMC card */
896 	if (err == TIMEOUT) {
897 		err = mmc_send_op_cond(mmc);
898 
899 		if (err) {
900 			printf("Card did not respond to voltage select!\n");
901 			return UNUSABLE_ERR;
902 		}
903 	}
904 
905 	return mmc_startup(mmc);
906 }
907 
908 /*
909  * CPU and board-specific MMC initializations.  Aliased function
910  * signals caller to move on
911  */
912 static int __def_mmc_init(bd_t *bis)
913 {
914 	return -1;
915 }
916 
917 int cpu_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
918 int board_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
919 
920 void print_mmc_devices(char separator)
921 {
922 	struct mmc *m;
923 	struct list_head *entry;
924 
925 	list_for_each(entry, &mmc_devices) {
926 		m = list_entry(entry, struct mmc, link);
927 
928 		printf("%s: %d", m->name, m->block_dev.dev);
929 
930 		if (entry->next != &mmc_devices)
931 			printf("%c ", separator);
932 	}
933 
934 	printf("\n");
935 }
936 
937 int mmc_initialize(bd_t *bis)
938 {
939 	INIT_LIST_HEAD (&mmc_devices);
940 	cur_dev_num = 0;
941 
942 	if (board_mmc_init(bis) < 0)
943 		cpu_mmc_init(bis);
944 
945 	print_mmc_devices(',');
946 
947 	return 0;
948 }
949