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