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