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