xref: /openbmc/u-boot/drivers/mmc/mmc.c (revision bfacf466)
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(struct mmc *mmc) {
44 	return -1;
45 }
46 
47 int board_mmc_getcd(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 	ALLOC_CACHE_ALIGN_BUFFER(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 	err = mmc_send_ext_csd(mmc, ext_csd);
635 
636 	if (err)
637 		return err;
638 
639 	cardtype = ext_csd[EXT_CSD_CARD_TYPE] & 0xf;
640 
641 	err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING, 1);
642 
643 	if (err)
644 		return err;
645 
646 	/* Now check to see that it worked */
647 	err = mmc_send_ext_csd(mmc, ext_csd);
648 
649 	if (err)
650 		return err;
651 
652 	/* No high-speed support */
653 	if (!ext_csd[EXT_CSD_HS_TIMING])
654 		return 0;
655 
656 	/* High Speed is set, there are two types: 52MHz and 26MHz */
657 	if (cardtype & MMC_HS_52MHZ)
658 		mmc->card_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
659 	else
660 		mmc->card_caps |= MMC_MODE_HS;
661 
662 	return 0;
663 }
664 
665 int mmc_switch_part(int dev_num, unsigned int part_num)
666 {
667 	struct mmc *mmc = find_mmc_device(dev_num);
668 
669 	if (!mmc)
670 		return -1;
671 
672 	return mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF,
673 			  (mmc->part_config & ~PART_ACCESS_MASK)
674 			  | (part_num & PART_ACCESS_MASK));
675 }
676 
677 int mmc_getcd(struct mmc *mmc)
678 {
679 	int cd;
680 
681 	cd = board_mmc_getcd(mmc);
682 
683 	if ((cd < 0) && mmc->getcd)
684 		cd = mmc->getcd(mmc);
685 
686 	return cd;
687 }
688 
689 int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)
690 {
691 	struct mmc_cmd cmd;
692 	struct mmc_data data;
693 
694 	/* Switch the frequency */
695 	cmd.cmdidx = SD_CMD_SWITCH_FUNC;
696 	cmd.resp_type = MMC_RSP_R1;
697 	cmd.cmdarg = (mode << 31) | 0xffffff;
698 	cmd.cmdarg &= ~(0xf << (group * 4));
699 	cmd.cmdarg |= value << (group * 4);
700 	cmd.flags = 0;
701 
702 	data.dest = (char *)resp;
703 	data.blocksize = 64;
704 	data.blocks = 1;
705 	data.flags = MMC_DATA_READ;
706 
707 	return mmc_send_cmd(mmc, &cmd, &data);
708 }
709 
710 
711 int sd_change_freq(struct mmc *mmc)
712 {
713 	int err;
714 	struct mmc_cmd cmd;
715 	ALLOC_CACHE_ALIGN_BUFFER(uint, scr, 2);
716 	ALLOC_CACHE_ALIGN_BUFFER(uint, switch_status, 16);
717 	struct mmc_data data;
718 	int timeout;
719 
720 	mmc->card_caps = 0;
721 
722 	if (mmc_host_is_spi(mmc))
723 		return 0;
724 
725 	/* Read the SCR to find out if this card supports higher speeds */
726 	cmd.cmdidx = MMC_CMD_APP_CMD;
727 	cmd.resp_type = MMC_RSP_R1;
728 	cmd.cmdarg = mmc->rca << 16;
729 	cmd.flags = 0;
730 
731 	err = mmc_send_cmd(mmc, &cmd, NULL);
732 
733 	if (err)
734 		return err;
735 
736 	cmd.cmdidx = SD_CMD_APP_SEND_SCR;
737 	cmd.resp_type = MMC_RSP_R1;
738 	cmd.cmdarg = 0;
739 	cmd.flags = 0;
740 
741 	timeout = 3;
742 
743 retry_scr:
744 	data.dest = (char *)scr;
745 	data.blocksize = 8;
746 	data.blocks = 1;
747 	data.flags = MMC_DATA_READ;
748 
749 	err = mmc_send_cmd(mmc, &cmd, &data);
750 
751 	if (err) {
752 		if (timeout--)
753 			goto retry_scr;
754 
755 		return err;
756 	}
757 
758 	mmc->scr[0] = __be32_to_cpu(scr[0]);
759 	mmc->scr[1] = __be32_to_cpu(scr[1]);
760 
761 	switch ((mmc->scr[0] >> 24) & 0xf) {
762 		case 0:
763 			mmc->version = SD_VERSION_1_0;
764 			break;
765 		case 1:
766 			mmc->version = SD_VERSION_1_10;
767 			break;
768 		case 2:
769 			mmc->version = SD_VERSION_2;
770 			break;
771 		default:
772 			mmc->version = SD_VERSION_1_0;
773 			break;
774 	}
775 
776 	if (mmc->scr[0] & SD_DATA_4BIT)
777 		mmc->card_caps |= MMC_MODE_4BIT;
778 
779 	/* Version 1.0 doesn't support switching */
780 	if (mmc->version == SD_VERSION_1_0)
781 		return 0;
782 
783 	timeout = 4;
784 	while (timeout--) {
785 		err = sd_switch(mmc, SD_SWITCH_CHECK, 0, 1,
786 				(u8 *)switch_status);
787 
788 		if (err)
789 			return err;
790 
791 		/* The high-speed function is busy.  Try again */
792 		if (!(__be32_to_cpu(switch_status[7]) & SD_HIGHSPEED_BUSY))
793 			break;
794 	}
795 
796 	/* If high-speed isn't supported, we return */
797 	if (!(__be32_to_cpu(switch_status[3]) & SD_HIGHSPEED_SUPPORTED))
798 		return 0;
799 
800 	/*
801 	 * If the host doesn't support SD_HIGHSPEED, do not switch card to
802 	 * HIGHSPEED mode even if the card support SD_HIGHSPPED.
803 	 * This can avoid furthur problem when the card runs in different
804 	 * mode between the host.
805 	 */
806 	if (!((mmc->host_caps & MMC_MODE_HS_52MHz) &&
807 		(mmc->host_caps & MMC_MODE_HS)))
808 		return 0;
809 
810 	err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, 1, (u8 *)switch_status);
811 
812 	if (err)
813 		return err;
814 
815 	if ((__be32_to_cpu(switch_status[4]) & 0x0f000000) == 0x01000000)
816 		mmc->card_caps |= MMC_MODE_HS;
817 
818 	return 0;
819 }
820 
821 /* frequency bases */
822 /* divided by 10 to be nice to platforms without floating point */
823 static const int fbase[] = {
824 	10000,
825 	100000,
826 	1000000,
827 	10000000,
828 };
829 
830 /* Multiplier values for TRAN_SPEED.  Multiplied by 10 to be nice
831  * to platforms without floating point.
832  */
833 static const int multipliers[] = {
834 	0,	/* reserved */
835 	10,
836 	12,
837 	13,
838 	15,
839 	20,
840 	25,
841 	30,
842 	35,
843 	40,
844 	45,
845 	50,
846 	55,
847 	60,
848 	70,
849 	80,
850 };
851 
852 void mmc_set_ios(struct mmc *mmc)
853 {
854 	mmc->set_ios(mmc);
855 }
856 
857 void mmc_set_clock(struct mmc *mmc, uint clock)
858 {
859 	if (clock > mmc->f_max)
860 		clock = mmc->f_max;
861 
862 	if (clock < mmc->f_min)
863 		clock = mmc->f_min;
864 
865 	mmc->clock = clock;
866 
867 	mmc_set_ios(mmc);
868 }
869 
870 void mmc_set_bus_width(struct mmc *mmc, uint width)
871 {
872 	mmc->bus_width = width;
873 
874 	mmc_set_ios(mmc);
875 }
876 
877 int mmc_startup(struct mmc *mmc)
878 {
879 	int err, width;
880 	uint mult, freq;
881 	u64 cmult, csize, capacity;
882 	struct mmc_cmd cmd;
883 	ALLOC_CACHE_ALIGN_BUFFER(char, ext_csd, 512);
884 	ALLOC_CACHE_ALIGN_BUFFER(char, test_csd, 512);
885 	int timeout = 1000;
886 
887 #ifdef CONFIG_MMC_SPI_CRC_ON
888 	if (mmc_host_is_spi(mmc)) { /* enable CRC check for spi */
889 		cmd.cmdidx = MMC_CMD_SPI_CRC_ON_OFF;
890 		cmd.resp_type = MMC_RSP_R1;
891 		cmd.cmdarg = 1;
892 		cmd.flags = 0;
893 		err = mmc_send_cmd(mmc, &cmd, NULL);
894 
895 		if (err)
896 			return err;
897 	}
898 #endif
899 
900 	/* Put the Card in Identify Mode */
901 	cmd.cmdidx = mmc_host_is_spi(mmc) ? MMC_CMD_SEND_CID :
902 		MMC_CMD_ALL_SEND_CID; /* cmd not supported in spi */
903 	cmd.resp_type = MMC_RSP_R2;
904 	cmd.cmdarg = 0;
905 	cmd.flags = 0;
906 
907 	err = mmc_send_cmd(mmc, &cmd, NULL);
908 
909 	if (err)
910 		return err;
911 
912 	memcpy(mmc->cid, cmd.response, 16);
913 
914 	/*
915 	 * For MMC cards, set the Relative Address.
916 	 * For SD cards, get the Relatvie Address.
917 	 * This also puts the cards into Standby State
918 	 */
919 	if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
920 		cmd.cmdidx = SD_CMD_SEND_RELATIVE_ADDR;
921 		cmd.cmdarg = mmc->rca << 16;
922 		cmd.resp_type = MMC_RSP_R6;
923 		cmd.flags = 0;
924 
925 		err = mmc_send_cmd(mmc, &cmd, NULL);
926 
927 		if (err)
928 			return err;
929 
930 		if (IS_SD(mmc))
931 			mmc->rca = (cmd.response[0] >> 16) & 0xffff;
932 	}
933 
934 	/* Get the Card-Specific Data */
935 	cmd.cmdidx = MMC_CMD_SEND_CSD;
936 	cmd.resp_type = MMC_RSP_R2;
937 	cmd.cmdarg = mmc->rca << 16;
938 	cmd.flags = 0;
939 
940 	err = mmc_send_cmd(mmc, &cmd, NULL);
941 
942 	/* Waiting for the ready status */
943 	mmc_send_status(mmc, timeout);
944 
945 	if (err)
946 		return err;
947 
948 	mmc->csd[0] = cmd.response[0];
949 	mmc->csd[1] = cmd.response[1];
950 	mmc->csd[2] = cmd.response[2];
951 	mmc->csd[3] = cmd.response[3];
952 
953 	if (mmc->version == MMC_VERSION_UNKNOWN) {
954 		int version = (cmd.response[0] >> 26) & 0xf;
955 
956 		switch (version) {
957 			case 0:
958 				mmc->version = MMC_VERSION_1_2;
959 				break;
960 			case 1:
961 				mmc->version = MMC_VERSION_1_4;
962 				break;
963 			case 2:
964 				mmc->version = MMC_VERSION_2_2;
965 				break;
966 			case 3:
967 				mmc->version = MMC_VERSION_3;
968 				break;
969 			case 4:
970 				mmc->version = MMC_VERSION_4;
971 				break;
972 			default:
973 				mmc->version = MMC_VERSION_1_2;
974 				break;
975 		}
976 	}
977 
978 	/* divide frequency by 10, since the mults are 10x bigger */
979 	freq = fbase[(cmd.response[0] & 0x7)];
980 	mult = multipliers[((cmd.response[0] >> 3) & 0xf)];
981 
982 	mmc->tran_speed = freq * mult;
983 
984 	mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf);
985 
986 	if (IS_SD(mmc))
987 		mmc->write_bl_len = mmc->read_bl_len;
988 	else
989 		mmc->write_bl_len = 1 << ((cmd.response[3] >> 22) & 0xf);
990 
991 	if (mmc->high_capacity) {
992 		csize = (mmc->csd[1] & 0x3f) << 16
993 			| (mmc->csd[2] & 0xffff0000) >> 16;
994 		cmult = 8;
995 	} else {
996 		csize = (mmc->csd[1] & 0x3ff) << 2
997 			| (mmc->csd[2] & 0xc0000000) >> 30;
998 		cmult = (mmc->csd[2] & 0x00038000) >> 15;
999 	}
1000 
1001 	mmc->capacity = (csize + 1) << (cmult + 2);
1002 	mmc->capacity *= mmc->read_bl_len;
1003 
1004 	if (mmc->read_bl_len > 512)
1005 		mmc->read_bl_len = 512;
1006 
1007 	if (mmc->write_bl_len > 512)
1008 		mmc->write_bl_len = 512;
1009 
1010 	/* Select the card, and put it into Transfer Mode */
1011 	if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
1012 		cmd.cmdidx = MMC_CMD_SELECT_CARD;
1013 		cmd.resp_type = MMC_RSP_R1;
1014 		cmd.cmdarg = mmc->rca << 16;
1015 		cmd.flags = 0;
1016 		err = mmc_send_cmd(mmc, &cmd, NULL);
1017 
1018 		if (err)
1019 			return err;
1020 	}
1021 
1022 	/*
1023 	 * For SD, its erase group is always one sector
1024 	 */
1025 	mmc->erase_grp_size = 1;
1026 	mmc->part_config = MMCPART_NOAVAILABLE;
1027 	if (!IS_SD(mmc) && (mmc->version >= MMC_VERSION_4)) {
1028 		/* check  ext_csd version and capacity */
1029 		err = mmc_send_ext_csd(mmc, ext_csd);
1030 		if (!err & (ext_csd[EXT_CSD_REV] >= 2)) {
1031 			/*
1032 			 * According to the JEDEC Standard, the value of
1033 			 * ext_csd's capacity is valid if the value is more
1034 			 * than 2GB
1035 			 */
1036 			capacity = ext_csd[EXT_CSD_SEC_CNT] << 0
1037 					| ext_csd[EXT_CSD_SEC_CNT + 1] << 8
1038 					| ext_csd[EXT_CSD_SEC_CNT + 2] << 16
1039 					| ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
1040 			capacity *= 512;
1041 			if ((capacity >> 20) > 2 * 1024)
1042 				mmc->capacity = capacity;
1043 		}
1044 
1045 		/*
1046 		 * Check whether GROUP_DEF is set, if yes, read out
1047 		 * group size from ext_csd directly, or calculate
1048 		 * the group size from the csd value.
1049 		 */
1050 		if (ext_csd[EXT_CSD_ERASE_GROUP_DEF])
1051 			mmc->erase_grp_size =
1052 			      ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 512 * 1024;
1053 		else {
1054 			int erase_gsz, erase_gmul;
1055 			erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10;
1056 			erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5;
1057 			mmc->erase_grp_size = (erase_gsz + 1)
1058 				* (erase_gmul + 1);
1059 		}
1060 
1061 		/* store the partition info of emmc */
1062 		if (ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT)
1063 			mmc->part_config = ext_csd[EXT_CSD_PART_CONF];
1064 	}
1065 
1066 	if (IS_SD(mmc))
1067 		err = sd_change_freq(mmc);
1068 	else
1069 		err = mmc_change_freq(mmc);
1070 
1071 	if (err)
1072 		return err;
1073 
1074 	/* Restrict card's capabilities by what the host can do */
1075 	mmc->card_caps &= mmc->host_caps;
1076 
1077 	if (IS_SD(mmc)) {
1078 		if (mmc->card_caps & MMC_MODE_4BIT) {
1079 			cmd.cmdidx = MMC_CMD_APP_CMD;
1080 			cmd.resp_type = MMC_RSP_R1;
1081 			cmd.cmdarg = mmc->rca << 16;
1082 			cmd.flags = 0;
1083 
1084 			err = mmc_send_cmd(mmc, &cmd, NULL);
1085 			if (err)
1086 				return err;
1087 
1088 			cmd.cmdidx = SD_CMD_APP_SET_BUS_WIDTH;
1089 			cmd.resp_type = MMC_RSP_R1;
1090 			cmd.cmdarg = 2;
1091 			cmd.flags = 0;
1092 			err = mmc_send_cmd(mmc, &cmd, NULL);
1093 			if (err)
1094 				return err;
1095 
1096 			mmc_set_bus_width(mmc, 4);
1097 		}
1098 
1099 		if (mmc->card_caps & MMC_MODE_HS)
1100 			mmc_set_clock(mmc, 50000000);
1101 		else
1102 			mmc_set_clock(mmc, 25000000);
1103 	} else {
1104 		for (width = EXT_CSD_BUS_WIDTH_8; width >= 0; width--) {
1105 			/* Set the card to use 4 bit*/
1106 			err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1107 					EXT_CSD_BUS_WIDTH, width);
1108 
1109 			if (err)
1110 				continue;
1111 
1112 			if (!width) {
1113 				mmc_set_bus_width(mmc, 1);
1114 				break;
1115 			} else
1116 				mmc_set_bus_width(mmc, 4 * width);
1117 
1118 			err = mmc_send_ext_csd(mmc, test_csd);
1119 			if (!err && ext_csd[EXT_CSD_PARTITIONING_SUPPORT] \
1120 				    == test_csd[EXT_CSD_PARTITIONING_SUPPORT]
1121 				 && ext_csd[EXT_CSD_ERASE_GROUP_DEF] \
1122 				    == test_csd[EXT_CSD_ERASE_GROUP_DEF] \
1123 				 && ext_csd[EXT_CSD_REV] \
1124 				    == test_csd[EXT_CSD_REV]
1125 				 && ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] \
1126 				    == test_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
1127 				 && memcmp(&ext_csd[EXT_CSD_SEC_CNT], \
1128 					&test_csd[EXT_CSD_SEC_CNT], 4) == 0) {
1129 
1130 				mmc->card_caps |= width;
1131 				break;
1132 			}
1133 		}
1134 
1135 		if (mmc->card_caps & MMC_MODE_HS) {
1136 			if (mmc->card_caps & MMC_MODE_HS_52MHz)
1137 				mmc_set_clock(mmc, 52000000);
1138 			else
1139 				mmc_set_clock(mmc, 26000000);
1140 		} else
1141 			mmc_set_clock(mmc, 20000000);
1142 	}
1143 
1144 	/* fill in device description */
1145 	mmc->block_dev.lun = 0;
1146 	mmc->block_dev.type = 0;
1147 	mmc->block_dev.blksz = mmc->read_bl_len;
1148 	mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);
1149 	sprintf(mmc->block_dev.vendor, "Man %06x Snr %08x", mmc->cid[0] >> 8,
1150 			(mmc->cid[2] << 8) | (mmc->cid[3] >> 24));
1151 	sprintf(mmc->block_dev.product, "%c%c%c%c%c", mmc->cid[0] & 0xff,
1152 			(mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
1153 			(mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff);
1154 	sprintf(mmc->block_dev.revision, "%d.%d", mmc->cid[2] >> 28,
1155 			(mmc->cid[2] >> 24) & 0xf);
1156 	init_part(&mmc->block_dev);
1157 
1158 	return 0;
1159 }
1160 
1161 int mmc_send_if_cond(struct mmc *mmc)
1162 {
1163 	struct mmc_cmd cmd;
1164 	int err;
1165 
1166 	cmd.cmdidx = SD_CMD_SEND_IF_COND;
1167 	/* We set the bit if the host supports voltages between 2.7 and 3.6 V */
1168 	cmd.cmdarg = ((mmc->voltages & 0xff8000) != 0) << 8 | 0xaa;
1169 	cmd.resp_type = MMC_RSP_R7;
1170 	cmd.flags = 0;
1171 
1172 	err = mmc_send_cmd(mmc, &cmd, NULL);
1173 
1174 	if (err)
1175 		return err;
1176 
1177 	if ((cmd.response[0] & 0xff) != 0xaa)
1178 		return UNUSABLE_ERR;
1179 	else
1180 		mmc->version = SD_VERSION_2;
1181 
1182 	return 0;
1183 }
1184 
1185 int mmc_register(struct mmc *mmc)
1186 {
1187 	/* Setup the universal parts of the block interface just once */
1188 	mmc->block_dev.if_type = IF_TYPE_MMC;
1189 	mmc->block_dev.dev = cur_dev_num++;
1190 	mmc->block_dev.removable = 1;
1191 	mmc->block_dev.block_read = mmc_bread;
1192 	mmc->block_dev.block_write = mmc_bwrite;
1193 	mmc->block_dev.block_erase = mmc_berase;
1194 	if (!mmc->b_max)
1195 		mmc->b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
1196 
1197 	INIT_LIST_HEAD (&mmc->link);
1198 
1199 	list_add_tail (&mmc->link, &mmc_devices);
1200 
1201 	return 0;
1202 }
1203 
1204 #ifdef CONFIG_PARTITIONS
1205 block_dev_desc_t *mmc_get_dev(int dev)
1206 {
1207 	struct mmc *mmc = find_mmc_device(dev);
1208 
1209 	return mmc ? &mmc->block_dev : NULL;
1210 }
1211 #endif
1212 
1213 int mmc_init(struct mmc *mmc)
1214 {
1215 	int err;
1216 
1217 	if (mmc_getcd(mmc) == 0) {
1218 		mmc->has_init = 0;
1219 		printf("MMC: no card present\n");
1220 		return NO_CARD_ERR;
1221 	}
1222 
1223 	if (mmc->has_init)
1224 		return 0;
1225 
1226 	err = mmc->init(mmc);
1227 
1228 	if (err)
1229 		return err;
1230 
1231 	mmc_set_bus_width(mmc, 1);
1232 	mmc_set_clock(mmc, 1);
1233 
1234 	/* Reset the Card */
1235 	err = mmc_go_idle(mmc);
1236 
1237 	if (err)
1238 		return err;
1239 
1240 	/* The internal partition reset to user partition(0) at every CMD0*/
1241 	mmc->part_num = 0;
1242 
1243 	/* Test for SD version 2 */
1244 	err = mmc_send_if_cond(mmc);
1245 
1246 	/* Now try to get the SD card's operating condition */
1247 	err = sd_send_op_cond(mmc);
1248 
1249 	/* If the command timed out, we check for an MMC card */
1250 	if (err == TIMEOUT) {
1251 		err = mmc_send_op_cond(mmc);
1252 
1253 		if (err) {
1254 			printf("Card did not respond to voltage select!\n");
1255 			return UNUSABLE_ERR;
1256 		}
1257 	}
1258 
1259 	err = mmc_startup(mmc);
1260 	if (err)
1261 		mmc->has_init = 0;
1262 	else
1263 		mmc->has_init = 1;
1264 	return err;
1265 }
1266 
1267 /*
1268  * CPU and board-specific MMC initializations.  Aliased function
1269  * signals caller to move on
1270  */
1271 static int __def_mmc_init(bd_t *bis)
1272 {
1273 	return -1;
1274 }
1275 
1276 int cpu_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
1277 int board_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
1278 
1279 void print_mmc_devices(char separator)
1280 {
1281 	struct mmc *m;
1282 	struct list_head *entry;
1283 
1284 	list_for_each(entry, &mmc_devices) {
1285 		m = list_entry(entry, struct mmc, link);
1286 
1287 		printf("%s: %d", m->name, m->block_dev.dev);
1288 
1289 		if (entry->next != &mmc_devices)
1290 			printf("%c ", separator);
1291 	}
1292 
1293 	printf("\n");
1294 }
1295 
1296 int get_mmc_num(void)
1297 {
1298 	return cur_dev_num;
1299 }
1300 
1301 int mmc_initialize(bd_t *bis)
1302 {
1303 	INIT_LIST_HEAD (&mmc_devices);
1304 	cur_dev_num = 0;
1305 
1306 	if (board_mmc_init(bis) < 0)
1307 		cpu_mmc_init(bis);
1308 
1309 	print_mmc_devices(',');
1310 
1311 	return 0;
1312 }
1313