1 /* 2 * Copyright 2008, Freescale Semiconductor, Inc 3 * Andy Fleming 4 * 5 * Based vaguely on the Linux code 6 * 7 * SPDX-License-Identifier: GPL-2.0+ 8 */ 9 10 #include <config.h> 11 #include <common.h> 12 #include <command.h> 13 #include <dm.h> 14 #include <dm/device-internal.h> 15 #include <errno.h> 16 #include <mmc.h> 17 #include <part.h> 18 #include <malloc.h> 19 #include <memalign.h> 20 #include <linux/list.h> 21 #include <div64.h> 22 #include "mmc_private.h" 23 24 static struct list_head mmc_devices; 25 static int cur_dev_num = -1; 26 27 __weak int board_mmc_getwp(struct mmc *mmc) 28 { 29 return -1; 30 } 31 32 int mmc_getwp(struct mmc *mmc) 33 { 34 int wp; 35 36 wp = board_mmc_getwp(mmc); 37 38 if (wp < 0) { 39 if (mmc->cfg->ops->getwp) 40 wp = mmc->cfg->ops->getwp(mmc); 41 else 42 wp = 0; 43 } 44 45 return wp; 46 } 47 48 __weak int board_mmc_getcd(struct mmc *mmc) 49 { 50 return -1; 51 } 52 53 int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data) 54 { 55 int ret; 56 57 #ifdef CONFIG_MMC_TRACE 58 int i; 59 u8 *ptr; 60 61 printf("CMD_SEND:%d\n", cmd->cmdidx); 62 printf("\t\tARG\t\t\t 0x%08X\n", cmd->cmdarg); 63 ret = mmc->cfg->ops->send_cmd(mmc, cmd, data); 64 if (ret) { 65 printf("\t\tRET\t\t\t %d\n", ret); 66 } else { 67 switch (cmd->resp_type) { 68 case MMC_RSP_NONE: 69 printf("\t\tMMC_RSP_NONE\n"); 70 break; 71 case MMC_RSP_R1: 72 printf("\t\tMMC_RSP_R1,5,6,7 \t 0x%08X \n", 73 cmd->response[0]); 74 break; 75 case MMC_RSP_R1b: 76 printf("\t\tMMC_RSP_R1b\t\t 0x%08X \n", 77 cmd->response[0]); 78 break; 79 case MMC_RSP_R2: 80 printf("\t\tMMC_RSP_R2\t\t 0x%08X \n", 81 cmd->response[0]); 82 printf("\t\t \t\t 0x%08X \n", 83 cmd->response[1]); 84 printf("\t\t \t\t 0x%08X \n", 85 cmd->response[2]); 86 printf("\t\t \t\t 0x%08X \n", 87 cmd->response[3]); 88 printf("\n"); 89 printf("\t\t\t\t\tDUMPING DATA\n"); 90 for (i = 0; i < 4; i++) { 91 int j; 92 printf("\t\t\t\t\t%03d - ", i*4); 93 ptr = (u8 *)&cmd->response[i]; 94 ptr += 3; 95 for (j = 0; j < 4; j++) 96 printf("%02X ", *ptr--); 97 printf("\n"); 98 } 99 break; 100 case MMC_RSP_R3: 101 printf("\t\tMMC_RSP_R3,4\t\t 0x%08X \n", 102 cmd->response[0]); 103 break; 104 default: 105 printf("\t\tERROR MMC rsp not supported\n"); 106 break; 107 } 108 } 109 #else 110 ret = mmc->cfg->ops->send_cmd(mmc, cmd, data); 111 #endif 112 return ret; 113 } 114 115 int mmc_send_status(struct mmc *mmc, int timeout) 116 { 117 struct mmc_cmd cmd; 118 int err, retries = 5; 119 #ifdef CONFIG_MMC_TRACE 120 int status; 121 #endif 122 123 cmd.cmdidx = MMC_CMD_SEND_STATUS; 124 cmd.resp_type = MMC_RSP_R1; 125 if (!mmc_host_is_spi(mmc)) 126 cmd.cmdarg = mmc->rca << 16; 127 128 while (1) { 129 err = mmc_send_cmd(mmc, &cmd, NULL); 130 if (!err) { 131 if ((cmd.response[0] & MMC_STATUS_RDY_FOR_DATA) && 132 (cmd.response[0] & MMC_STATUS_CURR_STATE) != 133 MMC_STATE_PRG) 134 break; 135 else if (cmd.response[0] & MMC_STATUS_MASK) { 136 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) 137 printf("Status Error: 0x%08X\n", 138 cmd.response[0]); 139 #endif 140 return COMM_ERR; 141 } 142 } else if (--retries < 0) 143 return err; 144 145 if (timeout-- <= 0) 146 break; 147 148 udelay(1000); 149 } 150 151 #ifdef CONFIG_MMC_TRACE 152 status = (cmd.response[0] & MMC_STATUS_CURR_STATE) >> 9; 153 printf("CURR STATE:%d\n", status); 154 #endif 155 if (timeout <= 0) { 156 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) 157 printf("Timeout waiting card ready\n"); 158 #endif 159 return TIMEOUT; 160 } 161 if (cmd.response[0] & MMC_STATUS_SWITCH_ERROR) 162 return SWITCH_ERR; 163 164 return 0; 165 } 166 167 int mmc_set_blocklen(struct mmc *mmc, int len) 168 { 169 struct mmc_cmd cmd; 170 171 if (mmc->ddr_mode) 172 return 0; 173 174 cmd.cmdidx = MMC_CMD_SET_BLOCKLEN; 175 cmd.resp_type = MMC_RSP_R1; 176 cmd.cmdarg = len; 177 178 return mmc_send_cmd(mmc, &cmd, NULL); 179 } 180 181 struct mmc *find_mmc_device(int dev_num) 182 { 183 struct mmc *m; 184 struct list_head *entry; 185 186 list_for_each(entry, &mmc_devices) { 187 m = list_entry(entry, struct mmc, link); 188 189 if (m->block_dev.devnum == dev_num) 190 return m; 191 } 192 193 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) 194 printf("MMC Device %d not found\n", dev_num); 195 #endif 196 197 return NULL; 198 } 199 200 static int mmc_read_blocks(struct mmc *mmc, void *dst, lbaint_t start, 201 lbaint_t blkcnt) 202 { 203 struct mmc_cmd cmd; 204 struct mmc_data data; 205 206 if (blkcnt > 1) 207 cmd.cmdidx = MMC_CMD_READ_MULTIPLE_BLOCK; 208 else 209 cmd.cmdidx = MMC_CMD_READ_SINGLE_BLOCK; 210 211 if (mmc->high_capacity) 212 cmd.cmdarg = start; 213 else 214 cmd.cmdarg = start * mmc->read_bl_len; 215 216 cmd.resp_type = MMC_RSP_R1; 217 218 data.dest = dst; 219 data.blocks = blkcnt; 220 data.blocksize = mmc->read_bl_len; 221 data.flags = MMC_DATA_READ; 222 223 if (mmc_send_cmd(mmc, &cmd, &data)) 224 return 0; 225 226 if (blkcnt > 1) { 227 cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION; 228 cmd.cmdarg = 0; 229 cmd.resp_type = MMC_RSP_R1b; 230 if (mmc_send_cmd(mmc, &cmd, NULL)) { 231 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) 232 printf("mmc fail to send stop cmd\n"); 233 #endif 234 return 0; 235 } 236 } 237 238 return blkcnt; 239 } 240 241 static ulong mmc_bread(struct blk_desc *block_dev, lbaint_t start, 242 lbaint_t blkcnt, void *dst) 243 { 244 int dev_num = block_dev->devnum; 245 int err; 246 lbaint_t cur, blocks_todo = blkcnt; 247 248 if (blkcnt == 0) 249 return 0; 250 251 struct mmc *mmc = find_mmc_device(dev_num); 252 if (!mmc) 253 return 0; 254 255 err = mmc_select_hwpart(dev_num, block_dev->hwpart); 256 if (err < 0) 257 return 0; 258 259 if ((start + blkcnt) > mmc->block_dev.lba) { 260 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) 261 printf("MMC: block number 0x" LBAF " exceeds max(0x" LBAF ")\n", 262 start + blkcnt, mmc->block_dev.lba); 263 #endif 264 return 0; 265 } 266 267 if (mmc_set_blocklen(mmc, mmc->read_bl_len)) { 268 debug("%s: Failed to set blocklen\n", __func__); 269 return 0; 270 } 271 272 do { 273 cur = (blocks_todo > mmc->cfg->b_max) ? 274 mmc->cfg->b_max : blocks_todo; 275 if (mmc_read_blocks(mmc, dst, start, cur) != cur) { 276 debug("%s: Failed to read blocks\n", __func__); 277 return 0; 278 } 279 blocks_todo -= cur; 280 start += cur; 281 dst += cur * mmc->read_bl_len; 282 } while (blocks_todo > 0); 283 284 return blkcnt; 285 } 286 287 static int mmc_go_idle(struct mmc *mmc) 288 { 289 struct mmc_cmd cmd; 290 int err; 291 292 udelay(1000); 293 294 cmd.cmdidx = MMC_CMD_GO_IDLE_STATE; 295 cmd.cmdarg = 0; 296 cmd.resp_type = MMC_RSP_NONE; 297 298 err = mmc_send_cmd(mmc, &cmd, NULL); 299 300 if (err) 301 return err; 302 303 udelay(2000); 304 305 return 0; 306 } 307 308 static int sd_send_op_cond(struct mmc *mmc) 309 { 310 int timeout = 1000; 311 int err; 312 struct mmc_cmd cmd; 313 314 while (1) { 315 cmd.cmdidx = MMC_CMD_APP_CMD; 316 cmd.resp_type = MMC_RSP_R1; 317 cmd.cmdarg = 0; 318 319 err = mmc_send_cmd(mmc, &cmd, NULL); 320 321 if (err) 322 return err; 323 324 cmd.cmdidx = SD_CMD_APP_SEND_OP_COND; 325 cmd.resp_type = MMC_RSP_R3; 326 327 /* 328 * Most cards do not answer if some reserved bits 329 * in the ocr are set. However, Some controller 330 * can set bit 7 (reserved for low voltages), but 331 * how to manage low voltages SD card is not yet 332 * specified. 333 */ 334 cmd.cmdarg = mmc_host_is_spi(mmc) ? 0 : 335 (mmc->cfg->voltages & 0xff8000); 336 337 if (mmc->version == SD_VERSION_2) 338 cmd.cmdarg |= OCR_HCS; 339 340 err = mmc_send_cmd(mmc, &cmd, NULL); 341 342 if (err) 343 return err; 344 345 if (cmd.response[0] & OCR_BUSY) 346 break; 347 348 if (timeout-- <= 0) 349 return UNUSABLE_ERR; 350 351 udelay(1000); 352 } 353 354 if (mmc->version != SD_VERSION_2) 355 mmc->version = SD_VERSION_1_0; 356 357 if (mmc_host_is_spi(mmc)) { /* read OCR for spi */ 358 cmd.cmdidx = MMC_CMD_SPI_READ_OCR; 359 cmd.resp_type = MMC_RSP_R3; 360 cmd.cmdarg = 0; 361 362 err = mmc_send_cmd(mmc, &cmd, NULL); 363 364 if (err) 365 return err; 366 } 367 368 mmc->ocr = cmd.response[0]; 369 370 mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS); 371 mmc->rca = 0; 372 373 return 0; 374 } 375 376 static int mmc_send_op_cond_iter(struct mmc *mmc, int use_arg) 377 { 378 struct mmc_cmd cmd; 379 int err; 380 381 cmd.cmdidx = MMC_CMD_SEND_OP_COND; 382 cmd.resp_type = MMC_RSP_R3; 383 cmd.cmdarg = 0; 384 if (use_arg && !mmc_host_is_spi(mmc)) 385 cmd.cmdarg = OCR_HCS | 386 (mmc->cfg->voltages & 387 (mmc->ocr & OCR_VOLTAGE_MASK)) | 388 (mmc->ocr & OCR_ACCESS_MODE); 389 390 err = mmc_send_cmd(mmc, &cmd, NULL); 391 if (err) 392 return err; 393 mmc->ocr = cmd.response[0]; 394 return 0; 395 } 396 397 static int mmc_send_op_cond(struct mmc *mmc) 398 { 399 int err, i; 400 401 /* Some cards seem to need this */ 402 mmc_go_idle(mmc); 403 404 /* Asking to the card its capabilities */ 405 for (i = 0; i < 2; i++) { 406 err = mmc_send_op_cond_iter(mmc, i != 0); 407 if (err) 408 return err; 409 410 /* exit if not busy (flag seems to be inverted) */ 411 if (mmc->ocr & OCR_BUSY) 412 break; 413 } 414 mmc->op_cond_pending = 1; 415 return 0; 416 } 417 418 static int mmc_complete_op_cond(struct mmc *mmc) 419 { 420 struct mmc_cmd cmd; 421 int timeout = 1000; 422 uint start; 423 int err; 424 425 mmc->op_cond_pending = 0; 426 if (!(mmc->ocr & OCR_BUSY)) { 427 start = get_timer(0); 428 while (1) { 429 err = mmc_send_op_cond_iter(mmc, 1); 430 if (err) 431 return err; 432 if (mmc->ocr & OCR_BUSY) 433 break; 434 if (get_timer(start) > timeout) 435 return UNUSABLE_ERR; 436 udelay(100); 437 } 438 } 439 440 if (mmc_host_is_spi(mmc)) { /* read OCR for spi */ 441 cmd.cmdidx = MMC_CMD_SPI_READ_OCR; 442 cmd.resp_type = MMC_RSP_R3; 443 cmd.cmdarg = 0; 444 445 err = mmc_send_cmd(mmc, &cmd, NULL); 446 447 if (err) 448 return err; 449 450 mmc->ocr = cmd.response[0]; 451 } 452 453 mmc->version = MMC_VERSION_UNKNOWN; 454 455 mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS); 456 mmc->rca = 1; 457 458 return 0; 459 } 460 461 462 static int mmc_send_ext_csd(struct mmc *mmc, u8 *ext_csd) 463 { 464 struct mmc_cmd cmd; 465 struct mmc_data data; 466 int err; 467 468 /* Get the Card Status Register */ 469 cmd.cmdidx = MMC_CMD_SEND_EXT_CSD; 470 cmd.resp_type = MMC_RSP_R1; 471 cmd.cmdarg = 0; 472 473 data.dest = (char *)ext_csd; 474 data.blocks = 1; 475 data.blocksize = MMC_MAX_BLOCK_LEN; 476 data.flags = MMC_DATA_READ; 477 478 err = mmc_send_cmd(mmc, &cmd, &data); 479 480 return err; 481 } 482 483 484 static int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value) 485 { 486 struct mmc_cmd cmd; 487 int timeout = 1000; 488 int ret; 489 490 cmd.cmdidx = MMC_CMD_SWITCH; 491 cmd.resp_type = MMC_RSP_R1b; 492 cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) | 493 (index << 16) | 494 (value << 8); 495 496 ret = mmc_send_cmd(mmc, &cmd, NULL); 497 498 /* Waiting for the ready status */ 499 if (!ret) 500 ret = mmc_send_status(mmc, timeout); 501 502 return ret; 503 504 } 505 506 static int mmc_change_freq(struct mmc *mmc) 507 { 508 ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN); 509 char cardtype; 510 int err; 511 512 mmc->card_caps = 0; 513 514 if (mmc_host_is_spi(mmc)) 515 return 0; 516 517 /* Only version 4 supports high-speed */ 518 if (mmc->version < MMC_VERSION_4) 519 return 0; 520 521 mmc->card_caps |= MMC_MODE_4BIT | MMC_MODE_8BIT; 522 523 err = mmc_send_ext_csd(mmc, ext_csd); 524 525 if (err) 526 return err; 527 528 cardtype = ext_csd[EXT_CSD_CARD_TYPE] & 0xf; 529 530 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING, 1); 531 532 if (err) 533 return err == SWITCH_ERR ? 0 : err; 534 535 /* Now check to see that it worked */ 536 err = mmc_send_ext_csd(mmc, ext_csd); 537 538 if (err) 539 return err; 540 541 /* No high-speed support */ 542 if (!ext_csd[EXT_CSD_HS_TIMING]) 543 return 0; 544 545 /* High Speed is set, there are two types: 52MHz and 26MHz */ 546 if (cardtype & EXT_CSD_CARD_TYPE_52) { 547 if (cardtype & EXT_CSD_CARD_TYPE_DDR_1_8V) 548 mmc->card_caps |= MMC_MODE_DDR_52MHz; 549 mmc->card_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS; 550 } else { 551 mmc->card_caps |= MMC_MODE_HS; 552 } 553 554 return 0; 555 } 556 557 static int mmc_set_capacity(struct mmc *mmc, int part_num) 558 { 559 switch (part_num) { 560 case 0: 561 mmc->capacity = mmc->capacity_user; 562 break; 563 case 1: 564 case 2: 565 mmc->capacity = mmc->capacity_boot; 566 break; 567 case 3: 568 mmc->capacity = mmc->capacity_rpmb; 569 break; 570 case 4: 571 case 5: 572 case 6: 573 case 7: 574 mmc->capacity = mmc->capacity_gp[part_num - 4]; 575 break; 576 default: 577 return -1; 578 } 579 580 mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len); 581 582 return 0; 583 } 584 585 int mmc_select_hwpart(int dev_num, int hwpart) 586 { 587 struct mmc *mmc = find_mmc_device(dev_num); 588 int ret; 589 590 if (!mmc) 591 return -ENODEV; 592 593 if (mmc->block_dev.hwpart == hwpart) 594 return 0; 595 596 if (mmc->part_config == MMCPART_NOAVAILABLE) { 597 printf("Card doesn't support part_switch\n"); 598 return -EMEDIUMTYPE; 599 } 600 601 ret = mmc_switch_part(dev_num, hwpart); 602 if (ret) 603 return ret; 604 605 return 0; 606 } 607 608 609 int mmc_switch_part(int dev_num, unsigned int part_num) 610 { 611 struct mmc *mmc = find_mmc_device(dev_num); 612 int ret; 613 614 if (!mmc) 615 return -1; 616 617 ret = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF, 618 (mmc->part_config & ~PART_ACCESS_MASK) 619 | (part_num & PART_ACCESS_MASK)); 620 621 /* 622 * Set the capacity if the switch succeeded or was intended 623 * to return to representing the raw device. 624 */ 625 if ((ret == 0) || ((ret == -ENODEV) && (part_num == 0))) { 626 ret = mmc_set_capacity(mmc, part_num); 627 mmc->block_dev.hwpart = part_num; 628 } 629 630 return ret; 631 } 632 633 int mmc_hwpart_config(struct mmc *mmc, 634 const struct mmc_hwpart_conf *conf, 635 enum mmc_hwpart_conf_mode mode) 636 { 637 u8 part_attrs = 0; 638 u32 enh_size_mult; 639 u32 enh_start_addr; 640 u32 gp_size_mult[4]; 641 u32 max_enh_size_mult; 642 u32 tot_enh_size_mult = 0; 643 u8 wr_rel_set; 644 int i, pidx, err; 645 ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN); 646 647 if (mode < MMC_HWPART_CONF_CHECK || mode > MMC_HWPART_CONF_COMPLETE) 648 return -EINVAL; 649 650 if (IS_SD(mmc) || (mmc->version < MMC_VERSION_4_41)) { 651 printf("eMMC >= 4.4 required for enhanced user data area\n"); 652 return -EMEDIUMTYPE; 653 } 654 655 if (!(mmc->part_support & PART_SUPPORT)) { 656 printf("Card does not support partitioning\n"); 657 return -EMEDIUMTYPE; 658 } 659 660 if (!mmc->hc_wp_grp_size) { 661 printf("Card does not define HC WP group size\n"); 662 return -EMEDIUMTYPE; 663 } 664 665 /* check partition alignment and total enhanced size */ 666 if (conf->user.enh_size) { 667 if (conf->user.enh_size % mmc->hc_wp_grp_size || 668 conf->user.enh_start % mmc->hc_wp_grp_size) { 669 printf("User data enhanced area not HC WP group " 670 "size aligned\n"); 671 return -EINVAL; 672 } 673 part_attrs |= EXT_CSD_ENH_USR; 674 enh_size_mult = conf->user.enh_size / mmc->hc_wp_grp_size; 675 if (mmc->high_capacity) { 676 enh_start_addr = conf->user.enh_start; 677 } else { 678 enh_start_addr = (conf->user.enh_start << 9); 679 } 680 } else { 681 enh_size_mult = 0; 682 enh_start_addr = 0; 683 } 684 tot_enh_size_mult += enh_size_mult; 685 686 for (pidx = 0; pidx < 4; pidx++) { 687 if (conf->gp_part[pidx].size % mmc->hc_wp_grp_size) { 688 printf("GP%i partition not HC WP group size " 689 "aligned\n", pidx+1); 690 return -EINVAL; 691 } 692 gp_size_mult[pidx] = conf->gp_part[pidx].size / mmc->hc_wp_grp_size; 693 if (conf->gp_part[pidx].size && conf->gp_part[pidx].enhanced) { 694 part_attrs |= EXT_CSD_ENH_GP(pidx); 695 tot_enh_size_mult += gp_size_mult[pidx]; 696 } 697 } 698 699 if (part_attrs && ! (mmc->part_support & ENHNCD_SUPPORT)) { 700 printf("Card does not support enhanced attribute\n"); 701 return -EMEDIUMTYPE; 702 } 703 704 err = mmc_send_ext_csd(mmc, ext_csd); 705 if (err) 706 return err; 707 708 max_enh_size_mult = 709 (ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT+2] << 16) + 710 (ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT+1] << 8) + 711 ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT]; 712 if (tot_enh_size_mult > max_enh_size_mult) { 713 printf("Total enhanced size exceeds maximum (%u > %u)\n", 714 tot_enh_size_mult, max_enh_size_mult); 715 return -EMEDIUMTYPE; 716 } 717 718 /* The default value of EXT_CSD_WR_REL_SET is device 719 * dependent, the values can only be changed if the 720 * EXT_CSD_HS_CTRL_REL bit is set. The values can be 721 * changed only once and before partitioning is completed. */ 722 wr_rel_set = ext_csd[EXT_CSD_WR_REL_SET]; 723 if (conf->user.wr_rel_change) { 724 if (conf->user.wr_rel_set) 725 wr_rel_set |= EXT_CSD_WR_DATA_REL_USR; 726 else 727 wr_rel_set &= ~EXT_CSD_WR_DATA_REL_USR; 728 } 729 for (pidx = 0; pidx < 4; pidx++) { 730 if (conf->gp_part[pidx].wr_rel_change) { 731 if (conf->gp_part[pidx].wr_rel_set) 732 wr_rel_set |= EXT_CSD_WR_DATA_REL_GP(pidx); 733 else 734 wr_rel_set &= ~EXT_CSD_WR_DATA_REL_GP(pidx); 735 } 736 } 737 738 if (wr_rel_set != ext_csd[EXT_CSD_WR_REL_SET] && 739 !(ext_csd[EXT_CSD_WR_REL_PARAM] & EXT_CSD_HS_CTRL_REL)) { 740 puts("Card does not support host controlled partition write " 741 "reliability settings\n"); 742 return -EMEDIUMTYPE; 743 } 744 745 if (ext_csd[EXT_CSD_PARTITION_SETTING] & 746 EXT_CSD_PARTITION_SETTING_COMPLETED) { 747 printf("Card already partitioned\n"); 748 return -EPERM; 749 } 750 751 if (mode == MMC_HWPART_CONF_CHECK) 752 return 0; 753 754 /* Partitioning requires high-capacity size definitions */ 755 if (!(ext_csd[EXT_CSD_ERASE_GROUP_DEF] & 0x01)) { 756 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, 757 EXT_CSD_ERASE_GROUP_DEF, 1); 758 759 if (err) 760 return err; 761 762 ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1; 763 764 /* update erase group size to be high-capacity */ 765 mmc->erase_grp_size = 766 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 1024; 767 768 } 769 770 /* all OK, write the configuration */ 771 for (i = 0; i < 4; i++) { 772 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, 773 EXT_CSD_ENH_START_ADDR+i, 774 (enh_start_addr >> (i*8)) & 0xFF); 775 if (err) 776 return err; 777 } 778 for (i = 0; i < 3; i++) { 779 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, 780 EXT_CSD_ENH_SIZE_MULT+i, 781 (enh_size_mult >> (i*8)) & 0xFF); 782 if (err) 783 return err; 784 } 785 for (pidx = 0; pidx < 4; pidx++) { 786 for (i = 0; i < 3; i++) { 787 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, 788 EXT_CSD_GP_SIZE_MULT+pidx*3+i, 789 (gp_size_mult[pidx] >> (i*8)) & 0xFF); 790 if (err) 791 return err; 792 } 793 } 794 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, 795 EXT_CSD_PARTITIONS_ATTRIBUTE, part_attrs); 796 if (err) 797 return err; 798 799 if (mode == MMC_HWPART_CONF_SET) 800 return 0; 801 802 /* The WR_REL_SET is a write-once register but shall be 803 * written before setting PART_SETTING_COMPLETED. As it is 804 * write-once we can only write it when completing the 805 * partitioning. */ 806 if (wr_rel_set != ext_csd[EXT_CSD_WR_REL_SET]) { 807 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, 808 EXT_CSD_WR_REL_SET, wr_rel_set); 809 if (err) 810 return err; 811 } 812 813 /* Setting PART_SETTING_COMPLETED confirms the partition 814 * configuration but it only becomes effective after power 815 * cycle, so we do not adjust the partition related settings 816 * in the mmc struct. */ 817 818 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, 819 EXT_CSD_PARTITION_SETTING, 820 EXT_CSD_PARTITION_SETTING_COMPLETED); 821 if (err) 822 return err; 823 824 return 0; 825 } 826 827 int mmc_getcd(struct mmc *mmc) 828 { 829 int cd; 830 831 cd = board_mmc_getcd(mmc); 832 833 if (cd < 0) { 834 if (mmc->cfg->ops->getcd) 835 cd = mmc->cfg->ops->getcd(mmc); 836 else 837 cd = 1; 838 } 839 840 return cd; 841 } 842 843 static int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp) 844 { 845 struct mmc_cmd cmd; 846 struct mmc_data data; 847 848 /* Switch the frequency */ 849 cmd.cmdidx = SD_CMD_SWITCH_FUNC; 850 cmd.resp_type = MMC_RSP_R1; 851 cmd.cmdarg = (mode << 31) | 0xffffff; 852 cmd.cmdarg &= ~(0xf << (group * 4)); 853 cmd.cmdarg |= value << (group * 4); 854 855 data.dest = (char *)resp; 856 data.blocksize = 64; 857 data.blocks = 1; 858 data.flags = MMC_DATA_READ; 859 860 return mmc_send_cmd(mmc, &cmd, &data); 861 } 862 863 864 static int sd_change_freq(struct mmc *mmc) 865 { 866 int err; 867 struct mmc_cmd cmd; 868 ALLOC_CACHE_ALIGN_BUFFER(uint, scr, 2); 869 ALLOC_CACHE_ALIGN_BUFFER(uint, switch_status, 16); 870 struct mmc_data data; 871 int timeout; 872 873 mmc->card_caps = 0; 874 875 if (mmc_host_is_spi(mmc)) 876 return 0; 877 878 /* Read the SCR to find out if this card supports higher speeds */ 879 cmd.cmdidx = MMC_CMD_APP_CMD; 880 cmd.resp_type = MMC_RSP_R1; 881 cmd.cmdarg = mmc->rca << 16; 882 883 err = mmc_send_cmd(mmc, &cmd, NULL); 884 885 if (err) 886 return err; 887 888 cmd.cmdidx = SD_CMD_APP_SEND_SCR; 889 cmd.resp_type = MMC_RSP_R1; 890 cmd.cmdarg = 0; 891 892 timeout = 3; 893 894 retry_scr: 895 data.dest = (char *)scr; 896 data.blocksize = 8; 897 data.blocks = 1; 898 data.flags = MMC_DATA_READ; 899 900 err = mmc_send_cmd(mmc, &cmd, &data); 901 902 if (err) { 903 if (timeout--) 904 goto retry_scr; 905 906 return err; 907 } 908 909 mmc->scr[0] = __be32_to_cpu(scr[0]); 910 mmc->scr[1] = __be32_to_cpu(scr[1]); 911 912 switch ((mmc->scr[0] >> 24) & 0xf) { 913 case 0: 914 mmc->version = SD_VERSION_1_0; 915 break; 916 case 1: 917 mmc->version = SD_VERSION_1_10; 918 break; 919 case 2: 920 mmc->version = SD_VERSION_2; 921 if ((mmc->scr[0] >> 15) & 0x1) 922 mmc->version = SD_VERSION_3; 923 break; 924 default: 925 mmc->version = SD_VERSION_1_0; 926 break; 927 } 928 929 if (mmc->scr[0] & SD_DATA_4BIT) 930 mmc->card_caps |= MMC_MODE_4BIT; 931 932 /* Version 1.0 doesn't support switching */ 933 if (mmc->version == SD_VERSION_1_0) 934 return 0; 935 936 timeout = 4; 937 while (timeout--) { 938 err = sd_switch(mmc, SD_SWITCH_CHECK, 0, 1, 939 (u8 *)switch_status); 940 941 if (err) 942 return err; 943 944 /* The high-speed function is busy. Try again */ 945 if (!(__be32_to_cpu(switch_status[7]) & SD_HIGHSPEED_BUSY)) 946 break; 947 } 948 949 /* If high-speed isn't supported, we return */ 950 if (!(__be32_to_cpu(switch_status[3]) & SD_HIGHSPEED_SUPPORTED)) 951 return 0; 952 953 /* 954 * If the host doesn't support SD_HIGHSPEED, do not switch card to 955 * HIGHSPEED mode even if the card support SD_HIGHSPPED. 956 * This can avoid furthur problem when the card runs in different 957 * mode between the host. 958 */ 959 if (!((mmc->cfg->host_caps & MMC_MODE_HS_52MHz) && 960 (mmc->cfg->host_caps & MMC_MODE_HS))) 961 return 0; 962 963 err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, 1, (u8 *)switch_status); 964 965 if (err) 966 return err; 967 968 if ((__be32_to_cpu(switch_status[4]) & 0x0f000000) == 0x01000000) 969 mmc->card_caps |= MMC_MODE_HS; 970 971 return 0; 972 } 973 974 /* frequency bases */ 975 /* divided by 10 to be nice to platforms without floating point */ 976 static const int fbase[] = { 977 10000, 978 100000, 979 1000000, 980 10000000, 981 }; 982 983 /* Multiplier values for TRAN_SPEED. Multiplied by 10 to be nice 984 * to platforms without floating point. 985 */ 986 static const int multipliers[] = { 987 0, /* reserved */ 988 10, 989 12, 990 13, 991 15, 992 20, 993 25, 994 30, 995 35, 996 40, 997 45, 998 50, 999 55, 1000 60, 1001 70, 1002 80, 1003 }; 1004 1005 static void mmc_set_ios(struct mmc *mmc) 1006 { 1007 if (mmc->cfg->ops->set_ios) 1008 mmc->cfg->ops->set_ios(mmc); 1009 } 1010 1011 void mmc_set_clock(struct mmc *mmc, uint clock) 1012 { 1013 if (clock > mmc->cfg->f_max) 1014 clock = mmc->cfg->f_max; 1015 1016 if (clock < mmc->cfg->f_min) 1017 clock = mmc->cfg->f_min; 1018 1019 mmc->clock = clock; 1020 1021 mmc_set_ios(mmc); 1022 } 1023 1024 static void mmc_set_bus_width(struct mmc *mmc, uint width) 1025 { 1026 mmc->bus_width = width; 1027 1028 mmc_set_ios(mmc); 1029 } 1030 1031 static int mmc_startup(struct mmc *mmc) 1032 { 1033 int err, i; 1034 uint mult, freq; 1035 u64 cmult, csize, capacity; 1036 struct mmc_cmd cmd; 1037 ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN); 1038 ALLOC_CACHE_ALIGN_BUFFER(u8, test_csd, MMC_MAX_BLOCK_LEN); 1039 int timeout = 1000; 1040 bool has_parts = false; 1041 bool part_completed; 1042 1043 #ifdef CONFIG_MMC_SPI_CRC_ON 1044 if (mmc_host_is_spi(mmc)) { /* enable CRC check for spi */ 1045 cmd.cmdidx = MMC_CMD_SPI_CRC_ON_OFF; 1046 cmd.resp_type = MMC_RSP_R1; 1047 cmd.cmdarg = 1; 1048 err = mmc_send_cmd(mmc, &cmd, NULL); 1049 1050 if (err) 1051 return err; 1052 } 1053 #endif 1054 1055 /* Put the Card in Identify Mode */ 1056 cmd.cmdidx = mmc_host_is_spi(mmc) ? MMC_CMD_SEND_CID : 1057 MMC_CMD_ALL_SEND_CID; /* cmd not supported in spi */ 1058 cmd.resp_type = MMC_RSP_R2; 1059 cmd.cmdarg = 0; 1060 1061 err = mmc_send_cmd(mmc, &cmd, NULL); 1062 1063 if (err) 1064 return err; 1065 1066 memcpy(mmc->cid, cmd.response, 16); 1067 1068 /* 1069 * For MMC cards, set the Relative Address. 1070 * For SD cards, get the Relatvie Address. 1071 * This also puts the cards into Standby State 1072 */ 1073 if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */ 1074 cmd.cmdidx = SD_CMD_SEND_RELATIVE_ADDR; 1075 cmd.cmdarg = mmc->rca << 16; 1076 cmd.resp_type = MMC_RSP_R6; 1077 1078 err = mmc_send_cmd(mmc, &cmd, NULL); 1079 1080 if (err) 1081 return err; 1082 1083 if (IS_SD(mmc)) 1084 mmc->rca = (cmd.response[0] >> 16) & 0xffff; 1085 } 1086 1087 /* Get the Card-Specific Data */ 1088 cmd.cmdidx = MMC_CMD_SEND_CSD; 1089 cmd.resp_type = MMC_RSP_R2; 1090 cmd.cmdarg = mmc->rca << 16; 1091 1092 err = mmc_send_cmd(mmc, &cmd, NULL); 1093 1094 /* Waiting for the ready status */ 1095 mmc_send_status(mmc, timeout); 1096 1097 if (err) 1098 return err; 1099 1100 mmc->csd[0] = cmd.response[0]; 1101 mmc->csd[1] = cmd.response[1]; 1102 mmc->csd[2] = cmd.response[2]; 1103 mmc->csd[3] = cmd.response[3]; 1104 1105 if (mmc->version == MMC_VERSION_UNKNOWN) { 1106 int version = (cmd.response[0] >> 26) & 0xf; 1107 1108 switch (version) { 1109 case 0: 1110 mmc->version = MMC_VERSION_1_2; 1111 break; 1112 case 1: 1113 mmc->version = MMC_VERSION_1_4; 1114 break; 1115 case 2: 1116 mmc->version = MMC_VERSION_2_2; 1117 break; 1118 case 3: 1119 mmc->version = MMC_VERSION_3; 1120 break; 1121 case 4: 1122 mmc->version = MMC_VERSION_4; 1123 break; 1124 default: 1125 mmc->version = MMC_VERSION_1_2; 1126 break; 1127 } 1128 } 1129 1130 /* divide frequency by 10, since the mults are 10x bigger */ 1131 freq = fbase[(cmd.response[0] & 0x7)]; 1132 mult = multipliers[((cmd.response[0] >> 3) & 0xf)]; 1133 1134 mmc->tran_speed = freq * mult; 1135 1136 mmc->dsr_imp = ((cmd.response[1] >> 12) & 0x1); 1137 mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf); 1138 1139 if (IS_SD(mmc)) 1140 mmc->write_bl_len = mmc->read_bl_len; 1141 else 1142 mmc->write_bl_len = 1 << ((cmd.response[3] >> 22) & 0xf); 1143 1144 if (mmc->high_capacity) { 1145 csize = (mmc->csd[1] & 0x3f) << 16 1146 | (mmc->csd[2] & 0xffff0000) >> 16; 1147 cmult = 8; 1148 } else { 1149 csize = (mmc->csd[1] & 0x3ff) << 2 1150 | (mmc->csd[2] & 0xc0000000) >> 30; 1151 cmult = (mmc->csd[2] & 0x00038000) >> 15; 1152 } 1153 1154 mmc->capacity_user = (csize + 1) << (cmult + 2); 1155 mmc->capacity_user *= mmc->read_bl_len; 1156 mmc->capacity_boot = 0; 1157 mmc->capacity_rpmb = 0; 1158 for (i = 0; i < 4; i++) 1159 mmc->capacity_gp[i] = 0; 1160 1161 if (mmc->read_bl_len > MMC_MAX_BLOCK_LEN) 1162 mmc->read_bl_len = MMC_MAX_BLOCK_LEN; 1163 1164 if (mmc->write_bl_len > MMC_MAX_BLOCK_LEN) 1165 mmc->write_bl_len = MMC_MAX_BLOCK_LEN; 1166 1167 if ((mmc->dsr_imp) && (0xffffffff != mmc->dsr)) { 1168 cmd.cmdidx = MMC_CMD_SET_DSR; 1169 cmd.cmdarg = (mmc->dsr & 0xffff) << 16; 1170 cmd.resp_type = MMC_RSP_NONE; 1171 if (mmc_send_cmd(mmc, &cmd, NULL)) 1172 printf("MMC: SET_DSR failed\n"); 1173 } 1174 1175 /* Select the card, and put it into Transfer Mode */ 1176 if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */ 1177 cmd.cmdidx = MMC_CMD_SELECT_CARD; 1178 cmd.resp_type = MMC_RSP_R1; 1179 cmd.cmdarg = mmc->rca << 16; 1180 err = mmc_send_cmd(mmc, &cmd, NULL); 1181 1182 if (err) 1183 return err; 1184 } 1185 1186 /* 1187 * For SD, its erase group is always one sector 1188 */ 1189 mmc->erase_grp_size = 1; 1190 mmc->part_config = MMCPART_NOAVAILABLE; 1191 if (!IS_SD(mmc) && (mmc->version >= MMC_VERSION_4)) { 1192 /* check ext_csd version and capacity */ 1193 err = mmc_send_ext_csd(mmc, ext_csd); 1194 if (err) 1195 return err; 1196 if (ext_csd[EXT_CSD_REV] >= 2) { 1197 /* 1198 * According to the JEDEC Standard, the value of 1199 * ext_csd's capacity is valid if the value is more 1200 * than 2GB 1201 */ 1202 capacity = ext_csd[EXT_CSD_SEC_CNT] << 0 1203 | ext_csd[EXT_CSD_SEC_CNT + 1] << 8 1204 | ext_csd[EXT_CSD_SEC_CNT + 2] << 16 1205 | ext_csd[EXT_CSD_SEC_CNT + 3] << 24; 1206 capacity *= MMC_MAX_BLOCK_LEN; 1207 if ((capacity >> 20) > 2 * 1024) 1208 mmc->capacity_user = capacity; 1209 } 1210 1211 switch (ext_csd[EXT_CSD_REV]) { 1212 case 1: 1213 mmc->version = MMC_VERSION_4_1; 1214 break; 1215 case 2: 1216 mmc->version = MMC_VERSION_4_2; 1217 break; 1218 case 3: 1219 mmc->version = MMC_VERSION_4_3; 1220 break; 1221 case 5: 1222 mmc->version = MMC_VERSION_4_41; 1223 break; 1224 case 6: 1225 mmc->version = MMC_VERSION_4_5; 1226 break; 1227 case 7: 1228 mmc->version = MMC_VERSION_5_0; 1229 break; 1230 } 1231 1232 /* The partition data may be non-zero but it is only 1233 * effective if PARTITION_SETTING_COMPLETED is set in 1234 * EXT_CSD, so ignore any data if this bit is not set, 1235 * except for enabling the high-capacity group size 1236 * definition (see below). */ 1237 part_completed = !!(ext_csd[EXT_CSD_PARTITION_SETTING] & 1238 EXT_CSD_PARTITION_SETTING_COMPLETED); 1239 1240 /* store the partition info of emmc */ 1241 mmc->part_support = ext_csd[EXT_CSD_PARTITIONING_SUPPORT]; 1242 if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) || 1243 ext_csd[EXT_CSD_BOOT_MULT]) 1244 mmc->part_config = ext_csd[EXT_CSD_PART_CONF]; 1245 if (part_completed && 1246 (ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & ENHNCD_SUPPORT)) 1247 mmc->part_attr = ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE]; 1248 1249 mmc->capacity_boot = ext_csd[EXT_CSD_BOOT_MULT] << 17; 1250 1251 mmc->capacity_rpmb = ext_csd[EXT_CSD_RPMB_MULT] << 17; 1252 1253 for (i = 0; i < 4; i++) { 1254 int idx = EXT_CSD_GP_SIZE_MULT + i * 3; 1255 uint mult = (ext_csd[idx + 2] << 16) + 1256 (ext_csd[idx + 1] << 8) + ext_csd[idx]; 1257 if (mult) 1258 has_parts = true; 1259 if (!part_completed) 1260 continue; 1261 mmc->capacity_gp[i] = mult; 1262 mmc->capacity_gp[i] *= 1263 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]; 1264 mmc->capacity_gp[i] *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE]; 1265 mmc->capacity_gp[i] <<= 19; 1266 } 1267 1268 if (part_completed) { 1269 mmc->enh_user_size = 1270 (ext_csd[EXT_CSD_ENH_SIZE_MULT+2] << 16) + 1271 (ext_csd[EXT_CSD_ENH_SIZE_MULT+1] << 8) + 1272 ext_csd[EXT_CSD_ENH_SIZE_MULT]; 1273 mmc->enh_user_size *= ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]; 1274 mmc->enh_user_size *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE]; 1275 mmc->enh_user_size <<= 19; 1276 mmc->enh_user_start = 1277 (ext_csd[EXT_CSD_ENH_START_ADDR+3] << 24) + 1278 (ext_csd[EXT_CSD_ENH_START_ADDR+2] << 16) + 1279 (ext_csd[EXT_CSD_ENH_START_ADDR+1] << 8) + 1280 ext_csd[EXT_CSD_ENH_START_ADDR]; 1281 if (mmc->high_capacity) 1282 mmc->enh_user_start <<= 9; 1283 } 1284 1285 /* 1286 * Host needs to enable ERASE_GRP_DEF bit if device is 1287 * partitioned. This bit will be lost every time after a reset 1288 * or power off. This will affect erase size. 1289 */ 1290 if (part_completed) 1291 has_parts = true; 1292 if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) && 1293 (ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE] & PART_ENH_ATTRIB)) 1294 has_parts = true; 1295 if (has_parts) { 1296 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, 1297 EXT_CSD_ERASE_GROUP_DEF, 1); 1298 1299 if (err) 1300 return err; 1301 else 1302 ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1; 1303 } 1304 1305 if (ext_csd[EXT_CSD_ERASE_GROUP_DEF] & 0x01) { 1306 /* Read out group size from ext_csd */ 1307 mmc->erase_grp_size = 1308 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 1024; 1309 /* 1310 * if high capacity and partition setting completed 1311 * SEC_COUNT is valid even if it is smaller than 2 GiB 1312 * JEDEC Standard JESD84-B45, 6.2.4 1313 */ 1314 if (mmc->high_capacity && part_completed) { 1315 capacity = (ext_csd[EXT_CSD_SEC_CNT]) | 1316 (ext_csd[EXT_CSD_SEC_CNT + 1] << 8) | 1317 (ext_csd[EXT_CSD_SEC_CNT + 2] << 16) | 1318 (ext_csd[EXT_CSD_SEC_CNT + 3] << 24); 1319 capacity *= MMC_MAX_BLOCK_LEN; 1320 mmc->capacity_user = capacity; 1321 } 1322 } else { 1323 /* Calculate the group size from the csd value. */ 1324 int erase_gsz, erase_gmul; 1325 erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10; 1326 erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5; 1327 mmc->erase_grp_size = (erase_gsz + 1) 1328 * (erase_gmul + 1); 1329 } 1330 1331 mmc->hc_wp_grp_size = 1024 1332 * ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] 1333 * ext_csd[EXT_CSD_HC_WP_GRP_SIZE]; 1334 1335 mmc->wr_rel_set = ext_csd[EXT_CSD_WR_REL_SET]; 1336 } 1337 1338 err = mmc_set_capacity(mmc, mmc->block_dev.hwpart); 1339 if (err) 1340 return err; 1341 1342 if (IS_SD(mmc)) 1343 err = sd_change_freq(mmc); 1344 else 1345 err = mmc_change_freq(mmc); 1346 1347 if (err) 1348 return err; 1349 1350 /* Restrict card's capabilities by what the host can do */ 1351 mmc->card_caps &= mmc->cfg->host_caps; 1352 1353 if (IS_SD(mmc)) { 1354 if (mmc->card_caps & MMC_MODE_4BIT) { 1355 cmd.cmdidx = MMC_CMD_APP_CMD; 1356 cmd.resp_type = MMC_RSP_R1; 1357 cmd.cmdarg = mmc->rca << 16; 1358 1359 err = mmc_send_cmd(mmc, &cmd, NULL); 1360 if (err) 1361 return err; 1362 1363 cmd.cmdidx = SD_CMD_APP_SET_BUS_WIDTH; 1364 cmd.resp_type = MMC_RSP_R1; 1365 cmd.cmdarg = 2; 1366 err = mmc_send_cmd(mmc, &cmd, NULL); 1367 if (err) 1368 return err; 1369 1370 mmc_set_bus_width(mmc, 4); 1371 } 1372 1373 if (mmc->card_caps & MMC_MODE_HS) 1374 mmc->tran_speed = 50000000; 1375 else 1376 mmc->tran_speed = 25000000; 1377 } else if (mmc->version >= MMC_VERSION_4) { 1378 /* Only version 4 of MMC supports wider bus widths */ 1379 int idx; 1380 1381 /* An array of possible bus widths in order of preference */ 1382 static unsigned ext_csd_bits[] = { 1383 EXT_CSD_DDR_BUS_WIDTH_8, 1384 EXT_CSD_DDR_BUS_WIDTH_4, 1385 EXT_CSD_BUS_WIDTH_8, 1386 EXT_CSD_BUS_WIDTH_4, 1387 EXT_CSD_BUS_WIDTH_1, 1388 }; 1389 1390 /* An array to map CSD bus widths to host cap bits */ 1391 static unsigned ext_to_hostcaps[] = { 1392 [EXT_CSD_DDR_BUS_WIDTH_4] = 1393 MMC_MODE_DDR_52MHz | MMC_MODE_4BIT, 1394 [EXT_CSD_DDR_BUS_WIDTH_8] = 1395 MMC_MODE_DDR_52MHz | MMC_MODE_8BIT, 1396 [EXT_CSD_BUS_WIDTH_4] = MMC_MODE_4BIT, 1397 [EXT_CSD_BUS_WIDTH_8] = MMC_MODE_8BIT, 1398 }; 1399 1400 /* An array to map chosen bus width to an integer */ 1401 static unsigned widths[] = { 1402 8, 4, 8, 4, 1, 1403 }; 1404 1405 for (idx=0; idx < ARRAY_SIZE(ext_csd_bits); idx++) { 1406 unsigned int extw = ext_csd_bits[idx]; 1407 unsigned int caps = ext_to_hostcaps[extw]; 1408 1409 /* 1410 * If the bus width is still not changed, 1411 * don't try to set the default again. 1412 * Otherwise, recover from switch attempts 1413 * by switching to 1-bit bus width. 1414 */ 1415 if (extw == EXT_CSD_BUS_WIDTH_1 && 1416 mmc->bus_width == 1) { 1417 err = 0; 1418 break; 1419 } 1420 1421 /* 1422 * Check to make sure the card and controller support 1423 * these capabilities 1424 */ 1425 if ((mmc->card_caps & caps) != caps) 1426 continue; 1427 1428 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, 1429 EXT_CSD_BUS_WIDTH, extw); 1430 1431 if (err) 1432 continue; 1433 1434 mmc->ddr_mode = (caps & MMC_MODE_DDR_52MHz) ? 1 : 0; 1435 mmc_set_bus_width(mmc, widths[idx]); 1436 1437 err = mmc_send_ext_csd(mmc, test_csd); 1438 1439 if (err) 1440 continue; 1441 1442 /* Only compare read only fields */ 1443 if (ext_csd[EXT_CSD_PARTITIONING_SUPPORT] 1444 == test_csd[EXT_CSD_PARTITIONING_SUPPORT] && 1445 ext_csd[EXT_CSD_HC_WP_GRP_SIZE] 1446 == test_csd[EXT_CSD_HC_WP_GRP_SIZE] && 1447 ext_csd[EXT_CSD_REV] 1448 == test_csd[EXT_CSD_REV] && 1449 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] 1450 == test_csd[EXT_CSD_HC_ERASE_GRP_SIZE] && 1451 memcmp(&ext_csd[EXT_CSD_SEC_CNT], 1452 &test_csd[EXT_CSD_SEC_CNT], 4) == 0) 1453 break; 1454 else 1455 err = SWITCH_ERR; 1456 } 1457 1458 if (err) 1459 return err; 1460 1461 if (mmc->card_caps & MMC_MODE_HS) { 1462 if (mmc->card_caps & MMC_MODE_HS_52MHz) 1463 mmc->tran_speed = 52000000; 1464 else 1465 mmc->tran_speed = 26000000; 1466 } 1467 } 1468 1469 mmc_set_clock(mmc, mmc->tran_speed); 1470 1471 /* Fix the block length for DDR mode */ 1472 if (mmc->ddr_mode) { 1473 mmc->read_bl_len = MMC_MAX_BLOCK_LEN; 1474 mmc->write_bl_len = MMC_MAX_BLOCK_LEN; 1475 } 1476 1477 /* fill in device description */ 1478 mmc->block_dev.lun = 0; 1479 mmc->block_dev.hwpart = 0; 1480 mmc->block_dev.type = 0; 1481 mmc->block_dev.blksz = mmc->read_bl_len; 1482 mmc->block_dev.log2blksz = LOG2(mmc->block_dev.blksz); 1483 mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len); 1484 #if !defined(CONFIG_SPL_BUILD) || \ 1485 (defined(CONFIG_SPL_LIBCOMMON_SUPPORT) && \ 1486 !defined(CONFIG_USE_TINY_PRINTF)) 1487 sprintf(mmc->block_dev.vendor, "Man %06x Snr %04x%04x", 1488 mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff), 1489 (mmc->cid[3] >> 16) & 0xffff); 1490 sprintf(mmc->block_dev.product, "%c%c%c%c%c%c", mmc->cid[0] & 0xff, 1491 (mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff, 1492 (mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff, 1493 (mmc->cid[2] >> 24) & 0xff); 1494 sprintf(mmc->block_dev.revision, "%d.%d", (mmc->cid[2] >> 20) & 0xf, 1495 (mmc->cid[2] >> 16) & 0xf); 1496 #else 1497 mmc->block_dev.vendor[0] = 0; 1498 mmc->block_dev.product[0] = 0; 1499 mmc->block_dev.revision[0] = 0; 1500 #endif 1501 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBDISK_SUPPORT) 1502 part_init(&mmc->block_dev); 1503 #endif 1504 1505 return 0; 1506 } 1507 1508 static int mmc_send_if_cond(struct mmc *mmc) 1509 { 1510 struct mmc_cmd cmd; 1511 int err; 1512 1513 cmd.cmdidx = SD_CMD_SEND_IF_COND; 1514 /* We set the bit if the host supports voltages between 2.7 and 3.6 V */ 1515 cmd.cmdarg = ((mmc->cfg->voltages & 0xff8000) != 0) << 8 | 0xaa; 1516 cmd.resp_type = MMC_RSP_R7; 1517 1518 err = mmc_send_cmd(mmc, &cmd, NULL); 1519 1520 if (err) 1521 return err; 1522 1523 if ((cmd.response[0] & 0xff) != 0xaa) 1524 return UNUSABLE_ERR; 1525 else 1526 mmc->version = SD_VERSION_2; 1527 1528 return 0; 1529 } 1530 1531 /* not used any more */ 1532 int __deprecated mmc_register(struct mmc *mmc) 1533 { 1534 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) 1535 printf("%s is deprecated! use mmc_create() instead.\n", __func__); 1536 #endif 1537 return -1; 1538 } 1539 1540 struct mmc *mmc_create(const struct mmc_config *cfg, void *priv) 1541 { 1542 struct mmc *mmc; 1543 1544 /* quick validation */ 1545 if (cfg == NULL || cfg->ops == NULL || cfg->ops->send_cmd == NULL || 1546 cfg->f_min == 0 || cfg->f_max == 0 || cfg->b_max == 0) 1547 return NULL; 1548 1549 mmc = calloc(1, sizeof(*mmc)); 1550 if (mmc == NULL) 1551 return NULL; 1552 1553 mmc->cfg = cfg; 1554 mmc->priv = priv; 1555 1556 /* the following chunk was mmc_register() */ 1557 1558 /* Setup dsr related values */ 1559 mmc->dsr_imp = 0; 1560 mmc->dsr = 0xffffffff; 1561 /* Setup the universal parts of the block interface just once */ 1562 mmc->block_dev.if_type = IF_TYPE_MMC; 1563 mmc->block_dev.devnum = cur_dev_num++; 1564 mmc->block_dev.removable = 1; 1565 mmc->block_dev.block_read = mmc_bread; 1566 mmc->block_dev.block_write = mmc_bwrite; 1567 mmc->block_dev.block_erase = mmc_berase; 1568 1569 /* setup initial part type */ 1570 mmc->block_dev.part_type = mmc->cfg->part_type; 1571 1572 INIT_LIST_HEAD(&mmc->link); 1573 1574 list_add_tail(&mmc->link, &mmc_devices); 1575 1576 return mmc; 1577 } 1578 1579 void mmc_destroy(struct mmc *mmc) 1580 { 1581 /* only freeing memory for now */ 1582 free(mmc); 1583 } 1584 1585 #ifdef CONFIG_PARTITIONS 1586 struct blk_desc *mmc_get_dev(int dev) 1587 { 1588 struct mmc *mmc = find_mmc_device(dev); 1589 if (!mmc || mmc_init(mmc)) 1590 return NULL; 1591 1592 return &mmc->block_dev; 1593 } 1594 #endif 1595 1596 /* board-specific MMC power initializations. */ 1597 __weak void board_mmc_power_init(void) 1598 { 1599 } 1600 1601 int mmc_start_init(struct mmc *mmc) 1602 { 1603 int err; 1604 1605 /* we pretend there's no card when init is NULL */ 1606 if (mmc_getcd(mmc) == 0 || mmc->cfg->ops->init == NULL) { 1607 mmc->has_init = 0; 1608 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) 1609 printf("MMC: no card present\n"); 1610 #endif 1611 return NO_CARD_ERR; 1612 } 1613 1614 if (mmc->has_init) 1615 return 0; 1616 1617 #ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT 1618 mmc_adapter_card_type_ident(); 1619 #endif 1620 board_mmc_power_init(); 1621 1622 /* made sure it's not NULL earlier */ 1623 err = mmc->cfg->ops->init(mmc); 1624 1625 if (err) 1626 return err; 1627 1628 mmc->ddr_mode = 0; 1629 mmc_set_bus_width(mmc, 1); 1630 mmc_set_clock(mmc, 1); 1631 1632 /* Reset the Card */ 1633 err = mmc_go_idle(mmc); 1634 1635 if (err) 1636 return err; 1637 1638 /* The internal partition reset to user partition(0) at every CMD0*/ 1639 mmc->block_dev.hwpart = 0; 1640 1641 /* Test for SD version 2 */ 1642 err = mmc_send_if_cond(mmc); 1643 1644 /* Now try to get the SD card's operating condition */ 1645 err = sd_send_op_cond(mmc); 1646 1647 /* If the command timed out, we check for an MMC card */ 1648 if (err == TIMEOUT) { 1649 err = mmc_send_op_cond(mmc); 1650 1651 if (err) { 1652 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) 1653 printf("Card did not respond to voltage select!\n"); 1654 #endif 1655 return UNUSABLE_ERR; 1656 } 1657 } 1658 1659 if (!err) 1660 mmc->init_in_progress = 1; 1661 1662 return err; 1663 } 1664 1665 static int mmc_complete_init(struct mmc *mmc) 1666 { 1667 int err = 0; 1668 1669 mmc->init_in_progress = 0; 1670 if (mmc->op_cond_pending) 1671 err = mmc_complete_op_cond(mmc); 1672 1673 if (!err) 1674 err = mmc_startup(mmc); 1675 if (err) 1676 mmc->has_init = 0; 1677 else 1678 mmc->has_init = 1; 1679 return err; 1680 } 1681 1682 int mmc_init(struct mmc *mmc) 1683 { 1684 int err = 0; 1685 unsigned start; 1686 1687 if (mmc->has_init) 1688 return 0; 1689 1690 start = get_timer(0); 1691 1692 if (!mmc->init_in_progress) 1693 err = mmc_start_init(mmc); 1694 1695 if (!err) 1696 err = mmc_complete_init(mmc); 1697 debug("%s: %d, time %lu\n", __func__, err, get_timer(start)); 1698 return err; 1699 } 1700 1701 int mmc_set_dsr(struct mmc *mmc, u16 val) 1702 { 1703 mmc->dsr = val; 1704 return 0; 1705 } 1706 1707 /* CPU-specific MMC initializations */ 1708 __weak int cpu_mmc_init(bd_t *bis) 1709 { 1710 return -1; 1711 } 1712 1713 /* board-specific MMC initializations. */ 1714 __weak int board_mmc_init(bd_t *bis) 1715 { 1716 return -1; 1717 } 1718 1719 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) 1720 1721 void print_mmc_devices(char separator) 1722 { 1723 struct mmc *m; 1724 struct list_head *entry; 1725 char *mmc_type; 1726 1727 list_for_each(entry, &mmc_devices) { 1728 m = list_entry(entry, struct mmc, link); 1729 1730 if (m->has_init) 1731 mmc_type = IS_SD(m) ? "SD" : "eMMC"; 1732 else 1733 mmc_type = NULL; 1734 1735 printf("%s: %d", m->cfg->name, m->block_dev.devnum); 1736 if (mmc_type) 1737 printf(" (%s)", mmc_type); 1738 1739 if (entry->next != &mmc_devices) { 1740 printf("%c", separator); 1741 if (separator != '\n') 1742 puts (" "); 1743 } 1744 } 1745 1746 printf("\n"); 1747 } 1748 1749 #else 1750 void print_mmc_devices(char separator) { } 1751 #endif 1752 1753 int get_mmc_num(void) 1754 { 1755 return cur_dev_num; 1756 } 1757 1758 void mmc_set_preinit(struct mmc *mmc, int preinit) 1759 { 1760 mmc->preinit = preinit; 1761 } 1762 1763 static void do_preinit(void) 1764 { 1765 struct mmc *m; 1766 struct list_head *entry; 1767 1768 list_for_each(entry, &mmc_devices) { 1769 m = list_entry(entry, struct mmc, link); 1770 1771 #ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT 1772 mmc_set_preinit(m, 1); 1773 #endif 1774 if (m->preinit) 1775 mmc_start_init(m); 1776 } 1777 } 1778 1779 #if defined(CONFIG_DM_MMC) && defined(CONFIG_SPL_BUILD) 1780 static int mmc_probe(bd_t *bis) 1781 { 1782 return 0; 1783 } 1784 #elif defined(CONFIG_DM_MMC) 1785 static int mmc_probe(bd_t *bis) 1786 { 1787 int ret, i; 1788 struct uclass *uc; 1789 struct udevice *dev; 1790 1791 ret = uclass_get(UCLASS_MMC, &uc); 1792 if (ret) 1793 return ret; 1794 1795 /* 1796 * Try to add them in sequence order. Really with driver model we 1797 * should allow holes, but the current MMC list does not allow that. 1798 * So if we request 0, 1, 3 we will get 0, 1, 2. 1799 */ 1800 for (i = 0; ; i++) { 1801 ret = uclass_get_device_by_seq(UCLASS_MMC, i, &dev); 1802 if (ret == -ENODEV) 1803 break; 1804 } 1805 uclass_foreach_dev(dev, uc) { 1806 ret = device_probe(dev); 1807 if (ret) 1808 printf("%s - probe failed: %d\n", dev->name, ret); 1809 } 1810 1811 return 0; 1812 } 1813 #else 1814 static int mmc_probe(bd_t *bis) 1815 { 1816 if (board_mmc_init(bis) < 0) 1817 cpu_mmc_init(bis); 1818 1819 return 0; 1820 } 1821 #endif 1822 1823 int mmc_initialize(bd_t *bis) 1824 { 1825 static int initialized = 0; 1826 int ret; 1827 if (initialized) /* Avoid initializing mmc multiple times */ 1828 return 0; 1829 initialized = 1; 1830 1831 INIT_LIST_HEAD (&mmc_devices); 1832 cur_dev_num = 0; 1833 1834 ret = mmc_probe(bis); 1835 if (ret) 1836 return ret; 1837 1838 #ifndef CONFIG_SPL_BUILD 1839 print_mmc_devices(','); 1840 #endif 1841 1842 do_preinit(); 1843 return 0; 1844 } 1845 1846 #ifdef CONFIG_SUPPORT_EMMC_BOOT 1847 /* 1848 * This function changes the size of boot partition and the size of rpmb 1849 * partition present on EMMC devices. 1850 * 1851 * Input Parameters: 1852 * struct *mmc: pointer for the mmc device strcuture 1853 * bootsize: size of boot partition 1854 * rpmbsize: size of rpmb partition 1855 * 1856 * Returns 0 on success. 1857 */ 1858 1859 int mmc_boot_partition_size_change(struct mmc *mmc, unsigned long bootsize, 1860 unsigned long rpmbsize) 1861 { 1862 int err; 1863 struct mmc_cmd cmd; 1864 1865 /* Only use this command for raw EMMC moviNAND. Enter backdoor mode */ 1866 cmd.cmdidx = MMC_CMD_RES_MAN; 1867 cmd.resp_type = MMC_RSP_R1b; 1868 cmd.cmdarg = MMC_CMD62_ARG1; 1869 1870 err = mmc_send_cmd(mmc, &cmd, NULL); 1871 if (err) { 1872 debug("mmc_boot_partition_size_change: Error1 = %d\n", err); 1873 return err; 1874 } 1875 1876 /* Boot partition changing mode */ 1877 cmd.cmdidx = MMC_CMD_RES_MAN; 1878 cmd.resp_type = MMC_RSP_R1b; 1879 cmd.cmdarg = MMC_CMD62_ARG2; 1880 1881 err = mmc_send_cmd(mmc, &cmd, NULL); 1882 if (err) { 1883 debug("mmc_boot_partition_size_change: Error2 = %d\n", err); 1884 return err; 1885 } 1886 /* boot partition size is multiple of 128KB */ 1887 bootsize = (bootsize * 1024) / 128; 1888 1889 /* Arg: boot partition size */ 1890 cmd.cmdidx = MMC_CMD_RES_MAN; 1891 cmd.resp_type = MMC_RSP_R1b; 1892 cmd.cmdarg = bootsize; 1893 1894 err = mmc_send_cmd(mmc, &cmd, NULL); 1895 if (err) { 1896 debug("mmc_boot_partition_size_change: Error3 = %d\n", err); 1897 return err; 1898 } 1899 /* RPMB partition size is multiple of 128KB */ 1900 rpmbsize = (rpmbsize * 1024) / 128; 1901 /* Arg: RPMB partition size */ 1902 cmd.cmdidx = MMC_CMD_RES_MAN; 1903 cmd.resp_type = MMC_RSP_R1b; 1904 cmd.cmdarg = rpmbsize; 1905 1906 err = mmc_send_cmd(mmc, &cmd, NULL); 1907 if (err) { 1908 debug("mmc_boot_partition_size_change: Error4 = %d\n", err); 1909 return err; 1910 } 1911 return 0; 1912 } 1913 1914 /* 1915 * Modify EXT_CSD[177] which is BOOT_BUS_WIDTH 1916 * based on the passed in values for BOOT_BUS_WIDTH, RESET_BOOT_BUS_WIDTH 1917 * and BOOT_MODE. 1918 * 1919 * Returns 0 on success. 1920 */ 1921 int mmc_set_boot_bus_width(struct mmc *mmc, u8 width, u8 reset, u8 mode) 1922 { 1923 int err; 1924 1925 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BOOT_BUS_WIDTH, 1926 EXT_CSD_BOOT_BUS_WIDTH_MODE(mode) | 1927 EXT_CSD_BOOT_BUS_WIDTH_RESET(reset) | 1928 EXT_CSD_BOOT_BUS_WIDTH_WIDTH(width)); 1929 1930 if (err) 1931 return err; 1932 return 0; 1933 } 1934 1935 /* 1936 * Modify EXT_CSD[179] which is PARTITION_CONFIG (formerly BOOT_CONFIG) 1937 * based on the passed in values for BOOT_ACK, BOOT_PARTITION_ENABLE and 1938 * PARTITION_ACCESS. 1939 * 1940 * Returns 0 on success. 1941 */ 1942 int mmc_set_part_conf(struct mmc *mmc, u8 ack, u8 part_num, u8 access) 1943 { 1944 int err; 1945 1946 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF, 1947 EXT_CSD_BOOT_ACK(ack) | 1948 EXT_CSD_BOOT_PART_NUM(part_num) | 1949 EXT_CSD_PARTITION_ACCESS(access)); 1950 1951 if (err) 1952 return err; 1953 return 0; 1954 } 1955 1956 /* 1957 * Modify EXT_CSD[162] which is RST_n_FUNCTION based on the given value 1958 * for enable. Note that this is a write-once field for non-zero values. 1959 * 1960 * Returns 0 on success. 1961 */ 1962 int mmc_set_rst_n_function(struct mmc *mmc, u8 enable) 1963 { 1964 return mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_RST_N_FUNCTION, 1965 enable); 1966 } 1967 #endif 1968