xref: /openbmc/u-boot/drivers/mmc/mmc.c (revision 686e1448)
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 > 1)
305 		cmd.cmdidx = MMC_CMD_WRITE_MULTIPLE_BLOCK;
306 	else
307 		cmd.cmdidx = MMC_CMD_WRITE_SINGLE_BLOCK;
308 
309 	if (mmc->high_capacity)
310 		cmd.cmdarg = start;
311 	else
312 		cmd.cmdarg = start * mmc->write_bl_len;
313 
314 	cmd.resp_type = MMC_RSP_R1;
315 
316 	data.src = src;
317 	data.blocks = blkcnt;
318 	data.blocksize = mmc->write_bl_len;
319 	data.flags = MMC_DATA_WRITE;
320 
321 	if (mmc_send_cmd(mmc, &cmd, &data)) {
322 		printf("mmc write failed\n");
323 		return 0;
324 	}
325 
326 	/* SPI multiblock writes terminate using a special
327 	 * token, not a STOP_TRANSMISSION request.
328 	 */
329 	if (!mmc_host_is_spi(mmc) && blkcnt > 1) {
330 		cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
331 		cmd.cmdarg = 0;
332 		cmd.resp_type = MMC_RSP_R1b;
333 		if (mmc_send_cmd(mmc, &cmd, NULL)) {
334 			printf("mmc fail to send stop cmd\n");
335 			return 0;
336 		}
337 	}
338 
339 	/* Waiting for the ready status */
340 	if (mmc_send_status(mmc, timeout))
341 		return 0;
342 
343 	return blkcnt;
344 }
345 
346 static ulong
347 mmc_bwrite(int dev_num, ulong start, lbaint_t blkcnt, const void*src)
348 {
349 	lbaint_t cur, blocks_todo = blkcnt;
350 
351 	struct mmc *mmc = find_mmc_device(dev_num);
352 	if (!mmc)
353 		return 0;
354 
355 	if (mmc_set_blocklen(mmc, mmc->write_bl_len))
356 		return 0;
357 
358 	do {
359 		cur = (blocks_todo > mmc->b_max) ?  mmc->b_max : blocks_todo;
360 		if(mmc_write_blocks(mmc, start, cur, src) != cur)
361 			return 0;
362 		blocks_todo -= cur;
363 		start += cur;
364 		src += cur * mmc->write_bl_len;
365 	} while (blocks_todo > 0);
366 
367 	return blkcnt;
368 }
369 
370 static int mmc_read_blocks(struct mmc *mmc, void *dst, ulong start,
371 			   lbaint_t blkcnt)
372 {
373 	struct mmc_cmd cmd;
374 	struct mmc_data data;
375 
376 	if (blkcnt > 1)
377 		cmd.cmdidx = MMC_CMD_READ_MULTIPLE_BLOCK;
378 	else
379 		cmd.cmdidx = MMC_CMD_READ_SINGLE_BLOCK;
380 
381 	if (mmc->high_capacity)
382 		cmd.cmdarg = start;
383 	else
384 		cmd.cmdarg = start * mmc->read_bl_len;
385 
386 	cmd.resp_type = MMC_RSP_R1;
387 
388 	data.dest = dst;
389 	data.blocks = blkcnt;
390 	data.blocksize = mmc->read_bl_len;
391 	data.flags = MMC_DATA_READ;
392 
393 	if (mmc_send_cmd(mmc, &cmd, &data))
394 		return 0;
395 
396 	if (blkcnt > 1) {
397 		cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
398 		cmd.cmdarg = 0;
399 		cmd.resp_type = MMC_RSP_R1b;
400 		if (mmc_send_cmd(mmc, &cmd, NULL)) {
401 			printf("mmc fail to send stop cmd\n");
402 			return 0;
403 		}
404 	}
405 
406 	return blkcnt;
407 }
408 
409 static ulong mmc_bread(int dev_num, ulong start, lbaint_t blkcnt, void *dst)
410 {
411 	lbaint_t cur, blocks_todo = blkcnt;
412 
413 	if (blkcnt == 0)
414 		return 0;
415 
416 	struct mmc *mmc = find_mmc_device(dev_num);
417 	if (!mmc)
418 		return 0;
419 
420 	if ((start + blkcnt) > mmc->block_dev.lba) {
421 		printf("MMC: block number 0x%lx exceeds max(0x%lx)\n",
422 			start + blkcnt, mmc->block_dev.lba);
423 		return 0;
424 	}
425 
426 	if (mmc_set_blocklen(mmc, mmc->read_bl_len))
427 		return 0;
428 
429 	do {
430 		cur = (blocks_todo > mmc->b_max) ?  mmc->b_max : blocks_todo;
431 		if(mmc_read_blocks(mmc, dst, start, cur) != cur)
432 			return 0;
433 		blocks_todo -= cur;
434 		start += cur;
435 		dst += cur * mmc->read_bl_len;
436 	} while (blocks_todo > 0);
437 
438 	return blkcnt;
439 }
440 
441 static int mmc_go_idle(struct mmc *mmc)
442 {
443 	struct mmc_cmd cmd;
444 	int err;
445 
446 	udelay(1000);
447 
448 	cmd.cmdidx = MMC_CMD_GO_IDLE_STATE;
449 	cmd.cmdarg = 0;
450 	cmd.resp_type = MMC_RSP_NONE;
451 
452 	err = mmc_send_cmd(mmc, &cmd, NULL);
453 
454 	if (err)
455 		return err;
456 
457 	udelay(2000);
458 
459 	return 0;
460 }
461 
462 static int sd_send_op_cond(struct mmc *mmc)
463 {
464 	int timeout = 1000;
465 	int err;
466 	struct mmc_cmd cmd;
467 
468 	do {
469 		cmd.cmdidx = MMC_CMD_APP_CMD;
470 		cmd.resp_type = MMC_RSP_R1;
471 		cmd.cmdarg = 0;
472 
473 		err = mmc_send_cmd(mmc, &cmd, NULL);
474 
475 		if (err)
476 			return err;
477 
478 		cmd.cmdidx = SD_CMD_APP_SEND_OP_COND;
479 		cmd.resp_type = MMC_RSP_R3;
480 
481 		/*
482 		 * Most cards do not answer if some reserved bits
483 		 * in the ocr are set. However, Some controller
484 		 * can set bit 7 (reserved for low voltages), but
485 		 * how to manage low voltages SD card is not yet
486 		 * specified.
487 		 */
488 		cmd.cmdarg = mmc_host_is_spi(mmc) ? 0 :
489 			(mmc->voltages & 0xff8000);
490 
491 		if (mmc->version == SD_VERSION_2)
492 			cmd.cmdarg |= OCR_HCS;
493 
494 		err = mmc_send_cmd(mmc, &cmd, NULL);
495 
496 		if (err)
497 			return err;
498 
499 		udelay(1000);
500 	} while ((!(cmd.response[0] & OCR_BUSY)) && timeout--);
501 
502 	if (timeout <= 0)
503 		return UNUSABLE_ERR;
504 
505 	if (mmc->version != SD_VERSION_2)
506 		mmc->version = SD_VERSION_1_0;
507 
508 	if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
509 		cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
510 		cmd.resp_type = MMC_RSP_R3;
511 		cmd.cmdarg = 0;
512 
513 		err = mmc_send_cmd(mmc, &cmd, NULL);
514 
515 		if (err)
516 			return err;
517 	}
518 
519 	mmc->ocr = cmd.response[0];
520 
521 	mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
522 	mmc->rca = 0;
523 
524 	return 0;
525 }
526 
527 static int mmc_send_op_cond(struct mmc *mmc)
528 {
529 	int timeout = 10000;
530 	struct mmc_cmd cmd;
531 	int err;
532 
533 	/* Some cards seem to need this */
534 	mmc_go_idle(mmc);
535 
536  	/* Asking to the card its capabilities */
537  	cmd.cmdidx = MMC_CMD_SEND_OP_COND;
538  	cmd.resp_type = MMC_RSP_R3;
539  	cmd.cmdarg = 0;
540 
541  	err = mmc_send_cmd(mmc, &cmd, NULL);
542 
543  	if (err)
544  		return err;
545 
546  	udelay(1000);
547 
548 	do {
549 		cmd.cmdidx = MMC_CMD_SEND_OP_COND;
550 		cmd.resp_type = MMC_RSP_R3;
551 		cmd.cmdarg = (mmc_host_is_spi(mmc) ? 0 :
552 				(mmc->voltages &
553 				(cmd.response[0] & OCR_VOLTAGE_MASK)) |
554 				(cmd.response[0] & OCR_ACCESS_MODE));
555 
556 		if (mmc->host_caps & MMC_MODE_HC)
557 			cmd.cmdarg |= OCR_HCS;
558 
559 		err = mmc_send_cmd(mmc, &cmd, NULL);
560 
561 		if (err)
562 			return err;
563 
564 		udelay(1000);
565 	} while (!(cmd.response[0] & OCR_BUSY) && timeout--);
566 
567 	if (timeout <= 0)
568 		return UNUSABLE_ERR;
569 
570 	if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
571 		cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
572 		cmd.resp_type = MMC_RSP_R3;
573 		cmd.cmdarg = 0;
574 
575 		err = mmc_send_cmd(mmc, &cmd, NULL);
576 
577 		if (err)
578 			return err;
579 	}
580 
581 	mmc->version = MMC_VERSION_UNKNOWN;
582 	mmc->ocr = cmd.response[0];
583 
584 	mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
585 	mmc->rca = 0;
586 
587 	return 0;
588 }
589 
590 
591 static int mmc_send_ext_csd(struct mmc *mmc, u8 *ext_csd)
592 {
593 	struct mmc_cmd cmd;
594 	struct mmc_data data;
595 	int err;
596 
597 	/* Get the Card Status Register */
598 	cmd.cmdidx = MMC_CMD_SEND_EXT_CSD;
599 	cmd.resp_type = MMC_RSP_R1;
600 	cmd.cmdarg = 0;
601 
602 	data.dest = (char *)ext_csd;
603 	data.blocks = 1;
604 	data.blocksize = 512;
605 	data.flags = MMC_DATA_READ;
606 
607 	err = mmc_send_cmd(mmc, &cmd, &data);
608 
609 	return err;
610 }
611 
612 
613 static int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)
614 {
615 	struct mmc_cmd cmd;
616 	int timeout = 1000;
617 	int ret;
618 
619 	cmd.cmdidx = MMC_CMD_SWITCH;
620 	cmd.resp_type = MMC_RSP_R1b;
621 	cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
622 				 (index << 16) |
623 				 (value << 8);
624 
625 	ret = mmc_send_cmd(mmc, &cmd, NULL);
626 
627 	/* Waiting for the ready status */
628 	if (!ret)
629 		ret = mmc_send_status(mmc, timeout);
630 
631 	return ret;
632 
633 }
634 
635 static int mmc_change_freq(struct mmc *mmc)
636 {
637 	ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, 512);
638 	char cardtype;
639 	int err;
640 
641 	mmc->card_caps = 0;
642 
643 	if (mmc_host_is_spi(mmc))
644 		return 0;
645 
646 	/* Only version 4 supports high-speed */
647 	if (mmc->version < MMC_VERSION_4)
648 		return 0;
649 
650 	err = mmc_send_ext_csd(mmc, ext_csd);
651 
652 	if (err)
653 		return err;
654 
655 	cardtype = ext_csd[EXT_CSD_CARD_TYPE] & 0xf;
656 
657 	err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING, 1);
658 
659 	if (err)
660 		return err;
661 
662 	/* Now check to see that it worked */
663 	err = mmc_send_ext_csd(mmc, ext_csd);
664 
665 	if (err)
666 		return err;
667 
668 	/* No high-speed support */
669 	if (!ext_csd[EXT_CSD_HS_TIMING])
670 		return 0;
671 
672 	/* High Speed is set, there are two types: 52MHz and 26MHz */
673 	if (cardtype & MMC_HS_52MHZ)
674 		mmc->card_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
675 	else
676 		mmc->card_caps |= MMC_MODE_HS;
677 
678 	return 0;
679 }
680 
681 int mmc_switch_part(int dev_num, unsigned int part_num)
682 {
683 	struct mmc *mmc = find_mmc_device(dev_num);
684 
685 	if (!mmc)
686 		return -1;
687 
688 	return mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF,
689 			  (mmc->part_config & ~PART_ACCESS_MASK)
690 			  | (part_num & PART_ACCESS_MASK));
691 }
692 
693 int mmc_getcd(struct mmc *mmc)
694 {
695 	int cd;
696 
697 	cd = board_mmc_getcd(mmc);
698 
699 	if (cd < 0) {
700 		if (mmc->getcd)
701 			cd = mmc->getcd(mmc);
702 		else
703 			cd = 1;
704 	}
705 
706 	return cd;
707 }
708 
709 static int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)
710 {
711 	struct mmc_cmd cmd;
712 	struct mmc_data data;
713 
714 	/* Switch the frequency */
715 	cmd.cmdidx = SD_CMD_SWITCH_FUNC;
716 	cmd.resp_type = MMC_RSP_R1;
717 	cmd.cmdarg = (mode << 31) | 0xffffff;
718 	cmd.cmdarg &= ~(0xf << (group * 4));
719 	cmd.cmdarg |= value << (group * 4);
720 
721 	data.dest = (char *)resp;
722 	data.blocksize = 64;
723 	data.blocks = 1;
724 	data.flags = MMC_DATA_READ;
725 
726 	return mmc_send_cmd(mmc, &cmd, &data);
727 }
728 
729 
730 static int sd_change_freq(struct mmc *mmc)
731 {
732 	int err;
733 	struct mmc_cmd cmd;
734 	ALLOC_CACHE_ALIGN_BUFFER(uint, scr, 2);
735 	ALLOC_CACHE_ALIGN_BUFFER(uint, switch_status, 16);
736 	struct mmc_data data;
737 	int timeout;
738 
739 	mmc->card_caps = 0;
740 
741 	if (mmc_host_is_spi(mmc))
742 		return 0;
743 
744 	/* Read the SCR to find out if this card supports higher speeds */
745 	cmd.cmdidx = MMC_CMD_APP_CMD;
746 	cmd.resp_type = MMC_RSP_R1;
747 	cmd.cmdarg = mmc->rca << 16;
748 
749 	err = mmc_send_cmd(mmc, &cmd, NULL);
750 
751 	if (err)
752 		return err;
753 
754 	cmd.cmdidx = SD_CMD_APP_SEND_SCR;
755 	cmd.resp_type = MMC_RSP_R1;
756 	cmd.cmdarg = 0;
757 
758 	timeout = 3;
759 
760 retry_scr:
761 	data.dest = (char *)scr;
762 	data.blocksize = 8;
763 	data.blocks = 1;
764 	data.flags = MMC_DATA_READ;
765 
766 	err = mmc_send_cmd(mmc, &cmd, &data);
767 
768 	if (err) {
769 		if (timeout--)
770 			goto retry_scr;
771 
772 		return err;
773 	}
774 
775 	mmc->scr[0] = __be32_to_cpu(scr[0]);
776 	mmc->scr[1] = __be32_to_cpu(scr[1]);
777 
778 	switch ((mmc->scr[0] >> 24) & 0xf) {
779 		case 0:
780 			mmc->version = SD_VERSION_1_0;
781 			break;
782 		case 1:
783 			mmc->version = SD_VERSION_1_10;
784 			break;
785 		case 2:
786 			mmc->version = SD_VERSION_2;
787 			break;
788 		default:
789 			mmc->version = SD_VERSION_1_0;
790 			break;
791 	}
792 
793 	if (mmc->scr[0] & SD_DATA_4BIT)
794 		mmc->card_caps |= MMC_MODE_4BIT;
795 
796 	/* Version 1.0 doesn't support switching */
797 	if (mmc->version == SD_VERSION_1_0)
798 		return 0;
799 
800 	timeout = 4;
801 	while (timeout--) {
802 		err = sd_switch(mmc, SD_SWITCH_CHECK, 0, 1,
803 				(u8 *)switch_status);
804 
805 		if (err)
806 			return err;
807 
808 		/* The high-speed function is busy.  Try again */
809 		if (!(__be32_to_cpu(switch_status[7]) & SD_HIGHSPEED_BUSY))
810 			break;
811 	}
812 
813 	/* If high-speed isn't supported, we return */
814 	if (!(__be32_to_cpu(switch_status[3]) & SD_HIGHSPEED_SUPPORTED))
815 		return 0;
816 
817 	/*
818 	 * If the host doesn't support SD_HIGHSPEED, do not switch card to
819 	 * HIGHSPEED mode even if the card support SD_HIGHSPPED.
820 	 * This can avoid furthur problem when the card runs in different
821 	 * mode between the host.
822 	 */
823 	if (!((mmc->host_caps & MMC_MODE_HS_52MHz) &&
824 		(mmc->host_caps & MMC_MODE_HS)))
825 		return 0;
826 
827 	err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, 1, (u8 *)switch_status);
828 
829 	if (err)
830 		return err;
831 
832 	if ((__be32_to_cpu(switch_status[4]) & 0x0f000000) == 0x01000000)
833 		mmc->card_caps |= MMC_MODE_HS;
834 
835 	return 0;
836 }
837 
838 /* frequency bases */
839 /* divided by 10 to be nice to platforms without floating point */
840 static const int fbase[] = {
841 	10000,
842 	100000,
843 	1000000,
844 	10000000,
845 };
846 
847 /* Multiplier values for TRAN_SPEED.  Multiplied by 10 to be nice
848  * to platforms without floating point.
849  */
850 static const int multipliers[] = {
851 	0,	/* reserved */
852 	10,
853 	12,
854 	13,
855 	15,
856 	20,
857 	25,
858 	30,
859 	35,
860 	40,
861 	45,
862 	50,
863 	55,
864 	60,
865 	70,
866 	80,
867 };
868 
869 static void mmc_set_ios(struct mmc *mmc)
870 {
871 	mmc->set_ios(mmc);
872 }
873 
874 void mmc_set_clock(struct mmc *mmc, uint clock)
875 {
876 	if (clock > mmc->f_max)
877 		clock = mmc->f_max;
878 
879 	if (clock < mmc->f_min)
880 		clock = mmc->f_min;
881 
882 	mmc->clock = clock;
883 
884 	mmc_set_ios(mmc);
885 }
886 
887 static void mmc_set_bus_width(struct mmc *mmc, uint width)
888 {
889 	mmc->bus_width = width;
890 
891 	mmc_set_ios(mmc);
892 }
893 
894 static int mmc_startup(struct mmc *mmc)
895 {
896 	int err;
897 	uint mult, freq;
898 	u64 cmult, csize, capacity;
899 	struct mmc_cmd cmd;
900 	ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, 512);
901 	ALLOC_CACHE_ALIGN_BUFFER(u8, test_csd, 512);
902 	int timeout = 1000;
903 
904 #ifdef CONFIG_MMC_SPI_CRC_ON
905 	if (mmc_host_is_spi(mmc)) { /* enable CRC check for spi */
906 		cmd.cmdidx = MMC_CMD_SPI_CRC_ON_OFF;
907 		cmd.resp_type = MMC_RSP_R1;
908 		cmd.cmdarg = 1;
909 		err = mmc_send_cmd(mmc, &cmd, NULL);
910 
911 		if (err)
912 			return err;
913 	}
914 #endif
915 
916 	/* Put the Card in Identify Mode */
917 	cmd.cmdidx = mmc_host_is_spi(mmc) ? MMC_CMD_SEND_CID :
918 		MMC_CMD_ALL_SEND_CID; /* cmd not supported in spi */
919 	cmd.resp_type = MMC_RSP_R2;
920 	cmd.cmdarg = 0;
921 
922 	err = mmc_send_cmd(mmc, &cmd, NULL);
923 
924 	if (err)
925 		return err;
926 
927 	memcpy(mmc->cid, cmd.response, 16);
928 
929 	/*
930 	 * For MMC cards, set the Relative Address.
931 	 * For SD cards, get the Relatvie Address.
932 	 * This also puts the cards into Standby State
933 	 */
934 	if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
935 		cmd.cmdidx = SD_CMD_SEND_RELATIVE_ADDR;
936 		cmd.cmdarg = mmc->rca << 16;
937 		cmd.resp_type = MMC_RSP_R6;
938 
939 		err = mmc_send_cmd(mmc, &cmd, NULL);
940 
941 		if (err)
942 			return err;
943 
944 		if (IS_SD(mmc))
945 			mmc->rca = (cmd.response[0] >> 16) & 0xffff;
946 	}
947 
948 	/* Get the Card-Specific Data */
949 	cmd.cmdidx = MMC_CMD_SEND_CSD;
950 	cmd.resp_type = MMC_RSP_R2;
951 	cmd.cmdarg = mmc->rca << 16;
952 
953 	err = mmc_send_cmd(mmc, &cmd, NULL);
954 
955 	/* Waiting for the ready status */
956 	mmc_send_status(mmc, timeout);
957 
958 	if (err)
959 		return err;
960 
961 	mmc->csd[0] = cmd.response[0];
962 	mmc->csd[1] = cmd.response[1];
963 	mmc->csd[2] = cmd.response[2];
964 	mmc->csd[3] = cmd.response[3];
965 
966 	if (mmc->version == MMC_VERSION_UNKNOWN) {
967 		int version = (cmd.response[0] >> 26) & 0xf;
968 
969 		switch (version) {
970 			case 0:
971 				mmc->version = MMC_VERSION_1_2;
972 				break;
973 			case 1:
974 				mmc->version = MMC_VERSION_1_4;
975 				break;
976 			case 2:
977 				mmc->version = MMC_VERSION_2_2;
978 				break;
979 			case 3:
980 				mmc->version = MMC_VERSION_3;
981 				break;
982 			case 4:
983 				mmc->version = MMC_VERSION_4;
984 				break;
985 			default:
986 				mmc->version = MMC_VERSION_1_2;
987 				break;
988 		}
989 	}
990 
991 	/* divide frequency by 10, since the mults are 10x bigger */
992 	freq = fbase[(cmd.response[0] & 0x7)];
993 	mult = multipliers[((cmd.response[0] >> 3) & 0xf)];
994 
995 	mmc->tran_speed = freq * mult;
996 
997 	mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf);
998 
999 	if (IS_SD(mmc))
1000 		mmc->write_bl_len = mmc->read_bl_len;
1001 	else
1002 		mmc->write_bl_len = 1 << ((cmd.response[3] >> 22) & 0xf);
1003 
1004 	if (mmc->high_capacity) {
1005 		csize = (mmc->csd[1] & 0x3f) << 16
1006 			| (mmc->csd[2] & 0xffff0000) >> 16;
1007 		cmult = 8;
1008 	} else {
1009 		csize = (mmc->csd[1] & 0x3ff) << 2
1010 			| (mmc->csd[2] & 0xc0000000) >> 30;
1011 		cmult = (mmc->csd[2] & 0x00038000) >> 15;
1012 	}
1013 
1014 	mmc->capacity = (csize + 1) << (cmult + 2);
1015 	mmc->capacity *= mmc->read_bl_len;
1016 
1017 	if (mmc->read_bl_len > 512)
1018 		mmc->read_bl_len = 512;
1019 
1020 	if (mmc->write_bl_len > 512)
1021 		mmc->write_bl_len = 512;
1022 
1023 	/* Select the card, and put it into Transfer Mode */
1024 	if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
1025 		cmd.cmdidx = MMC_CMD_SELECT_CARD;
1026 		cmd.resp_type = MMC_RSP_R1;
1027 		cmd.cmdarg = mmc->rca << 16;
1028 		err = mmc_send_cmd(mmc, &cmd, NULL);
1029 
1030 		if (err)
1031 			return err;
1032 	}
1033 
1034 	/*
1035 	 * For SD, its erase group is always one sector
1036 	 */
1037 	mmc->erase_grp_size = 1;
1038 	mmc->part_config = MMCPART_NOAVAILABLE;
1039 	if (!IS_SD(mmc) && (mmc->version >= MMC_VERSION_4)) {
1040 		/* check  ext_csd version and capacity */
1041 		err = mmc_send_ext_csd(mmc, ext_csd);
1042 		if (!err && (ext_csd[EXT_CSD_REV] >= 2)) {
1043 			/*
1044 			 * According to the JEDEC Standard, the value of
1045 			 * ext_csd's capacity is valid if the value is more
1046 			 * than 2GB
1047 			 */
1048 			capacity = ext_csd[EXT_CSD_SEC_CNT] << 0
1049 					| ext_csd[EXT_CSD_SEC_CNT + 1] << 8
1050 					| ext_csd[EXT_CSD_SEC_CNT + 2] << 16
1051 					| ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
1052 			capacity *= 512;
1053 			if ((capacity >> 20) > 2 * 1024)
1054 				mmc->capacity = capacity;
1055 		}
1056 
1057 		/*
1058 		 * Check whether GROUP_DEF is set, if yes, read out
1059 		 * group size from ext_csd directly, or calculate
1060 		 * the group size from the csd value.
1061 		 */
1062 		if (ext_csd[EXT_CSD_ERASE_GROUP_DEF])
1063 			mmc->erase_grp_size =
1064 			      ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 512 * 1024;
1065 		else {
1066 			int erase_gsz, erase_gmul;
1067 			erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10;
1068 			erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5;
1069 			mmc->erase_grp_size = (erase_gsz + 1)
1070 				* (erase_gmul + 1);
1071 		}
1072 
1073 		/* store the partition info of emmc */
1074 		if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) ||
1075 		    ext_csd[EXT_CSD_BOOT_MULT])
1076 			mmc->part_config = ext_csd[EXT_CSD_PART_CONF];
1077 	}
1078 
1079 	if (IS_SD(mmc))
1080 		err = sd_change_freq(mmc);
1081 	else
1082 		err = mmc_change_freq(mmc);
1083 
1084 	if (err)
1085 		return err;
1086 
1087 	/* Restrict card's capabilities by what the host can do */
1088 	mmc->card_caps &= mmc->host_caps;
1089 
1090 	if (IS_SD(mmc)) {
1091 		if (mmc->card_caps & MMC_MODE_4BIT) {
1092 			cmd.cmdidx = MMC_CMD_APP_CMD;
1093 			cmd.resp_type = MMC_RSP_R1;
1094 			cmd.cmdarg = mmc->rca << 16;
1095 
1096 			err = mmc_send_cmd(mmc, &cmd, NULL);
1097 			if (err)
1098 				return err;
1099 
1100 			cmd.cmdidx = SD_CMD_APP_SET_BUS_WIDTH;
1101 			cmd.resp_type = MMC_RSP_R1;
1102 			cmd.cmdarg = 2;
1103 			err = mmc_send_cmd(mmc, &cmd, NULL);
1104 			if (err)
1105 				return err;
1106 
1107 			mmc_set_bus_width(mmc, 4);
1108 		}
1109 
1110 		if (mmc->card_caps & MMC_MODE_HS)
1111 			mmc->tran_speed = 50000000;
1112 		else
1113 			mmc->tran_speed = 25000000;
1114 	} else {
1115 		int idx;
1116 
1117 		/* An array of possible bus widths in order of preference */
1118 		static unsigned ext_csd_bits[] = {
1119 			EXT_CSD_BUS_WIDTH_8,
1120 			EXT_CSD_BUS_WIDTH_4,
1121 			EXT_CSD_BUS_WIDTH_1,
1122 		};
1123 
1124 		/* An array to map CSD bus widths to host cap bits */
1125 		static unsigned ext_to_hostcaps[] = {
1126 			[EXT_CSD_BUS_WIDTH_4] = MMC_MODE_4BIT,
1127 			[EXT_CSD_BUS_WIDTH_8] = MMC_MODE_8BIT,
1128 		};
1129 
1130 		/* An array to map chosen bus width to an integer */
1131 		static unsigned widths[] = {
1132 			8, 4, 1,
1133 		};
1134 
1135 		for (idx=0; idx < ARRAY_SIZE(ext_csd_bits); idx++) {
1136 			unsigned int extw = ext_csd_bits[idx];
1137 
1138 			/*
1139 			 * Check to make sure the controller supports
1140 			 * this bus width, if it's more than 1
1141 			 */
1142 			if (extw != EXT_CSD_BUS_WIDTH_1 &&
1143 					!(mmc->host_caps & ext_to_hostcaps[extw]))
1144 				continue;
1145 
1146 			err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1147 					EXT_CSD_BUS_WIDTH, extw);
1148 
1149 			if (err)
1150 				continue;
1151 
1152 			mmc_set_bus_width(mmc, widths[idx]);
1153 
1154 			err = mmc_send_ext_csd(mmc, test_csd);
1155 			if (!err && ext_csd[EXT_CSD_PARTITIONING_SUPPORT] \
1156 				    == test_csd[EXT_CSD_PARTITIONING_SUPPORT]
1157 				 && ext_csd[EXT_CSD_ERASE_GROUP_DEF] \
1158 				    == test_csd[EXT_CSD_ERASE_GROUP_DEF] \
1159 				 && ext_csd[EXT_CSD_REV] \
1160 				    == test_csd[EXT_CSD_REV]
1161 				 && ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] \
1162 				    == test_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
1163 				 && memcmp(&ext_csd[EXT_CSD_SEC_CNT], \
1164 					&test_csd[EXT_CSD_SEC_CNT], 4) == 0) {
1165 
1166 				mmc->card_caps |= ext_to_hostcaps[extw];
1167 				break;
1168 			}
1169 		}
1170 
1171 		if (mmc->card_caps & MMC_MODE_HS) {
1172 			if (mmc->card_caps & MMC_MODE_HS_52MHz)
1173 				mmc->tran_speed = 52000000;
1174 			else
1175 				mmc->tran_speed = 26000000;
1176 		}
1177 	}
1178 
1179 	mmc_set_clock(mmc, mmc->tran_speed);
1180 
1181 	/* fill in device description */
1182 	mmc->block_dev.lun = 0;
1183 	mmc->block_dev.type = 0;
1184 	mmc->block_dev.blksz = mmc->read_bl_len;
1185 	mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);
1186 	sprintf(mmc->block_dev.vendor, "Man %06x Snr %04x%04x",
1187 		mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff),
1188 		(mmc->cid[3] >> 16) & 0xffff);
1189 	sprintf(mmc->block_dev.product, "%c%c%c%c%c%c", mmc->cid[0] & 0xff,
1190 		(mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
1191 		(mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff,
1192 		(mmc->cid[2] >> 24) & 0xff);
1193 	sprintf(mmc->block_dev.revision, "%d.%d", (mmc->cid[2] >> 20) & 0xf,
1194 		(mmc->cid[2] >> 16) & 0xf);
1195 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBDISK_SUPPORT)
1196 	init_part(&mmc->block_dev);
1197 #endif
1198 
1199 	return 0;
1200 }
1201 
1202 static int mmc_send_if_cond(struct mmc *mmc)
1203 {
1204 	struct mmc_cmd cmd;
1205 	int err;
1206 
1207 	cmd.cmdidx = SD_CMD_SEND_IF_COND;
1208 	/* We set the bit if the host supports voltages between 2.7 and 3.6 V */
1209 	cmd.cmdarg = ((mmc->voltages & 0xff8000) != 0) << 8 | 0xaa;
1210 	cmd.resp_type = MMC_RSP_R7;
1211 
1212 	err = mmc_send_cmd(mmc, &cmd, NULL);
1213 
1214 	if (err)
1215 		return err;
1216 
1217 	if ((cmd.response[0] & 0xff) != 0xaa)
1218 		return UNUSABLE_ERR;
1219 	else
1220 		mmc->version = SD_VERSION_2;
1221 
1222 	return 0;
1223 }
1224 
1225 int mmc_register(struct mmc *mmc)
1226 {
1227 	/* Setup the universal parts of the block interface just once */
1228 	mmc->block_dev.if_type = IF_TYPE_MMC;
1229 	mmc->block_dev.dev = cur_dev_num++;
1230 	mmc->block_dev.removable = 1;
1231 	mmc->block_dev.block_read = mmc_bread;
1232 	mmc->block_dev.block_write = mmc_bwrite;
1233 	mmc->block_dev.block_erase = mmc_berase;
1234 	if (!mmc->b_max)
1235 		mmc->b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
1236 
1237 	INIT_LIST_HEAD (&mmc->link);
1238 
1239 	list_add_tail (&mmc->link, &mmc_devices);
1240 
1241 	return 0;
1242 }
1243 
1244 #ifdef CONFIG_PARTITIONS
1245 block_dev_desc_t *mmc_get_dev(int dev)
1246 {
1247 	struct mmc *mmc = find_mmc_device(dev);
1248 	if (!mmc || mmc_init(mmc))
1249 		return NULL;
1250 
1251 	return &mmc->block_dev;
1252 }
1253 #endif
1254 
1255 int mmc_init(struct mmc *mmc)
1256 {
1257 	int err;
1258 
1259 	if (mmc_getcd(mmc) == 0) {
1260 		mmc->has_init = 0;
1261 		printf("MMC: no card present\n");
1262 		return NO_CARD_ERR;
1263 	}
1264 
1265 	if (mmc->has_init)
1266 		return 0;
1267 
1268 	err = mmc->init(mmc);
1269 
1270 	if (err)
1271 		return err;
1272 
1273 	mmc_set_bus_width(mmc, 1);
1274 	mmc_set_clock(mmc, 1);
1275 
1276 	/* Reset the Card */
1277 	err = mmc_go_idle(mmc);
1278 
1279 	if (err)
1280 		return err;
1281 
1282 	/* The internal partition reset to user partition(0) at every CMD0*/
1283 	mmc->part_num = 0;
1284 
1285 	/* Test for SD version 2 */
1286 	err = mmc_send_if_cond(mmc);
1287 
1288 	/* Now try to get the SD card's operating condition */
1289 	err = sd_send_op_cond(mmc);
1290 
1291 	/* If the command timed out, we check for an MMC card */
1292 	if (err == TIMEOUT) {
1293 		err = mmc_send_op_cond(mmc);
1294 
1295 		if (err) {
1296 			printf("Card did not respond to voltage select!\n");
1297 			return UNUSABLE_ERR;
1298 		}
1299 	}
1300 
1301 	err = mmc_startup(mmc);
1302 	if (err)
1303 		mmc->has_init = 0;
1304 	else
1305 		mmc->has_init = 1;
1306 	return err;
1307 }
1308 
1309 /*
1310  * CPU and board-specific MMC initializations.  Aliased function
1311  * signals caller to move on
1312  */
1313 static int __def_mmc_init(bd_t *bis)
1314 {
1315 	return -1;
1316 }
1317 
1318 int cpu_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
1319 int board_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
1320 
1321 void print_mmc_devices(char separator)
1322 {
1323 	struct mmc *m;
1324 	struct list_head *entry;
1325 
1326 	list_for_each(entry, &mmc_devices) {
1327 		m = list_entry(entry, struct mmc, link);
1328 
1329 		printf("%s: %d", m->name, m->block_dev.dev);
1330 
1331 		if (entry->next != &mmc_devices)
1332 			printf("%c ", separator);
1333 	}
1334 
1335 	printf("\n");
1336 }
1337 
1338 int get_mmc_num(void)
1339 {
1340 	return cur_dev_num;
1341 }
1342 
1343 int mmc_initialize(bd_t *bis)
1344 {
1345 	INIT_LIST_HEAD (&mmc_devices);
1346 	cur_dev_num = 0;
1347 
1348 	if (board_mmc_init(bis) < 0)
1349 		cpu_mmc_init(bis);
1350 
1351 	print_mmc_devices(',');
1352 
1353 	return 0;
1354 }
1355