2 * Copyright 2008, Freescale Semiconductor, Inc
5 * Based vaguely on the Linux code
7 * See file CREDITS for list of people who contributed to this
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.
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.
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,
32 #include <linux/list.h>
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
40 static struct list_head mmc_devices;
41 static int cur_dev_num = -1;
43 int __board_mmc_getcd(struct mmc *mmc) {
47 int board_mmc_getcd(struct mmc *mmc)__attribute__((weak,
48 alias("__board_mmc_getcd")));
50 #ifdef CONFIG_MMC_BOUNCE_BUFFER
51 static int mmc_bounce_need_bounce(struct mmc_data *orig)
55 if (orig->flags & MMC_DATA_READ)
56 addr = (ulong)orig->dest;
58 addr = (ulong)orig->src;
60 if (addr % ARCH_DMA_MINALIGN) {
61 debug("MMC: Unaligned data destination address %08lx!\n", addr);
65 len = (ulong)(orig->blocksize * orig->blocks);
66 if (len % ARCH_DMA_MINALIGN) {
67 debug("MMC: Unaligned data destination length %08lx!\n", len);
74 static int mmc_bounce_buffer_start(struct mmc_data *backup,
75 struct mmc_data *orig)
83 if (!mmc_bounce_need_bounce(orig))
86 memcpy(backup, orig, sizeof(struct mmc_data));
88 origlen = orig->blocksize * orig->blocks;
89 len = roundup(origlen, ARCH_DMA_MINALIGN);
90 buffer = memalign(ARCH_DMA_MINALIGN, len);
92 puts("MMC: Error allocating MMC bounce buffer!\n");
96 if (orig->flags & MMC_DATA_READ) {
99 memcpy(buffer, orig->src, origlen);
106 static void mmc_bounce_buffer_stop(struct mmc_data *backup,
107 struct mmc_data *orig)
114 if (!mmc_bounce_need_bounce(backup))
117 if (backup->flags & MMC_DATA_READ) {
118 len = backup->blocksize * backup->blocks;
119 memcpy(backup->dest, orig->dest, len);
121 orig->dest = backup->dest;
123 free((void *)orig->src);
124 orig->src = backup->src;
131 static inline int mmc_bounce_buffer_start(struct mmc_data *backup,
132 struct mmc_data *orig) { return 0; }
133 static inline void mmc_bounce_buffer_stop(struct mmc_data *backup,
134 struct mmc_data *orig) { }
137 int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
139 struct mmc_data backup;
142 memset(&backup, 0, sizeof(backup));
144 ret = mmc_bounce_buffer_start(&backup, data);
148 #ifdef CONFIG_MMC_TRACE
152 printf("CMD_SEND:%d\n", cmd->cmdidx);
153 printf("\t\tARG\t\t\t 0x%08X\n", cmd->cmdarg);
154 printf("\t\tFLAG\t\t\t %d\n", cmd->flags);
155 ret = mmc->send_cmd(mmc, cmd, data);
156 switch (cmd->resp_type) {
158 printf("\t\tMMC_RSP_NONE\n");
161 printf("\t\tMMC_RSP_R1,5,6,7 \t 0x%08X \n",
165 printf("\t\tMMC_RSP_R1b\t\t 0x%08X \n",
169 printf("\t\tMMC_RSP_R2\t\t 0x%08X \n",
171 printf("\t\t \t\t 0x%08X \n",
173 printf("\t\t \t\t 0x%08X \n",
175 printf("\t\t \t\t 0x%08X \n",
178 printf("\t\t\t\t\tDUMPING DATA\n");
179 for (i = 0; i < 4; i++) {
181 printf("\t\t\t\t\t%03d - ", i*4);
182 ptr = (u8 *)&cmd->response[i];
184 for (j = 0; j < 4; j++)
185 printf("%02X ", *ptr--);
190 printf("\t\tMMC_RSP_R3,4\t\t 0x%08X \n",
194 printf("\t\tERROR MMC rsp not supported\n");
198 ret = mmc->send_cmd(mmc, cmd, data);
200 mmc_bounce_buffer_stop(&backup, data);
204 int mmc_send_status(struct mmc *mmc, int timeout)
207 int err, retries = 5;
208 #ifdef CONFIG_MMC_TRACE
212 cmd.cmdidx = MMC_CMD_SEND_STATUS;
213 cmd.resp_type = MMC_RSP_R1;
214 if (!mmc_host_is_spi(mmc))
215 cmd.cmdarg = mmc->rca << 16;
219 err = mmc_send_cmd(mmc, &cmd, NULL);
221 if ((cmd.response[0] & MMC_STATUS_RDY_FOR_DATA) &&
222 (cmd.response[0] & MMC_STATUS_CURR_STATE) !=
225 else if (cmd.response[0] & MMC_STATUS_MASK) {
226 printf("Status Error: 0x%08X\n",
230 } else if (--retries < 0)
237 #ifdef CONFIG_MMC_TRACE
238 status = (cmd.response[0] & MMC_STATUS_CURR_STATE) >> 9;
239 printf("CURR STATE:%d\n", status);
242 printf("Timeout waiting card ready\n");
249 int mmc_set_blocklen(struct mmc *mmc, int len)
253 cmd.cmdidx = MMC_CMD_SET_BLOCKLEN;
254 cmd.resp_type = MMC_RSP_R1;
258 return mmc_send_cmd(mmc, &cmd, NULL);
261 struct mmc *find_mmc_device(int dev_num)
264 struct list_head *entry;
266 list_for_each(entry, &mmc_devices) {
267 m = list_entry(entry, struct mmc, link);
269 if (m->block_dev.dev == dev_num)
273 printf("MMC Device %d not found\n", dev_num);
278 static ulong mmc_erase_t(struct mmc *mmc, ulong start, lbaint_t blkcnt)
282 int err, start_cmd, end_cmd;
284 if (mmc->high_capacity)
285 end = start + blkcnt - 1;
287 end = (start + blkcnt - 1) * mmc->write_bl_len;
288 start *= mmc->write_bl_len;
292 start_cmd = SD_CMD_ERASE_WR_BLK_START;
293 end_cmd = SD_CMD_ERASE_WR_BLK_END;
295 start_cmd = MMC_CMD_ERASE_GROUP_START;
296 end_cmd = MMC_CMD_ERASE_GROUP_END;
299 cmd.cmdidx = start_cmd;
301 cmd.resp_type = MMC_RSP_R1;
304 err = mmc_send_cmd(mmc, &cmd, NULL);
308 cmd.cmdidx = end_cmd;
311 err = mmc_send_cmd(mmc, &cmd, NULL);
315 cmd.cmdidx = MMC_CMD_ERASE;
316 cmd.cmdarg = SECURE_ERASE;
317 cmd.resp_type = MMC_RSP_R1b;
319 err = mmc_send_cmd(mmc, &cmd, NULL);
326 puts("mmc erase failed\n");
331 mmc_berase(int dev_num, unsigned long start, lbaint_t blkcnt)
334 struct mmc *mmc = find_mmc_device(dev_num);
335 lbaint_t blk = 0, blk_r = 0;
341 if ((start % mmc->erase_grp_size) || (blkcnt % mmc->erase_grp_size))
342 printf("\n\nCaution! Your devices Erase group is 0x%x\n"
343 "The erase range would be change to 0x%lx~0x%lx\n\n",
344 mmc->erase_grp_size, start & ~(mmc->erase_grp_size - 1),
345 ((start + blkcnt + mmc->erase_grp_size)
346 & ~(mmc->erase_grp_size - 1)) - 1);
348 while (blk < blkcnt) {
349 blk_r = ((blkcnt - blk) > mmc->erase_grp_size) ?
350 mmc->erase_grp_size : (blkcnt - blk);
351 err = mmc_erase_t(mmc, start + blk, blk_r);
357 /* Waiting for the ready status */
358 if (mmc_send_status(mmc, timeout))
366 mmc_write_blocks(struct mmc *mmc, ulong start, lbaint_t blkcnt, const void*src)
369 struct mmc_data data;
372 if ((start + blkcnt) > mmc->block_dev.lba) {
373 printf("MMC: block number 0x%lx exceeds max(0x%lx)\n",
374 start + blkcnt, mmc->block_dev.lba);
379 cmd.cmdidx = MMC_CMD_WRITE_MULTIPLE_BLOCK;
381 cmd.cmdidx = MMC_CMD_WRITE_SINGLE_BLOCK;
383 if (mmc->high_capacity)
386 cmd.cmdarg = start * mmc->write_bl_len;
388 cmd.resp_type = MMC_RSP_R1;
392 data.blocks = blkcnt;
393 data.blocksize = mmc->write_bl_len;
394 data.flags = MMC_DATA_WRITE;
396 if (mmc_send_cmd(mmc, &cmd, &data)) {
397 printf("mmc write failed\n");
401 /* SPI multiblock writes terminate using a special
402 * token, not a STOP_TRANSMISSION request.
404 if (!mmc_host_is_spi(mmc) && blkcnt > 1) {
405 cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
407 cmd.resp_type = MMC_RSP_R1b;
409 if (mmc_send_cmd(mmc, &cmd, NULL)) {
410 printf("mmc fail to send stop cmd\n");
415 /* Waiting for the ready status */
416 if (mmc_send_status(mmc, timeout))
423 mmc_bwrite(int dev_num, ulong start, lbaint_t blkcnt, const void*src)
425 lbaint_t cur, blocks_todo = blkcnt;
427 struct mmc *mmc = find_mmc_device(dev_num);
431 if (mmc_set_blocklen(mmc, mmc->write_bl_len))
435 cur = (blocks_todo > mmc->b_max) ? mmc->b_max : blocks_todo;
436 if(mmc_write_blocks(mmc, start, cur, src) != cur)
440 src += cur * mmc->write_bl_len;
441 } while (blocks_todo > 0);
446 int mmc_read_blocks(struct mmc *mmc, void *dst, ulong start, lbaint_t blkcnt)
449 struct mmc_data data;
452 cmd.cmdidx = MMC_CMD_READ_MULTIPLE_BLOCK;
454 cmd.cmdidx = MMC_CMD_READ_SINGLE_BLOCK;
456 if (mmc->high_capacity)
459 cmd.cmdarg = start * mmc->read_bl_len;
461 cmd.resp_type = MMC_RSP_R1;
465 data.blocks = blkcnt;
466 data.blocksize = mmc->read_bl_len;
467 data.flags = MMC_DATA_READ;
469 if (mmc_send_cmd(mmc, &cmd, &data))
473 cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
475 cmd.resp_type = MMC_RSP_R1b;
477 if (mmc_send_cmd(mmc, &cmd, NULL)) {
478 printf("mmc fail to send stop cmd\n");
486 static ulong mmc_bread(int dev_num, ulong start, lbaint_t blkcnt, void *dst)
488 lbaint_t cur, blocks_todo = blkcnt;
493 struct mmc *mmc = find_mmc_device(dev_num);
497 if ((start + blkcnt) > mmc->block_dev.lba) {
498 printf("MMC: block number 0x%lx exceeds max(0x%lx)\n",
499 start + blkcnt, mmc->block_dev.lba);
503 if (mmc_set_blocklen(mmc, mmc->read_bl_len))
507 cur = (blocks_todo > mmc->b_max) ? mmc->b_max : blocks_todo;
508 if(mmc_read_blocks(mmc, dst, start, cur) != cur)
512 dst += cur * mmc->read_bl_len;
513 } while (blocks_todo > 0);
518 int mmc_go_idle(struct mmc* mmc)
525 cmd.cmdidx = MMC_CMD_GO_IDLE_STATE;
527 cmd.resp_type = MMC_RSP_NONE;
530 err = mmc_send_cmd(mmc, &cmd, NULL);
541 sd_send_op_cond(struct mmc *mmc)
548 cmd.cmdidx = MMC_CMD_APP_CMD;
549 cmd.resp_type = MMC_RSP_R1;
553 err = mmc_send_cmd(mmc, &cmd, NULL);
558 cmd.cmdidx = SD_CMD_APP_SEND_OP_COND;
559 cmd.resp_type = MMC_RSP_R3;
562 * Most cards do not answer if some reserved bits
563 * in the ocr are set. However, Some controller
564 * can set bit 7 (reserved for low voltages), but
565 * how to manage low voltages SD card is not yet
568 cmd.cmdarg = mmc_host_is_spi(mmc) ? 0 :
569 (mmc->voltages & 0xff8000);
571 if (mmc->version == SD_VERSION_2)
572 cmd.cmdarg |= OCR_HCS;
574 err = mmc_send_cmd(mmc, &cmd, NULL);
580 } while ((!(cmd.response[0] & OCR_BUSY)) && timeout--);
585 if (mmc->version != SD_VERSION_2)
586 mmc->version = SD_VERSION_1_0;
588 if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
589 cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
590 cmd.resp_type = MMC_RSP_R3;
594 err = mmc_send_cmd(mmc, &cmd, NULL);
600 mmc->ocr = cmd.response[0];
602 mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
608 int mmc_send_op_cond(struct mmc *mmc)
614 /* Some cards seem to need this */
617 /* Asking to the card its capabilities */
618 cmd.cmdidx = MMC_CMD_SEND_OP_COND;
619 cmd.resp_type = MMC_RSP_R3;
623 err = mmc_send_cmd(mmc, &cmd, NULL);
631 cmd.cmdidx = MMC_CMD_SEND_OP_COND;
632 cmd.resp_type = MMC_RSP_R3;
633 cmd.cmdarg = (mmc_host_is_spi(mmc) ? 0 :
635 (cmd.response[0] & OCR_VOLTAGE_MASK)) |
636 (cmd.response[0] & OCR_ACCESS_MODE));
638 if (mmc->host_caps & MMC_MODE_HC)
639 cmd.cmdarg |= OCR_HCS;
643 err = mmc_send_cmd(mmc, &cmd, NULL);
649 } while (!(cmd.response[0] & OCR_BUSY) && timeout--);
654 if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
655 cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
656 cmd.resp_type = MMC_RSP_R3;
660 err = mmc_send_cmd(mmc, &cmd, NULL);
666 mmc->version = MMC_VERSION_UNKNOWN;
667 mmc->ocr = cmd.response[0];
669 mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
676 int mmc_send_ext_csd(struct mmc *mmc, char *ext_csd)
679 struct mmc_data data;
682 /* Get the Card Status Register */
683 cmd.cmdidx = MMC_CMD_SEND_EXT_CSD;
684 cmd.resp_type = MMC_RSP_R1;
690 data.blocksize = 512;
691 data.flags = MMC_DATA_READ;
693 err = mmc_send_cmd(mmc, &cmd, &data);
699 int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)
705 cmd.cmdidx = MMC_CMD_SWITCH;
706 cmd.resp_type = MMC_RSP_R1b;
707 cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
712 ret = mmc_send_cmd(mmc, &cmd, NULL);
714 /* Waiting for the ready status */
716 ret = mmc_send_status(mmc, timeout);
722 int mmc_change_freq(struct mmc *mmc)
724 ALLOC_CACHE_ALIGN_BUFFER(char, ext_csd, 512);
730 if (mmc_host_is_spi(mmc))
733 /* Only version 4 supports high-speed */
734 if (mmc->version < MMC_VERSION_4)
737 err = mmc_send_ext_csd(mmc, ext_csd);
742 cardtype = ext_csd[EXT_CSD_CARD_TYPE] & 0xf;
744 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING, 1);
749 /* Now check to see that it worked */
750 err = mmc_send_ext_csd(mmc, ext_csd);
755 /* No high-speed support */
756 if (!ext_csd[EXT_CSD_HS_TIMING])
759 /* High Speed is set, there are two types: 52MHz and 26MHz */
760 if (cardtype & MMC_HS_52MHZ)
761 mmc->card_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
763 mmc->card_caps |= MMC_MODE_HS;
768 int mmc_switch_part(int dev_num, unsigned int part_num)
770 struct mmc *mmc = find_mmc_device(dev_num);
775 return mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF,
776 (mmc->part_config & ~PART_ACCESS_MASK)
777 | (part_num & PART_ACCESS_MASK));
780 int mmc_getcd(struct mmc *mmc)
784 cd = board_mmc_getcd(mmc);
786 if ((cd < 0) && mmc->getcd)
787 cd = mmc->getcd(mmc);
792 int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)
795 struct mmc_data data;
797 /* Switch the frequency */
798 cmd.cmdidx = SD_CMD_SWITCH_FUNC;
799 cmd.resp_type = MMC_RSP_R1;
800 cmd.cmdarg = (mode << 31) | 0xffffff;
801 cmd.cmdarg &= ~(0xf << (group * 4));
802 cmd.cmdarg |= value << (group * 4);
805 data.dest = (char *)resp;
808 data.flags = MMC_DATA_READ;
810 return mmc_send_cmd(mmc, &cmd, &data);
814 int sd_change_freq(struct mmc *mmc)
818 ALLOC_CACHE_ALIGN_BUFFER(uint, scr, 2);
819 ALLOC_CACHE_ALIGN_BUFFER(uint, switch_status, 16);
820 struct mmc_data data;
825 if (mmc_host_is_spi(mmc))
828 /* Read the SCR to find out if this card supports higher speeds */
829 cmd.cmdidx = MMC_CMD_APP_CMD;
830 cmd.resp_type = MMC_RSP_R1;
831 cmd.cmdarg = mmc->rca << 16;
834 err = mmc_send_cmd(mmc, &cmd, NULL);
839 cmd.cmdidx = SD_CMD_APP_SEND_SCR;
840 cmd.resp_type = MMC_RSP_R1;
847 data.dest = (char *)scr;
850 data.flags = MMC_DATA_READ;
852 err = mmc_send_cmd(mmc, &cmd, &data);
861 mmc->scr[0] = __be32_to_cpu(scr[0]);
862 mmc->scr[1] = __be32_to_cpu(scr[1]);
864 switch ((mmc->scr[0] >> 24) & 0xf) {
866 mmc->version = SD_VERSION_1_0;
869 mmc->version = SD_VERSION_1_10;
872 mmc->version = SD_VERSION_2;
875 mmc->version = SD_VERSION_1_0;
879 if (mmc->scr[0] & SD_DATA_4BIT)
880 mmc->card_caps |= MMC_MODE_4BIT;
882 /* Version 1.0 doesn't support switching */
883 if (mmc->version == SD_VERSION_1_0)
888 err = sd_switch(mmc, SD_SWITCH_CHECK, 0, 1,
889 (u8 *)switch_status);
894 /* The high-speed function is busy. Try again */
895 if (!(__be32_to_cpu(switch_status[7]) & SD_HIGHSPEED_BUSY))
899 /* If high-speed isn't supported, we return */
900 if (!(__be32_to_cpu(switch_status[3]) & SD_HIGHSPEED_SUPPORTED))
904 * If the host doesn't support SD_HIGHSPEED, do not switch card to
905 * HIGHSPEED mode even if the card support SD_HIGHSPPED.
906 * This can avoid furthur problem when the card runs in different
907 * mode between the host.
909 if (!((mmc->host_caps & MMC_MODE_HS_52MHz) &&
910 (mmc->host_caps & MMC_MODE_HS)))
913 err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, 1, (u8 *)switch_status);
918 if ((__be32_to_cpu(switch_status[4]) & 0x0f000000) == 0x01000000)
919 mmc->card_caps |= MMC_MODE_HS;
924 /* frequency bases */
925 /* divided by 10 to be nice to platforms without floating point */
926 static const int fbase[] = {
933 /* Multiplier values for TRAN_SPEED. Multiplied by 10 to be nice
934 * to platforms without floating point.
936 static const int multipliers[] = {
955 void mmc_set_ios(struct mmc *mmc)
960 void mmc_set_clock(struct mmc *mmc, uint clock)
962 if (clock > mmc->f_max)
965 if (clock < mmc->f_min)
973 void mmc_set_bus_width(struct mmc *mmc, uint width)
975 mmc->bus_width = width;
980 int mmc_startup(struct mmc *mmc)
984 u64 cmult, csize, capacity;
986 ALLOC_CACHE_ALIGN_BUFFER(char, ext_csd, 512);
987 ALLOC_CACHE_ALIGN_BUFFER(char, test_csd, 512);
990 #ifdef CONFIG_MMC_SPI_CRC_ON
991 if (mmc_host_is_spi(mmc)) { /* enable CRC check for spi */
992 cmd.cmdidx = MMC_CMD_SPI_CRC_ON_OFF;
993 cmd.resp_type = MMC_RSP_R1;
996 err = mmc_send_cmd(mmc, &cmd, NULL);
1003 /* Put the Card in Identify Mode */
1004 cmd.cmdidx = mmc_host_is_spi(mmc) ? MMC_CMD_SEND_CID :
1005 MMC_CMD_ALL_SEND_CID; /* cmd not supported in spi */
1006 cmd.resp_type = MMC_RSP_R2;
1010 err = mmc_send_cmd(mmc, &cmd, NULL);
1015 memcpy(mmc->cid, cmd.response, 16);
1018 * For MMC cards, set the Relative Address.
1019 * For SD cards, get the Relatvie Address.
1020 * This also puts the cards into Standby State
1022 if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
1023 cmd.cmdidx = SD_CMD_SEND_RELATIVE_ADDR;
1024 cmd.cmdarg = mmc->rca << 16;
1025 cmd.resp_type = MMC_RSP_R6;
1028 err = mmc_send_cmd(mmc, &cmd, NULL);
1034 mmc->rca = (cmd.response[0] >> 16) & 0xffff;
1037 /* Get the Card-Specific Data */
1038 cmd.cmdidx = MMC_CMD_SEND_CSD;
1039 cmd.resp_type = MMC_RSP_R2;
1040 cmd.cmdarg = mmc->rca << 16;
1043 err = mmc_send_cmd(mmc, &cmd, NULL);
1045 /* Waiting for the ready status */
1046 mmc_send_status(mmc, timeout);
1051 mmc->csd[0] = cmd.response[0];
1052 mmc->csd[1] = cmd.response[1];
1053 mmc->csd[2] = cmd.response[2];
1054 mmc->csd[3] = cmd.response[3];
1056 if (mmc->version == MMC_VERSION_UNKNOWN) {
1057 int version = (cmd.response[0] >> 26) & 0xf;
1061 mmc->version = MMC_VERSION_1_2;
1064 mmc->version = MMC_VERSION_1_4;
1067 mmc->version = MMC_VERSION_2_2;
1070 mmc->version = MMC_VERSION_3;
1073 mmc->version = MMC_VERSION_4;
1076 mmc->version = MMC_VERSION_1_2;
1081 /* divide frequency by 10, since the mults are 10x bigger */
1082 freq = fbase[(cmd.response[0] & 0x7)];
1083 mult = multipliers[((cmd.response[0] >> 3) & 0xf)];
1085 mmc->tran_speed = freq * mult;
1087 mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf);
1090 mmc->write_bl_len = mmc->read_bl_len;
1092 mmc->write_bl_len = 1 << ((cmd.response[3] >> 22) & 0xf);
1094 if (mmc->high_capacity) {
1095 csize = (mmc->csd[1] & 0x3f) << 16
1096 | (mmc->csd[2] & 0xffff0000) >> 16;
1099 csize = (mmc->csd[1] & 0x3ff) << 2
1100 | (mmc->csd[2] & 0xc0000000) >> 30;
1101 cmult = (mmc->csd[2] & 0x00038000) >> 15;
1104 mmc->capacity = (csize + 1) << (cmult + 2);
1105 mmc->capacity *= mmc->read_bl_len;
1107 if (mmc->read_bl_len > 512)
1108 mmc->read_bl_len = 512;
1110 if (mmc->write_bl_len > 512)
1111 mmc->write_bl_len = 512;
1113 /* Select the card, and put it into Transfer Mode */
1114 if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
1115 cmd.cmdidx = MMC_CMD_SELECT_CARD;
1116 cmd.resp_type = MMC_RSP_R1;
1117 cmd.cmdarg = mmc->rca << 16;
1119 err = mmc_send_cmd(mmc, &cmd, NULL);
1126 * For SD, its erase group is always one sector
1128 mmc->erase_grp_size = 1;
1129 mmc->part_config = MMCPART_NOAVAILABLE;
1130 if (!IS_SD(mmc) && (mmc->version >= MMC_VERSION_4)) {
1131 /* check ext_csd version and capacity */
1132 err = mmc_send_ext_csd(mmc, ext_csd);
1133 if (!err & (ext_csd[EXT_CSD_REV] >= 2)) {
1135 * According to the JEDEC Standard, the value of
1136 * ext_csd's capacity is valid if the value is more
1139 capacity = ext_csd[EXT_CSD_SEC_CNT] << 0
1140 | ext_csd[EXT_CSD_SEC_CNT + 1] << 8
1141 | ext_csd[EXT_CSD_SEC_CNT + 2] << 16
1142 | ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
1144 if ((capacity >> 20) > 2 * 1024)
1145 mmc->capacity = capacity;
1149 * Check whether GROUP_DEF is set, if yes, read out
1150 * group size from ext_csd directly, or calculate
1151 * the group size from the csd value.
1153 if (ext_csd[EXT_CSD_ERASE_GROUP_DEF])
1154 mmc->erase_grp_size =
1155 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 512 * 1024;
1157 int erase_gsz, erase_gmul;
1158 erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10;
1159 erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5;
1160 mmc->erase_grp_size = (erase_gsz + 1)
1164 /* store the partition info of emmc */
1165 if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) ||
1166 ext_csd[EXT_CSD_BOOT_MULT])
1167 mmc->part_config = ext_csd[EXT_CSD_PART_CONF];
1171 err = sd_change_freq(mmc);
1173 err = mmc_change_freq(mmc);
1178 /* Restrict card's capabilities by what the host can do */
1179 mmc->card_caps &= mmc->host_caps;
1182 if (mmc->card_caps & MMC_MODE_4BIT) {
1183 cmd.cmdidx = MMC_CMD_APP_CMD;
1184 cmd.resp_type = MMC_RSP_R1;
1185 cmd.cmdarg = mmc->rca << 16;
1188 err = mmc_send_cmd(mmc, &cmd, NULL);
1192 cmd.cmdidx = SD_CMD_APP_SET_BUS_WIDTH;
1193 cmd.resp_type = MMC_RSP_R1;
1196 err = mmc_send_cmd(mmc, &cmd, NULL);
1200 mmc_set_bus_width(mmc, 4);
1203 if (mmc->card_caps & MMC_MODE_HS)
1204 mmc->tran_speed = 50000000;
1206 mmc->tran_speed = 25000000;
1208 width = ((mmc->host_caps & MMC_MODE_MASK_WIDTH_BITS) >>
1209 MMC_MODE_WIDTH_BITS_SHIFT);
1210 for (; width >= 0; width--) {
1211 /* Set the card to use 4 bit*/
1212 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1213 EXT_CSD_BUS_WIDTH, width);
1219 mmc_set_bus_width(mmc, 1);
1222 mmc_set_bus_width(mmc, 4 * width);
1224 err = mmc_send_ext_csd(mmc, test_csd);
1225 if (!err && ext_csd[EXT_CSD_PARTITIONING_SUPPORT] \
1226 == test_csd[EXT_CSD_PARTITIONING_SUPPORT]
1227 && ext_csd[EXT_CSD_ERASE_GROUP_DEF] \
1228 == test_csd[EXT_CSD_ERASE_GROUP_DEF] \
1229 && ext_csd[EXT_CSD_REV] \
1230 == test_csd[EXT_CSD_REV]
1231 && ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] \
1232 == test_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
1233 && memcmp(&ext_csd[EXT_CSD_SEC_CNT], \
1234 &test_csd[EXT_CSD_SEC_CNT], 4) == 0) {
1236 mmc->card_caps |= width;
1241 if (mmc->card_caps & MMC_MODE_HS) {
1242 if (mmc->card_caps & MMC_MODE_HS_52MHz)
1243 mmc->tran_speed = 52000000;
1245 mmc->tran_speed = 26000000;
1249 mmc_set_clock(mmc, mmc->tran_speed);
1251 /* fill in device description */
1252 mmc->block_dev.lun = 0;
1253 mmc->block_dev.type = 0;
1254 mmc->block_dev.blksz = mmc->read_bl_len;
1255 mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);
1256 sprintf(mmc->block_dev.vendor, "Man %06x Snr %08x", mmc->cid[0] >> 8,
1257 (mmc->cid[2] << 8) | (mmc->cid[3] >> 24));
1258 sprintf(mmc->block_dev.product, "%c%c%c%c%c", mmc->cid[0] & 0xff,
1259 (mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
1260 (mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff);
1261 sprintf(mmc->block_dev.revision, "%d.%d", mmc->cid[2] >> 28,
1262 (mmc->cid[2] >> 24) & 0xf);
1263 init_part(&mmc->block_dev);
1268 int mmc_send_if_cond(struct mmc *mmc)
1273 cmd.cmdidx = SD_CMD_SEND_IF_COND;
1274 /* We set the bit if the host supports voltages between 2.7 and 3.6 V */
1275 cmd.cmdarg = ((mmc->voltages & 0xff8000) != 0) << 8 | 0xaa;
1276 cmd.resp_type = MMC_RSP_R7;
1279 err = mmc_send_cmd(mmc, &cmd, NULL);
1284 if ((cmd.response[0] & 0xff) != 0xaa)
1285 return UNUSABLE_ERR;
1287 mmc->version = SD_VERSION_2;
1292 int mmc_register(struct mmc *mmc)
1294 /* Setup the universal parts of the block interface just once */
1295 mmc->block_dev.if_type = IF_TYPE_MMC;
1296 mmc->block_dev.dev = cur_dev_num++;
1297 mmc->block_dev.removable = 1;
1298 mmc->block_dev.block_read = mmc_bread;
1299 mmc->block_dev.block_write = mmc_bwrite;
1300 mmc->block_dev.block_erase = mmc_berase;
1302 mmc->b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
1304 INIT_LIST_HEAD (&mmc->link);
1306 list_add_tail (&mmc->link, &mmc_devices);
1311 #ifdef CONFIG_PARTITIONS
1312 block_dev_desc_t *mmc_get_dev(int dev)
1314 struct mmc *mmc = find_mmc_device(dev);
1319 return &mmc->block_dev;
1323 int mmc_init(struct mmc *mmc)
1327 if (mmc_getcd(mmc) == 0) {
1329 printf("MMC: no card present\n");
1336 err = mmc->init(mmc);
1341 mmc_set_bus_width(mmc, 1);
1342 mmc_set_clock(mmc, 1);
1344 /* Reset the Card */
1345 err = mmc_go_idle(mmc);
1350 /* The internal partition reset to user partition(0) at every CMD0*/
1353 /* Test for SD version 2 */
1354 err = mmc_send_if_cond(mmc);
1356 /* Now try to get the SD card's operating condition */
1357 err = sd_send_op_cond(mmc);
1359 /* If the command timed out, we check for an MMC card */
1360 if (err == TIMEOUT) {
1361 err = mmc_send_op_cond(mmc);
1364 printf("Card did not respond to voltage select!\n");
1365 return UNUSABLE_ERR;
1369 err = mmc_startup(mmc);
1378 * CPU and board-specific MMC initializations. Aliased function
1379 * signals caller to move on
1381 static int __def_mmc_init(bd_t *bis)
1386 int cpu_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
1387 int board_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
1389 void print_mmc_devices(char separator)
1392 struct list_head *entry;
1394 list_for_each(entry, &mmc_devices) {
1395 m = list_entry(entry, struct mmc, link);
1397 printf("%s: %d", m->name, m->block_dev.dev);
1399 if (entry->next != &mmc_devices)
1400 printf("%c ", separator);
1406 int get_mmc_num(void)
1411 int mmc_initialize(bd_t *bis)
1413 INIT_LIST_HEAD (&mmc_devices);
1416 if (board_mmc_init(bis) < 0)
1419 print_mmc_devices(',');