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